<div class="scene"><div class="pieces"><span id="titlePiece">TITLE</span><span id="badgePiece">BADGE</span><span id="bodyPiece">BODY</span></div><div class="frame"><div class="slot" id="titleSlot">title slot</div><div class="slot" id="badgeSlot">badge slot</div><div class="slot" id="bodySlot">children slot</div></div><div class="label" id="status">assembling shared card</div></div>
.scene{width:min(94vw,800px);height:min(86vh,320px);position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:clamp(9px,2.4vmin,20px);font:500 clamp(15px,4vmin,18px)/1.3 var(--font-sans,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif)}.scene b,.scene strong{font-weight:700}.label{color:var(--muted)}.code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.pill{border:1px solid var(--line);border-radius:8px;padding:.4em .65em;background:var(--bg)}.active{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 10%,var(--surface))!important}.pieces{display:flex;gap:5px;justify-content:center}.pieces span{border:1px solid var(--accent);border-radius:5px;color:var(--accent);padding:.2em .35em;font:700 clamp(12px,3vmin,14px) ui-monospace,monospace}.pieces span.used{opacity:.65}.frame{flex:1;min-height:75px;margin:6px 0;border:2px solid var(--line);border-radius:9px;padding:clamp(5px,2vmin,10px);display:grid;grid-template-columns:1fr auto;grid-template-rows:1fr 1fr;gap:5px}.slot{border:1px dashed var(--line);border-radius:5px;display:grid;place-items:center;color:var(--muted);font-size:clamp(12px,3vmin,15px)}.slot.filled{border-style:solid;border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--fg)}#bodySlot{grid-column:1/3}.label{text-align:center;font-size:clamp(12px,3vmin,15px)}
let step=0;const parts=[["titlePiece","titleSlot","PROJECT"],["badgePiece","badgeSlot","ACTIVE"],["bodyPiece","bodySlot","One reusable card, many contents"]];function tick(){step=(step+1)%4;parts.forEach(([piece,slot],i)=>{document.getElementById(piece).classList.toggle("used",i<step);document.getElementById(slot).classList.toggle("filled",i<step);document.getElementById(slot).textContent=i<step?parts[i][2]:["title slot","badge slot","children slot"][i]});document.getElementById("status").textContent=step===3?"card assembled":"assembling shared card"}tick();setInterval(tick,760)