{"id":3436,"date":"2026-10-08T16:40:00","date_gmt":"2026-10-08T14:40:00","guid":{"rendered":"https:\/\/equilibriumpsychotherapy.net\/feelings-map\/"},"modified":"2026-11-02T15:00:46","modified_gmt":"2026-11-02T14:00:46","slug":"feelings-map","status":"publish","type":"post","link":"https:\/\/equilibriumpsychotherapy.net\/hr\/feelings-map\/","title":{"rendered":"The Feelings Map"},"content":{"rendered":"\n<style>\n\/* The accent is a light-background device. Inside a reversed-out panel it stops\n   being emphasis and becomes unreadable - coral on the Matrix closing panel\n   measured 2.0:1 - so the mark falls back to the panel's own text colour and\n   lets weight alone carry it. gOpen tags those panels .eq-ondark. *\/\n.eqp .eq-ondark .eqb{color:inherit}\n\/* House rule: bold emphasis is set in the article's own accent colour, so a\n   marked phrase belongs to the piece it sits in rather than importing a\n   site-wide highlight. v3-emph.js inserts a strong element of class eqb; theme() has\n   already declared --eqp-accent for this post. Italics deliberately stay ink,\n   and nothing inside a component that exists to make a line stand out is\n   coloured, because that is emphasis on emphasis. *\/\n.eqp .eqb{color:var(--eqp-accent)}\n\/* A separator between a short answer and the caveat that belongs on the same\n   line. Muted and given real air on both sides, so it reads as a mark between\n   two statements rather than as punctuation inside one. A dash cannot be used\n   here: the house rule bans em and en dashes, and wptexturize rewrites a spaced\n   hyphen into an en dash on render. *\/\n.eqp .eq-tld{color:var(--eqp-muted);padding:0 .58em;font-weight:400}\n\/* A short answer standing against the caveat on the same line. Same accent as\n   an emphasis mark, but a different class, because it is a label rather than a\n   mark inside a sentence and must not count against the emphasis budget. *\/\n.eqp .eq-ans{color:var(--eqp-accent)}\n.eqp .eq-ondark .eq-ans{color:inherit}\n:root{--eqp-accent:#00373e;--eqp-accent2:#005f8d;--eqp-muted:#8d9695;--eqp-dot:#cfdcdb;--eqp-line:#dde8e7;--eqp-line2:#c3d6d4;--eqp-gold:#b08d68;--eqp-body:#4a6665;--eqp-sel:#d7e6e4;--eqp-shadow:rgba(0,55,62,.16)}\n.eqp{--teal:#00373e;--navy:#0b1f30;--blue:#005f8d;--ink:#26302f;--muted:#8d9695;\n  --cream:#fbf6f1;--creamE:#ecdcc9;--mist:#f3f7f6;--mistE:#dde8e7;--amber:#b08d68}\n\n\/* ---- reading progress ---- *\/\n#eqp-rail{position:fixed;top:0;left:0;right:0;height:2px;z-index:9999;pointer-events:none;background:transparent}\n#eqp-rail i{display:block;height:100%;background:var(--eqp-accent);transform:scaleX(0);transform-origin:0 50%;\n  will-change:transform}\n@supports (animation-timeline:scroll()){\n  #eqp-rail i{animation:eqp-grow linear both;animation-timeline:scroll(root block)}\n}\n@keyframes eqp-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}\n\n\/* ---- part rail ---- *\/\n#eqp-parts{position:fixed;left:26px;top:50%;transform:translateY(-50%);z-index:60;display:none}\n@media(min-width:1280px){#eqp-parts{display:block}}\n#eqp-parts a{display:flex;align-items:center;gap:11px;padding:7px 0;text-decoration:none;color:inherit}\n#eqp-parts .dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:var(--eqp-dot);\n  transition:background .2s ease,transform .2s ease}\n#eqp-parts .lbl{white-space:nowrap;font:700 11px\/1 \"Work Sans\",sans-serif;letter-spacing:.1em;\n  text-transform:uppercase;color:var(--eqp-muted);opacity:0;transform:translateX(-4px);\n  transition:opacity .2s ease,transform .2s ease;pointer-events:none}\n#eqp-parts:hover .lbl{opacity:1;transform:none}\n#eqp-parts a:focus-visible .lbl{opacity:1;transform:none}\n#eqp-parts a.on .dot{background:var(--eqp-accent);transform:scale(1.45)}\n#eqp-parts a.on .lbl{color:var(--eqp-accent)}\n\n\/* ---- back to top ---- *\/\n#eqp-top{position:fixed;right:26px;bottom:26px;z-index:60;display:inline-flex;align-items:center;gap:8px;\n  padding:11px 17px;border-radius:999px;border:1.5px solid var(--eqp-line);background:#fff;\n  color:var(--eqp-accent);font:600 14px\/1 \"Work Sans\",sans-serif;cursor:pointer;\n  box-shadow:0 2px 14px var(--eqp-shadow);\n  opacity:0;visibility:hidden;transform:translateY(8px);\n  transition:opacity .25s ease,transform .25s ease,visibility .25s}\n#eqp-top.on{opacity:1;visibility:visible;transform:none}\n#eqp-top:hover{color:var(--eqp-accent2);border-color:var(--eqp-line2)}\n#eqp-top svg{width:13px;height:13px}\n\n\/* ---- scroll reveal ----\n   Gated on [data-eqp], which the script sets before any of these elements are\n   parsed. No script, no hiding: the article never depends on JS to be visible. *\/\n[data-eqp] .eq-rev{opacity:0;transform:translateY(12px);\n  transition:opacity .38s cubic-bezier(.22,.61,.36,1),transform .38s cubic-bezier(.22,.61,.36,1)}\n[data-eqp] .eq-rev.in{opacity:1;transform:none}\n\n\/* ---- drop cap ---- *\/\n.eq-drop::first-letter{float:left;font-family:\"Playfair Display\",Georgia,serif;font-weight:800;\n  font-size:4.4em;line-height:.84;margin:.06em .10em 0 0;color:var(--eqp-accent)}\n\n\/* ---- focus + selection, applied inside the article only ---- *\/\n.eqp ::selection{background:var(--eqp-sel);color:var(--eqp-accent)}\n\n@media(max-width:520px){\n  .eq-drop::first-letter{font-size:3.5em}\n  #eqp-top{right:14px;bottom:14px;padding:10px 14px}\n}\n@media(prefers-reduced-motion:reduce){\n  .eq-rev,#eqp-top,#eqp-parts .dot,#eqp-parts .lbl{transition:none!important}\n  .eq-rev{opacity:1!important;transform:none!important}\n  #eqp-rail i{animation:none!important}\n}\n\n\/* ---- print ---- *\/\n@media print{\n  #eqp-rail,#eqp-parts,#eqp-top{display:none!important}\n  .eq-rev{opacity:1!important;transform:none!important}\n  h2,h3{break-after:avoid;page-break-after:avoid}\n  a{text-decoration:none;color:#000}\n  .eqp{font-size:11pt}\n}\n\n\/* eq-phone-fixes-13oct:start (per post; same rules as the site-wide sweep fixes)\n   Three fixes for every post, from the 12 Oct sweeps.\n   1. The 2px reading-progress line (#eqp-rail) sat 24px below the top of the window,\n      because the block layout gives every child of the post a 24px top margin. It\n      crossed the text like a strikethrough. It now sits at the very top.\n   2. Phone: text inside boxes (evidence boxes, \"worth being clear about\", panels)\n      stayed at the fluid minimum, 14.6px, while plain paragraphs are lifted to 17px\n      by the eq-phone-fixes rule (which only reaches direct children). Figures keep\n      their own sizes.\n   3. Tablet (641 to 899px, and any touch screen above that): contents rows get the\n      same 44px tap height the phone rows already have (they were 19 to 26px),\n      including the part rows with no sub-items (.flat). *\/\n#eqp-rail{margin:0!important}\n@media (max-width:640px){\n  body.single-post .eqp .has-background p[style*=\"21px)\"]:not(figure p){font-size:17px!important;line-height:1.62!important}\n}\n@media (min-width:641px) and (max-width:899px),(min-width:641px) and (hover:none){\n  body .eqp .eq-toc li{margin:0}\n  body .eqp .eq-toc li a{display:block;box-sizing:border-box;min-height:44px;padding:10px 0}\n  body .eqp .eq-toc summary .ttl{padding:11px 0;margin:-11px 0}\n  body .eqp .eq-toc .flat > a{display:flex;align-items:center;box-sizing:border-box;min-height:44px}\n}\n\/* 13 Oct, Luka approved:\n   4. Contents box on phones and tablets: the 11px open arrow moves to the right edge of each\n      part row with a 44px tap area, so opening the subsections no longer competes with the\n      title link; the minutes line lines up under the title on phones.\n   5. Working with this panel on phones: both buttons full width, same pill shape, stacked\n      with an even gap; Book a session stays filled, Get in touch outlined. *\/\n@media (max-width:899px),(hover:none){\n  body .eqp .eq-toc details>summary{position:relative;padding-right:56px!important}\n  body .eqp .eq-toc details>summary .chev{position:absolute;right:0;top:calc(50% - 22px);width:16px;height:16px;padding:14px;box-sizing:content-box;margin:0!important}\n  body .eqp .eq-toc .flat{padding-right:56px!important}\n  body .eqp .eq-toc .flat > .chev{display:none!important}\n}\n@media (max-width:640px){\n  body .eqp .eq-toc details>summary .cnt,body .eqp .eq-toc .flat .cnt{padding-left:0!important}\n  body .eq-ondark .wp-block-buttons{display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:12px!important}\n  body .eq-ondark .wp-block-button{width:100%!important;margin:0!important}\n  body .eq-ondark .wp-block-button__link{display:flex!important;justify-content:center;align-items:center;width:100%!important;box-sizing:border-box;min-height:52px;border-radius:999px!important;text-align:center}\n}\n\/* eq-phone-fixes-13oct:end *\/\n\n<\/style><style>\n\/* ---- table of contents ---- *\/\n\/* Every contents link and every part-rail link lands its target flush against\n   the top edge of the window. There is no sticky header to clear, so this is\n   only air, but a heading jammed into the browser chrome reads as a page that\n   has jumped rather than one that has arrived. *\/\n.eqp [id]{scroll-margin-top:28px}\n\n\/* The border belongs to the container, not to details:last-of-type: as soon as\n   a part with no subsections is allowed to be a plain row, the last row can be\n   one of those and the list ends with no line under it. *\/\n.eq-toc{margin:0;border-bottom:1px solid var(--eqp-line)}\n.eq-toc details,.eq-toc .flat{border-top:1px solid var(--eqp-line);margin:0}\n.eq-toc summary,.eq-toc .flat{display:flex;align-items:baseline;gap:15px;padding:17px 2px;\n  cursor:pointer;list-style:none;transition:color .18s ease}\n.eq-toc summary::-webkit-details-marker{display:none}\n.eq-toc summary:hover,.eq-toc .flat:hover{color:var(--eqp-accent2)}\n.eq-toc summary:focus-visible{outline:2px solid var(--eqp-accent2);outline-offset:3px;border-radius:5px}\n.eq-toc .num{flex:0 0 auto;font:700 12px\/1 \"Work Sans\",sans-serif;letter-spacing:.13em;color:var(--eqp-gold);\n  min-width:56px;font-variant-numeric:tabular-nums}\n\/* A part with no subsections keeps the chevron's footprint but not the chevron,\n   so every PART number stays on the same vertical line. *\/\n.eq-toc .chev.hide{visibility:hidden}\n.eq-toc .ttl{flex:1 1 auto;font:700 19px\/1.3 \"Work Sans\",sans-serif;color:var(--eqp-accent);\n  text-decoration:none;border-bottom:1px solid transparent;\n  transition:color .18s ease,border-color .18s ease}\n.eq-toc .ttl:hover{color:var(--eqp-accent2);border-bottom-color:var(--eqp-line2)}\n.eq-toc .ttl:focus-visible{outline:2px solid var(--eqp-accent2);outline-offset:2px;border-radius:3px}\n.eq-toc .cnt{flex:0 0 auto;font:400 13.5px\/1 \"Work Sans\",sans-serif;color:var(--eqp-muted);\n  font-variant-numeric:tabular-nums;white-space:nowrap}\n.eq-toc .chev{flex:0 0 auto;width:11px;height:11px;transition:transform .22s ease;color:var(--eqp-muted)}\n.eq-toc details[open] .chev{transform:rotate(90deg)}\n.eq-toc details[open] .ttl{color:var(--eqp-accent2)}\n.eq-toc ul{list-style:none;margin:0;padding:0 0 16px 71px}\n.eq-toc li{margin:0 0 9px}\n.eq-toc li a{font:400 15.5px\/1.5 \"Work Sans\",sans-serif;color:var(--eqp-body);text-decoration:none;\n  border-bottom:1px solid transparent;transition:color .18s ease,border-color .18s ease}\n.eq-toc li a:hover{color:var(--eqp-accent2);border-bottom-color:var(--eqp-line2)}\n.eq-toc li a:focus-visible{outline:2px solid var(--eqp-accent2);outline-offset:2px;border-radius:3px}\n\n@media(max-width:820px){\n  .eq-toc ul{padding-left:56px}\n  .eq-toc .sec,.eq-toc .sep{display:none}\n  .eq-toc .num{min-width:44px}\n}\n@media(prefers-reduced-motion:reduce){\n  .eq-toc .chev{transition:none!important}\n}\n@media print{\n  .eq-toc details{border-color:#bbb}\n  .eq-toc ul{display:block!important}\n}\n<\/style><style>:root{--eqp-accent:#1c5a4f;--eqp-accent2:#123f38;--eqp-muted:#6b6259;--eqp-dot:#cbdcd6;--eqp-line:#e8e1d5;--eqp-line2:#ebe4d6;--eqp-gold:#6b6259;--eqp-body:#4a433c;--eqp-sel:#d6e6e0;--eqp-shadow:rgba(45,40,35,.12)}<\/style><style>\n\/* ---- house pieces this post shares with every Essay ---- *\/\n.eqp .eq-subtitle{text-transform:uppercase}\n.eqp .eqb{color:#8a5008}\n.eqp strong{color:#8a5008}\n.eqp .fm-lead a,.eqp .fm-fig a,.eqp .fm-pn a{color:#8a5008;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px;text-decoration-color:#e6cd9c}\n.eqp .fm-lead a:hover,.eqp .fm-fig a:hover,.eqp .fm-pn a:hover{color:#5f3505}\n\n\/* ---- the part head: outlined Playfair numeral, sentence-case label, title over a hairline ---- *\/\n.eqp .fm-part{display:flex;align-items:center;gap:22px;padding:0 0 16px;border-bottom:1.5px solid #ebe4d6}\n.eqp .fm-part .no{flex:0 0 auto;font-family:\"Playfair Display\",Georgia,serif;font-weight:800;\n  font-size:clamp(46px,6vw,64px);line-height:.85;color:#ecf5f4;\n  -webkit-text-stroke:1.5px #1c5a4f;font-variant-numeric:tabular-nums}\n.eqp .fm-part .tx{min-width:0}\n.eqp .fm-part .lb{font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#6b6259;margin:0 0 6px}\n.eqp .fm-part h2{font-family:\"Playfair Display\",Georgia,serif!important;font-size:clamp(24px,2.6vw,28px);\n  font-weight:700;line-height:1.22;color:#2a2622;margin:0}\n@media(max-width:560px){.eqp .fm-part{gap:15px}.eqp .fm-part .no{font-size:40px}}\n.eqp .fm-part h2:focus{outline:none}\n\n\/* ---- the contents list on a phone (the shared fix from the other Essays) ---- *\/\n@media(max-width:560px){\n  .eqp .eq-toc summary,.eqp .eq-toc .flat{flex-wrap:wrap;row-gap:6px;column-gap:15px}\n  .eqp .eq-toc .num{min-width:0;flex:1 1 auto}\n  .eqp .eq-toc .ttl{order:3;flex:1 1 100%;padding-left:26px}\n  .eqp .eq-toc .cnt{order:4;flex:1 1 100%;padding-left:26px}\n  .eqp .eq-toc ul{padding-left:26px}\n}\n.eqp .eq-toc .flat.fm-way .cnt{display:none}\n\n\/* ---- the part rail must not catch taps meant for the page ----\n   The rail's links are as wide as their hidden labels, so at 1280 the invisible box sat over the left edge of the\n   figures at mid-screen and swallowed taps on the first chips. Only the dots take pointer events; the labels never did. *\/\n#eqp-parts{pointer-events:none}\n#eqp-parts .dot{pointer-events:auto}\n\n\/* ---- tap targets below 900px: a 44px hit area on the house links, with no change to how anything sits ---- *\/\n@media(max-width:899px){\n  .eqp .wp-block-post-terms a{display:inline-block;padding:13px 0;margin:-13px 0}\n  body .eqp .eq-toc li{margin:0}\n  body .eqp .eq-toc li a{display:block;box-sizing:border-box;min-height:44px;padding:10px 0}\n  body .eqp .eq-toc summary .ttl,body .eqp .eq-toc .flat .ttl{padding:11px 0;margin:-11px 0}\n  .eqp ol.wp-block-list li a{display:inline-block;vertical-align:top;box-sizing:border-box;padding:10px 0;margin:-10px 0}\n}\n\n\/* ---- panels: the evidence, caveat and provenance boxes, narrow text in a wide box ---- *\/\n.eqp .fm-pn>*{max-width:800px}\n.eqp .fm-pn h3{font-family:\"Work Sans\",system-ui,sans-serif!important;font-weight:700;font-size:clamp(20px,2.2vw,23px);line-height:1.3;color:#2a2622;margin:0 0 14px}\n.eqp .fm-pn p a{font-weight:400}\n.eqp .fm-pn .fm-small{font-size:16px;color:#6b6259}\n\n\/* ---- the closing run (push 23) ----\n   \"Using it with someone else\" ends Part 4 as plain prose; \"Why bother\" is plain prose under one hairline (the part-head rule colour, so no new hue);\n   \"Where this map comes from\" is the one boxed note; the help note is the page's own .fm-warn. Box text sits on the prose line (58px inset) at 1000px and up,\n   and on a phone the boxes take 22px padding and the body's own size. *\/\n.eqp .fm-prose a{color:#8a5008;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px;text-decoration-color:#e6cd9c}\n.eqp .fm-prose a:hover{color:#5f3505}\n.eqp .fm-pn>*{margin-left:0!important;margin-right:auto!important}\n.eqp .fm-pn.fm-warn{margin-top:46px;padding:20px 58px 20px 54px}\n@media(max-width:999px){\n  .eqp .fm-pn:not(.fm-warn){padding-left:38px!important;padding-right:38px!important}\n  .eqp .fm-pn.fm-warn{padding-left:30px;padding-right:30px}\n}\n@media(max-width:640px){\n  .eqp .fm-pn:not(.fm-warn){padding:26px 22px!important}\n  .eqp .fm-pn.fm-warn{padding:18px 20px 18px 18px}\n  .eqp .fm-pn p[style*=\"19.5px\"]{font-size:17px!important;line-height:1.62!important}\n  .eqp .fm-pn h3{font-size:19.5px!important}\n}\n\n\/* ---- figures: one chrome for the whole tool ---- *\/\n.eqp .fm-fig{margin:0;color:#2a2622;font-family:\"Work Sans\",system-ui,-apple-system,\"Segoe UI\",Roboto,Arial,sans-serif;font-size:17px;line-height:1.6}\n.eqp .fm-fig *,.eqp .fm-fig *::before,.eqp .fm-fig *::after{box-sizing:border-box}\n.eqp .fm-fig p{margin:0}\n:where(.eqp .fm-fig) button,:where(.eqp .fm-fig) select,:where(.eqp .fm-fig) input{font-family:inherit;font-size:inherit;color:inherit}\n.eqp .fm-fig button{cursor:pointer}\n.eqp .fm-fig :focus-visible,.eqp .fm-pn :focus-visible{outline:3px solid #123f38;outline-offset:2px;box-shadow:0 0 0 2px #fff}\n.eqp .fm-vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n\/* the series line above the title (the pattern of Too Afraid to Ask, post 2981): a short rule and a tracked uppercase label, plain text *\/\n.eqp .ra-series{display:flex;align-items:center;gap:14px;font-family:\"Work Sans\",sans-serif!important;font-weight:700!important;letter-spacing:.2em!important;text-transform:uppercase}\n.eqp .ra-series::before{content:\"\";flex:0 0 auto;display:block;width:46px;height:2px;background:#b9d1c9}\n@media(max-width:560px){.eqp .ra-series{gap:10px}.eqp .ra-series::before{width:28px}}\n.eqp .fm-lbl{font:700 12px\/1.4 \"Work Sans\",system-ui,sans-serif;letter-spacing:.16em;text-transform:uppercase;color:#123f38}\n.eqp .fm-lbl.warm{color:#8a5008}\n.eqp .fm-small{font-size:15.5px;color:#6b6259}\n.eqp .fm-empty{color:#6b6259;max-width:46em}\n.eqp .fm-empty a{font-weight:600}\n.eqp .fm-fig figcaption{font-size:15.5px;line-height:1.6;color:#6b6259;margin:16px 0 0}\n\n\/* ---- figure two: the words ---- *\/\n.eqp .fm-thiscore{font-size:15.5px;color:#6b6259;margin:0 0 4px}\n.eqp .fm-chips{display:flex;flex-wrap:wrap;gap:9px;margin:12px 0 6px}\n.eqp .fm-chip{min-height:46px;padding:10px 18px;background:#fff;border:1.5px solid #b9d1c9;border-radius:9px;color:#1c5a4f;font-weight:600;font-size:16px;line-height:1.2;transition:background .16s ease,border-color .16s ease}\n.eqp .fm-chip:hover{background:#f2f5f7}\n.eqp .fm-chip[aria-pressed=\"true\"]{background:#1c5a4f;border-color:#1c5a4f;color:#fff}\n.eqp .fm-chips.warm .fm-chip{border-color:#e6cd9c;color:#8a5008}\n.eqp .fm-chips.warm .fm-chip:hover{background:#fbf4e6}\n.eqp .fm-chips.warm .fm-chip[aria-pressed=\"true\"]{background:#8a5008;border-color:#8a5008;color:#fff}\n.eqp .fm-selectwrap{display:none;margin:14px 0 4px}\n.eqp .fm-selectwrap label{display:block;font:700 12px\/1.3 \"Work Sans\",system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:#123f38;margin-bottom:7px}\n.eqp .fm-select{width:100%;height:52px;padding:0 44px 0 14px;border:1.5px solid #1c5a4f;background:#fff url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='10' viewBox='0 0 16 10'%3E%3Cpath d='M2 2l6 6 6-6' fill='none' stroke='%231c5a4f' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\") no-repeat right 14px center;-webkit-appearance:none;appearance:none;border-radius:9px;font-size:17px;color:#2a2622}\n.eqp .fm-link{background:none;border:0;padding:10px 0;min-height:44px;color:#8a5008;font-weight:600;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px;text-decoration-color:#e6cd9c;text-align:left}\n.eqp .fm-link:hover{color:#5f3505}\n@media(max-width:640px){\n  .eqp .fm-chips.swap{display:none}\n  .eqp .fm-selectwrap.swap{display:block}\n}\n\/* the feeling card: the house card treatment, a warm paper ground and a hairline with an accent spine, as on the read-next card *\/\n.eqp .fm-card{margin-top:26px;background:#faf8f3;border:1.5px solid #e8e1d5;border-left:5px solid #1c5a4f;border-radius:20px;padding:30px 34px 26px;scroll-margin-top:16px}\n.eqp .fm-card:focus{outline:none}\n.eqp .fm-card h3{font-family:\"Work Sans\",system-ui,sans-serif!important;font-weight:700;font-size:clamp(28px,4vw,34px);line-height:1.2!important;color:#1c5a4f;margin:0 0 6px}\n.eqp .fm-card h3:focus{outline:none}\n.eqp .fm-pos{font-size:15.5px;color:#6b6259;margin:0}\n.eqp .fm-corel{margin:2px 0 18px}\n.eqp .fm-what{font-size:1.125rem;line-height:1.6;margin:0 0 10px;color:#2a2622}\n.eqp .fm-fig p.fm-tell{margin:14px 0 0}\n.eqp .fm-mini{width:72px;height:72px;display:block}\n.eqp .fm-acc{margin-top:20px}\n.eqp .fm-sec{width:100%;min-height:48px;display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:left;margin-top:8px;padding:10px 16px;background:#fff;border:1.5px solid #b9d1c9;border-radius:12px;color:#123f38;font-weight:600;font-size:17px;line-height:1.3;transition:background .16s ease}\n.eqp .fm-sec:hover{background:#f2f5f7}\n.eqp .fm-sec.open{background:#ecf5f4;border-bottom-left-radius:0;border-bottom-right-radius:0}\n.eqp .fm-secmark::after{content:\"+\";font-size:24px;line-height:1;color:#8a5008;font-weight:400}\n.eqp .fm-sec.open .fm-secmark::after{content:\"\\2212\"}\n.eqp .fm-panel{margin:0;padding:16px 18px 6px;background:#fff;border:1.5px solid #b9d1c9;border-top:0;border-radius:0 0 12px 12px}\n.eqp .fm-panel[hidden]{display:none}\n.eqp .fm-panel p{margin:0 0 12px;font-size:17px;line-height:1.6}\n.eqp .fm-panel p.fm-lbl{margin:0 0 6px;font-size:12px;line-height:1.4}\n.eqp .fm-panel p.fm-pos{font-size:15.5px;margin:0}\n.eqp .fm-bp{display:grid;gap:12px}\n@media(min-width:480px){.eqp .fm-bp{grid-template-columns:1fr 92px;gap:20px}}\n.eqp .fm-minibody{width:76px;justify-self:start}\n.eqp .fm-minibody svg{display:block;width:76px;height:auto}\n@media(min-width:480px){.eqp .fm-minibody{justify-self:end}}\n.eqp .fm-evid{margin-top:10px;font-size:15.5px!important;color:#6b6259;line-height:1.5!important}\n.eqp .fm-evid b{display:inline-block;margin-right:6px;padding:1px 9px;font:700 12px\/1.6 \"Work Sans\",system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;background:#fff;color:#123f38;border:1px solid #b9d1c9;border-radius:999px}\n.eqp .fm-evid b.d{background:#faf8f3;color:#4a433c;border-color:#ebe4d6}\n.eqp .fm-plinks{margin:2px 0 8px!important;display:flex;flex-wrap:wrap;gap:0 24px}\n.eqp .fm-conf{list-style:none;margin:0 0 6px;padding:0;display:grid;gap:12px}\n.eqp .fm-conf li{display:grid;gap:2px;margin:0}\n.eqp .fm-conf .nm{font-weight:700;color:#123f38}\n.eqp .fm-conf button.nm{background:none;border:0;padding:0;min-height:44px;text-align:left;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px;text-decoration-color:#b9d1c9;color:#123f38;display:inline-flex;align-items:center;justify-self:start}\n.eqp .fm-where{margin-top:10px;padding-top:14px;border-top:1px solid #e8e1d5}\n.eqp .fm-whrow{display:flex;gap:16px;align-items:center;padding-bottom:6px}\n.eqp .fm-panel .fm-try{background:#fbeed8;border:0;border-left:4px solid #8a5008;border-radius:4px 18px 18px 4px;padding:16px 20px 4px;margin:0 0 14px}\n.eqp .fm-care{margin-top:18px;padding:18px 22px;background:#fbf4e6;border:1.5px solid #eedcb9;border-radius:14px}\n.eqp .fm-care p+p{margin-top:8px}\n.eqp .fm-sentence{margin:0 0 12px;font-size:16px!important;color:#6b6259}\n.eqp .fm-sentence em{font-style:normal;color:#2a2622;font-weight:600}\n.eqp .fm-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}\n.eqp .fm-btn{min-height:48px;padding:10px 20px;border:1.5px solid #1c5a4f;background:#1c5a4f;color:#fff;border-radius:9px;font-weight:600;font-size:16px;line-height:1.2;transition:background .16s ease}\n.eqp .fm-btn:hover{background:#123f38}\n.eqp .fm-btn.ghost{background:#fff;color:#1c5a4f;border-color:#b9d1c9}\n.eqp .fm-btn.ghost:hover{background:#f2f5f7}\n.eqp .fm-btn.danger{border-color:#8a5008;color:#8a5008;background:#fff}\n.eqp .fm-btn.danger:hover{background:#fbeed8}\n.eqp .fm-btn:disabled{opacity:1;cursor:default}\n\/* the download card: the same .fm-btn, on a link *\/\n.eqp a.fm-btn{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;color:#fff;text-decoration:none}\n.eqp a.fm-btn:hover{color:#fff}\n.eqp .fm-thiscore .fm-tc{color:#123f38}\n.eqp #changeWord{display:none}\n@media(min-width:641px){\n  .eqp .fm-words .folded .fm-chips{display:none}\n  .eqp .fm-words .folded #moreWords{display:none}\n  .eqp .fm-words .folded #changeWord{display:inline-flex;align-items:center}\n}\n.eqp .fm-in{animation:fmin .28s cubic-bezier(.22,.61,.36,1)}\n@keyframes fmin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}\n@media(max-width:640px){.eqp .fm-card{padding:22px 20px 20px}}\n\n\/* ---- figure three: the body ---- *\/\n\/* From 641px the body is a field of dots on a canvas, and a tap anywhere on it leaves a mark. The mark chooses the area under it, through\n   the same tap shapes as before (an invisible svg laid over the canvas). Below 641px there is no canvas: the seven area buttons are the list,\n   beside a small still figure. The area buttons are always real buttons; from 641px they are visually hidden and drive the figure's focus ring. *\/\n.eqp .fm-s3{display:grid;gap:22px}\n@media(min-width:641px){.eqp .fm-s3{grid-template-columns:270px minmax(0,1fr);gap:30px;align-items:start}}\n@media(min-width:900px){.eqp .fm-s3{grid-template-columns:300px minmax(0,1fr);gap:52px}}\n.eqp .fm-figure{margin:0;width:100%;min-width:0}\n@media(min-width:641px){.eqp .fm-figure{max-width:270px}}\n@media(min-width:900px){.eqp .fm-figure{max-width:300px}}\n.eqp .fm-figure figcaption{font-size:15.5px;line-height:1.5;color:#6b6259;margin-top:12px;min-height:3em}\n\/* the stage: a canvas for the dots, and over it the svg with the tap shapes and the marks *\/\n.eqp .fm-stage{position:relative;width:100%;aspect-ratio:260\/634;overflow:hidden;border-radius:18px}\n.eqp .fm-stagein{position:absolute;inset:0}\n.eqp .fm-pcv{position:absolute;inset:0;width:100%;height:100%;display:block}\n.eqp .fm-stage svg{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:manipulation;overflow:visible}\n.eqp .fm-hit{fill:transparent;cursor:crosshair;-webkit-tap-highlight-color:transparent}\n\/* a mark: a deep teal ring over the teal dots; its round target (44 px across) removes it, and the ring thickens under the pointer *\/\n.eqp .fm-mk{pointer-events:none}\n.eqp .fm-mk .rg{fill:none;stroke:#123f38;stroke-width:1.8px;vector-effect:non-scaling-stroke}\n.eqp .fm-mk .ct{fill:#123f38}\n.eqp .fm-mk:hover .rg{stroke-width:2.8px}\n.eqp .fm-mkhit{fill:transparent;pointer-events:auto;cursor:pointer;-webkit-tap-highlight-color:transparent}\n\/* the small still figure (cards, and the phone list); the area fills and hairlines of the svg figure *\/\n.eqp .fm-sil{fill:#ece3d3;stroke:none}\n.eqp .fm-rim{fill:none;stroke:#9c8f7a;stroke-width:1.6px;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}\n.eqp .fm-reg{fill:transparent;stroke:none;pointer-events:none}\n.eqp .fm-reg.face{fill:rgba(255,255,255,.22)}\n.eqp .fm-reg.mark{fill:rgba(247,214,150,.32)}\n.eqp .fm-reg.on{fill:#3d7a6e}\n.eqp .fm-regl{fill:none;stroke:rgba(107,98,89,.27);stroke-width:1px;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none}\n.eqp .fm-regl.on{stroke:#123f38;stroke-width:2px}\n.eqp .fm-glow{pointer-events:none}\n.eqp .fm-minibody .fm-regl{stroke:none}\n.eqp .fm-minifig svg{display:block;width:100%;height:auto}\n\/* the area buttons: the phone's list below 641px; visually hidden from 641px, for keyboards and screen readers *\/\n.eqp .fm-phonepick{display:grid;grid-template-columns:76px minmax(0,1fr);gap:14px;align-items:start}\n.eqp .fm-regionlist{display:grid;gap:8px;align-content:start}\n.eqp .fm-rbtn{display:grid;text-align:left;padding:8px 16px;min-height:52px;align-content:center;background:#faf8f3;border:1.5px solid #ebe4d6;border-radius:12px;line-height:1.3}\n.eqp .fm-rbtn span{font-size:15px;color:#6b6259}\n.eqp .fm-rbtn b{color:#2a2622}\n.eqp .fm-rbtn[aria-pressed=\"true\"]{background:#1c5a4f;border-color:#1c5a4f}\n.eqp .fm-rbtn[aria-pressed=\"true\"] b{color:#fff}\n@media(max-width:640px){.eqp .fm-rbtn span{display:none}.eqp .fm-stage,.eqp .fm-markchips{display:none!important}.eqp .fm-figure figcaption{min-height:0}.eqp .fm-wide{display:none}}\n@media(min-width:641px){\n  .eqp .fm-phonepick{display:block}\n  .eqp .fm-minifig{display:none}\n  .eqp .fm-narrow{display:none}\n  .eqp .fm-regionlist{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}\n}\n\/* under the figure: \"all over\" (a toggle) and Clear areas *\/\n.eqp .fm-bodyacts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;margin-top:6px}\n.eqp .fm-bodyacts [hidden]{display:none!important}\n.eqp .fm-bodyacts .fm-chip{min-height:44px;padding:8px 16px}\n\/* the chosen areas, one chip each with a cross that removes it (from 641px; on phones the area list does this) *\/\n.eqp .fm-markchips{margin:4px 0 6px;gap:8px}\n.eqp .fm-markchips[hidden]{display:none}\n.eqp .fm-markchips .fm-chip{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:8px 12px 8px 14px}\n.eqp .fm-markchips .fm-x{font-size:19px;line-height:1;font-weight:400;color:#6b6259}\n.eqp .fm-markchips .fm-chip:hover .fm-x{color:#1c5a4f}\n\/* each area keeps its own sensations: the summary pair for a chosen area (from 641px), the phone's select under each chosen area, a close row's quieter line *\/\n.eqp .fm-mkc{display:inline-flex;align-items:stretch}\n.eqp .fm-markchips .fm-mkc .fm-mksum{border-radius:9px 0 0 9px;padding:8px 14px}\n.eqp .fm-markchips .fm-mkc .fm-mkx{border-radius:0 9px 9px 0;border-left-width:0;min-width:44px;padding:8px 10px;justify-content:center;gap:0}\n.eqp .fm-markchips .fm-mkc .fm-mksum[aria-pressed=\"true\"]+.fm-mkx{border-color:#1c5a4f}\n.eqp .fm-markchips .fm-mkc .fm-mksum:hover{background:#f2f5f7}\n.eqp .fm-markchips .fm-mkc .fm-mksum[aria-pressed=\"true\"]:hover{background:#1c5a4f}\n@media(max-width:640px){\n  .eqp .fm-selectwrap.fm-areasel{display:block;margin:0 0 8px}\n  .eqp .fm-sensq[data-mode=\"area\"]{display:none}\n}\n.eqp .fm-side3{min-width:0;display:grid;grid-template-columns:minmax(0,1fr);gap:26px}\n.eqp .fm-results h3{font-family:\"Work Sans\",system-ui,sans-serif!important;font-size:23px;font-weight:700;line-height:1.3!important;color:#1c5a4f;margin:0;scroll-margin-top:20px}\n.eqp .fm-results h3:focus{outline:none}\n\/* \"What's it like there?\": chips from 641px, the labelled select below; only sensations that return feelings for the chosen areas are offered *\/\n.eqp .fm-sensq{margin:14px 0 4px}\n.eqp .fm-sensdesk .fm-lbl{margin:0}\n.eqp .fm-sensdesk .fm-chips{margin:10px 0 0}\n@media(max-width:640px){.eqp .fm-sensdesk.swap{display:none}}\n.eqp #resLine{margin:14px 0 0}\n\/* result groups: a small label, then a wrapped set of lowercase feeling names (the post's own chips). A set of more than 8 gets its own \"Show all\", and on a phone a labelled select. *\/\n.eqp .fm-rows{margin:12px 0 4px}\n.eqp .fm-rows .fm-grp{font-family:\"Work Sans\",system-ui,sans-serif!important;font-size:12px!important;line-height:1.4!important;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#123f38;margin:22px 0 9px!important;padding:0}\n.eqp .fm-rows .fm-grp:first-child{margin-top:4px!important}\n.eqp .fm-rows .fm-chips{margin:0 0 2px}\n.eqp .fm-rows .fm-selectwrap.fm-ressel{margin:0 0 2px}\n.eqp .fm-rows .fm-resmore{margin-top:4px}\n@media(max-width:640px){.eqp .fm-rows .fm-resmore{display:none}}\n.eqp .fm-warn{margin-top:14px;padding:16px 22px;background:#fbeed8;border-left:4px solid #8a5008;border-radius:4px 18px 18px 4px;font-size:16.5px;line-height:1.55}\n.eqp .fm-note{margin-top:8px;border:1.5px solid #eedcb9;background:#fbf4e6;border-radius:20px}\n.eqp .fm-note summary{list-style:none;cursor:pointer;min-height:52px;padding:12px 24px;font:700 12px\/1.4 \"Work Sans\",system-ui,sans-serif;letter-spacing:.16em;text-transform:uppercase;color:#123f38;display:flex;align-items:center;justify-content:space-between;gap:12px}\n.eqp .fm-note summary::-webkit-details-marker{display:none}\n.eqp .fm-note summary::after{content:\"+\";font-size:26px;line-height:1;color:#8a5008;font-weight:400}\n.eqp .fm-note[open] summary::after{content:\"\\2212\"}\n.eqp .fm-note .in{padding:0 24px 22px}\n.eqp .fm-note .in p{font-size:16.5px;line-height:1.65}\n.eqp .fm-note .in p+p{margin-top:12px}\n\n\/* ---- easily confused: a comparison on a hairline (redesign mock) ----\n   One left edge: the counter and Next, the selector, the two columns, the question, the answers and the foot all start on it. No fills and no white boxes. Two columns split by a\n   1px hairline, each headed by a 4px rule in the word's own wheel fill (a word that is not on the wheel gets the hairline colour). Choosing an answer thickens that column's rule to\n   8px, in the family colour at full strength. The answers are three equal chips in the page's one chip style. Counter and Next sit above the content, so a tap on Next never moves it. *\/\n\/* a pair change rebuilds the box; scroll anchoring would move the page when the focused answer is the one that goes (it did, by 641px, on a phone) *\/\n.eqp .fm-pairs{overflow-anchor:none;text-align:left}\n.eqp .fm-pairpick{display:flex;flex-direction:column}\n.eqp .fm-pairhead{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0 24px}\n.eqp .fm-pairhead p.fm-lbl{margin:0;padding:10px 0}\n.eqp .fm-pairhead .fm-next{margin-left:auto;text-align:right}\n@media(max-width:640px){.eqp .fm-pairhead{order:2}.eqp .fm-pairhead .fm-next{margin-left:0;text-align:left}}\n@media(min-width:641px){\n  .eqp #pairChips{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;margin:2px 0 6px}\n  .eqp #pairChips .fm-chip{display:inline-flex;align-items:center;justify-content:flex-start;gap:9px;text-align:left}\n}\n@media(min-width:1000px){.eqp #pairChips{grid-template-columns:repeat(3,minmax(0,1fr))}}\n.eqp .fm-dots{display:inline-flex;gap:3px;flex:0 0 auto}\n.eqp .fm-dot{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:#fff;border:1px solid rgba(42,38,34,.55)}\n.eqp .fm-dot.hollow{background:transparent;border:1.5px solid #6b6259}\n.eqp .fm-chip[aria-pressed=\"true\"] .fm-dot,.eqp .fm-chip[aria-pressed=\"true\"] .fm-dot.hollow{border-color:#fff}\n.eqp #pairBox{display:flex;flex-direction:column}\n.eqp .fm-pair{display:grid;gap:0;margin-top:26px}\n.eqp .fm-side{display:flex;flex-direction:column;min-width:0}\n.eqp .fm-side.b{margin-top:28px;padding-top:28px;border-top:1px solid #e8e1d5}\n@media(min-width:760px){\n  .eqp .fm-pair.two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}\n  .eqp .fm-side.a{padding-right:36px}\n  .eqp .fm-side.b{margin-top:0;padding-top:0;border-top:0;padding-left:36px;border-left:1px solid #e8e1d5}\n}\n\/* push 27: side by side (760px and up) the two sides share their rows, so the main line, \"Why it matters\" and the link start at the same height on both. Each side takes six rows of the pair grid (rule, name, line, label, why, link); .fm-sbody dissolves so its children sit in those rows. Stacked, and in a browser without subgrid, nothing changes. *\/\n@supports (grid-template-rows:subgrid){\n@media(min-width:760px){\n.eqp .fm-pair.two{grid-template-rows:auto auto auto auto auto auto}\n.eqp .fm-pair.two .fm-side{display:grid;grid-row:1\/span 6;grid-template-rows:subgrid;grid-template-columns:minmax(0,1fr)}\n.eqp .fm-pair.two .fm-side.a{grid-column:1}\n.eqp .fm-pair.two .fm-side.b{grid-column:2}\n.eqp .fm-pair.two .fm-sbody{display:contents}\n.eqp .fm-pair.two .fm-rule{grid-row:1}\n.eqp .fm-pair.two .fm-side h4{grid-row:2}\n.eqp .fm-pair.two .fm-sbody p.fm-line{grid-row:3;margin-top:8px}\n.eqp .fm-pair.two .fm-sbody p.fm-whylbl{grid-row:4}\n.eqp .fm-pair.two .fm-sbody p.fm-why{grid-row:5}\n.eqp .fm-pair.two .fm-slink{grid-row:6}\n}\n}\n.eqp .fm-rule{position:relative;height:8px}\n.eqp .fm-rule::after{content:\"\";position:absolute;left:0;right:0;top:0;height:4px;background:var(--rest);transition:height .16s ease,background-color .16s ease}\n.eqp .fm-side.on .fm-rule::after{height:8px;background:var(--full)}\n.eqp .fm-side h4{font-family:\"Work Sans\",system-ui,sans-serif!important;font-size:24px;font-weight:700;line-height:1.25;color:#2a2622;margin:14px 0 0}\n.eqp .fm-side h4:focus{outline:none}\n.eqp .fm-sbody{flex:1 1 auto;display:flex;flex-direction:column;padding:8px 0 0}\n.eqp .fm-sbody p{margin:0;font-size:17px;line-height:1.6}\n.eqp .fm-sbody p.fm-lbl{margin:16px 0 4px;font-size:12px;line-height:1.4}\n.eqp .fm-slink{margin-top:auto;padding-top:8px}\n.eqp .fm-ask2{max-width:none;margin:32px 0 28px;text-align:left}\n.eqp .fm-ask2 p.fm-lbl{margin:0}\n.eqp .fm-q{margin:8px 0 0;font-size:21px;font-weight:600;line-height:1.4;color:#2a2622;text-wrap:pretty}\n.eqp .fm-answers{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;margin:16px 0 0}\n@media(min-width:760px){.eqp .fm-answers{grid-template-columns:repeat(3,minmax(0,1fr))}}\n.eqp .fm-ans{display:flex;align-items:center;justify-content:flex-start;gap:10px;text-align:left;line-height:1.3}\n.eqp .fm-ans span{text-wrap:pretty}\n.eqp .fm-echo{display:flex;flex-wrap:wrap;align-items:center;gap:0 16px;margin-top:8px}\n.eqp .fm-echo[hidden]{display:none}\n.eqp .fm-echo p{margin:0;padding:10px 0;font-size:17px;font-weight:600;line-height:1.3;color:#2a2622}\n.eqp .fm-both{margin:10px 0 0;max-width:40em;font-size:16.5px;line-height:1.55;color:#2a2622}\n.eqp .fm-both[hidden]{display:none}\n.eqp .fm-pnote{margin:14px 0 0;max-width:40em;font-size:15.5px;line-height:1.6;color:#6b6259;text-wrap:pretty}\n.eqp .fm-pairfoot{margin-top:auto;padding-top:12px;border-top:1px solid #e8e1d5}\n.eqp .fm-wline{margin:0;font-size:15px;line-height:1.5;color:#6b6259}\n@media(prefers-reduced-motion:reduce){.eqp .fm-rule::after,.eqp .fm-ans{transition:none}}\n\n\n\/* ---- the A to Z index (push7, v3-plan\/browse\/plan.md) ----\n   From 641px: a folded toggle in the card's own section-button style, and under it 57 lowercase chips, each with a 10px dot in its family colour.\n   Up to 640px: a labelled 52px select (the house phone rule); the toggle, its chips and the dot sentence are hidden, so the label shows once.\n   A tap on a chip must not move the index under the reader's finger, in a browser without scroll anchoring too: the script never lets that tap change the height of\n   anything above the index (see holdUnder in slot-wheel.client.js), and nothing here animates. *\/\n.eqp .fm-az [hidden]{display:none!important}\n.eqp .fm-fig .fm-azlead{margin:0 0 16px;font-size:15.5px;line-height:1.6;color:#6b6259}\n\/* push 26: the A to Z index is open (no toggle). From 641px an alphabetical grid, read down the columns (3 columns, 4 from 1000px); each word is a quiet 44px button with the family dot. A tap opens its card below. *\/\n.eqp .fm-azgh{margin:0 0 6px}\n\/* mock: above 640px two ways in. The select (know the word) sits under the intro line; under it the nine families (a 3 by 3 grid below 1240px, one row above), then the chosen family's words, A to Z, down three columns. *\/\n.eqp .fm-fig p.fm-azgh{margin:28px 0 10px}\n.eqp .fm-azfams{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:0}\n@media(min-width:1240px){.eqp .fm-azfams{display:flex;flex-wrap:wrap;gap:8px}}\n.eqp .fm-azfams .fm-chip{display:inline-flex;align-items:center;justify-content:flex-start;gap:9px;min-height:44px;padding:8px 12px;font-size:15.5px;text-align:left}\n.eqp .fm-azfams .fm-dot{flex:0 0 auto}\n.eqp .fm-azgrid{display:block;column-count:3;column-gap:24px;margin:16px -10px 0}\n.eqp .fm-azgrid[hidden]{display:none}\n.eqp .fm-azw{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;margin:0;padding:8px 10px;background:transparent;border:0;border-radius:8px;text-align:left;font-size:16px;line-height:1.3;font-weight:500;color:#2a2622;cursor:pointer}\n.eqp .fm-azw:hover{background:#faf8f3}\n.eqp .fm-azw:focus-visible{outline:3px solid #123f38;outline-offset:-3px}\n.eqp .fm-azw[aria-pressed=\"true\"]{font-weight:700;color:#123f38;background:#faf8f3}\n.eqp .fm-azw .fm-dot{flex:0 0 auto}\n.eqp .fm-azsel{margin:0}\n@media(min-width:641px){.eqp .fm-azsel{display:block;max-width:360px;margin:0}.eqp .fm-azw{break-inside:avoid}}\n@media(max-width:640px){\n  .eqp .fm-azdesk,.eqp .fm-azdot{display:none}\n  .eqp .fm-azsel{display:block}\n  .eqp .fm-fig .fm-azlead{margin-bottom:20px}\n}\n@media print{.eqp .fm-az{display:none!important}}\n\n\/* ---- check-in history: off unless she turns it on ---- *\/\n.eqp .fm-hist-wrap{margin-top:0}\n.eqp .fm-switch{display:flex;align-items:center;gap:14px;min-height:52px;cursor:pointer;font-weight:600;font-size:17px}\n.eqp .fm-switch input{position:absolute;opacity:0;width:1px;height:1px}\n.eqp .fm-track{position:relative;flex:none;width:56px;height:32px;background:#d9d0c1;border:2px solid #c9bfae;border-radius:999px;transition:background-color .15s}\n.eqp .fm-track::after{content:\"\";position:absolute;top:2px;left:2px;width:24px;height:24px;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #c9bfae;transition:transform .15s}\n.eqp .fm-switch input:checked+.fm-track{background:#1c5a4f;border-color:#1c5a4f}\n.eqp .fm-switch input:checked+.fm-track::after{transform:translateX(24px)}\n.eqp .fm-switch input:focus-visible+.fm-track{outline:3px solid #123f38;outline-offset:3px}\n.eqp .fm-hist{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:8px}\n.eqp .fm-hist li{margin:0;padding:10px 16px;background:#faf8f3;border:1.5px solid #ebe4d6;border-radius:12px;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}\n.eqp .fm-hist li span{color:#6b6259;font-size:15.5px}\n.eqp .fm-actions.hist{margin-top:14px}\n\n\/* ---- check-in history (push 23) ----\n   No standalone segment. The card's action row always has \"Save this check-in\" (.fm-btn.ghost) beside the link; the first tap with history off opens the opt-in in place;\n   \"Your check-ins\" is a .fm-sec disclosure under the card slot, there only once something is saved or history is on. The patterns strip (push 22) is the first thing in it. *\/\n.eqp .fm-saverow{align-items:center;gap:6px 14px;margin-top:18px}\n.eqp .fm-saverow .fm-cardlink{margin-top:0;flex:1 1 auto}\n.eqp .fm-btn.ghost:disabled{background:#ecf5f4}\n.eqp .fm-consent{margin-top:14px;padding-top:6px;border-top:1px solid #e8e1d5}\n.eqp .fm-consent[hidden]{display:none}\n.eqp .fm-consent p.fm-small{margin:8px 0 0}\n.eqp .fm-yci{margin-top:14px}\n.eqp .fm-yci[hidden]{display:none}\n.eqp .fm-yci>.fm-sec{margin-top:0}\n.eqp .fm-yci .fm-panel{padding:6px 20px 12px}\n.eqp .fm-yci .fm-panel .fm-hist{margin-top:12px}\n.eqp .fm-yci .fm-panel .fm-switch{margin-top:14px}\n.eqp .fm-yci .fm-panel #privLine{margin:2px 0 6px}\n.eqp .fm-yci #histPatterns{margin:14px 0 6px}\n\n\/* ---- push19: what helps, widened; the fuller sentence; a link under each card; copy my check-ins; the A to Z meanings list ----\n   Nothing new in colour or box style: the card's own panel, the .fm-lbl label, the .fm-link and .fm-btn buttons, the .fm-select border and corner, and the A to Z toggle. *\/\n.eqp .fm-panel p.fm-small{font-size:15.5px;line-height:1.55}\n.eqp .fm-panel p.fm-lbl.fm-gap{margin-top:18px}\n.eqp .fm-ways{margin:0 0 12px;padding:0 0 0 1.2em}\n.eqp .fm-ways li{margin:0 0 8px;font-size:17px;line-height:1.6}\n.eqp .fm-fuller{margin:0 0 14px}\n.eqp .fm-fuller[hidden]{display:none}\n.eqp .fm-fuller label.fm-lbl{display:block;margin:12px 0 6px}\n.eqp .fm-field{display:block;width:100%;max-width:420px;height:48px;padding:0 14px;border:1.5px solid #1c5a4f;background:#fff;border-radius:9px;font-size:16px;line-height:1.3;color:#2a2622;-webkit-appearance:none;appearance:none}\n.eqp .fm-field::placeholder{color:#6b6259;opacity:1}\n.eqp .fm-fieldarea{height:auto;max-width:none;padding:12px 14px;line-height:1.5;resize:vertical}\n.eqp .fm-fuller .fm-fsout{margin:2px 0 12px}\n.eqp .fm-fuller .fm-actions{margin:0 0 10px}\n.eqp .fm-copyfail{margin:8px 0 6px}\n.eqp .fm-copyfail p{margin:0 0 6px}\n.eqp .fm-cardlink{margin-top:6px}\n.eqp .fm-cardlink .fm-plinks{margin:0!important}\n.eqp .fm-hist li span.fm-hsent{flex:0 0 100%;color:#2a2622;font-size:15.5px;line-height:1.55}\n.eqp #histHelp{margin-top:12px}\n.eqp #histFail{margin-top:4px}\n@media(max-width:640px){.eqp .fm-field{height:52px;max-width:none}.eqp .fm-fieldarea{height:auto}}\n\/* A to Z meanings (push 23): the study-note disclosure; inside it, one closed disclosure row per family (dot, name, count, chevron) with the entries in a compact list.\n   The plain variant: no box, two hairlines. No min-height on an entry: in a two-column list with break-inside:avoid, Chrome stretched a one-line entry that sits in the\n   taller column (the gap after \"worried\"), so a one-line entry is 44px by its own padding (10 + 24 + 10) instead. *\/\n.eqp .fm-azmean{margin-top:0}\n.eqp .fm-azmean summary{text-wrap:balance}\n.eqp .fm-azmean .in{padding:0 24px 12px}\n.eqp .fm-azmean .fm-azmean-lead{margin:2px 0 12px;font-size:15.5px;line-height:1.6}\n.eqp .fm-azmean details.fm-azfam{border-top:1px solid #eedcb9}\n.eqp .fm-azmean details.fm-azfam:last-child{border-bottom:1px solid #eedcb9}\n.eqp .fm-azmean details.fm-azfam > summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;box-sizing:border-box;min-height:52px;padding:4px 0;font:700 17px\/1.3 \"Work Sans\",system-ui,sans-serif;letter-spacing:.01em;text-transform:none;color:#2a2622}\n.eqp .fm-azmean details.fm-azfam > summary::-webkit-details-marker{display:none}\n.eqp .fm-azmean details.fm-azfam > summary::after{content:\"\";flex:0 0 auto;width:9px;height:9px;margin:-4px 4px 0 auto;border-right:2px solid #8a5008;border-bottom:2px solid #8a5008;transform:rotate(45deg);font-size:0}\n.eqp .fm-azmean details.fm-azfam[open] > summary::after{margin-top:4px;transform:rotate(-135deg)}\n.eqp .fm-azmean .fm-azfn{font-weight:500;color:#6b6259}\n.eqp .fm-azmean .fm-azfd{display:block;box-sizing:border-box;flex:0 0 auto;width:14px;height:14px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(42,38,34,.3)}\n.eqp .fm-azmean details.fm-azfam > summary:focus-visible{outline:3px solid #123f38;outline-offset:-3px;box-shadow:0 0 0 2px #fff inset}\n.eqp .fm-azmean ul{list-style:none;margin:0 0 10px;padding:0;columns:1;column-gap:44px}\n@media(min-width:900px){.eqp .fm-azmean ul{columns:2}}\n@media(max-width:640px){.eqp .fm-azmean .in{padding:0 16px 8px}.eqp .fm-azmean summary{padding-left:16px;padding-right:16px}}\n.eqp .fm-azmean li{position:relative;margin:0;padding:10px 0 10px 24px;font-size:15.5px;line-height:24px;color:#524a42;list-style:none;break-inside:avoid}\n.eqp .fm-azmean .fm-azd{position:absolute;left:0;top:16px;display:block;box-sizing:border-box;width:12px;height:12px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(42,38,34,.3)}\n.eqp .fm-azmean a.fm-azterm{font-weight:600;color:#2a2622;text-decoration:none}\n.eqp .fm-azmean a.fm-azterm::after{content:\"\";position:absolute;inset:0;border-radius:8px}\n.eqp .fm-azmean li:hover a.fm-azterm,.eqp .fm-azmean a.fm-azterm:focus-visible{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}\n.eqp .fm-azmean a.fm-azterm:focus-visible{outline:none}\n.eqp .fm-azmean a.fm-azterm:focus-visible::after{outline:3px solid #123f38;outline-offset:-2px;box-shadow:0 0 0 2px #fff inset}\n.eqp .fm-azmean.fm-azplain{background:transparent;border-width:1.5px 0;border-color:#e8e1d5;border-radius:0}\n.eqp .fm-azmean.fm-azplain .in{padding:0}\n.eqp .fm-azmean.fm-azplain summary{padding-left:0;padding-right:0}\n.eqp .fm-azmean.fm-azplain details.fm-azfam{border-color:#e8e1d5}\n.eqp .fm-azmean.fm-azplain details.fm-azfam:last-child{border-bottom:0}\n.eqp .fm-azopen .fm-azhead{margin:0 0 6px}\n.eqp .fm-azopen.fm-azplain details.fm-azfam:last-child{border-bottom:1px solid #e8e1d5}\n\/* the history section's h3 is the same object as the body section headings, built by hand because it sits in a hidden wrapper *\/\n.eqp .fm-h3{font-family:\"Work Sans\",system-ui,sans-serif!important;font-weight:700;font-size:25px;line-height:1.28!important;color:#1c5a4f;margin:8px 0 18px}\n@media(max-width:640px){.eqp .fm-h3{font-size:19.5px}}\n.eqp .eq-toc .fm-way .num{font-size:1.125rem;letter-spacing:0}\n@media(prefers-reduced-motion:reduce){\n  .eqp .fm-fig *,.eqp .fm-fig *::before,.eqp .fm-fig *::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}\n}\n\/* the reference list on a small phone, as on the live posts (Name It to Tame It and the rest): a narrower number column, and long words may break. The list links stay plain inline links, so the number sits on the first line of its entry. *\/\n@media(max-width:480px){.eqp ol.wp-block-list{padding-left:18px}.eqp ol.wp-block-list li{overflow-wrap:anywhere}}\n\/* the closing panel (WORKING WITH THIS) keeps its 52px padding on a laptop; on a phone it would leave 242px of text, so it takes less *\/\n@media(max-width:640px){.eqp .eq-ondark{padding:36px 26px!important}}\n\/* ---- push22: two feelings in one check-in; patterns over time ----\n   Nothing new in colour or box style: the .fm-lbl label, the .fm-small helper line, the .fm-select (52px at every width), the card's own .fm-panel, the .fm-link buttons,\n   the .fm-dot and the wheel's own family fills for the strip. *\/\n.eqp .fm-two{margin:22px 0 0}\n.eqp .fm-two .fm-lbl{margin:0 0 4px}\n.eqp .fm-two .fm-twolab{display:block;margin:0 0 7px}\n.eqp .fm-two .fm-select{max-width:420px}\n.eqp .fm-two .fm-twopanel{margin-top:12px;border-top:1.5px solid #b9d1c9;border-radius:12px}\n.eqp .fm-twoname{font-family:\"Work Sans\",system-ui,sans-serif!important;font-weight:700;font-size:17px;line-height:1.3!important;color:#2a2622;margin:0 0 8px;display:flex;align-items:center;gap:8px}\n.eqp .fm-twoname .fm-dot{flex:0 0 auto}\n.eqp .fm-two .fm-twopanel p.fm-plinks{margin:0 0 6px!important}\n@media(max-width:640px){.eqp .fm-two .fm-select{max-width:none}}\n.eqp #histPatterns{margin:22px 0 0}\n.eqp #histPatterns[hidden]{display:none}\n.eqp #histPatterns .fm-lbl{margin:0 0 6px}\n.eqp #histPatterns p{margin:0 0 8px}\n.eqp #histPatterns .fm-strip{display:flex;gap:2px;height:14px;margin:10px 0 12px;background:#fff;border-radius:7px;overflow:hidden}\n.eqp #histPatterns .fm-seg{display:block;min-width:3px;height:14px}\n.eqp #histPatterns .fm-patfams{font-size:17px;line-height:1.5;color:#2a2622}\n.eqp #histPatterns .fm-patnote{margin:12px 0 0}\n\/* ---- small fixes from the 2 Oct review (push 23) ----\n   8: no one-word last lines in display type, link rows and eyebrows. 9: the body figure sits on the text column on a phone (the theme pulls every figure 4px out\n   with !important, so this takes a more specific selector). 11: a gap between the two stacked closing-panel buttons. *\/\n.eqp .fm-part h2,.eqp .fm-wayout a,.eqp .fm-wayout .fm-link,.eqp p[style*=\"letter-spacing:0.16em\"]{text-wrap:balance}\n@media(max-width:640px){body.single-post .eqp #bodyFig:not(figure figure){margin-left:0!important;margin-right:0!important}}\n@media(max-width:767px){body .eqp .wp-block-buttons{display:flex;flex-wrap:wrap;gap:12px}}\n@media print{.eqp .fm-chips,.eqp .fm-selectwrap{display:none!important}}\n<\/style><style>\n\/* ---- figure one: the wheel ---- *\/\n.eqp .fm-wheelwrap{max-width:560px;margin:0 auto}\n@media(min-width:720px){.eqp .fm-wheelwrap{max-width:none;width:min(740px,calc(100% + 64px));margin:0 0 0 50%;transform:translateX(-50%)}}\n.eqp .fm-wheel{display:block;width:100%;height:auto;overflow:visible;-webkit-user-select:none;user-select:none;touch-action:manipulation}\n.eqp .fm-wseg{cursor:pointer;-webkit-tap-highlight-color:transparent}\n.eqp .fm-wseg:focus{outline:none}\n.eqp .fm-wseg.off,.eqp .fm-layer.off{display:none}\n.eqp .fm-wseg.hub.idle text{display:none}\n.eqp .fm-wseg.idle{pointer-events:none;cursor:default}\n.eqp .fm-wseg path:not(.arc){fill:var(--f);stroke:#fff;stroke-width:2.5;stroke-linejoin:round;transition:fill .18s ease}\n.eqp .fm-wseg path.arc{fill:none;stroke:none}\n.eqp .fm-wseg text{fill:var(--t);text-anchor:middle;font-family:\"Work Sans\",system-ui,-apple-system,\"Segoe UI\",Roboto,Arial,sans-serif;font-weight:500;font-size:14px;letter-spacing:.01em;pointer-events:none;transition:fill .18s ease}\n.eqp .fm-wseg text textPath{text-anchor:middle}\n.eqp .fm-wseg.core text{font-weight:600;font-size:19px}\n.eqp .fm-wheel.phone .fm-wseg.core text{font-size:15px}\n.eqp .fm-wheel.zm .fm-wseg.word text{font-size:12.5px}\n.eqp .fm-wseg.group text{font-weight:600;font-size:13.5px}\n.eqp .fm-wseg.dim path:not(.arc){fill:var(--fd)}\n.eqp .fm-wseg.dim text{fill:var(--td)}\n.eqp .fm-wseg.group.gsel path:not(.arc){fill:var(--fs)}\n.eqp .fm-wseg.group.gsel text{fill:var(--ts)}\n.eqp .fm-wseg.hub path{fill:#fff;stroke:#e8e1d5;stroke-width:2}\n.eqp .fm-wseg.hub text{fill:#2a2622;font-size:11px;font-weight:600;letter-spacing:.02em}\n.eqp .fm-wseg.hub:not(.idle){cursor:pointer}\n.eqp .fm-wseg.hub.fan path{fill:var(--f)}\n.eqp .fm-wseg.hub.fan text{fill:var(--t)}\n.eqp .fm-wseg.hub.fan .hn{font-size:1.125rem;font-weight:600}\n.eqp .fm-wseg.hub.fan .hs{font-size:15px;font-weight:500}\n.eqp .fm-wseg.fan.word text{font-size:16px}\n.eqp .fm-wseg.fan.group text{font-size:15px}\n.eqp .fm-wr path{fill:none;pointer-events:none;stroke-linejoin:round}\n.eqp .fm-wr .fam{stroke:#2a2622;stroke-width:2}\n.eqp .fm-wr .selh{stroke:#fff;stroke-width:8}\n.eqp .fm-wr .sel{stroke:#2a2622;stroke-width:3.5}\n.eqp .fm-wr .hov{stroke:#1c5a4f;stroke-width:3}\n.eqp .fm-wr .foch{stroke:#fff;stroke-width:9}\n.eqp .fm-wr .foc{stroke:#123f38;stroke-width:4.5}\n@media (prefers-reduced-motion:reduce){.eqp .fm-wseg path,.eqp .fm-wseg text{transition:none}}\n\/* the hover wave (a mouse only, and not for reduced motion): segments and their outlines ease out to a lift and back; the lift itself is set by the script *\/\n@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){\n.eqp .fm-wseg{transition:transform .26s cubic-bezier(.22,.61,.36,1)}\n.eqp .fm-wr path{transition:transform .26s cubic-bezier(.22,.61,.36,1)}\n.eqp .fm-wr .fam{transition:opacity .26s ease}\n}\n\/* under the wheel: the small row of words for when you do not feel much, the two buttons, the meaning of a chosen group *\/\n.eqp .fm-under{max-width:740px;margin:10px auto 0;text-align:center}\n.eqp .fm-under [hidden],.eqp .fm-wayout [hidden]{display:none!important}\n.eqp .fm-lowrow{margin:0 0 4px}\n.eqp .fm-lowchips{justify-content:center;margin:8px 0 6px}\n.eqp .fm-lowtext{max-width:40em;margin:8px auto 0;font-size:15.5px;line-height:1.6;color:#6b6259;text-align:left}\n.eqp .fm-acts{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 24px;margin:0}\n.eqp #readCard{min-height:46px;margin-top:2px}\n.eqp .fm-zg{max-width:34em;margin:8px auto 0;text-align:center}\n.eqp .fm-zname{margin:0;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#123f38;line-height:1.4}\n.eqp .fm-zgloss{margin:4px 0 0;font-size:17px;line-height:1.5;color:#2a2622}\n.eqp .fm-wheelfig .fm-hint{max-width:740px;margin:14px auto 0;font-size:15.5px;line-height:1.6;color:#6b6259}\n.eqp .fm-wayout{max-width:740px;margin:10px auto 0;text-align:center;font-size:15.5px;line-height:1.5;color:#6b6259}\n.eqp .fm-wayout .fm-stuck{font-weight:600}\n.eqp .fm-wayout .fm-link{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 4px;font-size:15.5px;line-height:1.5;white-space:nowrap;vertical-align:middle;text-align:center}\n.eqp .fm-lowchips .fm-chip[aria-pressed=\"true\"]{background:#1c5a4f;border-color:#1c5a4f;color:#fff}\n\/* the mood pad (push18 mock): a quiet first step above the wheel. A small label, then four chips in a 2x2 (top row more energy, left column unpleasant), each with a small quarter glyph.\n   Same chip as the rest of the figure (white, 1.5px teal-grey border, 9px corner, teal when chosen), same label style, same focus ring.\n   A choice dims the wheel's other segments (the .nq class, painted like .dim); it never hides one. *\/\n.eqp .fm-pad{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:480px;margin:0 auto 40px;text-align:center}\n.eqp .fm-padh{margin:0;font-weight:600;font-size:19px;line-height:1.35;color:#123f38;text-wrap:balance}\n.eqp .fm-padst{margin:0;min-height:48px;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0 4px;max-width:30em;font-size:15.5px;line-height:1.5;color:#6b6259;text-wrap:balance}\n.eqp .fm-padst .sep{margin-right:-2px}\n.eqp .fm-padst .sep,.eqp .fm-padst .fm-padclr{display:none}\n.eqp .fm-padst.on{color:#123f38}\n.eqp .fm-padst.on .sep{display:inline}\n.eqp .fm-padst.on .fm-padclr{display:inline-flex}\n.eqp .fm-padclr{align-items:center;min-height:44px;padding:0 12px 0 4px;margin:0;background:none;border:0;border-radius:9px;color:#1c5a4f;font-weight:600;font-size:15.5px;line-height:1.2;text-decoration:underline;text-decoration-color:#b9d1c9;text-decoration-thickness:1.5px;text-underline-offset:5px}\n.eqp .fm-padclr:hover{text-decoration-color:#1c5a4f}\n.eqp .fm-mgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,auto);gap:10px;width:100%;margin-top:6px}\n.eqp .fm-cell{display:flex;align-items:center;justify-content:flex-start;gap:10px;min-height:56px;padding:8px 14px 8px 12px;margin:0;background:#fff;border:1.5px solid #b9d1c9;border-radius:9px;color:#1c5a4f;text-align:left;transition:background .16s ease,border-color .16s ease}\n.eqp .fm-cell:hover{background:#f2f5f7}\n.eqp .fm-cell[aria-pressed=\"true\"]{background:#1c5a4f;border-color:#1c5a4f;color:#fff}\n.eqp .fm-cell .w{font-weight:600;font-size:16px;line-height:1.25}\n.eqp .fm-cell .g{display:block;flex:none}\n.eqp .fm-cell .g rect{transition:fill .16s ease}\n.eqp .fm-cell .g rect.off{fill:#9db8af}\n.eqp .fm-cell .g rect.on{fill:var(--c);stroke:#123f38;stroke-width:1.4}\n.eqp .fm-cell[aria-pressed=\"true\"] .g rect.off{fill:rgba(255,255,255,.42)}\n.eqp .fm-cell[aria-pressed=\"true\"] .g rect.on{stroke:#fff;stroke-width:1.6}\n@media(min-width:640px){.eqp .fm-pad{margin-bottom:56px}}\n.eqp .fm-wseg path:not(.arc){transition:fill .18s ease,fill-opacity .18s ease}\n.eqp .fm-wseg.nq path:not(.arc){fill:var(--f);fill-opacity:.2}\n.eqp .fm-wseg.nq text{fill:var(--td);font-weight:400}\n.eqp .fm-wseg.core.nq text{font-weight:500}\n@media print{.eqp .fm-pad{display:none}}\n\/* mock A: one small muted label above the chips; the count and clear take its place once a chip is chosen. *\/\n.eqp .fm-pad{gap:0}\n.eqp .fm-padst{min-height:44px;max-width:none;font-size:15.5px;line-height:1.4;color:#6b6259}\n.eqp .fm-mgrid{margin-top:2px}\n<\/style><style>\n\/* ---- phones: tap targets, back to top, small text (30 Sep 2026) ----\n   Everything here sits inside phone or touch media queries, so tablet and\n   laptop layouts are untouched. No colours are changed. *\/\n@media (hover:none),(max-width:640px){\n.eqp button,.eqp summary,.eqp select,.eqp input,.eqp textarea,.eqp label,.eqp a,.eqp [role=button],.eqp [tabindex],#eqp-top{-webkit-tap-highlight-color:rgba(28,90,79,.16)}\n}\n@media (max-width:899px){\n#eqp-top{min-height:44px;padding-top:0;padding-bottom:0;bottom:14px;bottom:calc(14px + env(safe-area-inset-bottom,0px));right:14px;right:calc(14px + env(safe-area-inset-right,0px))}\n#eqp-top.eqp-top-off{opacity:0!important;visibility:hidden!important;pointer-events:none!important}\n}\n@media (max-width:640px){\nbody .eqp .eq-toc li{margin:0}\nbody .eqp .eq-toc li a{display:block;box-sizing:border-box;min-height:44px;padding:10px 0}\nbody .eqp .eq-toc summary .ttl,body .eqp .eq-toc .flat .ttl{padding:11px 0;margin:-11px 0}\nbody .eqp p.eq-lastrev{font-size:12px!important}\n.eqp .fm-figure{margin-left:auto;margin-right:auto}\n}\n<\/style><div id=\"eqp-rail\" aria-hidden=\"true\"><i><\/i><\/div><nav id=\"eqp-parts\" aria-hidden=\"true\"><a href=\"#part-1\" data-i=\"1\" tabindex=\"-1\"><span class=\"dot\"><\/span><span class=\"lbl\">How does it feel right now?<\/span><\/a><a href=\"#part-2\" data-i=\"2\" tabindex=\"-1\"><span class=\"dot\"><\/span><span class=\"lbl\">Learn more about a feeling<\/span><\/a><a href=\"#part-3\" data-i=\"3\" tabindex=\"-1\"><span class=\"dot\"><\/span><span class=\"lbl\">Easily confused<\/span><\/a><a href=\"#part-4\" data-i=\"4\" tabindex=\"-1\"><span class=\"dot\"><\/span><span class=\"lbl\">Where do you feel it?<\/span><\/a><\/nav><button id=\"eqp-top\" type=\"button\" aria-label=\"Back to the top of the article\"><svg viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 10.5V2M2 5.5 6 1.5l4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>Top<\/button><script>(function(){document.documentElement.setAttribute(\"data-eqp\",\"on\");function init(){var RM=false;if(window.matchMedia){RM=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}var bar=document.querySelector(\"#eqp-rail i\");var hasST=false;if(window.CSS){if(CSS.supports){hasST=CSS.supports(\"animation-timeline\",\"scroll()\");}}if(bar){if(!hasST){  var tick=function(){    var h=document.documentElement.scrollHeight-window.innerHeight;    var p=h>0?window.scrollY\/h:0;    if(p<0)p=0; if(p>1)p=1;    bar.style.transform=\"scaleX(\"+p+\")\";  };  addEventListener(\"scroll\",tick,{passive:true});addEventListener(\"resize\",tick);tick();}}var rev=document.querySelectorAll(\".eq-rev\");if(RM||!(\"IntersectionObserver\" in window)){  Array.prototype.forEach.call(rev,function(n){n.classList.add(\"in\");});}else{  var ro=new IntersectionObserver(function(es){    es.forEach(function(e){if(e.isIntersecting){e.target.classList.add(\"in\");ro.unobserve(e.target);}});  },{rootMargin:\"0px 0px -8% 0px\",threshold:0.08});  Array.prototype.forEach.call(rev,function(n){ro.observe(n);});}var bands=document.querySelectorAll(\".eq-range .band\");if(RM||!(\"IntersectionObserver\" in window)){  Array.prototype.forEach.call(bands,function(n){n.classList.add(\"in\");});}else{  var bo=new IntersectionObserver(function(es){    es.forEach(function(e){      if(!e.isIntersecting)return;      var d=parseInt(e.target.getAttribute(\"data-d\")||\"0\",10);      setTimeout(function(){e.target.classList.add(\"in\");},d);      bo.unobserve(e.target);    });  },{threshold:0.3});  Array.prototype.forEach.call(bands,function(n){bo.observe(n);});}var figs=document.querySelectorAll(\"[data-eq-anim]\");if(RM||!(\"IntersectionObserver\" in window)){  Array.prototype.forEach.call(figs,function(n){n.classList.add(\"eq-on\");});}else{  var fo=new IntersectionObserver(function(es){    es.forEach(function(e){      var vh=window.innerHeight||document.documentElement.clientHeight;      var b=e.target.getBoundingClientRect();      var tall=b.height>vh*0.6;      var ok=tall?(b.top<vh*0.7?(b.bottom>0):false):(e.intersectionRatio>=0.35);      if(!ok)return;      e.target.classList.add(\"eq-on\");      fo.unobserve(e.target);    });  },{threshold:[0,0.15,0.35,0.6]});  Array.prototype.forEach.call(figs,function(n){fo.observe(n);});}var links=[].slice.call(document.querySelectorAll(\"#eqp-parts a\"));var tops=links.map(function(a){return document.getElementById(a.getAttribute(\"href\").slice(1));});var btn=document.getElementById(\"eqp-top\");var last=-1;var sync=function(){  var y=window.scrollY+window.innerHeight*0.32, cur=-1;  for(var i=0;i<tops.length;i++){ if(tops[i]){ if(tops[i].getBoundingClientRect().top+window.scrollY<=y) cur=i; } }  if(cur!==last){    links.forEach(function(a,i){a.classList.toggle(\"on\",i===cur);});    last=cur;  }  if(btn){    var h=document.documentElement.scrollHeight-window.innerHeight;    var far=false; if(h>0){far=window.scrollY\/h>0.35;}    btn.classList.toggle(\"on\",far);  }};addEventListener(\"scroll\",sync,{passive:true});addEventListener(\"resize\",sync);sync();if(btn)btn.addEventListener(\"click\",function(){  window.scrollTo({top:0,behavior:RM?\"auto\":\"smooth\"});});}if(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",init);}else{init();}})();<\/script><script>(function(){\nif(window.eqTopFix){return;}\nwindow.eqTopFix=1;\nvar MQ=null;\nif(window.matchMedia){MQ=window.matchMedia(\"(max-width: 899px)\");}\nvar OFF=\"eqp-top-off\";\nvar SELQ=\".eqp a[href],.eqp button,.eqp input,.eqp select,.eqp textarea,.eqp summary,.eqp label,.eqp [role=button],.eqp [role=tab],.eqp [role=slider],.eqp .gl,.eqp .eq-term,.eqp .hnd\";\nvar busy=false,typing=false;\nfunction phone(){\nif(MQ){return MQ.matches;}\nreturn false;\n}\nfunction field(el){\nif(!el){return false;}\nvar t=el.tagName;\nif(t===\"TEXTAREA\"){return true;}\nif(t===\"SELECT\"){return true;}\nif(el.isContentEditable){return true;}\nif(t===\"INPUT\"){\nvar ty=(el.getAttribute(\"type\")||\"text\").toLowerCase();\nif(ty===\"range\"){return false;}\nif(ty===\"checkbox\"){return false;}\nif(ty===\"radio\"){return false;}\nif(ty===\"button\"){return false;}\nif(ty===\"submit\"){return false;}\nif(ty===\"reset\"){return false;}\nreturn true;\n}\nreturn false;\n}\nfunction tail(){\nvar p=document.querySelector(\".eqp p.eq-lastrev\");\nvar n=null;\nif(p){\nif(p.parentNode){n=p.parentNode.nextElementSibling;}\n}\nwhile(n){\nif(n.tagName!==\"STYLE\"){\nif(n.tagName!==\"SCRIPT\"){break;}\n}\nn=n.nextElementSibling;\n}\nif(n){\nif(n.getBoundingClientRect().top<window.innerHeight){return true;}\n}\nvar f=document.querySelector(\"footer\");\nif(f){\nif(f.getBoundingClientRect().top<window.innerHeight){return true;}\n}\nreturn false;\n}\nfunction blocked(btn){\nvar r=btn.getBoundingClientRect();\nif(r.width<1){return false;}\nvar list=document.querySelectorAll(SELQ),i,q,e,ix,iy;\nfor(i=0;i<list.length;i++){\ne=list[i];\nif(e===btn){continue;}\nif(e.tagName===\"LABEL\"){\nif(!e.querySelector(\"input,select,textarea\")){continue;}\n}\nq=e.getBoundingClientRect();\nif(q.width<1){continue;}\nif(q.height<1){continue;}\nif(q.bottom<r.top){continue;}\nif(q.top>r.bottom){continue;}\nix=Math.min(r.right,q.right)-Math.max(r.left,q.left);\niy=Math.min(r.bottom,q.bottom)-Math.max(r.top,q.top);\nif(ix>1){\nif(iy>1){\nif(window.getComputedStyle(e).visibility!==\"hidden\"){return true;}\n}\n}\n}\nreturn false;\n}\nfunction sync(){\nbusy=false;\nvar b=document.getElementById(\"eqp-top\");\nif(!b){return;}\nvar h=document.documentElement.scrollHeight-window.innerHeight;\nvar far=false;\nif(h>0){far=window.scrollY\/h>0.35;}\nb.classList.toggle(\"on\",far);\nvar off=false;\nif(phone()){\nif(typing){off=true;}\nelse if(tail()){off=true;}\nelse if(blocked(b)){off=true;}\n}\nb.classList.toggle(OFF,off);\n}\nfunction ask(){\nif(busy){return;}\nbusy=true;\nif(window.requestAnimationFrame){window.requestAnimationFrame(sync);}\nelse{window.setTimeout(sync,50);}\n}\nwindow.addEventListener(\"scroll\",ask,{passive:true});\nwindow.addEventListener(\"resize\",ask);\nwindow.addEventListener(\"orientationchange\",ask);\nwindow.addEventListener(\"load\",ask);\ndocument.addEventListener(\"focusin\",function(e){typing=field(e.target);ask();});\ndocument.addEventListener(\"focusout\",function(){typing=false;ask();});\nif(MQ){\nif(MQ.addEventListener){MQ.addEventListener(\"change\",ask);}\nelse if(MQ.addListener){MQ.addListener(ask);}\n}\nask();\n})();<\/script>\n\n\n\n<div class=\"wp-block-group alignfull eqp has-global-padding is-layout-constrained wp-container-core-group-is-layout-69fa9525 wp-block-group-is-layout-constrained\" style=\"margin-top:0;margin-bottom:0;padding:0px 22px\">\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n<div style=\"color:#6b6259;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.455), 18px);font-style:normal;font-weight:400;margin-top:54px;margin-bottom:0\" class=\"has-link-color wp-elements-1 wp-block-post-date has-text-color has-work-sans-regular-font-family\"><time datetime=\"2026-10-08T16:40:00+02:00\">8 listopada, 2026<\/time><\/div>\n\n<div style=\"color:#6b6259;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.455), 18px);font-style:normal;font-weight:700;text-transform:uppercase;margin-top:0;margin-bottom:0\" class=\"taxonomy-category has-link-color wp-elements-2 wp-block-post-terms has-text-color has-work-sans-regular-font-family\"><a href=\"https:\/\/equilibriumpsychotherapy.net\/hr\/category\/body-and-mind\/\" rel=\"tag\">Body and Mind<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/equilibriumpsychotherapy.net\/hr\/category\/pocket-tools\/\" rel=\"tag\">Pocket Tools<\/a><\/div>\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family ra-series wp-block-paragraph\" style=\"color:#1c5a4f;margin-top:24px;margin-bottom:0;font-size:12.5px;font-weight:700;letter-spacing:0.2em;line-height:1.4\">Pocket Tools<\/p>\n\n\n\n<h1 class=\"wp-block-heading has-text-color has-playfair-display-font-family\" id=\"top\" style=\"color:#2a2622;margin-top:12px;margin-bottom:10px;font-size:clamp(24.034px, 1.502rem + ((1vw - 3.2px) * 1.814), 40px);font-style:normal;font-weight:800;line-height:1.15\">The Feelings Map<\/h1>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family eq-subtitle wp-block-paragraph\" style=\"color:#123f38;margin-top:0;margin-bottom:20px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.114), 15px);font-weight:600;letter-spacing:.14em;line-height:1.5\">What am I feeling, and where?<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#524a42;margin-top:0;margin-bottom:0;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.55\">Find the word for what you feel, learn what it&#8217;s telling you, and notice where it shows up in your body.<\/p>\n\n\n\n<p class=\"eq-credit\" style=\"--eq-credit-ac:#123f38\">Written by <a href=\"\/our-team-ivana\/\" rel=\"author\">Ivana<\/a>, psychologist and psychotherapist<\/p>\n\n\n<\/div>\n\n\n\n<!-- eq-post-top -->\n<div class=\"pt-on\" hidden data-src=\"https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2026\/10\/feelings-map-post-top.jpg\" data-w=\"470\" data-aspect=\"0.756\" data-side=\"right\" data-bleed=\"\"><\/div>\n<script>\n\/* Post tops: turns the post's masthead group into the cream band and adds the\n   drawing beside the words. It runs as soon as the masthead's words are in, before\n   the post's own scripts measure anything (the Plain words switch keeps its place on\n   screen, so a band built later scrolled the page). Anything the page adds to the\n   masthead after this point is moved out below the band once the page has loaded.\n   The post's settings ride on the .pt-on marker, which the site CSS also keys on. *\/\n(function () {\n  function run() {\n    var cfg = document.querySelector('.pt-on');\n    var mh = document.querySelector('.eqp > .wp-block-group');\n    if (!cfg || !mh || mh.classList.contains('pt-band')) return !!mh;\n    var d = cfg.dataset, aspect = +d.aspect;\n    \/\/ Some posts run the story on inside the masthead group: stop at the drop-cap paragraph.\n    var words = document.createElement('div');\n    words.className = 'pt-words';\n    while (mh.firstElementChild && !mh.firstElementChild.matches('.eq-drop')) words.appendChild(mh.firstElementChild);\n    var rest = document.createDocumentFragment();\n    while (mh.firstElementChild) rest.appendChild(mh.firstElementChild);\n    mh.appendChild(words);\n    if (rest.childNodes.length) mh.parentNode.insertBefore(rest, mh.nextSibling);\n    var fig = document.createElement('figure');\n    fig.className = 'pt-art';\n    \/\/ Width and height reserve the drawing's space, so the band never grows when it arrives.\n    fig.innerHTML = '<img alt=\"\" decoding=\"async\" width=\"1000\" height=\"' + Math.round(1000 * aspect) + '\" src=\"' + d.src + '\">';\n    \/\/ A second scene (same size) takes over on hover; a tap switches it on touch screens.\n    if (d.src2) {\n      fig.insertAdjacentHTML('beforeend', '<img alt=\"\" decoding=\"async\" width=\"1000\" height=\"' + Math.round(1000 * aspect) + '\" src=\"' + d.src2 + '\">');\n      fig.classList.add('pt-two');\n      fig.addEventListener('pointerup', function (e) { if (e.pointerType !== 'mouse') fig.classList.toggle('pt-swap'); });\n    }\n    mh.appendChild(fig);\n    mh.classList.add('pt-band', 'pt-' + d.side);\n    (d.bleed || '').split('').forEach(function (e) { mh.classList.add('pt-b' + e); });\n    var hdr = document.querySelector('.wp-site-blocks > header .is-style-header-fixed');\n    function fit() {\n      \/\/ The header lies over the top of the page down to tablet width: clear it.\n      mh.style.setProperty('--pt-hh', hdr && getComputedStyle(hdr).position === 'absolute' ? hdr.offsetHeight + 'px' : '0px');\n      mh.style.setProperty('--pt-lift', '0px');\n      if (getComputedStyle(fig).display === 'none') return;\n      \/\/ At least 70% as tall as the words, at most 44% of the band.\n      var cs = getComputedStyle(mh), room = mh.clientWidth - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight), w = +d.w;\n      for (var i = 0; i < 2; i++) {\n        w = Math.min(Math.max(+d.w, 0.7 * words.offsetHeight \/ aspect), room * 0.44);\n        mh.style.setProperty('--pt-w', Math.round(w) + 'px');\n      }\n      \/\/ Optical centre: of the cream left beside the words, 40% goes above and 60% below. Measured on the\n      \/\/ drawing's row, not the band: story paragraphs still loading into the masthead sit below it for a moment.\n      var fs = getComputedStyle(fig);\n      var slack = fig.offsetHeight + parseFloat(fs.marginTop) + parseFloat(fs.marginBottom) - words.offsetHeight;\n      mh.style.setProperty('--pt-lift', Math.max(0, Math.round(slack * 0.1)) + 'px');\n    }\n    fit();\n    addEventListener('resize', fit);\n    \/\/ The text grows when the site's fonts arrive: measure again then.\n    if (document.fonts) document.fonts.ready.then(fit);\n    addEventListener('load', fit);\n    function tidy() {\n      var after = document.createDocumentFragment();\n      while (fig.nextSibling) after.appendChild(fig.nextSibling);\n      mh.parentNode.insertBefore(after, mh.nextSibling);\n      \/\/ The part dots sit at the left edge, over a drawing there: they fade in once the band is behind them.\n      var rail = document.getElementById('eqp-parts');\n      if (!rail) return;\n      function dots() { rail.classList.toggle('pt-hide', mh.getBoundingClientRect().bottom > rail.getBoundingClientRect().top); }\n      addEventListener('scroll', dots, { passive: true });\n      addEventListener('resize', dots);\n      dots();\n    }\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', tidy); else tidy();\n    return true;\n  }\n  if (!run()) document.addEventListener('DOMContentLoaded', run);\n})();\n<\/script>\n<!-- \/eq-post-top -->\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family eq-drop wp-block-paragraph\" style=\"color:#35302a;margin-top:46px;margin-bottom:26px;font-size:clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.836), 22px);line-height:1.62\">Someone asks how you&#8217;re feeling, and nothing comes. It isn&#8217;t <em>fine<\/em>, exactly. It&#8217;s more <em>off<\/em>, or <em>bad<\/em>, or just <em>a lot<\/em> (very scientific terms, I know). I hear this from clients all the time. Hardly anyone is taught to name feelings, so most of us get by on a handful of words for something that comes in dozens of shades.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">You don&#8217;t have to know what you feel to start. Pick the closest of nine core feelings, or start from where it sits in your body, and narrow it down from there. It takes a minute or two. Once a feeling has a name, it&#8217;s usually a little easier to handle, and easier to explain to someone else.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-4ccedd2e wp-block-group-is-layout-constrained\" style=\"border-color:#e8e1d5;border-width:1.5px;border-style:solid;border-radius:20px;background-color:#faf8f3;margin-top:56px;margin-bottom:20px;padding:30px 34px\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#6b6259;margin-top:0;margin-bottom:22px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">THE FOUR STEPS<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\">\n<div class=\"eq-toc\"><div class=\"flat\"><svg class=\"chev hide\" viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 2l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"num\">PART 1<\/span><a class=\"ttl\" href=\"#part-1\">How does it feel right now?<\/a><span class=\"cnt\">1 min<\/span><\/div><details><summary><svg class=\"chev\" viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 2l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"num\">PART 2<\/span><a class=\"ttl\" href=\"#part-2\">Learn more about a feeling<\/a><span class=\"cnt\"><span class=\"sec\">2 sections<\/span><span class=\"sep\"> &middot; <\/span>2 min<\/span><\/summary><ul><li><a href=\"#az\">All 66 feelings, A to Z<\/a><\/li><li><a href=\"#two-feelings\">Two feelings at once<\/a><\/li><\/ul><\/details><div class=\"flat\"><svg class=\"chev hide\" viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 2l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"num\">PART 3<\/span><a class=\"ttl\" href=\"#part-3\">Easily confused<\/a><span class=\"cnt\">1 min<\/span><\/div><div class=\"flat\"><svg class=\"chev hide\" viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 2l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"num\">PART 4<\/span><a class=\"ttl\" href=\"#part-4\">Where do you feel it?<\/a><span class=\"cnt\">2 min<\/span><\/div><div class=\"flat fm-way\"><svg class=\"chev hide\" viewBox=\"0 0 12 12\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 2l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"num\">&rarr;<\/span><a class=\"ttl\" id=\"wayBody\" href=\"#part-4\">Can&#8217;t name anything yet? Start from your body<\/a><\/div><\/div>\n<\/div>\n\n\n<\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:92px;margin-bottom:34px\"><div class=\"fm-part\"><div class=\"no\" aria-hidden=\"true\">01<\/div><div class=\"tx\"><p class=\"lb\">Part one of four<\/p><h2 id=\"part-1\">How does it feel right now?<\/h2><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#35302a;margin-top:0;margin-bottom:30px;font-size:clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.836), 22px);line-height:1.55\">Start with the wheel: tap the core feeling in the middle that&#8217;s closest, and it will open up to show all its words. If nothing jumps out, pick the energy that fits best first, and the wheel will dim what doesn&#8217;t fit. There&#8217;s no wrong answer, and you can change it. If more than one feeling is there, that&#8217;s normal. Start with whichever stands out.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:30px;margin-bottom:46px\"><figure class=\"fm-fig fm-wheelfig\" id=\"step1\"><div class=\"fm-pad\" id=\"moodPad\"><\/div><div class=\"fm-wheelwrap\" id=\"wheel\"><\/div><div class=\"fm-under\" id=\"wheelUnder\"><div class=\"fm-lowrow\" id=\"lowRow\" hidden><div class=\"fm-chips fm-lowchips\" id=\"lowChips\" role=\"group\" aria-label=\"Words for when you don't feel much\"><\/div><p class=\"fm-lowtext\" id=\"lowText\"><\/p><\/div><div class=\"fm-acts\"><button type=\"button\" class=\"fm-btn ghost\" id=\"readCard\" hidden><\/button><\/div><div class=\"fm-zg\" id=\"zoomGloss\" hidden><p class=\"fm-zname\"><\/p><p class=\"fm-zgloss\"><\/p><\/div><\/div><div class=\"fm-wayout\"><span class=\"fm-stuck\">Stuck?<\/span> <button type=\"button\" class=\"fm-link\" id=\"lnkBody\">Start from your body<\/button><span class=\"fm-wsep\" aria-hidden=\"true\">&nbsp;&middot; <\/span><button type=\"button\" class=\"fm-link\" id=\"lnkLow\">Not much of anything<\/button><span class=\"fm-wsep\" aria-hidden=\"true\">&nbsp;&middot; <\/span><a class=\"fm-link\" id=\"lnkMore\" href=\"#az\">See every feeling<\/a><\/div><figcaption class=\"fm-hint\" id=\"wheelCap\"><span id=\"capRest\">Nine core feelings sit in the middle of this feelings wheel. Going clockwise from the top they are afraid, angry, ashamed, sad, drained, calm, connected, happy and curious. Each one gathers the words people tend to group with it. On a bigger screen, a few of the words also sit around the edge, from quieter to stronger. Each family is sorted into smaller groups. Each family has its own color, and where we could, it&#8217;s a color people around the world often link with that feeling, such as red for anger and pink for love. Lighter words are quieter, and deeper ones are stronger. Energy is how switched on your body feels, from sluggish to wired. Pleasantness is how good or bad it is to be in this feeling. It isn&#8217;t a rule about how you should feel.<\/span><span id=\"capFocus\" hidden><\/span><\/figcaption><\/figure><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:92px;margin-bottom:34px\"><div class=\"fm-part\"><div class=\"no\" aria-hidden=\"true\">02<\/div><div class=\"tx\"><p class=\"lb\">Part two of four<\/p><h2 id=\"part-2\">Learn more about a feeling<\/h2><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:34px;margin-bottom:22px\"><div class=\"fm-fig fm-az\" id=\"az\"><p class=\"fm-azlead\" id=\"azLead\">Know the word already? Pick it here, and its card opens below. <span class=\"fm-azdot\">The dot shows its family on the wheel.<\/span><\/p><div class=\"fm-selectwrap fm-azsel\"><label for=\"azSel\">All 66 feelings, A to Z<\/label><select class=\"fm-select\" id=\"azSel\"><option value=\"\">Choose a feeling<\/option><\/select><\/div><div class=\"fm-azdesk\"><p class=\"fm-lbl fm-azgh\" id=\"azHead\">Or start from a family<\/p><div class=\"fm-azfams\" id=\"azFams\" role=\"group\" aria-labelledby=\"azHead\"><\/div><div class=\"fm-azgrid\" id=\"azChips\" role=\"group\" aria-label=\"Feelings in this family\" hidden><\/div><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:0;margin-bottom:30px\"><div class=\"fm-fig fm-words\" id=\"step2\"><div id=\"wordsEmpty\" class=\"fm-empty\"><p>Tap a core feeling on the wheel to open it up, then tap a word. Its card will show up here.<\/p><\/div><article class=\"fm-card\" id=\"card\" tabindex=\"-1\" hidden><\/article><div class=\"fm-yci\" id=\"history\" hidden><button type=\"button\" class=\"fm-sec\" id=\"histTog\" aria-expanded=\"false\" aria-controls=\"histPanel\"><span id=\"histTogLbl\">Your check-ins<\/span><span class=\"fm-secmark\" aria-hidden=\"true\"><\/span><\/button><div class=\"fm-panel\" id=\"histPanel\" role=\"region\" aria-labelledby=\"histTog\" hidden><div id=\"histPatterns\" hidden><\/div><p class=\"fm-small\" id=\"histOffNote\" hidden style=\"margin-top:12px\">History is off. Check-ins you saved earlier are still on this device until you delete them.<\/p><ul class=\"fm-hist\" id=\"histList\"><\/ul><p class=\"fm-small\" id=\"histEmpty\">No check-ins yet. Open a feeling card and choose &#8220;Save this check-in&#8221;.<\/p><div class=\"fm-actions\" id=\"histActions\" hidden><button class=\"fm-btn ghost\" type=\"button\" id=\"histCopy\">Copy my check-ins<\/button><button class=\"fm-btn danger\" type=\"button\" id=\"histDelete\">Delete all my check-ins<\/button><\/div><p class=\"fm-small\" id=\"histHelp\" hidden>Handy if you&#8217;d like to bring them to a therapy session. Nothing is sent anywhere unless you paste or share it yourself.<\/p><div id=\"histFail\"><\/div><label class=\"fm-switch\"><input type=\"checkbox\" id=\"histToggle\"><span class=\"fm-track\" aria-hidden=\"true\"><\/span><span>Keep a private history on this device<\/span><\/label><p id=\"privLine\" class=\"fm-small\">Nothing you tap here is saved or sent anywhere.<\/p><\/div><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"two-feelings\" style=\"color:#1c5a4f;margin-top:80px;margin-bottom:20px;font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.989), 25px);font-style:normal;font-weight:700;line-height:1.28\">Two feelings at once<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">Feelings don&#8217;t always take turns. You can be relieved and sad when something ends, proud and lonely when someone you love leaves home, or love someone and be angry with them in the same breath. That doesn&#8217;t mean you&#8217;re mixed up, or that one of them isn&#8217;t real. Both are real, and each one is telling you something. <strong>If two words fit, keep both.<\/strong><\/p>\n\n\n\n<style>.eqp .eq-ff{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 16px;align-items:start;background:#fff;border:1.5px dashed #b9d1c9;border-radius:20px;padding:20px 24px;margin:6px 0 34px}.eqp .eq-ff .mk{grid-row:1\/3;width:40px;height:40px;border-radius:50%;background:#ecf5f4;color:#1c5a4f;display:flex;align-items:center;justify-content:center}.eqp .eq-ff .mk svg{width:22px;height:22px}.eqp .eq-ff .k{font-family:\"Work Sans\",sans-serif;font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#1c5a4f;margin:2px 0 4px}.eqp .eq-ff .t{font-family:\"Work Sans\",sans-serif;font-size:clamp(14px,calc(10.2px + .62vw),18px);line-height:1.6;color:#2a2622;margin:0}@media(max-width:560px){.eqp .eq-ff{grid-template-columns:minmax(0,1fr);padding:18px}.eqp .eq-ff .mk{grid-row:auto;width:34px;height:34px}}<\/style><aside class=\"eq-ff\"><span class=\"mk\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3.5l1.9 5.1 5.1 1.9-5.1 1.9L12 17.5l-1.9-5.1-5.1-1.9 5.1-1.9zM18.5 15.5l.8 2 2 .8-2 .8-.8 2-.8-2-2-.8 2-.8z\"\/><\/svg><\/span><p class=\"k\">Did you know?<\/p><p class=\"t\">When researchers asked university students how they felt on graduation day, about half said they were happy and sad at the same time. Among students asked on an ordinary day, about one in five said so.<\/p><\/aside>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:0;margin-bottom:30px\"><p class=\"fm-small\" style=\"margin:0\">Prefer paper? The Feelings Map also comes as a printable PDF, with the wheel on the first page and all 66 feelings and what they mean on the next two. For children, there is also a simpler version to print: a simpler wheel, six feeling cards, a body to color in, a daily check-in and a page for grown-ups.<\/p><div class=\"fm-actions\"><a class=\"fm-btn\" href=\"https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2026\/10\/the-feelings-map-1.pdf\" download type=\"application\/pdf\">Download the printable PDF<\/a><a class=\"fm-btn ghost\" href=\"https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2026\/10\/my-feelings-map.pdf\" download type=\"application\/pdf\">Download the kids&#8217; version<\/a><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div id=\"pairs\" style=\"margin-top:92px;margin-bottom:34px\"><div class=\"fm-part\"><div class=\"no\" aria-hidden=\"true\">03<\/div><div class=\"tx\"><p class=\"lb\">Part three of four<\/p><h2 id=\"part-3\">Easily confused<\/h2><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:30px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">Some feelings sit so close together that they&#8217;re easy to mix up, yet they ask for different things. Pick a pair, then try the question that tells them apart.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:10px;margin-bottom:30px\"><div class=\"fm-fig fm-pairs\"><div class=\"fm-pairpick\"><div class=\"fm-pairhead\"><p class=\"fm-lbl\" id=\"pairCount\">Pair 1 of 12<\/p><button type=\"button\" class=\"fm-link fm-next\" id=\"pairNext\"><\/button><\/div><div class=\"fm-chips swap\" id=\"pairChips\" role=\"group\" aria-label=\"Pairs of feelings\"><\/div><div class=\"fm-selectwrap swap\"><label for=\"pairSel\">Pair of feelings<\/label><select class=\"fm-select\" id=\"pairSel\"><\/select><\/div><\/div><div id=\"pairBox\" aria-live=\"polite\"><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<style>.eqp .eq-ff .h{font-family:\"Work Sans\",sans-serif;font-size:clamp(16px,calc(12.4px + .55vw),19px);font-weight:700;line-height:1.35;color:#2a2622;margin:0 0 6px}@media(min-width:561px){.eqp .eq-ff.eq-ff3 .mk{grid-row:1\/4}}<\/style><aside class=\"eq-ff eq-ff3\"><span class=\"mk\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3.5l1.9 5.1 5.1 1.9-5.1 1.9L12 17.5l-1.9-5.1-5.1-1.9 5.1-1.9zM18.5 15.5l.8 2 2 .8-2 .8-.8 2-.8-2-2-.8 2-.8z\"\/><\/svg><\/span><p class=\"k\">Worth knowing<\/p><p class=\"h\">Feeling or emotion?<\/p><p class=\"t\">In everyday talk they mean the same thing, and this map uses them that way. Some researchers draw a line: an emotion is the whole response, including changes in your body, your thoughts and what you feel like doing, and a feeling is the part of it you notice.<\/p><\/aside>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:92px;margin-bottom:34px\"><div class=\"fm-part\"><div class=\"no\" aria-hidden=\"true\">04<\/div><div class=\"tx\"><p class=\"lb\">Part four of four<\/p><h2 id=\"part-4\" tabindex=\"-1\">Where do you feel it?<\/h2><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#35302a;margin-top:0;margin-bottom:30px;font-size:clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.836), 22px);line-height:1.55\">Feelings often show up in the body before we have a word for them. Tap every part of your body where you notice something. If you&#8217;ve already chosen a word, the places people commonly notice it are marked in gold.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:30px;margin-bottom:20px\"><div class=\"fm-fig fm-s3\" id=\"step3\"><figure class=\"fm-figure\" id=\"bodyFig\"><div class=\"fm-stage\" id=\"bodyStage\"><div class=\"fm-stagein\" id=\"bodyStageIn\"><canvas class=\"fm-pcv\" id=\"bodyCanvas\" aria-hidden=\"true\"><\/canvas><\/div><\/div><div class=\"fm-phonepick\"><div class=\"fm-minifig\" id=\"miniFig\" aria-hidden=\"true\"><\/div><div class=\"fm-regionlist\" id=\"regionList\" role=\"group\" aria-label=\"Body areas\"><\/div><\/div><figcaption id=\"bodyCap\">You can leave more than one mark.<\/figcaption><div class=\"fm-chips fm-markchips\" id=\"markChips\" role=\"group\" aria-label=\"Chosen areas\" hidden><\/div><div class=\"fm-bodyacts\"><button type=\"button\" class=\"fm-chip fm-allover\" id=\"allOver\" aria-pressed=\"false\">all over<\/button><button type=\"button\" class=\"fm-link\" id=\"clearAreas\" hidden>Clear areas<\/button><\/div><\/figure><div class=\"fm-side3\"><div class=\"fm-results\" id=\"results\">\n        <h3 id=\"resHead\">Feelings often noticed there<\/h3>\n        <p class=\"fm-empty\" id=\"resEmpty\" style=\"margin-top:8px\"><span class=\"fm-wide\">Tap the figure where you notice something to see which feelings people commonly report there.<\/span><span class=\"fm-narrow\">Choose one or more areas to see which feelings people commonly report there.<\/span><\/p>\n        <div id=\"resBox\" hidden>\n          <div class=\"fm-sensq\">\n            <div class=\"fm-sensdesk swap\"><p class=\"fm-lbl warm\" id=\"sensLbl\">What&#8217;s it like there?<\/p><div class=\"fm-chips warm\" id=\"sensChips\" role=\"group\" aria-labelledby=\"sensLbl\"><\/div><\/div>\n            <div class=\"fm-selectwrap swap\"><label for=\"sensSel\">What&#8217;s it like there?<\/label><select class=\"fm-select\" id=\"sensSel\"><\/select><\/div>\n          <\/div>\n          <p id=\"resLine\" class=\"fm-small\" aria-live=\"polite\"><\/p>\n          <div class=\"fm-rows\" id=\"rows\"><\/div>\n          <button class=\"fm-link\" id=\"moreRows\" type=\"button\" hidden><\/button>\n          <div class=\"fm-warn\" id=\"chestWarn\" hidden><strong>Chest pain, or pressure that spreads to your arm or jaw, or trouble breathing, needs medical help right away.<\/strong> Call your local emergency number. This map can&#8217;t tell a feeling from a medical problem.<\/div>\n        <\/div>\n        <details class=\"fm-note\" id=\"studyNote\">\n          <summary>What the body-map studies did and did not show<\/summary>\n          <div class=\"in\">\n            <p><strong>What they did.<\/strong> In the first study, in 2014, about 700 people looked at emotion words, short stories, film clips or faces, and painted on an outline of a body where they felt activity go up or down. Most spoke Finnish, with smaller groups who spoke Swedish and Taiwanese Hokkien.<\/p>\n<p>Averaged across people, the maps for different emotions looked different: more in the chest and head for many emotions, more in the arms and hands for anger and happiness, less in the arms and legs for sadness, more around the throat and stomach for disgust, and happiness lit up nearly the whole body. Later work with almost 4,000 people from 101 countries, using emotion words, found maps that agreed closely across countries and between women and men. A study of children found the maps get more specific as they grow up.<\/p>\n            <p><strong>What they didn&#8217;t.<\/strong> They&#8217;re averages of many people, not a reading of you, and in the first study most people were young adults and most were women. Your body can differ, and so can your culture, your history and the day you&#8217;ve had. They&#8217;re also what people said they felt, or expected to feel, not measurements of heart rate or muscle tension, and the authors say they can&#8217;t fully rule out that shared ideas about emotions shape the maps. There&#8217;s a lot of overlap too. When a computer was trained on the maps and asked to pick out six basic emotions and a neutral state, it was right about 4 times in 10, against about 1 in 7 by chance.<\/p>\n            <p>Most of the feelings on this page weren&#8217;t in the studies at all. For those, the body notes are common plain-language descriptions, and the page labels them that way.<\/p>\n            <p><strong>Use it as a way in, not a verdict.<\/strong> The same sensation can come from things that aren&#8217;t feelings, like caffeine, illness, medicines or poor sleep. If a sensation is strong, new or worrying, get it checked.<\/p>\n          <\/div>\n        <\/details>\n      <\/div><\/div><\/div><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group fm-prose has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#123f38;margin-top:80px;margin-bottom:10px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">USING IT WITH SOMEONE ELSE<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"the-map-works-for-two-too\" style=\"color:#1c5a4f;margin-top:0;margin-bottom:20px;font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.989), 25px);font-style:normal;font-weight:700;line-height:1.28\">The map works for two, too<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">Feelings are often easier to name with someone beside you.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\"><strong>With a partner.<\/strong> After a hard day, or before a conversation you&#8217;ve been putting off, each of you picks a word on your own, then you compare. It often turns up something neither of you expected, like irritation that&#8217;s really tiredness (or hunger, which happens more than anyone admits), or anger that&#8217;s really hurt. Starting from one word each is gentler than starting from the argument.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\"><strong>With a child.<\/strong> Children learn feeling words the way they learn any words, by hearing them used. Name your own feelings out loud now and then, like &#8220;I&#8217;m feeling a bit frustrated, so I&#8217;m taking a breath,&#8221; and let them point to a color on the wheel when they don&#8217;t have the word yet. You can then offer a word for it, like &#8220;Are you feeling sad?&#8221;, and let them tell you whether it fits. The nine core feelings in the middle are the easiest place to start.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:0;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\"><strong>With your therapist.<\/strong> You can do this with your therapist, too (I looove it!!). If a feeling came up during the week, find its word on the map and bring it to your next session, or look for it together when something is hard to put into words.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group fm-prose has-global-padding is-layout-constrained wp-container-core-group-is-layout-d12c95ff wp-block-group-is-layout-constrained\">\n\n\n<div class=\"fm-hair\" style=\"margin:84px 0 0;border-top:1px solid #e8e1d5\"><\/div>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#123f38;margin-top:40px;margin-bottom:10px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">WHY BOTHER WITH AN EXACT WORD?<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"a-better-word-tends-to-take-some-of-the-heat-out\" style=\"color:#1c5a4f;margin-top:0;margin-bottom:20px;font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.989), 25px);font-style:normal;font-weight:700;line-height:1.28\">A better word tends to take some of the heat out<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:26px;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">Putting a feeling into words has been shown, in brain-scan and lab studies, to ease distress and to calm the brain&#8217;s alarm response. People who can tell their feelings apart more finely also tend to cope better when things get hard. These are associations and modest effects, so treat a good word as a helpful tool, not a fix. Naming isn&#8217;t always the best first step, either. In one set of lab studies, people who named a feeling first found it a little harder to then see the situation differently, so <strong>if a feeling is huge, it&#8217;s fine to calm down first and come back to the word later.<\/strong><\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:0;font-size:clamp(14.082px, 0.88rem + ((1vw - 3.2px) * 0.786), 21px);line-height:1.68\">Our article <a id=\"lnkNIT\" href=\"https:\/\/equilibriumpsychotherapy.net\/name-it-to-tame-it\/\">Name It to Tame It<\/a> goes through the research and how to use it.<\/p>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div class=\"wp-block-group has-background fm-pn has-global-padding is-layout-constrained wp-container-core-group-is-layout-f66bc6a5 wp-block-group-is-layout-constrained\" style=\"background-color:#f2f5f7;border-color:#dde4ea;border-width:1.5px;border-style:solid;border-radius:20px;margin-top:72px;margin-bottom:0;padding:34px 58px\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#123f38;margin-top:0;margin-bottom:12px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">WHERE THIS MAP COMES FROM<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"our-own-drawing-built-on-old-ideas\" style=\"color:#2a2622;margin-top:0;margin-bottom:14px;font-size:clamp(15.197px, 0.95rem + ((1vw - 3.2px) * 0.887), 23px);font-style:normal;font-weight:700;line-height:1.28\">Our own drawing, built on old ideas<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:18px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">The core feelings come from research in which people sorted emotion words into piles of words that feel alike. The same few families kept showing up, such as fear, anger, sadness, joy and love. We added three that the classic lists tend to miss or fold into others: a family for shame, guilt and embarrassment, which are their own kind of feeling, a family for drained, low-energy states, and a family for calm, which the classic lists fold into joy. The wheel draws on another long-standing idea in psychology: feelings can be described by how pleasant they are and how much energy they carry. It also sits behind tools such as the Mood Meter.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:18px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">The colors come from a study of more than 4,500 people in 30 countries, who linked many of the same colors with the same feelings, such as red with anger, pink with love and yellow with joy. We made them lighter so every word is easy to read, and we chose our own colors for the feelings the study didn&#8217;t cover. Feeling wheels, like the one Gloria Willcox published in 1982, fan out from a few core feelings into finer words. Her wheel is the inspiration for ours, and we drew ours from scratch: the core feelings, words, groups and pictures are all our own.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:18px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">Scientists still don&#8217;t agree on how many emotions there are: some count six basic ones, one large study found 27, and some think emotions don&#8217;t come in fixed types at all, so the words here are a starting set, not a complete list. As far as we know, no feelings wheel, ours included, has been tested as a tool yet, so we can&#8217;t say how much using one helps: the studies so far are about naming feelings and telling them apart, and the science on wheels themselves hasn&#8217;t caught up yet.<\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:0;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">The wheel&#8217;s edges are soft on purpose. Research on how people describe emotions finds many distinct kinds that blend into each other smoothly, so neighbors on the wheel often overlap, and some words could sit in two families. Where each word sits, from unpleasant to pleasant and from low to high energy, is our own placement, guided by that research. This is a tool for noticing and naming. It isn&#8217;t therapy or a diagnosis.<\/p>\n\n\n<\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div class=\"wp-block-group fm-pn fm-warn has-global-padding is-layout-constrained wp-container-core-group-is-layout-3390b85e wp-block-group-is-layout-constrained\" style=\"margin-top:46px;margin-bottom:0\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#123f38;margin-top:0;margin-bottom:12px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">IF A FEELING IS TOO HEAVY<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"you-dont-have-to-sort-it-out-alone\" style=\"color:#2a2622;margin-top:0;margin-bottom:14px;font-size:clamp(15.197px, 0.95rem + ((1vw - 3.2px) * 0.887), 23px);font-style:normal;font-weight:700;line-height:1.28\">You don&#8217;t have to sort it out alone<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:18px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">Some feelings are heavy enough that a map isn&#8217;t what you need. If you feel hopeless, or you&#8217;re having thoughts of harming yourself or ending your life, you deserve real support. <strong>If you might act on those thoughts, or you&#8217;re in danger right now, call your local emergency number.<\/strong><\/p>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#2a2622;margin-top:0;margin-bottom:0;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.625), 19.5px);line-height:1.65\">You can find the crisis lines and emergency numbers for your country on <a href=\"https:\/\/equilibriumpsychotherapy.net\/crisis-helplines\/\">our helplines page<\/a>. <span id=\"sitSlot\">Our article on <a href=\"https:\/\/equilibriumpsychotherapy.net\/suicidal-thoughts\/\">suicidal thoughts<\/a> explains what helps and how to talk about it.<\/span><\/p>\n\n\n<\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-ee526680 wp-block-group-is-layout-constrained\" style=\"background-color:#faf8f3;border-color:#e8e1d5;border-width:1.5px;border-style:solid;border-radius:20px;margin-top:46px;margin-bottom:46px;padding:30px 34px\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#6b6259;margin-top:0;margin-bottom:14px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">REFERENCES<\/p>\n\n\n\n<ol class=\"wp-block-list has-text-color has-work-sans-regular-font-family\" style=\"color:#524a42;margin-top:0;margin-bottom:0;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.17), 15.5px);line-height:1.7\">\n<li><a href=\"https:\/\/doi.org\/10.1080\/17439760802650519\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Algoe, S. B., &amp; Haidt, J. (2009). Witnessing excellence in action: The \u201cother-praising\u201d emotions of elevation, gratitude, and admiration. <em>The Journal of Positive Psychology, 4<\/em>(2), 105-127.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.healthychildren.org\/English\/health-issues\/conditions\/emotional-problems\/Pages\/childhood-depression-what-parents-can-do-to-help.aspx\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">American Academy of Pediatrics. (2022, September 12). <em>Depression in children and teens<\/em>. HealthyChildren.org.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.healthychildren.org\/English\/healthy-living\/emotional-wellness\/Building-Resilience\/Pages\/Grieving-Whats-Normal-When-to-Worry.aspx\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">American Academy of Pediatrics. (2026, May 4). <em>Grief &amp; loss in childhood: How to help your child cope<\/em>. HealthyChildren.org.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1155\/2022\/7817267\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Bahrololoomi, Z., Sadeghiyeh, T., Rezaei, M., &amp; Maghsoudi, N. (2022). The effect of breathing exercise using bubble blower on anxiety and pain during inferior alveolar nerve block in children aged 7 to 10 years: A crossover randomized clinical trial. <em>Pain Research and Management, 2022<\/em>, Article 7817267.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/a0039854\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Bai, S., Repetti, R. L., &amp; Sperling, J. B. (2016). Children\u2019s expressions of positive emotion are sustained by smiling, touching, and playing with parents and siblings: A naturalistic observational study of family life. <em>Developmental Psychology, 52<\/em>(1), 88-101.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.3389\/fnevo.2010.00109\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Baron-Cohen, S., Golan, O., Wheelwright, S., Granader, Y., &amp; Hill, J. (2010). Emotion word comprehension from 4 to 16 years old: A developmental survey. <em>Frontiers in Evolutionary Neuroscience, 2<\/em>, Article 109.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/j.1745-6916.2006.00003.x\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Barrett, L. F. (2006). Are emotions natural kinds? <em>Perspectives on Psychological Science, 1<\/em>(1), 28-58.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.3389\/fpsyg.2015.00428\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Berrios, R., Totterdell, P., &amp; Kellett, S. (2015). Eliciting mixed emotions: A meta-analysis comparing models, types, and measures. <em>Frontiers in Psychology, 6<\/em>, Article 428.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1364\/josaa.29.000313\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Birch, J. (2012). Worldwide prevalence of red-green color deficiency. <em>Journal of the Optical Society of America A, 29<\/em>(3), 313-320.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1080\/00221325.1994.9914760\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Boyatzis, C. J., &amp; Varghese, R. (1994). Children\u2019s emotional associations with colors. <em>The Journal of Genetic Psychology, 155<\/em>(1), 77-85.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/a0035325\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Brooks, A. W. (2014). Get excited: Reappraising pre-performance anxiety as excitement. <em>Journal of Experimental Psychology: General, 143<\/em>(3), 1144-1158.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1038\/s41598-024-55689-z\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Burkhardt, S. C. A., R\u00f6\u00f6sli, P., &amp; M\u00fcller, X. (2024). The Tuning in to Kids parenting program delivered online improves emotion socialization and child behavior in a first randomized controlled trial. <em>Scientific Reports, 14<\/em>(1), Article 4979.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/1469-7610.00134\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Burkitt, E., Barrett, M., &amp; Davis, A. (2003). Children\u2019s colour choices for completing drawings of affectively characterised topics. <em>Journal of Child Psychology and Psychiatry, 44<\/em>(3), 445-455.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/0146167202289002\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Bushman, B. J. (2002). Does venting anger feed or extinguish the flame? Catharsis, rumination, distraction, anger, and aggressive responding. <em>Personality and Social Psychology Bulletin, 28<\/em>(6), 724-731.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/dev0001258\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Chan, R. F.-Y., Qiu, C., &amp; Shum, K. K.-M. (2021). Tuning in to Kids: A randomized controlled trial of an emotion coaching parenting program for Chinese parents in Hong Kong. <em>Developmental Psychology, 57<\/em>(11), 1796-1809.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1073\/pnas.1702247114\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Cowen, A. S., &amp; Keltner, D. (2017). Self-report captures 27 distinct categories of emotion bridged by continuous gradients. <em>Proceedings of the National Academy of Sciences, 114<\/em>(38), E7900-E7909.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1038\/nrn3403\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Damasio, A., &amp; Carvalho, G. B. (2013). The nature of feelings: Evolutionary and neurobiological origins. <em>Nature Reviews Neuroscience, 14<\/em>(2), 143-152.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/1745691612456044\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Eastwood, J. D., Frischen, A., Fenske, M. J., &amp; Smilek, D. (2012). The unengaged mind: Defining boredom in terms of attention. <em>Perspectives on Psychological Science, 7<\/em>(5), 482-495.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1080\/02699939208411068\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Ekman, P. (1992). An argument for basic emotions. <em>Cognition and Emotion, 6<\/em>(3-4), 169-200.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/emo0000638\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">England-Mason, G., &amp; Gonzalez, A. (2020). Intervening to shape children\u2019s emotion regulation: A review of emotion socialization parenting programs for young children. <em>Emotion, 20<\/em>(1), 98-104.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0003-066X.56.3.218\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Fredrickson, B. L. (2001). The role of positive emotions in positive psychology: The broaden-and-build theory of positive emotions. <em>American Psychologist, 56<\/em>(3), 218-226.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.87.2.228\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Gable, S. L., Reis, H. T., Impett, E. A., &amp; Asher, E. R. (2004). What do you do when things go right? The intrapersonal and interpersonal benefits of sharing positive events. <em>Journal of Personality and Social Psychology, 87<\/em>(2), 228-245.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/a0018807\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Goetz, J. L., Keltner, D., &amp; Simon-Thomas, E. (2010). Compassion: An evolutionary analysis and empirical review. <em>Psychological Bulletin, 136<\/em>(3), 351-374.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0893-3200.10.3.243\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Gottman, J. M., Katz, L. F., &amp; Hooven, C. (1996). Parental meta-emotion philosophy and the emotional life of families: Theoretical models and preliminary data. <em>Journal of Family Psychology, 10<\/em>(3), 243-268.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0003-066X.44.1.19\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Greenberg, L. S., &amp; Safran, J. D. (1989). Emotion in psychotherapy. <em>American Psychologist, 44<\/em>(1), 19-29.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1002\/aur.1569\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Griffin, C., Lombardo, M. V., &amp; Auyeung, B. (2016). Alexithymia in children with and without autism spectrum disorders. <em>Autism Research, 9<\/em>(7), 773-780.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s42761-021-00040-2\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Grosse, G., Streubel, B., Gunzenhauser, C., &amp; Saalbach, H. (2021). Let\u2019s talk about emotions: The development of children\u2019s emotion vocabulary from 4 to 11 years of age. <em>Affective Science, 2<\/em>(2), 150-162.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s10578-012-0322-1\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Havighurst, S. S., Wilson, K. R., Harley, A. E., Kehoe, C., Efron, D., &amp; Prior, M. R. (2013). \u201cTuning into Kids\u201d: Reducing young children\u2019s behavior problems using an emotion coaching parenting program. <em>Child Psychiatry &amp; Human Development, 44<\/em>(2), 247-264.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/j.1469-7610.2010.02303.x\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Havighurst, S. S., Wilson, K. R., Harley, A. E., Prior, M. R., &amp; Kehoe, C. (2010). Tuning in to Kids: Improving emotion socialization practices in parents of preschool children, findings from a community trial. <em>Journal of Child Psychology and Psychiatry, 51<\/em>(12), 1342-1350.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/desc.12389\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Hietanen, J. K., Glerean, E., Hari, R., &amp; Nummenmaa, L. (2016). Bodily maps of emotions across child development. <em>Developmental Science, 19<\/em>(6), 1111-1118.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/desc.12195\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Hostinar, C. E., Johnson, A. E., &amp; Gunnar, M. R. (2015). Parent support is less effective in buffering cortisol stress reactivity for adolescents compared to children. <em>Developmental Science, 18<\/em>(2), 281-297.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s10803-020-04844-2\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Hume, K., Steinbrenner, J. R., Odom, S. L., Morin, K. L., Nowell, S. W., Tomaszewski, B., Szendrey, S., McIntyre, N. S., Y\u00fccesoy-\u00d6zkan, S., &amp; Savage, M. N. (2021). Evidence-based practices for children, youth, and young adults with autism: Third generation review. <em>Journal of Autism and Developmental Disorders, 51<\/em>(11), 4013-4032.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/0956797620948810\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Jonauskaite, D., Abu-Akel, A., Dael, N., Oberfeld, D., Abdel-Khalek, A. M., Al-Rasheed, A. S., Antonietti, J.-P., Bogushevskaya, V., Chamseddine, A., Chkonia, E., Corona, V., Fonseca-Pedrero, E., Griber, Y. A., Grimshaw, G., Hasan, A. A., Havelka, J., Hirnstein, M., Karlsson, B. S. A., Laurent, E., . . . Mohr, C. (2020). Universal patterns in color-emotion associations are further shaped by linguistic and geographic proximity. <em>Psychological Science, 31<\/em>(10), 1245-1260.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/0963721414550708\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Kashdan, T. B., Barrett, L. F., &amp; McKnight, P. E. (2015). Unpacking emotion differentiation: Transforming unpleasant experience by perceiving distinctions in negativity. <em>Current Directions in Psychological Science, 24<\/em>(1), 10-16.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0033-2909.122.3.250\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Keltner, D., &amp; Buswell, B. N. (1997). Embarrassment: Its distinct form and appeasement functions. <em>Psychological Bulletin, 122<\/em>(3), 250-270.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1080\/02699930302297\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Keltner, D., &amp; Haidt, J. (2003). Approaching awe, a moral, spiritual, and aesthetic emotion. <em>Cognition and Emotion, 17<\/em>(2), 297-314.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1080\/02699931.2016.1233095\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Khng, K. H. (2017). A better state-of-mind: Deep breathing reduces state anxiety and enhances test performance through regulating test cognitions in children. <em>Cognition and Emotion, 31<\/em>(7), 1502-1510.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1016\/j.eurpsy.2018.09.004\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Kinnaird, E., Stewart, C., &amp; Tchanturia, K. (2019). Investigating alexithymia in autism: A systematic review and meta-analysis. <em>European Psychiatry, 55<\/em>, 80-89.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1016\/j.cpr.2024.102414\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Kj\u00e6rvik, S. L., &amp; Bushman, B. J. (2024). A meta-analytic review of anger management activities that increase or decrease arousal: What fuels or douses rage? <em>Clinical Psychology Review, 109<\/em>, Article 102414.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.81.4.684\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Larsen, J. T., McGraw, A. P., &amp; Cacioppo, J. T. (2001). Can people feel happy and sad at the same time? <em>Journal of Personality and Social Psychology, 81<\/em>(4), 684-696.<\/a><\/li>\n\n\n\n<li>Lazarus, R. S., &amp; Folkman, S. (1984). <em>Stress, appraisal, and coping<\/em>. Springer Publishing.<\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.74.5.1225\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Leary, M. R., Springer, C., Negel, L., Ansell, E., &amp; Evans, K. (1998). The causes, phenomenology, and consequences of hurt feelings. <em>Journal of Personality and Social Psychology, 74<\/em>(5), 1225-1237.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1016\/j.jaac.2019.02.014\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Lebowitz, E. R., Marin, C., Martino, A., Shimshoni, Y., &amp; Silverman, W. K. (2020). Parent-based treatment as efficacious as cognitive-behavioral therapy for childhood anxiety: A randomized noninferiority study of Supportive Parenting for Anxious Childhood Emotions. <em>Journal of the American Academy of Child &amp; Adolescent Psychiatry, 59<\/em>(3), 362-372.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1002\/da.21998\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Lebowitz, E. R., Woolston, J., Bar-Haim, Y., Calvocoressi, L., Dauser, C., Warnick, E., Scahill, L., Chakir, A. R., Shechner, T., Hermes, H., Vitulano, L. A., King, R. A., &amp; Leckman, J. F. (2013). Family accommodation in pediatric anxiety disorders. <em>Depression and Anxiety, 30<\/em>(1), 47-54.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/j.1467-9280.2007.01916.x\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Lieberman, M. D., Eisenberger, N. I., Crockett, M. J., Tom, S. M., Pfeifer, J. H., &amp; Way, B. M. (2007). Putting feelings into words: Affect labeling disrupts amygdala activity in response to affective stimuli. <em>Psychological Science, 18<\/em>(5), 421-428.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1046\/j.1440-1614.2002.01002.x\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Litz, B. T., &amp; Gray, M. J. (2002). Emotional numbing in posttraumatic stress disorder: Current and future research directions. <em>Australian &amp; New Zealand Journal of Psychiatry, 36<\/em>(2), 198-204.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.3389\/fpsyg.2014.00555\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Maassarani, R., Gosselin, P., Montembeault, P., &amp; Gagnon, M. (2014). French-speaking children\u2019s freely produced labels for facial expressions. <em>Frontiers in Psychology, 5<\/em>, Article 555.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/1754073916650495\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Nathanson, L., Rivers, S. E., Flynn, L. M., &amp; Brackett, M. A. (2016). Creating emotionally intelligent schools with RULER. <em>Emotion Review, 8<\/em>(4), 305-310.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.nimh.nih.gov\/health\/publications\/children-and-mental-health\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">National Institute of Mental Health. (2024). <em>Children and mental health: Is this just a stage?<\/em> (NIH Publication No. 24-MH-8085).<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1038\/s41562-017-0238-7\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Nook, E. C., Sasse, S. F., Lambert, H. K., McLaughlin, K. A., &amp; Somerville, L. H. (2017). Increasing verbal knowledge mediates development of multidimensional emotion representations. <em>Nature Human Behaviour, 1<\/em>(12), 881-889.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s42761-021-00036-y\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Nook, E. C., Satpute, A. B., &amp; Ochsner, K. N. (2021). Emotion naming impedes both cognitive reappraisal and mindful acceptance strategies of emotion regulation. <em>Affective Science, 2<\/em>(2), 187-198.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1073\/pnas.1321664111\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Nummenmaa, L., Glerean, E., Hari, R., &amp; Hietanen, J. K. (2014). Bodily maps of emotions. <em>Proceedings of the National Academy of Sciences, 111<\/em>(2), 646-651.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.64.6.906\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Parrott, W. G., &amp; Smith, R. H. (1993). Distinguishing the experiences of envy and jealousy. <em>Journal of Personality and Social Psychology, 64<\/em>(6), 906-920.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1080\/02699931.2016.1204989\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Pekrun, R., Vogl, E., Muis, K. R., &amp; Sinatra, G. M. (2017). Measuring emotions during epistemic activities: The Epistemically-Related Emotion Scales. <em>Cognition and Emotion, 31<\/em>(6), 1268-1276.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.58734\/plc-2025-0011\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Poynter, M., &amp; Smith Pasqualini, M. (2025). Getting excited about public speaking: A replication. <em>Psychology of Language and Communication, 29<\/em>(1), 254-265.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1016\/j.ridd.2016.12.018\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Rieffe, C., &amp; Wiefferink, C. H. (2017). Happy faces, sad faces: Emotion understanding in toddlers and preschoolers with language impairments. <em>Research in Developmental Disabilities, 62<\/em>, 40-49.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.rcpsych.ac.uk\/mental-health\/children-and-young-people\/information-for-parents-and-carers\/distress-and-trauma-in-children-and-young-people\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Royal College of Psychiatrists. (2026, March). <em>Distress and trauma in children and young people<\/em>.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/h0077714\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Russell, J. A. (1980). A circumplex model of affect. <em>Journal of Personality and Social Psychology, 39<\/em>(6), 1161-1178.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/1467-9507.00185\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Russell, J. A., &amp; Widen, S. C. (2002). A label superiority effect in children\u2019s categorization of facial expressions. <em>Social Development, 11<\/em>(1), 30-52.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/emo0000968\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Seah, T. H. S., &amp; Coifman, K. G. (2022). Emotion differentiation and behavioral dysregulation in clinical and nonclinical samples: A meta-analysis. <em>Emotion, 22<\/em>(7), 1686-1697.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1098\/rspb.2010.0567\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Seltzer, L. J., Ziegler, T. E., &amp; Pollak, S. D. (2010). Social vocalizations can release oxytocin in humans. <em>Proceedings of the Royal Society B: Biological Sciences, 277<\/em>(1694), 2661-2666.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1111\/j.1475-6811.1996.tb00105.x\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Shaver, P. R., Morgan, H. J., &amp; Wu, S. (1996). Is love a \u201cbasic\u201d emotion? <em>Personal Relationships, 3<\/em>(1), 81-96.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.52.6.1061\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Shaver, P., Schwartz, J., Kirson, D., &amp; O\u2019Connor, C. (1987). Emotion knowledge: Further exploration of a prototype approach. <em>Journal of Personality and Social Psychology, 52<\/em>(6), 1061-1086.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/0146167288142017\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Smith, R. H., Kim, S. H., &amp; Parrott, W. G. (1988). Envy and jealousy: Semantic problems and experiential distinctions. <em>Personality and Social Psychology Bulletin, 14<\/em>(2), 401-409.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1207\/S15327965PLI1304_01\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Snyder, C. R. (2002). Hope theory: Rainbows in the mind. <em>Psychological Inquiry, 13<\/em>(4), 249-275.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1016\/j.cpr.2010.08.004\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Sylvers, P., Lilienfeld, S. O., &amp; LaPrairie, J. L. (2011). Differences between trait fear and trait anxiety: Implications for psychopathology. <em>Clinical Psychology Review, 31<\/em>(1), 122-137.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.70.6.1256\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Tangney, J. P., Miller, R. S., Flicker, L., &amp; Barlow, D. H. (1996). Are shame, guilt, and embarrassment distinct emotions? <em>Journal of Personality and Social Psychology, 70<\/em>(6), 1256-1269.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1146\/annurev.psych.56.091103.070145\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Tangney, J. P., Stuewig, J., &amp; Mashek, D. J. (2007). Moral emotions and moral behavior. <em>Annual Review of Psychology, 58<\/em>(1), 345-372.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1371\/journal.pone.0028883\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Toivonen, R., Kivel&auml;, M., Saram&auml;ki, J., Viinikainen, M., Vanhatalo, M., &amp; Sams, M. (2012). Networks of emotion concepts. <em>PLOS ONE, 7<\/em>(1), Article e28883.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/1754073917742706\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Torre, J. B., &amp; Lieberman, M. D. (2018). Putting feelings into words: Affect labeling as implicit emotion regulation. <em>Emotion Review, 10<\/em>(2), 116-124.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.92.3.506\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Tracy, J. L., &amp; Robins, R. W. (2007). The psychological structure of pride: A tale of two facets. <em>Journal of Personality and Social Psychology, 92<\/em>(3), 506-525.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s10803-012-1695-5\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Uljarevic, M., &amp; Hamilton, A. (2013). Recognition of emotions in autism: A formal meta-analysis. <em>Journal of Autism and Developmental Disorders, 43<\/em>(7), 1517-1526.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/a0015669\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">van de Ven, N., Zeelenberg, M., &amp; Pieters, R. (2009). Leveling up and down: The experiences of benign and malicious envy. <em>Emotion, 9<\/em>(3), 419-429.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/emo0000624\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Volynets, S., Glerean, E., Hietanen, J. K., Hari, R., &amp; Nummenmaa, L. (2020). Bodily maps of emotions are culturally universal. <em>Emotion, 20<\/em>(7), 1127-1136.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.2217\/pmt.10.2\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">von Baeyer, C. L., Lin, V., Seidman, L. C., Tsao, J. C. I., &amp; Zeltzer, L. K. (2011). Pain charts (body maps or manikins) in assessment of the location of pediatric pain. <em>Pain Management, 1<\/em>(1), 61-68.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.54.6.1063\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Watson, D., Clark, L. A., &amp; Tellegen, A. (1988). Development and validation of brief measures of positive and negative affect: The PANAS scales. <em>Journal of Personality and Social Psychology, 54<\/em>(6), 1063-1070.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1007\/s10567-019-00303-2\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Whiteside, S. P. H., Sim, L. A., Morrow, A. S., Farah, W. H., Hilliker, D. R., Murad, M. H., &amp; Wang, Z. (2020). A meta-analysis to guide the enhancement of CBT for childhood anxiety: Exposure over anxiety management. <em>Clinical Child and Family Psychology Review, 23<\/em>(1), 102-121.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/1754073912451492\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Widen, S. C. (2013). Children\u2019s interpretation of facial expressions: The long path from valence-based to specific discrete categories. <em>Emotion Review, 5<\/em>(1), 72-77.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0012-1649.39.1.114\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Widen, S. C., &amp; Russell, J. A. (2003). A closer look at preschoolers\u2019 freely produced labels for facial expressions. <em>Developmental Psychology, 39<\/em>(1), 114-128.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1348\/026151009x457550d\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Widen, S. C., &amp; Russell, J. A. (2010). Children\u2019s scripts for social emotions: Causes and consequences are more central than are facial expressions. <em>British Journal of Developmental Psychology, 28<\/em>(3), 565-581.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/0022-3514.91.5.975\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Wildschut, T., Sedikides, C., Arndt, J., &amp; Routledge, C. (2006). Nostalgia: Content, triggers, functions. <em>Journal of Personality and Social Psychology, 91<\/em>(5), 975-993.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/036215378201200411\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Willcox, G. (1982). The feeling wheel: A tool for expanding awareness of emotions and increasing spontaneity and intimacy. <em>Transactional Analysis Journal, 12<\/em>(4), 274-276.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1037\/a0026480\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Wilson, K. R., Havighurst, S. S., &amp; Harley, A. E. (2012). Tuning in to Kids: An effectiveness trial of a parenting program targeting emotion socialization of preschoolers. <em>Journal of Family Psychology, 26<\/em>(1), 56-65.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.who.int\/publications\/i\/item\/978240112360\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">World Health Organization. (2025). <em>From loneliness to social connection: Charting a path to healthier societies<\/em> [Report of the WHO Commission on Social Connection].<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.who.int\/news-room\/fact-sheets\/detail\/depression\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">World Health Organization. (2026). <em>Depressive disorder (depression)<\/em> [Fact sheet].<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/applications.emro.who.int\/docs\/9789290224693-eng.pdf\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">World Health Organization Regional Office for the Eastern Mediterranean. (2021). <em>Implementing the mental health Gap Action Programme intervention guide: A job aid for non-specialist health professionals<\/em>.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.3389\/fnhum.2018.00353\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Zaccaro, A., Piarulli, A., Laurino, M., Garbella, E., Menicucci, D., Neri, B., &amp; Gemignani, A. (2018). How breath-control can change your life: A systematic review on psycho-physiological correlates of slow breathing. <em>Frontiers in Human Neuroscience, 12<\/em>, Article 353.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1006\/obhd.1998.2784\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Zeelenberg, M., van Dijk, W. W., van der Pligt, J., Manstead, A. S. R., van Empelen, P., &amp; Reinderman, D. (1998). Emotional reactions to the outcomes of decisions: The role of counterfactual thought in the experience of regret and disappointment. <em>Organizational Behavior and Human Decision Processes, 75<\/em>(2), 117-141.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/doi.org\/10.1177\/0165025410384923\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Zimmer-Gembeck, M. J., &amp; Skinner, E. A. (2011). The development of coping across childhood and adolescence: An integrative review and critique of research. <em>International Journal of Behavioral Development, 35<\/em>(1), 1-17.<\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#6b6259;margin-top:30px;margin-bottom:14px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">BOOKS FROM OUR SHELF<\/p>\n\n\n\n<ol class=\"wp-block-list has-text-color has-work-sans-regular-font-family\" style=\"color:#524a42;margin-top:0;margin-bottom:0;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.17), 15.5px);line-height:1.7\">\n<li><a href=\"https:\/\/www.penguinrandomhouse.com\/books\/557596\/atlas-of-the-heart-by-brene-brown-phd-msw\/\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Brown, B. (2021). <em>Atlas of the heart: Mapping meaningful connection and the language of human experience<\/em>. Random House.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.abramsbooks.com\/product\/in-my-heart_9781419713101\/\" target=\"_blank\" rel=\"noopener\" style=\"color:inherit;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#e6cd9c\">Witek, J. (2014). <em>In my heart: A book of feelings<\/em> [Children\u2019s book]. Abrams Appleseed.<\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"eq-lastrev\" style=\"margin:22px 0 0;font-family:&quot;Work Sans&quot;,sans-serif;font-size:12px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;line-height:1.5;color:#6b6259\">Last reviewed October 2026<\/p>\n\n\n<\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-d2a766d4 wp-block-group-is-layout-constrained\">\n\n\n<div style=\"margin-top:0px;margin-bottom:0px\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1708\" src=\"https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-scaled.jpg\" alt=\"A therapist taking notes on a clipboard during a session\" class=\"wp-image-230\" style=\"width:100%;height:340px;object-fit:cover;object-position:center 40%;border-radius:22px 22px 0 0;display:block\" srcset=\"https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-scaled.jpg 2560w, https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-300x200.jpg 300w, https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-1024x683.jpg 1024w, https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-768x512.jpg 768w, https:\/\/equilibriumpsychotherapy.net\/wp-content\/uploads\/2024\/06\/mid-shot-woman-therapist-taking-notes-clipboard-1536x1025.jpg 1536w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/div>\n\n\n\n<div class=\"wp-block-group has-background eq-ondark has-global-padding is-layout-constrained wp-container-core-group-is-layout-f761ea3b wp-block-group-is-layout-constrained\" style=\"background-color:#123f38;border-radius:0px 0px 22px 22px;margin-top:0;margin-bottom:80px;padding:52px\">\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#b9d1c9;margin-top:0;margin-bottom:14px;font-size:12px;font-weight:700;letter-spacing:0.16em;line-height:1.4\">WORKING WITH THIS<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-work-sans-regular-font-family\" id=\"when-the-same-feelings-keep-coming-back\" style=\"color:#ffffff;margin-top:0;margin-bottom:18px;font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.989), 25px);font-style:normal;font-weight:700;line-height:1.28\">When the same feelings keep coming back<\/h3>\n\n\n\n<p class=\"has-text-color has-work-sans-regular-font-family wp-block-paragraph\" style=\"color:#ffffff;margin-top:0;margin-bottom:30px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.455), 18px);line-height:1.7\">Some feelings come back again and again, or arrive so tangled that no word fits. Therapy is a place to slow down with them, notice what you feel and where, and work out what each one is asking of you, at your own pace. If you&#8217;re already seeing one of us, bring what you noticed here to your next session.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background has-work-sans-regular-font-family wp-element-button\" href=\"\/individual-session\/\" style=\"border-radius:9px;color:#2a2622;background-color:#faf8f3;padding:15px 30px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.284), 16.5px);font-weight:700\">Book a session<\/a><\/div>\n\n\n\n<div class=\"wp-block-button footer_b\"><a class=\"wp-block-button__link has-text-color has-work-sans-regular-font-family wp-element-button\" href=\"\/contact\/\" style=\"border-color:#b9d1c9;border-width:1.5px;border-style:solid;border-radius:9px;color:#ffffff;padding:15px 30px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.284), 16.5px);font-weight:600\">Get in touch<\/a><\/div>\n<\/div>\n\n\n<\/div>\n\n\n<\/div>\n\n\n\n<style>.eqp{--rc-accent:#1c5a4f;--rc-band:#edf3f0;--rc-hover:#dfeae5;--rc-bg:#faf8f3}.eqp .eq-rc-btn{display:none}.eqp .eq-rc{position:relative}.eqp .eq-rc li[hidden]{display:block;margin:0;padding:0;height:0;line-height:0;font-size:0}.eqp .eq-rc li.rc-off{display:none}.eqp .eq-rc.is-collapsed::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:76px;background:linear-gradient(to bottom,transparent,var(--rc-bg) 94%);pointer-events:none}.eqp .eq-rc ~ .eq-rc-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box;min-width:260px;min-height:48px;margin:22px 0 0;padding:12px 26px;background:var(--rc-band);color:var(--rc-accent);border:1.5px solid var(--rc-accent);border-radius:9px;font-family:\"Work Sans\",system-ui,sans-serif;font-size:15px;font-weight:600;line-height:1.3;letter-spacing:normal;text-transform:none;text-decoration:none;text-align:center;box-shadow:none;cursor:pointer;-webkit-appearance:none;appearance:none;-webkit-tap-highlight-color:transparent}.eqp .eq-rc ~ .eq-rc-btn:hover{background:var(--rc-hover);color:var(--rc-accent)}.eqp .eq-rc ~ .eq-rc-btn:focus-visible{outline:3px solid var(--rc-accent);outline-offset:3px}.eqp .eq-rc-chev{flex:0 0 auto;width:8px;height:8px;margin-top:-4px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .2s ease}.eqp .eq-rc-btn[aria-expanded=\"true\"] .eq-rc-chev{margin-top:4px;transform:rotate(-135deg)}@media (max-width:640px){.eqp .eq-rc ~ .eq-rc-btn{display:flex;width:100%;min-width:0;margin:18px 0 0;padding:12px 10px}}@media (prefers-reduced-motion:reduce){.eqp .eq-rc-chev{transition:none}}@media print{.eqp .eq-rc-btn{display:none!important}.eqp .eq-rc::after{display:none!important}.eqp .eq-rc li[hidden]{display:list-item!important;content-visibility:visible!important;height:auto!important;font-size:inherit!important;line-height:inherit!important}.eqp .eq-rc li.rc-off{display:list-item!important}}<\/style>\n<style id=\"eq-sweep-3436\">\n\/* sweep 20 Oct 2026, design only (no text change). Sizes in rem, no ampersand. *\/\n\/* D1: the closing panel heading stands above its own text on phones (17px over 17px today). House fix, as on Slow Breathing and Alcohol: a 20px floor, the same curve from 768px up. *\/\nbody .eqp .eq-ondark h3.wp-block-heading{font-size:clamp(1.25rem,calc(.89rem + .84vw),1.5625rem)!important}\n\/* D2: nothing in the tool as big as a part title. Up to 1023px the part titles are 24px, the pair headings (\"Shame\", \"Guilt\") are 24px too and \"Feelings often noticed there\" is 23px. Both to 21px there; unchanged from 1024px up. *\/\n@media (max-width:1023px){body .eqp .fm-side h4,body .eqp .fm-results h3{font-size:1.3125rem}}\n\/* D4: lone last words. pretty on running text and captions, balance on headings only (balance halves sublines on tablets). *\/\nbody .eqp p,body .eqp li,body .eqp figcaption,body .eqp .fm-hint{text-wrap:pretty}\nbody .eqp h3.wp-block-heading,body .eqp .eq-toc .ttl{text-wrap:balance}\n\nbody .eqp h3.wp-block-heading{text-wrap:pretty}<\/style>\n<script>(function(){\nif(window.eqRcLoaded){return;}\nwindow.eqRcLoaded=1;\nvar MQ=null,RM=null;\nif(window.matchMedia){\nMQ=window.matchMedia(\"(max-width: 640px)\");\nRM=window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n}\nvar UF=(\"onbeforematch\" in document.documentElement);\nvar INST=[];\nvar KEEP_PHONE=3,KEEP_WIDE=5,MAXOPEN=12;\nfunction keepNow(){\nvar phone=false;\nif(MQ){phone=MQ.matches;}\nif(phone){return KEEP_PHONE;}\nreturn KEEP_WIDE;\n}\nfunction findLists(){\nvar out=[],i,j,l,k,ok=false;\ntry{\nl=document.querySelectorAll(\".eqp .wp-block-group:has(> p.eq-lastrev) > ol\");\nfor(i=0;i<l.length;i++){out.push(l[i]);}\nok=true;\n}catch(e){ok=false;}\nif(!ok){\nl=document.querySelectorAll(\".eqp p.eq-lastrev\");\nfor(i=0;i<l.length;i++){\nk=l[i].parentNode.children;\nfor(j=0;j<k.length;j++){\nif(k[j].tagName===\"OL\"){out.push(k[j]);}\n}\n}\n}\nreturn out;\n}\nfunction setup(list,idx){\nif(list.getAttribute(\"data-rc\")===\"1\"){return;}\nvar items=[],i,kids=list.children;\nfor(i=0;i<kids.length;i++){\nif(kids[i].tagName===\"LI\"){items.push(kids[i]);}\n}\nif(items.length<=MAXOPEN){return;}\nvar head=list.previousElementSibling;\nif(!head){head=list;}\nvar noun=\"references\";\nvar ht=head.textContent||\"\";\nif(\/further\/i.test(ht)){\nif(!\/reference\/i.test(ht)){return;}\n}\nlist.setAttribute(\"data-rc\",\"1\");\nif(!list.id){list.id=\"eq-rc-list-\"+idx;}\nhead.style.scrollMarginTop=\"88px\";\nvar btn=document.createElement(\"button\");\nbtn.type=\"button\";\nbtn.className=\"eq-rc-btn\";\nbtn.setAttribute(\"aria-controls\",list.id);\nbtn.setAttribute(\"aria-expanded\",\"false\");\nvar lab=document.createElement(\"span\");\nvar chev=document.createElement(\"span\");\nchev.className=\"eq-rc-chev\";\nchev.setAttribute(\"aria-hidden\",\"true\");\nbtn.appendChild(lab);\nbtn.appendChild(chev);\nlist.parentNode.insertBefore(btn,list.nextSibling);\nlist.classList.add(\"eq-rc\");\nvar open=false;\nfunction paint(){\nvar keep=keepNow();\nvar k,li;\nfor(k=0;k<items.length;k++){\nli=items[k];\nif(k<keep){\nli.removeAttribute(\"hidden\");\nli.classList.remove(\"rc-off\");\n}else if(open){\nli.removeAttribute(\"hidden\");\nli.classList.remove(\"rc-off\");\n}else{\nif(UF){li.setAttribute(\"hidden\",\"until-found\");}\nelse{li.classList.add(\"rc-off\");}\n}\n}\nif(open){list.classList.remove(\"is-collapsed\");}\nelse{list.classList.add(\"is-collapsed\");}\nbtn.setAttribute(\"aria-expanded\",open?\"true\":\"false\");\nlab.textContent=open?\"Show fewer\":\"Show all \"+items.length+\" \"+noun;\n}\nbtn.addEventListener(\"click\",function(){\nvar t0=btn.getBoundingClientRect().top;\nopen=!open;\npaint();\nif(!open){\nvar d=btn.getBoundingClientRect().top-t0;\nif(d){window.scrollBy({top:d,left:0,behavior:\"instant\"});}\n}\n});\nlist.addEventListener(\"beforematch\",function(){\nif(!open){open=true;paint();}\n});\nvar was=false;\nwindow.addEventListener(\"beforeprint\",function(){was=open;open=true;paint();});\nwindow.addEventListener(\"afterprint\",function(){open=was;paint();});\nif(MQ){\nif(MQ.addEventListener){MQ.addEventListener(\"change\",paint);}\nelse if(MQ.addListener){MQ.addListener(paint);}\n}\nINST.push(function(target){\nif(target===list){return false;}\nif(!list.contains(target)){return false;}\nif(open){return false;}\nvar n=target;\nwhile(n.parentNode!==list){n=n.parentNode;}\nif(items.indexOf(n)<keepNow()){return false;}\nopen=true;\npaint();\nreturn true;\n});\npaint();\n}\nfunction targetOf(hash){\nif(!hash){return null;}\nif(hash.length<2){return null;}\nvar id=hash.slice(1);\ntry{id=decodeURIComponent(id);}catch(e){id=hash.slice(1);}\nreturn document.getElementById(id);\n}\nfunction reveal(target){\nvar i,did=false;\nif(!target){return false;}\nfor(i=0;i<INST.length;i++){\nif(INST[i](target)){did=true;}\n}\nreturn did;\n}\nfunction fromHash(){\nvar t=targetOf(window.location.hash);\nif(reveal(t)){\nt.scrollIntoView({block:\"start\"});\n}\n}\nfunction run(){\nvar lists=findLists(),b;\nfor(b=0;b<lists.length;b++){setup(lists[b],b);}\nfromHash();\n}\ndocument.addEventListener(\"click\",function(e){\nvar a=e.target;\nwhile(a){\nif(a.tagName===\"A\"){break;}\na=a.parentNode;\n}\nif(!a){return;}\nif(!a.getAttribute){return;}\nvar h=a.getAttribute(\"href\");\nif(!h){return;}\nif(h.charAt(0)!==\"#\"){return;}\nreveal(targetOf(h));\n},true);\nwindow.addEventListener(\"hashchange\",fromHash);\nwindow.addEventListener(\"load\",fromHash);\nrun();\nif(document.readyState===\"loading\"){\ndocument.addEventListener(\"DOMContentLoaded\",run);\n}\n})();<\/script>\n\n\n\n<div class=\"fm-vh\" id=\"live\" aria-live=\"polite\" role=\"status\"><\/div>\n<noscript><p style=\"padding:20px 0;margin:0\">This tool needs JavaScript to run.<\/p><\/noscript>\n<script>\n(function(){\n'use strict';\nvar DATA={\"meta\":{\"name\":\"The Feelings Map\",\"version\":\"0.3\",\"count\":66},\"groups\":[{\"id\":\"afraid\",\"name\":\"Afraid\"},{\"id\":\"angry\",\"name\":\"Angry\"},{\"id\":\"ashamed\",\"name\":\"Ashamed\"},{\"id\":\"sad\",\"name\":\"Sad\"},{\"id\":\"drained\",\"name\":\"Drained\"},{\"id\":\"calm\",\"name\":\"Calm\"},{\"id\":\"connected\",\"name\":\"Connected\"},{\"id\":\"happy\",\"name\":\"Happy\"},{\"id\":\"curious\",\"name\":\"Curious\"}],\"regions\":[{\"id\":\"head\",\"name\":\"Head\",\"hint\":\"Top and back of the head, forehead, scalp, and the thoughts in it\"},{\"id\":\"face\",\"name\":\"Face\",\"hint\":\"Eyes, cheeks, jaw and mouth\"},{\"id\":\"throat\",\"name\":\"Throat\",\"hint\":\"Throat and neck\"},{\"id\":\"chest\",\"name\":\"Chest\",\"hint\":\"Chest, heart and breathing\"},{\"id\":\"stomach\",\"name\":\"Stomach\",\"hint\":\"Stomach and belly\"},{\"id\":\"arms\",\"name\":\"Arms and hands\",\"hint\":\"Shoulders down through the arms to the fingertips\"},{\"id\":\"legs\",\"name\":\"Legs\",\"hint\":\"Hips, legs and feet\"}],\"sensations\":[{\"id\":\"tight\",\"label\":\"Tight or clenched\"},{\"id\":\"heavy\",\"label\":\"Heavy\"},{\"id\":\"hot\",\"label\":\"Hot or flushed\"},{\"id\":\"racing\",\"label\":\"Racing or pounding\"},{\"id\":\"fluttery\",\"label\":\"Fluttery or shaky\"},{\"id\":\"queasy\",\"label\":\"Queasy or churning\"},{\"id\":\"hollow\",\"label\":\"Hollow or sinking\"},{\"id\":\"numb\",\"label\":\"Numb or far away\"},{\"id\":\"warm\",\"label\":\"Warm\"},{\"id\":\"light\",\"label\":\"Light or lifted\"},{\"id\":\"tingly\",\"label\":\"Tingly\"},{\"id\":\"restless\",\"label\":\"Buzzing or restless\"}],\"feelings\":[{\"id\":\"afraid\",\"name\":\"Afraid\",\"group\":\"afraid\",\"p\":8,\"e\":88,\"def\":\"Afraid is what you feel when something in front of you seems dangerous, right now. It's fast, it's physical, and it's built to get you out of the way.\",\"body\":\"Your heart pounds, your breathing gets quick and shallow, your muscles brace and your stomach can drop. Some people freeze instead and go very still.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"racing\",\"tight\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]}],\"evidence\":\"mapped\",\"message\":\"Fear is asking you to check for danger. Sometimes the danger is real, and sometimes it's a memory or a guess about what might happen. Your body reacts in much the same way to both.\",\"confused\":[{\"id\":\"anxious\",\"diff\":\"Afraid is about something here and now. Anxious is about something that might happen.\"}],\"try\":\"Look around and name three things you can see that are safe right now, then let your out-breath run longer than your in-breath. If the danger is real, getting to safety comes first.\",\"defFirst\":\"Afraid is what you feel when something in front of you seems dangerous, right now.\",\"defRest\":\"It's fast, it's physical, and it's built to get you out of the way.\",\"msgFirst\":\"Fear is asking you to check for danger.\",\"msgRest\":\"Sometimes the danger is real, and sometimes it's a memory or a guess about what might happen. Your body reacts in much the same way to both.\"},{\"id\":\"anxious\",\"name\":\"Anxious\",\"group\":\"afraid\",\"p\":24,\"e\":72,\"def\":\"Anxious is that tense, what-if feeling about something that hasn't happened yet. The threat is in the future, so there's nothing to run from, and the feeling has nowhere to go.\",\"body\":\"A tight chest, a fluttery or churning stomach, a restless body, shallow breathing, tense shoulders and jaw. It can also feel like a mind that won't switch off.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"fluttery\",\"queasy\"]},{\"r\":\"head\",\"s\":[\"restless\"]},{\"r\":\"arms\",\"s\":[\"restless\",\"tight\"]},{\"r\":\"face\",\"s\":[\"tight\"]}],\"evidence\":\"mapped-less-distinct\",\"message\":\"That something ahead matters to you and feels uncertain. Anxiety is asking for a plan or for some reassurance, and often for your body to slow down first.\",\"confused\":[{\"id\":\"afraid\",\"diff\":\"Afraid is about danger that's here now. Anxious is about danger that might come.\"},{\"id\":\"worried\",\"diff\":\"Worried lives more in your thoughts. Anxious lives more in your body.\"}],\"try\":\"Breathe out slowly, longer than you breathe in, for one minute. Then write down the one thing you can actually do about it today, even if it's tiny.\",\"link\":{\"slug\":\"slow-breathing\",\"why\":\"The first step to try is the subject of that whole post.\"},\"defFirst\":\"Anxious is that tense, what-if feeling about something that hasn't happened yet.\",\"defRest\":\"The threat is in the future, so there's nothing to run from, and the feeling has nowhere to go.\",\"msgFirst\":\"That something ahead matters to you and feels uncertain.\",\"msgRest\":\"Anxiety is asking for a plan or for some reassurance, and often for your body to slow down first.\"},{\"id\":\"worried\",\"name\":\"Worried\",\"group\":\"afraid\",\"p\":36,\"e\":54,\"def\":\"Worried is the thinking side of anxiety. Your mind keeps turning over what could go wrong and how you'd cope.\",\"body\":\"Usually less dramatic in the body than anxiety: a low hum in the stomach, a tight forehead or jaw, and a busy head, especially at night.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"tight\",\"restless\"]},{\"r\":\"face\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That your mind is trying to solve something unfinished. Worry feels like preparing, though it often just goes around in circles.\",\"confused\":[{\"id\":\"anxious\",\"diff\":\"Worry is made of thoughts. Anxiety is the whole-body version of the same alarm.\"}],\"try\":\"Pick one worry and write it down. Next to it, write either \\\"something I can do\\\" or \\\"something I can't control today\\\". Then close the page.\",\"link\":{\"slug\":\"worry-time\",\"why\":\"Worry time is a tool built for exactly this step.\"},\"defFirst\":\"Worried is the thinking side of anxiety.\",\"defRest\":\"Your mind keeps turning over what could go wrong and how you'd cope.\",\"msgFirst\":\"That your mind is trying to solve something unfinished.\",\"msgRest\":\"Worry feels like preparing, though it often just goes around in circles.\"},{\"id\":\"onedge\",\"name\":\"On edge\",\"group\":\"afraid\",\"p\":22,\"e\":86,\"def\":\"On edge means braced and jumpy, as if something might go wrong at any second, even when you can't say what.\",\"body\":\"Tight shoulders and jaw, a startle that's quicker than usual, shallow breathing and a wired feeling.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"tight\"]},{\"r\":\"arms\",\"s\":[\"tight\",\"restless\"]},{\"r\":\"chest\",\"s\":[\"tight\",\"racing\"]},{\"r\":\"head\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That your alarm system has been running for a while. It often follows too little sleep, a lot of caffeine, or a stretch of stress with no break in it.\",\"confused\":[{\"id\":\"anxious\",\"diff\":\"Anxious usually circles something that might happen. On edge is more of a level that stays high, braced for trouble from anywhere.\"},{\"id\":\"restless\",\"diff\":\"Restless wants to move. On edge wants to watch for trouble.\"}],\"try\":\"Do one thing that tells your body this moment is safe: a slow walk, a warm drink, shoulders dropped, jaw unclenched. If you can, skip the extra coffee today.\",\"defFirst\":\"On edge means braced and jumpy, as if something might go wrong at any second, even when you can't say what.\",\"defRest\":\"\",\"msgFirst\":\"That your alarm system has been running for a while.\",\"msgRest\":\"It often follows too little sleep, a lot of caffeine, or a stretch of stress with no break in it.\"},{\"id\":\"stressed\",\"name\":\"Stressed\",\"group\":\"afraid\",\"p\":30,\"e\":78,\"def\":\"Stressed is the feeling that what's being asked of you is more than the time, energy or support you have right now. You're still managing, but it takes effort.\",\"body\":\"Tight neck and shoulders, a headache, a clenched jaw, a fast heart, trouble settling and an unsettled stomach.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"tight\"]},{\"r\":\"face\",\"s\":[\"tight\"]},{\"r\":\"chest\",\"s\":[\"racing\",\"tight\"]},{\"r\":\"stomach\",\"s\":[\"tight\",\"queasy\"]},{\"r\":\"arms\",\"s\":[\"tight\"]},{\"r\":\"throat\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That the demands and your resources don't match. Stress points to something you can reduce, delay, share or ask for help with.\",\"confused\":[{\"id\":\"overwhelmed\",\"diff\":\"Stressed still feels like you're coping, even if it's hard. Overwhelmed means it's more than you can take in right now.\"}],\"try\":\"Write everything that's pressing on you in one list, then circle only what has to happen today. Add one thing you could hand over or drop.\",\"link\":{\"slug\":\"your-brain-on-stress\",\"why\":\"It explains what stress is doing in your body and brain.\"},\"defFirst\":\"Stressed is the feeling that what's being asked of you is more than the time, energy or support you have right now.\",\"defRest\":\"You're still managing, but it takes effort.\",\"msgFirst\":\"That the demands and your resources don't match.\",\"msgRest\":\"Stress points to something you can reduce, delay, share or ask for help with.\"},{\"id\":\"overwhelmed\",\"name\":\"Overwhelmed\",\"group\":\"afraid\",\"p\":14,\"e\":76,\"def\":\"Overwhelmed is when more is coming in than you can take in, whether that's tasks, feelings, noise or people. Your mind can't sort it, so everything feels equally urgent.\",\"body\":\"Your chest tightens and your breathing gets shallow, your head feels full or foggy, and your body can either speed up or start to shut down.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"tight\"]},{\"r\":\"head\",\"s\":[\"heavy\",\"restless\"]}],\"evidence\":\"described\",\"message\":\"That you've hit your limit for now. It's a sign to let less in at once, not a sign that you're failing.\",\"confused\":[{\"id\":\"stressed\",\"diff\":\"Stressed can still choose what to do next. Overwhelmed can't tell where to start.\"},{\"id\":\"numb\",\"diff\":\"When overwhelm gets too big, some people shut down into numbness.\"}],\"try\":\"Pause the input for two minutes: phone face down, look at something far away, breathe out slowly. Then pick one small next step and leave the rest until it's done.\",\"defFirst\":\"Overwhelmed is when more is coming in than you can take in, whether that's tasks, feelings, noise or people.\",\"defRest\":\"Your mind can't sort it, so everything feels equally urgent.\",\"msgFirst\":\"That you've hit your limit for now.\",\"msgRest\":\"It's a sign to let less in at once, not a sign that you're failing.\"},{\"id\":\"restless\",\"name\":\"Restless\",\"group\":\"afraid\",\"p\":40,\"e\":62,\"def\":\"Restless is an itchy, can't-settle feeling, as if your body wants to move or change something but you don't know what.\",\"body\":\"Fidgeting, legs that want to move, a buzzing in the arms and chest, and a hard time sitting through a film or a conversation.\",\"bodyRegions\":[{\"r\":\"legs\",\"s\":[\"restless\"]},{\"r\":\"arms\",\"s\":[\"restless\"]},{\"r\":\"chest\",\"s\":[\"restless\",\"fluttery\"]}],\"evidence\":\"described\",\"message\":\"That there's energy with no direction. It can mean you need to move, or that something you haven't named yet is waiting for a decision.\",\"confused\":[{\"id\":\"bored\",\"diff\":\"Bored wants something interesting. Restless wants to move.\"},{\"id\":\"onedge\",\"diff\":\"On edge is braced for trouble. Restless is just unsettled.\"}],\"try\":\"Move for five minutes: walk around the block, stretch, shake out your hands. Then ask yourself what you might be putting off.\",\"defFirst\":\"Restless is an itchy, can't-settle feeling, as if your body wants to move or change something but you don't know what.\",\"defRest\":\"\",\"msgFirst\":\"That there's energy with no direction.\",\"msgRest\":\"It can mean you need to move, or that something you haven't named yet is waiting for a decision.\"},{\"id\":\"angry\",\"name\":\"Angry\",\"group\":\"angry\",\"p\":12,\"e\":94,\"def\":\"Angry is the feeling that something is wrong or unfair and needs to change. It gives you force to defend yourself or someone you care about.\",\"body\":\"Heat in the chest, face, head or neck, a clenched jaw and fists, a pounding heart and energy in your arms and hands.\",\"bodyRegions\":[{\"r\":\"arms\",\"s\":[\"hot\",\"tight\"]},{\"r\":\"chest\",\"s\":[\"hot\",\"racing\"]},{\"r\":\"head\",\"s\":[\"hot\"]},{\"r\":\"face\",\"s\":[\"hot\",\"tight\"]},{\"r\":\"throat\",\"s\":[\"hot\"]}],\"evidence\":\"mapped\",\"message\":\"That a limit was crossed, a need was ignored or something you value was threatened. Sometimes there's something softer underneath, like hurt or fear.\",\"confused\":[{\"id\":\"irritated\",\"diff\":\"Irritated is the small, everyday version. Angry is bigger and feels more like a matter of right and wrong.\"},{\"id\":\"hurt\",\"diff\":\"Hurt is the sting underneath. Anger is what often gets said out loud.\"}],\"try\":\"Give it a few minutes of space before you speak: unclench your hands, breathe out slowly, walk if you can. Then ask what limit was crossed and what you'd like to happen next.\",\"defFirst\":\"Angry is the feeling that something is wrong or unfair and needs to change.\",\"defRest\":\"It gives you force to defend yourself or someone you care about.\",\"msgFirst\":\"That a limit was crossed, a need was ignored or something you value was threatened.\",\"msgRest\":\"Sometimes there's something softer underneath, like hurt or fear.\"},{\"id\":\"irritated\",\"name\":\"Irritated\",\"group\":\"angry\",\"p\":36,\"e\":70,\"def\":\"Irritated is a low-level annoyance, a short fuse. Little things get under your skin more than they normally would.\",\"body\":\"Tension in the jaw and shoulders, a prickly feeling, shallow breathing and a tightness in your chest.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"tight\"]},{\"r\":\"arms\",\"s\":[\"tight\"]},{\"r\":\"chest\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That something small is standing in for something bigger, like tiredness, hunger, noise or too much on your plate. Or simply that you need some space.\",\"confused\":[{\"id\":\"angry\",\"diff\":\"Angry is a stronger reaction to something that feels wrong. Irritated is a low simmer that a small thing can set off.\"},{\"id\":\"frustrated\",\"diff\":\"Frustrated has a goal that's blocked. Irritated doesn't need one.\"}],\"try\":\"Check the basics: have you eaten, slept, had five minutes to yourself? Fix one of those first. If it's a person, say \\\"I need a short break\\\" before it grows.\",\"defFirst\":\"Irritated is a low-level annoyance, a short fuse.\",\"defRest\":\"Little things get under your skin more than they normally would.\",\"msgFirst\":\"That something small is standing in for something bigger, like tiredness, hunger, noise or too much on your plate.\",\"msgRest\":\"Or simply that you need some space.\",\"under\":\"Sometimes there's a softer feeling under the snapping, like hurt, worry or feeling unappreciated.\"},{\"id\":\"frustrated\",\"name\":\"Frustrated\",\"group\":\"angry\",\"p\":26,\"e\":72,\"def\":\"Frustrated is the feeling of being blocked. You're trying to get somewhere and something keeps getting in the way.\",\"body\":\"A tight jaw, tense shoulders, heat in the face, a heavy sigh and energy going nowhere.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"hot\",\"tight\"]},{\"r\":\"arms\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That a goal matters to you and the current route isn't working. It's asking you to change your approach, ask for help or accept a limit.\",\"confused\":[{\"id\":\"angry\",\"diff\":\"Frustration is about being blocked. Anger is about being wronged.\"}],\"try\":\"Name what's blocking you in one sentence. Then choose one different move: ask someone, break it into a smaller piece, or stop for today and come back fresh.\",\"defFirst\":\"Frustrated is the feeling of being blocked.\",\"defRest\":\"You're trying to get somewhere and something keeps getting in the way.\",\"msgFirst\":\"That a goal matters to you and the current route isn't working.\",\"msgRest\":\"It's asking you to change your approach, ask for help or accept a limit.\",\"under\":\"Under frustration that won't let go, there's sometimes disappointment or a sense of helplessness.\"},{\"id\":\"resentful\",\"name\":\"Resentful\",\"group\":\"angry\",\"p\":20,\"e\":58,\"def\":\"Resentful is anger that stayed. It tends to build when you keep giving, going along or letting something slide, and the unfairness of it never gets addressed.\",\"body\":\"A heavy, sour tightness in the chest or stomach, a clenched jaw and a slow simmer that flares when you think about it.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"tight\",\"heavy\"]},{\"r\":\"stomach\",\"s\":[\"tight\",\"queasy\"]},{\"r\":\"face\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That a boundary is being crossed or a need is going unspoken. Resentment often shows up around a \\\"yes\\\" you didn't really mean.\",\"confused\":[{\"id\":\"angry\",\"diff\":\"Angry is a flare. Resentful is a slow burn about something that keeps happening.\"}],\"try\":\"Finish this sentence in writing: \\\"I'd feel less resentful if...\\\". Then pick one request, or one \\\"no\\\", you could make this week.\",\"link\":{\"slug\":\"boundaries-boundaries-boundaries\",\"why\":\"Resentment is one of the clearest signs a boundary is missing, and that post is about setting one.\"},\"defFirst\":\"Resentful is anger that stayed.\",\"defRest\":\"It tends to build when you keep giving, going along or letting something slide, and the unfairness of it never gets addressed.\",\"msgFirst\":\"That a boundary is being crossed or a need is going unspoken.\",\"msgRest\":\"Resentment often shows up around a \\\"yes\\\" you didn't really mean.\",\"under\":\"Sometimes resentment is holding old hurt, or a fear of what would happen if you spoke up.\"},{\"id\":\"disgusted\",\"name\":\"Disgusted\",\"group\":\"angry\",\"p\":12,\"e\":66,\"def\":\"Disgusted is the recoil you feel toward something that seems unclean or morally wrong, from a rotten smell to a cruel act.\",\"body\":\"A wave of nausea, a tight or closing throat, your face scrunching up, turning your head away and a churning stomach.\",\"bodyRegions\":[{\"r\":\"throat\",\"s\":[\"tight\",\"queasy\"]},{\"r\":\"stomach\",\"s\":[\"queasy\",\"tight\"]},{\"r\":\"face\",\"s\":[\"tight\"]}],\"evidence\":\"mapped\",\"message\":\"That something feels harmful or against your values and you want distance from it. It can be about food, a person, or something you did.\",\"confused\":[{\"id\":\"ashamed\",\"diff\":\"Sometimes disgust gets pointed at yourself, and then it's tangled up with shame.\"}],\"try\":\"Give yourself distance: leave the room, step outside or look away. If it's aimed at yourself, treat it as a cue to be kinder, not as a verdict.\",\"defFirst\":\"Disgusted is the recoil you feel toward something that seems unclean or morally wrong, from a rotten smell to a cruel act.\",\"defRest\":\"\",\"msgFirst\":\"That something feels harmful or against your values and you want distance from it.\",\"msgRest\":\"It can be about food, a person, or something you did.\"},{\"id\":\"sad\",\"name\":\"Sad\",\"group\":\"sad\",\"p\":22,\"e\":24,\"def\":\"Sad is the feeling of loss, of something that mattered being gone or changed. It slows you down so you can take in what's happened.\",\"body\":\"A heavy chest, a lump in the throat, tears, tired arms and legs, less energy and a wish to curl up.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"head\",\"s\":[\"heavy\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]}],\"evidence\":\"mapped\",\"message\":\"That something mattered and is now missing or changed. Sadness asks for comfort, rest, and often for someone to sit with you.\",\"confused\":[{\"label\":\"Depressed\",\"diff\":\"Depression is a condition, not one feeling. It means low mood or lost interest most of the day, nearly every day, for two weeks or more. If that sounds like you, please talk to a doctor or therapist.\"},{\"id\":\"disappointed\",\"diff\":\"Disappointed is about a hope that didn't come true. Sad is wider and can be about anything you've lost.\"}],\"try\":\"Give it a small, set stretch of time, maybe ten minutes with some music or a walk. Let tears come if they come. Then do one gentle thing, like a warm drink or a message to someone kind.\",\"defFirst\":\"Sad is the feeling of loss, of something that mattered being gone or changed.\",\"defRest\":\"It slows you down so you can take in what's happened.\",\"msgFirst\":\"That something mattered and is now missing or changed.\",\"msgRest\":\"Sadness asks for comfort, rest, and often for someone to sit with you.\"},{\"id\":\"grieving\",\"name\":\"Grieving\",\"group\":\"sad\",\"p\":8,\"e\":26,\"def\":\"Grieving is what love does after a loss. It's the long, uneven process of learning to live with someone or something being gone, and it can follow a death, a breakup, a move or a dream that ended.\",\"body\":\"Heaviness in the chest, an ache or hollow feeling, waves of tears, exhaustion, trouble sleeping or eating, and sometimes numbness.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That the bond mattered. Grief tends to come in waves rather than in a tidy order, and there's no correct timetable.\",\"confused\":[{\"id\":\"sad\",\"diff\":\"Sad can come from any small loss. Grief is the bigger reckoning after a major one, and it keeps returning.\"},{\"id\":\"numb\",\"diff\":\"Numbness can be part of grief, especially early on, and it usually shifts.\"}],\"try\":\"Do one small thing that keeps the connection alive: say their name out loud, look at a photo, write them a line. And tell someone what you need, even if it's just \\\"sit here with me\\\".\",\"link\":{\"slug\":\"grief\",\"why\":\"It's a longer look at grief, and at what helps.\"},\"defFirst\":\"Grieving is what love does after a loss.\",\"defRest\":\"It's the long, uneven process of learning to live with someone or something being gone, and it can follow a death, a breakup, a move or a dream that ended.\",\"msgFirst\":\"That the bond mattered.\",\"msgRest\":\"Grief tends to come in waves rather than in a tidy order, and there's no correct timetable.\"},{\"id\":\"disappointed\",\"name\":\"Disappointed\",\"group\":\"sad\",\"p\":32,\"e\":30,\"def\":\"Disappointed is the drop you feel when something you expected or hoped for doesn't happen. The gap between what you wanted and what you got hurts.\",\"body\":\"A sinking in your stomach, a small slump in the chest, a sigh and a loss of energy that wasn't there a minute ago.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"hollow\",\"heavy\"]},{\"r\":\"chest\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That you'd pinned something on an outcome, and that your hope mattered. It can show you what you truly wanted.\",\"confused\":[{\"id\":\"hurt\",\"diff\":\"Disappointed is about an outcome that didn't happen. Hurt is about how someone treated you.\"},{\"id\":\"sad\",\"diff\":\"Sad is wider. Disappointed is tied to a specific hope that didn't work out.\"}],\"try\":\"Say what you were hoping for, out loud or on paper. Then ask which part of it is still possible, and what part you need to let yourself be sad about.\",\"know\":\"Disappointment comes from wishing the situation had turned out differently. Regret comes from wishing you had acted differently.\",\"knowSrc\":[\"zeelenberg1998\"],\"defFirst\":\"Disappointed is the drop you feel when something you expected or hoped for doesn't happen.\",\"defRest\":\"The gap between what you wanted and what you got hurts.\",\"msgFirst\":\"That you'd pinned something on an outcome, and that your hope mattered.\",\"msgRest\":\"It can show you what you truly wanted.\"},{\"id\":\"hopeless\",\"name\":\"Hopeless\",\"group\":\"sad\",\"p\":6,\"e\":14,\"def\":\"Hopeless is the feeling that nothing will get better and nothing you do will matter. It's heavy and very convincing, but it's a feeling, not a forecast.\",\"body\":\"A heaviness all through the body, a hollow or sinking chest and stomach, exhaustion, moving slowly, and tears or no tears at all.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"head\",\"s\":[\"heavy\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That you're carrying more than you can hold alone, and that something needs to change or someone needs to know. It's a sign to reach for support, not a verdict on your life.\",\"confused\":[{\"id\":\"sad\",\"diff\":\"Sad usually still leaves some room for hope. Hopeless has lost the belief that things can change.\"},{\"label\":\"Depressed\",\"diff\":\"Hopelessness is common in depression, but it can also show up after a hard blow. Either way, it deserves support.\"}],\"try\":\"Tell one person how heavy it is, in a sentence: \\\"I'm having a really hard time and I don't want to be alone with it.\\\" If that's all you manage today, that's enough.\",\"care\":true,\"defFirst\":\"Hopeless is the feeling that nothing will get better and nothing you do will matter.\",\"defRest\":\"It's heavy and very convincing, but it's a feeling, not a forecast.\",\"msgFirst\":\"That you're carrying more than you can hold alone, and that something needs to change or someone needs to know.\",\"msgRest\":\"It's a sign to reach for support, not a verdict on your life.\"},{\"id\":\"hurt\",\"name\":\"Hurt\",\"group\":\"sad\",\"p\":14,\"e\":52,\"def\":\"Hurt is the sting that comes when someone you care about treats you in a way that feels careless, cruel or dismissive. It's about the relationship, not only the event.\",\"body\":\"A pain or pressure in the chest, a lump in the throat, a sinking stomach, and sometimes heat in your face or tears.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"tight\",\"heavy\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"face\",\"s\":[\"hot\"]}],\"evidence\":\"described\",\"message\":\"That this person or this relationship matters to you, and something felt like a breach. Anger often arrives to protect the hurt underneath.\",\"confused\":[{\"id\":\"disappointed\",\"diff\":\"Disappointed is about an outcome. Hurt is about how someone treated you.\"},{\"id\":\"angry\",\"diff\":\"Angry pushes outward. Hurt is the softer place it protects.\"}],\"try\":\"Try saying the hurt in one plain sentence: \\\"When you did this, I felt hurt, because...\\\". You don't have to send it. Writing it first helps you find what you need.\",\"defFirst\":\"Hurt is the sting that comes when someone you care about treats you in a way that feels careless, cruel or dismissive.\",\"defRest\":\"It's about the relationship, not only the event.\",\"msgFirst\":\"That this person or this relationship matters to you, and something felt like a breach.\",\"msgRest\":\"Anger often arrives to protect the hurt underneath.\"},{\"id\":\"lonely\",\"name\":\"Lonely\",\"group\":\"sad\",\"p\":18,\"e\":28,\"def\":\"Lonely is the gap you feel between the connection you have and the connection you want. You can feel it in a crowd, in a relationship or in a quiet house.\",\"body\":\"An ache or hollowness in the chest, a heaviness, tiredness, feeling cold or wanting to curl up, and sometimes a lump in the throat.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"hollow\",\"heavy\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That you need more contact, or a different kind of contact, with people. It's a signal, a bit like hunger, and not a flaw in you.\",\"confused\":[{\"label\":\"Alone\",\"diff\":\"Alone is a fact: you're by yourself, and many people enjoy that. Lonely is the painful wish for more connection, and you can feel it with people all around.\"}],\"try\":\"Send one small message to someone: a photo, a \\\"thinking of you\\\", a question. Aim for small and regular rather than one big meet-up.\",\"know\":\"The World Health Organization estimates that about 1 in 6 people worldwide feel lonely.\",\"knowSrc\":[\"who2025\"],\"defFirst\":\"Lonely is the gap you feel between the connection you have and the connection you want.\",\"defRest\":\"You can feel it in a crowd, in a relationship or in a quiet house.\",\"msgFirst\":\"That you need more contact, or a different kind of contact, with people.\",\"msgRest\":\"It's a signal, a bit like hunger, and not a flaw in you.\"},{\"id\":\"envious\",\"name\":\"Envious\",\"group\":\"angry\",\"p\":28,\"e\":56,\"def\":\"Envious is wanting something another person has, be it a job, a body, a relationship or their ease, and it hurts to see it in them.\",\"body\":\"A tightness in the chest, heat in the face or head, a tense jaw and a sour, burning feeling.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"tight\",\"hot\"]},{\"r\":\"head\",\"s\":[\"hot\"]},{\"r\":\"face\",\"s\":[\"hot\",\"tight\"]}],\"evidence\":\"mapped-less-distinct\",\"message\":\"That something you value feels out of reach right now. Under the sting, envy is useful information about what you want.\",\"confused\":[{\"id\":\"jealous\",\"diff\":\"Envy is wanting what someone else has. Jealousy is fearing you'll lose what you have to someone else.\"}],\"try\":\"Ask what exactly you're envious of, then name the wish behind it and one small step toward it. Envy can loosen its grip when it turns from a comparison into a goal.\",\"know\":\"Researchers describe two kinds of envy. One makes you want to lift yourself up to where the other person is. The other makes you want to pull them down. Some languages, like Dutch, have a separate word for each.\",\"knowSrc\":[\"vandeven2009\"],\"defFirst\":\"Envious is wanting something another person has, be it a job, a body, a relationship or their ease, and it hurts to see it in them.\",\"defRest\":\"\",\"msgFirst\":\"That something you value feels out of reach right now.\",\"msgRest\":\"Under the sting, envy is useful information about what you want.\",\"under\":\"Envy can sometimes hide sadness about what you haven't had, or doubt that you ever could.\"},{\"id\":\"jealous\",\"name\":\"Jealous\",\"group\":\"angry\",\"p\":12,\"e\":70,\"def\":\"Jealous is the fear of losing something you have, usually someone's attention or love, to another person. There are three people in the picture: you, the person you care about, and someone who seems to threaten it.\",\"body\":\"A racing heart, heat in the chest or face, a knot in the stomach, a tight throat and restlessness.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"racing\",\"hot\"]},{\"r\":\"stomach\",\"s\":[\"tight\",\"queasy\"]},{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"throat\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That a bond matters to you and something feels at risk. It's worth checking what's real and what's a story your fear is telling.\",\"confused\":[{\"id\":\"envious\",\"diff\":\"Jealousy guards what you have. Envy wants what someone else has.\"}],\"try\":\"Name the fear underneath in one sentence, like \\\"I'm afraid I'm not enough for them\\\". If it's about a real relationship, share that fear rather than an accusation.\",\"know\":\"Envy and jealousy are often used as if they mean the same thing, but when people describe real moments of each, they come out different. Envy is about wanting what someone has. Jealousy is about fearing you'll lose someone to a rival.\",\"knowSrc\":[\"parrott1993\"],\"defFirst\":\"Jealous is the fear of losing something you have, usually someone's attention or love, to another person.\",\"defRest\":\"There are three people in the picture: you, the person you care about, and someone who seems to threaten it.\",\"msgFirst\":\"That a bond matters to you and something feels at risk.\",\"msgRest\":\"It's worth checking what's real and what's a story your fear is telling.\"},{\"id\":\"ashamed\",\"name\":\"Ashamed\",\"group\":\"ashamed\",\"p\":8,\"e\":44,\"def\":\"Ashamed is the feeling that there's something wrong with you, not only with what you did. It makes you want to hide, shrink or disappear.\",\"body\":\"Heat in your face and neck, a sinking or knotted stomach, a bowed head, a heavy chest and a wish to curl up or avoid eye contact.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"head\",\"s\":[\"heavy\",\"hot\"]},{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"stomach\",\"s\":[\"hollow\",\"tight\"]},{\"r\":\"throat\",\"s\":[\"hot\"]}],\"evidence\":\"mapped-less-distinct\",\"message\":\"That you fear being seen as unacceptable or losing your place with people. Shame is a social alarm, and it's often louder than the facts.\",\"confused\":[{\"id\":\"guilty\",\"diff\":\"Guilt says \\\"I did something bad.\\\" Shame says \\\"I am bad.\\\"\"},{\"id\":\"embarrassed\",\"diff\":\"Embarrassment passes with the moment. Shame settles in and says something's wrong with you.\"}],\"try\":\"Tell one safe person, or say to yourself what you'd say to a friend in the same spot. Shame tends to grow in hiding, so telling someone kind can take the edge off.\",\"link\":{\"slug\":\"psychology-of-shame\",\"why\":\"It's the full story of shame, including how it differs from guilt.\"},\"defFirst\":\"Ashamed is the feeling that there's something wrong with you, not only with what you did.\",\"defRest\":\"It makes you want to hide, shrink or disappear.\",\"msgFirst\":\"That you fear being seen as unacceptable or losing your place with people.\",\"msgRest\":\"Shame is a social alarm, and it's often louder than the facts.\"},{\"id\":\"guilty\",\"name\":\"Guilty\",\"group\":\"ashamed\",\"p\":22,\"e\":46,\"def\":\"Guilty is the feeling that you did something, or didn't do something, that goes against your own values, and that you'd like to put right.\",\"body\":\"A weight in the chest or stomach, restlessness, replaying the moment and sometimes a lump in the throat.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"stomach\",\"s\":[\"heavy\",\"tight\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"head\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That your values noticed something. Guilt points toward repair: an apology, a change or a different choice next time.\",\"confused\":[{\"id\":\"ashamed\",\"diff\":\"Guilt is about what you did, and you can fix it. Shame is about who you think you are, and it wants to hide.\"}],\"try\":\"Ask whether there's something you can repair. If there is, do the smallest real version today, like an apology or a correction. If there isn't, note what you'd do differently and let it go.\",\"link\":{\"slug\":\"psychology-of-shame\",\"why\":\"It draws the line between guilt and shame clearly.\"},\"know\":\"Guilt tends to push people to apologize and put things right. Shame tends to push them to hide or get defensive.\",\"knowSrc\":[\"tangney2007\"],\"defFirst\":\"Guilty is the feeling that you did something, or didn't do something, that goes against your own values, and that you'd like to put right.\",\"defRest\":\"\",\"msgFirst\":\"That your values noticed something.\",\"msgRest\":\"Guilt points toward repair: an apology, a change or a different choice next time.\"},{\"id\":\"embarrassed\",\"name\":\"Embarrassed\",\"group\":\"ashamed\",\"p\":30,\"e\":62,\"def\":\"Embarrassed is the flush that comes when you feel you've been seen doing something clumsy or awkward in front of other people.\",\"body\":\"A hot face, blushing, a quick heartbeat, a stomach flip and a wish for the floor to swallow you.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"chest\",\"s\":[\"racing\"]},{\"r\":\"stomach\",\"s\":[\"fluttery\"]}],\"evidence\":\"described\",\"message\":\"That you care how you come across and the moment felt exposed. It's mostly temporary, and it says less about you than it feels like it does.\",\"confused\":[{\"id\":\"ashamed\",\"diff\":\"Embarrassment fades as the moment passes. Shame lingers and says something's wrong with you.\"}],\"try\":\"Let it be awkward for a moment. A small smile or a \\\"well, that happened\\\" often helps other people relax, and you too. Then move on to the next thing.\",\"know\":\"A blush, a glance down and a sheepish smile are part of how embarrassment works. Researchers think they signal \\\"I know I slipped\\\", and other people tend to respond more kindly.\",\"knowSrc\":[\"keltner1997\"],\"defFirst\":\"Embarrassed is the flush that comes when you feel you've been seen doing something clumsy or awkward in front of other people.\",\"defRest\":\"\",\"msgFirst\":\"That you care how you come across and the moment felt exposed.\",\"msgRest\":\"It's mostly temporary, and it says less about you than it feels like it does.\"},{\"id\":\"numb\",\"name\":\"Numb\",\"group\":\"drained\",\"p\":42,\"e\":6,\"def\":\"Numb is when feelings go dull or far away, as if there's a pane of glass between you and everything. It isn't calm. It's more like the volume turned down.\",\"body\":\"Feeling flat, heavy or disconnected from your body, finding it hard to tell whether you're hungry or tired, and little reaction to things that would normally move you.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"numb\",\"hollow\"]},{\"r\":\"arms\",\"s\":[\"numb\",\"heavy\"]},{\"r\":\"legs\",\"s\":[\"numb\",\"heavy\"]},{\"r\":\"stomach\",\"s\":[\"numb\"]},{\"r\":\"head\",\"s\":[\"numb\",\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That your system may be protecting you from too much, or that you've been running on empty. Numbness can follow stress, trauma or a long stretch of pushing through.\",\"confused\":[{\"id\":\"calm\",\"diff\":\"Calm feels settled, and you're still present, with a soft, easy body. Numb feels blank or cut off, and things that matter don't land.\"},{\"id\":\"drained\",\"diff\":\"Drained still feels like something. Numb feels like nothing much at all.\"}],\"try\":\"Give your body something vivid and gentle to notice: cold water on your hands, your feet pressed to the floor, a strong smell or a slow stretch. If numbness lasts or frightens you, it's worth talking to a professional.\",\"defFirst\":\"Numb is when feelings go dull or far away, as if there's a pane of glass between you and everything.\",\"defRest\":\"It isn't calm. It's more like the volume turned down.\",\"msgFirst\":\"That your system may be protecting you from too much, or that you've been running on empty.\",\"msgRest\":\"Numbness can follow stress, trauma or a long stretch of pushing through.\",\"under\":\"Sometimes there's grief, fear or anger underneath, waiting until it feels safer to be felt.\"},{\"id\":\"bored\",\"name\":\"Bored\",\"group\":\"drained\",\"p\":42,\"e\":22,\"def\":\"Bored is an unsatisfied, tuned-out feeling when nothing holds your attention, even though you'd like to be engaged.\",\"body\":\"Heavy eyelids, slumping, a wandering mind, fidgeting and a low restlessness.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"restless\"]},{\"r\":\"arms\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That your attention isn't caught by what's in front of you, because it's too easy, too hard or not meaningful to you. It can be a nudge to try something new.\",\"confused\":[{\"id\":\"numb\",\"diff\":\"Bored still wants something to do. Numb doesn't want much of anything.\"},{\"id\":\"restless\",\"diff\":\"Restless wants to move. Bored wants something worth its attention.\"}],\"try\":\"Pick something with a small challenge instead of more scrolling: a puzzle, a walk somewhere new, or a ten-minute task you've been avoiding.\",\"know\":\"Researchers define boredom not as having nothing to do, but as wanting to be engaged and not being able to be.\",\"knowSrc\":[\"eastwood2012\"],\"defFirst\":\"Bored is an unsatisfied, tuned-out feeling when nothing holds your attention, even though you'd like to be engaged.\",\"defRest\":\"\",\"msgFirst\":\"That your attention isn't caught by what's in front of you, because it's too easy, too hard or not meaningful to you.\",\"msgRest\":\"It can be a nudge to try something new.\",\"ways\":[\"Notice what's missing when boredom shows up: a challenge, a point to it, or company. That tells you what to look for.\",\"Give your hands something to do for ten minutes, like cooking, drawing or fixing something. Your attention can settle once it has something to hold.\",\"Plan one thing this week you'd actually look forward to, however small.\"],\"under\":\"Sometimes boredom is a cover for something harder to feel, like loneliness, low mood or not knowing what you want.\"},{\"id\":\"drained\",\"name\":\"Drained\",\"group\":\"drained\",\"p\":30,\"e\":10,\"def\":\"Drained is the empty-battery feeling. You've given out more energy than you've had, in your body, your mind or your emotions.\",\"body\":\"Heavy arms and legs, heavy eyelids, slow thinking, a dull ache behind the eyes and a wish to lie down.\",\"bodyRegions\":[{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]},{\"r\":\"head\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That your reserves are low. It's information about rest, food, sleep, or how much you've been carrying.\",\"confused\":[{\"id\":\"sad\",\"diff\":\"Sad comes from a loss. Drained comes from spending more than you had.\"},{\"id\":\"numb\",\"diff\":\"Drained still feels tired and real. Numb feels blank.\"}],\"try\":\"Take the smallest possible rest: five minutes lying down, a glass of water, something to eat. Then cancel or shrink one thing on today's list.\",\"defFirst\":\"Drained is the empty-battery feeling.\",\"defRest\":\"You've given out more energy than you've had, in your body, your mind or your emotions.\",\"msgFirst\":\"That your reserves are low.\",\"msgRest\":\"It's information about rest, food, sleep, or how much you've been carrying.\"},{\"id\":\"calm\",\"name\":\"Calm\",\"group\":\"calm\",\"p\":68,\"e\":10,\"def\":\"Calm is an easy, settled feeling. Nothing feels urgent or threatening, and your body knows it.\",\"body\":\"Slow, easy breathing, soft shoulders and jaw, a loose stomach, a steady heartbeat and a sense of room in your chest.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"light\",\"warm\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]},{\"r\":\"arms\",\"s\":[\"light\"]},{\"r\":\"face\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That your body has stepped out of alarm mode. It's worth noticing what helped you get here so you can find your way back.\",\"confused\":[{\"id\":\"numb\",\"diff\":\"Calm is settled and you can still feel small pleasures. Numb is flat, and nothing much lands.\"},{\"id\":\"content\",\"diff\":\"Calm is about your body settling. Content is about feeling that things are good enough.\"}],\"try\":\"Notice it for ten seconds. Where in your body does the ease live? Knowing that gives you something to look for next time.\",\"defFirst\":\"Calm is an easy, settled feeling.\",\"defRest\":\"Nothing feels urgent or threatening, and your body knows it.\",\"msgFirst\":\"That your body has stepped out of alarm mode.\",\"msgRest\":\"It's worth noticing what helped you get here so you can find your way back.\"},{\"id\":\"content\",\"name\":\"Content\",\"group\":\"calm\",\"p\":80,\"e\":24,\"def\":\"Content is a quiet satisfaction. What you have is enough for now, and you're not reaching for more.\",\"body\":\"A warm, softened chest, an easy smile, a body that feels heavy in a good way and relaxed breathing.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That things line up with what you value at the moment. It's worth remembering what made it so.\",\"confused\":[{\"id\":\"calm\",\"diff\":\"Calm is your body settling. Content is your view that things are good enough.\"},{\"id\":\"happy\",\"diff\":\"Happy is brighter and has more energy in it. Content is steadier.\"}],\"try\":\"Take a slow minute to say what's good enough right now, then stay with it for a few breaths before you move on.\",\"defFirst\":\"Content is a quiet satisfaction.\",\"defRest\":\"What you have is enough for now, and you're not reaching for more.\",\"msgFirst\":\"That things line up with what you value at the moment.\",\"msgRest\":\"It's worth remembering what made it so.\"},{\"id\":\"relieved\",\"name\":\"Relieved\",\"group\":\"calm\",\"p\":66,\"e\":32,\"def\":\"Relieved is the release after something you were dreading or worrying about turns out okay, or ends.\",\"body\":\"A long breath out, shoulders dropping, a loosening in the chest and stomach, and sometimes tears or laughter.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"light\",\"warm\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]},{\"r\":\"arms\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That you'd been carrying tension. Relief shows how much effort the worry was costing you.\",\"confused\":[{\"id\":\"calm\",\"diff\":\"Relief is a drop from tension, so it comes after something. Calm is a steady state that doesn't need a before.\"}],\"try\":\"Let your body finish the release: a few slow breaths out, a stretch, a walk. Then check whether there's some other tension you can put down while you're at it.\",\"defFirst\":\"Relieved is the release after something you were dreading or worrying about turns out okay, or ends.\",\"defRest\":\"\",\"msgFirst\":\"That you'd been carrying tension.\",\"msgRest\":\"Relief shows how much effort the worry was costing you.\"},{\"id\":\"happy\",\"name\":\"Happy\",\"group\":\"happy\",\"p\":90,\"e\":62,\"def\":\"Happy is a warm, bright feeling that things are good. It can be soft or loud, and it doesn't always need a reason.\",\"body\":\"A lightness or warmth spreading through your chest and body, a smile, energy in your arms and legs and easy breathing.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"warm\",\"light\"]},{\"r\":\"face\",\"s\":[\"warm\"]},{\"r\":\"chest\",\"s\":[\"warm\",\"light\"]},{\"r\":\"stomach\",\"s\":[\"light\"]},{\"r\":\"arms\",\"s\":[\"warm\",\"light\"]},{\"r\":\"legs\",\"s\":[\"light\"]}],\"evidence\":\"mapped\",\"message\":\"That something matches what you want or value. Good feelings are worth noticing too, and they don't have to be earned.\",\"confused\":[{\"id\":\"content\",\"diff\":\"Content is steadier and quieter. Happy has more lift in it.\"},{\"id\":\"excited\",\"diff\":\"Excited leans forward toward what's coming. Happy enjoys what's here.\"}],\"try\":\"Enjoy it first. Later, jot down what made it happen. A good feeling doesn't need analyzing while it's still here.\",\"defFirst\":\"Happy is a warm, bright feeling that things are good.\",\"defRest\":\"It can be soft or loud, and it doesn't always need a reason.\",\"msgFirst\":\"That something matches what you want or value.\",\"msgRest\":\"Good feelings are worth noticing too, and they don't have to be earned.\"},{\"id\":\"excited\",\"name\":\"Excited\",\"group\":\"happy\",\"p\":84,\"e\":92,\"def\":\"Excited is a lively, forward-leaning feeling: energy, anticipation and a strong pull toward what's coming.\",\"body\":\"A fluttery stomach, a fast heart, buzzing arms and legs, quick breathing and a wide smile or a nervous laugh.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"fluttery\"]},{\"r\":\"chest\",\"s\":[\"racing\",\"fluttery\"]},{\"r\":\"arms\",\"s\":[\"restless\",\"tingly\"]},{\"r\":\"legs\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That something ahead matters and you think it could go well. In the body it can feel a lot like anxiety, and the difference is which way you're leaning: toward it or away from it.\",\"confused\":[{\"id\":\"anxious\",\"diff\":\"Anxious and excited can feel almost the same in the body. Excited leans toward what's ahead. Anxious leans away.\"},{\"id\":\"happy\",\"diff\":\"Happy enjoys what's here. Excited is reaching for what's next.\"}],\"try\":\"Use the energy: do one small thing toward it today. If it tips into nerves, slow your out-breath and tell yourself your body is getting ready, not in danger.\",\"know\":\"Your body can't always tell nerves from excitement. That's why calling a jittery feeling \\\"excitement\\\" can help some people feel more excited about what's coming. Whether it helps them perform better is less clear.\",\"knowSrc\":[\"brooks2014\",\"poynter2025\"],\"defFirst\":\"Excited is a lively, forward-leaning feeling: energy, anticipation and a strong pull toward what's coming.\",\"defRest\":\"\",\"msgFirst\":\"That something ahead matters and you think it could go well.\",\"msgRest\":\"In the body it can feel a lot like anxiety, and the difference is which way you're leaning: toward it or away from it.\"},{\"id\":\"proud\",\"name\":\"Proud\",\"group\":\"happy\",\"p\":78,\"e\":66,\"def\":\"Proud is the glow of having done something that matters to you or to someone you care about.\",\"body\":\"A lifted chest, straighter posture, warmth in the chest and face and a smile you can't quite hold back.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"light\"]},{\"r\":\"head\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]}],\"evidence\":\"mapped-less-distinct\",\"message\":\"That your effort met something you value. It tells you what you care about being good at.\",\"confused\":[{\"label\":\"Arrogant\",\"diff\":\"Pride about what you did or worked for feels warm and connected. Arrogance is pride about being better than other people.\"}],\"try\":\"Say in specific words what you did that you're proud of, and tell someone. Specific beats general.\",\"know\":\"Researchers describe two kinds of pride. One comes from effort, like \\\"I worked hard for this\\\", and goes with confidence. The other is more like \\\"I'm just better\\\", and goes with arrogance.\",\"knowSrc\":[\"tracy2007\"],\"defFirst\":\"Proud is the glow of having done something that matters to you or to someone you care about.\",\"defRest\":\"\",\"msgFirst\":\"That your effort met something you value.\",\"msgRest\":\"It tells you what you care about being good at.\"},{\"id\":\"hopeful\",\"name\":\"Hopeful\",\"group\":\"happy\",\"p\":66,\"e\":56,\"def\":\"Hopeful is the feeling that things could get better and that you may have a part in it. It sits between wishing and expecting.\",\"body\":\"A lift in the chest, a loosening in the shoulders, a little forward energy and sometimes a flutter in the stomach.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"light\",\"warm\"]},{\"r\":\"stomach\",\"s\":[\"fluttery\"]},{\"r\":\"arms\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That something matters and looks possible. Hope points toward what to do next.\",\"confused\":[{\"id\":\"excited\",\"diff\":\"Hopeful can live with not knowing. Excited has more energy and usually more certainty.\"}],\"try\":\"Turn it into one small step. Ask what the first thing would be if this went well, and do a tiny version of that today.\",\"defFirst\":\"Hopeful is the feeling that things could get better and that you may have a part in it.\",\"defRest\":\"It sits between wishing and expecting.\",\"msgFirst\":\"That something matters and looks possible.\",\"msgRest\":\"Hope points toward what to do next.\"},{\"id\":\"grateful\",\"name\":\"Grateful\",\"group\":\"connected\",\"p\":82,\"e\":44,\"def\":\"Grateful is warmth toward someone or something that has helped you, or simply been good to you.\",\"body\":\"Softness in the chest, warmth in the face, a sense of being held and sometimes tears.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That you noticed care or luck that you didn't create alone. It draws you toward the people and things that matter.\",\"confused\":[{\"id\":\"happy\",\"diff\":\"Happy is about how you feel. Grateful is aimed at someone or something.\"},{\"id\":\"content\",\"diff\":\"Content is that things are enough. Grateful is a thank-you to someone or something.\"}],\"try\":\"Tell one person one specific thing you're grateful for, or write it down. Specific is warmer than general.\",\"defFirst\":\"Grateful is warmth toward someone or something that has helped you, or simply been good to you.\",\"defRest\":\"\",\"msgFirst\":\"That you noticed care or luck that you didn't create alone.\",\"msgRest\":\"It draws you toward the people and things that matter.\"},{\"id\":\"loved\",\"name\":\"Loved\",\"group\":\"connected\",\"p\":92,\"e\":40,\"def\":\"Loved is the feeling of being cared about and safe with someone, just as you are.\",\"body\":\"Warmth spreading through the chest and much of the body, a soft face, relaxed arms and a settled feeling.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\"]},{\"r\":\"head\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]},{\"r\":\"arms\",\"s\":[\"warm\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]}],\"evidence\":\"mapped-less-distinct\",\"message\":\"That you belong and that this closeness feels safe. It's worth letting it in.\",\"confused\":[{\"id\":\"connected\",\"diff\":\"Loved is about receiving care. Connected is about being in touch, and it can happen with a friend or even a stranger.\"}],\"try\":\"Let it land. Take three slow breaths and tell yourself \\\"this is here and it's okay to take it in\\\". If that's hard to do, notice that gently.\",\"defFirst\":\"Loved is the feeling of being cared about and safe with someone, just as you are.\",\"defRest\":\"\",\"msgFirst\":\"That you belong and that this closeness feels safe.\",\"msgRest\":\"It's worth letting it in.\"},{\"id\":\"connected\",\"name\":\"Connected\",\"group\":\"connected\",\"p\":76,\"e\":50,\"def\":\"Connected is the feeling that you're in touch with someone or something: seen, understood or part of something bigger than yourself.\",\"body\":\"Openness in the chest, warmth, softened shoulders, easy eye contact and easy breathing.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"light\"]},{\"r\":\"face\",\"s\":[\"warm\"]},{\"r\":\"arms\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That you're well matched with a person, a group or a place, and that you belong. It's the counterweight to loneliness.\",\"confused\":[{\"id\":\"loved\",\"diff\":\"Connected is being in touch. Loved is being cared for.\"}],\"try\":\"Reach for one small moment of contact today: look someone in the eye, ask a real question, put your phone away during a chat.\",\"link\":{\"slug\":\"bids-for-connection\",\"why\":\"It's about the small moments that build exactly this.\"},\"defFirst\":\"Connected is the feeling that you're in touch with someone or something: seen, understood or part of something bigger than yourself.\",\"defRest\":\"\",\"msgFirst\":\"That you're well matched with a person, a group or a place, and that you belong.\",\"msgRest\":\"It's the counterweight to loneliness.\"},{\"id\":\"compassionate\",\"name\":\"Compassionate\",\"group\":\"connected\",\"p\":54,\"e\":40,\"def\":\"Compassionate is noticing someone's pain and feeling moved to help, including when that someone is you.\",\"body\":\"A softening or ache in the chest, a warm, tender feeling, sometimes tears and an urge to reach out.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"heavy\"]},{\"r\":\"arms\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That you care about suffering, theirs or your own, and want it to ease. It's the feeling that turns noticing into helping.\",\"confused\":[{\"label\":\"Pity\",\"diff\":\"Pity looks down at someone's misfortune from a distance. Compassion stands beside them.\"},{\"id\":\"sad\",\"diff\":\"Sad is about your own loss. Compassion is about someone else's pain, or your own, and wanting to help.\"}],\"try\":\"Ask what would help right now, for them or for you. Then do the smallest kind thing that answers it.\",\"link\":{\"slug\":\"self-compassion\",\"why\":\"It looks at how to offer this same feeling to yourself.\"},\"know\":\"Compassion isn't just feeling sad for someone. Researchers treat it as its own emotion, one that comes with a wish to help.\",\"knowSrc\":[\"goetz2010\"],\"defFirst\":\"Compassionate is noticing someone's pain and feeling moved to help, including when that someone is you.\",\"defRest\":\"\",\"msgFirst\":\"That you care about suffering, theirs or your own, and want it to ease.\",\"msgRest\":\"It's the feeling that turns noticing into helping.\"},{\"id\":\"curious\",\"name\":\"Curious\",\"group\":\"curious\",\"p\":68,\"e\":70,\"def\":\"Curious is the pull of wanting to know more, and a readiness to explore even when you don't know what you'll find.\",\"body\":\"An alert, forward-leaning feeling, wide eyes and lifted energy in the head and chest.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"light\",\"restless\"]},{\"r\":\"chest\",\"s\":[\"light\"]},{\"r\":\"face\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That something is new or unresolved and interests you. It's a good moment to ask a question.\",\"confused\":[{\"id\":\"excited\",\"diff\":\"Curious wants to understand. Excited wants to get there.\"}],\"try\":\"Follow it for ten minutes: look it up, ask someone or write your question down.\",\"defFirst\":\"Curious is the pull of wanting to know more, and a readiness to explore even when you don't know what you'll find.\",\"defRest\":\"\",\"msgFirst\":\"That something is new or unresolved and interests you.\",\"msgRest\":\"It's a good moment to ask a question.\"},{\"id\":\"awe\",\"name\":\"Awe\",\"group\":\"curious\",\"p\":76,\"e\":76,\"def\":\"Awe is the feeling of being in the presence of something vast that stretches how you see the world, like mountains, music, a birth or an act of great courage.\",\"body\":\"Goosebumps, a held breath, a lifted or wide chest, a lump in the throat and feeling small in a good way.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"light\",\"tingly\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"arms\",\"s\":[\"tingly\"]},{\"r\":\"head\",\"s\":[\"tingly\"]}],\"evidence\":\"described\",\"message\":\"That you've met something bigger than your usual worries. It can turn your attention away from yourself for a while.\",\"confused\":[{\"id\":\"surprised\",\"diff\":\"Surprise is a quick jolt at something unexpected. Awe is slower and bigger, and it lingers.\"}],\"try\":\"Let yourself stay with it for a full minute: look longer, listen longer, and tell someone what it was.\",\"know\":\"Researchers describe awe as meeting something so vast that your usual way of seeing things has to stretch to take it in.\",\"knowSrc\":[\"keltner2003\"],\"defFirst\":\"Awe is the feeling of being in the presence of something vast that stretches how you see the world, like mountains, music, a birth or an act of great courage.\",\"defRest\":\"\",\"msgFirst\":\"That you've met something bigger than your usual worries.\",\"msgRest\":\"It can turn your attention away from yourself for a while.\"},{\"id\":\"surprised\",\"name\":\"Surprised\",\"group\":\"curious\",\"p\":56,\"e\":86,\"def\":\"Surprised is the quick jolt you feel when something doesn't match what you expected. It lasts a moment, then turns into another feeling.\",\"body\":\"A startle, a gasp or held breath, wide eyes, a jump in the chest and raised eyebrows.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"light\"]},{\"r\":\"chest\",\"s\":[\"racing\"]},{\"r\":\"face\",\"s\":[\"light\"]}],\"evidence\":\"mapped\",\"message\":\"That the world just didn't match your prediction. What comes next, joy or fear, depends on what the surprise means for you.\",\"confused\":[{\"id\":\"excited\",\"diff\":\"Surprise is the jolt. Excited is what can follow when the news is good.\"},{\"id\":\"afraid\",\"diff\":\"Surprise is neutral until you know what it means. Fear says it means danger.\"}],\"try\":\"Give it a breath before you react. Ask what you expected, and what actually happened. The next feeling is the one to name.\",\"defFirst\":\"Surprised is the quick jolt you feel when something doesn't match what you expected.\",\"defRest\":\"It lasts a moment, then turns into another feeling.\",\"msgFirst\":\"That the world just didn't match your prediction.\",\"msgRest\":\"What comes next, joy or fear, depends on what the surprise means for you.\"},{\"id\":\"nervous\",\"name\":\"Nervous\",\"group\":\"afraid\",\"p\":32,\"e\":66,\"def\":\"Nervous is a jittery, keyed-up feeling before something that matters to you, like a talk, a date or a test. It's smaller than fear, and it's usually tied to a moment you can see coming.\",\"body\":\"Butterflies in your stomach, shaky hands, a faster heartbeat, a dry mouth and needing the bathroom more than usual.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"fluttery\"]},{\"r\":\"arms\",\"s\":[\"fluttery\"]},{\"r\":\"chest\",\"s\":[\"racing\"]}],\"evidence\":\"described\",\"message\":\"That something ahead matters to you and you want it to go well. Nerves and excitement feel very alike in the body.\",\"confused\":[{\"id\":\"anxious\",\"diff\":\"Nervous is tied to a moment you can see coming. Anxious can hang around without a clear reason.\"},{\"id\":\"excited\",\"diff\":\"Nervous and excited feel almost the same in the body. The difference is mostly whether you expect it to go badly or well.\"}],\"try\":\"Try telling yourself \\\"I'm excited\\\" instead of \\\"calm down\\\". It's easier to relabel the buzz than to switch it off. Then slow your out-breath for a minute.\",\"know\":\"In one set of studies, people who told themselves \\\"I'm excited\\\" before a nerve-racking task, like singing or giving a speech, felt more excited and did better than people who told themselves to calm down. When other researchers repeated the speech study in 2025, the feeling part held up, but the speeches weren't any better.\",\"knowSrc\":[\"brooks2014\",\"poynter2025\"],\"defFirst\":\"Nervous is a jittery, keyed-up feeling before something that matters to you, like a talk, a date or a test.\",\"defRest\":\"It's smaller than fear, and it's usually tied to a moment you can see coming.\",\"msgFirst\":\"That something ahead matters to you and you want it to go well.\",\"msgRest\":\"Nerves and excitement feel very alike in the body.\"},{\"id\":\"panicky\",\"name\":\"Panicky\",\"group\":\"afraid\",\"p\":10,\"e\":94,\"def\":\"Panicky is fear that spikes fast and feels out of control, as if something terrible is about to happen right now. It often peaks within minutes and then eases.\",\"body\":\"A pounding heart, fast or shallow breathing, dizziness, tingling hands, a tight chest, sweating or shaking, and a strong urge to escape.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"racing\",\"tight\"]},{\"r\":\"arms\",\"s\":[\"tingly\",\"fluttery\"]},{\"r\":\"legs\",\"s\":[\"fluttery\"]},{\"r\":\"head\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That your alarm system has fired at full volume. It can happen when there's no danger at all, and it's very frightening, but a surge of panic on its own isn't dangerous.\",\"confused\":[{\"id\":\"afraid\",\"diff\":\"Afraid fits a real danger in front of you. Panicky can arrive out of the blue, and the alarm is louder than the moment.\"},{\"id\":\"overwhelmed\",\"diff\":\"Overwhelmed is too much to handle. Panicky is a sudden surge of fear in the body.\"}],\"try\":\"Plant your feet, and let each breath out be longer than the breath in. Remind yourself that this wave will peak and pass. If this is new for you, or you have chest pain or trouble breathing, get medical help to be safe.\",\"defFirst\":\"Panicky is fear that spikes fast and feels out of control, as if something terrible is about to happen right now.\",\"defRest\":\"It often peaks within minutes and then eases.\",\"msgFirst\":\"That your alarm system has fired at full volume.\",\"msgRest\":\"It can happen when there's no danger at all, and it's very frightening, but a surge of panic on its own isn't dangerous.\"},{\"id\":\"furious\",\"name\":\"Furious\",\"group\":\"angry\",\"p\":8,\"e\":98,\"def\":\"Furious is anger at full heat. It's big, fast and hard to think through, and it usually comes when something feels deeply wrong or unfair.\",\"body\":\"Heat in your face and chest, a clenched jaw and fists, a pounding heart, fast breathing and a strong urge to shout or lash out.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"hot\",\"tight\"]},{\"r\":\"chest\",\"s\":[\"hot\",\"racing\"]},{\"r\":\"arms\",\"s\":[\"tight\",\"hot\"]}],\"evidence\":\"described\",\"message\":\"That something important to you has been crossed, badly. The feeling makes sense, even when acting on it straight away wouldn't.\",\"confused\":[{\"id\":\"angry\",\"diff\":\"Angry still has room to think. Furious floods that room, so it's the moment to pause before you act.\"},{\"id\":\"resentful\",\"diff\":\"Resentful is old anger that keeps simmering. Furious is anger boiling over right now.\"}],\"try\":\"Put some distance between the feeling and any action. Step away, move your body hard if you can, and wait until the heat drops, even if that takes a while. Then decide what to say.\",\"defFirst\":\"Furious is anger at full heat.\",\"defRest\":\"It's big, fast and hard to think through, and it usually comes when something feels deeply wrong or unfair.\",\"msgFirst\":\"That something important to you has been crossed, badly.\",\"msgRest\":\"The feeling makes sense, even when acting on it straight away wouldn't.\",\"under\":\"Fury this big is sometimes guarding something that hurts, like humiliation, betrayal or fear.\"},{\"id\":\"regretful\",\"name\":\"Regretful\",\"group\":\"ashamed\",\"p\":24,\"e\":36,\"def\":\"Regretful is the ache of wishing you'd chosen differently. It looks back at a decision you made, or didn't make, and keeps playing the other version.\",\"body\":\"A heavy or sinking feeling in your chest or stomach, a mind that replays, and sometimes a wince or a sigh.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"head\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That you care about how things turned out, and you're learning from it. Regret points to what matters to you next time.\",\"confused\":[{\"id\":\"disappointed\",\"diff\":\"Disappointed is about how things turned out. Regretful is about your own choice.\"},{\"id\":\"guilty\",\"diff\":\"Guilty is about acting against your own values, often in a way that affects someone else. Regretful can be about any choice, even one that only affected you.\"}],\"try\":\"Ask yourself two questions. What can I still do about it? What will I do differently next time? Then let the rest go, as much as you can.\",\"know\":\"Researchers who study decisions find that regret comes from imagining you'd acted differently, and disappointment comes from imagining the situation had turned out differently.\",\"knowSrc\":[\"zeelenberg1998\"],\"defFirst\":\"Regretful is the ache of wishing you'd chosen differently.\",\"defRest\":\"It looks back at a decision you made, or didn't make, and keeps playing the other version.\",\"msgFirst\":\"That you care about how things turned out, and you're learning from it.\",\"msgRest\":\"Regret points to what matters to you next time.\"},{\"id\":\"humiliated\",\"name\":\"Humiliated\",\"group\":\"ashamed\",\"p\":6,\"e\":60,\"def\":\"Humiliated is the painful feeling of being put down, mocked or shown up in front of others. It hits your sense of dignity.\",\"body\":\"A burning face, a sick or sinking stomach, a wish to hide or disappear, and sometimes anger rising underneath.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"stomach\",\"s\":[\"queasy\",\"hollow\"]}],\"evidence\":\"described\",\"message\":\"That your dignity was hurt, and it matters to you. Being humiliated says more about what happened to you than about who you are.\",\"confused\":[{\"id\":\"embarrassed\",\"diff\":\"Embarrassed is an awkward slip that fades. Humiliated is being lowered by someone, and it can stay with you.\"},{\"id\":\"ashamed\",\"diff\":\"Ashamed is a verdict you pass on yourself. Humiliated often comes from how someone else treated you.\"}],\"try\":\"Say what happened plainly, to yourself or someone you trust: \\\"I was put down in front of people, and it hurt.\\\" If someone keeps doing it, that's worth setting a limit on or getting support with.\",\"defFirst\":\"Humiliated is the painful feeling of being put down, mocked or shown up in front of others.\",\"defRest\":\"It hits your sense of dignity.\",\"msgFirst\":\"That your dignity was hurt, and it matters to you.\",\"msgRest\":\"Being humiliated says more about what happened to you than about who you are.\"},{\"id\":\"insecure\",\"name\":\"Insecure\",\"group\":\"ashamed\",\"p\":24,\"e\":48,\"def\":\"Insecure is a shaky doubt about whether you're good enough, liked enough or safe in a relationship. It makes you check, compare or hold back.\",\"body\":\"A tight or unsettled stomach, tense shoulders, a busy mind that replays and compares, and trouble relaxing around people.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"queasy\",\"fluttery\"]},{\"r\":\"arms\",\"s\":[\"tight\"]},{\"r\":\"head\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That you need some reassurance, or that an old doubt has been stirred up. It doesn't prove the doubt is true.\",\"confused\":[{\"id\":\"ashamed\",\"diff\":\"Ashamed says \\\"I am bad.\\\" Insecure asks \\\"Am I good enough?\\\" and is still open to an answer.\"},{\"id\":\"jealous\",\"diff\":\"Jealous fears losing someone to a rival. Insecure is a wider doubt about your own worth.\"}],\"try\":\"Write down one piece of evidence for the doubt and two against it. If it's about a relationship, try asking for what you need in plain words instead of checking.\",\"defFirst\":\"Insecure is a shaky doubt about whether you're good enough, liked enough or safe in a relationship.\",\"defRest\":\"It makes you check, compare or hold back.\",\"msgFirst\":\"That you need some reassurance, or that an old doubt has been stirred up.\",\"msgRest\":\"It doesn't prove the doubt is true.\"},{\"id\":\"rejected\",\"name\":\"Rejected\",\"group\":\"sad\",\"p\":10,\"e\":44,\"def\":\"Rejected is the sting of being turned away, left out or not chosen. It can come from a person, a group, a job or a single unanswered message.\",\"body\":\"A drop or ache in your stomach, a heavy chest, a lump in your throat, and a wish to pull back from everyone.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"throat\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That belonging matters to you, as it does to everyone. Being rejected by someone isn't the same as being unworthy.\",\"confused\":[{\"id\":\"hurt\",\"diff\":\"Hurt can come from any unkind moment. Rejected is about being turned away or left out.\"},{\"id\":\"lonely\",\"diff\":\"Lonely is wanting more connection. Rejected is feeling pushed away from the connection you reached for.\"}],\"try\":\"Treat it like a real injury, and be kind to yourself for a day. Then reach toward someone who has been warm to you before, even with a small message.\",\"know\":\"Hurt feelings usually have a reason. Researchers find they tend to start when you feel that someone doesn't value the relationship as much as you'd like.\",\"knowSrc\":[\"leary1998\"],\"defFirst\":\"Rejected is the sting of being turned away, left out or not chosen.\",\"defRest\":\"It can come from a person, a group, a job or a single unanswered message.\",\"msgFirst\":\"That belonging matters to you, as it does to everyone.\",\"msgRest\":\"Being rejected by someone isn't the same as being unworthy.\"},{\"id\":\"heartbroken\",\"name\":\"Heartbroken\",\"group\":\"sad\",\"p\":6,\"e\":34,\"def\":\"Heartbroken is deep sadness after losing someone you love, or the future you hoped to have with them. It can follow a breakup, a betrayal or a death.\",\"body\":\"An ache or heaviness in your chest, a tight throat, waves of tears, no appetite or trouble sleeping, and a tired, heavy body.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That the bond was real and mattered a lot. The pain tends to come in waves, and it usually softens with time.\",\"confused\":[{\"id\":\"grieving\",\"diff\":\"Grieving is the long process after a loss, often a death. Heartbroken is the raw pain of it, and it often follows a breakup.\"},{\"id\":\"rejected\",\"diff\":\"Rejected is about being turned away. Heartbroken is about losing a love you had or hoped for.\"}],\"try\":\"Keep the basics going: eat something, get outside, sleep when you can. Let one person know what's happening, and hold off on big decisions for a little while.\",\"defFirst\":\"Heartbroken is deep sadness after losing someone you love, or the future you hoped to have with them.\",\"defRest\":\"It can follow a breakup, a betrayal or a death.\",\"msgFirst\":\"That the bond was real and mattered a lot.\",\"msgRest\":\"The pain tends to come in waves, and it usually softens with time.\"},{\"id\":\"exhausted\",\"name\":\"Exhausted\",\"group\":\"drained\",\"p\":28,\"e\":4,\"def\":\"Exhausted is being worn out all the way through, in body, mind or both. Rest feels needed, not just wanted.\",\"body\":\"Heavy arms and legs, heavy eyelids, a foggy head, slowness, aching muscles and sometimes feeling cold.\",\"bodyRegions\":[{\"r\":\"legs\",\"s\":[\"heavy\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"head\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That you've been running on more than you have, for a while. It's a signal to rest, and to look at what's draining you.\",\"confused\":[{\"id\":\"bored\",\"diff\":\"Bored has energy it can't spend. Exhausted has no energy to spend at all.\"},{\"id\":\"drained\",\"diff\":\"Drained is running low. Exhausted is running on empty after a long stretch.\"}],\"try\":\"Take the smallest real rest you can today: lie down for ten minutes, go to bed earlier, or cancel one thing. If the tiredness lasts for weeks, even after rest, check in with a health professional.\",\"defFirst\":\"Exhausted is being worn out all the way through, in body, mind or both.\",\"defRest\":\"Rest feels needed, not just wanted.\",\"msgFirst\":\"That you've been running on more than you have, for a while.\",\"msgRest\":\"It's a signal to rest, and to look at what's draining you.\",\"under\":\"It isn't always only tiredness: sometimes worry, sadness or resentment about everything you've been carrying is part of the weight.\"},{\"id\":\"empty\",\"name\":\"Empty\",\"group\":\"drained\",\"p\":20,\"e\":10,\"def\":\"Empty is a hollow, nothing-inside feeling, as if something that used to matter has gone silent. It's different from being calm.\",\"body\":\"A hollow chest or stomach, a flat face, heavy or slow movements, and a sense of going through the motions.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"hollow\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]},{\"r\":\"face\",\"s\":[\"numb\"]}],\"evidence\":\"described\",\"message\":\"That you may be worn down, cut off from what you care about, or carrying a loss you haven't felt yet.\",\"confused\":[{\"id\":\"numb\",\"diff\":\"Numb is feeling turned down or far away. Empty feels like something is missing.\"},{\"id\":\"calm\",\"diff\":\"Calm is settled and easy. Empty is flat, and it doesn't feel restful.\"}],\"try\":\"Do one small thing that used to matter to you, even without the feeling: a song, a walk, a message to a friend. If the emptiness stays for two weeks or more, please talk to someone about it.\",\"defFirst\":\"Empty is a hollow, nothing-inside feeling, as if something that used to matter has gone silent.\",\"defRest\":\"It's different from being calm.\",\"msgFirst\":\"That you may be worn down, cut off from what you care about, or carrying a loss you haven't felt yet.\",\"msgRest\":\"\"},{\"id\":\"relaxed\",\"name\":\"Relaxed\",\"group\":\"calm\",\"p\":76,\"e\":14,\"def\":\"Relaxed is when your body and mind let go of effort. Your muscles soften, your breathing slows, and you aren't trying to do anything.\",\"body\":\"Loose shoulders, a soft jaw, slow and easy breathing, warm arms and legs, and a settled stomach.\",\"bodyRegions\":[{\"r\":\"arms\",\"s\":[\"warm\",\"light\"]},{\"r\":\"chest\",\"s\":[\"light\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]},{\"r\":\"legs\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That you feel safe enough to rest. This is the kind of rest your body and mind need to recharge.\",\"confused\":[{\"id\":\"calm\",\"diff\":\"Calm is a settled state you can keep even when things are busy. Relaxed is letting go of effort altogether, with nothing you need to do.\"},{\"id\":\"bored\",\"diff\":\"Bored wants something to do. Relaxed is happy not doing much.\"}],\"try\":\"Notice it on purpose for a few breaths. Where does your body feel loose? Noticing good moments can help you find your way back to them later.\",\"defFirst\":\"Relaxed is when your body and mind let go of effort.\",\"defRest\":\"Your muscles soften, your breathing slows, and you aren't trying to do anything.\",\"msgFirst\":\"That you feel safe enough to rest.\",\"msgRest\":\"This is the kind of rest your body and mind need to recharge.\"},{\"id\":\"safe\",\"name\":\"Safe\",\"group\":\"calm\",\"p\":78,\"e\":20,\"def\":\"Safe is the sense that nothing needs guarding right now. Your body and mind can stand down.\",\"body\":\"Easy breathing, softer muscles, a settled stomach, a steady heartbeat, and eyes that don't need to scan the room.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"light\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That the people or the place around you feel trustworthy. For some people, it takes time and practice to trust this feeling.\",\"confused\":[{\"id\":\"calm\",\"diff\":\"Calm is a settled state. Safe is the sense of protection underneath it.\"},{\"id\":\"numb\",\"diff\":\"Numb can look like safety from the outside, but it's being cut off, not being at ease.\"}],\"try\":\"Notice what's helping you feel safe right now: a person, a place, a sound or a smell. Write it down, so you can come back to it on a harder day.\",\"defFirst\":\"Safe is the sense that nothing needs guarding right now.\",\"defRest\":\"Your body and mind can stand down.\",\"msgFirst\":\"That the people or the place around you feel trustworthy.\",\"msgRest\":\"For some people, it takes time and practice to trust this feeling.\"},{\"id\":\"trusting\",\"name\":\"Trusting\",\"group\":\"connected\",\"p\":74,\"e\":34,\"def\":\"Trusting is the relaxed feeling of being able to count on someone. You don't need to guard or check, because you expect them to be there.\",\"body\":\"An open chest, relaxed shoulders, easy eye contact and a settled stomach.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"light\"]},{\"r\":\"arms\",\"s\":[\"light\"]},{\"r\":\"stomach\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That this person has earned your confidence, or that you're willing to give it. Trust grows through small promises kept.\",\"confused\":[{\"id\":\"safe\",\"diff\":\"Safe is about the situation. Trusting is about a person.\"},{\"id\":\"connected\",\"diff\":\"Connected is feeling close. Trusting is feeling you can rely on them.\"}],\"try\":\"Notice what this person did that built your trust, and tell them. If trusting is hard for you, start with something small and see how it goes.\",\"defFirst\":\"Trusting is the relaxed feeling of being able to count on someone.\",\"defRest\":\"You don't need to guard or check, because you expect them to be there.\",\"msgFirst\":\"That this person has earned your confidence, or that you're willing to give it.\",\"msgRest\":\"Trust grows through small promises kept.\"},{\"id\":\"affectionate\",\"name\":\"Affectionate\",\"group\":\"connected\",\"p\":86,\"e\":48,\"def\":\"Affectionate is a warm, fond feeling toward someone, with the wish to show it. It's love in its everyday clothes.\",\"body\":\"Warmth in your chest, a soft face and smile, relaxed shoulders, and a pull to hug, touch or get closer.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]},{\"r\":\"arms\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That someone matters to you. Showing it in small ways helps keep a bond strong.\",\"confused\":[{\"id\":\"loved\",\"diff\":\"Loved is feeling cared for. Affectionate is the care flowing out from you.\"},{\"id\":\"grateful\",\"diff\":\"Grateful is a response to something someone did. Affectionate doesn't need a reason.\"}],\"try\":\"Let it show in a small way today: a message, a hug, or telling someone one specific thing you like about them.\",\"defFirst\":\"Affectionate is a warm, fond feeling toward someone, with the wish to show it.\",\"defRest\":\"It's love in its everyday clothes.\",\"msgFirst\":\"That someone matters to you.\",\"msgRest\":\"Showing it in small ways helps keep a bond strong.\"},{\"id\":\"amused\",\"name\":\"Amused\",\"group\":\"happy\",\"p\":84,\"e\":70,\"def\":\"Amused is the light, playful feeling when something strikes you as funny. It can be a small smile or a full laugh.\",\"body\":\"A smile or a grin, a laugh bubbling up, a light chest, loose shoulders and sometimes happy tears.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"warm\",\"light\"]},{\"r\":\"chest\",\"s\":[\"light\"]},{\"r\":\"stomach\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That something surprised you in a good way. Laughing together can also bring people closer.\",\"confused\":[{\"id\":\"happy\",\"diff\":\"Happy is a broad good feeling. Amused is the particular spark of finding something funny.\"},{\"id\":\"excited\",\"diff\":\"Excited looks forward. Amused is about something happening right now.\"}],\"try\":\"Share it: send the joke, tell the story, laugh with someone. And make a little room in your week for things that make you laugh.\",\"know\":\"When researchers asked people about their feelings while watching more than 2,000 short videos, amusement came out as its own clear kind of feeling, not just a type of happy.\",\"knowSrc\":[\"cowen2017\"],\"defFirst\":\"Amused is the light, playful feeling when something strikes you as funny.\",\"defRest\":\"It can be a small smile or a full laugh.\",\"msgFirst\":\"That something surprised you in a good way.\",\"msgRest\":\"Laughing together can also bring people closer.\"},{\"id\":\"inspired\",\"name\":\"Inspired\",\"group\":\"happy\",\"p\":82,\"e\":74,\"def\":\"Inspired is the lift you feel when someone's skill, kindness or courage moves you, and makes you want to do or be more.\",\"body\":\"Warmth or tingles in your chest, goosebumps, a lifted feeling, sometimes teary eyes, and energy to act.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\",\"tingly\"]},{\"r\":\"arms\",\"s\":[\"tingly\"]},{\"r\":\"face\",\"s\":[\"warm\"]}],\"evidence\":\"described\",\"message\":\"That you've seen something you value, and it's calling you forward. It points toward who you'd like to be.\",\"confused\":[{\"id\":\"envious\",\"diff\":\"Envious wants what someone has, and it stings. Inspired admires it and wants to grow.\"},{\"id\":\"proud\",\"diff\":\"Proud is about something you did. Inspired is about something someone else did.\"}],\"try\":\"Catch it before it fades. Write down one small step you could take this week toward what moved you.\",\"know\":\"Researchers find that seeing someone act with great skill or goodness tends to make people want to improve themselves or do something kind for others.\",\"knowSrc\":[\"algoe2009\"],\"defFirst\":\"Inspired is the lift you feel when someone's skill, kindness or courage moves you, and makes you want to do or be more.\",\"defRest\":\"\",\"msgFirst\":\"That you've seen something you value, and it's calling you forward.\",\"msgRest\":\"It points toward who you'd like to be.\"},{\"id\":\"confused\",\"name\":\"Confused\",\"group\":\"curious\",\"p\":38,\"e\":58,\"def\":\"Confused is the puzzled feeling when things don't add up and you can't make sense of them yet. It's uncomfortable, and it can be the step just before you understand.\",\"body\":\"A furrowed brow, a busy or foggy head, pausing, and a restless urge to ask or go back over things.\",\"bodyRegions\":[{\"r\":\"head\",\"s\":[\"restless\",\"heavy\"]},{\"r\":\"face\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That something new doesn't fit what you expected. It's a signal to slow down, ask a question or look again.\",\"confused\":[{\"id\":\"curious\",\"diff\":\"Curious is pulled toward something new. Confused is stuck on something that doesn't fit yet.\"},{\"id\":\"overwhelmed\",\"diff\":\"Overwhelmed is too much at once. Confused is not making sense of it yet.\"}],\"try\":\"Say out loud what you do understand, then ask one clear question about the part you don't. Confusion shrinks fastest when it's specific.\",\"defFirst\":\"Confused is the puzzled feeling when things don't add up and you can't make sense of them yet.\",\"defRest\":\"It's uncomfortable, and it can be the step just before you understand.\",\"msgFirst\":\"That something new doesn't fit what you expected.\",\"msgRest\":\"It's a signal to slow down, ask a question or look again.\"},{\"id\":\"betrayed\",\"name\":\"Betrayed\",\"group\":\"angry\",\"p\":10,\"e\":70,\"def\":\"Betrayed is the shock and hurt of finding out that someone you trusted broke that trust, by lying, breaking a promise, sharing a secret or turning against you. It can shake what you thought you knew about the person, and sometimes your trust in your own judgment.\",\"body\":\"A sick, sinking stomach, a tight chest, heat in your face, a mind that keeps replaying what happened, and trouble sleeping.\",\"bodyRegions\":[{\"r\":\"stomach\",\"s\":[\"hollow\",\"queasy\"]},{\"r\":\"chest\",\"s\":[\"tight\"]},{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"head\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That trust mattered to you, and someone broke it. Betrayal often brings hurt and anger together, and it's normal to swing between them for a while.\",\"confused\":[{\"id\":\"hurt\",\"diff\":\"Hurt can come from any careless or unkind moment. Betrayed is when someone you relied on broke your trust, and it can change how you see them.\"},{\"id\":\"angry\",\"diff\":\"Angry is about something wrong or unfair. Betrayed is about a wrong done by someone you trusted, so hurt comes with it.\"}],\"try\":\"Give yourself time before you decide what this means for the relationship. Write down what happened and what you need, maybe an honest talk, some distance or both, and talk it through with someone you trust who isn't involved.\",\"defFirst\":\"Betrayed is the shock and hurt of finding out that someone you trusted broke that trust, by lying, breaking a promise, sharing a secret or turning against you.\",\"defRest\":\"It can shake what you thought you knew about the person, and sometimes your trust in your own judgment.\",\"msgFirst\":\"That trust mattered to you, and someone broke it.\",\"msgRest\":\"Betrayal often brings hurt and anger together, and it's normal to swing between them for a while.\"},{\"id\":\"helpless\",\"name\":\"Helpless\",\"group\":\"sad\",\"p\":8,\"e\":30,\"def\":\"Helpless is the sense that you can't change what's happening, however hard you try, as if your hands are tied. It often comes when something big is out of your control, like an illness, a loss or someone else's choices.\",\"body\":\"A heavy, sinking feeling, slumped shoulders, arms that feel weak or limp, a tight throat and a pull to give up or lie down.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]}],\"evidence\":\"described\",\"message\":\"That you're facing something bigger than you can fix on your own. Feeling helpless isn't a weakness in you. It's a cue to bring in support, and to find one small part you can still act on.\",\"confused\":[{\"id\":\"hopeless\",\"diff\":\"Helpless is feeling you can't change things right now. Hopeless is believing they'll never get better.\"},{\"id\":\"overwhelmed\",\"diff\":\"Overwhelmed is too much coming in at once. Helpless is feeling there's nothing you can do about it.\"}],\"try\":\"Split it into what you can't control and what you can, even if the second list has only one tiny thing on it, like making a call or getting some sleep. Do that one thing, and ask someone to help with the rest.\",\"defFirst\":\"Helpless is the sense that you can't change what's happening, however hard you try, as if your hands are tied.\",\"defRest\":\"It often comes when something big is out of your control, like an illness, a loss or someone else's choices.\",\"msgFirst\":\"That you're facing something bigger than you can fix on your own.\",\"msgRest\":\"Feeling helpless isn't a weakness in you. It's a cue to bring in support, and to find one small part you can still act on.\",\"helpNote\":{\"before\":\"If you feel helpless because someone is hurting, threatening or controlling you, you don't have to handle that alone. The helplines linked from \",\"link\":\"the box near the end of this page\",\"after\":\" can point you to support where you live.\"}},{\"id\":\"inadequate\",\"name\":\"Inadequate\",\"group\":\"ashamed\",\"p\":16,\"e\":34,\"def\":\"Inadequate is the sinking sense that you're not good enough, not capable enough or not doing enough. It often comes from measuring yourself against someone else, or against a standard in your head.\",\"body\":\"A heavy or sinking chest, shoulders that drop or curl in, a hot face, a tight stomach and a head full of comparisons.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\",\"hollow\"]},{\"r\":\"face\",\"s\":[\"hot\"]},{\"r\":\"stomach\",\"s\":[\"tight\"]},{\"r\":\"head\",\"s\":[\"restless\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That something matters to you, and you're afraid you're falling short of it. The feeling is real, but it isn't a fair measure of what you're worth.\",\"confused\":[{\"id\":\"insecure\",\"diff\":\"Insecure asks \\\"Am I good enough?\\\" Inadequate feels as if the answer is already no.\"},{\"id\":\"ashamed\",\"diff\":\"Inadequate is about falling short at something. Ashamed spreads it to who you are as a whole.\"}],\"try\":\"Write down the standard you're holding yourself to, and ask whether you'd hold a friend to it. If it's too high, write a fairer one. If it's fair, pick one small step toward it.\",\"defFirst\":\"Inadequate is the sinking sense that you're not good enough, not capable enough or not doing enough.\",\"defRest\":\"It often comes from measuring yourself against someone else, or against a standard in your head.\",\"msgFirst\":\"That something matters to you, and you're afraid you're falling short of it.\",\"msgRest\":\"The feeling is real, but it isn't a fair measure of what you're worth.\"},{\"id\":\"discouraged\",\"name\":\"Discouraged\",\"group\":\"drained\",\"p\":24,\"e\":22,\"def\":\"Discouraged is when your drive to keep trying runs low after setbacks. You still want the thing, but it's getting harder to believe your effort will pay off.\",\"body\":\"Low energy, heavy arms and legs, a slumped posture, sighing, and a dull weight in your chest.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"arms\",\"s\":[\"heavy\"]},{\"r\":\"legs\",\"s\":[\"heavy\"]}],\"evidence\":\"described\",\"message\":\"That you've been pushing for a while without seeing enough progress. Discouragement can be a sign to change the plan or get some support, not to give up on what you want.\",\"confused\":[{\"id\":\"disappointed\",\"diff\":\"Disappointed is about one outcome that didn't happen. Discouraged builds up over several, and it wears down your will to try again.\"},{\"id\":\"hopeless\",\"diff\":\"Discouraged is low on drive for one thing, and a small win can lift it. Hopeless has lost the belief that anything can change.\"}],\"try\":\"Look back at how far you've come, not only at how far there is to go, and write down one thing that did work. Then make the next step small enough to finish today.\",\"defFirst\":\"Discouraged is when your drive to keep trying runs low after setbacks.\",\"defRest\":\"You still want the thing, but it's getting harder to believe your effort will pay off.\",\"msgFirst\":\"That you've been pushing for a while without seeing enough progress.\",\"msgRest\":\"Discouragement can be a sign to change the plan or get some support, not to give up on what you want.\"},{\"id\":\"longing\",\"name\":\"Longing\",\"group\":\"connected\",\"p\":40,\"e\":46,\"def\":\"Longing is a deep wish for someone or something you can't have right now, like a person far away, a place you can't get to or a life you hoped for. It aches, and there's love in the ache.\",\"body\":\"An ache or pull in the chest, a tight throat, a sigh, and sometimes a hollow feeling in the stomach.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"heavy\"]},{\"r\":\"throat\",\"s\":[\"tight\"]},{\"r\":\"stomach\",\"s\":[\"hollow\"]}],\"evidence\":\"described\",\"message\":\"That someone or something matters a great deal to you. Longing can point to what you'd like more of in your life, and what's worth reaching for.\",\"confused\":[{\"id\":\"lonely\",\"diff\":\"Lonely is missing connection in general. Longing is missing someone or something in particular.\"},{\"id\":\"nostalgic\",\"diff\":\"Nostalgic looks back fondly at what was. Longing reaches for something you want now.\"}],\"try\":\"If it's someone you can reach, and it feels right to, send them a line. If not, write down what you miss most, and look for one small piece of it you could bring into this week.\",\"defFirst\":\"Longing is a deep wish for someone or something you can't have right now, like a person far away, a place you can't get to or a life you hoped for.\",\"defRest\":\"It aches, and there's love in the ache.\",\"msgFirst\":\"That someone or something matters a great deal to you.\",\"msgRest\":\"Longing can point to what you'd like more of in your life, and what's worth reaching for.\"},{\"id\":\"nostalgic\",\"name\":\"Nostalgic\",\"group\":\"connected\",\"p\":58,\"e\":36,\"def\":\"Nostalgic is a bittersweet warmth when you think back to a time, a place or people that meant a lot to you. It's mostly fond, with a little ache for what's gone.\",\"body\":\"Warmth in the chest, a soft smile, a lump in the throat and sometimes teary eyes.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"warm\"]},{\"r\":\"face\",\"s\":[\"warm\"]},{\"r\":\"throat\",\"s\":[\"tight\"]}],\"evidence\":\"described\",\"message\":\"That your past holds things that still matter to you. Remembering the good parts can remind you who you are and who you belong with.\",\"confused\":[{\"id\":\"longing\",\"diff\":\"Longing reaches for something you want now. Nostalgic looks back fondly at something that was.\"},{\"id\":\"sad\",\"diff\":\"Sad is mainly about loss. Nostalgic is mostly warm, with a little sadness mixed in.\"}],\"try\":\"Share the memory with someone who was there, or tell someone who wasn't. Then ask which small part of it you could bring back now, like a song, a recipe or a walk you used to take.\",\"know\":\"Nostalgia was once treated as an illness. Today researchers find it's mostly a warm feeling with a touch of sadness, and that it can help people feel more connected to others.\",\"knowSrc\":[\"wildschut2006\"],\"defFirst\":\"Nostalgic is a bittersweet warmth when you think back to a time, a place or people that meant a lot to you.\",\"defRest\":\"It's mostly fond, with a little ache for what's gone.\",\"msgFirst\":\"That your past holds things that still matter to you.\",\"msgRest\":\"Remembering the good parts can remind you who you are and who you belong with.\"},{\"id\":\"playful\",\"name\":\"Playful\",\"group\":\"happy\",\"p\":86,\"e\":78,\"def\":\"Playful is a light, mischievous mood when you feel like joking, teasing or turning something into a game. It doesn't need a reason or a goal.\",\"body\":\"A grin, light and loose shoulders, energy in your arms and legs, and laughter close to the surface.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"light\",\"warm\"]},{\"r\":\"chest\",\"s\":[\"light\"]},{\"r\":\"arms\",\"s\":[\"light\"]},{\"r\":\"legs\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That you feel free enough to let go a little. Play is one of the ways people bond, try new things and recharge.\",\"confused\":[{\"id\":\"amused\",\"diff\":\"Amused is enjoying something funny. Playful wants to join in and make some fun of its own.\"},{\"id\":\"excited\",\"diff\":\"Excited looks forward to something. Playful is about having fun right now.\"}],\"try\":\"Follow it for a few minutes: a silly game, a dance in the kitchen, a joke with someone who'll get it. Play doesn't have to be useful to be worth it.\",\"defFirst\":\"Playful is a light, mischievous mood when you feel like joking, teasing or turning something into a game.\",\"defRest\":\"It doesn't need a reason or a goal.\",\"msgFirst\":\"That you feel free enough to let go a little.\",\"msgRest\":\"Play is one of the ways people bond, try new things and recharge.\"},{\"id\":\"confident\",\"name\":\"Confident\",\"group\":\"happy\",\"p\":80,\"e\":66,\"def\":\"Confident is a steady trust that you can handle what's in front of you. It doesn't mean you're sure it'll go perfectly, only that you can cope if it doesn't.\",\"body\":\"An upright posture, a lifted chest, steady breathing, relaxed shoulders and an even voice.\",\"bodyRegions\":[{\"r\":\"chest\",\"s\":[\"light\",\"warm\"]},{\"r\":\"arms\",\"s\":[\"light\"]}],\"evidence\":\"described\",\"message\":\"That you've got skills, practice or support to lean on here. Confidence makes this a good moment to take on something that matters to you.\",\"confused\":[{\"id\":\"proud\",\"diff\":\"Proud looks back at something you did. Confident looks ahead and trusts you can do it.\"},{\"id\":\"determined\",\"diff\":\"Confident is trust that you can handle it. Determined is a push to keep going, even without that trust.\"}],\"try\":\"Use it on something you've been putting off: send the email, ask the question, sign up. Then notice what helped you feel this way, so you can find it again.\",\"defFirst\":\"Confident is a steady trust that you can handle what's in front of you.\",\"defRest\":\"It doesn't mean you're sure it'll go perfectly, only that you can cope if it doesn't.\",\"msgFirst\":\"That you've got skills, practice or support to lean on here.\",\"msgRest\":\"Confidence makes this a good moment to take on something that matters to you.\"},{\"id\":\"determined\",\"name\":\"Determined\",\"group\":\"happy\",\"p\":64,\"e\":80,\"def\":\"Determined is a firm, focused push to reach something, even when it's hard. You've made up your mind, and you're going to keep at it.\",\"body\":\"A set jaw, a straight back, focused eyes, energy in your arms and legs, and steady, deep breathing.\",\"bodyRegions\":[{\"r\":\"face\",\"s\":[\"tight\"]},{\"r\":\"arms\",\"s\":[\"restless\"]},{\"r\":\"legs\",\"s\":[\"restless\"]}],\"evidence\":\"described\",\"message\":\"That this goal really matters to you. Determination gives you the energy to keep going when it gets tough.\",\"confused\":[{\"id\":\"confident\",\"diff\":\"Confident trusts you can handle it. Determined keeps pushing, even on days when that trust is missing.\"},{\"id\":\"frustrated\",\"diff\":\"Frustrated pushes against what's in the way. Determined looks for another way through.\"}],\"try\":\"Pick the next step and do it now, while the energy is here. Plan a short break too, so you can keep it up.\",\"know\":\"One of the most widely used mood questionnaires in research lists \\\"determined\\\" among its ten good feelings, next to \\\"inspired\\\", \\\"proud\\\" and \\\"strong\\\".\",\"knowSrc\":[\"watson1988\"],\"defFirst\":\"Determined is a firm, focused push to reach something, even when it's hard.\",\"defRest\":\"You've made up your mind, and you're going to keep at it.\",\"msgFirst\":\"That this goal really matters to you.\",\"msgRest\":\"Determination gives you the energy to keep going when it gets tough.\"}],\"pairs\":[{\"id\":\"shame-guilt\",\"title\":\"Shame and guilt\",\"a\":{\"label\":\"Shame\",\"id\":\"ashamed\",\"line\":\"\\\"I am bad.\\\" It's about who you are, and it points toward hiding.\"},\"b\":{\"label\":\"Guilt\",\"id\":\"guilty\",\"line\":\"\\\"I did something bad.\\\" It's about an action, and it points toward repair.\"},\"ask\":\"Is my mind on what I did, or on what it says about me?\",\"open\":[\"guilty\",\"ashamed\"],\"ansA\":\"On what it says about me\",\"ansB\":\"On what I did\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Shame is helped by being seen and accepted, and by remembering that a mistake isn't your identity.\",\"bWhy\":\"Guilt is often helped by an apology or a change.\",\"note\":\"\",\"first\":\"b\"},{\"id\":\"envy-jealousy\",\"title\":\"Envy and jealousy\",\"a\":{\"label\":\"Envy\",\"id\":\"envious\",\"line\":\"You want something someone else has.\"},\"b\":{\"label\":\"Jealousy\",\"id\":\"jealous\",\"line\":\"You fear losing something you have to someone else.\"},\"ask\":\"Am I wanting what they have, or afraid of losing what's mine?\",\"open\":[\"envious\",\"jealous\"],\"ansA\":\"Wanting what they have\",\"ansB\":\"Afraid of losing what's mine\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Envy points to something you want for yourself.\",\"bWhy\":\"Jealousy points to a bond that feels at risk, and often to a conversation.\",\"note\":\"\",\"first\":\"a\"},{\"id\":\"sad-depressed\",\"title\":\"Sad and depressed\",\"a\":{\"label\":\"Sad\",\"id\":\"sad\",\"line\":\"A reaction to a loss or a letdown. It has a reason, it comes in waves, and you can still feel moments of warmth or interest.\"},\"b\":{\"label\":\"Depressed\",\"line\":\"A condition, not a single feeling. Low mood or lost interest most of the day, nearly every day, for at least two weeks, often with changes in sleep, energy, appetite or concentration.\"},\"ask\":\"Has the low mood or lost interest been there most days for two weeks or more?\",\"open\":[\"sad\",\"hopeless\"],\"ansA\":\"No, it comes and goes\",\"ansB\":\"Yes, most days\",\"third\":\"Not sure\",\"both\":\"If you're not sure, that's a good reason to check, not to wait.\",\"aWhy\":\"Sadness usually eases with time, comfort and support.\",\"bWhy\":\"Depression is common and treatable, and it's worth talking to a doctor or therapist about.\",\"note\":\"This map can't tell the two apart for you. If seeing a doctor or therapist isn't possible right now, or doesn't feel safe, a helpline can talk it through with you.\",\"first\":\"a\"},{\"id\":\"stressed-overwhelmed\",\"title\":\"Stressed and overwhelmed\",\"a\":{\"label\":\"Stressed\",\"id\":\"stressed\",\"line\":\"The demands are high and you're still coping, with effort.\"},\"b\":{\"label\":\"Overwhelmed\",\"id\":\"overwhelmed\",\"line\":\"It's more than you can take in right now. You may freeze, shut down or cry.\"},\"ask\":\"Can I still choose what to do next, or has everything blurred together?\",\"open\":[\"stressed\",\"overwhelmed\"],\"ansA\":\"I can still choose\",\"ansB\":\"It's all blurred together\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Stress calls for reducing or sharing the load.\",\"bWhy\":\"Overwhelm calls for stopping the input first, then choosing one step.\",\"note\":\"\",\"first\":\"a\"},{\"id\":\"anxious-afraid\",\"title\":\"Anxious and afraid\",\"a\":{\"label\":\"Anxious\",\"id\":\"anxious\",\"line\":\"A response to something that might happen, or that you can't quite pin down.\"},\"b\":{\"label\":\"Afraid\",\"id\":\"afraid\",\"line\":\"A response to something dangerous right here, right now.\"},\"ask\":\"Is the danger in the room, or ahead of me?\",\"open\":[\"afraid\",\"anxious\"],\"ansA\":\"Ahead of me\",\"ansB\":\"In the room\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Anxiety says check, plan, and settle your body.\",\"bWhy\":\"Fear says get to safety.\",\"note\":\"\",\"first\":\"b\"},{\"id\":\"lonely-alone\",\"title\":\"Lonely and alone\",\"a\":{\"label\":\"Lonely\",\"id\":\"lonely\",\"line\":\"A feeling: wanting more or better connection than you have. You can feel it in a crowd.\"},\"b\":{\"label\":\"Alone\",\"line\":\"A fact: you're by yourself. Many people enjoy it and need it.\"},\"ask\":\"Does being on my own feel restful right now, or does it ache?\",\"open\":[\"lonely\"],\"ansA\":\"It aches\",\"ansB\":\"It feels restful\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Loneliness asks for contact that feels real, even in small doses.\",\"bWhy\":\"Time alone can be a way to recharge.\",\"note\":\"\",\"first\":\"b\"},{\"id\":\"disappointed-hurt\",\"title\":\"Disappointed and hurt\",\"a\":{\"label\":\"Disappointed\",\"id\":\"disappointed\",\"line\":\"Something didn't turn out the way you hoped.\"},\"b\":{\"label\":\"Hurt\",\"id\":\"hurt\",\"line\":\"Someone treated you in a way that landed on a sore place, and it feels personal.\"},\"ask\":\"Is this about what happened, or about how someone treated me?\",\"open\":[\"disappointed\",\"hurt\"],\"ansA\":\"What happened\",\"ansB\":\"How someone treated me\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Disappointment asks you to adjust hopes or plans.\",\"bWhy\":\"Hurt often asks for a conversation or a repair.\",\"note\":\"\",\"first\":\"a\"},{\"id\":\"calm-numb\",\"title\":\"Calm and numb\",\"a\":{\"label\":\"Calm\",\"id\":\"calm\",\"line\":\"Settled, with an easy body, and you can still feel things, including small pleasures.\"},\"b\":{\"label\":\"Numb\",\"id\":\"numb\",\"line\":\"Flat or far away, and things that usually matter don't land. Often a sign of being overloaded or shut down.\"},\"ask\":\"If something good happened right now, would I feel it?\",\"open\":[\"calm\",\"numb\"],\"ansA\":\"Yes, I'd feel it\",\"ansB\":\"Probably not\",\"third\":\"Not sure\",\"both\":\"That's fine. Check again later, when something small and good happens.\",\"aWhy\":\"Calm is worth savoring.\",\"bWhy\":\"Numbness is worth being gentle with, and worth telling someone about if it lasts.\",\"note\":\"\",\"first\":\"a\"},{\"id\":\"disappointed-regretful\",\"title\":\"Disappointed and regretful\",\"a\":{\"label\":\"Disappointed\",\"id\":\"disappointed\",\"line\":\"Things didn't turn out the way you hoped.\"},\"b\":{\"label\":\"Regretful\",\"id\":\"regretful\",\"line\":\"You wish you'd chosen differently.\"},\"ask\":\"Am I wishing the world had gone differently, or that I had?\",\"open\":[\"disappointed\",\"regretful\"],\"src\":[\"zeelenberg1998\"],\"ansA\":\"That things had gone differently\",\"ansB\":\"That I had chosen differently\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"Disappointment asks you to grieve a little and adjust your hopes.\",\"bWhy\":\"Regret asks what you'd do differently next time.\",\"note\":\"\",\"first\":\"a\"},{\"id\":\"nervous-excited\",\"title\":\"Nervous and excited\",\"a\":{\"label\":\"Nervous\",\"id\":\"nervous\",\"line\":\"The buzz feels like a warning.\"},\"b\":{\"label\":\"Excited\",\"id\":\"excited\",\"line\":\"The buzz feels like something to look forward to.\"},\"ask\":\"Does the buzz feel more like a warning, or like something to look forward to?\",\"open\":[\"nervous\",\"excited\"],\"src\":[\"brooks2014\"],\"ansA\":\"Like a warning\",\"ansB\":\"Like something to look forward to\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"\",\"bWhy\":\"\",\"note\":\"In the body they're nearly the same, so relabeling the buzz as excitement is often easier than trying to calm it away.\",\"first\":\"a\"},{\"id\":\"envious-inspired\",\"title\":\"Envious and inspired\",\"a\":{\"label\":\"Envious\",\"id\":\"envious\",\"line\":\"Someone has what you want, and it stings.\"},\"b\":{\"label\":\"Inspired\",\"id\":\"inspired\",\"line\":\"Someone has what you admire, and it lifts you.\"},\"ask\":\"Does seeing it sting, or does it lift me?\",\"open\":[\"envious\",\"inspired\"],\"src\":[\"vandeven2009\",\"algoe2009\"],\"ansA\":\"It stings\",\"ansB\":\"It lifts me\",\"third\":\"A bit of both\",\"both\":\"Often it's a bit of both. Start with the one that feels louder right now.\",\"aWhy\":\"\",\"bWhy\":\"\",\"note\":\"Both can point to something you value. Envy that stings can be turned into a goal.\",\"first\":\"a\"},{\"id\":\"bored-exhausted\",\"title\":\"Bored and exhausted\",\"a\":{\"label\":\"Bored\",\"id\":\"bored\",\"line\":\"You have energy, but nothing holds it.\"},\"b\":{\"label\":\"Exhausted\",\"id\":\"exhausted\",\"line\":\"You have no energy left to spend.\"},\"ask\":\"If something interesting turned up right now, would I want to do it?\",\"open\":[\"bored\",\"exhausted\"],\"src\":[\"eastwood2012\"],\"ansA\":\"Yes, I would\",\"ansB\":\"No, I'd rather rest\",\"third\":\"Not sure\",\"both\":\"Try something small for five minutes. If it pulls you in, it was boredom. If it drags, rest.\",\"aWhy\":\"Boredom is helped by a small challenge.\",\"bWhy\":\"Exhaustion is helped by real rest.\",\"note\":\"\",\"first\":\"a\"}],\"wheel\":[{\"core\":\"afraid\",\"words\":[\"worried\",\"restless\",\"nervous\",\"anxious\",\"overwhelmed\",\"stressed\",\"onedge\",\"panicky\"],\"ring\":[\"worried\",\"nervous\",\"overwhelmed\",\"onedge\"],\"groups\":[{\"id\":\"afraid.worry\",\"name\":\"worry\",\"gloss\":\"Your mind runs ahead to what could go wrong.\",\"words\":[\"worried\",\"nervous\",\"anxious\"]},{\"id\":\"afraid.too-much\",\"name\":\"too much\",\"gloss\":\"More is being asked of you than you can handle right now.\",\"words\":[\"overwhelmed\",\"stressed\"]},{\"id\":\"afraid.on-alert\",\"name\":\"on alert\",\"gloss\":\"Your body is on guard and ready to move.\",\"words\":[\"restless\",\"onedge\",\"panicky\"]}],\"fn\":\"Many researchers think fear exists to protect you. It sharpens your attention and gets your body ready to fight, run or freeze, often before you've had time to think.\",\"know\":\"Fear and anxiety are close, but researchers treat them as two different states. Fear is about a danger that's here now. Anxiety is about one that might come.\",\"knowSrc\":[\"sylvers2011\"],\"ways\":[\"Ask yourself two things: how likely is what I'm afraid of, and how would I cope if it did happen? Fear tends to make the first answer bigger and skip the second question.\",\"Hold something cold for half a minute, like a glass of iced water, and pay attention to how it feels in your hands. A strong, simple sensation can pull your attention out of the spiral.\",\"Say the fear out loud to someone you trust. Fears can feel a little smaller once they're shared.\"]},{\"core\":\"angry\",\"words\":[\"envious\",\"resentful\",\"disgusted\",\"irritated\",\"jealous\",\"frustrated\",\"furious\",\"betrayed\"],\"ring\":[\"resentful\",\"disgusted\",\"irritated\",\"frustrated\"],\"groups\":[{\"id\":\"angry.comparing\",\"name\":\"comparing\",\"gloss\":\"You look at someone else and feel you have less, or might lose what you have.\",\"words\":[\"envious\",\"jealous\"]},{\"id\":\"angry.wrong-or-unfair\",\"name\":\"wrong or unfair\",\"gloss\":\"Something feels wrong or unfair, and you want to push it away or push back.\",\"words\":[\"resentful\",\"disgusted\",\"furious\",\"betrayed\"]},{\"id\":\"angry.fed-up\",\"name\":\"fed up\",\"gloss\":\"Small things, or things in your way, keep getting to you.\",\"words\":[\"irritated\",\"frustrated\"]}],\"fn\":\"Anger gives you energy to push back, set a limit or put something right. It can protect what matters to you, and it helps to decide what to do with it before you act.\",\"know\":\"When people sort emotion words into piles of words that feel alike, irritation, frustration, resentment, disgust, envy and jealousy tend to land in the same pile as anger.\",\"knowSrc\":[\"shaver1987\"],\"ways\":[\"Turn the volume down around you for a few minutes: step away from the screen, the chat or the noise, and let your body catch up.\",\"Write down just the facts of what happened, as if you were describing it to a stranger, and then what you made it mean. Sometimes the meaning is what stings most.\",\"When you're ready to talk, start with \\\"I need\\\" rather than \\\"You always\\\". It's much easier to hear.\"]},{\"core\":\"ashamed\",\"words\":[\"regretful\",\"guilty\",\"insecure\",\"humiliated\",\"embarrassed\",\"inadequate\"],\"ring\":[\"regretful\",\"guilty\",\"insecure\",\"embarrassed\"],\"groups\":[{\"id\":\"ashamed.looking-back\",\"name\":\"looking back\",\"gloss\":\"You look back at something you did, or didn't do, and wish it were different.\",\"words\":[\"regretful\",\"guilty\"]},{\"id\":\"ashamed.being-seen\",\"name\":\"being seen\",\"gloss\":\"You worry about how you look in other people's eyes.\",\"words\":[\"insecure\",\"humiliated\",\"embarrassed\",\"inadequate\"]}],\"fn\":\"These feelings help people live together. Guilt pushes you to repair harm, and embarrassment smooths over an awkward slip. Shame tends to make people want to hide, which is why it helps so much to be met with kindness.\",\"know\":\"Shame, guilt and embarrassment can feel alike, but when people describe real moments of each, they come out different. Embarrassment is the most different of the three, and it isn't just a milder shame.\",\"knowSrc\":[\"tangney1996\",\"tangney2007\"],\"ways\":[\"Lift your head and look up for a moment. Shame pulls you to shrink and hide, and gently doing the opposite can take away a little of its power.\",\"Try changing \\\"I'm such an idiot\\\" into \\\"I made a mistake\\\". It's still honest, and it leaves room to put things right.\",\"Do one kind thing for your body, like a shower, a proper meal or some fresh air. Shame can make you feel you don't deserve care, and you do.\"]},{\"core\":\"sad\",\"words\":[\"hopeless\",\"grieving\",\"lonely\",\"disappointed\",\"heartbroken\",\"rejected\",\"hurt\",\"helpless\"],\"ring\":[\"hopeless\",\"grieving\",\"lonely\",\"hurt\"],\"groups\":[{\"id\":\"sad.loss\",\"name\":\"loss\",\"gloss\":\"You've lost someone or something, or the hope that things will get better.\",\"words\":[\"hopeless\",\"grieving\",\"heartbroken\",\"helpless\"]},{\"id\":\"sad.left-out\",\"name\":\"left out\",\"gloss\":\"You feel far from other people, or pushed away by them.\",\"words\":[\"lonely\",\"rejected\"]},{\"id\":\"sad.let-down\",\"name\":\"let down\",\"gloss\":\"Someone or something didn't turn out the way you hoped, and it stings.\",\"words\":[\"disappointed\",\"hurt\"]}],\"fn\":\"Many researchers think sadness slows you down so you can take in a loss, and shows the people around you that you could use some care.\",\"know\":\"When people sort emotion words into piles, hurt, disappointment, loneliness, grief and hopelessness tend to land with sadness. So do shame and guilt, which is one reason they can be hard to tell apart from sadness.\",\"knowSrc\":[\"shaver1987\"],\"ways\":[\"Sit by a window or step outside for some daylight, even for a few minutes. It won't fix sadness, but it can make it a little lighter to carry.\",\"Let someone keep you company, even without talking about it: a shared meal, a film, a walk side by side.\",\"Lower the bar for today and let small things count, like a shower, a meal or one reply. Be as gentle with yourself as you'd be with a friend going through this.\"]},{\"core\":\"drained\",\"words\":[\"exhausted\",\"numb\",\"empty\",\"bored\",\"discouraged\"],\"ring\":[\"exhausted\",\"numb\",\"empty\",\"bored\"],\"groups\":[{\"id\":\"drained.running-low\",\"name\":\"running low\",\"gloss\":\"Your energy or your interest has run out.\",\"words\":[\"exhausted\",\"bored\",\"discouraged\"]},{\"id\":\"drained.shut-down\",\"name\":\"shut down\",\"gloss\":\"Your feelings go quiet, far away or hollow.\",\"words\":[\"numb\",\"empty\"]}],\"fn\":\"Low-energy states can be a signal to rest, to change something, or to look for what's missing. Sometimes they're the body's way of turning the volume down after too much.\",\"know\":\"Many classic lists of emotions leave out states like boredom and exhaustion. Maps that sort feelings by how pleasant they are and how much energy they carry give them their own corner: unpleasant, with low energy.\",\"knowSrc\":[\"russell1980\",\"cowen2017\"],\"ways\":[\"Step outside or open a window for a few minutes. Fresh air and daylight won't refill you, but they can take the edge off the fog.\",\"Notice what's been taking the most out of you lately, and what used to give some energy back. Name one of each.\",\"Tell someone you're running low, and ask for one specific thing, like help with a task or company on a walk.\"]},{\"core\":\"calm\",\"words\":[\"relaxed\",\"safe\",\"content\",\"relieved\"],\"ring\":[\"relaxed\",\"safe\",\"content\",\"relieved\"],\"groups\":[{\"id\":\"calm.at-ease\",\"name\":\"at ease\",\"gloss\":\"Your body and mind can let go, because nothing needs guarding.\",\"words\":[\"relaxed\",\"safe\"]},{\"id\":\"calm.all-is-well\",\"name\":\"all is well\",\"gloss\":\"Things turned out fine, or what you have is enough for now.\",\"words\":[\"content\",\"relieved\"]}],\"fn\":\"Calm states let your body rest and recover, and they give you room to think, notice and connect.\",\"know\":\"In a study where Finnish speakers compared emotion words, calm, contented feelings formed their own group, separate from cheerful feelings and from love.\",\"knowSrc\":[\"toivonen2012\"],\"ways\":[\"Stay with it a little longer: a few more minutes where you are, before you reach for your phone or the next task.\",\"Use the calm for something that's harder when you're wound up, like a kind word to someone or a decision you've been putting off.\",\"Share it: sit with someone you like, and let the quiet be easy.\"]},{\"core\":\"connected\",\"words\":[\"trusting\",\"compassionate\",\"loved\",\"grateful\",\"affectionate\",\"longing\",\"nostalgic\"],\"ring\":[\"compassionate\",\"loved\",\"grateful\",\"affectionate\"],\"groups\":[{\"id\":\"connected.cared-for\",\"name\":\"cared for\",\"gloss\":\"You feel that someone is there for you, just as you are.\",\"words\":[\"trusting\",\"loved\"]},{\"id\":\"connected.warm-toward-others\",\"name\":\"warm toward others\",\"gloss\":\"You feel warmth for someone and want to show it or help.\",\"words\":[\"compassionate\",\"grateful\",\"affectionate\"]},{\"id\":\"connected.missing-someone\",\"name\":\"missing someone\",\"gloss\":\"Someone you love, or a time or place that mattered, feels far away.\",\"words\":[\"longing\",\"nostalgic\"]}],\"fn\":\"Feelings of love and closeness help people bond, care for each other and stick together through hard times. Gratitude, for example, seems to help people build and keep good relationships.\",\"know\":\"Researchers have argued that love belongs on the short list of basic emotions, next to joy, anger, sadness and fear. When people sort emotion words, affection, caring and compassion gather around it.\",\"knowSrc\":[\"shaver1996\",\"shaver1987\",\"algoe2009\"],\"ways\":[\"Make a small, regular time for someone who matters, like a call on the same evening each week or a standing walk.\",\"Before you fall asleep, think back to one moment today when you felt close to someone, and what made it so.\",\"Do one kind thing for someone without being asked, and notice how it feels.\"]},{\"core\":\"happy\",\"words\":[\"hopeful\",\"proud\",\"amused\",\"inspired\",\"excited\",\"playful\",\"confident\",\"determined\"],\"ring\":[\"hopeful\",\"proud\",\"amused\",\"excited\"],\"groups\":[{\"id\":\"happy.looking-forward\",\"name\":\"looking forward\",\"gloss\":\"You expect something good, and it pulls you toward it.\",\"words\":[\"hopeful\",\"excited\"]},{\"id\":\"happy.lifted-up\",\"name\":\"lifted up\",\"gloss\":\"Something done well, by you or someone else, lifts you up.\",\"words\":[\"proud\",\"inspired\"]},{\"id\":\"happy.having-fun\",\"name\":\"having fun\",\"gloss\":\"Something strikes you as funny, or you just want to play.\",\"words\":[\"amused\",\"playful\"]},{\"id\":\"happy.ready-to-go\",\"name\":\"ready to go\",\"gloss\":\"You feel able, and ready to take something on.\",\"words\":[\"confident\",\"determined\"]}],\"fn\":\"Good feelings reward what's working and pull you toward more of it. They can also help you connect, try new things and bounce back from stress.\",\"fnSrc\":[\"fredrickson2001\"],\"know\":\"Happiness isn't one feeling. When researchers asked people about their feelings while watching more than 2,000 short videos, joy, amusement, awe and excitement each came out as a separate kind of good feeling.\",\"knowSrc\":[\"cowen2017\"],\"ways\":[\"Slow down and savor it: notice three details of this moment, and let it last a few seconds longer.\",\"Tell someone your good news. Sharing a good moment can make it feel even bigger.\",\"Pass some of it on: a kind message, a compliment, a thank-you.\"]},{\"core\":\"curious\",\"words\":[\"confused\",\"awe\",\"surprised\"],\"ring\":[\"confused\",\"awe\",\"surprised\"],\"groups\":[{\"id\":\"curious.puzzled\",\"name\":\"puzzled\",\"gloss\":\"Something doesn't add up yet, and you want to work it out.\",\"words\":[\"confused\"]},{\"id\":\"curious.amazed\",\"name\":\"amazed\",\"gloss\":\"Something new, big or unexpected catches you off guard.\",\"words\":[\"awe\",\"surprised\"]}],\"fn\":\"Curiosity and surprise pull your attention toward what's new, so you can learn from it. Even confusion has a job: it tells you something doesn't fit yet.\",\"know\":\"Surprise, curiosity and confusion often show up together when people learn something that doesn't fit what they expected. Researchers who study learning measure them side by side.\",\"knowSrc\":[\"pekrun2017\"],\"ways\":[\"Look at it from another side: how would someone of a different age, job or country see it? A new angle can open the question up.\",\"Step away for a bit without a screen, like a walk or a shower. Sometimes an answer turns up once you stop pushing for it.\",\"Let yourself not know for a while. Not having the answer yet is part of learning something new.\"]}]};\nvar LINKS={\"grief\":{\"title\":\"Living With Grief\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/grief\/\"},\"name-it-to-tame-it\":{\"title\":\"Name It to Tame It\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/name-it-to-tame-it\/\"},\"suicidal-thoughts\":{\"title\":\"Suicidal Thoughts\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/suicidal-thoughts\/\"},\"slow-breathing\":{\"title\":\"Slow Breathing\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/slow-breathing\/\"},\"worry-time\":{\"title\":\"Worry Time\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/worry-time\/\"},\"your-brain-on-stress\":{\"title\":\"Your Brain on Stress\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/your-brain-on-stress\/\"},\"boundaries-boundaries-boundaries\":{\"title\":\"Boundaries, boundaries, boundaries!\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/boundaries-boundaries-boundaries\/\"},\"psychology-of-shame\":{\"title\":\"The Psychology of Shame\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/psychology-of-shame\/\"},\"bids-for-connection\":{\"title\":\"Bids for Connection\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/bids-for-connection\/\"},\"self-compassion\":{\"title\":\"Why Is It So Hard to Be Kind to Yourself?\",\"url\":\"https:\/\/equilibriumpsychotherapy.net\/self-compassion\/\"}};\nvar CONFIG={name:'The Feelings Map',history:true,key:'eqFeelingsMapV1'};\n\nvar F=DATA.feelings,byId={},groupById={},regionById={},sensById={};\nvar i;\nfor(i=0;i<F.length;i++){byId[F[i].id]=F[i];}\nfor(i=0;i<DATA.groups.length;i++){groupById[DATA.groups[i].id]=DATA.groups[i];}\nfor(i=0;i<DATA.regions.length;i++){regionById[DATA.regions[i].id]=DATA.regions[i];}\nfor(i=0;i<DATA.sensations.length;i++){sensById[DATA.sensations[i].id]=DATA.sensations[i];}\n\nvar state={core:null,special:null,focus:null,sub:null,sec:null,feeling:null,regions:[],marks:{},allOver:false,sens:[],sensBy:{},active:null,origin:'words',pair:DATA.pairs[0].id,showAll:false};\nvar PLEAS=['very unpleasant','unpleasant','in the middle','pleasant','very pleasant'];\nvar ENERGY=['very low energy','low energy','medium energy','high energy','very high energy'];\nvar REDUCE=false;\ntry{REDUCE=window.matchMedia('(prefers-reduced-motion: reduce)').matches;}catch(e){REDUCE=false;}\n\nfunction $(id){return document.getElementById(id);}\nfunction el(tag,cls,text){var n=document.createElement(tag);if(cls){n.className=cls;}if(text!==undefined){n.textContent=text;}return n;}\nfunction clear(n){while(n.firstChild){n.removeChild(n.firstChild);}}\nfunction say(t){var l=$('live');l.textContent='';setTimeout(function(){l.textContent=t;},40);}\nfunction lower(s){return s.charAt(0).toLowerCase()+s.slice(1);}\nfunction sortByName(a,b){return a.name<b.name?-1:(a.name>b.name?1:0);}\n\n\/* mixing helper; the wheel colours are nine hue families (colour.client.js) *\/\nfunction mix(a,b,t){return [Math.round(a[0]+(b[0]-a[0])*t),Math.round(a[1]+(b[1]-a[1])*t),Math.round(a[2]+(b[2]-a[2])*t)];}\n\nfunction levelOf(f){\n  var pl=Math.round((f.p-10)\/20),en=Math.round((f.e-10)\/20);\n  return {pl:Math.max(0,Math.min(4,pl)),en:Math.max(0,Math.min(4,en))};\n}\nfunction levelWords(f){var l=levelOf(f);return PLEAS[l.pl]+', '+ENERGY[l.en];}\n\n\/*SLOT part1 begin*\/\n\/* ---------- colour: nine hue families, one for each core feeling (revision 3, option C: vibrant: plum, lilac and fresh green, 30 Sep 2026) ---------- *\/\n\/* Option C (vibrant): afraid is a plum, ashamed a lilac, drained a fresh green, calm an aqua-turquoise; the liveliest of the three.\n   Green is allowed from revision 3 as a calm, natural colour (turquoise, teal-green, sage or mint), never a grass or traffic-light\n   green, and never next to angry on the wheel. Everything else is as in revision 2: every label is dark ink at 4.6 to 1 or more. *\/\n\/* Each core feeling has its own hue, and every word in its family is a shade of that hue. The core segment takes the family's mid shade.\n   A word is lighter when it is quieter and deeper when it is stronger, read from its place in the family's word list (feelings.json keeps\n   that list in order, quieter to stronger).\n   The hues follow the colours people in many countries link with each feeling (Jonauskaite and colleagues, 2020, Psychological Science,\n   30 nations): anger with red, fear and sadness with black and grey, love with red and pink, joy with yellow and orange. Where that study\n   has no answer (drained, calm, curious) the hue is our own choice. Calm leans green, as contentment and relief do in that study.\n   Every label on the wheel is dark ink. So every fill, from the palest word to the deepest, stays light enough for ink to reach 4.6 to 1,\n   and no fill ever takes a white label. All chroma is kept low, so the set reads as muted and dusty, and the strongest word of a family\n   is deeper, not louder.\n   FAMS: [lightness, chroma, hue in degrees] of the mid shade, in OKLCH, used for the core segment.\n   RAMP: the word shades, [lightness of the quietest word, lightness of the strongest word, chroma quiet, chroma strong, hue quiet, hue strong,\n   spacing curve g]. The strongest word stops just above the lightness where ink would drop under 4.6 to 1.\n   No hue between 95 and 125 (yellow-green and olive) is used anywhere, and no green is strong: a hue between 125 and 170 stays at chroma 0.07 or less.\n   The spacing is measured with CIEDE2000 (v3-plan\/colour\/colour-check2.js). *\/\nvar FAMS={\n  afraid:[0.699,0.109,332],\n  angry:[0.678,0.140,25],\n  ashamed:[0.841,0.090,300],\n  sad:[0.776,0.119,248],\n  drained:[0.801,0.100,140],\n  calm:[0.807,0.111,199],\n  connected:[0.823,0.105,6],\n  happy:[0.905,0.135,80],\n  curious:[0.770,0.135,46]\n};\nvar RAMP={\n  afraid:[0.935,0.672,0.035,0.118,326,324,1.236],\n  angry:[0.945,0.673,0.050,0.133,32,29,1.212],\n  ashamed:[0.945,0.700,0.030,0.110,300,294,1.274],\n  sad:[0.9466,0.6588,0.0787,0.1246,257,247,1.1642],\n  drained:[0.945,0.700,0.035,0.110,143,137,1.289],\n  calm:[0.942,0.700,0.035,0.108,201,192,1.275],\n  connected:[0.9414,0.6874,0.0254,0.1318,5,12,1.3698],\n  happy:[0.9647,0.6776,0.0247,0.1486,72,70,1.3209],\n  curious:[0.945,0.750,0.057,0.145,43,53,1.128]\n};\n\/* every label is dark ink; the ratio helpers stay for the gate and for dimTextOn in slot-wheel.client.js *\/\nvar INKC=[42,38,34];\nfunction relLum(c){\n  var a=c.map(function(v){var x=v\/255;return x<=0.03928?x\/12.92:Math.pow((x+0.055)\/1.055,2.4);});\n  return 0.2126*a[0]+0.7152*a[1]+0.0722*a[2];\n}\nfunction ratio(a,b){var x=relLum(a),y=relLum(b);return (Math.max(x,y)+0.05)\/(Math.min(x,y)+0.05);}\nfunction textOn(c){return INKC;}\nfunction okLin(L,C,h){\n  var a=C*Math.cos(h*Math.PI\/180),b=C*Math.sin(h*Math.PI\/180);\n  var l=L+0.3963377774*a+0.2158037573*b,m=L-0.1055613458*a-0.0638541728*b,s=L-0.0894841775*a-1.2914855480*b;\n  l=l*l*l;m=m*m*m;s=s*s*s;\n  return [4.0767416621*l-3.3077115913*m+0.2309699292*s,-1.2684380046*l+2.6097574011*m-0.3413193965*s,-0.0041960863*l-0.7034186147*m+1.7076147010*s];\n}\nfunction okIn(r){var i;for(i=0;i<3;i++){if(r[i]<-0.0005){return false;}if(r[i]>1.0005){return false;}}return true;}\n\/* OKLCH to sRGB; a colour outside the screen's range keeps its lightness and hue and gives up chroma until it fits *\/\nfunction oklchRGB(L,C,h){\n  var r=okLin(L,C,h),lo=0,hi=C,i;\n  if(!okIn(r)){\n    for(i=0;i<16;i++){var m=(lo+hi)\/2;if(okIn(okLin(L,m,h))){lo=m;}else{hi=m;}}\n    r=okLin(L,lo,h);\n  }\n  return r.map(function(v){\n    v=Math.max(0,Math.min(1,v));\n    v=v<=0.0031308?12.92*v:1.055*Math.pow(v,1\/2.4)-0.055;\n    return Math.round(v*255);\n  });\n}\n\/* a point on a family's ramp at u, from 0 (quietest) to 1 (strongest), as [L, C, h]: chroma rises quickly from the quiet end and then\n   levels off, so the strongest words get deeper without getting louder; the hue drifts a few degrees (gold warms towards amber as it\n   deepens, so it never turns olive) *\/\nfunction rampLCH(p,u){\n  var e=1-(1-u)*(1-u);\n  return [p[0]+(p[1]-p[0])*u,p[2]+(p[3]-p[2])*e,p[4]+(p[5]-p[4])*u];\n}\n\/* The ink-safe range of lightness is narrow, so the words must share it fairly. Equal steps in lightness would crowd the strong end,\n   where chroma rises and CIEDE2000 counts a chroma change for less, so each family has a spacing curve: the word at t sits at\n   u = t to the power g (RAMP[6]), with g chosen so that neighbouring words are about equally far apart. *\/\nfunction uAt(id,t){var g=RAMP[id][6];return Math.pow(t,g?g:1);}\n\/* the shade at t, from 0 (the quietest word of the family) to 1 (the strongest); null is the family's mid shade, used for the core itself.\n   If a shade ever misses 4.6 to 1 with ink (none does with these values), it is made a little lighter, a step at a time, until it passes. *\/\nfunction famRGB(coreId,t){\n  var q=(t===null)?FAMS[coreId]:rampLCH(RAMP[coreId],uAt(coreId,t));\n  var L=q[0],rgb=oklchRGB(L,q[1],q[2]),n=0;\n  while(n<40){\n    if(ratio(rgb,INKC)>=4.6){break;}\n    L+=0.004;rgb=oklchRGB(L,q[1],q[2]);n++;\n  }\n  return rgb;\n}\n\/* the zoom view's middle ring (v3-plan\/zoom\/plan.md): a pale tint of the family's own hue, with dark ink at 8 to 1 or better *\/\nfunction tintRGB(coreId){\n  var p=FAMS[coreId],L=0.895,C=Math.min(0.030,p[1]*0.45),rgb=oklchRGB(L,C,p[2]),n=0;\n  while(n<20){\n    if(ratio(rgb,INKC)>=8.2){break;}\n    L+=0.005;rgb=oklchRGB(L,C,p[2]);n++;\n  }\n  return rgb;\n}\n\n\/* the group you choose in an opened family (added to option C on 30 Sep). The strongest word of a family already sits at the ink floor, so the same shade would merge with\n   the core (afraid 4.3 and angry 2.4 apart in CIEDE2000) and, in the next ring, with that word (0 apart). A chosen group takes instead the family's own hue at a clearly\n   different lightness and chroma: [lightness, chroma], lighter and livelier for seven families, deeper for the two that are already light (happy, curious). Each is at least 5\n   apart from the core, from the strongest word and from the middle ring's tint, and ink reaches 4.6 to 1 or more on all nine. The hue is the family's own and is not touched. *\/\nvar SELS={\n  afraid:[0.860,0.105],angry:[0.820,0.105],ashamed:[0.780,0.120],sad:[0.860,0.090],drained:[0.880,0.120],\n  calm:[0.880,0.120],connected:[0.880,0.090],happy:[0.660,0.090],curious:[0.660,0.090]\n};\nfunction selRGB(coreId){\n  var q=SELS[coreId],h=RAMP[coreId][5],L=q[0],rgb=oklchRGB(L,q[1],h),n=0;\n  while(n<40){\n    if(ratio(rgb,INKC)>=4.6){break;}\n    L+=0.004;rgb=oklchRGB(L,q[1],h);n++;\n  }\n  return rgb;\n}\n\/* ---------- step 1: the wheel, and the words on it ---------- *\/\n\/* The structure comes from DATA.wheel (feelings.json): nine core feelings, each with the words of its family (words, quieter to stronger),\n   the four or so of them drawn on the outer ring of the whole wheel (ring), and the small groups the words fall into (groups).\n   There are two views. The whole wheel: nine cores and the ring words. A family opened up: on a laptop or tablet the tapped family grows to 60 percent of\n   the circle with three rings (core, groups, every word) and the other eight shrink to thin petals; on a phone the family takes the whole circle.\n   Every segment is drawn by one routine from a layout (angles and radii), and a change of view is an animation of those layouts. *\/\nstate.focus=null;state.sub=null;\nvar WHEEL=DATA.wheel,wheelIx={},coreOfId={},GROUPBY={},groupOfId={};\nWHEEL.forEach(function(w,ix){\n  wheelIx[w.core]=ix;coreOfId[w.core]=w.core;\n  w.words.forEach(function(id){coreOfId[id]=w.core;});\n  w.groups.forEach(function(g){g.core=w.core;GROUPBY[g.id]=g;g.words.forEach(function(id){groupOfId[id]=g.id;});});\n});\nfunction coreOf(id){return coreOfId[id];}\nfunction coreName(id){return lower(byId[id].name);}\nfunction capName(id){return byId[id].name;}\nfunction wheelWords(coreId){return [coreId].concat(WHEEL[wheelIx[coreId]].words);}\nfunction familyGroups(coreId){return WHEEL[wheelIx[coreId]].groups;}\nfunction joinWords(a){\n  if(a.length<2){return a.join('');}\n  return a.slice(0,a.length-1).join(', ')+' and '+a[a.length-1];\n}\nvar LOW=['calm','content','bored','numb','empty','exhausted'];\nvar LOWTEXT=\"Feeling not much at all is common, and it can mean different things. Calm feels easy and settled. Numb feels cut off, as if the volume is turned down. If you've felt flat or cut off for two weeks or more, it's worth talking to someone you trust or a professional about it.\";\n\n\/* colour: each core feeling has a hue family of its own (colour.client.js). A core takes the family's mid shade, and a word takes a shade of the\n   same hue, lighter when it is quieter and deeper when it is stronger. The shade comes from the word's place in the family's list, which runs quieter to stronger.\n   Text is dark ink or white, whichever has the higher contrast on that fill (textOn). *\/\nvar WASH=[252,250,246],DIMTXT=[95,87,78];\nfunction hex2(v){var h=v.toString(16);return h.length<2?'0'+h:h;}\nfunction rgbHex(c){return '#'+hex2(c[0])+hex2(c[1])+hex2(c[2]);}\nfunction dimTextOn(c){return ratio(c,DIMTXT)>=4.6?DIMTXT:textOn(c);}\n\/* the colour of any feeling on the wheel: a core is the family's mid shade; any other word is a shade by its place in the family's list *\/\nfunction wordRGB(id){\n  var core=coreOfId[id];\n  if(id===core){return famRGB(core,null);}\n  var ws=WHEEL[wheelIx[core]].words,ix=ws.indexOf(id);\n  return famRGB(core,ws.length>1?ix\/(ws.length-1):0.5);\n}\n\/* the middle ring of an opened family: a pale tint of the family's own hue; the group you choose takes its own lighter or livelier shade (selRGB) *\/\nfunction groupRGB(core){return tintRGB(core);}\n\n\/* ---- geometry: two drawings of the same wheel ----\n   wide (720px and up): vb 600. The whole wheel has a core ring (ci to co) and a ring of words (oi to oo). An opened family has a core (ci to fco), a ring of groups\n   (gi to go) and a ring of every word (wi to wo); the other cores become petals that reach from ci to oo.\n   phone: vb 360. The whole wheel has cores only. An opened family is a full-circle fan: the core as the hub (0 to fh), groups (gi to go), words (wi to wo). *\/\nvar GEO={\n  wide:{vb:600,c:300,hub:34,ci:42,co:168,oi:172,oo:294,fco:140,gi:143,go:186,wi:189,wo:294,labels:true},\n  phone:{vb:360,c:180,hub:20,ci:24,co:150,fh:58,gi:61,go:117,wi:120,wo:176,labels:false}\n};\nvar FOCUS_DEG=216,PETAL_DEG=18,LIFT_EDGE=298.4;\nfunction num(v){return String(Math.round(v*100)\/100);}\nfunction norm360(a){return ((a%360)+360)%360;}\nfunction pol(g,r,deg){var a=deg*Math.PI\/180;return [g.c+r*Math.sin(a),g.c-r*Math.cos(a)];}\nfunction pt(p){return num(p[0])+' '+num(p[1]);}\nfunction sector(g,r1,r2,a1,a2){\n  var big=(a2-a1)>180?1:0;\n  return 'M'+pt(pol(g,r2,a1))+'A'+num(r2)+' '+num(r2)+' 0 '+big+' 1 '+pt(pol(g,r2,a2))+'L'+pt(pol(g,r1,a2))+'A'+num(r1)+' '+num(r1)+' 0 '+big+' 0 '+pt(pol(g,r1,a1))+'Z';\n}\nfunction arcD(g,r,a,b,sweep){\n  return 'M'+pt(pol(g,r,a))+'A'+num(r)+' '+num(r)+' 0 '+(Math.abs(b-a)>180?1:0)+' '+sweep+' '+pt(pol(g,r,b));\n}\nfunction discD(g,r){\n  return 'M'+num(g.c-r)+' '+num(g.c)+'A'+num(r)+' '+num(r)+' 0 1 1 '+num(g.c+r)+' '+num(g.c)+'A'+num(r)+' '+num(r)+' 0 1 1 '+num(g.c-r)+' '+num(g.c)+'Z';\n}\n\n\/* the families: angles are proportional to the ring length plus one, so a core with three ring words still gets a wedge you can tap *\/\nvar FAM={};\n(function(){\n  var tot=0,a=0;\n  WHEEL.forEach(function(w){tot+=w.ring.length+1;});\n  var unit=360\/tot;\n  WHEEL.forEach(function(w,ix){var span=(w.ring.length+1)*unit;FAM[w.core]={ix:ix,a1:a,a2:a+span,span:span,mid:a+span\/2};a+=span;});\n})();\n\/* every segment: the nine cores, the 48 words (the ring words are on the whole wheel, all of them in an opened family), and the 22 groups *\/\nvar SEGS=[],SEGBY={};\n(function buildSegs(){\n  WHEEL.forEach(function(w){\n    var core={id:w.core,kind:'core',core:w.core,rgb:wordRGB(w.core),n:w.words.length,ring:true};\n    SEGS.push(core);SEGBY[core.id]=core;\n    w.words.forEach(function(id){\n      var s={id:id,kind:'word',core:w.core,rgb:wordRGB(id),ring:w.ring.indexOf(id)>=0,group:groupOfId[id]};\n      SEGS.push(s);SEGBY[id]=s;\n    });\n    w.groups.forEach(function(g){\n      var s={id:g.id,kind:'group',core:w.core,rgb:groupRGB(w.core),ring:false,g:g};\n      SEGS.push(s);SEGBY[g.id]=s;\n    });\n  });\n})();\n\n\/* ---- layouts (wide). A layout gives every segment {a1,a2,r1,r2,vis}. A segment that is not there in a layout is collapsed to no width at the point where it is\n   or will be, so that a change of view is a plain interpolation of two layouts. Angles run clockwise from the top and may pass 0 or 360. ---- *\/\nvar GW=GEO.wide,FOCUSL={},ANCHOR={},RESTL=null;\nfunction focusLayout(X){\n  if(FOCUSL[X]){return FOCUSL[X];}\n  var L={},F=FAM[X],a1f=F.mid-FOCUS_DEG\/2,a2f=a1f+FOCUS_DEG,n=WHEEL.length,ix=F.ix,nw=WHEEL[ix].words.length,pa=a1f,k;\n  L[X]={a1:a1f,a2:a2f,r1:GW.ci,r2:GW.fco,vis:true};\n  familyGroups(X).forEach(function(g){\n    var span=FOCUS_DEG*g.words.length\/nw,wa=pa,ws=FOCUS_DEG\/nw;\n    L[g.id]={a1:pa,a2:pa+span,r1:GW.gi,r2:GW.go,vis:true};\n    g.words.forEach(function(id){L[id]={a1:wa,a2:wa+ws,r1:GW.wi,r2:GW.wo,vis:true};wa+=ws;});\n    pa+=span;\n  });\n  var pp=a2f;\n  for(k=1;k<n;k++){\n    var Y=WHEEL[(ix+k)%n].core,p1=pp,p2=pp+PETAL_DEG,mid=(p1+p2)\/2;\n    var sh=Math.round((FAM[Y].mid-mid)\/360)*360;\n    p1+=sh;p2+=sh;mid+=sh;\n    L[Y]={a1:p1,a2:p2,r1:GW.ci,r2:GW.oo,vis:true};\n    familyGroups(Y).forEach(function(g){L[g.id]={a1:mid,a2:mid,r1:GW.gi,r2:GW.go,vis:false};});\n    WHEEL[(ix+k)%n].words.forEach(function(id){L[id]={a1:mid,a2:mid,r1:GW.oi,r2:GW.oo,vis:false};});\n    pp+=PETAL_DEG;\n  }\n  FOCUSL[X]=L;\n  return L;\n}\n\/* where a word or group that is not on the whole wheel appears from: its place in the opened family, mapped into the family's wedge of the whole wheel *\/\nWHEEL.forEach(function(w){\n  var L=focusLayout(w.core),F=FAM[w.core];\n  w.words.concat(w.groups.map(function(g){return g.id;})).forEach(function(id){\n    ANCHOR[id]=F.a1+(((L[id].a1+L[id].a2)\/2-L[w.core].a1)\/FOCUS_DEG)*F.span;\n  });\n});\nfunction restLayout(g){\n  var L={};\n  WHEEL.forEach(function(w){\n    var F=FAM[w.core],nr=w.ring.length;\n    L[w.core]={a1:F.a1,a2:F.a2,r1:g.ci,r2:g.co,vis:true};\n    if(g!==GW){return;}\n    w.words.forEach(function(id){\n      var k=w.ring.indexOf(id);\n      if(k>=0){L[id]={a1:F.a1+k*F.span\/nr,a2:F.a1+(k+1)*F.span\/nr,r1:GW.oi,r2:GW.oo,vis:true};}\n      else{L[id]={a1:ANCHOR[id],a2:ANCHOR[id],r1:GW.oi,r2:GW.oo,vis:false};}\n    });\n    w.groups.forEach(function(gr){L[gr.id]={a1:ANCHOR[gr.id],a2:ANCHOR[gr.id],r1:GW.gi,r2:GW.go,vis:false};});\n  });\n  return L;\n}\n\n\/* ---- labels ---- *\/\nvar LABELFS={core:19,corePhone:15,wordRest:14,wordZoom:12.5,group:13.5,hub:11};\nfunction fsUnits(s){\n  if(s.kind==='core'){return wheelMode==='phone'?LABELFS.corePhone:LABELFS.core;}\n  if(s.kind==='group'){return LABELFS.group;}\n  return state.focus?LABELFS.wordZoom:LABELFS.wordRest;\n}\nfunction kScale(){\n  var svg=wheelEl.querySelector('svg');\n  if(!svg){return 1;}\n  var w=svg.getBoundingClientRect().width;\n  return w>0?w\/GEO[wheelMode].vb:1;\n}\nfunction joinNames(ids){return joinWords(ids.map(function(i){return lower(byId[i].name);}));}\nfunction segLabel(s){\n  var zoomed=!!state.focus;\n  if(s.kind==='core'){\n    if(!zoomed){return coreName(s.id)+', core feeling, '+s.n+' finer words. Opens up its family.';}\n    if(state.focus===s.id){return coreName(s.id)+', the open core feeling. Choose again to see the whole wheel.';}\n    return coreName(s.id)+', core feeling. Opens up its family instead.';\n  }\n  if(s.kind==='group'){\n    var ws=s.g.words;\n    if(ws.length===1){return s.g.name+', a group of one '+coreName(s.core)+' word: '+lower(byId[ws[0]].name)+'.';}\n    return s.g.name+', a group of '+ws.length+' '+coreName(s.core)+' words: '+joinNames(ws)+'.';\n  }\n  if(zoomed){return lower(byId[s.id].name)+', a finer word for '+coreName(s.core)+', in the group '+GROUPBY[s.group].name;}\n  return lower(byId[s.id].name)+', a finer word for '+coreName(s.core);\n}\nfunction svgLabel(mode){\n  var c=state.focus;\n  if(mode==='wide'){\n    if(!c){return 'Feelings wheel. Nine core feelings in the inner ring, and some of their finer words around the outer ring. Use the left and right arrow keys to move around a ring, the down arrow to reach the finer words of a core feeling, the up arrow to come back to it, and Enter to choose. Choosing a core feeling opens up its whole family.';}\n    return 'Feelings wheel, with '+coreName(c)+' open. '+capName(c)+' and its '+familyGroups(c).length+' groups of words fill most of the circle, and the other eight core feelings sit in thin slices around it. Use the left and right arrow keys to move around a ring, the down arrow to move out, the up arrow to move in, Enter to choose, and Escape to see the whole wheel.';\n  }\n  if(!c){return 'Feelings wheel. Nine core feelings. Choose one, and the wheel opens up to show all its words.';}\n  return capName(c)+' family, up close. '+capName(c)+' is in the middle, with '+familyGroups(c).length+' groups of words around it and all '+WHEEL[wheelIx[c]].words.length+' of its words around the edge. Use the left and right arrow keys to move around a ring, the down arrow to move out, the up arrow to move in, Enter to choose, and Escape to go back to the whole wheel.';\n}\n\n\/* ---- the drawing ---- *\/\nfunction cssVars(s){\n  var dim=mix(s.rgb,WASH,s.kind==='group'?0.6:0.68);\n  var css='--f:'+rgbHex(s.rgb)+';--fd:'+rgbHex(dim)+';--t:'+rgbHex(textOn(s.rgb))+';--td:'+rgbHex(dimTextOn(dim));\n  if(s.kind==='group'){var deep=selRGB(s.core);css+=';--fs:'+rgbHex(deep)+';--ts:'+rgbHex(textOn(deep));}\n  return css;\n}\nfunction segHTML(s){\n  var h='<g class=\"fm-wseg '+s.kind+' off\" data-id=\"'+s.id+'\" data-core=\"'+s.core+'\" data-kind=\"'+s.kind+'\"'+(s.kind==='word'?' data-group=\"'+s.group+'\"':'')\n    +' style=\"'+cssVars(s)+'\" role=\"button\" tabindex=\"-1\" aria-pressed=\"false\"><path d=\"\"\/>';\n  if(s.kind==='group'){\n    var aid='ga-'+s.id.replace(\/[^a-z0-9]\/g,'-');\n    h+='<path class=\"arc\" id=\"'+aid+'\" d=\"\"\/><text aria-hidden=\"true\" dy=\".35em\"><textPath href=\"#'+aid+'\" startOffset=\"50%\">'+s.g.name+'<\/textPath><\/text>';\n  }else{\n    h+='<text transform=\"\" dy=\".35em\" aria-hidden=\"true\">'+lower(byId[s.id].name)+'<\/text>';\n  }\n  return h+'<\/g>';\n}\nfunction hubHTML(g,idle){\n  return '<g class=\"fm-wseg hub'+(idle?' idle':'')+'\" data-id=\"hub\" data-kind=\"hub\" tabindex=\"-1\"><path d=\"'+discD(g,g.hub)+'\"\/>'\n    +'<text class=\"hl\" transform=\"translate('+g.c+' '+num(g.c-(g.labels?1:0))+')\" aria-hidden=\"true\"><tspan x=\"0\" dy=\"-.15em\">whole<\/tspan><tspan x=\"0\" dy=\"1.05em\">wheel<\/tspan><\/text><\/g>';\n}\nvar OUTLINES='<g class=\"fm-wr\" aria-hidden=\"true\"><path class=\"fam\"\/><path class=\"selh\"\/><path class=\"sel\"\/><path class=\"hov\"\/><path class=\"foch\"\/><path class=\"foc\"\/><\/g>';\n\/* the fan that takes over the circle on a phone: the core is the hub, then the groups, then every word, all round the circle.\n   The labels are straight text along the ring, turned to the segment's mid angle and never upside down. *\/\nvar FANS={};\nfunction fanLabelRot(m){m=norm360(m);return (m>90)?((m<270)?m-180:m):m;}\nfunction fanHTML(core){\n  var g=GEO.phone,F=FAM[core],w=WHEEL[wheelIx[core]],n=w.words.length,a=F.a1,o={core:core,hub:null,groups:[],words:[]};\n  var h='<g class=\"fm-layer fm-fan off\" data-core=\"'+core+'\">';\n  var hub={id:core,kind:'hub',core:core,cur:{a1:0,a2:360,r1:0,r2:g.fh,vis:true}};\n  var cs=cssVars({rgb:wordRGB(core),kind:'core',core:core});\n  o.hub=hub;\n  h+='<g class=\"fm-wseg hub fan\" data-id=\"'+core+'\" data-core=\"'+core+'\" data-kind=\"hub\" tabindex=\"-1\" role=\"button\" style=\"'+cs+'\"><path d=\"'+discD(g,g.fh)+'\"\/>'\n    +'<text class=\"hl\" aria-hidden=\"true\" transform=\"translate('+g.c+' '+g.c+')\"><tspan x=\"0\" dy=\"-.5em\" class=\"hn\">'+coreName(core)+'<\/tspan><tspan x=\"0\" dy=\"1.75em\" class=\"hs\">whole wheel<\/tspan><\/text><\/g>';\n  var wa=a,ws=360\/n;\n  w.groups.forEach(function(gr){\n    var span=ws*gr.words.length,mid=a+span\/2,rm=(g.gi+g.go)\/2,p=pol(g,rm,mid);\n    var gs={id:gr.id,kind:'group',core:core,g:gr,rgb:groupRGB(core),cur:{a1:a,a2:a+span,r1:g.gi,r2:g.go,vis:true}};\n    o.groups.push(gs);\n    h+='<g class=\"fm-wseg group fan\" data-id=\"'+gr.id+'\" data-core=\"'+core+'\" data-kind=\"group\" tabindex=\"-1\" role=\"button\" aria-pressed=\"false\" style=\"'+cssVars(gs)+'\"><path d=\"'+sector(g,g.gi,g.go,a,a+span)+'\"\/>'\n      +'<text transform=\"translate('+pt(p)+') rotate('+num(fanLabelRot(mid))+')\" dy=\".35em\" aria-hidden=\"true\">'+gr.name+'<\/text><\/g>';\n    gr.words.forEach(function(id){\n      var m2=wa+ws\/2,rm2=(g.wi+g.wo)\/2,p2=pol(g,rm2,m2);\n      var wsg={id:id,kind:'word',core:core,group:gr.id,rgb:wordRGB(id),cur:{a1:wa,a2:wa+ws,r1:g.wi,r2:g.wo,vis:true}};\n      o.words.push(wsg);\n      h+='<g class=\"fm-wseg word fan\" data-id=\"'+id+'\" data-core=\"'+core+'\" data-group=\"'+gr.id+'\" data-kind=\"word\" tabindex=\"-1\" role=\"button\" aria-pressed=\"false\" style=\"'+cssVars(wsg)+'\"><path d=\"'+sector(g,g.wi,g.wo,wa,wa+ws)+'\"\/>'\n        +'<text transform=\"translate('+pt(p2)+') rotate('+num(fanLabelRot(m2))+')\" dy=\".35em\" aria-hidden=\"true\">'+lower(byId[id].name)+'<\/text><\/g>';\n      wa+=ws;\n    });\n    a+=span;\n  });\n  FANS[core]=o;\n  return h+OUTLINES+'<\/g>';\n}\nfunction wheelSVG(mode){\n  var g=GEO[mode],out='<svg class=\"fm-wheel '+mode+'\" viewBox=\"0 0 '+g.vb+' '+g.vb+'\" role=\"group\" focusable=\"false\" aria-describedby=\"wheelCap\" aria-label=\"'+svgLabel(mode)+'\">';\n  out+='<g class=\"fm-layer fm-rest\">';\n  SEGS.forEach(function(s){if(mode==='wide'){out+=segHTML(s);}else{if(s.kind==='core'){out+=segHTML(s);}}});\n  out+=hubHTML(g,true)+OUTLINES+'<\/g>';\n  if(mode==='phone'){WHEEL.forEach(function(w){out+=fanHTML(w.core);});}\n  return out+'<\/svg>';\n}\n\nvar wheelEl=$('wheel'),wheelMode='',anim=null,lastTap={id:'',at:0},HUB=null,AB={},WR={core:[],group:[],word:[]},fromWheel=false,lastPtr=null;\n\/* the drawing with only the core feelings is used below 720px, the width at which the ring segments are big enough to tap *\/\nfunction isPhone(){try{return window.matchMedia('(max-width: 719px)').matches;}catch(e){return false;}}\nfunction nowMs(){return window.performance?performance.now():Date.now();}\nfunction phoneFan(){return wheelMode==='phone'?(state.focus?true:false):false;}\nfunction layerEl(){\n  if(phoneFan()){return wheelEl.querySelector('.fm-fan[data-core=\"'+state.focus+'\"]');}\n  return wheelEl.querySelector('.fm-rest');\n}\nfunction liveEls(){\n  var L=layerEl();\n  if(!L){return [];}\n  return Array.prototype.slice.call(L.querySelectorAll('.fm-wseg:not(.off):not(.idle)'));\n}\nfunction segEl(id){var L=layerEl();return L?L.querySelector('.fm-wseg[data-id=\"'+id+'\"]'):null;}\nfunction ringPath(name){var L=layerEl();return L?L.querySelector('.fm-wr .'+name):null;}\nfunction setRing(names,d){names.split(' ').forEach(function(n){var p=ringPath(n);if(p){p.setAttribute('d',d);}});}\nfunction clearAllRings(){\n  Array.prototype.forEach.call(wheelEl.querySelectorAll('.fm-wr path'),function(p){p.setAttribute('d','');p.style.transform='';});\n}\nfunction dOf(g){var p=g.querySelector('path');return p?p.getAttribute('d'):'';}\n\n\/* paint one wide segment at geometry c; fade is the opacity the label has for the change of view (1 at rest) *\/\nfunction paintSeg(s,c,fade,k){\n  var g=GEO[wheelMode],w=c.a2-c.a1,d=w<0.12?'':sector(g,c.r1,c.r2,c.a1,c.a2),mid=(c.a1+c.a2)\/2,rm=(c.r1+c.r2)\/2,m=norm360(mid),op=fade,fs=fsUnits(s);\n  s.d=d;s.pathEl.setAttribute('d',d);\n  if(s.kind==='group'){\n    var rev=m>90?(m<270):false;\n    s.arcEl.setAttribute('d',rev?arcD(g,rm,c.a2,c.a1,0):arcD(g,rm,c.a1,c.a2,1));\n    if(w*Math.PI\/180*rm<(s.tl>0?s.tl:s.g.name.length*fs*0.56)){op=0;}\n  }else{\n    var p=pol(g,rm,mid),rot=m<=180?m-90:m+90,est=(s.tl>0?s.tl:byId[s.id].name.length*fs*0.56);\n    s.textEl.setAttribute('transform','translate('+pt(p)+') rotate('+num(rot)+')');\n    if(w*Math.PI\/180*Math.max(0,rm-est\/2)<fs+4\/k){op=0;}\n  }\n  s.textEl.style.opacity=op<1?String(Math.round(op*100)\/100):'';\n}\n\/* every outline is drawn from the live geometry, so it travels with its segment *\/\nfunction updateOutlinesWide(){\n  var f=state.feeling?SEGBY[state.feeling]:null,d='';\n  if(f){if(!f.el.classList.contains('off')){d=f.d;}}\n  setRing('sel selh',d);\n  var fam='';\n  if(state.focus){\n    var X=SEGBY[state.focus].cur;\n    if(state.sub){var G=SEGBY[state.sub].cur;fam=sector(GW,GW.gi,GW.oo,G.a1,G.a2);}\n    else{fam=sector(GW,GW.ci,GW.oo,X.a1,X.a2);}\n  }\n  setRing('fam',fam);\n  if(waveHov){var h=AB[waveHov];setRing('hov',h?h.d:'');}\n  var fo=document.activeElement,fd='';\n  if(fo){if(fo.classList){if(fo.classList.contains('fm-wseg')){if(wheelEl.contains(fo)){var show=false;try{show=fo.matches(':focus-visible');}catch(e){show=true;}if(show){fd=dOf(fo);}}}}}\n  setRing('foc foch',fd);\n}\n\n\/* ---- the change of view (wide): every segment goes from where it is now to where the new layout puts it, 420ms, easeInOutCubic, paths redrawn each frame ---- *\/\nfunction ease(t){return t<0.5?4*t*t*t:1-Math.pow(-2*t+2,3)\/2;}\nfunction bindSegs(){\n  var rest=wheelEl.querySelector('.fm-rest');\n  SEGS.forEach(function(s){\n    s.el=rest.querySelector('.fm-wseg[data-id=\"'+s.id+'\"]');\n    if(s.el){s.pathEl=s.el.querySelector('path');s.textEl=s.el.querySelector('text');s.arcEl=s.el.querySelector('path.arc');s.tl=0;}\n  });\n  HUB=rest.querySelector('.fm-wseg.hub');\n}\nfunction liveSegs(){return SEGS.filter(function(s){return !!s.el;});}\nfunction stopAnim(){if(anim){if(anim.raf){cancelAnimationFrame(anim.raf);}anim=null;}}\n\/* the wave is off for a change of view: every lift and every outline offset is removed at once, with no easing back *\/\nfunction waveOffNow(){\n  var els=Array.prototype.slice.call(wheelEl.querySelectorAll('.fm-wseg,.fm-wr path'));\n  els.forEach(function(g){g.style.transition='none';g.style.transform='';g.__v='';g.__own=undefined;});\n  void wheelEl.getBoundingClientRect();\n  els.forEach(function(g){g.style.transition='';});\n}\nfunction runLayout(to,instant,done){\n  stopAnim();\n  waveHov=null;focId=null;waveOffNow();\n  var from={},tl={},segs=liveSegs();\n  segs.forEach(function(s){\n    var f=s.cur,t=to[s.id],sh=Math.round((t.a1-f.a1)\/360)*360;\n    from[s.id]={a1:f.a1,a2:f.a2,r1:f.r1,r2:f.r2,vis:f.vis};\n    tl[s.id]={a1:t.a1-sh,a2:t.a2-sh,r1:t.r1,r2:t.r2,vis:t.vis};\n  });\n  if(instant){finishLayout(to,done);return;}\n  \/* the wave is off for the whole change, and the outlines that follow a segment are redrawn each frame *\/\n  setRing('hov','');\n  segs.forEach(function(s){if(from[s.id].vis){s.el.classList.remove('off');}else{if(tl[s.id].vis){s.el.classList.remove('off');}}});\n  anim={t0:nowMs(),from:from,tl:tl,to:to,done:done,raf:0};\n  svgZoomClass();\n  paintState();\n  anim.raf=requestAnimationFrame(stepAnim);\n}\nfunction svgZoomClass(){\n  var svg=wheelEl.querySelector('svg');\n  if(svg){svg.setAttribute('class','fm-wheel '+wheelMode+(state.focus?' zm':'')+(anim?' busy':''));}\n}\nfunction stepAnim(ts){\n  if(!anim){return;}\n  var t=Math.min(1,(nowMs()-anim.t0)\/420),e=ease(t),k=kScale();\n  liveSegs().forEach(function(s){\n    var f=anim.from[s.id],g=anim.tl[s.id],c={};\n    c.a1=f.a1+(g.a1-f.a1)*e;c.a2=f.a2+(g.a2-f.a2)*e;c.r1=f.r1+(g.r1-f.r1)*e;c.r2=f.r2+(g.r2-f.r2)*e;\n    var fade=1;\n    if(!f.vis){if(g.vis){fade=t<0.7?0:(t-0.7)\/0.3;}}\n    else if(!g.vis){fade=t>0.3?0:1-t\/0.3;}\n    if(!f.vis){if(!g.vis){return;}}\n    s.cur=c;paintSeg(s,c,fade,k);\n  });\n  updateOutlines();\n  if(t<1){anim.raf=requestAnimationFrame(stepAnim);}\n  else{var to=anim.to,done=anim.done;finishLayout(to,done);}\n}\nfunction finishLayout(L,done){\n  anim=null;\n  var k=kScale();\n  liveSegs().forEach(function(s){\n    var c=L[s.id];\n    s.cur={a1:c.a1,a2:c.a2,r1:c.r1,r2:c.r2,vis:c.vis};\n    s.el.classList.toggle('off',!c.vis);\n    if(c.vis){paintSeg(s,c,1,k);}\n  });\n  svgZoomClass();\n  fitAll();\n  settled();\n  if(done){done();}\n}\n\/* a label that is longer than the room it has is stepped down by half a unit until it fits or reaches 12px as drawn. Nothing is cut short. *\/\nfunction fitText(s,room,minU){\n  var t=s.textEl,fs=fsUnits(s),len;\n  t.style.fontSize='';\n  len=t.getComputedTextLength();\n  while(len>room){\n    if(fs<=minU){break;}\n    fs=Math.max(minU,fs-0.5);t.style.fontSize=num(fs)+'px';len=t.getComputedTextLength();\n  }\n  s.tl=len;\n  return len<=room+0.01;\n}\nvar fitFails=[];\nfunction fitAll(){\n  if(wheelMode!=='wide'){return;}\n  var k=kScale(),minU=12\/k;\n  fitFails=[];\n  liveSegs().forEach(function(s){\n    if(s.el.classList.contains('off')){return;}\n    var c=s.cur,rm=(c.r1+c.r2)\/2,room;\n    if(s.kind==='group'){room=(c.a2-c.a1)*Math.PI\/180*rm-10\/k;}\n    else{room=(c.r2-c.r1)-12\/k;}\n    if(!fitText(s,room,minU)){fitFails.push(s.id);}\n  });\n}\n\/* after a change of view: the rings for the hover wave are rebuilt from the live layout, and the state is painted *\/\nfunction settled(){\n  AB={};WR={core:[],group:[],word:[]};\n  var items=[];\n  if(phoneFan()){\n    var o=FANS[state.focus];\n    if(o){items=o.groups.concat(o.words);AB[o.hub.id]=o.hub;o.hub.el=segEl(o.hub.id);o.hub.d=discD(GEO.phone,GEO.phone.fh);}\n  }else if(wheelMode==='wide'){\n    items=liveSegs().filter(function(s){return s.cur.vis;});\n    if(state.focus){HUB.classList.remove('idle');}else{HUB.classList.add('idle');}\n    HUB.__s=HUB.__s||{id:'hub',kind:'hub',el:HUB,cur:{a1:0,a2:360,r1:0,r2:GW.hub},d:discD(GW,GW.hub)};\n    if(state.focus){AB.hub=HUB.__s;}\n  }else{items=liveSegs();}\n  items.forEach(function(s){\n    AB[s.id]=s;\n    if(s.kind==='core'){if(state.focus){if(wheelMode==='phone'){return;}}}\n    if(WR[s.kind]){WR[s.kind].push(s);}\n    var m=(s.cur.a1+s.cur.a2)\/2*Math.PI\/180;s.ux=Math.sin(m);s.uy=-Math.cos(m);\n  });\n  WR.core.sort(function(a,b){return FAM[a.core].ix-FAM[b.core].ix;});\n  ['group','word'].forEach(function(kd){WR[kd].sort(function(a,b){return a.cur.a1-b.cur.a1;});});\n  ['core','group','word'].forEach(function(kd){WR[kd].forEach(function(s,i){s.ri=i;});});\n  waveCache=null;\n  paintState();\n  if(lastPtr){if(waveOn){var ps=wavePick(lastPtr[0],lastPtr[1]);if(ps){waveSetHover(ps.id);}}}\n}\n\nfunction buildWheel(){\n  stopAnim();\n  wheelMode=isPhone()?'phone':'wide';\n  FANS={};\n  wheelEl.innerHTML=wheelSVG(wheelMode);\n  waveCache=null;waveHov=null;focId=null;\n  if(wheelMode==='wide'){\n    bindSegs();\n    var L=state.focus?focusLayout(state.focus):restLayout(GW);\n    finishLayout(L);\n  }else{\n    var rest=wheelEl.querySelector('.fm-rest'),PL=restLayout(GEO.phone);\n    SEGS.forEach(function(s){s.el=null;});\n    WHEEL.forEach(function(w){\n      var s=SEGBY[w.core],c=PL[w.core];\n      s.el=rest.querySelector('.fm-wseg[data-id=\"'+w.core+'\"]');s.pathEl=s.el.querySelector('path');s.textEl=s.el.querySelector('text');s.tl=0;\n      s.cur={a1:c.a1,a2:c.a2,r1:c.r1,r2:c.r2,vis:true};s.el.classList.remove('off');paintSeg(s,s.cur,1,kScale());\n    });\n    HUB=rest.querySelector('.fm-wseg.hub');\n    WHEEL.forEach(function(w){var L2=wheelEl.querySelector('.fm-fan[data-core=\"'+w.core+'\"]');FANS[w.core].el=L2;FANS[w.core].hub.el=L2.querySelector('.fm-wseg.hub');\n      var all=FANS[w.core].groups.concat(FANS[w.core].words);all.forEach(function(x){x.el=L2.querySelector('.fm-wseg[data-id=\"'+x.id+'\"]');x.d=dOf(x.el);x.textEl=x.el.querySelector('text');});});\n    if(state.focus){wheelEl.querySelector('.fm-rest').classList.add('off');var fl=wheelEl.querySelector('.fm-fan[data-core=\"'+state.focus+'\"]');fl.classList.remove('off');fitFan(state.focus);}\n    svgZoomClass();\n    settled();\n  }\n}\n\/* a group name too long for its sector in one line, even at the 12px floor: two lines, split at the space nearest the middle, each line fitted on its own (the hub label is built the same way) *\/\nfunction fanTwoLines(s,t,chord,minU){\n  var nm=s.g.name,cut=-1,best=999,q,NS='http:\/\/www.w3.org\/2000\/svg';\n  for(q=1;q<nm.length-1;q++){if(nm.charAt(q)===' '){var dd=Math.abs(q-nm.length\/2);if(dd<best){best=dd;cut=q;}}}\n  if(cut<0){fitFails.push(s.id);return;}\n  var a=document.createElementNS(NS,'tspan'),b=document.createElementNS(NS,'tspan');\n  a.setAttribute('x','0');a.setAttribute('dy','-0.55em');a.textContent=nm.slice(0,cut);\n  b.setAttribute('x','0');b.setAttribute('dy','1.1em');b.textContent=nm.slice(cut+1);\n  t.textContent='';t.appendChild(a);t.appendChild(b);\n  var fs=15,len;\n  t.style.fontSize=num(fs)+'px';len=Math.max(a.getComputedTextLength(),b.getComputedTextLength());\n  while(len>chord){if(fs<=minU){break;}fs=Math.max(minU,fs-0.5);t.style.fontSize=num(fs)+'px';len=Math.max(a.getComputedTextLength(),b.getComputedTextLength());}\n  if(len>chord+0.01){fitFails.push(s.id);}\n}\nfunction fitFan(core){\n  var k=kScale(),minU=12\/k,o=FANS[core],g=GEO.phone;\n  fitFails=[];\n  o.groups.concat(o.words).forEach(function(s){\n    var c=s.cur,rm=(c.r1+c.r2)\/2,chord=2*rm*Math.sin((c.a2-c.a1)*Math.PI\/360)-8\/k;\n    var t=s.textEl,fs=s.kind==='group'?15:16,len;\n    if(s.kind==='group'){t.textContent=s.g.name;}\n    t.style.fontSize=num(fs)+'px';len=t.getComputedTextLength();\n    while(len>chord){if(fs<=minU){break;}fs=Math.max(minU,fs-0.5);t.style.fontSize=num(fs)+'px';len=t.getComputedTextLength();}\n    if(len>chord+0.01){if(s.kind==='group'){fanTwoLines(s,t,chord,minU);len=0;}}\n    if(len>chord+0.01){fitFails.push(s.id);}\n  });\n}\n\n\/* ---- the state on the drawing ---- *\/\nfunction setPressed(g,on){g.setAttribute('aria-pressed',on?'true':'false');}\nfunction paintState(){\n  var svg=wheelEl.querySelector('svg');if(!svg){return;}\n  if(state.sub){if(state.feeling){if(groupOfId[state.feeling]){if(groupOfId[state.feeling]!==state.sub){state.sub=null;}}}}\n  if(state.sub){if(state.focus){if(GROUPBY[state.sub].core!==state.focus){state.sub=null;}}else{state.sub=null;}}\n  svgZoomClass();\n  svg.setAttribute('aria-label',svgLabel(wheelMode));\n  var sub=state.sub,zoomed=!!state.focus;\n  var root=layerEl(),els=root?Array.prototype.slice.call(root.querySelectorAll('.fm-wseg')):[];\n  els.forEach(function(g){\n    var id=g.getAttribute('data-id'),kind=g.getAttribute('data-kind'),dim=false,on=false;\n    if(kind==='hub'){\n      if(wheelMode==='wide'){\n        g.classList.toggle('idle',!zoomed);\n        g.setAttribute('aria-hidden',zoomed?'false':'true');\n        if(zoomed){g.setAttribute('role','button');g.setAttribute('aria-label','Show the whole wheel');}\n        else{g.removeAttribute('role');g.removeAttribute('aria-label');}\n      }else if(g.classList.contains('fan')){\n        g.setAttribute('aria-label',capName(id)+', the core feeling. Back to the whole wheel.');\n      }\n      return;\n    }\n    if(kind==='core'){\n      on=state.core===id;\n      if(zoomed){dim=(state.focus!==id);}\n    }else if(kind==='group'){\n      on=sub===id;\n      g.classList.toggle('gsel',on);\n      if(sub){dim=!on;}\n    }else{\n      on=state.feeling===id;\n      if(sub){dim=groupOfId[id]!==sub;}\n    }\n    g.classList.toggle('dim',dim);\n    var nq=moodOut(id,kind);\n    g.classList.toggle('nq',nq);\n    setPressed(g,on);\n    var so=phoneFan()?FANS[state.focus]:null,s=SEGBY[id];\n    if(kind==='core'){s=SEGBY[id];}\n    else if(so){s=null;so.groups.concat(so.words).forEach(function(x){if(x.id===id){s=x;}});}\n    if(s){g.setAttribute('aria-label',(so?(kind==='core'?segLabel(s):fanLabel(s)):segLabel(s))+(nq?' Dimmed, outside your pick.':''));}\n  });\n  \/* one tab stop: the chosen word, else the open or chosen core, else the first core *\/\n  var live=liveEls(),pick=null,ae=document.activeElement;\n  live.forEach(function(g){g.setAttribute('tabindex','-1');if(g===ae){pick=g;}});\n  if(!pick){\n    if(state.feeling){var fe=segEl(state.feeling);if(fe){if(!fe.classList.contains('off')){pick=fe;}}}\n    if(!pick){if(state.focus){pick=phoneFan()?segEl(state.focus):segEl(state.focus);}}\n    if(!pick){if(state.core){pick=segEl(state.core);}}\n    if(!pick){pick=segEl(WHEEL[0].core);}\n  }\n  if(pick){pick.setAttribute('tabindex','0');}\n  updateOutlines();\n  waveApply();\n  renderUnder();\n}\nfunction fanLabel(s){\n  if(s.kind==='group'){\n    var ws=s.g.words;\n    if(ws.length===1){return s.g.name+', a group of one '+coreName(s.core)+' word: '+lower(byId[ws[0]].name)+'.';}\n    return s.g.name+', a group of '+ws.length+' '+coreName(s.core)+' words: '+joinNames(ws)+'.';\n  }\n  return lower(byId[s.id].name)+', a finer word for '+coreName(s.core)+', in the group '+GROUPBY[s.group].name;\n}\n\/* the outlines on the phone fan: the chosen word, and the chosen group with its words *\/\nfunction updateFanOutlines(){\n  if(!phoneFan()){return;}\n  var o=FANS[state.focus],g=GEO.phone,d='',fam='';\n  if(state.feeling){o.words.forEach(function(w){if(w.id===state.feeling){d=w.d;}});}\n  setRing('sel selh',d);\n  if(state.sub){o.groups.forEach(function(gr){if(gr.id===state.sub){fam=sector(g,g.gi,g.wo,gr.cur.a1,gr.cur.a2);}});}\n  setRing('fam',fam);\n  var fo=document.activeElement,fd='';\n  if(fo){if(fo.classList){if(fo.classList.contains('fm-wseg')){if(wheelEl.contains(fo)){var show=false;try{show=fo.matches(':focus-visible');}catch(e){show=true;}if(show){fd=dOf(fo);}}}}}\n  setRing('foc foch',fd);\n  if(waveHov){var h=AB[waveHov];setRing('hov',h?h.d:'');}\n}\nfunction updateOutlines(){if(wheelMode==='phone'){updateFanOutlines();}else{updateOutlinesWide();}}\n\n\/* ---- what sits under the wheel: the read button, the group's meaning, the small row of words for when you don't feel much; the Stuck line is plain markup ---- *\/\nfunction readTarget(){\n  if(state.feeling){return state.feeling;}\n  if(state.core){return state.core;}\n  return null;\n}\n\/* holdUnder is true only while a tap in the A to Z index opens a card. That tap sits below the wheel, so it must not change the height of anything above it\n   (the Read button appearing used to add height, which a browser without scroll anchoring turns into a jump under the reader's finger).\n   While it is true, a row that is hidden stays hidden, and a row that is showing stays; the next change made on the wheel puts everything right.\n   It also keeps a family that opens on the phone drawing (fanTo) from pulling focus up to the wheel's centre: focus stays on the chip or the select. *\/\nvar holdUnder=false;\nfunction renderUnder(){\n  var zoomed=!!state.focus,tgt=readTarget(),cardOpen=!$('card').hidden;\n  var rb=$('readCard');\n  if(!(holdUnder)||!rb.hidden){rb.hidden=!tgt;}\n  if(tgt){rb.textContent='Read about '+lower(byId[tgt].name)+' below';}\n  var gl=$('zoomGloss');\n  if(zoomed){if(state.sub){\n    gl.hidden=false;\n    gl.querySelector('.fm-zname').textContent=GROUPBY[state.sub].name;\n    gl.querySelector('.fm-zgloss').textContent=GROUPBY[state.sub].gloss;\n  }else{gl.hidden=true;}}else{gl.hidden=true;}\n  $('capRest').hidden=zoomed;\n  var cf=$('capFocus');cf.hidden=!zoomed;\n  if(zoomed){\n    var cn=capName(state.focus);\n    cf.textContent=wheelMode==='phone'\n      ?cn+' up close. The middle ring sorts its words into smaller groups. Tap a group to see what it means, or a word to read about it. Tap the middle to go back.'\n      :cn+' is open. The middle ring sorts its words into smaller groups. Tap a group to see what it means, or a word to read about it. Tap another core feeling to open it instead. To see the whole wheel, tap '+coreName(state.focus)+' again or the center.';\n  }\n  var low=state.special==='low',lr=$('lowRow');\n  if(!holdUnder){lr.hidden=!low;}\n  if(!lr.hidden){\n    Array.prototype.forEach.call($('lowChips').children,function(b){setPressed(b,state.feeling===b.getAttribute('data-id'));});\n  }\n  $('wordsEmpty').hidden=cardOpen;\n  syncAZ();\n}\nfunction buildLow(){\n  var box=$('lowChips');clear(box);\n  LOW.forEach(function(id){\n    var b=el('button','fm-chip',lower(byId[id].name));b.type='button';b.setAttribute('data-id',id);b.setAttribute('aria-pressed','false');\n    box.appendChild(b);\n  });\n  $('lowText').textContent=LOWTEXT;\n}\nbuildLow();\n$('lowChips').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-chip'):null;\n  if(b){openFeeling(b.getAttribute('data-id'),'words',true);}\n});\n\n\/* ---- choosing ---- *\/\n\/* a tap is ignored while the wheel is changing, and a second tap on the very same thing within 450ms is ignored too, so a quick double tap cannot count as \"tap again\" and scroll the page *\/\nfunction busy(id){\n  if(anim){return true;}\n  if(id){if(id===lastTap.id){if(nowMs()-lastTap.at<450){return true;}}}\n  return false;\n}\nfunction lockTaps(id){lastTap={id:id||'',at:nowMs()};}\nvar cardFocus=false;\nfunction scrollToCard(){\n  var card=$('card');cardFocus=true;\n  try{card.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'start'});}catch(e){card.scrollIntoView();}\n  var hd=$('cardTitle');\n  if(hd){try{hd.focus({preventScroll:true});}catch(e2){hd.focus();}}\n}\n\/* the read button, and tapping a chosen word again: show the card, scroll to it and move focus to its title. The only thing on the wheel that scrolls. *\/\nfunction readAbout(){\n  var tgt=readTarget();if(!tgt){return;}\n  if(state.feeling===tgt){if(!$('card').hidden){scrollToCard();return;}}\n  openFeeling(tgt,'wheel');\n}\nfunction chooseCore(id){\n  state.core=id;state.special=null;state.feeling=null;state.second=null;\n  $('card').hidden=true;\n  buildLowClear();\n  renderBodyMarks();\n  markWheel();\n}\nfunction buildLowClear(){$('lowRow').hidden=true;}\n\/* the way out when nothing fits: six words for when you don't feel much, with no core chosen *\/\nfunction chooseLow(scroll){\n  if(state.focus){goWhole(true,true);}\n  state.core=null;state.special='low';\n  state.feeling=null;state.second=null;state.sub=null;\n  $('card').hidden=true;\n  renderBodyMarks();\n  markWheel();\n  say('Showing '+LOW.length+\" words for when you don't feel much.\");\n  if(scroll){var row=$('lowRow');try{row.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'nearest'});}catch(e){row.scrollIntoView();}}\n}\nfunction markWheel(){\n  if(!wheelEl.querySelector('svg')){return;}\n  \/* a change that did not come from the wheel moves an opened family along at once, and never animates *\/\n  if(!fromWheel){\n    if(state.focus){if(state.core){if(state.core!==state.focus){if(!anim){state.focus=state.core;state.sub=null;showView(true);}}}}\n  }\n  paintState();\n}\n\/* put the view that state.focus names on the drawing, at once (no animation) *\/\nfunction showView(instant,done){\n  if(wheelMode==='phone'){fanTo(state.focus,instant,done);return;}\n  runLayout(state.focus?focusLayout(state.focus):restLayout(GW),instant,done);\n}\nfunction zoomTo(core,instant,done){\n  state.focus=core;\n  showView(instant?true:REDUCE,done);\n}\nfunction focusEl(g){\n  if(!g){return;}\n  try{g.focus({preventScroll:true});}catch(e){g.focus();}\n}\nfunction goWhole(silent,keepFocus){\n  if(!state.focus){return;}\n  var core=state.focus,ae=document.activeElement,ce0=wheelEl.querySelector('.fm-rest .fm-wseg[data-id=\"'+core+'\"]'),mine=false;\n  \/* the focus was on the figure (a segment, the centre, a button under the wheel): it goes to the core, which stays on the screen *\/\n  if(!keepFocus){if(ae){if($('step1').contains(ae)){if(ae!==ce0){mine=true;}}}}\n  state.focus=null;state.sub=null;\n  if(mine){if(wheelMode==='wide'){focusEl(ce0);}}\n  showView(REDUCE,function(){\n    if(mine){if(wheelMode==='phone'){focusEl(wheelEl.querySelector('.fm-rest .fm-wseg[data-id=\"'+core+'\"]'));}}\n    paintState();\n  });\n  paintState();\n  if(!silent){say('Back to the whole wheel.');}\n}\nfunction openFamily(id,from){\n  state.sub=null;\n  if(from){state.focus=id;}\n  zoomTo(id,false,function(){paintState();});\n  say(capName(id)+', open: '+WHEEL[wheelIx[id]].words.length+' words in '+familyGroups(id).length+' groups.');\n}\nfunction tapCore(id){\n  if(state.focus===id){goWhole();return;}\n  chooseCore(id);\n  openFamily(id,true);\n}\nfunction tapGroup(id){\n  var on=state.sub!==id;\n  state.sub=on?id:null;\n  paintState();\n  if(on){say(GROUPBY[id].name+'. '+GROUPBY[id].gloss);}\n  else{say('Showing all '+WHEEL[wheelIx[state.focus]].words.length+' '+coreName(state.focus)+' words.');}\n}\nfunction tapWord(id){\n  if(!state.focus){\n    var c=coreOf(id);\n    chooseCore(c);\n    openFamily(c,true);\n    openFeeling(id,'wheel',true);\n    return;\n  }\n  if(state.feeling===id){readAbout();return;}\n  openFeeling(id,'wheel',true);\n}\nfunction pickSeg(g){\n  var id=g.getAttribute('data-id'),kind=g.getAttribute('data-kind');\n  if(busy(kind+':'+id)){return;}\n  lockTaps(kind+':'+id);\n  fromWheel=true;cardFocus=false;\n  try{\n    if(kind==='hub'){goWhole();}\n    else if(kind==='core'){tapCore(id);}\n    else if(kind==='group'){tapGroup(id);}\n    else{tapWord(id);}\n  }finally{fromWheel=false;}\n  \/* the keyboard focus stays on the wheel: on the segment that was chosen, or on the core when the segment has gone *\/\n  if(cardFocus){return;}\n  if(document.activeElement===g){return;}\n  if(liveEls().indexOf(g)>=0){focusEl(g);}\n}\nwheelEl.addEventListener('click',function(ev){\n  var g=ev.target.closest?ev.target.closest('.fm-wseg'):null;\n  \/* with the hover wave on, the segments are drawn a little out of place, so a mouse click is placed by the wheel's live geometry, the same way the hover is *\/\n  if(waveOn){if(ev.detail>0){var ps=wavePick(ev.clientX,ev.clientY);g=ps?ps.el:null;}}\n  if(!g){return;}\n  if(g.classList.contains('off')){return;}\n  if(g.classList.contains('idle')){return;}\n  pickSeg(g);\n});\nwheelEl.addEventListener('mouseover',function(ev){\n  if(waveOn){return;}\n  if(anim){return;}\n  var g=ev.target.closest?ev.target.closest('.fm-wseg'):null;\n  if(g){if(g.classList.contains('off')||g.classList.contains('idle')){g=null;}}\n  setRing('hov',g?dOf(g):'');\n});\nwheelEl.addEventListener('mouseleave',function(){setRing('hov','');});\nwheelEl.addEventListener('focusin',function(ev){\n  var g=ev.target.closest?ev.target.closest('.fm-wseg'):null;\n  var show=false;\n  if(g){try{show=g.matches(':focus-visible');}catch(e){show=true;}}\n  setRing('foc foch',show?dOf(g):'');\n  if(waveOn){focId=show?g.getAttribute('data-id'):null;waveApply();}\n});\nwheelEl.addEventListener('focusout',function(){\n  setRing('foc foch','');if(waveOn){focId=null;waveApply();}\n  setTimeout(function(){if(!wheelEl.contains(document.activeElement)){paintState();}},0);\n});\nfunction focusSeg(g){\n  liveEls().forEach(function(x){x.setAttribute('tabindex','-1');});\n  g.setAttribute('tabindex','0');focusEl(g);\n}\nfunction ringEls(kind){\n  return liveEls().filter(function(x){return x.getAttribute('data-kind')===kind;}).sort(function(a,b){\n    var sa=AB[a.getAttribute('data-id')],sb=AB[b.getAttribute('data-id')];\n    return (sa?sa.ri:0)-(sb?sb.ri:0);\n  });\n}\n$('step1').addEventListener('keydown',function(ev){\n  if(ev.key==='Escape'){\n    if(state.focus){ev.preventDefault();if(!busy('esc')){lockTaps('esc');goWhole();}}\n    return;\n  }\n  var g=ev.target.closest?ev.target.closest('.fm-wseg'):null;\n  if(!g){return;}\n  var k=ev.key,kind=g.getAttribute('data-kind'),id=g.getAttribute('data-id');\n  if(k==='Enter'||k===' '||k==='Spacebar'){ev.preventDefault();pickSeg(g);return;}\n  if(busy()){if(k.indexOf('Arrow')===0||k==='Home'||k==='End'){ev.preventDefault();}}\n  var ring=ringEls(kind),ix=ring.indexOf(g),to=null,zoomed=!!state.focus,fan=phoneFan();\n  if(k==='ArrowRight'){to=ring[(ix+1)%ring.length];}\n  else if(k==='ArrowLeft'){to=ring[(ix+ring.length-1)%ring.length];}\n  else if(k==='Home'){to=ring[0];}\n  else if(k==='End'){to=ring[ring.length-1];}\n  else if(k==='ArrowDown'){\n    if(kind==='hub'){to=fan?ringEls('group')[0]:(state.focus?segEl(state.focus):null);}\n    else if(kind==='core'){\n      if(!zoomed){to=wheelEl.querySelector('.fm-wseg.word[data-core=\"'+id+'\"]:not(.off)');}\n      else if(id===state.focus){to=ringEls('group')[0];}\n    }\n    else if(kind==='group'){to=wheelEl.querySelector('.fm-wseg.word[data-group=\"'+id+'\"]:not(.off)');}\n  }\n  else if(k==='ArrowUp'){\n    if(kind==='word'){\n      to=zoomed?wheelEl.querySelector('.fm-wseg.group[data-id=\"'+g.getAttribute('data-group')+'\"]:not(.off)'):segEl(g.getAttribute('data-core'));\n    }\n    else if(kind==='group'){to=fan?layerEl().querySelector('.fm-wseg.hub'):segEl(state.focus);}\n    else if(kind==='core'){if(zoomed){if(!fan){to=HUB;}}}\n  }\n  else{return;}\n  ev.preventDefault();\n  if(to){focusSeg(to);}\n});\n\/* a phone and a larger screen get different drawings, so the wheel is drawn again when the screen crosses that line *\/\ntry{\n  var wheelMQ=window.matchMedia('(max-width: 719px)');\n  var wheelSwap=function(){if((isPhone()?'phone':'wide')!==wheelMode){buildWheel();paintState();}};\n  if(wheelMQ.addEventListener){wheelMQ.addEventListener('change',wheelSwap);}else if(wheelMQ.addListener){wheelMQ.addListener(wheelSwap);}\n}catch(e){}\n\n\/* ---- the phone: the family takes over the circle. Two layers, the whole wheel and the fan, are scaled and faded against each other (320ms). ---- *\/\nfunction fanTo(core,instant,done){\n  var rest=wheelEl.querySelector('.fm-rest'),g=GEO.phone,c=g.c,ease2='cubic-bezier(.22,.61,.36,1)';\n  var cur=wheelEl.querySelector('.fm-fan:not(.off)');\n  var next=core?wheelEl.querySelector('.fm-fan[data-core=\"'+core+'\"]'):null;\n  if(cur===next){cur=null;}\n  var fin=function(){\n    if(cur){cur.classList.add('off');}\n    if(next){rest.classList.add('off');}else{rest.classList.remove('off');}\n    [rest,cur,next].forEach(function(n){if(n){if(n.getAnimations){n.getAnimations().forEach(function(a){a.cancel();});}}});\n    anim=null;svgZoomClass();\n    settled();\n    if(next){if(!holdUnder){focusEl(next.querySelector('.fm-wseg.hub'));}}\n    if(done){done();}\n  };\n  clearAllRings();\n  if(next){next.classList.remove('off');fitFan(core);}\n  if(instant||!rest.animate){fin();return;}\n  waveSetHover(null);\n  var src=core||(cur?cur.getAttribute('data-core'):null),F=FAM[src],m=norm360((F.a1+F.a2)\/2),P=pol(g,(g.ci+g.co)\/2,m),S=2.5;\n  var tr1='translate('+num((1-S)*(P[0]-c))+'px,'+num((1-S)*(P[1]-c))+'px) scale('+S+')',tr2='translate('+num(P[0]-c)+'px,'+num(P[1]-c)+'px) scale(.25)';\n  [rest,cur,next].forEach(function(n){if(n){n.style.transformOrigin=c+'px '+c+'px';}});\n  var opt={duration:320,easing:ease2,fill:'forwards'},last;\n  anim={phone:true};svgZoomClass();\n  if(core){\n    rest.animate([{transform:'none',opacity:1},{transform:tr1,opacity:0}],opt);\n    last=next.animate([{transform:tr2,opacity:0},{transform:'none',opacity:1}],opt);\n  }else{\n    rest.classList.remove('off');\n    rest.animate([{transform:tr1,opacity:0},{transform:'none',opacity:1}],opt);\n    last=cur.animate([{transform:'none',opacity:1},{transform:tr2,opacity:0}],opt);\n  }\n  last.onfinish=fin;\n}\n\n\/* ---- the hover wave ----\n   On a device with a mouse, the segment under the pointer lifts outward along its own mid angle, and its neighbours in the same ring lift less and less\n   (a smooth falloff that wraps round the ring), so the swell travels with the pointer. On the whole wheel a core also lifts its own outer words, and an outer word its core;\n   in an opened family a group lifts its words, and a word its group. No segment wider than 90 degrees lifts (the open core is a slab), and the hub never does.\n   Only transform is animated (a CSS transition on the segment group, so its label goes with it). Which segment is under the pointer is worked out from the live\n   geometry, not from what is lifted, so a lifted segment cannot hand the hover to its neighbour and make it flicker. The wave is off while the view changes, and\n   comes back with the geometry it finished on. The outlines (hover, focus, chosen) are separate paths drawn on top, and they are given the same lift and the same timing as the\n   segment they belong to. A keyboard focus lifts its own segment only. None of it is bound for touch, for a pointer that is not a mouse, or for reduced motion. *\/\n\/* the lift is in units of the 600 drawing; the outer words get less, so their outer edge never passes the drawing's edge *\/\nvar WV={core:7,group:5,word:4.4,fall:[1,0.55,0.25,0.08],toCore:0.35,toRing:0.45};\nvar waveOn=false,waveHov=null,focId=null,waveCache=null;\nfunction waveBase(s){return WV[s.kind]||0;}\nfunction waveEl(id){\n  var s=AB[id];\n  return s?s.el:null;\n}\n\/* the lift a segment may have: none when it is wider than 90 degrees, and never so much that its outer edge passes the drawing *\/\nfunction liftOf(s,v){\n  if(!s){return 0;}\n  if(s.kind==='hub'){return 0;}\n  if(s.cur.a2-s.cur.a1>90){return 0;}\n  var lim=LIFT_EDGE-s.cur.r2*600\/GEO[wheelMode].vb;\n  return Math.max(0,Math.min(v,lim));\n}\nfunction waveMags(hid){\n  var h=AB[hid],out={};\n  if(!h){return out;}\n  if(h.kind==='hub'){return out;}\n  var ring=WR[h.kind],n=ring.length,base=waveBase(h),zoomed=!!state.focus;\n  if(liftOf(h,base)<=0){return out;}\n  var dmax=Math.min(WV.fall.length-1,Math.floor((n-1)\/2));\n  for(var d=0;d<=dmax;d++){\n    [(h.ri+d)%n,(h.ri+n-d)%n].forEach(function(j){\n      var id=ring[j].id,v=base*WV.fall[d];out[id]=Math.max(out[id]||0,v);\n    });\n  }\n  if(zoomed){\n    if(h.kind==='group'){WR.word.forEach(function(w){if(w.group===h.id){out[w.id]=Math.max(out[w.id]||0,WV.group*WV.toRing);}});}\n    else if(h.kind==='word'){if(AB[h.group]){out[h.group]=Math.max(out[h.group]||0,WV.group*WV.toCore);}}\n  }else{\n    if(h.kind==='core'){WR.word.forEach(function(w){if(w.core===h.id){out[w.id]=Math.max(out[w.id]||0,WV.core*WV.toRing);}});}\n    else{out[h.core]=Math.max(out[h.core]||0,WV.core*WV.toCore);}\n  }\n  Object.keys(out).forEach(function(id){out[id]=liftOf(AB[id],out[id]);});\n  return out;\n}\n\/* the segment under a point, by the live geometry of the drawing; null between segments or off the wheel *\/\nfunction wavePick(cx,cy){\n  var svg=wheelEl.querySelector('svg');if(!svg){return null;}\n  var r=svg.getBoundingClientRect(),g=GEO[wheelMode];\n  if(!(r.width>0)){return null;}\n  var k=g.vb\/r.width,x=(cx-r.left)*k-g.c,y=(cy-r.top)*k-g.c,rad=Math.sqrt(x*x+y*y);\n  var a=Math.atan2(x,-y)*180\/Math.PI;if(a<0){a+=360;}\n  var best=null,bd=1e9;\n  Object.keys(AB).forEach(function(id){\n    var s=AB[id],c=s.cur;\n    if(!c){return;}\n    if(s.kind==='core'){if(phoneFan()){return;}}\n    if(norm360(a-c.a1)>=(c.a2-c.a1)){return;}\n    var dr=rad<c.r1?c.r1-rad:(rad>c.r2?rad-c.r2:0);\n    if(dr<=1.5){if(dr<bd){bd=dr;best=s;}}\n  });\n  if(best){if(best.kind==='core'){if(rad<g.ci-1){return null;}}}\n  return best;\n}\n\/* the current offset of a segment, as a transform, so an outline can start from where its segment is now *\/\nfunction waveCur(el){\n  var t=getComputedStyle(el).transform,m=t?t.match(\/matrix\\(([^)]+)\\)\/):null;\n  if(!m){return 'none';}\n  var p=m[1].split(',');\n  return 'translate('+parseFloat(p[4])+'px,'+parseFloat(p[5])+'px)';\n}\nfunction waveApply(){\n  if(!waveOn){return;}\n  var sc=GEO[wheelMode].vb\/600,mags={};\n  if(anim){waveHov=null;focId=null;}\n  if(waveHov){mags=waveMags(waveHov);}\n  else{if(focId){var fs0=AB[focId];if(fs0){var v0=liftOf(fs0,waveBase(fs0));if(v0>0){mags[focId]=v0;}}}}\n  var vec=function(id){\n    var m=mags[id],s=AB[id];\n    if(!m){return '';}\n    if(!s){return '';}\n    return 'translate('+num(s.ux*m*sc)+'px,'+num(s.uy*m*sc)+'px)';\n  };\n  \/* the outline round the chosen family cannot follow segments that each lift a different distance, so it eases away while any of them is lifted *\/\n  var fam=ringPath('fam'),mx=0;\n  if(fam){\n    Object.keys(mags).forEach(function(id){var s=AB[id];if(s){if(s.core===state.focus){mx=Math.max(mx,mags[id]);}}});\n    fam.style.opacity=mx>0.6?'0':'';\n  }\n  var own={hov:waveHov,foc:focId,foch:focId,sel:state.feeling,selh:state.feeling},start={};\n  Object.keys(own).forEach(function(k){\n    var p=ringPath(k),id=own[k];\n    if(p){if(p.__own!==id){start[k]=id?waveCur(waveEl(id)||p):'none';}}\n  });\n  var els=[];\n  Object.keys(AB).forEach(function(id){var s=AB[id];if(s.el){els.push(s);}});\n  els.forEach(function(s){\n    var v=vec(s.id);\n    if(s.el.__v!==v){s.el.__v=v;s.el.style.transform=v;}\n  });\n  Object.keys(own).forEach(function(k){\n    var p=ringPath(k),id=own[k];\n    if(!p){return;}\n    if(k in start){\n      p.style.transition='none';p.style.transform=start[k]==='none'?'':start[k];\n      void p.getBoundingClientRect();\n      p.style.transition='';\n      p.__own=id;\n    }\n    p.style.transform=vec(id);\n  });\n}\nfunction waveSetHover(id){\n  waveHov=id;\n  var g=id?AB[id]:null;\n  setRing('hov',g?g.d:'');\n  waveApply();\n}\ntry{\n  if(!REDUCE){if(window.matchMedia('(hover: hover) and (pointer: fine)').matches){waveOn=true;}}\n}catch(e){}\nif(waveOn){\n  wheelEl.addEventListener('pointermove',function(ev){\n    if(ev.pointerType==='touch'){return;}\n    if(ev.pointerType==='pen'){return;}\n    lastPtr=[ev.clientX,ev.clientY];\n    if(anim){return;}\n    var s=wavePick(ev.clientX,ev.clientY),id=s?s.id:null;\n    if(id!==waveHov){waveSetHover(id);}\n  });\n  wheelEl.addEventListener('pointerleave',function(ev){\n    if(ev.pointerType==='touch'){return;}\n    if(ev.pointerType==='pen'){return;}\n    lastPtr=null;\n    waveSetHover(null);\n  });\n}\nbuildWheel();\npaintState();\n\n\/* the Stuck line under the wheel: two buttons; the third control is a link to the list *\/\n$('lnkLow').addEventListener('click',function(){chooseLow(false);});\n$('lnkBody').addEventListener('click',function(){\n  var s3=$('part-4');\n  try{s3.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'start'});}catch(e){s3.scrollIntoView();}\n  try{s3.focus({preventScroll:true});}catch(e2){s3.focus();}\n});\n$('readCard').addEventListener('click',function(){readAbout();});\n\n\/* the small wheel on a feeling's card: the wheel in pale colour, with this word in full colour.\n   A word that is not drawn on the outer ring is shown by its family's stretch of the ring, in the word's own colour. *\/\nfunction miniWheel(f){\n  var g={c:32,hub:5,ci:7,co:20,oi:21.5,oo:31},RL=restLayout(GW);\n  var core=coreOf(f.id),s=SEGBY[f.id],isCore=f.id===core,onRing=s?s.ring:false;\n  var out='<svg class=\"fm-mini\" viewBox=\"0 0 64 64\" role=\"img\" aria-label=\"Where this word sits on the wheel: '\n    +(isCore?'a core feeling.':'a finer word for '+coreName(core)+'.')+'\">';\n  var on='';\n  SEGS.forEach(function(x){\n    if(x.kind==='group'){return;}\n    if(!x.ring){return;}\n    var L=RL[x.id],r1=x.kind==='core'?g.ci:g.oi,r2=x.kind==='core'?g.co:g.oo,d=sector(g,r1,r2,L.a1,L.a2);\n    var hit=false;if(onRing){hit=(x.id===f.id);}\n    if(hit){on='<path d=\"'+d+'\" fill=\"none\" stroke=\"#fff\" stroke-width=\"3\" stroke-linejoin=\"round\"\/><path d=\"'+d+'\" fill=\"'+rgbHex(x.rgb)+'\" stroke=\"#2a2622\" stroke-width=\"1.1\" stroke-linejoin=\"round\"\/>';}\n    else{out+='<path d=\"'+d+'\" fill=\"'+rgbHex(mix(x.rgb,WASH,x.core===core?0.35:0.72))+'\" stroke=\"#fff\" stroke-width=\".8\" stroke-linejoin=\"round\"\/>';}\n  });\n  if(!onRing){\n    var c=RL[core],d2=sector(g,g.oi,g.oo,c.a1,c.a2),rgb=wordRGB(f.id);\n    on='<path d=\"'+d2+'\" fill=\"none\" stroke=\"#fff\" stroke-width=\"3\" stroke-linejoin=\"round\"\/><path d=\"'+d2+'\" fill=\"'+rgbHex(rgb)+'\" stroke=\"#2a2622\" stroke-width=\"1.1\" stroke-linejoin=\"round\"\/>';\n  }\n  return out+on+'<\/svg>';\n}\n\n\/* test hooks (window.__fm): put the wheel in a known view at once *\/\nfunction resetView(){\n  stopAnim();\n  state.focus=null;state.sub=null;state.core=null;state.special=null;state.feeling=null;state.second=null;\n  $('card').hidden=true;\n  showView(true);\n  markWheel();\n}\nfunction focusNow(id){\n  stopAnim();\n  chooseCore(id);\n  state.focus=id;state.sub=null;\n  showView(true);\n  markWheel();\n}\nfunction liveInfo(){\n  var out=[];\n  Object.keys(AB).forEach(function(id){var x=AB[id];if(x.kind==='hub'){return;}out.push({id:x.id,kind:x.kind,core:x.core,group:x.group||null,a1:x.cur.a1,a2:x.cur.a2,r1:x.cur.r1,r2:x.cur.r2,ri:x.ri});});\n  return out;\n}\n\/* ---------- the mood pad (push18): a way into the wheel from how it feels ----------\n   push14 logic: every feeling carries p and e, and the quarter you choose dims what does not fit; nothing is hidden. *\/\nvar MOODQ=[\n  {id:'um',lab:'unpleasant, more energy',say:'tense or wound up'},\n  {id:'pm',lab:'pleasant, more energy',say:'bright or buzzing'},\n  {id:'ul',lab:'unpleasant, less energy',say:'low or heavy'},\n  {id:'pl',lab:'pleasant, less energy',say:'calm or warm'}];\nvar MOODBY={},MOODN={},MOODFAM={};\nfunction moodOf(f){return (f.p>50?'p':'u')+(f.e>50?'m':'l');}\n(function(){\n  MOODQ.forEach(function(q){MOODBY[q.id]=q;MOODN[q.id]=0;});\n  WHEEL.forEach(function(w){\n    var fam={};\n    [w.core].concat(w.words).forEach(function(id){var q=moodOf(byId[id]);MOODN[q]++;fam[q]=true;});\n    MOODFAM[w.core]=fam;\n  });\n})();\nstate.mood=null;\n\/* true when a segment is outside the chosen quarter (the hub is never asked) *\/\nfunction moodOut(id,kind){\n  var q=state.mood;\n  if(!q){return false;}\n  if(kind==='core'){return !MOODFAM[id][q];}\n  if(kind==='group'){\n    var hit=false;\n    GROUPBY[id].words.forEach(function(w){if(moodOf(byId[w])===q){hit=true;}});\n    return !hit;\n  }\n  return moodOf(byId[id])!==q;\n}\nfunction moodCount(q){return MOODN[q]+' feelings fit';}\nfunction moodLabel(q){var m=MOODBY[q];return m.say+', '+m.lab+'. '+moodCount(q)+'.';}\nfunction setMood(q){\n  state.mood=q;\n  renderPad();\n  paintState();\n  if(q){var s=MOODBY[q].say;say(s.charAt(0).toUpperCase()+s.slice(1)+': '+MOODN[q]+' of '+F.length+' feelings fit. The rest are dimmed, not gone.');}\n  else{say('Showing every feeling again.');}\n}\n\/* a tap on the chosen control clears it; a tap on another one moves the pick *\/\nfunction padPick(q){setMood(state.mood===q?null:q);}\n\/* clear, then give focus back to the control that was chosen, without scrolling *\/\nfunction padClearPick(host){\n  var prev=state.mood;\n  setMood(null);\n  var pb=prev?host.querySelector('[data-q=\"'+prev+'\"]'):null;\n  if(pb){try{pb.focus({preventScroll:true});}catch(e){}}\n}\n\/* the status row is shared by all three looks: the count and a clear button, or the idle hint *\/\nfunction padStatus(hint){\n  var st=el('p','fm-padst');st.id='padStatus';\n  var t=el('span','t');t.id='padStatusT';\n  var dot=el('span','sep','\\u00b7');dot.setAttribute('aria-hidden','true');\n  var c=el('button','fm-padclr','clear');c.type='button';c.id='padClear';\n  st.appendChild(t);st.appendChild(dot);st.appendChild(c);\n  st.setAttribute('data-hint',hint);\n  return st;\n}\nfunction padStatusPaint(withName){\n  var q=state.mood,t=$('padStatusT'),st=$('padStatus');\n  st.classList.toggle('on',q?true:false);\n  t.textContent=q?((withName?MOODBY[q].say+' \\u00b7 ':'')+moodCount(q)):st.getAttribute('data-hint');\n}\n\/* The look: the four quarters as a 2x2 of chips, each with a small 2x2 glyph that fills the quarter it stands for. Same at every width. The chosen chip fills teal.\n   Mock A: one small muted label above the chips (\"not sure? start with your energy\"); once a chip is chosen the same line says how many feelings fit, with a clear button. *\/\nvar PADCOL={um:'#b45aa8',pm:'#f2a93b',ul:'#3f9bf5',pl:'#1fbfc4'};\nfunction padGlyph(id){\n  var NS='http:\/\/www.w3.org\/2000\/svg',s=document.createElementNS(NS,'svg');\n  s.setAttribute('viewBox','0 0 22 22');s.setAttribute('width','24');s.setAttribute('height','24');s.setAttribute('aria-hidden','true');s.setAttribute('focusable','false');s.setAttribute('class','g');\n  var order=['um','pm','ul','pl'];\n  [[1.5,1.5],[12.5,1.5],[1.5,12.5],[12.5,12.5]].forEach(function(p,i){\n    var r=document.createElementNS(NS,'rect');\n    r.setAttribute('x',p[0]);r.setAttribute('y',p[1]);r.setAttribute('width','8');r.setAttribute('height','8');r.setAttribute('rx','2');\n    r.setAttribute('class',order[i]===id?'on':'off');\n    if(order[i]===id){r.setAttribute('style','--c:'+PADCOL[id]);}\n    s.appendChild(r);\n  });\n  return s;\n}\nfunction renderPad(){\n  var host=$('moodPad');if(!host){return;}\n  var q=state.mood;\n  host.classList.toggle('on',q?true:false);\n  Array.prototype.forEach.call(host.querySelectorAll('.fm-cell'),function(b){setPressed(b,b.getAttribute('data-q')===q);});\n  padStatusPaint(false);\n}\nfunction buildPad(){\n  var host=$('moodPad');if(!host){return;}\n  clear(host);\n  var grid=el('div','fm-mgrid');grid.setAttribute('role','group');grid.setAttribute('aria-label','Your energy right now');\n  MOODQ.forEach(function(m){\n    var b=el('button','fm-cell');b.type='button';b.setAttribute('data-q',m.id);b.setAttribute('aria-pressed','false');\n    b.setAttribute('aria-label',moodLabel(m.id));\n    b.appendChild(padGlyph(m.id));\n    b.appendChild(el('span','w',m.say));\n    grid.appendChild(b);\n  });\n  host.appendChild(padStatus('not sure? start with your energy'));host.appendChild(grid);\n  host.addEventListener('click',function(ev){\n    var t=ev.target.closest?ev.target:null;if(!t){return;}\n    var b=t.closest('.fm-cell');\n    if(b){padPick(b.getAttribute('data-q'));return;}\n    if(t.closest('#padClear')){padClearPick(host);}\n  });\n  renderPad();\n}\nbuildPad();\n\/*SLOT part1 end*\/\n\/*SLOT block 3 begin*\/\n\/* ---------- the body drawing ---------- *\/\n\/* One standing figure, seen from the front, drawn as a single outline: a calm, gender-neutral body of seven and a half heads (the head is\n   80.4 of 606 units), shoulders two heads wide, a clear neck, a gentle waist, hips a little narrower than the shoulders, limbs that taper\n   to slim wrists and ankles, small closed hands that taper a little to the fingertips with a notch where the thumb ends, front-view feet that widen to the\n   toes, with ankle bones and the toes turned very slightly out. The head is an egg with a soft jaw and a hint of ears; the neck sweeps into the shoulders\n   along a trapezius line and a round deltoid; the side runs in a quiet S (ribcage, waist, hip); the calf curves and the knee shows. The arms hang a little away from the body (a soft A, 10\n   degrees at the shoulder), so the arms, the hands and the body are told apart and the gaps between them stay empty.\n   The outline is built, not drawn by hand: widths at landmarks along a center line (crown, jaw, neck, shoulder, chest, waist, hip, thigh, knee,\n   calf, ankle; upper arm, elbow, forearm, wrist, hand), joined by a smooth spline (v3-plan\/body-redesign\/v3\/geom.js) and written out here as\n   cubic segments. Only the right half is written, from the crown clockwise down to the crotch; the left half is its mirror, so it is symmetric.\n   The body areas are not separate shapes. Each one is a region inside this outline, cut to it with a clip path, and the regions are told apart by faint\n   hairlines, as on the average body maps in the research. The areas a feeling is noticed in are soft gold glows,\n   one to three for each area, placed on the part of the body they belong to. Every svg gets its own ids, because the card draws a small copy of the same figure. *\/\nvar SIL_START=[130,8];\nvar SIL_SEGS=[\n  [134,8,138.4,8.4,142.1,9.4],\n  [145.4,10.5,148.8,11.9,151.3,14],\n  [153.7,16,155.6,18.8,156.9,21.7],\n  [158.3,24.6,159,28.1,159.4,31.3],\n  [159.7,34.5,158.8,38.3,159.1,41],\n  [159.4,42.9,160.2,44.2,160.6,45.8],\n  [160.9,47.4,161.3,49,161,50.6],\n  [160.7,52.5,159.4,54.5,158.4,56.3],\n  [157.4,57.9,155.8,59,154.9,60.7],\n  [154,62.5,153.8,64.7,152.9,66.7],\n  [152,68.9,150.6,71.2,149.3,73.1],\n  [148.1,74.9,146.4,76.1,145.3,78],\n  [144.1,80.1,143,82.7,142.5,85.2],\n  [141.9,87.8,141.8,90.8,142.2,93.3],\n  [142.6,95.5,143.2,97.8,144.5,99.7],\n  [145.9,101.8,148.4,103.4,150.9,104.9],\n  [153.7,106.6,157.1,107.8,160.6,108.9],\n  [164.3,110.2,168.6,111.1,172.6,112.1],\n  [176.6,113.2,180.8,114.3,184.7,115.4],\n  [188.3,116.4,191.9,117.3,195.1,118.6],\n  [198.1,119.7,201,120.8,203.2,122.6],\n  [205.2,124.2,206.7,126.4,208,128.6],\n  [209.4,131,210,133.6,211,136.7],\n  [212.3,140.8,214.3,145.8,215.1,151.3],\n  [216,158.4,214.2,169.1,214.8,175.9],\n  [215.3,180.8,216.6,183.9,217.2,188.5],\n  [217.9,194.1,217.9,200.3,218.5,207.1],\n  [219.2,215.5,219.5,226.4,221.4,235.2],\n  [223,243.1,226.4,249.6,228.4,257.4],\n  [230.7,266.1,232.2,275.8,233.8,285.1],\n  [235.5,294.6,237.2,306.8,238.4,313.8],\n  [239,317.9,239,320.3,239.9,323.4],\n  [240.8,326.5,242.4,329,243.6,332.4],\n  [245.1,336.5,246.8,341.6,247.9,346.2],\n  [249,350.7,249.8,355.5,250.3,359.7],\n  [250.7,363.5,251,367.2,250.8,370.4],\n  [250.7,372.9,250.5,375.4,249.8,377.3],\n  [249.2,378.9,248.3,380.5,247.2,381.2],\n  [246.3,381.8,244.9,382,243.8,381.7],\n  [242.5,381.3,241.2,380.2,240,378.9],\n  [238.4,377.2,236.9,374.3,235.7,371.7],\n  [234.4,368.9,232.8,365.2,232.4,362.5],\n  [232.1,360.7,233.4,358.7,232.7,357.5],\n  [232,356.3,229.7,356.4,228.5,355.2],\n  [227.2,353.8,226.2,351.5,225.4,349.4],\n  [224.5,347,223.8,344.1,223.7,341.5],\n  [223.6,338.9,224.4,336.3,224.6,333.8],\n  [224.8,331.5,225.4,330,225.1,327.1],\n  [224.5,321.6,220.8,312.3,218.2,303.9],\n  [215.1,293.9,210.7,281.9,207.8,270.9],\n  [204.9,260.2,203.3,249.4,200.9,238.8],\n  [198.6,228.2,195.6,217.1,193.4,207.4],\n  [191.5,199,189.9,191.2,188.5,183.8],\n  [187.2,177.3,185.8,165.5,185.4,165.5],\n  [185,165.6,186.3,177.2,186,183.2],\n  [185.6,189.6,184.2,196.1,183.1,202.6],\n  [181.9,209.5,180,217.2,179.2,223.5],\n  [178.6,228.8,178,232.9,178.3,238],\n  [178.6,244,180,250.6,181.5,257.3],\n  [183.1,264.9,186.4,273.1,187.7,281.4],\n  [189.2,290.2,189.1,300.5,189.5,308.8],\n  [189.9,315.8,190.3,320.6,190.2,328.1],\n  [190,338.6,188.3,353.1,187.6,365.9],\n  [186.8,379.1,186.5,393.9,185.7,406.1],\n  [185,416.3,183.9,426.4,183.1,434.3],\n  [182.5,439.9,181.4,444.1,181.4,448.7],\n  [181.4,452.9,182.7,456.5,182.8,460.8],\n  [183,465.6,181.8,470.6,182.1,476.1],\n  [182.4,482.5,184.9,489.8,185.1,497],\n  [185.3,504.7,184,512.8,183.1,521.1],\n  [182.1,530,180.4,540.2,179.2,548.5],\n  [178.3,555.2,176.8,562,176.6,567],\n  [176.4,570.2,177,572.5,176.9,575],\n  [176.8,577.3,176,579.2,176.2,581.4],\n  [176.5,583.8,177.6,586.2,178.6,588.7],\n  [179.6,591.3,181,594.1,182,596.7],\n  [183.1,599.2,184.2,601.8,184.9,603.9],\n  [185.5,605.7,186.5,607.4,186.3,608.8],\n  [186.2,609.9,185.6,610.9,184.7,611.6],\n  [183.7,612.4,182,612.5,180.5,612.8],\n  [178.8,613.2,176.8,613.4,175,613.6],\n  [173.1,613.8,171.2,614.1,169.4,614],\n  [167.7,613.9,165.9,613.9,164.5,613.2],\n  [163.2,612.6,162,611.6,161.2,610.4],\n  [160.3,608.9,160.1,606.8,159.9,604.8],\n  [159.7,602.3,160.1,599.5,160.2,596.7],\n  [160.2,593.6,160.2,590.3,160.1,587.1],\n  [160.1,583.8,160.3,580.3,159.9,577.4],\n  [159.5,575,158.4,573.3,158.2,571],\n  [158,568.5,159.1,566.1,159.1,562.9],\n  [159,558.5,157.9,552.7,157,546.8],\n  [155.9,539.6,154,530.6,152.9,522.7],\n  [151.9,515.1,150.8,507.4,150.7,500.2],\n  [150.6,493.5,151.7,487.2,151.9,480.9],\n  [152.1,474.9,151.8,468.6,151.8,463.2],\n  [151.9,458.6,152.3,454.9,152,450.3],\n  [151.8,445.3,151.1,440.5,150.3,434.3],\n  [149,425.4,146.9,412.8,145,402.1],\n  [143.1,391.3,141.2,379.6,139,369.9],\n  [137.1,361.7,134.5,354.6,133,347.4],\n  [131.6,340.7,131,328.1,130,328.1]\n];\n\/* the outline's bounds, and the view of the small still figure (cards, and beside the phone list) *\/\nvar SIL_BOX=[9.2,8,250.8,614];\nvar MINI_VB='6 4 248 612';\nfunction bm(x){return num(260-x);}\nfunction silD(){\n  var d='M'+SIL_START.join(' '),ends=[SIL_START],k;\n  SIL_SEGS.forEach(function(s){d+='C'+s.join(' ');ends.push([s[4],s[5]]);});\n  for(k=SIL_SEGS.length-1;k>=0;k--){\n    var s2=SIL_SEGS[k],st=ends[k];\n    d+='C'+bm(s2[2])+' '+s2[3]+' '+bm(s2[0])+' '+s2[1]+' '+bm(st[0])+' '+st[1];\n  }\n  return d+'Z';\n}\nvar SIL_D=silD();\n\/* a path written for the right-hand side, mirrored for the left (absolute commands only, every coordinate in an x y pair) *\/\nfunction mirrorD(d){return d.replace(\/(-?[0-9.]+) (-?[0-9.]+)\/g,function(m,x,y){return bm(+x)+' '+y;});}\nfunction ellD(cx,cy,rx,ry){\n  var k=0.5523,ox=rx*k,oy=ry*k;\n  return 'M'+(cx+rx)+' '+cy+'C'+(cx+rx)+' '+(cy+oy)+' '+(cx+ox)+' '+(cy+ry)+' '+cx+' '+(cy+ry)\n    +'C'+(cx-ox)+' '+(cy+ry)+' '+(cx-rx)+' '+(cy+oy)+' '+(cx-rx)+' '+cy\n    +'C'+(cx-rx)+' '+(cy-oy)+' '+(cx-ox)+' '+(cy-ry)+' '+cx+' '+(cy-ry)\n    +'C'+(cx+ox)+' '+(cy-ry)+' '+(cx+rx)+' '+(cy-oy)+' '+(cx+rx)+' '+cy+'Z';\n}\n\/* the body areas, inside the outline. Each is a list of paths. Arms run from the shoulder seam to the fingertips and are bounded on the inside by\n   the middle of the empty space beside the body; legs run from the hip line to the feet. *\/\nvar ARM_R='M170.2 92.4L178.3 117.4L187.4 151.1L186.4 166.5L185.7 175.5L186.6 189.5L186.8 203.5L186.7 217.5L187.1 231.5L189 245.5L192 259.5L195.6 273.5L198.5 287.5L200.7 301.5L202.9 315.5L204.7 329.5L206 343.5L207.2 357.5L208.6 371.5L208.6 389.5L208.6 411.5L262 411.5L262 82.4Z';\nvar LEG_R='M198.8 289.5C166.2 294.3 146.1 318.4 130 318.4L130 640L262 640L262 389.5L208.6 389.5L208.6 371.5L207.2 357.5L206 343.5L204.7 329.5L202.9 315.5L200.7 301.5Z';\nvar REGD={\n  head:['M130 8C134 8 138.4 8.4 142.1 9.4C145.4 10.5 148.8 11.9 151.3 14C153.7 16 155.6 18.8 156.9 21.7C158.3 24.6 159 28.1 159.4 31.3C159.7 34.5 158.8 38.3 159.1 41C159.4 42.9 160.2 44.2 160.6 45.8C160.9 47.4 161.3 49 161 50.6C160.7 52.5 159.4 54.5 158.4 56.3C157.4 57.9 155.8 59 154.9 60.7C154 62.5 153.8 64.7 152.9 66.7C152 68.9 150.6 71.2 149.3 73.1C148.1 74.9 146.7 76.2 145.3 78C143.5 80.2 142.1 83.9 139.7 85.6C137.1 87.4 133.2 88.4 130 88.4C126.8 88.4 122.9 87.4 120.3 85.6C117.9 83.9 116.5 80.2 114.7 78C113.3 76.2 111.9 74.9 110.7 73.1C109.4 71.2 108 68.9 107.1 66.7C106.2 64.7 106 62.5 105.1 60.7C104.2 59 102.6 57.9 101.6 56.3C100.6 54.5 99.3 52.5 99 50.6C98.7 49 99.1 47.4 99.4 45.8C99.8 44.2 100.6 42.9 100.9 41C101.2 38.3 100.3 34.5 100.6 31.3C101 28.1 101.7 24.6 103.1 21.7C104.4 18.8 106.3 16 108.7 14C111.2 11.9 114.6 10.5 117.9 9.4C121.6 8.4 126 8 130 8Z'],\n  face:['M148.9 64.3C148.9 76.3 140.4 86 130 86C119.6 86 111.1 76.3 111.1 64.3C111.1 52.3 119.6 42.6 130 42.6C140.4 42.6 148.9 52.3 148.9 64.3Z'],\n  throat:['M130 77.2C135.4 77.2 142.7 75.5 146.1 78.8C150.4 82.9 149.3 96.1 149.3 104.5C149.3 112.7 149.9 123.2 146.1 128.6C142.8 133.3 135.4 136.7 130 136.7C124.6 136.7 117.2 133.3 113.9 128.6C110.1 123.2 110.7 112.7 110.7 104.5C110.7 96.1 109.6 82.9 113.9 78.8C117.3 75.5 124.6 77.2 130 77.2Z'],\n  chest:['M130 96.1L130 96.1L172 98.1L178.3 117.4L187.4 151.1L186.4 166.5L185.7 175.5L186.6 189.5L186.8 203.5L186.7 217.5L186.7 218.7L130 214.7L130 214.7L73.3 218.7L73.3 217.5L73.2 203.5L73.4 189.5L74.3 175.5L73.6 166.5L72.6 151.1L81.7 117.4L88 98.1L130 96.1Z'],\n  stomach:['M130 214.7L186.7 218.7L187.1 231.5L189 245.5L192 259.5L195.6 273.5L198.5 287.5L198.8 289.5C166.2 294.3 146.1 318.4 130 318.4C113.9 318.4 93.8 294.3 61.2 289.5L61.5 287.5L64.4 273.5L68 259.5L71 245.5L72.9 231.5L73.3 218.7L130 214.7Z'],\n  arms:[ARM_R,mirrorD(ARM_R)],\n  legs:[LEG_R,mirrorD(LEG_R)]\n};\n\/* The face is drawn from the eyes to the chin, so the forehead and the crown belong to the head, as the head's hint says.\n   The tap areas follow the areas, except: the face and the throat are tapped a little wider than they are drawn, and the head's tap area\n   also takes in a strip above the crown (HEADCAP, outside the outline), so that each is at least 44 px each way at the smallest size of the figure. *\/\nvar HITD={face:['M156 65.3C156 79.1 144.4 90.3 130 90.3C115.6 90.3 104 79.1 104 65.3C104 51.5 115.6 40.3 130 40.3C144.4 40.3 156 51.5 156 65.3Z'],throat:['M103 84.3L157 84.3L161 120.3C159 140.3 148 146.3 130 146.3C112 146.3 101 140.3 99 120.3Z']};\nvar HEADCAP='M96 -14L164 -14L164 43.3L96 43.3Z';\n\/* each arm is only about 26 units wide, so its tap area also takes in a band of empty space on its outer side, from the top of the shoulder round the\n   fingertips (written for the right arm, mirrored); the gap between the arm and the body stays empty, so a tap there chooses nothing *\/\nvar ARMBAND='M200.3 115.8L198.6 124.8L202.1 144.6L205.6 164.4L209.1 184.2L212.6 204L216.1 223.8L220.1 243.3L224.9 262.5L229.7 282L234.6 301.5L239.5 321L242.8 340.9L247.6 360.4L252.5 379.9L238.2 391.5L258 391.5L258 115.8Z';\n\/* the drawing order: the head, then the throat and the face over it, so a tap on the face is a tap on the face.\n   The tap areas of the head, chest, stomach, arms and legs are cut to the outline; the face, the throat, the head's strip above the crown and\n   the arm bands are not, because they reach into the empty space beside the neck, above the head and outside the arms on purpose. *\/\nvar HITCLIP=['chest','stomach','arms','legs','head'],HITFREE=['throat','face'];\nvar REGORDER=['chest','stomach','arms','legs','throat','head','face'];\n\/* the glows, as [centre x, centre y, radius x, radius y]; the right-hand side is written out and arms and legs are mirrored *\/\nvar GLOWS={\n  head:[[130,27.3,32.2,21.7]],\n  face:[[130,64.3,23.3,22.5]],\n  throat:[[130,110.1,24.1,24.1]],\n  chest:[[128,164.8,48.3,33.8],[137,193,30.6,22.5]],\n  stomach:[[130,247.7,41.8,30.6],[130,279.8,28.1,20.1]],\n  arms:[[201.2,185.6,24.1,44.2],[221,280,19.3,40.2],[238.1,348.7,16.1,24.1]],\n  legs:[[165.4,390,32.2,68.4],[166.2,502.6,22.5,56.3]]\n};\nvar GOLD='#eda43c';\nvar bodyUid=0;\nfunction glowList(id){\n  var g=GLOWS[id]||[],out=g.slice();\n  if(id==='arms'||id==='legs'){g.forEach(function(e){out.push([260-e[0],e[1],e[2],e[3]]);});}\n  return out;\n}\nfunction bodySVG(o){\n  var marks=o.marks?o.marks:{},sel=o.sel?o.sel:[],inter=!!o.inter,mini=!!o.mini;\n  var u='fmb'+(++bodyUid);\n  function cl(id,extra){var c='fm-reg'+(extra?' '+extra:'');if(marks[id]){c+=' mark';}if(sel.indexOf(id)>=0){c+=' on';}return c+'\" data-reg=\"'+id;}\n  \/* the interactive figure has 14 units of room above the crown for the head's tap strip *\/\n  var vb=mini?MINI_VB:'0 -14 260 634';\n  var s='<svg viewBox=\"'+vb+'\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" '+(mini?'aria-hidden=\"true\" focusable=\"false\"':'role=\"img\" aria-label=\"Simple front view of a body outline. To choose body areas, use the list of areas.\"')+'>';\n  var ids=Object.keys(marks).filter(function(id){return !!REGD[id];});\n  s+='<defs><clipPath id=\"'+u+'s\"><path d=\"'+SIL_D+'\"\/><\/clipPath>';\n  if(ids.length){\n    s+='<radialGradient id=\"'+u+'g\"><stop offset=\"0\" stop-color=\"'+GOLD+'\" stop-opacity=\"'+(mini?'1':'.92')+'\"\/><stop offset=\".5\" stop-color=\"'+GOLD+'\" stop-opacity=\"'+(mini?'.62':'.5')+'\"\/><stop offset=\"1\" stop-color=\"'+GOLD+'\" stop-opacity=\"0\"\/><\/radialGradient>';\n    ids.forEach(function(id){s+='<clipPath id=\"'+u+'c'+id+'\">'+REGD[id].map(function(d){return '<path d=\"'+d+'\"\/>';}).join('')+'<\/clipPath>';});\n  }\n  s+='<\/defs>';\n  s+='<path class=\"fm-sil\" d=\"'+SIL_D+'\"\/>';\n  s+='<g clip-path=\"url(#'+u+'s)\">';\n  \/* three layers: the area fills (chosen is a solid teal), the gold glows over them, then the hairlines and rings on top,\n     so an area that is both chosen and commonly noticed shows teal with the gold on it, and every outline stays crisp *\/\n  REGORDER.forEach(function(id){\n    REGD[id].forEach(function(d){s+='<path class=\"'+cl(id,id==='face'?'face':'')+'\" d=\"'+d+'\"\/>';});\n  });\n  ids.forEach(function(id){\n    s+='<g class=\"fm-glow\" clip-path=\"url(#'+u+'c'+id+')\">';\n    glowList(id).forEach(function(e){\n      var k=mini?1.18:1;\n      s+='<ellipse cx=\"'+e[0]+'\" cy=\"'+e[1]+'\" rx=\"'+num(e[2]*k)+'\" ry=\"'+num(e[3]*k)+'\" fill=\"url(#'+u+'g)\"\/>';\n    });\n    s+='<\/g>';\n  });\n  REGORDER.forEach(function(id){\n    REGD[id].forEach(function(d){s+='<path class=\"fm-regl'+(sel.indexOf(id)>=0?' on':'')+'\" data-reg=\"'+id+'\" d=\"'+d+'\"\/>';});\n  });\n  s+='<\/g>';\n  s+='<path class=\"fm-rim\" d=\"'+SIL_D+'\"\/>';\n  if(inter){\n    s+='<g class=\"fm-hits\" clip-path=\"url(#'+u+'s)\">';\n    HITCLIP.forEach(function(id){\n      REGD[id].forEach(function(d){s+='<path class=\"fm-hit\" data-r=\"'+id+'\" d=\"'+d+'\"\/>';});\n    });\n    s+='<\/g>';\n    s+='<path class=\"fm-hit\" data-r=\"head\" d=\"'+HEADCAP+'\"\/>';\n    s+='<path class=\"fm-hit\" data-r=\"arms\" d=\"'+ARMBAND+'\"\/><path class=\"fm-hit\" data-r=\"arms\" d=\"'+mirrorD(ARMBAND)+'\"\/>';\n    HITFREE.forEach(function(id){\n      HITD[id].forEach(function(d){s+='<path class=\"fm-hit\" data-r=\"'+id+'\" d=\"'+d+'\"\/>';});\n    });\n  }\n  s+='<\/svg>';\n  return s;\n}\nfunction marksFor(id){\n  var m={};\n  if(!id){return m;}\n  byId[id].bodyRegions.forEach(function(b){m[b.r]=1;});\n  return m;\n}\n\/* ---------- figure three, from 641px: the body as a field of dots ---------- *\/\n\/* The body is drawn as dots on a canvas, sampled from the same outline (SIL_D) as the small figure. An invisible svg lies over it with the\n   same tap shapes as before (HITCLIP, HEADCAP, ARMBAND, HITFREE), so a tap anywhere on the body lands on exactly the area it always did.\n   A tap leaves a mark there: one mark per area. A tap on a mark removes it, and a tap elsewhere in an area that has a mark moves the mark.\n   The dots near each mark move in the character of the chosen sensation (\"any\" is a slow ripple outward), at one steady speed, and take\n   the post's teal, the color the small figure gives a chosen area. With reduced motion the halo is drawn once and stays still.\n   The loop runs only while a mark exists, the figure is on screen and the tab is visible. Nothing here scrolls the page. *\/\nvar PF={ready:false,on:false,cv:null,cx:null,stat:null,sx:null,dpr:1,k:1,w:0,h:0,pts:[],halo:[],raf:0,inView:true,cost:[],kf:null,silP:null,regP:null};\nvar VBY=-14,VBW=260,VBH=634;\nvar PCAP=10000;\n\/* the most dots that move in one frame; past this (\"all over\", or many marks) every second or third dot moves and the rest stay still in the mark colour *\/\nvar MOVECAP=3600;\n\/* how far the dots around a mark move, in figure units (the figure is 260 units wide) *\/\nvar MARKR={head:30,face:24,throat:26,chest:50,stomach:46,arms:30,legs:44};\n\/* the order the areas are stacked in the drawing, top first, so a dot on the face belongs to the face *\/\nvar REGPRI=['face','head','throat','legs','arms','stomach','chest'];\n\/* where a mark goes when an area is chosen from the list rather than tapped *\/\nvar AREAPT={head:[130,26],face:[130,64],throat:[130,106],chest:[128,167],stomach:[130,249],arms:[203,198],legs:[165,390]};\nvar WIDE=window.matchMedia?window.matchMedia('(min-width: 641px)'):null;\nfunction isWide(){return WIDE?WIDE.matches:true;}\nfunction prng(seed){\n  var a=seed;\n  return function(){a=(a+0x6D2B79F5)|0;var t=Math.imul(a^(a>>>15),1|a);t=(t+Math.imul(t^(t>>>7),61|t))^t;return ((t^(t>>>14))>>>0)\/4294967296;};\n}\nfunction bez(a,b,c,d,t){var u=1-t;return u*u*u*a+3*u*u*t*b+3*u*t*t*c+t*t*t*d;}\n\/* the dots: most fill the body, the rest sit just inside the outline so the edge reads like a drawn line. The density follows two things:\n   the distance to the outline (the edge reads as a line) and the form (dots thicken gently from the middle of each limb towards its sides,\n   as on a rounded surface lit from the front), so the body reads as round, not flat. SHADE is [base, edge, form]. *\/\nvar SHADE=[0.18,0.55,0.38];\nfunction pfBuild(){\n  if(PF.ready){return;}\n  var c=document.createElement('canvas');c.width=4;c.height=4;\n  var x=c.getContext('2d'),R=prng(20261001),pts=[],tries=0,i,j;\n  PF.silP=new Path2D(SIL_D);PF.regP={};\n  REGPRI.forEach(function(id){PF.regP[id]=REGD[id].map(function(d){return new Path2D(d);});});\n  \/* one-time bitmaps, 2 pixels to the unit: the outline, and the areas (each drawn in its own red value, the top area last), so testing a point\n     is a lookup rather than a path test. A pixel on an antialiased area border falls back to the path test. *\/\n  var MS=2,mw=260*MS,mh=634*MS,mc=document.createElement('canvas');mc.width=mw;mc.height=mh;\n  var mx=mc.getContext('2d');mx.setTransform(MS,0,0,MS,0,0);mx.fillStyle='#000';mx.fill(PF.silP);\n  var sil=mx.getImageData(0,0,mw,mh).data;\n  mx.setTransform(1,0,0,1,0,0);mx.clearRect(0,0,mw,mh);mx.setTransform(MS,0,0,MS,0,0);\n  for(i=REGPRI.length-1;i>=0;i--){mx.fillStyle='rgb('+(30*(i+1))+',0,0)';PF.regP[REGPRI[i]].forEach(function(p){mx.fill(p);});}\n  var lab=mx.getImageData(0,0,mw,mh).data;\n  function pix(px,py){var a=Math.floor(px*MS),b=Math.floor(py*MS);if(a<0){return -1;}if(b<0){return -1;}if(a>mw-1){return -1;}if(b>mh-1){return -1;}return (b*mw+a)*4;}\n  function inside(px,py){var k=pix(px,py);if(k<0){return false;}return sil[k+3]>127;}\n  function regOf(px,py){\n    var k=pix(px,py);\n    if(k>=0){if(lab[k+3]===255){var v=lab[k]\/30-1;if(v===Math.round(v)){if(v>=0){if(v<REGPRI.length){return REGPRI[v];}}}}}\n    for(i=0;i<REGPRI.length;i++){var ps=PF.regP[REGPRI[i]];for(j=0;j<ps.length;j++){if(x.isPointInPath(ps[j],px,py)){return REGPRI[i];}}}\n    return null;\n  }\n  \/* how far each point is from the outline, on a 3-unit grid (a two-pass chamfer distance) *\/\n  var G=3,nx=88,ny=211,df=new Float32Array(nx*ny),th=new Float32Array(nx*ny),gi,gj;\n  for(gj=0;gj<ny;gj++){for(gi=0;gi<nx;gi++){df[gj*nx+gi]=inside(gi*G,gj*G)?999:0;}}\n  function relax(a,b,w){if(df[b]+w<df[a]){df[a]=df[b]+w;}}\n  for(gj=1;gj<ny;gj++){for(gi=1;gi<nx-1;gi++){var o=gj*nx+gi;relax(o,o-1,G);relax(o,o-nx,G);relax(o,o-nx-1,G*1.414);relax(o,o-nx+1,G*1.414);}}\n  for(gj=ny-2;gj>=0;gj--){for(gi=nx-2;gi>=1;gi--){var o2=gj*nx+gi;relax(o2,o2+1,G);relax(o2,o2+nx,G);relax(o2,o2+nx+1,G*1.414);relax(o2,o2+nx-1,G*1.414);}}\n  \/* how thick the body is around each point: the largest circle inside the outline that covers it *\/\n  for(gj=0;gj<ny;gj++){for(gi=0;gi<nx;gi++){\n    var d0=df[gj*nx+gi];if(d0<=0){continue;}\n    var rc=Math.floor(d0\/G),di,dj;\n    for(dj=-rc;dj<=rc;dj++){var yj=gj+dj;if(yj<0){continue;}if(yj>ny-1){continue;}\n      for(di=-rc;di<=rc;di++){if(di*di+dj*dj>rc*rc){continue;}var xi=gi+di;if(xi<0){continue;}if(xi>nx-1){continue;}var t2=yj*nx+xi;if(th[t2]<d0){th[t2]=d0;}}}\n  }}\n  function cell(px,py){var a=Math.round(px\/G),b=Math.round(py\/G);if(a<0){a=0;}if(a>nx-1){a=nx-1;}if(b<0){b=0;}if(b>ny-1){b=ny-1;}return b*nx+a;}\n  function depth(px,py){return df[cell(px,py)];}\n  \/* 0 on the middle line of a limb, 1 at its side *\/\n  function form(px,py){var k=cell(px,py),t=th[k];if(t<1){return 1;}var n=df[k]\/t;if(n>1){n=1;}return (1-n)*(1-n);}\n  function add(px,py,rim){var e=Math.exp(-depth(px,py)\/7),g=form(px,py);pts.push({x:px,y:py,s:0.7+R()*0.6,a:Math.min(0.95,0.3+0.34*e+0.16*g+R()*0.25+(rim?0.15:0)),ph:R()*6.2832,r:regOf(px,py)});}\n  var nIn=Math.round(PCAP*0.88);\n  while(pts.length<nIn){\n    tries++;if(tries>600000){break;}\n    var px=R()*260,py=SIL_BOX[1]+R()*(SIL_BOX[3]-SIL_BOX[1]);\n    if(inside(px,py)){if(R()<SHADE[0]+SHADE[1]*Math.exp(-depth(px,py)\/8)+SHADE[2]*form(px,py)){add(px,py,false);}}\n  }\n  \/* the outline, sampled evenly along its length, so small details (the hands, the ears) are not drawn heavier than long edges *\/\n  var line=[],cum=[0],st=SIL_START,L=0;\n  SIL_SEGS.forEach(function(s){\n    var k;for(k=0;k<24;k++){var t=k\/24;line.push([bez(st[0],s[0],s[2],s[4],t),bez(st[1],s[1],s[3],s[5],t)]);}\n    st=[s[4],s[5]];\n  });\n  for(i=1;i<line.length;i++){L+=Math.sqrt(Math.pow(line[i][0]-line[i-1][0],2)+Math.pow(line[i][1]-line[i-1][1],2));cum.push(L);}\n  function along(u){var lo=0,hi=cum.length-1;while(hi-lo>1){var mid=(lo+hi)>>1;if(cum[mid]<u){lo=mid;}else{hi=mid;}}return line[lo];}\n  tries=0;\n  while(pts.length<PCAP){\n    tries++;if(tries>60000){break;}\n    var q=along(R()*L),ang=R()*6.2832,rr=R()*1.8;\n    var qx=q[0]+Math.cos(ang)*rr,qy=q[1]+Math.sin(ang)*rr;\n    if(R()<0.5){qx=260-qx;}\n    if(inside(qx,qy)){add(qx,qy,true);}\n  }\n  PF.pts=pts;PF.hx=x;PF.ready=true;\n}\nfunction pfSize(){\n  var st=$('bodyStage'),w=st.clientWidth;\n  if(w<10){return false;}\n  var dpr=Math.min(2,window.devicePixelRatio||1);\n  PF.w=w;PF.h=w*VBH\/VBW;PF.dpr=dpr;PF.k=w\/VBW;\n  var W=Math.round(PF.w*dpr),H=Math.round(PF.h*dpr);\n  if(PF.cv.width!==W){PF.cv.width=W;}\n  if(PF.cv.height!==H){PF.cv.height=H;}\n  if(!PF.stat){PF.stat=document.createElement('canvas');PF.sx=PF.stat.getContext('2d');}\n  PF.stat.width=W;PF.stat.height=H;\n  return true;\n}\nfunction unitTf(c){var s=PF.dpr*PF.k;c.setTransform(s,0,0,s,0,-VBY*s);}\n\/* one color for every mark: the teal of a chosen area on the small figure (#3d7a6e). The area under the pointer or the keyboard focus\n   takes a paler teal, so pointing at an area never looks like choosing it. *\/\nvar MARKC=[61,122,110],PEEKC=[150,190,181];\nfunction rgbS(c){return 'rgb('+c[0]+','+c[1]+','+c[2]+')';}\nfunction markIds(){return state.allOver?['all']:state.regions.slice();}\n\/* which dots belong to which mark's halo: each dot goes to the nearest mark within that mark's reach; \"all over\" reaches every dot *\/\n\/* the halos to draw. With marks, one for each mark the reader left. With no marks and a card open, one gold halo for each area people\n   commonly notice that feeling in, centred on the area's default mark point (mirrored for arms and legs, which sit on both sides), moving\n   the way the first sensation listed for that area moves. Reduced motion draws no moving gold; the still gold stays as before. *\/\nvar GHOSTC=[226,146,38];\nfunction haloSpecs(){\n  var specs=[];\n  markIds().forEach(function(id){\n    var m=state.marks[id];\n    if(!m){return;}\n    specs.push({id:id,m:m,R:id==='all'?420:MARKR[id],R0:id==='all'?260:MARKR[id],col:MARKC,ghost:false,gm:'any'});\n  });\n  if(specs.length){return specs;}\n  if(REDUCE){return specs;}\n  if(!state.feeling){return specs;}\n  byId[state.feeling].bodyRegions.forEach(function(b){\n    var p=AREAPT[b.r];\n    if(!p){return;}\n    var md=b.s.length?b.s[0]:'any';\n    specs.push({id:b.r,m:{x:p[0],y:p[1]},R:MARKR[b.r],R0:MARKR[b.r],col:GHOSTC,ghost:true,gm:md});\n    if(b.r==='arms'||b.r==='legs'){\n      specs.push({id:b.r,m:{x:260-p[0],y:p[1]},R:MARKR[b.r],R0:MARKR[b.r],col:GHOSTC,ghost:true,gm:md});\n    }\n  });\n  return specs;\n}\nfunction pfHalo(){\n  var specs=haloSpecs(),halo=[],own=new Int16Array(PF.pts.length),best=new Float32Array(PF.pts.length),i;\n  for(i=0;i<own.length;i++){own[i]=-1;best[i]=9;}\n  specs.forEach(function(s,mi){\n    var m=s.m,R=s.R;\n    for(i=0;i<PF.pts.length;i++){\n      var p=PF.pts[i],dx=p.x-m.x,dy=p.y-m.y,d=Math.sqrt(dx*dx+dy*dy)\/R;\n      if(d<1){if(d<best[i]){best[i]=d;own[i]=mi;}}\n    }\n  });\n  var tot=0,st=1,seen=0;for(i=0;i<own.length;i++){if(own[i]>=0){tot++;}}\n  var mv=new Uint8Array(own.length);\n  if(tot>MOVECAP){st=Math.ceil(tot\/MOVECAP);}\n  for(i=0;i<own.length;i++){if(own[i]>=0){seen++;if(seen%st===0){mv[i]=1;}}}\n  specs.forEach(function(s,mi){\n    var m=s.m;\n    var H={id:s.id,m:m,col:s.col,R0:s.R0,ghost:s.ghost,gm:s.gm,mode:'',idx:[],d:[],ux:[],uy:[],rx:[],ry:[]};\n    for(i=0;i<PF.pts.length;i++){\n      if(own[i]!==mi){continue;}\n      if(!mv[i]){continue;}\n      var p=PF.pts[i],dx=p.x-m.x,dy=p.y-m.y,L=Math.sqrt(dx*dx+dy*dy)||1;\n      H.idx.push(i);H.d.push(best[i]);H.ux.push(dx\/L);H.uy.push(dy\/L);H.rx.push(dx);H.ry.push(dy);\n    }\n    halo.push(H);\n  });\n  PF.halo=halo;PF.own=own;PF.mv=mv;\n  PF.ids=specs.map(function(s){return s.id;});\n  PF.cols=specs.map(function(s){return s.col;});\n}\n\/* the still layer: the faint body, the gold of an open feeling, every dot that is not in a halo, and the keyboard ring *\/\nfunction pfStatic(){\n  var c=PF.sx;\n  c.setTransform(1,0,0,1,0,0);c.clearRect(0,0,PF.stat.width,PF.stat.height);\n  unitTf(c);\n  c.globalAlpha=1;c.fillStyle='rgba(236,227,211,0.32)';c.fill(PF.silP);\n  var gold=marksFor(state.feeling);\n  Object.keys(gold).forEach(function(id){\n    if(!REGD[id]){return;}\n    c.save();c.clip(PF.silP);\n    var u=new Path2D();PF.regP[id].forEach(function(p){u.addPath(p);});c.clip(u);\n    glowList(id).forEach(function(e){\n      c.save();c.translate(e[0],e[1]);c.scale(e[2]*1.1,e[3]*1.1);\n      var g=c.createRadialGradient(0,0,0,0,0,1);\n      g.addColorStop(0,'rgba(237,164,60,0.8)');g.addColorStop(0.55,'rgba(237,164,60,0.38)');g.addColorStop(1,'rgba(237,164,60,0)');\n      c.fillStyle=g;c.beginPath();c.arc(0,0,1,0,6.2832);c.fill();c.restore();\n    });\n    c.restore();\n  });\n  var base=[122,111,99],chosen={},all=!!state.allOver;\n  markIds().forEach(function(id){if(state.marks[id]){chosen[id]=MARKC;}});\n  var buckets={},k1=1\/PF.k,i;\n  for(i=0;i<PF.pts.length;i++){\n    var still=-1;\n    if(PF.own){if(PF.own[i]>=0){if(PF.mv[i]){continue;}still=PF.own[i];}}\n    var p=PF.pts[i],col=base,a=p.a,s=p.s*k1;\n    if(all){col=chosen.all;}\n    else if(still>=0){col=PF.cols[still];}\n    else if(p.r){\n      if(chosen[p.r]){col=chosen[p.r];}\n      else if(p.r===bodyPeek){col=PEEKC;}\n    }\n    var key=col.join(',');\n    if(!buckets[key]){buckets[key]=[];}\n    buckets[key].push(i);\n  }\n  Object.keys(buckets).forEach(function(key){\n    c.fillStyle='rgb('+key+')';\n    buckets[key].forEach(function(i2){\n      var p2=PF.pts[i2],s2=p2.s*k1,a2=p2.a;\n      if(key!==base.join(',')){a2=Math.min(1,a2+0.3);s2=s2*1.2;}\n      c.globalAlpha=a2;c.fillRect(p2.x-s2\/2,p2.y-s2\/2,s2,s2);\n    });\n  });\n  c.globalAlpha=1;\n  if(PF.kf){\n    c.save();c.clip(PF.silP);\n    c.lineWidth=2.6*k1;c.strokeStyle='#2a2622';c.lineJoin='round';\n    PF.regP[PF.kf].forEach(function(p){c.stroke(p);});\n    c.restore();\n  }\n}\n\/* the motion of a halo, by sensation. t is in seconds, d is the distance from the mark (0 at the mark, 1 at the edge\n   of the halo), ph is the dot's own phase. It writes the dot's offset and brightness into WV. *\/\nvar WV=[0,0,1],TAU=6.2832;\nfunction wave(mode,t,d,ph,ux,uy,rx,ry){\n  var f=1-d,s,r=0,dx=0,dy=0,k=1,c;\n  if(mode==='still'){k=1-d*0.55;}\n  else if(mode==='tight'){c=(t*0.95)%1;s=Math.exp(-c*9);r=-2.4*s*f;k=0.4+0.6*s*f+0.2*f;}\n  else if(mode==='racing'){\n    c=(t*1.25)%1;s=Math.exp(-c*16);\n    if(c>0.2){s=Math.max(s,0.75*Math.exp(-(c-0.2)*16));}\n    var ring=Math.exp(-Math.pow(d-c*1.3,2)\/0.012);r=1.6*s*f+0.8*ring;k=0.4+0.6*Math.max(s*f,ring);\n  }\n  else if(mode==='heavy'){s=0.5-0.5*Math.cos(TAU*0.16*t);dy=2.8*s*(1-d*0.5);r=-0.5*s*f;k=0.55+0.45*s*f;}\n  else if(mode==='hot'){s=0.5+0.5*Math.sin(TAU*0.9*t+ph*3);dy=-1.4*(0.5+0.5*Math.sin(TAU*0.35*t+ph));k=0.5+0.5*s*(1-d*0.5);}\n  else if(mode==='warm'){s=0.5-0.5*Math.cos(TAU*0.22*t);r=1.6*s*d;k=0.5+0.5*s*(1-d*0.4);}\n  else if(mode==='fluttery'){dx=0.75*Math.sin(TAU*7*t+ph*5)*f;dy=0.75*Math.cos(TAU*9*t+ph*7)*f;k=0.55+0.45*(0.5+0.5*Math.sin(TAU*3*t+ph*4));}\n  else if(mode==='queasy'){var an=0.32*Math.sin(TAU*0.17*t)*f,ca=Math.cos(an)-1,sa=Math.sin(an);dx=rx*ca-ry*sa;dy=rx*sa+ry*ca;k=0.55+0.45*f;}\n  else if(mode==='hollow'){s=0.5-0.5*Math.cos(TAU*0.2*t);r=-1.8*s*f;k=(0.2+0.8*d)*(0.75+0.25*s);}\n  else if(mode==='numb'){k=0.3+0.12*Math.sin(TAU*0.08*t+ph);}\n  else if(mode==='light'){dy=-2.2*(0.5+0.5*Math.sin(TAU*0.25*t+ph*0.5))*(1-d*0.4);k=0.45+0.35*(0.5+0.5*Math.sin(TAU*0.25*t+ph));}\n  else if(mode==='tingly'){c=Math.sin((Math.floor(t*6)+ph*91)*43.7585)*1000;c=c-Math.floor(c);k=c>0.82?1:0.42;dx=0.3*Math.sin(TAU*11*t+ph*9);}\n  else if(mode==='restless'){dx=0.95*Math.sin(TAU*5*t+ph*11);dy=0.95*Math.sin(TAU*4.3*t+ph*13);k=0.5+0.5*(0.5+0.5*Math.sin(TAU*2*t+ph));}\n  else{s=Math.sin(TAU*0.45*t-d*7);r=1.3*s*f;k=0.5+0.5*(0.5+0.5*s)*(1-d*0.6);}\n  WV[0]=dx+ux*r;WV[1]=dy+uy*r;WV[2]=k;\n}\n\/* the motion of one halo: a mark moves the way the last sensation chosen for its own area moves (\"all over\" uses its shared set),\n   the default wave when none is chosen; a gold halo moves the way its feeling's first listed sensation for that area moves *\/\nfunction lastOf(a){return a.length?a[a.length-1]:'any';}\nfunction haloMode(H){\n  if(H.ghost){return H.gm;}\n  if(H.id==='all'){return lastOf(state.sens);}\n  return lastOf(state.sensBy[H.id]||[]);\n}\nfunction pfFrame(T,still){\n  var c=PF.cx;\n  c.setTransform(1,0,0,1,0,0);c.clearRect(0,0,PF.cv.width,PF.cv.height);\n  c.globalAlpha=1;c.drawImage(PF.stat,0,0);\n  unitTf(c);\n  var k1=1\/PF.k;\n  PF.halo.forEach(function(H){\n    var m=H.m,i,n=H.idx.length;\n    var mode=still?'still':haloMode(H);\n    H.mode=mode;\n    var col=H.col,R0=H.R0;\n    \/* a soft glow under the dots, breathing with the wave at the mark *\/\n    wave(mode,T,0,0,0,0,0,0);\n    c.save();c.clip(PF.silP);\n    var g=c.createRadialGradient(m.x,m.y,0,m.x,m.y,R0);\n    g.addColorStop(0,'rgba('+col.join(',')+','+(0.1+0.12*WV[2])+')');g.addColorStop(1,'rgba('+col.join(',')+',0)');\n    c.fillStyle=g;c.fillRect(m.x-R0,m.y-R0,R0*2,R0*2);c.restore();\n    c.fillStyle=rgbS(col);\n    for(i=0;i<n;i++){\n      var p=PF.pts[H.idx[i]],d=H.d[i];\n      wave(mode,T,d,p.ph,H.ux[i],H.uy[i],H.rx[i],H.ry[i]);\n      var s=p.s*k1*(1.75-0.55*d);\n      c.globalAlpha=Math.min(1,(p.a+0.35)*(0.35+0.65*WV[2]));\n      c.fillRect(p.x+WV[0]-s\/2,p.y+WV[1]-s\/2,s,s);\n    }\n  });\n  pfWaves(c,T,still,k1);\n  c.globalAlpha=1;\n}\nfunction pfShouldRun(){\n  if(!PF.on){return false;}\n  if(REDUCE){return false;}\n  if(!PF.inView){return false;}\n  if(document.hidden){return false;}\n  if(PF.rip||PF.hov.busy){return true;}\n  return PF.halo.length>0;\n}\nfunction pfLoop(now){\n  PF.raf=0;\n  if(!pfShouldRun()){return;}\n  var a=performance.now();\n  pfFrame(now\/1000,false);\n  PF.cost.push(performance.now()-a);\n  if(PF.cost.length>600){PF.cost.shift();}\n  PF.raf=requestAnimationFrame(pfLoop);\n}\nfunction pfStop(){if(PF.raf){cancelAnimationFrame(PF.raf);PF.raf=0;}}\nfunction pfKick(){\n  if(!PF.on){return;}\n  if(pfShouldRun()){if(!PF.raf){PF.raf=requestAnimationFrame(pfLoop);}}\n  else{pfStop();pfFrame(0,true);}\n}\n\/* ---------- the wave (push16): a tap sends one soft ring through every dot; a mouse pointer lifts the dots around it ----------\n   Both are drawn over the finished frame in one extra pass over the dots, in the same loop as the halos. Only a dot's size, height and opacity change.\n   PF.opt switches each one on or off. Reduced motion: neither runs, and the figure changes state as before. *\/\nvar RIPT=620,RIPW=300,HOVS=18,RIPC='84,156,140';\nPF.opt={ripple:true,hover:true};\nPF.hov={x:0,y:0,sx:0,sy:0,amt:0,want:0,t:-1,busy:false};\nPF.rip=null;PF.rd=null;\nvar HOVMQ=null;\ntry{HOVMQ=window.matchMedia('(min-width: 900px) and (hover: hover) and (pointer: fine)');}catch(e){HOVMQ=null;}\n\/* one ring from the point (x,y), in figure units; it reaches the farthest dot after RIPT ms, and every dot swells and settles within RIPW ms of the ring passing *\/\nfunction pfRip(x,y){\n  if(REDUCE){return;}\n  if(!PF.on){return;}\n  if(!PF.opt.ripple){return;}\n  var n=PF.pts.length,i,dm=1;\n  if(!PF.rd){PF.rd=new Float32Array(n);}\n  for(i=0;i<n;i++){\n    var p=PF.pts[i],dx=p.x-x,dy=p.y-y,d=Math.sqrt(dx*dx+dy*dy);\n    PF.rd[i]=d;if(d>dm){dm=d;}\n  }\n  PF.rip={t0:performance.now(),dm:dm,v:dm\/RIPT};\n  pfKick();\n}\nfunction pfWaves(c,T,still,k1){\n  var rp=PF.rip,hv=PF.hov,pts=PF.pts,n=pts.length,i,tm=0,dt=0;\n  if(rp){\n    tm=T*1000-rp.t0;if(tm<0){tm=0;}\n    if(tm>RIPT+RIPW){PF.rip=null;rp=null;}\n  }\n  if(!still){\n    if(hv.t>=0){if(T>hv.t){dt=Math.min(0.1,T-hv.t);}}\n    hv.t=T;\n    var kp=1-Math.exp(-dt\/0.07),ka=1-Math.exp(-dt\/0.14);\n    hv.sx+=(hv.x-hv.sx)*kp;hv.sy+=(hv.y-hv.sy)*kp;hv.amt+=(hv.want-hv.amt)*ka;\n    if(hv.want===0){if(hv.amt<0.01){hv.amt=0;}}\n    hv.busy=Math.abs(hv.x-hv.sx)+Math.abs(hv.y-hv.sy)>0.05||Math.abs(hv.want-hv.amt)>0.01;\n    if(hv.want===0){if(hv.amt===0){hv.busy=false;}}\n  }\n  var doH=hv.amt>0.01;\n  if(!rp){if(!doH){return;}}\n  c.fillStyle='rgb('+RIPC+')';\n  \/* the dots are sorted into seven opacity steps, so the opacity is set seven times a frame, not once per dot *\/\n  var cut=Math.pow(HOVS*2.4,2),sg=2*HOVS*HOVS,q,iv=rp?1\/rp.v:0,L=PF.wb,cn=PF.wn;\n  if(!L){L=[];cn=new Int32Array(7);for(q=0;q<7;q++){L.push(new Float32Array(n*3));}PF.wb=L;PF.wn=cn;}\n  for(q=0;q<7;q++){cn[q]=0;}\n  for(i=0;i<n;i++){\n    var p=pts[i],e=0,h=0;\n    if(rp){\n      var u=(tm-PF.rd[i]*iv)\/RIPW;\n      if(u>0){if(u<1){\n        e=u<0.25?Math.sin(u*6.2832):Math.cos((u-0.25)*2.0944);\n        e=e*e*(1-0.45*PF.rd[i]\/rp.dm);\n      }}\n    }\n    if(doH){\n      var hx=p.x-hv.sx,hy=p.y-hv.sy,d2=hx*hx+hy*hy;\n      if(d2<cut){h=Math.exp(-d2\/sg)*hv.amt;}\n    }\n    if(e<0.07){if(h<0.05){continue;}}\n    var s=p.s*k1*(1+1.0*e+0.9*h);\n    q=Math.min(6,(Math.min(0.92,0.85*e+0.55*h)*7)|0);\n    var o=cn[q]++*3,B=L[q];B[o]=p.x-s\/2;B[o+1]=p.y-1.1*h-s\/2;B[o+2]=s;\n  }\n  for(q=0;q<7;q++){\n    c.globalAlpha=(q+0.5)\/7;\n    for(i=0;i<cn[q];i++){var B2=L[q],o2=i*3;c.fillRect(B2[o2],B2[o2+1],B2[o2+2],B2[o2+2]);}\n  }\n  c.globalAlpha=1;\n}\n\/* the phone has no dots (the small figure and the list of areas stand in), so the ring is a single circle that grows over the small figure and fades *\/\nfunction miniRip(x,y){\n  if(REDUCE){return;}\n  if(!PF.opt.ripple){return;}\n  var mf=$('miniFig'),svg=mf?mf.querySelector('svg'):null,cp=svg?svg.querySelector('clipPath'):null;\n  if(!cp){return;}\n  var NS='http:\/\/www.w3.org\/2000\/svg',g=document.createElementNS(NS,'g'),ci=document.createElementNS(NS,'circle');\n  if(!ci.animate){return;}\n  g.setAttribute('clip-path','url(#'+cp.id+')');g.setAttribute('aria-hidden','true');g.style.pointerEvents='none';\n  ci.setAttribute('cx',x);ci.setAttribute('cy',y);ci.setAttribute('r',10);ci.setAttribute('fill','none');ci.setAttribute('stroke','#7fb7a9');ci.setAttribute('stroke-width',3);\n  ci.setAttribute('vector-effect','non-scaling-stroke');ci.style.transformBox='fill-box';ci.style.transformOrigin='center';\n  g.appendChild(ci);svg.appendChild(g);\n  var a=ci.animate([{transform:'scale(0.3)',opacity:0.9},{transform:'scale(45)',opacity:0}],{duration:820,easing:'cubic-bezier(0.2,0.6,0.3,1)'});\n  a.onfinish=function(){if(g.parentNode){g.parentNode.removeChild(g);}};\n}\n\/* the svg over the canvas: the tap shapes, then the marks (rings drawn in the svg so they stay crisp; each has a 44 px round target that removes it) *\/\nfunction hitSVG(){\n  var s='<svg viewBox=\"0 '+VBY+' '+VBW+' '+VBH+'\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"A body drawn in dots. To choose body areas, use the list of areas.\">';\n  s+='<defs><clipPath id=\"fmhsil\"><path d=\"'+SIL_D+'\"\/><\/clipPath><\/defs><g clip-path=\"url(#fmhsil)\">';\n  HITCLIP.forEach(function(id){REGD[id].forEach(function(d){s+='<path class=\"fm-hit\" data-r=\"'+id+'\" d=\"'+d+'\"\/>';});});\n  s+='<\/g><path class=\"fm-hit\" data-r=\"head\" d=\"'+HEADCAP+'\"\/>';\n  s+='<path class=\"fm-hit\" data-r=\"arms\" d=\"'+ARMBAND+'\"\/><path class=\"fm-hit\" data-r=\"arms\" d=\"'+mirrorD(ARMBAND)+'\"\/>';\n  HITFREE.forEach(function(id){HITD[id].forEach(function(d){s+='<path class=\"fm-hit\" data-r=\"'+id+'\" d=\"'+d+'\"\/>';});});\n  s+='<g id=\"fmMarks\"><\/g><\/svg>';\n  return s;\n}\nfunction pfMarks(){\n  var g=document.getElementById('fmMarks');if(!g){return;}\n  var s='';\n  state.regions.forEach(function(id){\n    var m=state.marks[id];if(!m){return;}\n    var r=1\/PF.k;\n    s+='<g class=\"fm-mk\" transform=\"translate('+num(m.x)+' '+num(m.y)+')\">';\n    s+='<circle class=\"fm-mkhit\" data-mk=\"'+id+'\" r=\"'+num(22*r)+'\"\/><circle class=\"rg\" r=\"'+num(8*r)+'\"\/><circle class=\"ct\" r=\"'+num(2.6*r)+'\"\/><\/g>';\n  });\n  g.innerHTML=s;\n}\n\/* the caption under the figure: what is chosen, or the area under the pointer or the keyboard focus *\/\nvar bodyPeek=null;\nfunction bodyCaption(){\n  var cap=$('bodyCap'),t='',wide=isWide();\n  if(state.feeling){t='Gold areas show where people commonly notice '+lower(byId[state.feeling].name)+'. ';if(PF.on){if(PF.halo.length){if(PF.halo[0].ghost){t+='They move the way it tends to feel there. ';}}}}\n  if(bodyPeek){var r=regionById[bodyPeek];t+=r.name+': '+lower(r.hint)+'.';}\n  else if(state.allOver){t+='Chosen: all over. Tap it again to remove it.';}\n  else if(state.regions.length){t+='Chosen: '+joinAreas(areaNames(state.regions))+'. '+(wide?'Tap a mark to remove it, or anywhere else to add one.':'Tap an area again to remove it.');}\n  else if(wide){t+='You can leave more than one mark.';}\n  cap.textContent=t;\n}\n\/* the chosen areas under the figure, from 641px: one pair of buttons each. The first says what is chosen for the area (\"stomach: heavy\",\n   \"chest: any\") and makes it the area the question is about; the cross removes the area and its sensations (\"all over\" has its own toggle).\n   The buttons are updated where they stand, so a focused button keeps its focus. On phones the area list carries a select for each area. *\/\nfunction sumText(id){\n  var S=state.sensBy[id]||[],t;\n  if(!S.length){t='any';}\n  else{\n    if(S.length===1){t=lower(sensById[S[0]].label);}\n    else{t=joinAreas(S.map(sensShort));}\n  }\n  return areaNames([id])[0]+': '+t;\n}\nfunction renderMarkChips(){\n  var mc=$('markChips'),ids=state.allOver?[]:state.regions,k;\n  mc.hidden=ids.length===0;\n  for(k=mc.children.length-1;k>=0;k--){\n    if(ids.indexOf(mc.children[k].getAttribute('data-w'))<0){mc.removeChild(mc.children[k]);}\n  }\n  ids.forEach(function(id,i){\n    var nm=areaNames([id])[0],w=null,j,sb,xb;\n    for(j=0;j<mc.children.length;j++){if(mc.children[j].getAttribute('data-w')===id){w=mc.children[j];}}\n    if(!w){\n      w=el('span','fm-mkc');w.setAttribute('data-w',id);\n      sb=el('button','fm-chip fm-mksum');sb.type='button';sb.setAttribute('data-sum',id);\n      xb=el('button','fm-chip fm-mkx');xb.type='button';xb.setAttribute('data-rm',id);xb.setAttribute('aria-label','Remove '+nm);\n      var x=el('span','fm-x','\u00d7');x.setAttribute('aria-hidden','true');xb.appendChild(x);\n      w.appendChild(sb);w.appendChild(xb);\n    }\n    if(mc.children[i]!==w){mc.insertBefore(w,mc.children[i]||null);}\n    sb=w.firstChild;\n    sb.textContent=sumText(id);\n    sb.setAttribute('aria-pressed',state.active===id?'true':'false');\n  });\n}\nfunction renderMini(){\n  var mf=$('miniFig');if(!mf){return;}\n  mf.innerHTML=bodySVG({marks:marksFor(state.feeling),sel:state.allOver?REGION_IDS:state.regions,mini:true});\n}\nfunction renderBodyMarks(){\n  renderMini();\n  renderMarkChips();\n  if(PF.on){pfHalo();pfStatic();pfMarks();pfKick();}\n  bodyCaption();\n}\n\/* the hit layer is made at once; the dots are built (about a tenth of a second, once) only when the figure comes within 800px of the screen *\/\nfunction pfInit(){\n  if(!isWide()){PF.on=false;pfStop();return;}\n  if(!PF.cv){\n    PF.cv=$('bodyCanvas');PF.cx=PF.cv.getContext('2d');\n    var tmp=document.createElement('div');tmp.innerHTML=hitSVG();$('bodyStageIn').appendChild(tmp.firstChild);\n    if('IntersectionObserver' in window){\n      new IntersectionObserver(function(es){es.forEach(function(e){PF.inView=e.isIntersecting;});if(PF.inView){pfKick();}else{pfStop();}},{rootMargin:'60px'}).observe($('bodyStage'));\n      var near=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){PF.near=true;near.disconnect();pfInit();}});},{rootMargin:'800px'});\n      near.observe($('bodyStage'));\n    }else{PF.near=true;}\n    if('ResizeObserver' in window){new ResizeObserver(function(){if(PF.on){if(pfSize()){pfStatic();pfMarks();pfKick();}}}).observe($('bodyStage'));}\n  }\n  if(!PF.near){return;}\n  pfBuild();\n  if(!pfSize()){return;}\n  PF.on=true;\n  renderBodyMarks();\n}\ndocument.addEventListener('visibilitychange',function(){if(document.hidden){pfStop();}else{pfKick();}});\nif(WIDE){\n  var onWide=function(){if(isWide()){pfInit();}else{PF.on=false;pfStop();}bodyCaption();};\n  if(WIDE.addEventListener){WIDE.addEventListener('change',onWide);}else{if(WIDE.addListener){WIDE.addListener(onWide);}}\n}\n\/* a tap on the figure: the point in figure units, and the area under it from the tap shapes *\/\nfunction stagePoint(ev){\n  var svg=$('bodyStage').querySelector('svg'),pt=svg.createSVGPoint();\n  pt.x=ev.clientX;pt.y=ev.clientY;\n  var q=pt.matrixTransform(svg.getScreenCTM().inverse());\n  return [q.x,q.y];\n}\n$('bodyStage').addEventListener('click',function(ev){\n  var t=ev.target,r=null;\n  \/* a tap on a mark removes it *\/\n  if(t.getAttribute){var mk=t.getAttribute('data-mk');if(mk){if(state.regions.indexOf(mk)>=0){PF.hold=null;pickRegion(mk);}return;}}\n  if(t.getAttribute){if(t.classList.contains('fm-hit')){r=t.getAttribute('data-r');}}\n  if(!r){return;}\n  var q=stagePoint(ev),x=q[0],y=q[1];\n  \/* a mark stays on the body: a tap in a tap strip outside the outline puts the mark on the nearest edge of its area *\/\n  if(!PF.silP){pfBuild();}\n  var a=AREAPT[r].slice(),k;\n  if(x<130){a[0]=260-a[0];}\n  for(k=0;k<40;k++){if(PF.hx.isPointInPath(PF.silP,x,y)){break;}x=x+(a[0]-x)*0.12;y=y+(a[1]-y)*0.12;}\n  PF.hold=r;bodyPeek=null;\n  placeMark(r,x,y);\n});\n$('bodyStage').addEventListener('pointermove',function(ev){\n  if(ev.pointerType!=='mouse'){return;}\n  var r=null;if(ev.target.classList){if(ev.target.classList.contains('fm-hit')){r=ev.target.getAttribute('data-r');}}\n  \/* right after a tap the caption says what is chosen; naming the area under the pointer waits until the pointer moves to another area *\/\n  if(PF.hold){if(r===PF.hold){r=null;}else{PF.hold=null;}}\n  if(r!==bodyPeek){bodyPeek=r;if(PF.on){pfStatic();pfKick();}bodyCaption();}\n});\n$('bodyStage').addEventListener('pointerleave',function(){if(bodyPeek){bodyPeek=null;if(PF.on){pfStatic();pfKick();}bodyCaption();}});\n\/* the wave: a tap or click on the figure sends a ring from where it landed (after the mark has been added or removed); the mouse lifts the dots near it *\/\n$('bodyStage').addEventListener('click',function(ev){\n  if(REDUCE){return;}\n  if(!PF.on){return;}\n  var q=stagePoint(ev);\n  pfRip(q[0],q[1]);\n});\n$('bodyStage').addEventListener('pointermove',function(ev){\n  if(ev.pointerType!=='mouse'){return;}\n  if(REDUCE){return;}\n  if(!PF.on){return;}\n  if(!PF.opt.hover){return;}\n  if(!HOVMQ){return;}\n  if(!HOVMQ.matches){return;}\n  var q=stagePoint(ev),h=PF.hov;\n  h.x=q[0];h.y=q[1];\n  if(h.amt<0.05){h.sx=h.x;h.sy=h.y;}\n  h.want=1;h.busy=true;pfKick();\n});\n$('bodyStage').addEventListener('pointerleave',function(){\n  var h=PF.hov;\n  if(h.want===0){return;}\n  h.want=0;h.busy=true;pfKick();\n});\n\/* a summary button makes its area the one the question is about; a cross removes the area. After a removal the focus moves to the button\n   that takes its place, or to \"all over\" when none is left, and never scrolls *\/\n$('markChips').addEventListener('click',function(ev){\n  var t=ev.target,sm=t.closest?t.closest('[data-sum]'):null,rm=t.closest?t.closest('[data-rm]'):null;\n  if(sm){setActive(sm.getAttribute('data-sum'),true);return;}\n  if(!rm){return;}\n  var i=state.regions.indexOf(rm.getAttribute('data-rm'));if(i<0){return;}\n  pickRegion(state.regions[i]);\n  var next=null;\n  if(state.regions.length){next=$('markChips').querySelector('[data-sum=\"'+state.regions[Math.min(i,state.regions.length-1)]+'\"]');}\n  else{next=$('allOver');}\n  try{next.focus({preventScroll:true});}catch(e){}\n});\n\/* for the harness only *\/\nwindow.__fmPF={PF:PF,init:pfInit,frame:pfFrame,\n  bench:function(n){var a=[],i;for(i=0;i<n;i++){var s=performance.now();pfFrame(i\/60,false);a.push(performance.now()-s);}a.sort(function(x,y){return x-y;});\n    var sum=0;a.forEach(function(v){sum+=v;});return {n:n,mean:sum\/n,p50:a[Math.floor(n*0.5)],p95:a[Math.floor(n*0.95)],max:a[n-1],dots:PF.pts.length,halo:PF.halo.reduce(function(s2,H){return s2+H.idx.length;},0),dpr:PF.dpr,px:[PF.cv.width,PF.cv.height]};}};\n\/* for the harness and the demo page only *\/\nwindow.__fmPF.setOpt=function(k,v){\n  PF.opt[k]=!!v;\n  if(k==='hover'){if(!v){PF.hov.want=0;PF.hov.busy=true;pfKick();}}\n  if(k==='ripple'){if(!v){PF.rip=null;pfKick();}}\n};\nwindow.__fmPF.rip=pfRip;window.__fmPF.miniRip=miniRip;\n\/*SLOT block 3 end*\/\n\/*SLOT block 5 begin*\/\n\/* ---------- step 3: the marks, \"What's it like there?\", ranked results ---------- *\/\n\/* From 641px the figure is the place to choose areas; below 641px the area buttons are the list. state.regions holds the chosen ids in the\n   order they were marked, and state.marks holds one mark per chosen area: where it sits in figure units. state.allOver is the\n   \"all over\" toggle (it stands for all seven areas, clears single areas and has one mark of its own, \"all\"). state.sens holds chosen\n   sensations; empty means \"any\". Nothing here scrolls: a tap changes the page where it stands. *\/\nvar REGION_IDS=DATA.regions.map(function(r){return r.id;});\n\/* rows shown in each group before \"Show all\" *\/\nvar SHOW_FIRST=4;\n\/* a, a and b, a, b and c (the house style has no comma before the last \"and\" in a short list of words) *\/\nfunction joinAreas(list){\n  var n=list.length;\n  if(n===0){return '';}\n  if(n===1){return list[0];}\n  return list.slice(0,n-1).join(', ')+' and '+list[n-1];\n}\nfunction areaNames(ids){return ids.map(function(id){return id==='arms'?'arms':regionById[id].name.toLowerCase();});}\n\/* a check-in saved before multi-area holds one area as a string; a new one holds an array *\/\nfunction regionsOf(r){\n  var a=[];\n  if(typeof r==='string'){if(r){a=[r];}}\n  else{if(Array.isArray(r)){a=r.slice();}}\n  return a.filter(function(id){return !!regionById[id];});\n}\n\/* the short form of a sensation for result rows: the words before \" or \" (\"tight or clenched\" reads \"tight\") *\/\nfunction sensShort(id){var l=lower(sensById[id].label),i=l.indexOf(' or ');return i>0?l.slice(0,i):l;}\n(function buildRegionUI(){\n  var list=$('regionList');\n  DATA.regions.forEach(function(r){\n    var b=el('button','fm-rbtn');b.type='button';b.setAttribute('data-r',r.id);b.setAttribute('aria-pressed','false');\n    b.appendChild(el('b','',r.name));b.appendChild(el('span','',' '+r.hint));\n    b.addEventListener('focus',function(){if(!isWide()){return;}bodyPeek=r.id;PF.kf=r.id;if(PF.on){pfStatic();pfKick();}bodyCaption();});\n    b.addEventListener('blur',function(){bodyPeek=null;PF.kf=null;if(PF.on){pfStatic();pfKick();}bodyCaption();});\n    list.appendChild(b);\n  });\n  var sc=$('sensChips'),ss=$('sensSel');\n  var any=el('option','','not sure, or any');any.value='';ss.appendChild(any);\n  var ab=el('button','fm-chip','any');ab.type='button';ab.setAttribute('data-s','');ab.setAttribute('aria-pressed','true');sc.appendChild(ab);\n  DATA.sensations.forEach(function(s){\n    var b=el('button','fm-chip',lower(s.label));b.type='button';b.setAttribute('data-s',s.id);b.setAttribute('aria-pressed','false');sc.appendChild(b);\n    var o=el('option','',lower(s.label));o.value=s.id;ss.appendChild(o);\n  });\n})();\n$('regionList').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-rbtn'):null;\n  if(b){pickRegion(b.getAttribute('data-r'));}\n});\n$('sensChips').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-chip'):null;\n  if(b){pickSens(b.getAttribute('data-s'));}\n});\n\/* the phone drop-down holds one value, so choosing in it sets exactly that one sensation *\/\n$('sensSel').addEventListener('change',function(){state.sens=this.value?[this.value]:[];state.showAll=false;renderResults();});\n$('moreRows').addEventListener('click',function(){state.showAll=!state.showAll;renderResults();});\n$('rows').addEventListener('click',function(ev){\n  var t=ev.target.closest?ev.target.closest('.fm-res'):null;\n  if(t){openFeeling(t.getAttribute('data-id'),'body');return;}\n  var m=ev.target.closest?ev.target.closest('.fm-resmore'):null;\n  if(m){\n    var gk=m.getAttribute('data-g');\n    openGrp[gk]=!openGrp[gk];renderResults();\n    var nb=$('rows').querySelector('.fm-resmore[data-g=\"'+gk+'\"]');\n    if(nb){try{nb.focus({preventScroll:true});}catch(e){}}\n  }\n});\n$('clearAreas').addEventListener('click',function(){\n  state.regions=[];state.marks={};state.allOver=false;state.sens=[];state.sensBy={};state.active=null;state.showAll=false;\n  renderBodyMarks();renderResults();\n  say('Areas cleared.');\n  try{$('allOver').focus({preventScroll:true});}catch(e){}\n});\n$('allOver').addEventListener('click',function(){\n  var aoTop0=this.getBoundingClientRect().top;\n  state.allOver=!state.allOver;state.regions=[];state.marks={};state.sensBy={};state.active=null;state.showAll=false;if(!state.allOver){state.sens=[];}\n  if(state.allOver){state.marks.all={x:130,y:200};}\n  renderBodyMarks();renderResults();\n  var aoDy=this.getBoundingClientRect().top-aoTop0;\n  if(Math.abs(aoDy)>0.5){try{window.scrollBy({left:0,top:aoDy,behavior:'instant'});}catch(eAo){window.scrollBy(0,aoDy);}}\n  say(state.allOver?'All over chosen.':'All over removed.');\n});\n\/* the wave from the list buttons and \"all over\": the ring starts where the mark goes (the phone gets a single ring over the small figure) *\/\nfunction listRip(x,y){if(isWide()){pfRip(x,y);}else{miniRip(x,y);}}\n$('regionList').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-rbtn'):null;\n  if(b){var a=AREAPT[b.getAttribute('data-r')];if(a){listRip(a[0],a[1]);}}\n});\n$('allOver').addEventListener('click',function(){listRip(130,200);});\n\/* ---- each area keeps its own sensations ----\n   state.sensBy holds the chosen sensations for each chosen area, and loses an area's entry when the area is removed. state.active is the\n   area the question \"What's it like in your ...?\" is about; a newly chosen area becomes active. state.sens is the one shared set for\n   \"all over\". An empty set means \"any\". *\/\nvar ANYTXT=$('sensSel').options[0].textContent;\nvar AREASENS=null;\n\/* the sensations the data lists for this area, for at least one feeling, in the order of the sensation list *\/\nfunction areaSens(r){\n  if(!AREASENS){\n    AREASENS={};\n    F.forEach(function(f){\n      f.bodyRegions.forEach(function(b){\n        var o=AREASENS[b.r];\n        if(!o){o=AREASENS[b.r]={};}\n        b.s.forEach(function(s){o[s]=1;});\n      });\n    });\n  }\n  var o2=AREASENS[r]||{};\n  return DATA.sensations.map(function(s){return s.id;}).filter(function(id){return !!o2[id];});\n}\nfunction sensOf(r){return state.sensBy[r]||[];}\nfunction askText(){return \"Now choosing what it's like in your \"+areaNames([state.active])[0]+'.';}\n\/* the list buttons toggle an area: a new one gets a mark at the middle of the area, a chosen one loses its mark and its sensations *\/\nfunction pickRegion(id){\n  if(state.allOver){state.allOver=false;state.regions=[];state.marks={};state.sens=[];}\n  var i=state.regions.indexOf(id),nm=regionById[id].name,was=state.active;\n  if(i<0){\n    state.regions.push(id);state.marks[id]={x:AREAPT[id][0],y:AREAPT[id][1]};\n    state.sensBy[id]=[];state.active=id;\n  }else{\n    state.regions.splice(i,1);delete state.marks[id];delete state.sensBy[id];\n    if(state.active===id){state.active=state.regions.length?state.regions[state.regions.length-1]:null;}\n  }\n  state.showAll=false;\n  renderBodyMarks();renderResults();\n  if(i<0){say(nm+' added. '+state.regions.length+(state.regions.length===1?' area':' areas')+' chosen. '+askText());}\n  else{\n    var more='';\n    if(state.active){if(state.active!==was){more=' '+askText();}}\n    say(nm+' removed.'+more);\n  }\n}\n\/* a tap on the figure: a new area gets a mark where the tap was; an area that has a mark keeps it, moved to the tap *\/\nfunction placeMark(id,x,y){\n  if(state.allOver){state.allOver=false;state.regions=[];state.marks={};state.sens=[];}\n  var had=state.regions.indexOf(id)>=0,nm=regionById[id].name;\n  if(had){state.marks[id].x=x;state.marks[id].y=y;}\n  else{state.regions.push(id);state.marks[id]={x:x,y:y};state.sensBy[id]=[];state.active=id;state.showAll=false;}\n  renderBodyMarks();\n  if(!had){renderResults();say(nm+' added. '+state.regions.length+(state.regions.length===1?' area':' areas')+' chosen. '+askText());}\n}\n\/* a summary button: the question is now about this area *\/\nfunction setActive(id,speak){\n  if(state.allOver){return;}\n  if(state.regions.indexOf(id)<0){return;}\n  state.active=id;\n  renderResults();\n  if(speak){say(askText()+' '+$('resLine').textContent);}\n}\n\/* a sensation chip: it belongs to the active area (\"all over\" has its own set) *\/\nfunction pickSens(id){\n  var a;\n  if(state.allOver){a=state.sens;}\n  else{\n    if(!state.active){return;}\n    a=state.sensBy[state.active];\n    if(!a){a=state.sensBy[state.active]=[];}\n  }\n  if(id===''){a.length=0;}\n  else{\n    var i=a.indexOf(id);\n    if(i<0){a.push(id);}else{a.splice(i,1);}\n  }\n  state.showAll=false;renderResults();\n}\n\/* a phone select holds one value, so choosing in it sets exactly that one sensation for its area *\/\nfunction areaSelChange(r,v){\n  state.sensBy[r]=v?[v]:[];state.active=r;state.showAll=false;renderResults();\n}\n\/* the phone's area list: each chosen area gets its own labelled select directly below its button *\/\nfunction makeAreaSel(r){\n  var nm=areaNames([r])[0],w=el('div','fm-selectwrap fm-areasel'),lb=el('label','',\"What's it like in your \"+nm+'?'),sel=el('select','fm-select');\n  w.id='aw-'+r;sel.id='as-'+r;lb.setAttribute('for','as-'+r);\n  var any=el('option','',ANYTXT);any.value='';sel.appendChild(any);\n  areaSens(r).forEach(function(id){var o=el('option','',lower(sensById[id].label));o.value=id;sel.appendChild(o);});\n  sel.addEventListener('change',function(){areaSelChange(r,this.value);});\n  w.appendChild(lb);w.appendChild(sel);\n  return w;\n}\nfunction syncAreaUI(){\n  var all=!!state.allOver,list=$('regionList'),btns=list.querySelectorAll('.fm-rbtn'),k;\n  for(k=0;k<btns.length;k++){\n    var b=btns[k],r=b.getAttribute('data-r'),chosen=state.regions.indexOf(r)>=0,w=document.getElementById('aw-'+r),want=false;\n    b.setAttribute('aria-pressed',(all||chosen)?'true':'false');\n    if(!all){if(chosen){want=true;}}\n    if(want){\n      if(!w){w=makeAreaSel(r);list.insertBefore(w,b.nextSibling);}\n      var sel=document.getElementById('as-'+r),cur=sensOf(r);\n      if(cur.length>1){sel.selectedIndex=-1;}else{sel.value=cur.length?cur[0]:'';}\n    }else{\n      if(w){list.removeChild(w);}\n    }\n  }\n}\n\n\/* the end of the copyable sentence on a feeling card: what you felt where. One clause for each chosen area that has a sensation (\"my stomach\n   feels heavy\", \"my legs feel numb or far away\"; several sensations read \"heavy and tight\"), then one clause for the areas with none\n   (\"I notice it in my chest and throat\"). \"All over\" reads \"I feel it all over\". Nothing chosen adds nothing. *\/\nfunction sentTail(){\n  if(state.allOver){return ', and I feel it all over.';}\n  var rs=state.regions;\n  if(!rs.length){return '.';}\n  var parts=[],plain=[];\n  rs.forEach(function(r){\n    var S=sensOf(r);\n    if(!S.length){plain.push(r);return;}\n    var what=S.length===1?lower(sensById[S[0]].label):joinAreas(S.map(sensShort));\n    parts.push('my '+areaNames([r])[0]+((r==='legs'||r==='arms')?' feel ':' feels ')+what);\n  });\n  if(plain.length){parts.push('I notice it in my '+joinAreas(areaNames(plain)));}\n  return ', and '+joinAreas(parts)+'.';\n}\n\/* ---- the ranking ----\n   For each feeling, over the chosen areas:\n     area  = how many chosen areas the feeling is noticed in;\n     sens  = how many chosen areas it is described there with a chosen sensation (0 when none is chosen);\n     lead  = 1 when the area its body note names first is chosen (and, with a sensation, described that way there);\n     ev    = 2 body-map studies, 1 studied but less clear, 0 commonly described.\n   Who is listed:\n     one area: every feeling noticed there (with a sensation: described that way there);\n     two or more areas: only the feelings noticed in every chosen area (with a sensation: described that way in at least one of them);\n       if none is, the ones noticed in the most of them, with a line that says so;\n     all over: with a sensation, feelings described that way in 3 or more areas; with \"any\", feelings noticed in 5 or more areas.\n   Order: fit (sens when a sensation is chosen, else area), then ev, then lead, then the chosen sensation named first there, then A to Z. *\/\nvar EVR={'mapped':2,'mapped-less-distinct':1,'described':0};\nfunction scoreFeeling(f,A,S){\n  var k={area:0,sens:0,lead:0,sfirst:0,ev:EVR[f.evidence],hit:[]};\n  A.forEach(function(r){\n    f.bodyRegions.forEach(function(b){\n      if(b.r!==r){return;}\n      k.area++;\n      var ok=S.length?S.some(function(s){return b.s.indexOf(s)>=0;}):true;\n      if(S.length){if(ok){k.sens++;if(S.indexOf(b.s[0])>=0){k.sfirst++;}}}\n      if(ok){k.hit.push({r:r,s:b.s});}\n    });\n  });\n  var first=f.bodyRegions[0];\n  if(A.indexOf(first.r)>=0){if(!S.length||S.some(function(s){return first.s.indexOf(s)>=0;})){k.lead=1;}}\n  k.fit=S.length?k.sens:k.area;\n  return k;\n}\nfunction matchFeelings(sens){\n  var S=sens||state.sens,all=!!state.allOver,A=all?REGION_IDS:state.regions,n=A.length;\n  var rows=[];\n  F.forEach(function(f){\n    var k=scoreFeeling(f,A,S);\n    if(S.length?k.sens<1:k.area<1){return;}\n    var close;\n    if(all){close=S.length?k.sens>=3:k.area>=5;}\n    else{close=k.area===n;}\n    rows.push({f:f,k:k,close:close});\n  });\n  rows.sort(function(a,b){\n    return (b.close-a.close)||(b.k.fit-a.k.fit)||(b.k.area-a.k.area)||(b.k.ev-a.k.ev)||(b.k.lead-a.k.lead)||(b.k.sfirst-a.k.sfirst)||sortByName(a.f,b.f);\n  });\n  var close=rows.filter(function(x){return x.close;});\n  return {all:rows,list:close.length?close:rows,fallback:close.length?false:rows.length>0};\n}\n\/* the sensations worth offering: the ones that list at least one feeling for the chosen areas *\/\nfunction liveSens(){\n  return DATA.sensations.map(function(s){return s.id;}).filter(function(id){\n    var m=matchFeelings([id]);return m.fallback?false:m.list.length>0;\n  });\n}\n\/* ---- the results, grouped by how they fit ----\n   For every chosen area a feeling has one of three verdicts: \"ok\" (it lists the area and, if a sensation is chosen there, lists at least one\n   of the chosen sensations there), \"clash\" (it lists the area, a sensation is chosen there, and none of the chosen ones is listed), or \"none\"\n   (it does not list the area). A feeling that is ok for every chosen area fits everything. Otherwise it is listed under each chosen area where it\n   is ok, whatever its verdict is elsewhere; it is never listed under an area where it clashes, and a feeling that fits everything is not repeated\n   under the areas. A clash therefore keeps a feeling out of \"fits everything\" and out of that area's own group, and nothing more. Inside a group:\n   the studies first (mapped, then less distinct, then described), then more matched areas, the lead area, the chosen sensation named first, A to Z. *\/\nvar SHOW_CHIPS=8;\nvar openGrp={},openSig='';\nfunction areaVerdict(f,r){\n  var S=sensOf(r),listed=false,ok=false;\n  f.bodyRegions.forEach(function(b){\n    if(b.r!==r){return;}\n    listed=true;\n    if(!S.length){ok=true;}\n    else{if(S.some(function(s){return b.s.indexOf(s)>=0;})){ok=true;}}\n  });\n  if(!listed){return 'none';}\n  return ok?'ok':'clash';\n}\nfunction groupAreas(){\n  var A=state.regions,n=A.length,fit=[],per={},near={};\n  A.forEach(function(r){per[r]=[];});\n  F.forEach(function(f){\n    var ok=0,hit=[];\n    A.forEach(function(r){\n      var v=areaVerdict(f,r);\n      if(v==='ok'){ok++;hit.push(r);}\n    });\n    if(!ok){return;}\n    var it={f:f,ev:EVR[f.evidence],ok:ok,lead:0,sfirst:0},first=f.bodyRegions[0];\n    if(hit.indexOf(first.r)>=0){it.lead=1;}\n    f.bodyRegions.forEach(function(b){\n      if(hit.indexOf(b.r)<0){return;}\n      if(sensOf(b.r).indexOf(b.s[0])>=0){it.sfirst++;}\n    });\n    if(ok===n){fit.push(it);}\n    else{hit.forEach(function(r){per[r].push(it);});near[f.id]=1;}\n  });\n  function cmp(a,b){return (b.ev-a.ev)||(b.ok-a.ok)||(b.lead-a.lead)||(b.sfirst-a.sfirst)||sortByName(a.f,b.f);}\n  fit.sort(cmp);\n  A.forEach(function(r){per[r].sort(cmp);});\n  return {fit:fit,per:per,near:Object.keys(near).length};\n}\n\/* for the harness only *\/\nwindow.__fmGroups=groupAreas;\n\/* one feeling: a chip with its lowercase name; a tap opens its card as before *\/\nfunction resultChip(it){\n  var b=el('button','fm-chip fm-res',lower(it.f.name));b.type='button';b.setAttribute('data-id',it.f.id);\n  return b;\n}\nfunction renderResults(){\n  var regions=state.regions,all=!!state.allOver,n=all?REGION_IDS.length:regions.length;\n  if(!all){\n    if(regions.length){if(regions.indexOf(state.active)<0){state.active=regions[regions.length-1];}}\n    else{state.active=null;}\n  }\n  syncAreaUI();\n  renderMarkChips();\n  $('allOver').setAttribute('aria-pressed',all?'true':'false');\n  $('clearAreas').hidden=n===0;\n  if(!n){$('resEmpty').hidden=false;$('resBox').hidden=true;return;}\n  $('resEmpty').hidden=true;$('resBox').hidden=false;\n  \/* the question is about the active area, or about the whole body; only what the data lists for it is offered *\/\n  var offered,cur,ask,dropped=[],sq=$('resBox').querySelector('.fm-sensq');\n  if(all){\n    \/* \"all over\" offers the sensations that return something; a chosen one that no longer does is dropped *\/\n    var live=liveSens();\n    dropped=state.sens.filter(function(s){return live.indexOf(s)<0;});\n    if(dropped.length){state.sens=state.sens.filter(function(s){return live.indexOf(s)>=0;});}\n    offered=live;cur=state.sens;ask=\"What's it like all over?\";\n  }else{\n    offered=areaSens(state.active);cur=sensOf(state.active);ask=\"What's it like in your \"+areaNames([state.active])[0]+'?';\n  }\n  sq.setAttribute('data-mode',all?'all':'area');\n  $('sensLbl').textContent=ask;\n  $('sensSel').parentNode.querySelector('label').textContent=ask;\n  Array.prototype.forEach.call($('sensChips').children,function(b){\n    var s=b.getAttribute('data-s');\n    b.hidden=s===''?false:offered.indexOf(s)<0;\n    b.setAttribute('aria-pressed',(s===''?cur.length===0:cur.indexOf(s)>=0)?'true':'false');\n  });\n  if(all){\n    \/* the shared select (phones, \"all over\" only) is rebuilt with the live sensations only (a hidden option still shows on iOS) *\/\n    var ss=$('sensSel');clear(ss);\n    var any=el('option','',ANYTXT);any.value='';ss.appendChild(any);\n    live.forEach(function(id){var o=el('option','',lower(sensById[id].label));o.value=id;ss.appendChild(o);});\n    if(state.sens.length>1){ss.selectedIndex=-1;}else{ss.value=state.sens.length?state.sens[0]:'';}\n  }\n  var names=areaNames(regions),line,out,groups=[],total;\n  \/* the rows are listed in groups: the feelings that were part of the body-map studies, then the common plain-language descriptions *\/\n  function evGroups(list){\n    var g=[{t:'From the body-map studies',l:[]},{t:'Other common descriptions',l:[]}];\n    list.forEach(function(it){g[it.f.evidence==='described'?1:0].l.push(it);});\n    return g;\n  }\n  if(all){\n    var m=matchFeelings(),sn=state.sens.length===1?lower(sensById[state.sens[0]].label):'';\n    out=m.list;total=out.length;\n    var count=out.length+(out.length===1?' feeling':' feelings'),be=out.length===1?'is':'are';\n    if(state.sens.length===1){line=count+' '+be+' often described as '+sn+' in three or more areas of the body.';}\n    else if(state.sens.length>1){line=count+' '+be+' often described that way in three or more areas of the body.';}\n    else{line=count+' '+be+' often noticed in five or more areas of the body. Add what it feels like to narrow it down.';}\n    groups=evGroups(out);\n  }else{\n    var G=groupAreas(),nf=G.fit.length,nc=G.near,hasS=regions.some(function(r){return sensOf(r).length>0;});\n    total=nf+nc;\n    function cnt(k){return k+(k===1?' feeling':' feelings');}\n    if(n===1){\n      var rn=names[0],S1=sensOf(regions[0]),sn1=S1.length===1?lower(sensById[S1[0]].label):'',be1=nf===1?'is':'are';\n      if(nf===0){line='No feelings on this map are described that way in your '+rn+'. Try \"any\", or another word.';}\n      else if(S1.length===1){line=cnt(nf)+' '+be1+' often described as '+sn1+' in the '+rn+'. Tap one to read about it.';}\n      else if(S1.length>1){line=cnt(nf)+' '+be1+' often described that way in the '+rn+'. Tap one to read about it.';}\n      else{line=cnt(nf)+' '+be1+' often noticed in the '+rn+'. Add what it feels like to narrow it down.';}\n    }else{\n      var where=n===2?'both the '+names[0]+' and the '+names[1]:'all '+n+' of these areas';\n      if(nf>0){\n        if(hasS){line=cnt(nf)+(nf===1?' matches':' match')+' everything you chose.';}\n        else{line=cnt(nf)+(nf===1?' is':' are')+' often noticed in '+where+'.';}\n        if(nc>0){line+=' '+nc+' more '+(nc===1?'is':'are')+' close.';}\n      }else{\n        if(nc>0){line='Your '+joinAreas(names)+' point to different feelings. That\\'s common: we often feel more than one thing at once.';}\n        else{line='No feelings on this map match what you chose. Try \"any\" for one of the areas, or another word.';}\n      }\n    }\n    if(nf>0){groups.push({t:n===1?'Fits your '+names[0]:'Fits everything you chose',key:'fit',l:G.fit});}\n    regions.forEach(function(r,i){\n      if(G.per[r].length){groups.push({t:'Fits your '+names[i],key:'a-'+r,l:G.per[r]});}\n    });\n  }\n  $('resLine').textContent=line;\n  \/* each group is a small label and a wrapped set of lowercase feeling names. A group of more than 8 shows its first 8 and has its own \"Show all\";\n     on a phone (640px and below) it becomes a labelled select that lists every feeling in it. A tap opens the feeling's card the way it always has. *\/\n  var sig=all?'all':regions.join();\n  if(sig!==openSig){openSig=sig;openGrp={};}\n  var rows=$('rows');clear(rows);\n  var gi=0;\n  groups.forEach(function(g){\n    if(!g.l.length){return;}\n    var key=g.key||g.t,big=g.l.length>SHOW_CHIPS,open=!!openGrp[key],lim=big?(open?g.l.length:SHOW_CHIPS):g.l.length,k;\n    var hid='rg-'+gi;gi++;\n    var lb=el('p','fm-lbl fm-grp',g.t);lb.id=hid;rows.appendChild(lb);\n    var set=el('div','fm-chips'+(big?' swap':''));set.setAttribute('role','group');set.setAttribute('aria-labelledby',hid);\n    for(k=0;k<lim;k++){set.appendChild(resultChip(g.l[k]));}\n    rows.appendChild(set);\n    if(big){\n      var w=el('div','fm-selectwrap swap fm-ressel'),sel=el('select','fm-select');\n      sel.setAttribute('aria-labelledby',hid);\n      var ph=el('option','','Choose a feeling');ph.value='';sel.appendChild(ph);\n      g.l.forEach(function(it){var o=el('option','',lower(it.f.name));o.value=it.f.id;sel.appendChild(o);});\n      sel.addEventListener('change',function(){var v=this.value;this.value='';if(v){openFeeling(v,'body');}});\n      w.appendChild(sel);rows.appendChild(w);\n      var mb=el('button','fm-link fm-resmore',open?'Show fewer':('Show all '+g.l.length));mb.type='button';\n      mb.setAttribute('data-g',key);mb.setAttribute('aria-expanded',open?'true':'false');\n      rows.appendChild(mb);\n    }\n  });\n  $('moreRows').hidden=true;\n  $('chestWarn').hidden=!(regions.indexOf('chest')>=0||regions.indexOf('throat')>=0);\n  if(dropped.length){say('Cleared '+dropped.map(function(s){return lower(sensById[s].label);}).join(' and ')+'. It isn\\'t listed for these areas.');}\n}\n\/*SLOT block 5 end*\/\n\/*SLOT block 1 begin*\/\n\/* ---------- the feeling card ---------- *\/\n\/* First view: the word, its core, what it is and what it can be telling you (each the first sentence of the author's own text),\n   and five closed section buttons. Everything else sits one tap away, one section open at a time. Nothing here rewrites the author's\n   sentences: the split was made once at build time (defFirst, defRest, msgFirst, msgRest). *\/\nfunction evidenceText(ev){\n  if(ev==='mapped'){return ['Body-map studies','Where it\\'s felt matches the average body maps in research. The words for what it feels like are common descriptions. It is a pattern across many people, not a reading of you.',''];}\n  if(ev==='mapped-less-distinct'){return ['Studied, less clear','This was in the body-map studies, but the pattern was less clear-cut than for the basic emotions. Treat it as a loose guide.',''];}\n  return ['Commonly described','','d'];\n}\nvar SECS=[['body','In your body'],['for',\"What it's for\"],['conf','Easily confused with'],['help','What helps'],['know','Did you know?']];\nfunction familyOf(id){return WHEEL[wheelIx[coreOf(id)]];}\nfunction openFeeling(id,origin,quiet,pairWith){\n  var f=byId[id];if(!f){return;}\n  if(state.feeling!==id){if(!pairWith){state.sec=null;sentReset();}state.second=pairWith?pairWith:null;}\n  state.feeling=id;state.origin=origin?origin:'words';\n  hashSync(id);\n  var free=false;if(!state.core){if(!state.special){free=true;}}\n  if(origin!=='words'||free){state.core=coreOf(id);state.special=null;}\n  syncAZ();\n  renderCard(f);\n  renderBodyMarks();\n  markWheel();\n  say(f.name+(origin==='wheel'||origin==='browse'?' card opened below.':' card opened.'));\n  if(!quiet){scrollToCard();}\n}\nfunction para(text,cls){return el('p',cls||'',text);}\n\/* ---------- push19: what helps, widened; the fuller sentence; a link to each card; copy my check-ins ----------\n   Wording is data (DATA.wheel[].ways, feelings[].ways, .helpNote, .under) or the UI object below. The card shows it inside the sections the reader has already opened.\n   Nothing here is stored: the fuller sentence lives in memory while the same card is open, and is saved only with a check-in, when history is on and the reader\n   chooses \"Save this check-in\". A tap inside the figure never scrolls; only a page load with a card address, or a tap on a link to a card, does. *\/\nvar UI={\"waysLabel\":\"Other ways to try\",\"qLabel\":\"A question to ask yourself\",\"q\":\"What is this feeling pushing you to do, and does that fit what's actually happening?\",\"qAfter\":\"If it fits, the feeling is pointing at something real, so look at what you can do about it. If it doesn't, you can choose a different next step, even a small one.\",\"fsToggle\":\"Make it a fuller sentence\",\"fsLabelA\":\"What's it about?\",\"fsHintA\":\"work, a friend, tomorrow\",\"fsLabelB\":\"What do you need?\",\"fsHintB\":\"some time alone, a hug, a plan\",\"fsYour\":\"Your sentence\",\"fsCopy\":\"Copy my sentence\",\"copied\":\"Copied\",\"fsDone\":\"Sentence copied.\",\"fsFail\":\"Copying didn't work in this browser. You can select the sentence above and copy it yourself.\",\"fsPrivOff\":\"Nothing you type here is saved or sent anywhere.\",\"fsPrivOn\":\"If you save this check-in, your sentence is saved with it, only on this device.\",\"linkCopy\":\"Copy a link to this feeling\",\"linkDone\":\"Link copied\",\"linkShare\":\"Share this feeling\",\"shareTitle\":\"The Feelings Map\",\"shareText\":\", on the Feelings Map\",\"linkFail\":\"Copying didn't work in this browser. Here's the link to copy yourself:\",\"hcCopy\":\"Copy my check-ins\",\"hcShare\":\"Share my check-ins\",\"hcTitle\":\"My check-ins\",\"hcHead\":\"My check-ins from The Feelings Map\",\"hcDone\":\"Your check-ins are copied. You can paste them into a message or a note.\",\"hcFail\":\"Copying didn't work in this browser. The text is below, ready to copy.\"};\nvar SENT={a:'',b:'',open:false};\nfunction sentReset(){SENT.a='';SENT.b='';SENT.open=false;}\nfunction shareOk(){var c=false;try{if(navigator.share){c=!!window.matchMedia('(pointer: coarse)').matches;}}catch(e){c=false;}return c;}\nfunction linkFor(id){return window.location.origin+window.location.pathname+'#feel-'+id;}\n\/* copy: the clipboard API first, then the old selection route; the third answer is \"could not\", and the caller then shows the text to copy by hand *\/\nfunction copyText(t,ok,fail){\n  var back=document.activeElement;\n  function legacy(){\n    var ta=document.createElement('textarea'),done=false;\n    ta.value=t;ta.setAttribute('readonly','');ta.setAttribute('aria-hidden','true');\n    ta.style.cssText='position:fixed;left:-9999px;top:0;opacity:0';\n    document.body.appendChild(ta);\n    try{ta.focus({preventScroll:true});ta.select();done=document.execCommand('copy');}catch(e){done=false;}\n    document.body.removeChild(ta);\n    if(back){try{back.focus({preventScroll:true});}catch(e2){}}\n    return done;\n  }\n  try{\n    if(navigator.clipboard){if(navigator.clipboard.writeText){\n      navigator.clipboard.writeText(t).then(ok,function(){if(legacy()){ok();}else{fail();}});\n      return;\n    }}\n  }catch(e3){}\n  if(legacy()){ok();}else{fail();}\n}\nfunction doShare(data,ok,fail){\n  try{navigator.share(data).then(ok,function(err){if(err){if(err.name==='AbortError'){return;}}fail();});}catch(e){fail();}\n}\nfunction flash(btn,txt,orig){\n  btn.textContent=txt;\n  window.setTimeout(function(){if(btn.textContent===txt){btn.textContent=orig;}},3000);\n}\n\/* the \"could not copy\" answer: one line, and the text in a read-only field, selected, when there is text to copy by hand *\/\nfunction showFail(host,msg,text,multi){\n  var old=host.querySelector('.fm-copyfail');if(old){host.removeChild(old);}\n  var d=el('div','fm-copyfail');d.appendChild(el('p','fm-small',msg));\n  if(text){\n    var fld=multi?el('textarea','fm-field fm-fieldarea'):el('input','fm-field');\n    if(multi){fld.rows=8;}else{fld.type='text';}\n    fld.readOnly=true;fld.value=text;fld.setAttribute('aria-label',msg);\n    d.appendChild(fld);host.appendChild(d);\n    try{fld.focus({preventScroll:true});fld.select();}catch(e){}\n  }else{host.appendChild(d);}\n}\n\/* ---- the fuller sentence ---- *\/\nfunction sentText(f){\n  var a=SENT.a.replace(\/^\\s+|\\s+$\/g,''),b=SENT.b.replace(\/^\\s+|\\s+$\/g,'');\n  return \"I'm feeling \"+pairName(f)+' about '+(a?a:'___')+', and I need '+(b?b:'___')+'.';\n}\nfunction sentPaint(){\n  var out=$('fsOut'),f=state.feeling?byId[state.feeling]:null;\n  if(!out){return;}\n  if(!f){return;}\n  var em=out.querySelector('em');clear(em);\n  var a=SENT.a.replace(\/^\\s+|\\s+$\/g,''),b=SENT.b.replace(\/^\\s+|\\s+$\/g,'');\n  function blank(){var s=el('span','','___');s.setAttribute('aria-hidden','true');var v=el('span','fm-vh','blank');var w=document.createDocumentFragment();w.appendChild(s);w.appendChild(v);return w;}\n  em.appendChild(document.createTextNode(\"I'm feeling \"+pairName(f)+' about '));\n  if(a){em.appendChild(document.createTextNode(a));}else{em.appendChild(blank());}\n  em.appendChild(document.createTextNode(', and I need '));\n  if(b){em.appendChild(document.createTextNode(b));}else{em.appendChild(blank());}\n  em.appendChild(document.createTextNode('.'));\n}\nfunction fullerBlock(f){\n  var wrap=el('div','fm-fswrap');\n  var p=el('p','fm-plinks');\n  var tg=el('button','fm-link',UI.fsToggle);tg.type='button';tg.id='fsToggle';tg.setAttribute('data-act','fstoggle');\n  tg.setAttribute('aria-expanded',SENT.open?'true':'false');tg.setAttribute('aria-controls','fsBox');\n  p.appendChild(tg);wrap.appendChild(p);\n  var bx=el('div','fm-fuller');bx.id='fsBox';bx.hidden=!SENT.open;\n  var l1=el('label','fm-lbl',UI.fsLabelA);l1.setAttribute('for','fsA');bx.appendChild(l1);\n  var i1=el('input','fm-field');i1.type='text';i1.id='fsA';i1.maxLength=120;i1.value=SENT.a;i1.placeholder=UI.fsHintA;i1.setAttribute('autocomplete','off');bx.appendChild(i1);\n  var l2=el('label','fm-lbl',UI.fsLabelB);l2.setAttribute('for','fsB');bx.appendChild(l2);\n  var i2=el('input','fm-field');i2.type='text';i2.id='fsB';i2.maxLength=120;i2.value=SENT.b;i2.placeholder=UI.fsHintB;i2.setAttribute('autocomplete','off');bx.appendChild(i2);\n  bx.appendChild(el('p','fm-lbl fm-gap',UI.fsYour));\n  var out=el('p','fm-sentence fm-fsout');out.id='fsOut';out.appendChild(el('em'));bx.appendChild(out);\n  var cb=el('button','fm-btn ghost',UI.fsCopy);cb.type='button';cb.setAttribute('data-act','fscopy');cb.id='fsCopy';\n  var row=el('div','fm-actions fm-fsact');row.appendChild(cb);bx.appendChild(row);\n  bx.appendChild(el('p','fm-small fm-fspriv',historyOn()?UI.fsPrivOn:UI.fsPrivOff));\n  wrap.appendChild(bx);\n  return wrap;\n}\n\/* everything new in \"What helps\", after the sentence line and before \"Read more\": the fuller sentence, other ways to try, a question, a help note (helpless) *\/\nfunction helpExtras(f,box){\n  box.appendChild(fullerBlock(f));\n  var ways=f.ways?f.ways:familyOf(f.id).ways;\n  if(ways){if(ways.length){\n    box.appendChild(el('p','fm-lbl fm-gap',UI.waysLabel));\n    var ul=el('ul','fm-ways');\n    ways.forEach(function(w){ul.appendChild(el('li','',w));});\n    box.appendChild(ul);\n  }}\n  \/* the question is for the cards that push toward fight, flight, hiding or giving up: pleasantness under 50, and not the care card *\/\n  if(f.p<50){if(!f.care){\n    box.appendChild(el('p','fm-lbl fm-gap',UI.qLabel));\n    box.appendChild(para(UI.q));\n    box.appendChild(para(UI.qAfter,'fm-small'));\n  }}\n  if(f.helpNote){\n    var hn=f.helpNote,hp=el('p','');\n    hp.appendChild(document.createTextNode(hn.before));\n    var ha=el('a','',hn.link);ha.href='#you-dont-have-to-sort-it-out-alone';hp.appendChild(ha);\n    hp.appendChild(document.createTextNode(hn.after));\n    box.appendChild(hp);\n  }\n}\n\/* ---------- push22: two feelings in one check-in; patterns over time ----------\n   A second feeling lives in memory only (state.second): it is never stored unless the reader saves a check-in, when it goes into the same record as an optional\n   second id (f2). Any route that opens a different card clears it. Choosing, changing and removing it only change the card's own panel and the live region: nothing\n   is rebuilt, nothing scrolls, and focus stays on the select. The patterns are worked out from the saved check-ins each time the history is drawn, and are shown\n   only while history is on and three or more are saved. Nothing new is stored. *\/\nvar UI2={twoLbl:'Feeling something else too?',twoSel:'Add a second feeling',twoNone:'choose a feeling',twoTell:'What it can be telling you',twoOpen:'Open its full card',twoRemove:'Remove',twoRemoved:'Second feeling removed.',\n  patLbl:'Your patterns',patWhere:'Where you noticed it most: ',patNote:'This is just for noticing, not a score. If one family keeps coming up, the \"What helps\" section on its cards is a good place to start, and it can be worth bringing to a therapist.'};\nstate.second=null;\n\/* the card's word, or the pair as \"a and b\" (lower case) *\/\nfunction pairName(f){\n  var a=lower(f.name);\n  if(state.second){if(byId[state.second]){if(state.second!==f.id){a+=' and '+lower(byId[state.second].name);}}}\n  return a;\n}\nfunction secondBlock(f){\n  var wrap=el('div','fm-two');\n  wrap.appendChild(el('p','fm-lbl',UI2.twoLbl));\n  var lb=el('label','fm-small fm-twolab',UI2.twoSel);lb.setAttribute('for','fmSecond');wrap.appendChild(lb);\n  var sel=el('select','fm-select');sel.id='fmSecond';\n  var ph=el('option','',UI2.twoNone);ph.value='';sel.appendChild(ph);\n  WHEEL.forEach(function(w){\n    var og=document.createElement('optgroup');og.label=lower(byId[w.core].name);\n    wheelWords(w.core).forEach(function(id){\n      if(id===f.id){return;}\n      var o=el('option','',lower(byId[id].name));o.value=id;og.appendChild(o);\n    });\n    if(og.children.length){sel.appendChild(og);}\n  });\n  sel.value=state.second?state.second:'';\n  wrap.appendChild(sel);\n  twoPanel(wrap);\n  return wrap;\n}\n\/* the compact panel under the select, in the card's own panel style; it exists only while a second feeling is chosen *\/\nfunction twoPanel(wrap){\n  var old=wrap.querySelector('#fmTwoPanel');if(old){wrap.removeChild(old);}\n  var id=state.second;if(!id){return;}\n  var g=byId[id];if(!g){return;}\n  var pn=el('div','fm-panel fm-twopanel');pn.id='fmTwoPanel';pn.setAttribute('role','group');pn.setAttribute('aria-labelledby','fmTwoName');\n  var h=el('h4','fm-twoname');h.id='fmTwoName';\n  var d=el('i','fm-dot');d.style.background=rgbHex(wordRGB(id));d.setAttribute('aria-hidden','true');\n  h.appendChild(d);h.appendChild(document.createTextNode(lower(g.name)));\n  pn.appendChild(h);\n  pn.appendChild(para(g.defFirst));\n  pn.appendChild(el('p','fm-lbl',UI2.twoTell));\n  pn.appendChild(para(g.msgFirst));\n  var pl=el('p','fm-plinks');\n  var ob=el('button','fm-link',UI2.twoOpen);ob.type='button';ob.setAttribute('data-act','two-open');\n  var rb=el('button','fm-link',UI2.twoRemove);rb.type='button';rb.setAttribute('data-act','two-remove');\n  pl.appendChild(ob);pl.appendChild(rb);pn.appendChild(pl);\n  wrap.appendChild(pn);\n}\nfunction setSecond(id){\n  var f=state.feeling?byId[state.feeling]:null;if(!f){return;}\n  if(id){if(!byId[id]){id='';}}\n  if(id===f.id){id='';}\n  var had=state.second;\n  state.second=id?id:null;\n  var wrap=$('card').querySelector('.fm-two');\n  if(wrap){twoPanel(wrap);}\n  var sel=$('fmSecond');if(sel){if(sel.value!==(id?id:'')){sel.value=id?id:'';}}\n  sentPaint();\n  \/* a different pair is a different check-in: a saved one can be saved again *\/\n  var sv=$('card').querySelector('[data-act=\"save\"]');\n  if(sv){if(sv.disabled){sv.disabled=false;sv.textContent='Save this check-in';}}\n  if(id){say(byId[id].name+' added. Holding two feelings: '+lower(f.name)+' and '+lower(byId[id].name)+'.');}\n  else{if(had){say(UI2.twoRemoved);}}\n}\nfunction removeSecond(){\n  setSecond('');\n  var sel=$('fmSecond');if(sel){try{sel.focus({preventScroll:true});}catch(e){sel.focus();}}\n}\n\/* \"Open its full card\": the second word becomes the card and the first becomes the second; the pair is kept. Nothing scrolls. *\/\nfunction openSecond(){\n  var a=state.feeling,b=state.second;if(!a||!b){return;}\n  \/* the card is rebuilt, and a browser's scroll anchoring can move the page when the rebuilt card is laid out; put it back where it was *\/\n  var y=window.pageYOffset;\n  holdUnder=true;\n  try{openFeeling(b,'card',true,a);}finally{holdUnder=false;}\n  if(window.pageYOffset!==y){try{window.scrollTo({top:y,left:0,behavior:'instant'});}catch(e){window.scrollTo(0,y);}}\n  var hd=$('cardTitle');if(hd){try{hd.focus({preventScroll:true});}catch(e){hd.focus();}}\n}\n$('card').addEventListener('change',function(ev){\n  var t=ev.target;\n  if(t.id!=='fmSecond'){return;}\n  setSecond(t.value);\n});\n\/* the check-in as a name: \"a and b\" when it holds two feelings (a saved check-in from before this has one word and reads as it always did) *\/\nfunction histNames(it,cap){\n  var a=byId[it.f]?(cap?byId[it.f].name:lower(byId[it.f].name)):it.f;\n  if(it.f2){if(byId[it.f2]){if(it.f2!==it.f){a+=' and '+lower(byId[it.f2].name);}}}\n  return a;\n}\n\/* ---- patterns over time: worked out from the newest 30 saved check-ins, a check-in with two feelings counts both words ---- *\/\nfunction patternData(items){\n  var use=items.length>30?items.slice(items.length-30):items.slice();\n  var fam={},areas={},out={n:use.length,fams:[],areas:[]};\n  use.forEach(function(it){\n    var ids=[it.f];\n    if(it.f2){if(it.f2!==it.f){ids.push(it.f2);}}\n    ids.forEach(function(id,ix){\n      var c=coreOfId[id];\n      if(!c){if(ix===0){c=it.c;}}\n      if(c){if(byId[c]){fam[c]=(fam[c]?fam[c]:0)+1;}}\n    });\n    var seen={};\n    regionsOf(it.r).forEach(function(r){if(!seen[r]){seen[r]=1;areas[r]=(areas[r]?areas[r]:0)+1;}});\n  });\n  Object.keys(fam).forEach(function(c){out.fams.push({core:c,n:fam[c]});});\n  out.fams.sort(function(a,b){return b.n-a.n||wheelIx[a.core]-wheelIx[b.core];});\n  Object.keys(areas).forEach(function(r){out.areas.push({id:r,n:areas[r]});});\n  out.areas.sort(function(a,b){return b.n-a.n||REGORDER.indexOf(a.id)-REGORDER.indexOf(b.id);});\n  return out;\n}\nfunction renderPatterns(h){\n  var box=$('histPatterns');if(!box){return;}\n  clear(box);\n  var show=false;\n  if(h.on===true){if(h.items.length>=3){show=true;}}\n  box.hidden=!show;\n  if(!show){return;}\n  var d=patternData(h.items);\n  function famText(list){return list.map(function(x){return lower(byId[x.core].name)+' '+x.n;}).join(', ');}\n  box.appendChild(el('p','fm-lbl',UI2.patLbl));\n  box.appendChild(el('p','fm-small fm-patline','Across your last '+d.n+(d.n===1?' check-in:':' check-ins:')));\n  if(d.fams.length){\n    var strip=el('div','fm-strip');strip.setAttribute('role','img');strip.setAttribute('aria-label',famText(d.fams));\n    d.fams.forEach(function(x){\n      var s=el('span','fm-seg');s.style.flex=x.n+' 1 0%';s.style.background=rgbHex(famRGB(x.core,null));\n      strip.appendChild(s);\n    });\n    box.appendChild(strip);\n    var top=d.fams.slice(0,5),line=famText(top);\n    if(d.fams.length>5){line+=' and '+(d.fams.length-5)+' more';}\n    box.appendChild(el('p','fm-patfams',line));\n  }\n  if(d.areas.length){\n    var tops=d.areas.slice(0,3).map(function(x){return areaNames([x.id])[0]+' '+x.n;}).join(', ');\n    box.appendChild(el('p','fm-patfams',UI2.patWhere+tops));\n  }\n  box.appendChild(el('p','fm-small fm-patnote',UI2.patNote));\n}\n\/* ---- a link to each card: the last line of the card ---- *\/\nfunction cardLinkRow(f){\n  var wrap=el('div','fm-cardlink');\n  var p=el('p','fm-plinks');\n  var b=el('button','fm-link',shareOk()?UI.linkShare:UI.linkCopy);b.type='button';b.setAttribute('data-act','copylink');b.id='linkBtn';\n  p.appendChild(b);wrap.appendChild(p);\n  return wrap;\n}\nfunction linkAction(btn){\n  var f=byId[state.feeling];if(!f){return;}\n  var url=linkFor(f.id),host=btn.closest?btn.closest('.fm-cardlink'):null,orig=shareOk()?UI.linkShare:UI.linkCopy;\n  function viaCopy(){\n    copyText(url,function(){\n      flash(btn,UI.linkDone,orig);say('Link to '+lower(f.name)+' copied.');\n      if(host){var o=host.querySelector('.fm-copyfail');if(o){host.removeChild(o);}}\n    },function(){if(host){showFail(host,UI.linkFail,url,false);}});\n  }\n  if(shareOk()){doShare({title:UI.shareTitle,text:f.name+UI.shareText,url:url},function(){},viaCopy);}\n  else{viaCopy();}\n}\nfunction sentAction(btn){\n  var f=byId[state.feeling];if(!f){return;}\n  var host=$('fsBox');\n  copyText(sentText(f),function(){\n    flash(btn,UI.copied,UI.fsCopy);say(UI.fsDone);\n    var o=host?host.querySelector('.fm-copyfail'):null;if(o){host.removeChild(o);}\n  },function(){if(host){showFail(host,UI.fsFail,'',false);}});\n}\nfunction sentToggle(btn){\n  SENT.open=!SENT.open;\n  btn.setAttribute('aria-expanded',SENT.open?'true':'false');\n  var bx=$('fsBox');bx.hidden=!SENT.open;\n  if(SENT.open){sentPaint();var f1=$('fsA');if(f1){try{f1.focus({preventScroll:true});}catch(e){f1.focus();}}}\n}\n$('card').addEventListener('input',function(ev){\n  var t=ev.target;\n  if(t.id==='fsA'){SENT.a=t.value;}else if(t.id==='fsB'){SENT.b=t.value;}else{return;}\n  sentPaint();\n});\n\/* ---- addresses: #feel-{id} opens that card, from a page load, a link tap or a change of address; any other route to a card clears it again ---- *\/\nfunction feelHashId(){\n  var h=window.location.hash;\n  if(h.indexOf('#feel-')!==0){return '';}\n  var id=h.slice(6);\n  try{id=decodeURIComponent(id);}catch(e){}\n  return byId[id]?id:'';\n}\nfunction hashSync(id){\n  var h=window.location.hash;\n  if(h.indexOf('#feel-')!==0){return;}\n  if(h==='#feel-'+id){return;}\n  try{window.history.replaceState(null,'',window.location.pathname+window.location.search);}catch(e){}\n}\nfunction setHash(id){\n  if(window.location.hash==='#feel-'+id){return;}\n  try{window.history.replaceState(null,'',window.location.pathname+window.location.search+'#feel-'+id);}catch(e){}\n}\n\/* open the card, then scroll to it once, after the first layout (one frame and about 80ms, as the A to Z link does) *\/\nfunction openLinked(id){\n  openFeeling(id,'browse',true);\n  window.requestAnimationFrame(function(){window.setTimeout(scrollToCard,80);});\n}\ndocument.addEventListener('click',function(ev){\n  var a=ev.target.closest?ev.target.closest('a[href^=\"#feel-\"]'):null;\n  if(!a){return;}\n  if(ev.defaultPrevented){return;}\n  if(ev.button){return;}\n  if(ev.metaKey||ev.ctrlKey||ev.shiftKey||ev.altKey){return;}\n  var id=a.getAttribute('href').slice(6);\n  if(!byId[id]){return;}\n  ev.preventDefault();\n  setHash(id);\n  openLinked(id);\n});\nwindow.addEventListener('hashchange',function(){\n  var id=feelHashId();\n  if(id){openLinked(id);}\n});\nfunction panelBody(f,key){\n  var box=el('div','fm-pbody');\n  if(key==='body'){\n    var row=el('div','fm-bp');\n    var left=el('div');\n    left.appendChild(para(f.body));\n    var ev=evidenceText(f.evidence);\n    var evp=el('p','fm-evid');evp.appendChild(el('b',ev[2],ev[0]));if(ev[1]){evp.appendChild(document.createTextNode(ev[1]));}\n    left.appendChild(evp);\n    var lk=el('p','fm-plinks');\n    var sb=el('button','fm-link','See it on the body');sb.type='button';sb.setAttribute('data-act','body');lk.appendChild(sb);\n    if(state.origin==='body'){var bk=el('button','fm-link','Back to the body map');bk.type='button';bk.setAttribute('data-act','back');lk.appendChild(bk);}\n    left.appendChild(lk);\n    row.appendChild(left);\n    var mb=el('div','fm-minibody');mb.innerHTML=bodySVG({marks:marksFor(f.id),mini:true});row.appendChild(mb);\n    box.appendChild(row);\n  }else if(key==='for'){\n    box.appendChild(para(familyOf(f.id).fn));\n    var rest=[f.defRest,f.msgRest].filter(function(x){return !!x;}).join(' ');\n    if(rest){box.appendChild(para(rest));}\n    if(f.under){box.appendChild(para(f.under));}\n  }else if(key==='conf'){\n    var ul=el('ul','fm-conf');\n    f.confused.forEach(function(c){\n      var li=el('li');\n      if(c.id){var b=el('button','nm',byId[c.id].name);b.type='button';b.setAttribute('data-open',c.id);li.appendChild(b);}\n      else{li.appendChild(el('span','nm',c.label));}\n      li.appendChild(el('span','',c.diff));\n      ul.appendChild(li);\n    });\n    box.appendChild(ul);\n    DATA.pairs.forEach(function(p){\n      if(p.open.indexOf(f.id)>=0){\n        var pl=el('p','fm-plinks');\n        var pb=el('button','fm-link','Compare side by side: '+lower(p.title));pb.type='button';pb.setAttribute('data-pair',p.id);pl.appendChild(pb);\n        box.appendChild(pl);\n      }\n    });\n    var wh=el('div','fm-where');\n    wh.appendChild(el('p','fm-lbl','Where it sits on the wheel'));\n    var wr=el('div','fm-whrow');\n    var mini=el('div');mini.innerHTML=miniWheel(f);wr.appendChild(mini);\n    wr.appendChild(el('p','fm-pos','Pleasantness and energy: '+levelWords(f)+'.'));\n    wh.appendChild(wr);\n    box.appendChild(wh);\n  }else if(key==='help'){\n    var tr=el('div','fm-try');\n    tr.appendChild(el('p','fm-lbl warm','One small thing to try'));\n    tr.appendChild(para(f.try));\n    box.appendChild(tr);\n    var sen=el('p','fm-sentence');sen.appendChild(document.createTextNode('A sentence you could use: '));\n    var em=el('em','','I\\'m feeling '+lower(f.name)+sentTail());\n    sen.appendChild(em);box.appendChild(sen);\n    helpExtras(f,box);\n    if(f.link){\n      var lkd=LINKS[f.link.slug];\n      if(lkd){\n        var pl2=el('p','',''),pre=el('span','fm-small','Read more: ');\n        pl2.style.marginTop='12px';pl2.appendChild(pre);\n        var la=el('a','',lkd.title);la.href=lkd.url;pl2.appendChild(la);\n        pl2.appendChild(el('span','fm-small',' '+f.link.why));\n        box.appendChild(pl2);\n      }\n    }\n  }else if(key==='know'){\n    box.appendChild(para(f.know?f.know:familyOf(f.id).know));\n  }\n  return box;\n}\nfunction renderCard(f){\n  var card=$('card');clear(card);\n  var core=coreOf(f.id);\n  var h=el('h3','',f.name);h.id='cardTitle';h.tabIndex=-1;card.appendChild(h);\n  card.appendChild(el('p','fm-pos fm-corel',core===f.id?'A core feeling':'Core feeling: '+coreName(core)));\n  card.appendChild(para(f.defFirst,'fm-what'));\n  card.appendChild(el('p','fm-lbl fm-tell','What it can be telling you'));\n  card.appendChild(para(f.msgFirst,'fm-what'));\n  if(f.care){\n    var care=el('div','fm-care');\n    care.appendChild(el('p','',\"If this feeling is very heavy, or you've started to think about ending your life, please reach out to someone today. If you might act on those thoughts, or you're in danger, call your local emergency number.\"));\n    var p2=el('p');var a=el('a','','The box near the end of this page');a.href='#you-dont-have-to-sort-it-out-alone';p2.appendChild(a);p2.appendChild(document.createTextNode(' links to our helplines page.'));\n    if(LINKS['suicidal-thoughts']){p2.appendChild(document.createTextNode(' Our article on '));var a2=el('a','','suicidal thoughts');a2.href=LINKS['suicidal-thoughts'].url;p2.appendChild(a2);p2.appendChild(document.createTextNode(' explains what helps.'));}\n    care.appendChild(p2);card.appendChild(care);\n  }\n  var acc=el('div','fm-acc');\n  SECS.forEach(function(s){\n    var b=el('button','fm-sec');b.type='button';b.id='fmsec-'+s[0];\n    b.setAttribute('data-sec',s[0]);b.setAttribute('aria-expanded','false');b.setAttribute('aria-controls','fmpan-'+s[0]);\n    b.appendChild(el('span','',s[1]));\n    var mk=el('span','fm-secmark');mk.setAttribute('aria-hidden','true');b.appendChild(mk);\n    acc.appendChild(b);\n    var pn=el('div','fm-panel');pn.id='fmpan-'+s[0];pn.setAttribute('role','region');pn.setAttribute('aria-labelledby','fmsec-'+s[0]);pn.hidden=true;\n    pn.appendChild(panelBody(f,s[0]));\n    acc.appendChild(pn);\n  });\n  card.appendChild(acc);\n  card.appendChild(secondBlock(f));\n  sentPaint();\n  \/* the action row: Save this check-in (always there) beside the link. With history off, the first tap opens the opt-in in place, under the row. *\/\n  var row=el('div','fm-actions fm-saverow');\n  if(CONFIG.history){\n    var sv=el('button','fm-btn ghost','Save this check-in');sv.type='button';sv.setAttribute('data-act','save');\n    if(!historyOn()){sv.setAttribute('aria-expanded','false');sv.setAttribute('aria-controls','saveConsent');}\n    row.appendChild(sv);\n  }\n  row.appendChild(cardLinkRow(f));\n  card.appendChild(row);\n  if(CONFIG.history){\n    if(!historyOn()){\n      var cons=el('div','fm-consent');cons.id='saveConsent';cons.hidden=true;\n      var lab=el('label','fm-switch');var inp=document.createElement('input');inp.type='checkbox';inp.id='histOptIn';lab.appendChild(inp);\n      var trk=el('span','fm-track');trk.setAttribute('aria-hidden','true');lab.appendChild(trk);lab.appendChild(el('span','','Keep a private history on this device'));\n      cons.appendChild(lab);\n      cons.appendChild(el('p','fm-small',\"Off unless you turn it on. When it's on, we can't see your check-ins, and clearing your browser data deletes them.\"));\n      cons.appendChild(el('p','fm-small','Nothing you tap here is saved or sent anywhere.'));\n      card.appendChild(cons);\n    }\n  }\n  card.setAttribute('aria-labelledby','cardTitle');\n  card.hidden=false;\n  applySec(false);\n  if(!REDUCE){card.classList.remove('fm-in');void card.offsetWidth;card.classList.add('fm-in');}\n}\n\/* one section open at a time: opening one closes the one that was open, and nothing is open to begin with *\/\nfunction applySec(animate){\n  SECS.forEach(function(s){\n    var b=$('fmsec-'+s[0]),pn=$('fmpan-'+s[0]);\n    if(!b||!pn){return;}\n    var on=state.sec===s[0],was=!pn.hidden;\n    b.setAttribute('aria-expanded',on?'true':'false');\n    b.classList.toggle('open',on);\n    pn.hidden=!on;\n    if(on){if(!was){if(animate){if(!REDUCE){pn.classList.remove('fm-in');void pn.offsetWidth;pn.classList.add('fm-in');}}}}\n  });\n}\nfunction openPair(id){\n  state.pair=id;renderPair();\n  var hd=$('pairs');\n  try{hd.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'start'});}catch(e){hd.scrollIntoView();}\n  hd.tabIndex=-1;\n  try{hd.focus({preventScroll:true});}catch(e2){hd.focus();}\n}\n$('card').addEventListener('click',function(ev){\n  var t=ev.target.closest?ev.target.closest('button'):null;\n  if(!t){return;}\n  var sc=t.getAttribute('data-sec');\n  if(sc){\n    \/* the section above closes as this one opens: hold the tapped button where it was, so the page does not jump under the finger. This undoes a jump, it is not a scroll. *\/\n    var secTop0=t.getBoundingClientRect().top;\n    state.sec=(state.sec===sc)?null:sc;applySec(true);\n    var secDy=t.getBoundingClientRect().top-secTop0;\n    if(Math.abs(secDy)>0.5){try{window.scrollBy({left:0,top:secDy,behavior:'instant'});}catch(eSec){window.scrollBy(0,secDy);}}\n    return;\n  }\n  var o=t.getAttribute('data-open');\n  if(o){openFeeling(o,'card');return;}\n  var pr=t.getAttribute('data-pair');\n  if(pr){openPair(pr);return;}\n  var a=t.getAttribute('data-act');\n  if(a==='body'){var s3=$('part-4');try{s3.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'start'});}catch(e){s3.scrollIntoView();}s3.focus({preventScroll:true});}\n  if(a==='back'){var s3b=$('part-4');try{s3b.scrollIntoView({behavior:REDUCE?'auto':'smooth',block:'start'});}catch(e){s3b.scrollIntoView();}s3b.focus({preventScroll:true});}\n  if(a==='save'){saveCheckin(t);}\n  if(a==='copylink'){linkAction(t);}\n  if(a==='fstoggle'){sentToggle(t);}\n  if(a==='fscopy'){sentAction(t);}\n  if(a==='two-open'){openSecond();}\n  if(a==='two-remove'){removeSecond();}\n});\n\n\/*SLOT block 1 end*\/\n\/*SLOT block 2 begin*\/\n\/* ---------- pairs: a pair you can try on (v3-plan\/pairs\/plan.md, push5) ---------- *\/\n\/* Two sides, each with a band in the exact wheel fill of its word (a word that is not on the wheel gets paper); the question that tells them apart with\n   one answer for each side and a quieter third button; the shared note; one line saying where the words sit on the wheel; and a Next button.\n   Choosing an answer only changes classes and aria-pressed on what is already on the page: nothing is rebuilt, nothing scrolls, and nothing takes\n   focus. Changing the pair (a chip, the drop-down, Next, or the link in a card) resets the answer. *\/\nvar PAIRPAPER='#e8e1d5',PAIRPAPERE='#e8e1d5';\nvar pairPick=null;\nfunction pairById(id){var r=null;DATA.pairs.forEach(function(x){if(x.id===id){r=x;}});return r;}\n\/* rest: the word's own wheel fill; full: the family colour at full strength (the core's fill); a word that is not on the wheel has neither *\/\nfunction sideColours(s){\n  if(s.id){if(coreOfId[s.id]){return {rest:rgbHex(wordRGB(s.id)),full:rgbHex(famRGB(coreOfId[s.id],null)),on:true};}}\n  return {rest:PAIRPAPER,full:PAIRPAPERE,on:false};\n}\nfunction pairDot(c){var d=el('i','fm-dot'+(c.on?'':' hollow'));if(c.on){d.style.background=c.rest;}d.setAttribute('aria-hidden','true');return d;}\n\/* where the two words sit on the wheel, in one line made from the data; the words are in lower case.\n   A word that is itself a core feeling says so (\"afraid is a core feeling\") and never \"calm sits under calm\". *\/\nfunction onWheel(w){if(w.id){if(coreOfId[w.id]){return true;}}return false;}\nfunction placed(w){\n  var id=w.id,core=coreOfId[id];\n  if(core===id){return lower(byId[id].name)+' is a core feeling';}\n  return lower(byId[id].name)+' sits under '+coreName(core);\n}\nfunction wheelLine(p){\n  var a=p.a,b=p.b,ao=onWheel(a),bo=onWheel(b);\n  if(ao){if(bo){\n    var ca=coreOfId[a.id],cb=coreOfId[b.id];\n    if(ca===cb){\n      if(a.id===ca){return 'On the wheel, '+coreName(ca)+' is a core feeling and '+lower(byId[b.id].name)+' sits under it.';}\n      if(b.id===cb){return 'On the wheel, '+coreName(cb)+' is a core feeling and '+lower(byId[a.id].name)+' sits under it.';}\n      return 'On the wheel, both sit under '+coreName(ca)+'.';\n    }\n    var second=(b.id===cb)?lower(byId[b.id].name)+' is a core feeling':lower(byId[b.id].name)+(a.id===ca?' sits under ':' under ')+coreName(cb);\n    return 'On the wheel, '+placed(a)+' and '+second+'.';\n  }}\n  var w=ao?a:b,off=ao?b:a;\n  return 'On the wheel, '+placed(w)+'. '+off.label+\" isn't on the wheel.\";\n}\n(function buildPairUI(){\n  var ch=$('pairChips'),sel=$('pairSel');\n  DATA.pairs.forEach(function(p){\n    var b=el('button','fm-chip');b.type='button';b.setAttribute('data-id',p.id);b.setAttribute('aria-pressed','false');\n    var dd=el('span','fm-dots');dd.setAttribute('aria-hidden','true');dd.appendChild(pairDot(sideColours(p.a)));dd.appendChild(pairDot(sideColours(p.b)));\n    b.appendChild(dd);b.appendChild(document.createTextNode(lower(p.title)));ch.appendChild(b);\n    var o=el('option','',lower(p.title));o.value=p.id;sel.appendChild(o);\n  });\n})();\n$('pairChips').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-chip'):null;\n  if(b){state.pair=b.getAttribute('data-id');renderPair();}\n});\n$('pairSel').addEventListener('change',function(){state.pair=this.value;renderPair();});\nfunction renderPair(){\n  var p=pairById(state.pair),ix=0;\n  DATA.pairs.forEach(function(x,i){if(x.id===p.id){ix=i;}});\n  pairPick=null;\n  Array.prototype.forEach.call($('pairChips').children,function(b){b.setAttribute('aria-pressed',b.getAttribute('data-id')===state.pair?'true':'false');});\n  $('pairSel').value=state.pair;\n  \/* the counter and Next sit above the content and are not rebuilt, so a tap on Next never moves them *\/\n  var nx=DATA.pairs[(ix+1)%DATA.pairs.length];\n  $('pairCount').textContent='Pair '+(ix+1)+' of '+DATA.pairs.length;\n  $('pairNext').textContent='Next: '+lower(nx.title)+' '+String.fromCharCode(8594);\n  var box=$('pairBox');clear(box);\n  var cols=[sideColours(p.a),sideColours(p.b)];\n  var wrap=el('div','fm-pair two');wrap.id='pairWrap';\n  [p.a,p.b].forEach(function(s,idx){\n    var c=cols[idx];\n    var d=el('div','fm-side '+(idx===1?'b':'a'));d.style.setProperty('--rest',c.rest);d.style.setProperty('--full',c.full);\n    var rule=el('div','fm-rule');rule.setAttribute('aria-hidden','true');d.appendChild(rule);\n    var h=el('h4','',s.label);h.tabIndex=-1;d.appendChild(h);\n    var body=el('div','fm-sbody');\n    body.appendChild(el('p','fm-line',s.line));\n    var why=idx===1?p.bWhy:p.aWhy;\n    if(why){body.appendChild(el('p','fm-lbl fm-whylbl','Why it matters'));body.appendChild(el('p','fm-why',why));}\n    if(s.id){\n      var lw=el('div','fm-slink');\n      var lk=el('button','fm-link','Read about '+lower(byId[s.id].name));lk.type='button';lk.setAttribute('data-open',s.id);lw.appendChild(lk);body.appendChild(lw);\n    }\n    d.appendChild(body);wrap.appendChild(d);\n  });\n  box.appendChild(wrap);\n  var ask=el('div','fm-ask2');\n  ask.appendChild(el('p','fm-lbl','Ask yourself'));\n  var q=el('p','fm-q',p.ask);q.id='pairQ';ask.appendChild(q);\n  var ans=el('div','fm-answers');ans.setAttribute('role','group');ans.setAttribute('aria-labelledby','pairQ');\n  var answers=[['a',p.ansA,0],['b',p.ansB,1]];\n  if(p.first==='b'){answers=[answers[1],answers[0]];}\n  answers.forEach(function(x){\n    var c=cols[x[2]];\n    var b=el('button','fm-chip fm-ans');b.type='button';b.setAttribute('data-pick',x[0]);b.setAttribute('aria-pressed','false');\n    b.style.setProperty('--full',c.full);\n    b.appendChild(pairDot(c));b.appendChild(el('span','',x[1]));\n    ans.appendChild(b);\n  });\n  \/* the third answer is an equal chip in the same row *\/\n  var th=el('button','fm-chip fm-ans',p.third);th.type='button';th.setAttribute('data-pick','both');th.setAttribute('aria-pressed','false');ans.appendChild(th);\n  ask.appendChild(ans);\n  var echo=el('div','fm-echo');echo.id='pairEcho';echo.hidden=true;ask.appendChild(echo);\n  var both=el('p','fm-both',p.both);both.hidden=true;ask.appendChild(both);\n  if(p.note){ask.appendChild(el('p','fm-pnote',p.note));}\n  box.appendChild(ask);\n  var foot=el('div','fm-pairfoot');\n  foot.appendChild(el('p','fm-wline',wheelLine(p)));\n  box.appendChild(foot);\n}\n\/* an answer, the third button, or the same one again (which clears it): classes and aria-pressed only *\/\nfunction applyPick(){\n  var wrap=$('pairWrap');if(!wrap){return;}\n  wrap.classList.toggle('picked',pairPick==='a'||pairPick==='b');\n  Array.prototype.forEach.call(wrap.querySelectorAll('.fm-side'),function(s,i){s.classList.toggle('on',pairPick===(i===0?'a':'b'));});\n  Array.prototype.forEach.call($('pairBox').querySelectorAll('[data-pick]'),function(b){b.setAttribute('aria-pressed',b.getAttribute('data-pick')===pairPick?'true':'false');});\n  var both=$('pairBox').querySelector('.fm-both');if(both){both.hidden=(pairPick!=='both');}\n  \/* below 760px the two sides stack above the question, so the lit side can be off screen: say which side the answer points to, right under the answers *\/\n  var ec=$('pairEcho');\n  if(ec){\n    clear(ec);\n    if(pairPick==='a'||pairPick==='b'){\n      var pp=pairById(state.pair),sd=pairPick==='a'?pp.a:pp.b,cc=sideColours(sd);\n      ec.style.setProperty('--full',cc.full);\n      ec.appendChild(el('p','','Closer to '+lower(sd.label)+'.'));\n      if(sd.id){var eb=el('button','fm-link','Read about '+lower(byId[sd.id].name));eb.type='button';eb.setAttribute('data-open',sd.id);ec.appendChild(eb);}\n      ec.hidden=false;\n    }else{ec.hidden=true;}\n  }\n}\nfunction nextPair(){\n  var ix=0;DATA.pairs.forEach(function(x,i){if(x.id===state.pair){ix=i;}});\n  state.pair=DATA.pairs[(ix+1)%DATA.pairs.length].id;\n  renderPair();\n  \/* Next is above the content and stays where it is, so focus stays on it too *\/\n}\n$('pairNext').addEventListener('click',nextPair);\n\/* the figure keeps the height of its tallest pair, so Part 4 does not move when the pair changes (measured, at this width, with every pair) *\/\nfunction lockPairs(){\n  var box=$('pairBox');if(!box){return;}\n  var keep=state.pair,keepPick=pairPick,max=0;\n  box.style.minHeight='0px';\n  if(window.innerWidth<760){box.style.minHeight='';return;}\/* a phone: the pairs differ by 400px, and a lock would leave a blank gap; Next is above the content, so nothing there jumps *\/\n  DATA.pairs.forEach(function(x){state.pair=x.id;renderPair();var hh=box.offsetHeight;if(hh>max){max=hh;}});\n  state.pair=keep;renderPair();\n  if(keepPick){pairPick=keepPick;applyPick();}\n  box.style.minHeight=max+'px';\n}\nvar pairW=0;\nwindow.addEventListener('resize',function(){var w=window.innerWidth;if(w!==pairW){pairW=w;lockPairs();}});\n$('pairBox').addEventListener('click',function(ev){\n  var t=ev.target.closest?ev.target.closest('button'):null;\n  if(!t){return;}\n  var o=t.getAttribute('data-open');\n  if(o){openFeeling(o,'pair');return;}\n  var k=t.getAttribute('data-pick');\n  if(k){pairPick=(pairPick===k)?null:k;applyPick();return;}\n});\n\n\/*SLOT block 2 end*\/\n\/*SLOT block 4 begin*\/\n\/* ---------- the A to Z index (push7, v3-plan\/browse\/plan.md) ---------- *\/\n\/* Every feeling once, A to Z, above the card. From 641px a folded toggle opens 57 lowercase chips, each with a dot in its family colour (the core's mid shade,\n   the same fill as the core segment on the wheel); up to 640px a labelled select does the same job. A choice opens the card directly below, quietly: nothing\n   scrolls, and focus stays on the chip or the select. The chips and the select show the open card wherever it was opened from (syncAZ), so there is one state.\n   Nothing here is stored. *\/\nvar azChips=[],azRove=0,azAll=[],azFam=null,azSeen=null,azFamBtns=[],azFamRove=0;\nfunction azPhone(){var m=false;try{m=window.matchMedia('(max-width: 640px)').matches;}catch(e){m=false;}return m;}\n(function buildAZ(){\n  var box=$('azChips'),sel=$('azSel');\n  var list=F.slice().sort(function(a,b){var x=a.name.toLowerCase(),y=b.name.toLowerCase();return x<y?-1:(x>y?1:0);});\n  list.forEach(function(f,i){\n    var b=el('button','fm-azw');b.type='button';b.setAttribute('data-id',f.id);b.setAttribute('aria-pressed','false');\n    b.tabIndex=-1;\n    var d=el('i','fm-dot');d.style.background=rgbHex(famRGB(coreOfId[f.id],null));d.setAttribute('aria-hidden','true');\n    b.appendChild(d);b.appendChild(document.createTextNode(lower(f.name)));\n    azAll.push(b);\n    var o=el('option','',lower(f.name));o.value=f.id;sel.appendChild(o);\n  });\n  var fb=$('azFams');\n  WHEEL.forEach(function(w,ix){\n    var b=el('button','fm-chip');b.type='button';b.setAttribute('data-core',w.core);b.setAttribute('aria-pressed','false');b.setAttribute('aria-controls','azChips');\n    b.tabIndex=ix===0?0:-1;\n    var d=el('i','fm-dot');d.style.background=rgbHex(famRGB(w.core,null));d.setAttribute('aria-hidden','true');\n    b.appendChild(d);b.appendChild(document.createTextNode(coreName(w.core)));\n    fb.appendChild(b);azFamBtns.push(b);\n  });\n})();\n\/* the chips and the select show state.feeling: one pressed chip, or none; the select reads \"Choose a feeling\" when no card is open *\/\nfunction azShow(core){\n  var box=$('azChips');\n  clear(box);azChips=[];azFam=core;\n  azFamBtns.forEach(function(b){setPressed(b,b.getAttribute('data-core')===core);});\n  if(!core){box.hidden=true;return;}\n  azAll.forEach(function(b){if(coreOfId[b.getAttribute('data-id')]===core){box.appendChild(b);azChips.push(b);}});\n  box.setAttribute('aria-label','Feelings in the '+coreName(core)+' family, A to Z');\n  box.hidden=false;azRove=0;\n}\nfunction syncAZ(){\n  if(!azAll){return;}\n  if(!azAll.length){return;}\n  var cur=state.feeling?state.feeling:'',k,hit=-1;\n  if(cur!==azSeen){azSeen=cur;if(cur){if(coreOfId[cur]!==azFam){azShow(coreOfId[cur]);}}}\n  for(k=0;k<azAll.length;k++){setPressed(azAll[k],azAll[k].getAttribute('data-id')===cur);}\n  for(k=0;k<azChips.length;k++){if(azChips[k].getAttribute('data-id')===cur){hit=k;}}\n  if(hit>=0){azRove=hit;}\n  for(k=0;k<azChips.length;k++){azChips[k].tabIndex=k===azRove?0:-1;}\n  var sel=$('azSel');\n  if(sel){if(sel.value!==cur){sel.value=cur;}}\n}\n\/* a choice in the index: the card opens quietly below, and the area above the index is not allowed to change height (holdUnder, in renderUnder) *\/\nfunction pickAZ(id){\n  if(state.feeling===id){if(!$('card').hidden){return;}}\n  holdUnder=true;\n  try{openFeeling(id,'browse',true);}finally{holdUnder=false;}\n}\n$('azFams').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-chip'):null;\n  if(!b){return;}\n  var core=b.getAttribute('data-core');\n  azFamRove=azFamBtns.indexOf(b);\n  azFamBtns.forEach(function(x,k){x.tabIndex=k===azFamRove?0:-1;});\n  azShow(azFam===core?null:core);\n  syncAZ();\n});\n$('azFams').addEventListener('keydown',function(ev){\n  var i=azFamBtns.indexOf(document.activeElement);if(i<0){return;}\n  var n=i,key=ev.key;\n  if(key==='ArrowRight'||key==='ArrowDown'){n=Math.min(azFamBtns.length-1,i+1);}\n  else if(key==='ArrowLeft'||key==='ArrowUp'){n=Math.max(0,i-1);}\n  else if(key==='Home'){n=0;}\n  else if(key==='End'){n=azFamBtns.length-1;}\n  else{return;}\n  ev.preventDefault();\n  azFamRove=n;\n  azFamBtns.forEach(function(x,k){x.tabIndex=k===n?0:-1;});\n  azFamBtns[n].focus();\n});\n$('azChips').addEventListener('click',function(ev){\n  var b=ev.target.closest?ev.target.closest('.fm-azw'):null;\n  if(b){pickAZ(b.getAttribute('data-id'));}\n});\n\/* one tab stop for the 57 chips: arrow keys move between them, Home and End jump *\/\n$('azChips').addEventListener('keydown',function(ev){\n  var i=azChips.indexOf(document.activeElement);if(i<0){return;}\n  var n=i,key=ev.key;\n  var rows=0;azChips.forEach(function(c){if(c.offsetLeft===azChips[0].offsetLeft){rows++;}});if(rows<1){rows=1;}\n  if(key==='ArrowDown'){n=Math.min(azChips.length-1,i+1);}\n  else if(key==='ArrowUp'){n=Math.max(0,i-1);}\n  else if(key==='ArrowRight'){n=Math.min(azChips.length-1,i+rows);}\n  else if(key==='ArrowLeft'){n=Math.max(0,i-rows);}\n  else if(key==='Home'){n=0;}\n  else if(key==='End'){n=azChips.length-1;}\n  else if(key==='Escape'){var fbk=azFamBtns[azFamRove];if(fbk){ev.preventDefault();fbk.focus();}return;}\n  else{return;}\n  ev.preventDefault();\n  azRove=n;\n  azChips.forEach(function(c,k){c.tabIndex=k===n?0:-1;});\n  azChips[n].focus();\n});\n$('azSel').addEventListener('change',function(){\n  var v=this.value;\n  if(v){pickAZ(v);}else{syncAZ();}\n});\n\/* a link to the index (the link under the wheel, the contents entry, #az in the address) unfolds it, and puts focus on the toggle, or on the select on a phone.\n   The jump itself is the browser's own: this is a link, not a tap inside the figure. A browser clears focus when it jumps to a fragment that cannot take focus, so focus is\n   set again a moment later, after the jump. *\/\nfunction focusAZ(){\n  var t=$('azSel');\n  try{t.focus({preventScroll:true});}catch(e){t.focus();}\n}\nfunction openAZ(){\n  focusAZ();\n  window.setTimeout(focusAZ,80);\n}\ndocument.addEventListener('click',function(ev){\n  var a=ev.target.closest?ev.target.closest('a[href=\"#az\"]'):null;\n  if(a){openAZ();}\n});\nwindow.addEventListener('hashchange',function(){if(window.location.hash==='#az'){openAZ();}});\n\/* opened at #az: put focus on the select once the browser has made its own jump, as the link does *\/\nif(window.location.hash==='#az'){\n  var azOnLoad=function(){if(window.location.hash==='#az'){openAZ();}};\n  if(document.readyState==='complete'){azOnLoad();}else{window.addEventListener('load',azOnLoad);}\n}\nsyncAZ();\n\/*SLOT block 4 end*\/\n\/* ---------- optional check-in history (device only, off by default) ---------- *\/\nfunction store(){try{return window.localStorage;}catch(e){return null;}}\nfunction loadH(){\n  var s=store();if(!s){return {on:false,items:[]};}\n  try{var raw=s.getItem(CONFIG.key);if(!raw){return {on:false,items:[]};}var o=JSON.parse(raw);if(!o.items){o.items=[];}return o;}catch(e){return {on:false,items:[]};}\n}\nfunction saveH(o){var s=store();if(!s){return false;}try{s.setItem(CONFIG.key,JSON.stringify(o));return true;}catch(e){return false;}}\nfunction historyOn(){return loadH().on===true;}\nfunction fmtDate(t){try{return new Date(t).toLocaleDateString(undefined,{day:'numeric',month:'short',year:'numeric'})+', '+new Date(t).toLocaleTimeString(undefined,{hour:'2-digit',minute:'2-digit'});}catch(e){return '';}}\nfunction renderHistory(){\n  var h=loadH(),tg=$('histToggle');\n  tg.checked=h.on===true;\n  $('history').hidden=!(h.on||h.items.length>0);\n  $('histTogLbl').textContent=h.items.length?'Your check-ins ('+h.items.length+')':'Your check-ins';\n  $('histOffNote').hidden=!(h.on===false?(h.items.length>0):false);\n  var list=$('histList');clear(list);\n  h.items.slice().reverse().forEach(function(it){\n    var li=el('li');li.appendChild(el('b','',histNames(it,true)));\n    var where='',ra=regionsOf(it.r);if(Array.isArray(it.r)?it.r[0]==='all':false){where='felt all over. ';}else if(ra.length){where='felt in the '+joinAreas(areaNames(ra))+'. ';}\n    var cc=coreOf(it.f)||it.c,cf='';if(cc){if(byId[cc]){if(cc!==it.f){cf='Core feeling: '+lower(byId[cc].name)+'. ';}}}\n    li.appendChild(el('span','',where+cf+fmtDate(it.t)));\n    if(typeof it.s==='string'){if(it.s){li.appendChild(el('span','fm-hsent',it.s));}}\n    list.appendChild(li);\n  });\n  $('histEmpty').hidden=h.items.length>0;\n  $('histActions').hidden=h.items.length===0;\n  $('histHelp').hidden=h.items.length===0;\n  renderPatterns(h);\n  $('privLine').textContent=h.on?'Your private history is on. Check-ins are saved only on this device.':'Nothing you tap here is saved or sent anywhere.';\n}\n\/* push19: the check-ins as text, for a therapy session. Newest first, the same order as the list; the same date as the list (fmtDate). Nothing is stored by copying. *\/\nfunction histLine(it){\n  var nm=histNames(it,false);\n  var s=fmtDate(it.t)+': '+nm;\n  var cc=coreOf(it.f)||it.c;\n  if(cc){if(byId[cc]){if(cc!==it.f){s+='. Core feeling: '+lower(byId[cc].name);}}}\n  var ra=regionsOf(it.r);\n  if(Array.isArray(it.r)?it.r[0]==='all':false){s+='. Felt all over';}\n  else if(ra.length){s+='. Felt in the '+joinAreas(areaNames(ra));}\n  s+='.';\n  if(typeof it.s==='string'){if(it.s){s+='\\n'+it.s;}}\n  return s;\n}\nfunction histText(){\n  var h=loadH();\n  return UI.hcHead+'\\n\\n'+h.items.slice().reverse().map(histLine).join('\\n\\n');\n}\nfunction histLabel(){return shareOk()?UI.hcShare:UI.hcCopy;}\nfunction histCopyAction(btn){\n  var text=histText(),host=$('histFail'),orig=histLabel();\n  function viaCopy(){\n    copyText(text,function(){\n      flash(btn,UI.copied,orig);say(UI.hcDone);\n      var o=host.querySelector('.fm-copyfail');if(o){host.removeChild(o);}\n    },function(){showFail(host,UI.hcFail,text,true);});\n  }\n  if(shareOk()){doShare({title:UI.hcTitle,text:text},function(){},viaCopy);}\n  else{viaCopy();}\n}\nfunction saveCheckin(btn){\n  var h=loadH();\n  if(!h.on){\n    \/* history is off: the first tap opens the opt-in in place; nothing is stored until the switch is turned on *\/\n    var c=$('saveConsent');\n    if(c){c.hidden=!c.hidden;btn.setAttribute('aria-expanded',c.hidden?'false':'true');}\n    return;\n  }\n  doSave(btn,h);\n}\nfunction doSave(btn,h){\n  var item={t:Date.now(),f:state.feeling,c:coreOf(state.feeling),r:state.allOver?['all']:state.regions.slice()};\n  if(SENT.a.replace(\/^\\s+|\\s+$\/g,'')||SENT.b.replace(\/^\\s+|\\s+$\/g,'')){item.s=sentText(byId[state.feeling]);}\n  if(state.second){if(byId[state.second]){if(state.second!==state.feeling){item.f2=state.second;}}}\n  h.items.push(item);\n  if(h.items.length>200){h.items=h.items.slice(h.items.length-200);}\n  saveH(h);renderHistory();\n  btn.textContent='Saved on this device';btn.disabled=true;btn.removeAttribute('aria-expanded');\n  var c=$('saveConsent');if(c){c.hidden=true;}\n  say('Check-in saved on this device.');\n}\nif(CONFIG.history){\n  \/* \"Your check-ins\": a disclosure in the card's own section-button style, under the card slot *\/\n  $('histTog').addEventListener('click',function(){\n    var open=this.getAttribute('aria-expanded')!=='true';\n    this.setAttribute('aria-expanded',open?'true':'false');this.classList.toggle('open',open);$('histPanel').hidden=!open;\n  });\n  \/* the opt-in in the card: turning the switch on turns the history on and saves this check-in. The card is not rebuilt. *\/\n  $('card').addEventListener('change',function(ev){\n    var t=ev.target;\n    if(!t){return;}\n    if(t.id!=='histOptIn'){return;}\n    if(!t.checked){return;}\n    var h=loadH();h.on=true;\n    var b=$('card').querySelector('[data-act=\"save\"]');\n    if(b){doSave(b,h);}else{saveH(h);renderHistory();}\n  });\n  $('histToggle').addEventListener('change',function(){\n    var h=loadH();h.on=this.checked;saveH(h);renderHistory();\n    if(state.feeling){renderCard(byId[state.feeling]);}\n  });\n  var hcb=$('histCopy');hcb.textContent=histLabel();\n  hcb.addEventListener('click',function(){histCopyAction(hcb);});\n  var del=$('histDelete');\n  del.addEventListener('click',function(){\n    if(del.getAttribute('data-arm')!=='1'){del.setAttribute('data-arm','1');del.textContent='Tap again to delete everything';setTimeout(function(){del.removeAttribute('data-arm');del.textContent='Delete all my check-ins';},5000);return;}\n    var h=loadH();h.items=[];saveH(h);renderHistory();\n    del.removeAttribute('data-arm');del.textContent='Delete all my check-ins';\n    say('All check-ins deleted.');\n  });\n  renderHistory();\n}\n\n\/* ---------- misc wiring ---------- *\/\nif(LINKS['name-it-to-tame-it']){$('lnkNIT').href=LINKS['name-it-to-tame-it'].url;}\nif(LINKS['suicidal-thoughts']){\n  var slot=$('sitSlot');clear(slot);\n  slot.appendChild(document.createTextNode('Our article on '));\n  var sa=el('a','','suicidal thoughts');sa.href=LINKS['suicidal-thoughts'].url;slot.appendChild(sa);\n  slot.appendChild(document.createTextNode(' explains what helps and how to talk about it.'));\n}\n$('wayBody').addEventListener('click',function(){setTimeout(function(){try{$('part-4').focus({preventScroll:true});}catch(e){}},50);});\npfInit();renderBodyMarks();renderResults();renderPair();\npairW=window.innerWidth;lockPairs();\ntry{document.fonts.ready.then(function(){lockPairs();});}catch(e){}\nvar feelAtLoad=feelHashId();\nif(feelAtLoad){openLinked(feelAtLoad);}\nwindow.__fm={state:state,openFeeling:openFeeling,chooseCore:chooseCore,chooseLow:chooseLow,pickRegion:pickRegion,coreOf:coreOf,wheelWords:wheelWords,markWheel:markWheel,byId:byId,zoom:function(){return {busy:busy(),anim:!!anim,mode:wheelMode,fitFails:fitFails,focus:state.focus,sub:state.sub};},reset:resetView,focusNow:focusNow,live:liveInfo};\n})();\n<\/script>\n<div hidden data-eq-related=\"2851,2424,3489\"><\/div>\n\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Find the word for what you feel. Tap one of nine core feelings to open its family of finer words, see what each one is telling you, tell look-alike feelings apart, and notice where they show up in your body.<\/p>","protected":false},"author":2,"featured_media":4706,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":334,"footnotes":""},"categories":[15,20],"tags":[],"class_list":["post-3436","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-body-and-mind","category-pocket-tools"],"_links":{"self":[{"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/posts\/3436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/comments?post=3436"}],"version-history":[{"count":20,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/posts\/3436\/revisions"}],"predecessor-version":[{"id":4754,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/posts\/3436\/revisions\/4754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/media\/4706"}],"wp:attachment":[{"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/media?parent=3436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/categories?post=3436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/equilibriumpsychotherapy.net\/hr\/wp-json\/wp\/v2\/tags?post=3436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}