…
.hero2{padding:clamp(20px,5vw,56px) 0 clamp(40px,6vw,72px)}
.ladder{margin:0 0 clamp(36px,6vw,64px)}.ladder .tag{font-family:var(--display);font-weight:800;font-size:clamp(20px,2.6vw,28px);margin:0 0 4px}.ladder .sub{color:var(--soft);margin:0 0 14px}
-.ladder .rungs{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.rung{display:block;text-decoration:none;color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:var(--card)}
-.rung .lv{display:block;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--soft)}.rung .sp{display:block;font-size:20px;font-weight:800;color:var(--indigo);margin:2px 0}.rung.plain .sp{color:var(--ink)}.rung .rl{display:block;font-size:14px;color:var(--soft)}
+.ladder .rungs{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.rung{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;column-gap:8px;text-decoration:none;color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:8px 14px 6px;background:var(--card)}
+.rung .lv{grid-column:2;grid-row:1;justify-self:end;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--soft)}.rung .sp{grid-column:1;grid-row:1;font-size:20px;font-weight:800;color:var(--indigo);margin:0;line-height:1.2}.rung.plain .sp{color:var(--indigo)}.rung .rl{grid-column:1/-1;grid-row:2;font-size:14px;line-height:1.3;color:var(--soft)}
.rung.hi{border:2px solid var(--indigo)}@media (max-width:700px){.ladder .rungs{grid-template-columns:1fr 1fr}}
.hero2 h1{font-family:var(--display);font-weight:800;font-size:clamp(34px,5.4vw,64px);line-height:1;letter-spacing:-.03em;margin:0 0 16px;max-width:14em}
…
<header class="hero2" style="padding-top:4px;padding-bottom:0">
<div class="ladder" aria-label="How fast" style="margin-bottom:8px">
- <p class="sub">Your AI builds working apps, with their data. You pick how fast. Start below to learn, play or work.</p>
<div class="rungs">
- <a class="rung plain" href="#hero"><span class="lv">Hero</span><span class="sp">Just ask</span><span class="rl">Your AI makes your app</span></a>
+ <a class="rung plain" href="#hero"><span class="lv">Hero</span><span class="sp">Hobby apps</span><span class="rl">Your AI makes your app</span></a>
<a class="rung" href="#creator"><span class="lv">Creator</span><span class="sp">10x</span><span class="rl">For people who think in models</span></a>
<a class="rung hi" href="#pro"><span class="lv">Pro</span><span class="sp">50x</span><span class="rl">For architects and teams</span></a>
<a class="rung" href="#d2-master-sec"><span class="lv">Master</span><span class="sp">?x</span><span class="rl">How fast can a team of agents go?</span></a>
</div>
+ <p class="sub" style="margin:12px 0 0">Your AI builds working apps, with their data, in minutes. You pick how complex. Start below to <a href="#hero">learn</a>, <a href="#creator">play</a> or <a href="#pro">work</a>.</p>
</div>
</header>
</div>
+<!-- Voice to a running app (designer, Razie approved 2026-10-05, from Landing3 Artifact 6). Self-contained iframe. -->
+<section id="voice-to-app" style="max-width:1080px;margin:24px auto 8px;padding:0 16px">
+<iframe id="v2a-f" title="From voice to a running app" style="width:100%;border:0;display:block;height:760px;background:transparent" srcdoc="<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>From voice to a running app</title>
+<style>
+:root{--paper:#fbfaf7;--card:#ffffff;--ink:#1d1d1b;--soft:#6b6a66;--line:#e4e1da;--indigo:#9a4b12;--sun:#d99a2b;--sun-bg:#fbf1dc;--leaf:#3f7d4e;--rose:#b23a48;--attn:#5b5fd6;--me:#5b5fd6}
+@media (prefers-color-scheme:dark){:root{--paper:#141413;--card:#1d1d1b;--ink:#ecebe6;--soft:#9c9a93;--line:#33322f;--indigo:#f0a35e;--sun:#e5b454;--sun-bg:#2c2515;--leaf:#6cc08a;--rose:#f08a92;--attn:#9296f5;--me:#6b6fe0}}
+*{box-sizing:border-box}
+html,body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.45 system-ui,-apple-system,'Segoe UI',sans-serif}
+.w{max-width:1040px;margin:0 auto;padding:14px}
+.top{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:14px;align-items:stretch}
+.chat{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:12px;display:flex;flex-direction:column}
+.hd{font:600 11px system-ui;color:var(--soft);letter-spacing:.05em;text-transform:uppercase;margin:0 2px 8px}
+.tk{display:flex;flex-direction:column;gap:7px;height:190px;flex:none;overflow-y:auto;scroll-behavior:smooth;padding-right:2px}
+.tk>*{flex:none}
+.b{max-width:92%;padding:8px 12px;border-radius:15px;font-size:13.5px;line-height:1.35;animation:pop .35s ease-out}
+.b.me{align-self:flex-end;background:var(--me);color:#fff;border-bottom-right-radius:5px}
+.b.ai{align-self:flex-start;background:var(--paper);border:1px solid var(--line);border-bottom-left-radius:5px}
+.b.ai small{display:block;font-size:11px;color:var(--soft)}
+.mic{display:flex;align-items:center;gap:10px;margin-top:10px;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:var(--paper)}
+.mic .mb{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--card);border:1px solid var(--line);color:var(--soft)}
+.mic.on .mb{background:#e5484d;border-color:#e5484d;color:#fff;animation:mp 1.2s ease-out infinite}
+.mic .wave{flex:1;display:flex;align-items:center;gap:3px;height:24px}
+.mic .wave i{flex:1;max-width:5px;height:4px;border-radius:3px;background:var(--line)}
+.mic.on .wave i{background:var(--attn);animation:mbar .9s ease-in-out infinite}
+.mic .ml{flex:none;font:600 11px system-ui;color:var(--soft);min-width:64px;text-align:right}
+@keyframes mbar{0%,100%{height:4px}50%{height:var(--h,20px)}}
+@keyframes mp{0%{box-shadow:0 0 0 0 rgba(229,72,77,.5)}100%{box-shadow:0 0 0 9px rgba(229,72,77,0)}}
+@keyframes pop{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
+.agents{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:12px 12px 6px;margin-left:12px;display:flex;flex-direction:column}
+.agents svg{width:100%;height:auto;display:block}
+.msg{min-height:26px;margin-top:4px;display:flex;justify-content:center}
+.msg span{display:inline-flex;align-items:center;gap:8px;padding:3px 12px;border-radius:999px;border:1px solid color-mix(in srgb,var(--attn) 55%,transparent);background:color-mix(in srgb,var(--attn) 12%,var(--card));font-size:12px;opacity:0;transition:opacity .35s}
+.msg span.on{opacity:1}
+.msg i{width:7px;height:7px;border-radius:50%;background:var(--attn);animation:pl 1s ease-in-out infinite}
+@keyframes pl{50%{opacity:.3}}
+.low{position:relative;margin-top:14px;height:330px}
+.board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
+.col{background:color-mix(in srgb,var(--line) 35%,var(--paper));border:1px solid var(--line);border-radius:10px;padding:8px;height:330px;overflow:hidden;transition:opacity .6s}
+.board.half .c3,.board.half .c4{opacity:0}
+.board.gone .c1,.board.gone .c2{opacity:0}
+.col h4{margin:0 0 8px;font-size:12.5px;display:flex;justify-content:space-between}
+.col h4 small{color:var(--soft);font-weight:400}
+.cards{display:flex;flex-direction:column;gap:7px}
+.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-size:12px;animation:pop .4s ease-out;transition:opacity .45s,transform .45s}
+.card.out{opacity:0;transform:translateX(30px)}
+.card .h{display:flex;align-items:center;gap:6px}
+.card .id{font:600 11px ui-monospace,Menlo,monospace;color:var(--indigo)}
+.card .st{margin-left:auto;font-size:10px;color:var(--soft)}
+.card .t{font-weight:600;margin-top:2px}
+.card.work{background:color-mix(in srgb,var(--leaf) 9%,var(--card))}
+.card.done .st{color:var(--leaf);font-weight:600}
+.side{position:absolute;top:0;right:0;bottom:0;width:calc(50% - 5px);background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;opacity:0;transition:opacity .6s;overflow:hidden}
+.side.on{opacity:1}
+.pane{position:absolute;inset:12px;transition:opacity .6s}
+.pane.off{opacity:0}
+.doc{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--paper)}
+.doc .ti{font-weight:700;font-size:14px;margin-bottom:8px}
+.sec{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;border:1px solid var(--line);background:var(--card);margin-top:8px;animation:pop .45s ease-out}
+.sec .tag{flex:none;font:600 10.5px system-ui;padding:2px 8px;border-radius:999px;color:#fff}
+.sec .tx{flex:1;font-size:13px}
+.sec .cnt{font-weight:700;font-variant-numeric:tabular-nums}
+.ln{height:7px;border-radius:4px;background:var(--line);margin:6px 0;width:0;transition:width .7s}
+.dm svg{width:100%;height:auto;display:block}
+.dm .draw{stroke-dasharray:200;stroke-dashoffset:200;animation:dr 1s ease-out forwards}
+@keyframes dr{to{stroke-dashoffset:0}}
+.dm .bx{opacity:0;animation:pop .45s ease-out forwards}
+.side h5{margin:0 0 10px;font-size:12.5px;display:flex;justify-content:space-between;align-items:center}
+.side h5 small{font-weight:400;color:var(--soft)}
+.ent{border:1.5px solid var(--sun);background:var(--sun-bg);border-radius:9px;padding:6px 9px;margin-bottom:8px;animation:pop .45s ease-out}
+.ent b{font-size:12.5px}
+.ent .f{font-size:11.5px;color:var(--soft)}
+.ent .f span{animation:pop .4s ease-out}
+.lk{font-size:11px;color:var(--indigo);margin:-4px 0 8px 10px;animation:pop .4s ease-out}
+.tr{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);font-size:12.5px;animation:pop .35s ease-out}
+.tr .r{flex:none;width:20px;height:20px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--attn);animation:sp .8s linear infinite}
+.tr.ok .r{animation:none;border:none;background:var(--leaf);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px}
+.tr.ok .r:after{content:"✓"}
+.tr .x{flex:1}
+.sum{margin-top:10px;font-size:12.5px;font-weight:600;color:var(--leaf);opacity:0;transition:opacity .4s}
+.sum.on{opacity:1}
+@keyframes sp{to{transform:rotate(360deg)}}
+.app{position:absolute;top:0;left:0;bottom:0;width:calc(50% - 5px);border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card);display:flex;flex-direction:column;opacity:0;transform:scale(1.02);transition:opacity .7s,transform .7s;pointer-events:none}
+.app.on{opacity:1;transform:none;pointer-events:auto}
+.chrome{display:flex;align-items:center;gap:8px;padding:7px 10px;border-bottom:1px solid var(--line);font-size:11.5px;color:var(--soft)}
+.chrome .dt{width:8px;height:8px;border-radius:50%;background:var(--line)}
+.chrome .pill{margin-left:auto;font:600 10.5px system-ui;padding:2px 9px;border-radius:999px;background:#3ecf8e;color:#06120c}
+.ap{padding:16px;flex:1;background:color-mix(in srgb,var(--attn) 5%,var(--card))}
+.ap .k{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--soft)}
+.ap h3{margin:2px 0 4px;font-size:19px}
+.ap .meta{font-size:12.5px;color:var(--soft);margin-bottom:12px}
+.full{display:inline-block;font:600 11px system-ui;padding:2px 9px;border-radius:999px;background:color-mix(in srgb,var(--rose) 15%,var(--card));color:var(--rose);margin-left:6px}
+.place{border:1.5px solid var(--attn);border-radius:12px;padding:12px;background:var(--card)}
+.place .n{font-size:28px;font-weight:700;color:var(--attn);line-height:1}
+.place .s{font-size:12.5px;color:var(--soft)}
+.line{display:flex;gap:6px;margin:10px 0 2px}
+.line i{flex:1;height:8px;border-radius:4px;background:var(--line)}
+.line i.me{background:var(--attn)}
+.offer{margin-top:12px;border:1px dashed var(--leaf);border-radius:10px;padding:9px 11px;font-size:12.5px;opacity:0;transition:opacity .5s}
+.offer.on{opacity:1}
+.offer b{color:var(--leaf)}
+.btn{display:inline-block;margin-top:8px;padding:6px 14px;border-radius:999px;background:var(--attn);color:#fff;font:600 12.5px system-ui}
+.ctl{display:flex;justify-content:flex-end;margin-top:10px}
+.ctl button{border:1px solid var(--line);background:var(--card);color:var(--ink);font:600 12.5px system-ui;padding:5px 14px;border-radius:999px;cursor:pointer;min-height:32px}
+@media (max-width:700px){.top{grid-template-columns:minmax(0,1fr)}.agents{margin-left:0}.board{grid-template-columns:repeat(2,minmax(0,1fr))}.c3,.c4{display:none}.low{height:690px}.side{top:auto;height:340px;width:100%}.app{bottom:auto;height:340px;width:100%}}
+@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
+</style></head><body><div class="w">
+<div class="top">
+ <div class="chat"><div class="hd">You and your AI</div><div class="tk" id="tk"></div>
+ <div class="mic" id="mic"><span class="mb"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0M12 18v3"/></svg></span><span class="wave" id="wave"></span><span class="ml" id="ml">tap to talk</span></div>
+ </div>
+ <div class="agents"><div class="hd">Your agents</div><div id="map"></div><div class="msg"><span id="msg"><i></i><b id="msgt"></b></span></div></div>
+</div>
+<div class="low">
+ <div class="board" id="board">
+ <div class="col c1"><h4>New <small id="n0"></small></h4><div class="cards" id="c0"></div></div>
+ <div class="col c2"><h4>In progress <small id="n1"></small></h4><div class="cards" id="c1"></div></div>
+ <div class="col c3"><h4>Review <small id="n2"></small></h4><div class="cards" id="c2"></div></div>
+ <div class="col c4"><h4>Done <small id="n3"></small></h4><div class="cards" id="c3"></div></div>
+ </div>
+ <div class="side" id="side"><div class="pane" id="pSpec"></div><div class="pane off" id="pDm"></div><div class="pane off" id="pTest"></div></div>
+ <div class="app" id="app">
+ <div class="chrome"><span class="dt"></span><span class="dt"></span><span class="dt"></span><span>northconf.ai-putty.com/sessions/agents</span><span class="pill">live</span></div>
+ <div class="ap"><div class="k">NorthConf · AI agents in practice · Thu 2 pm</div><h3>Join the Waitlist<span class="full">Full</span></h3><div class="meta">Room B · 120 seats · 14 on the waitlist</div>
+ <div class="place"><div class="s">You're on the waitlist</div><div class="n">#2</div><div class="s">in line</div><div class="line"><i></i><i class="me"></i><i></i><i></i><i></i><i></i></div></div>
+ <div class="offer" id="offer"><b>A seat just freed up.</b> It's yours for 24 hours.<br><span class="btn">Take the seat</span></div>
+ </div>
+ </div>
+</div>
+<div class="ctl"><button id="rp" type="button">Watch it again</button></div>
+</div>
+<script>
+(function(){
+var $=function(i){return document.getElementById(i)};
+var wave=$('wave');for(var i=0;i<16;i++){var b=document.createElement('i');b.style.setProperty('--h',(8+Math.round(Math.abs(Math.sin(i*1.7))*16))+'px');b.style.animationDelay=(i*0.06)+'s';wave.appendChild(b)}
+var COL={you:['#fbf1dc','#d99a2b','#633806'],up:'#6b7fd7',idle:'#9aa3b2',working:'#2f9a6f',listening:'#2f9a6f',waiting:'#d9a520',done:'#1f6b4c'};
+var NS='http://www.w3.org/2000/svg';
+function el(n,a,t){var e=document.createElementNS(NS,n);for(var k in a)e.setAttribute(k,a[k]);if(t!=null)e.textContent=t;return e}
+function map(st){var h=$('map');h.innerHTML='';var svg=el('svg',{viewBox:'0 0 380 110',role:'img','aria-label':'You, designer, coder and guardian'});
+ var d=el('defs',{}),m=el('marker',{id:'ar',viewBox:'0 0 10 10',refX:8,refY:5,markerWidth:6,markerHeight:6,orient:'auto'});m.appendChild(el('path',{d:'M0 0L10 5L0 10z',fill:'#9c9a93'}));d.appendChild(m);svg.appendChild(d);
+ var N=[['you','you',st.you],['designer','D',st.designer],['coder','C',st.coder],['guardian','G',st.guardian]],x=40;
+ N.forEach(function(n,i){var cx=40+i*100;if(i)svg.appendChild(el('path',{d:'M'+(cx-75)+' 44H'+(cx-27),stroke:'#9c9a93','stroke-width':1.5,fill:'none','marker-end':'url(#ar)'}));
+ var s=n[2];
+ if(i===0)svg.appendChild(el('circle',{cx:cx,cy:44,r:23,fill:COL.you[0],stroke:COL.you[1],'stroke-width':1.5}));
+ else if(s)svg.appendChild(el('circle',{cx:cx,cy:44,r:23,fill:COL[s]||'#9aa3b2'}));
+ else svg.appendChild(el('circle',{cx:cx,cy:44,r:23,fill:'none',stroke:'#9c9a93','stroke-width':1.5,'stroke-dasharray':'3 3'}));
+ if(s==='working'&&i){var r=el('circle',{cx:cx,cy:44,r:23,fill:'none',stroke:COL.working,'stroke-width':2});r.appendChild(el('animate',{attributeName:'r',values:'23;31',dur:'1.4s',repeatCount:'indefinite'}));r.appendChild(el('animate',{attributeName:'opacity',values:'.8;0',dur:'1.4s',repeatCount:'indefinite'}));svg.appendChild(r)}
+ svg.appendChild(el('text',{x:cx,y:48,'text-anchor':'middle','font-size':12,fill:i===0?COL.you[2]:(s?'#fff':'#9c9a93')},n[1]));
+ svg.appendChild(el('text',{x:cx,y:86,'text-anchor':'middle','font-size':12,fill:'currentColor'},i===0?'you':n[0]));
+ svg.appendChild(el('text',{x:cx,y:101,'text-anchor':'middle','font-size':11,fill:i===0?COL.you[1]:(s?COL[s]:'#9c9a93')},i===0?(s||''):(s||'not started')));
+ });h.appendChild(svg)}
+var IT={a:['P-21','Waitlist: sessions and seats'],b:['P-22','Offer a freed seat for 24 h'],c:['P-23','Show your place in line'],
+ s1:['P-17','Speaker badges with QR check-in'],s2:['P-14','Room map on the schedule'],s3:['P-12','Ticket refunds'],s4:['P-11','Session feedback form'],s5:['P-9','Schedule export to calendar']};
+var cards={};
+function counts(){for(var i=0;i<4;i++)$('n'+i).textContent=$('c'+i).children.length||''}
+function card(k,c,st,cls){var d=cards[k];if(d&&d.parentNode)d.parentNode.removeChild(d);d=document.createElement('div');d.className='card '+(cls||'');d.innerHTML='<div class="h"><span class="id">'+IT[k][0]+'</span><span class="st">'+st+'</span></div><div class="t">'+IT[k][1]+'</div>';$(c).appendChild(d);cards[k]=d;counts();return d}
+function say(t){var s=$('msg');$('msgt').textContent=t;s.classList.add('on')}
+function bub(cls,t,who){var b=document.createElement('div');b.className='b '+cls;b.innerHTML=(who?'<small>'+who+'</small>':'')+t;var tk=$('tk');tk.appendChild(b);tk.scrollTop=tk.scrollHeight}
+function mic(on,l){$('mic').classList.toggle('on',on);$('ml').textContent=l}
+function pane(id){['pSpec','pDm','pTest'].forEach(function(p){$(p).classList.toggle('off',p!==id)})}
+function sec(tag,col,txt,n){var d=document.createElement('div');d.className='sec';d.innerHTML='<span class="tag" style="background:'+col+'">'+tag+'</span><span class="tx">'+txt+'</span><span class="cnt">0</span>';$('specDoc').appendChild(d);var c=d.querySelector('.cnt'),i=0;var t=setInterval(function(){i++;c.textContent=i;if(i>=n)clearInterval(t)},260)}
+function specInit(){$('pSpec').innerHTML='<div class="hd">Designer · writing it up</div><div class="doc" id="specDoc"><div class="ti">Waitlist</div><div class="ln" id="l1"></div><div class="ln" id="l2"></div></div>'}
+function dmDraw(){$('pDm').innerHTML='<div class="hd">Domain model</div><div class="dm"><svg viewBox="0 0 320 250" font-family="system-ui,sans-serif">'+
+ '<g stroke="var(--indigo)" stroke-width="1.5" fill="none"><path class="draw" style="animation-delay:.9s" d="M110 52H200"/><path class="draw" style="animation-delay:1.3s" d="M70 76V150"/><path class="draw" style="animation-delay:1.7s" d="M110 174H200"/></g>'+
+ '<g font-size="10" fill="var(--indigo)"><text x="155" y="46" text-anchor="middle" class="bx" style="animation-delay:1.1s">seats *</text><text x="76" y="118" class="bx" style="animation-delay:1.5s">waitlist *</text><text x="155" y="168" text-anchor="middle" class="bx" style="animation-delay:1.9s">attendee</text></g>'+
+ box(20,28,'Session','title, room, seats',0)+box(200,28,'Seat','attendee',.3)+box(20,150,'WaitlistEntry','place, offeredUntil',.6)+box(200,150,'Attendee','name, email',.9)+
+ '</svg></div>'}
+function box(x,y,n,f,dl){return '<g class="bx" style="animation-delay:'+dl+'s"><rect x="'+x+'" y="'+y+'" width="'+(n.length>8?118:100)+'" height="48" rx="9" fill="var(--sun-bg)" stroke="var(--sun)" stroke-width="1.5"/><text x="'+(x+10)+'" y="'+(y+20)+'" font-size="13" font-weight="700" fill="var(--ink)">'+n+'</text><text x="'+(x+10)+'" y="'+(y+37)+'" font-size="10.5" fill="var(--soft)">'+f+'</text></g>'}
+function test(t){var r=document.createElement('div');r.className='tr';r.innerHTML='<span class="r"></span><span class="x">'+t+'</span>';$('pTest').appendChild(r);return r}
+var TESTS=['A full session takes a waitlist entry','A freed seat goes to the next in line','The offer expires after 24 hours','Your place in line updates','Nobody is offered the same seat twice'];
+var trs=[];
+var S=[
+ [900,function(){mic(true,'listening…');map({you:'',designer:'listening',coder:'idle',guardian:''});say('designer is listening')}],
+ [1500,function(){bub('me','Our sessions keep selling out. Add a waitlist.')}],
+ [1500,function(){mic(false,'thinking…');bub('ai','When a seat frees up, offer it to the next person for 24 hours?','designer')}],
+ [1600,function(){mic(true,'listening…')}],
+ [1300,function(){bub('me','Yes. And show people their place in line.')}],
+ [1300,function(){mic(false,'tap to talk');bub('ai','Got it. Three items for the team.','designer');map({you:'',designer:'working',coder:'idle',guardian:''});say('designer is filing the items')}],
+ [600,function(){card('a','c0','new')}],[500,function(){card('b','c0','new')}],[500,function(){card('c','c0','new')}],
+ [1000,function(){map({you:'',designer:'working',coder:'idle',guardian:''});say('designer is writing the spec');$('board').classList.add('half');specInit();pane('pSpec');$('side').classList.add('on')}],
+ [500,function(){$('l1').style.width='80%'}],[400,function(){$('l2').style.width='55%'}],
+ [700,function(){sec('Spec','#5b5fd6','1 feature added',1)}],
+ [1100,function(){sec('Design','#b06a1c','4 behaviours added',4)}],
+ [1500,function(){sec('Test','#2f9a6f','5 tests added',5)}],
+ [2200,function(){dmDraw();pane('pDm');say('designer drafts the domain model')}],
+ [3200,function(){map({you:'',designer:'done',coder:'working',guardian:''});say('coder took P-21, P-22, P-23');['a','b','c'].forEach(function(k){card(k,'c1','in progress','work')});$('pTest').innerHTML='<div class="hd">Tests · run by the coder</div>';pane('pTest');trs=[]}],
+ [500,function(){trs.push(test(TESTS[0]))}],[450,function(){trs.push(test(TESTS[1]))}],[450,function(){trs.push(test(TESTS[2]))}],[450,function(){trs.push(test(TESTS[3]))}],[450,function(){trs.push(test(TESTS[4]))}],
+ [700,function(){trs[0].classList.add('ok')}],[420,function(){trs[1].classList.add('ok')}],[420,function(){trs[2].classList.add('ok')}],[420,function(){trs[3].classList.add('ok')}],[420,function(){trs[4].classList.add('ok');var s=document.createElement('div');s.className='sum';s.textContent='5 of 5 pass';$('pTest').appendChild(s);setTimeout(function(){s.classList.add('on')},30)}],
+ [900,function(){map({you:'',designer:'done',coder:'done',guardian:'working'});say('guardian: app and tests match the spec')}],
+ [1200,function(){['a','b','c'].forEach(function(k){card(k,'c1','done','done')})}],
+ [800,function(){['a','b','c'].forEach(function(k,i){setTimeout(function(){cards[k].classList.add('out')},i*220)})}],
+ [1000,function(){['a','b','c'].forEach(function(k){var c=cards[k];if(c&&c.parentNode)c.parentNode.removeChild(c)});counts();$('board').classList.add('gone');$('app').classList.add('on');map({you:'1 to look at',designer:'done',coder:'done',guardian:'done'});say('live: the waitlist is in the app')}],
+ [2200,function(){$('offer').classList.add('on')}],
+ [6000,null]
+];
+function seed(){card('s1','c0','new');card('s2','c1','in progress','work');card('s3','c2','review');card('s4','c3','done','done');card('s5','c3','done','done')}
+var k=0,tm=null;
+function reset(){clearTimeout(tm);k=0;$('tk').innerHTML='';['c0','c1','c2','c3'].forEach(function(c){$(c).innerHTML=''});cards={};seed();$('side').classList.remove('on');pane('pSpec');$('board').classList.remove('half');$('board').classList.remove('gone');$('app').classList.remove('on');$('offer').classList.remove('on');$('msg').classList.remove('on');mic(false,'tap to talk');map({you:'',designer:'idle',coder:'idle',guardian:''})}
+function run(){if(k>=S.length){reset();tm=setTimeout(run,800);return}var s=S[k];tm=setTimeout(function(){if(s[1])s[1]();k++;run()},s[0])}
+$('rp').addEventListener('click',function(){reset();run()});
+reset();run();
+})();
+</script></body></html>
+"></iframe>
+<script>(function(){var f=document.getElementById("v2a-f");function fit(){try{var d=f.contentDocument;if(d&&d.body)f.style.height=(d.documentElement.scrollHeight+4)+"px"}catch(e){}}f.addEventListener("load",function(){fit();setInterval(fit,1500)})})()</script>
+</section>
+
<!-- Hero: talk your app into existence (designer-built, Razie approved 2026-10-03). Replaces the old Hero door and its app-chip mockups. Drop in as is. -->
<style>
…