📚 77 Affirmations for Sobriety — Now Available → Get it on Amazon

AFR Arcade

Take a Time Out. Play a game. Reset. Find help.

/* AFR Arcade: paste into PodPage "Custom Javascript Code". Builds the arcade inside

. */ (function(){ var MARKUP=`

In immediate danger? Call 911. In crisis? Call or text 988.

Take a Time Out. Play a game. Reset. Find help.

Fun games with real value from Absolutely Focused Radio, plus help for cravings, stress, discouragement, and tough moments at home. Free. No sign-up. Nothing is saved.

Play now Get help

What do you need right now?

Play

Open in a new tab

Get help

Pick what fits. Nobody here will judge you. If you slipped or lost a round, you're still here, and that counts.

I'm in crisis or thinking about hurting myself

You matter. Reach out right now.

  • 988 Suicide & Crisis Lifeline: call 988 or text 988, or chat at 988lifeline.org. Free, 24/7 (US).
  • Crisis Text Line: text HOME to 741741 (US).
  • In immediate danger: call 911.
I'm having a craving, or I slipped

A craving rises, peaks, and passes. A slip is not the end of your story. Reach out the same day.

  • SAMHSA National Helpline: 1-800-662-4357 (HELP). Free, confidential, 24/7 support and referrals for substance use and mental health.
  • Find a meeting: aa.org or na.org.
  • Call or text one safe person right now.
I'm about to crash out

Don't send it. Don't decide it. Don't drive angry. Give yourself ten minutes.

  • If you're afraid you might hurt someone or yourself, call 988 or 911.
I'm discouraged or overwhelmed

Feeling worn down is human. It's a signal, not a verdict on you.

  • 988: call or text 988 if you're struggling or in emotional distress, not only in a crisis (US).
  • Crisis Text Line: text HOME to 741741 (US).
  • Tell one real person today how you're doing.
I don't feel safe at home

Abuse is never your fault. You deserve to be safe.

  • National Domestic Violence Hotline: call 1-800-799-7233 (SAFE), text START to 88788, or chat at thehotline.org. Free, confidential, 24/7 (US).
  • In immediate danger: call 911.
  • If someone might be watching your phone or computer, use a device they can't access. The Quick exit button at the top leaves this page fast, but it can't erase your browser history.
I need food, housing, or local help
  • 211: call 211 or visit 211.org to find local services (US).
I'm outside the US

Numbers and services listed are for the United States unless noted. This page offers education and support tools, not medical advice or a replacement for professional care.

Keep going with AFR

More Time Out games are coming.

AFR Arcade by Absolutely Focused Radio. Behavior Follows Architecture™. Educational content, not medical advice. In an emergency, call 911.

`; function start(){ var R=document.getElementById('afr-arcade');if(!R||R.getAttribute('data-ready'))return;R.setAttribute('data-ready','1'); R.innerHTML=MARKUP; const $=s=>R.querySelector(s),$$=s=>[...R.querySelectorAll(s)],rm=matchMedia('(prefers-reduced-motion: reduce)').matches,sleep=ms=>new Promise(r=>setTimeout(r,ms)); // ===== GAME LIST: to add a game, copy one entry and change title, url, desc, controls, notes. ===== // url = the web address of the game page. Games open inside this page in an iframe. const GAMES=[ {id:'lil-budd',title:'Lil Budd: Focus Sparks',url:'https://afr-lil-budd.divine-king-83f5.workers.dev/', desc:'Run, jump, and collect 10 Focus Sparks. Stomp the triggers: STRESS, CRAVING, and HALT. Every trigger is a pattern you can notice and reframe.', controls:'Click the game once, then use arrow keys to move and space or up arrow to jump. On a phone, use the on-screen buttons (try Full screen).', notes:'

What the triggers mean

  • STRESS: Pressure piling up. Reframe it: one small step, not the whole mountain.
  • CRAVING: A wave that rises, peaks, and passes. Notice it and ride it out.
  • HALT: Hungry, Angry, Lonely, Tired. The four basics that make everything feel harder. Check them first.

'}, {id:'g2',title:'Game 2: Coming soon',soon:true}, {id:'g3',title:'Game 3: Coming soon',soon:true} ]; const playable=GAMES.filter(g=>!g.soon);let cur=null; $('#more').innerHTML=GAMES.filter(g=>g.soon).map(g=>`

${g.title}

`).join(''); const box=$('#game-box'); function pick(g){cur=g; $$('#picker .btn').forEach(b=>b.setAttribute('aria-pressed',b.dataset.id===g.id)); $('#ginfo').innerHTML=`

${g.title}

${g.desc}

Controls: ${g.controls}

`; $('#gnotes').innerHTML=g.notes||''; const ok=g.url&&g.url.indexOf('PASTE_')!==0; $('#gopen').href=ok?g.url:'#';$('#gopen').hidden=!ok; box.innerHTML=ok?``:'

This game is almost ready. Go to the Reset Room below in the meantime.

'; const p=$('#gplay');if(p)p.addEventListener('click',()=>{box.innerHTML='';const f=document.createElement('iframe');f.src=g.url;f.title=g.title;f.allow='fullscreen; autoplay';f.setAttribute('allowfullscreen','');box.appendChild(f);f.focus()})} $('#picker').innerHTML=playable.map(g=>``).join(''); $$('#picker .btn').forEach(b=>b.addEventListener('click',()=>pick(playable.find(g=>g.id===b.dataset.id)))); $('#gfull').addEventListener('click',()=>{const f=box.requestFullscreen||box.webkitRequestFullscreen;if(f)f.call(box)}); // The game page tells this page when the player wins, so the Reset Room opens. addEventListener('message',e=>{const f=box.querySelector('iframe');if(!f||e.source!==f.contentWindow)return;if(e.data&&e.data.type==='afr:game-won')dispatchEvent(new Event('afr:game-won'))}); if(playable.length)pick(playable[0]); function openReset(win){const r=$('#reset');r.hidden=false;if(win)$('#banner').hidden=false;setTimeout(()=>r.scrollIntoView({behavior:rm?'auto':'smooth'}),win?3000:0)} $('#qx').addEventListener('click',()=>location.replace('https://www.google.com')); $$('[data-help]').forEach(b=>b.addEventListener('click',()=>{const d=$('#'+b.dataset.help);d.open=true;d.scrollIntoView({behavior:rm?'auto':'smooth',block:'start'})})); $$('[data-open]').forEach(b=>b.addEventListener('click',()=>openReset(false))); addEventListener('afr:game-won',()=>openReset(true)); const MAP={stressed:'t-breathe',anxious:'t-ground',crash:'t-pause',minute:'t-halt'}; $$('.mood').forEach(b=>b.addEventListener('click',()=>{$$('.mood').forEach(x=>x.setAttribute('aria-pressed',x===b));$$('.tag').forEach(t=>t.hidden=true);const t=$('#'+MAP[b.dataset.m]);t.querySelector('.tag').hidden=false;t.scrollIntoView({behavior:rm?'auto':'smooth',block:'center'})})); // Breathe let run=0; function bReset(msg){const c=$('#circle');c.style.transition='none';c.style.transform='none';$('#btxt').textContent='Ready when you are.';$('#bstart').disabled=false;$('#bmsg').textContent=msg||''} $('#bstart').addEventListener('click',async()=>{const id=++run,c=$('#circle'),t=$('#btxt');$('#bstart').disabled=true;$('#bmsg').textContent=''; for(let r=0;r<4;r++)for(const [l,s,k] of [['Breathe in',4,1.4],['Hold',4,1.4],['Breathe out',6,1]]){ if(id!==run)return; if(!rm&&l!=='Hold'){c.style.transition='transform '+s+'s ease-in-out';c.style.transform='scale('+k+')'} for(let n=s;n>0;n--){t.textContent=l+' '+n;await sleep(1000);if(id!==run)return}} bReset('Done. Notice how your shoulders feel.')}); $('#bstop').addEventListener('click',()=>{run++;bReset('')}); // Ground const GR=['5 things you can see','4 things you can feel','3 things you can hear','2 things you can smell','1 thing you can taste']; $('#glist').innerHTML=GR.map(t=>`

`).join(''); $('#glist').addEventListener('change',()=>{$('#gmsg').textContent=$$('.gc').every(c=>c.checked)?"You're here. You're present.":''}); // Pause let pt=null,left=600;const fmt=s=>String(Math.floor(s/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0'); function pstop(msg){clearInterval(pt);pt=null;left=600;$('#ptime').textContent=fmt(600);$('#pstart').disabled=false;$('#pmsg').textContent=msg||''} $('#pstart').addEventListener('click',()=>{if(pt)return;$('#pstart').disabled=true;$('#pmsg').textContent='Timer started. You have time.';left=600;pt=setInterval(()=>{left--;$('#ptime').textContent=fmt(left);if(left<=0)pstop('Ten minutes passed. Still want to do it? Choose slowly.')},1000)}); $('#pstop').addEventListener('click',()=>pstop('Stopped early. That counts.')); // HALT const HALT=[['Hungry','Eat something real and drink water.'],['Angry','Name what happened in one sentence. Then step away from it for 10 minutes.'],['Lonely',`Text or call one safe person. "Got a minute?" is enough.`],['Tired','Rest your eyes for 5 minutes, or plan an early night.']]; $('#hlist').innerHTML=HALT.map((h,i)=>`

`).join(''); $('#hlist').addEventListener('change',e=>{$('#h'+e.target.dataset.h).hidden=!e.target.checked}); } if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start);else start(); })();

/* AFR Arcade: paste into PodPage "Custom CSS Code". Scoped to #afr-arcade. */ #afr-arcade{--navy:#0b1f3a;--deep:#081528;--gold:#f2b632;--org:#e8772e;--txt:#e8edf5;color-scheme:dark} #afr-arcade *{box-sizing:border-box} #afr-arcade [hidden]{display:none!important} #afr-arcade{margin:0;background:var(--navy);color:var(--txt);font:17px/1.55 Calibri,Carlito,"Segoe UI",Arial,sans-serif;background-image:linear-gradient(rgba(242,182,50,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(242,182,50,.07) 1px,transparent 1px);background-size:40px 40px} #afr-arcade h1,#afr-arcade h2,#afr-arcade h3{font-family:Cambria,Georgia,serif;color:#fff;line-height:1.2;margin:0 0 .5em} #afr-arcade h1{font-size:clamp(2rem,6vw,3.2rem)} #afr-arcade h2{font-size:clamp(1.5rem,4vw,2rem);color:var(--gold)} #afr-arcade a{color:var(--gold)} #afr-arcade :focus-visible{outline:3px solid #fff;outline-offset:3px} #afr-arcade .top{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top,0px));background:var(--deep);border-bottom:1px solid rgba(242,182,50,.4)} #afr-arcade .brand{display:flex;align-items:center;gap:10px;color:#fff;font:700 1.05rem Cambria,Georgia,serif;text-decoration:none} #afr-arcade .wrap{max-width:1100px;margin:0 auto;padding:28px 16px} #afr-arcade .btn{display:inline-block;min-height:48px;padding:12px 22px;border:0;border-radius:10px;background:var(--gold);color:var(--navy);font:700 1rem/1.2 Calibri,Carlito,Arial,sans-serif;text-decoration:none;cursor:pointer;margin:4px 6px 4px 0} #afr-arcade .btn.alt{background:transparent;color:var(--gold);border:2px solid var(--gold)} #afr-arcade .btn[aria-pressed=true]{background:#fff;color:var(--navy)} #afr-arcade .btn:disabled{opacity:.5;cursor:default} #afr-arcade .panel{background:var(--deep);border:1px solid rgba(242,182,50,.35);border-radius:14px;padding:20px;margin:16px 0} #afr-arcade .grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr))} #afr-arcade #game-box{width:100%;max-width:1100px;margin:16px auto;aspect-ratio:16/9;border:2px solid var(--gold);border-radius:12px;overflow:hidden;background:var(--navy);} #afr-arcade #circle{width:140px;height:140px;border-radius:50%;background:radial-gradient(var(--gold),var(--org));margin:16px auto} #afr-arcade .tag{background:var(--gold);color:var(--navy);font-weight:700;border-radius:6px;padding:2px 8px;font-size:.8rem;margin-left:8px;font-family:Calibri,Carlito,Arial,sans-serif} #afr-arcade .help{border:3px solid #fff} #afr-arcade .help li{margin:10px 0} #afr-arcade .help a{font-weight:700} #afr-arcade .banner{background:var(--gold);color:var(--navy);padding:14px;border-radius:10px;font-weight:700} #afr-arcade .big{font:700 2.4rem Cambria,Georgia,serif;text-align:center;margin:8px 0} #afr-arcade .center{text-align:center} #afr-arcade .dim{opacity:.65;border-style:dashed} #afr-arcade ul.plain{list-style:none;padding:0;margin:0} #afr-arcade ul.plain li{margin:8px 0} #afr-arcade .act{margin:2px 0 8px 28px;color:var(--gold)} #afr-arcade input[type=checkbox]{width:22px;height:22px;vertical-align:middle;accent-color:var(--gold)} #afr-arcade .afoot{text-align:center;padding:24px 16px;font-size:.9rem;color:#b8c3d6} #afr-arcade .lead{font:1.4rem Cambria,Georgia,serif;color:var(--gold)} #afr-arcade .sos{background:var(--gold);color:var(--navy);padding:10px 16px;text-align:center;font-weight:700} #afr-arcade .sos a{color:var(--navy)} #afr-arcade .top nav{display:flex;align-items:center;gap:14px;flex-wrap:wrap} #afr-arcade .qx{min-height:40px;padding:8px 14px;margin:0;background:#fff} #afr-arcade details.panel summary{cursor:pointer;font:700 1.15rem Cambria,Georgia,serif;color:#fff;min-height:44px} #afr-arcade details.panel[open] summary{margin-bottom:10px;color:var(--gold)} #afr-arcade .pick{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))} #afr-arcade .pick .btn{width:100%;margin:0;text-align:center} #afr-arcade{border-radius:12px;overflow:hidden} #afr-arcade{scroll-behavior:smooth} @media (prefers-reduced-motion:reduce){#afr-arcade *{animation:none!important;transition:none!important}} #afr-arcade .top{position:static} #afr-arcade #game-box{position:relative;display:flex;align-items:center;justify-content:center} #afr-arcade #game-box iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;background:#0b1f3a} #afr-arcade #game-box .btn{font-size:1.2rem;padding:16px 30px} #afr-arcade #picker{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0} #afr-arcade #game-box:fullscreen{max-width:none;border:0;border-radius:0} #afr-arcade .setmsg{padding:20px;text-align:center}