<divclass="glass page"><divclass="row"><div><divclass="kicker">Engineering capability</div><h1style="margin:8px 0 0;font-size:42px;line-height:1.04">Process Capability & Distribution</h1><divclass="sub">Histogram-based force and imbalance capability, one-sided CPU/CPK-style indicators against your configured thresholds, correlation between left and right columns, and suggested engineering action.</div></div><divclass="spacer"></div><divclass="mono sub"id="window-label">Window: --</div></div></div>
<divclass="glass page"><divclass="toolbar"><buttonclass="btn primary window-btn"data-window="1h">1h</button><buttonclass="btn window-btn"data-window="8h">8h</button><buttonclass="btn window-btn"data-window="24h">24h</button><buttonclass="btn window-btn"data-window="7d">7d</button><inputid="custom-window"class="input"style="width:140px"placeholder="e.g. 3h or 2d"><buttonid="apply-window"class="btn"type="button">Apply</button><divclass="spacer"></div><buttonid="refresh-btn"class="btn"type="button">Refresh</button></div></div>
<divclass="grid cards"><divclass="glass card"><divclass="kicker">Total Cpk @ critical</div><divid="total-cpk-critical"class="value mono">--</div><divid="total-cpk-sub"class="sub">Capability versus critical load limit</div></div><divclass="glass card"><divclass="kicker">Imbalance Cpk @ critical</div><divid="imb-cpk-critical"class="value mono">--</div><divid="imb-cpk-sub"class="sub">Capability versus critical imbalance limit</div></div><divclass="glass card"><divclass="kicker">Left ↔ right correlation</div><divid="corr-value"class="value mono">--</div><divclass="sub">Closer to 1.00 means both sides move together</div></div><divclass="glass card"><divclass="kicker">Suggested action</div><divid="action-pill"class="value"style="font-size:28px">--</div><divid="action-text"class="sub">Loading capability guidance…</div></div></div>
<divclass="chart-grid"><divclass="glass page"><divclass="row"><h2style="margin:0;font-size:28px">Total force distribution</h2><divclass="spacer"></div><spanclass="pill good">histogram</span></div><divclass="sub">Distribution of total peak force against configured warning and critical boundaries.</div><divclass="chart-box"><canvasid="totalHist"></canvas></div></div><divclass="glass page"><divclass="row"><h2style="margin:0;font-size:28px">Imbalance distribution</h2><divclass="spacer"></div><spanclass="pill warning">histogram</span></div><divclass="sub">Distribution of imbalance magnitude. A tight distribution below warning is usually what engineering wants.</div><divclass="chart-box"><canvasid="imbHist"></canvas></div></div></div>
function makeHistChart(id,label,color){return new Chart(document.getElementById(id),{type:'bar',data:{labels:[],datasets:[{label:label,borderColor:color,backgroundColor:color+'55',data:[]}]},options:{responsive:true,maintainAspectRatio:false,animation:false,plugins:{legend:{labels:{color:'#f4f4f5'}}},scales:{x:{grid:{color:'rgba(255,255,255,.06)'},ticks:{color:'#a1a1aa'}},y:{grid:{color:'rgba(255,255,255,.06)'},ticks:{color:'#a1a1aa'}}}}});}
async function loadCfg(){try{cfg=await AppUI.fetchJson('/api/config/public',{timeoutMs:8000});}catch(e){console.warn('Config load error:',e)}}
function useWindow(v){currentWindow=v; document.querySelectorAll('.window-btn').forEach(btn=>btn.classList.toggle('primary',btn.dataset.window===v)); refresh().catch(console.warn)}