Mirror · drama phase cues — Run a slow leader/follower mirroring round, swap roles and record an observable adjustment without equating lag or participation with…

HTML for this example

Select the code and use your copy shortcut. Changes in this preview are temporary.

<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Mirror · drama phase cues</title><style>
*{box-sizing:border-box}body{margin:0;background:#f8f3ef;color:#45293c;font:16px/1.55 system-ui,sans-serif}main{max-width:1050px;padding:30px;margin:auto}h1{font:clamp(38px,6vw,62px)/1.05 Georgia,serif;letter-spacing:-.03em;margin:6px 0 12px}h2{font:28px/1.2 Georgia,serif;margin:0 0 12px}h3{font-size:18px;margin:0 0 8px}p{margin:0 0 12px}.eyebrow{font-size:12px;text-transform:uppercase;letter-spacing:.15em;font-weight:700;color:#835b71}.muted{color:#765d6b;font-size:14px}.stage{background:#4e2c48;color:#fff8ed;border-radius:10px;padding:27px;margin-top:22px}.phase-row{display:flex;justify-content:space-between;gap:18px;align-items:center}.stage .eyebrow{color:#e7c7d8}.phase-number{font:34px Georgia,serif}.roles{display:grid;grid-template-columns:1fr 50px 1fr;align-items:center;margin:24px 0;text-align:center}.role{padding:23px 15px;border:1px solid #aa819e;border-radius:8px;background:#ffffff0b}.role .person{font-size:13px;letter-spacing:.1em}.role strong{display:block;font:36px Georgia,serif;margin-top:6px}.connector{font-size:28px;color:#dfb5a2}.cue{background:#f7e2b5;color:#4a342a;padding:16px 20px;border-radius:7px}.cue b{font-size:23px}.controls{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0 0}button{font:700 14px system-ui;min-height:45px;padding:10px 17px;border-radius:6px;background:#80516f;color:white;border:1px solid #80516f;cursor:pointer}button.secondary{background:#fffaf5;color:#643750}button.stop{background:#f5cbb9;color:#512d32;border-color:#f5cbb9}button[aria-pressed=true]{background:#643750;color:white;box-shadow:0 3px 0 #dcb58b}button:disabled{opacity:.5;cursor:default}:focus-visible{outline:3px solid #c98335;outline-offset:3px}.phase-controls{display:flex;gap:8px;flex-wrap:wrap}.settings{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;margin-top:20px}label{display:block;font-size:14px;font-weight:650}select,input,textarea{width:100%;display:block;background:white;border:1px solid #baa5af;border-radius:5px;color:#45293c;padding:10px;font:16px/1.45 system-ui;margin:5px 0 12px}textarea{min-height:90px;resize:vertical}input[type=checkbox]{width:20px;height:20px;margin:0;flex-shrink:0}.check{display:flex;gap:10px;align-items:flex-start;font-size:14px;font-weight:400;background:#f0e5e9;padding:12px;border-radius:6px}.section{padding:24px;border:1px solid #dfcfd6;background:#fffdfa;border-radius:9px;margin-top:24px}.error{min-height:23px;font-size:14px;color:#a52b31;margin-top:12px}.notes{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}summary{cursor:pointer;font-weight:650;min-height:40px}details{margin-top:24px;border-top:1px solid #dfcfd6;padding-top:15px}.hypothetical{background:#f0e5e9;padding:18px;border-radius:6px;font-size:15px;margin:8px 0}.plan{font-size:14px;border-left:3px solid #ac7a91;padding-left:15px;margin-top:16px}.footer{font-size:13px;color:#765d6b;margin:26px 0}#phase-status{font-size:14px;font-weight:700}@media(max-width:680px){main{padding:23px 16px}.settings,.notes{grid-template-columns:1fr}.stage{padding:20px}.phase-row{display:block}.phase-controls{margin-top:15px}.role{padding:20px 8px}.role strong{font-size:28px}.roles{grid-template-columns:1fr 30px 1fr}.section{padding:20px}.controls button{flex:1}.phase-controls button{flex:1;padding:8px 10px}}@media(max-width:380px){main{padding:20px 12px}.stage{padding:16px}.role strong{font-size:25px}.cue{padding:14px}}
</style></head><body><main><p class="eyebrow">Partner drama warm-up</p><h1>Mirror slowly.<br>Notice one change.</h1><p>Choose a comfortable motion, stop, then swap both roles.</p><section class="stage" aria-label="Current phase cue"><div class="phase-row"><div><p class="eyebrow">Current cue</p><div id="phase-label" class="phase-number">M1 · Assigned roles</div></div><p id="phase-status" role="status">Stopped · agree on the motion before beginning</p></div><div class="roles"><div class="role"><span class="person">PARTNER A</span><strong id="role-a">Leader</strong></div><span class="connector" aria-hidden="true">↔</span><div class="role"><span class="person">PARTNER B</span><strong id="role-b">Follower</strong></div></div><div class="cue"><p id="motion-cue">Lift one hand slowly, open the palm, then lower the hand.</p><p style="margin:0">Either partner or the teacher can say <b id="stop-word">Pause</b>.</p></div><div class="controls"><button type="button" id="begin" class="secondary">Begin phase</button><button type="button" id="stop" class="stop">Stop / pause</button></div></section><div class="settings"><section><h2>Choose the next cue</h2><div class="phase-controls"><button type="button" id="m1" aria-pressed="true">M1 · A leads</button><button type="button" id="m2" aria-pressed="false">M2 · B leads</button><button type="button" id="m3" aria-pressed="false">M3 · Shared</button></div><p id="phase-explanation" class="plan">M1: A leads and B follows. Let one motion settle before changing it.</p><label class="check" for="ready"><input type="checkbox" id="ready">Teacher and partners have confirmed readiness for the optional shared phase outside this page.</label></section><section><label for="motion">Comfortable motion or participation<select id="motion"><option value="hand">Slow hand sequence</option><option value="seated">Seated, preferred small gesture</option><option value="observer">Observer role</option></select></label><label for="stop-cue">Agreed stop cue<input id="stop-cue" value="Pause" maxlength="60"></label><button type="button" id="reset" class="secondary">Reset cue view</button></section></div><p id="error" class="error" role="alert"></p><section class="section"><p class="eyebrow">Actual observation · starts blank</p><h2 id="note-heading">M1 reflection record</h2><p class="muted">Name a specific moment, then propose one adjustment. Each phase keeps its own notes in this open page.</p><div class="notes"><label for="chosen">Chosen motion / adaptation<textarea id="chosen"></textarea></label><label for="moment">Specific moment noticed<textarea id="moment"></textarea></label><label for="evidence">Evidence in ordinary words<textarea id="evidence"></textarea></label><label for="adjustment">Next adjustment proposed<textarea id="adjustment"></textarea></label><label for="later">Later observation after adjustment<textarea id="later"></textarea></label><div class="plan"><strong id="record-roles">M1 cue roles: A Leader / B Follower</strong><p class="muted" style="margin-top:9px">The selected cue does not establish that a phase happened. No later observation is filled in for you.</p></div></div><p id="note-status" class="muted">No actual observation supplied for M1.</p></section><details id="worked-example"><summary>Separate hypothetical example</summary><div class="hypothetical"><strong>Hypothetical — not an observation about A or B</strong><p>An observer noticed a sudden change from lifting to lowering. The leader proposes a pause before the next change.</p><p style="margin-bottom:0">Later observation: not supplied. The cause of any hesitation and the effect of the proposed adjustment are unknown.</p></div></details><footer class="footer"><p>Use voluntary, noncontact movement with teacher support. Seated movement, a preferred gesture, or an observer role may be chosen. No fixed reach, mandatory eye contact, speed contest, elimination, or ability score.</p><p>This HTML companion displays cues and temporary notes; it does not observe movement, record students, certify access, save notes after leaving, or establish learning results. Keep native phase cards and actual session notes as your primary record. Reset restores only the cue view and hides the hypothetical example; entered reflection notes are retained in this open page.</p></footer></main><script>
'use strict';const $=id=>document.getElementById(id);const keys=['chosen','moment','evidence','adjustment','later'];const notes={m1:{},m2:{},m3:{}};let phase='m1',running=false;const roles={m1:['Leader','Follower'],m2:['Follower','Leader'],m3:['Shared movement','Shared movement']};
function cueState(p){return{label:p.toUpperCase()+(p==='m3'?' · Optional shared phase':' · Assigned roles'),a:roles[p][0],b:roles[p][1],explanation:p==='m3'?'M3 is optional. No assigned leader or follower. Readiness is confirmed by the teacher and partners, not inferred from opening this cue.':p==='m2'?'M2: B leads and A follows. Stop before changing roles; choose one adjustment to try.':'M1: A leads and B follows. Let one motion settle before changing it.'};}
function showMotion(){const motion=$('motion').value;$('motion-cue').textContent=motion==='observer'?'Observe one chosen movement moment. Describe it without judging acting ability.':motion==='seated'?'Use a comfortable seated position and a preferred small gesture; agree how to follow it.':'Lift one hand slowly, open the palm, then lower the hand.';const word=$('stop-cue').value.trim();$('stop-word').textContent=word||'Agree on a stop cue';$('stop-cue').setAttribute('aria-invalid',String(!word));if(!word){running=false;$('error').textContent='Enter an agreed stop cue before beginning.';}renderStatus();}
function renderStatus(){$('phase-status').textContent=running?'Cue active · stop before switching phases':'Stopped · agree on the motion before beginning';$('begin').disabled=running;$('stop').disabled=!running;}
function noteStatus(){$('note-status').textContent=keys.some(k=>(notes[phase][k]||'').trim())?'User-entered notes for '+phase.toUpperCase()+'. Review with the participants; no outcome is inferred.':'No actual observation supplied for '+phase.toUpperCase()+'.';}
function render(){const c=cueState(phase);$('phase-label').textContent=c.label;$('role-a').textContent=c.a;$('role-b').textContent=c.b;$('phase-explanation').textContent=c.explanation;$('note-heading').textContent=phase.toUpperCase()+' reflection record';$('record-roles').textContent=phase.toUpperCase()+' cue roles: A '+c.a+' / B '+c.b;for(const p of['m1','m2','m3'])$(p).setAttribute('aria-pressed',String(p===phase));keys.forEach(k=>$(k).value=notes[phase][k]||'');noteStatus();renderStatus();}
function choose(p){if(running){$('error').textContent='Stop / pause before changing phase. Current roles stay unchanged.';return;}if(p==='m3'&&!$('ready').checked){$('error').textContent='M3 is optional. Confirm teacher and partner readiness before choosing it.';return;}phase=p;$('error').textContent='';render();}
for(const p of['m1','m2','m3'])$(p).addEventListener('click',()=>choose(p));$('begin').addEventListener('click',()=>{if(!$('stop-cue').value.trim()){$('error').textContent='Enter an agreed stop cue before beginning.';return;}if(phase==='m3'&&!$('ready').checked){$('error').textContent='Confirm teacher and partner readiness for M3.';return;}running=true;$('error').textContent='';renderStatus();});$('stop').addEventListener('click',()=>{running=false;$('error').textContent='';renderStatus();});$('ready').addEventListener('change',()=>{if(phase==='m3'&&!$('ready').checked){running=false;phase='m1';render();$('error').textContent='Shared-phase readiness removed. Cue returned to stopped M1.';}});$('motion').addEventListener('change',()=>{running=false;$('error').textContent='';showMotion();});$('stop-cue').addEventListener('input',()=>{running=false;$('error').textContent='';showMotion();});keys.forEach(k=>$(k).addEventListener('input',()=>{notes[phase][k]=$(k).value;noteStatus();}));$('reset').addEventListener('click',()=>{phase='m1';running=false;$('motion').value='hand';$('stop-cue').value='Pause';$('ready').checked=false;$('worked-example').open=false;$('error').textContent='';showMotion();render();});render();
</script></body></html>