// ✅ 1번만 layout 계산
constitems=document.querySelectorAll('.item');constwidths=[];for(constelofitems)widths.push(el.offsetWidth);// all reads
for(leti=0;i<items.length;i++){items[i].style.width=(widths[i]*1.1)+'px';// all writes
}
requestAnimationFrame + double-buffer
functionresizeAll(){constitems=[...document.querySelectorAll('.item')];// measure phase
constwidths=items.map(el=>el.offsetWidth);// mutate phase — 다음 frame
requestAnimationFrame(()=>{items.forEach((el,i)=>{el.style.width=(widths[i]*1.1)+'px';});});}
constro=newResizeObserver(entries=>{// entries already has measurements — read 안 해도 됨
constupdates=entries.map(e=>({el:e.target,height:e.contentRect.height,}));requestAnimationFrame(()=>{for(constuofupdates)u.el.style.setProperty('--h',u.height+'px');});});ro.observe(document.querySelector('#panel'));