<div class="norm"><div class="head">RAW SOURCES <b>→</b> SOURCE GROUP</div><div class="flow"><div class="raw"><span>news_mail</span><span>Newsletter</span><span>email-news</span></div><div class="arrow">→</div><div class="unified"><strong>EMAIL</strong><div class="bar" id="bar"></div><small id="count">1 SOURCE</small></div></div></div>
.norm{width:min(86%,580px);font:850 clamp(10px,max(2vmin,1vw),14px)/1.2 sans-serif}.head{border-bottom:2px solid var(--fg);padding-bottom:8px;letter-spacing:.06em}.head b{color:var(--accent);margin:0 6px}.flow{display:grid;grid-template-columns:1fr auto 1.2fr;gap:clamp(9px,2vmin,22px);align-items:center;margin-top:clamp(12px,3vmin,27px)}.raw{display:grid;gap:clamp(5px,1.3vmin,10px)}.raw span{padding:clamp(5px,1.5vmin,10px);border:1px solid var(--line);background:var(--surface);transition:opacity .4s,color .4s}.raw span.on{color:var(--accent);border-color:var(--accent)}.arrow{font-size:clamp(25px,7vmin,54px);color:var(--accent)}.unified{border-left:2px solid var(--fg);padding-left:clamp(8px,2vmin,17px)}.unified strong{font-size:clamp(18px,4vmin,32px)}.bar{height:clamp(13px,3vmin,24px);width:30%;background:var(--accent);margin:clamp(8px,2vmin,15px) 0;transition:width .5s}.unified small{color:var(--muted);font-size:clamp(10px,max(1.7vmin,1vw),12px)}
let n=1;const items=[...document.querySelectorAll('.raw span')];function draw(){items.forEach((x,i)=>x.classList.toggle('on',i<n));document.querySelector('#bar').style.width=n*30+'%';document.querySelector('#count').textContent=n+' RAW SOURCES'}draw();setInterval(()=>{n=n%3+1;draw()},800);