A 35-minute contribution session
HTML for this example
Select the code and use your copy shortcut. Changes in this preview are temporary.
<!doctype html><html lang="en-US"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>A 35-minute contribution session</title><style>*{box-sizing:border-box} :root{color-scheme:light;--ink:#20303b;--muted:#536570;--line:#d3dce1;--accent:#245c76;--paper:#fff;--soft:#edf3f6}body{margin:0;background:#f3f5f5;color:var(--ink);font:16px/1.5 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}main{max-width:1080px;margin:auto;padding:30px 32px 64px}header{margin-bottom:20px}h1{font-size:clamp(1.5rem,3vw,2.15rem);line-height:1.18;letter-spacing:-.035em;margin:0 0 8px}h2{font-size:1.22rem;line-height:1.3;margin:0 0 16px}h3{font-size:1rem;margin:0 0 8px}p{margin:8px 0 16px}small,.muted{color:var(--muted)}.eyebrow{font-size:.76rem;letter-spacing:.13em;text-transform:uppercase;font-weight:750;color:var(--accent);margin-bottom:8px}.panel{background:var(--paper);border:1px solid var(--line);padding:24px;border-radius:16px}.grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.stack{display:grid;gap:18px}.fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}label{display:block;font-size:.9rem;font-weight:650}input,select,textarea,button{font:inherit}input,select,textarea{display:block;width:100%;min-width:0;margin-top:6px;border:1px solid #8b9ca6;border-radius:7px;padding:10px 12px;background:white;color:var(--ink)}input,select{min-height:46px}textarea{resize:vertical}button{border:1px solid var(--accent);border-radius:7px;padding:10px 16px;min-height:44px;background:var(--accent);color:white;cursor:pointer;font-weight:650}button.secondary{background:white;color:var(--accent)}button:hover{filter:brightness(.94)}:focus-visible{outline:3px solid #d06e1c;outline-offset:3px}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}.answer{background:var(--ink);color:white;padding:26px;border-radius:14px}.answer .muted{color:#d9e5eb}.big{font-size:clamp(2.1rem,5vw,3.8rem);font-weight:750;line-height:1.16;letter-spacing:-.045em;margin:8px 0;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.subresult{font-size:1.2rem;font-weight:650} .formula{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;overflow-wrap:anywhere}.note{border-left:3px solid #b47029;padding:10px 14px;background:#fff5e5;margin:14px 0;color:#66451b}.error{color:#a22621;font-weight:650;min-height:24px;margin:8px 0}.below{margin-top:28px}table{border-collapse:collapse;width:100%;font-size:.94rem}th{text-align:left;color:var(--muted);font-weight:650;font-size:.84rem}th,td{padding:11px 10px;border-bottom:1px solid var(--line);vertical-align:top}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0}details{border-top:1px solid var(--line);padding:16px 0}summary{cursor:pointer;font-weight:650}svg{display:block;width:100%;height:auto}.tag{display:inline-block;font-size:.78rem;font-weight:650;padding:3px 8px;border-radius:30px;background:var(--soft);color:var(--accent)}.rule{height:1px;background:var(--line);margin:20px 0}.checklabel{display:flex;gap:10px;align-items:flex-start;font-weight:500}.checklabel input{width:20px;min-height:20px;flex:none;margin:2px 0}pre{white-space:pre-wrap;word-break:break-word;font: .86rem/1.6 ui-monospace,Consolas,monospace;background:#edf1f3;padding:20px;border-radius:8px}a{color:var(--accent)}[hidden]{display:none!important}@media(max-width:720px){main{padding:22px 20px 40px}.grid{grid-template-columns:1fr;gap:18px}.panel{padding:20px}.answer{padding:22px}.big{font-size:2.65rem}}@media(max-width:400px){main{padding:18px 16px 36px}.fields{gap:12px}th,td{padding:9px 6px}.panel{padding:16px}.big{font-size:2.25rem}}@media print{body{background:white}main{max-width:none;padding:0}.actions,button{display:none}.panel{break-inside:avoid}details>*{display:block}}:root{--accent:#71583d;--soft:#f4ecdf}body{background:#f6f2eb}.map{border-top:5px solid #9b7e52}.graph-heading{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px}.graph-heading h2{margin:0}.match{display:grid;grid-template-columns:1fr auto 1fr;gap:20px;align-items:center;padding:15px 0}.match h3{font-size:1.2rem}.link-word{font-size:.82rem;font-weight:700;color:#775d3c}.map-status{font-size:.88rem;background:#f5eee2;padding:8px 12px}.casey{border-top:1px solid var(--line);padding-top:16px}.casey span{display:block;font-size:.9rem;color:var(--muted);margin-top:4px}.agenda{list-style:none;padding:0;margin:0}.agenda li{display:grid;grid-template-columns:100px 1fr;gap:24px;padding:18px 0;border-top:1px solid var(--line)}.agenda p{margin:0}.time{font-weight:750}.time small{display:block;font-weight:400}.blank-card{border:1px dashed #b7aa96;padding:16px;margin-top:16px;break-inside:avoid}.blank-card p{margin:10px 0}@media(max-width:500px){.match{grid-template-columns:1fr;gap:3px}.link-word{margin:4px 0}.agenda li{grid-template-columns:65px 1fr;gap:14px}}</style></head><body><main><header><div class="eyebrow">Library-event team · facilitation agenda</div><h1>A 35-minute contribution session</h1></header>
<p>Connect offers with requests, then confirm scope and time before assigning help.</p>
<section class="map panel" id="sample"><div class="graph-heading"><h2>Fictional help map</h2><span class="tag">Speak, write, or pass</span></div><div class="match"><div><span class="muted">Blair requests</span><h3>Wording review</h3></div><span class="link-word">← proposed ←</span><div><span class="muted">Alex offers</span><h3>Edit instructions</h3></div></div><p class="map-status">Confirm scope, timing, and acceptance with both people.</p><div class="match"><div><span class="muted">Alex requests</span><h3>Setup support</h3></div><span class="link-word">← discuss fit ←</span><div><span class="muted">Blair offers</span><h3>Organize materials</h3></div></div><p class="map-status">Materials may cover part of setup; fit remains unconfirmed.</p><div class="casey"><b>Casey offers illustration</b><span>Support request not supplied · Available hours unknown · Unassigned</span></div></section>
<section class="panel" id="blank" hidden><h2>Reusable blank participant cards</h2><p>Answer aloud, write on a card, or pass. Passing leaves a blank card.</p><article class="blank-card"><h3>Participant card 1</h3><p>Name (optional): ____________________</p><p>Chosen contribution: ____________________</p><p>Support requested: ____________________</p><p>Scope / time limits: ____________________</p><p>May my partner repeat this? ____________________</p><p>Proposed match / confirmation: ____________________</p></article><article class="blank-card"><h3>Participant card 2</h3><p>Name (optional): ____________________</p><p>Chosen contribution: ____________________</p><p>Support requested: ____________________</p><p>Scope / time limits: ____________________</p><p>May my partner repeat this? ____________________</p><p>Proposed match / confirmation: ____________________</p></article><article class="blank-card"><h3>Participant card 3</h3><p>Name (optional): ____________________</p><p>Chosen contribution: ____________________</p><p>Support requested: ____________________</p><p>Scope / time limits: ____________________</p><p>May my partner repeat this? ____________________</p><p>Proposed match / confirmation: ____________________</p></article></section>
<div class="actions"><button type="button" id="toggle" class="secondary">View blank participant cards</button></div><p id="viewState" role="status" class="muted">Fictional sample view. No submitted responses or accepted matches.</p>
<section class="below panel"><div class="graph-heading"><h2>Facilitator run sheet</h2><b>35 minutes total</b></div><ol class="agenda"><li><span class="time">00–04 <small>4 min</small></span><div><h3>Purpose and choice</h3><p>“What might you offer, and where would you like help?” Explain that an offer is not an assignment. Invite spoken, written, or pass participation.</p></div></li><li><span class="time">04–14 <small>10 min</small></span><div><h3>Reciprocal introductions</h3><p>Ask for one chosen contribution, a request, and any limits. With three members, rotate speaker, interviewer, and listener. Ask permission before reporting a partner’s contribution.</p></div></li><li><span class="time">14–22 <small>8 min</small></span><div><h3>Build the contribution map</h3><p>Place related requests beside offers. Ask: “Is this the help you mean?” and “Does this offer cover the request?” Mark candidate links proposed; keep gaps visible.</p></div></li><li><span class="time">22–30 <small>8 min</small></span><div><h3>Agree how to ask</h3><p>Propose: “Ask before assigning help; confirm scope and time.” Ask whether the group wants to adopt or revise it. Practice: “Alex, would you review the event instructions? What scope and timing could you accept?” Leave the actual answer blank.</p></div></li><li><span class="time">30–35 <small>5 min</small></span><div><h3>Read back and correct</h3><p>Review offers, proposed links, accepted matches, and unresolved questions separately. Invite corrections. An unresolved match stays unresolved.</p></div></li></ol></section>
<details class="below"><summary>Blank closing record and use notes</summary><p>Actual adopted agreement: ____________________</p><p>Confirmed matches and agreed scope/time: ____________________</p><p>Open requests and next confirmation: ____________________</p><p>This local view switch does not collect or save responses. Keep actual responses in your team’s normal records. No forced personal history, age disclosure, physical contact, or personality scoring is required.</p></details></main><script>
const $=id=>document.getElementById(id);const put=(id,text)=>{$(id).textContent=text};const fmt=(x,n=6)=>{if(!Number.isFinite(x))throw Error('Result exceeds the numeric range.');let v=(Math.round(Math.abs(x)*10**n)/10**n)*(x<0?-1:1);return Object.is(v,-0)?'0':v.toFixed(n).replace(/\.?0+$/,'')||'0'};const esc=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
function decimal(s,{max=1000000,signed=false,places=6}={}){s=String(s).trim();if(!s)throw Error('Enter a value; a blank field is not zero.');const r=new RegExp('^'+(signed?'[+-]?':'')+'(?:[0-9]+(?:\\.[0-9]{1,'+places+'})?|\\.[0-9]{1,'+places+'})$');if(!r.test(s))throw Error('Use a '+(signed?'signed':'nonnegative')+' US decimal with up to '+places+' decimal places; no commas or exponents.');const v=Number(s);if(!Number.isFinite(v)||Math.abs(v)>max)throw Error('Enter a value within '+(signed?'-':'0 to ')+max+'.');return v;}
function scaled(s){decimal(s);const [a,b='']=String(s).trim().split('.');return BigInt(a||'0')*1000000n+BigInt(b.padEnd(6,'0'));}
function rational(n,d,places=6){if(d===0n)throw Error('Zero denominator');let neg=(n<0n)!=(d<0n);n=n<0n?-n:n;d=d<0n?-d:d;const scale=10n**BigInt(places),v=n*scale,q=v/d,r=v%d;let rounded=q+(r*2n>=d?1n:0n);let s=(rounded/scale).toString();const f=(rounded%scale).toString().padStart(places,'0').replace(/0+$/,'');if(f)s+='.'+f;return {text:(neg&&rounded!==0n?'-':'')+s,approx:r!==0n};}
function bind(ids,fn){ids.forEach(id=>{ $(id).addEventListener('input',fn);$(id).addEventListener('change',fn); });}
function switchView(){const blank=$('blank').hidden;$('blank').hidden=!blank;$('sample').hidden=blank;put('toggle',blank?'View fictional help map':'View blank participant cards');$('toggle').setAttribute('aria-pressed',String(blank));put('viewState',blank?'Blank reusable cards. No responses have been filled in.':'Fictional sample view. No submitted responses or accepted matches.');}
$('toggle').setAttribute('aria-pressed','false');$('toggle').addEventListener('click',switchView);globalThis.Tool={switchView};
</script></body></html>