<div class="protocol"><div class="party">AGENT<small>PAY · SHIP</small></div><div class="bridge"><span>DISCOVER</span><div class="wire"></div><b id="state">SHARED: PAY</b><div class="wire"></div><span>NEGOTIATE</span></div><div class="party merchant">MERCHANT<small>PAY · SHIP · PICKUP</small></div></div>
.protocol{display:flex;align-items:center;justify-content:center;width:94%;gap:clamp(5px,1.5vmin,16px);font:900 clamp(10px,max(1.5vmin,1vw),14px)/1.2 sans-serif}.party{width:26%;height:clamp(85px,27vmin,170px);border:2px solid var(--fg);background:var(--surface);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(5px,1.5vmin,14px);text-align:center}.party small{color:var(--muted);font-size:clamp(10px,max(1.1vmin,1vw),12px)}.merchant{box-shadow:5px 5px 0 var(--accent-3)}.bridge{flex:1;text-align:center;display:grid;gap:clamp(4px,1vmin,10px);color:var(--muted);font-size:clamp(10px,max(1.2vmin,1vw),12px)}.bridge b{color:var(--accent);font-size:clamp(10px,max(1.4vmin,1vw),13px)}.wire{height:clamp(3px,.7vmin,6px);background:linear-gradient(90deg,var(--line),var(--accent),var(--line));background-size:200% 100%;animation:wire 2s linear infinite}@keyframes wire{to{background-position:200%}}
const state=document.querySelector('#state');const labels=['SHARED: PAY','SHARED: PAY + SHIP','PICKUP: BUYER HANDOFF'];let step=0;setInterval(()=>{step=(step+1)%labels.length;state.textContent=labels[step]},1400);