diff --git a/docs/factory-console.html b/docs/factory-console.html index a2d97b6..ef3a375 100644 --- a/docs/factory-console.html +++ b/docs/factory-console.html @@ -144,11 +144,16 @@ document.documentElement.setAttribute("data-theme",t);})(); /* feed */ .feed { display: flex; flex-direction: column; font-size: 12.5px; } - .fr { display: grid; grid-template-columns: 62px minmax(0, 1.5fr) 82px minmax(0, 1fr); gap: 10px; padding: 4px 0; border-bottom: 1px dashed var(--line); align-items: baseline; } + /* fixed columns sized in characters of the mono font, so a longer ID never pushes the next column */ + .fr { display: grid; grid-template-columns: 8.4ch 10.6ch 5ch 9ch minmax(0, 1fr); column-gap: 14px; padding: 4px 0; border-bottom: 1px dashed var(--line); align-items: baseline; font-family: var(--mono); font-variant-numeric: tabular-nums; } + .fr > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .fr:last-child { border-bottom: 0; } - .fr .k { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--mute); } - .fr .fo { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } - .fr .v { color: var(--ok); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .fr .k, .fr .pr { color: var(--mute); } + .fr .v { color: var(--ok); font-family: system-ui, -apple-system, "Segoe UI", sans-serif; } + /* the header row keeps the mono font on the row itself, so its ch-based columns match the data rows; only the labels change font */ + .fr.hd { color: var(--faint); border-bottom: 1px solid var(--line); padding-top: 0; } + .fr.hd > span { font-family: system-ui, -apple-system, "Segoe UI", sans-serif; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.06em; } + .feed.cf .fr { grid-template-columns: 8.4ch 7ch 10.6ch 5ch minmax(0, 1fr); } .fr.bad .v { color: var(--bad); font-weight: 650; } .al { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--line); color: var(--ink); text-decoration: none; } @@ -235,7 +240,7 @@ document.documentElement.setAttribute("data-theme",t);})(); .wo.todo { border-left-color: var(--inv); } .wo.done { border-left-color: var(--ok); opacity: 0.86; } .wo-h { display: flex; align-items: center; gap: 8px; font-size: 11.5px; min-width: 0; } - .wo-h .who { margin-left: auto; color: var(--mute); white-space: nowrap; } + .wo-h .wid { margin-left: auto; color: var(--faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .wo b { font-size: 13.5px; font-weight: 650; } .wo .rf { font-size: 12px; color: var(--mute); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .wo small { color: var(--mute); } @@ -349,8 +354,10 @@ document.documentElement.setAttribute("data-theme",t);})(); .chero .dw { max-width: 170px; margin: 0 auto; } .chero h1 { font-size: 27px; } .big { font-size: 42px; } - .fr { grid-template-columns: 58px minmax(0, 1fr) minmax(0, 0.9fr); } + .fr { grid-template-columns: 8.4ch 10.6ch 4.4ch minmax(0, 1fr); column-gap: 9px; } .fr .fo { display: none; } + .feed.cf .fr { grid-template-columns: 8.4ch 6.4ch 10.6ch minmax(0, 1fr); } + .feed.cf .fr .pr { display: none; } .pipe a { grid-template-columns: 120px minmax(0, 1fr) 34px; } .pareto div { grid-template-columns: 112px minmax(0, 1fr) 40px; } ol.ks li { grid-template-columns: 30px minmax(0, 1fr); } @@ -820,7 +827,7 @@ function audioTable(list,showOrder){const L=list.slice(-10).reverse();if(!L.leng function paretoHTML(by){const L=Object.entries(by).sort((a,b)=>b[1]-a[1]);if(!L.length)return '
No rejects yet.
';const mx=L[0][1]; return `The presses are off for the night. Records appear here as they leave the press.
'; - return `What every station does now and next. On the floor each station shows its own list on a kiosk: the operator taps the access badge and scans what each step asks for, and every confirmation lands in the event log.
The first copies appear here as they leave the press.
'}Record key: stamper, press and the second it was pressed. It is printed on the sleeve as a code and opens the record passport.
The first copies appear here as they leave the press.
'}Record key: stamper, press and the second it was pressed. It is printed on the sleeve as a code and opens the record passport.
Press ${p.id} last cycle: ${f1(p.tel[p.tel.length-1].cyc)} s, steam ${f1(p.tel[p.tel.length-1].steam)} °C, cake ${f1(p.tel[p.tel.length-1].cake)} g.
`:""}${o.audio.some(a=>a.rt>S.t)?`${(n=>n+(n>1?" copies":" copy"))(o.audio.filter(a=>a.rt>S.t).length)} at the listening station now.
`:""}