/* Layer Load, the public page. The page is the top bar and a set of drawing sheets. The sheets,
   their plates, tables, buttons and blue values are drawn by the sheet core and styled by
   ui/sheet.css; colours, fonts and the top bar come from the zanbur.tech kit (ui/tokens.css,
   ui/fonts.css, ui/components.css; all from ../../zanbur-ui). What is here is Layer Load's own:
   where the sheet sits on the page, and what the page draws inside its two view plates (the 3D
   drawing with its controls).
   Everything on a sheet uses the sheet's tokens only (--paper, --ink, --ink-light, --rule, --dim,
   --hot, --alarm, --good-ink, --warn, --mono) and square corners. Colour always means something
   (blue = can be changed, orange = the action is here, red = trouble); never write a colour here.
   Sizes on a sheet are shares of its width (cqw), as in sheet.css. Nothing here loads from another site. */
/* (the bar's height, --topbar, is the kit's: ui/tokens.css, the same on every page) */
[hidden] { display:none !important; }
body.zu-page { background:var(--desk); }

/* ---- top bar. The empty box at its right end is where the sign-in button will go. ---- */
.zu-account:empty { display:none; }

/* ---- the sheet set: as large as fits the window with the whole sheet in view. A narrow window
   (a phone) shows the sheet at its smallest size and scrolls it sideways inside its own box
   (.zs-wrap in sheet.css), so the page itself never scrolls sideways. ---- */
#sheets { min-width:0; height:calc(100dvh - var(--topbar)); }
/* a file dragged over the page: the sheet says it will take it */
body.dragging .zs-sheet { outline:var(--pen-border) dashed var(--hot); outline-offset:-0.8cqw; }
/* A drawing sheet has three lines of notes at most and a title block of two lines: the foot is no taller than they need, so the view
   above it has the room (the core's floor is 11 % of the sheet's width; 9 holds these). */
.ll-page .zs-sheet__foot { min-height:9cqw; }
/* the few sentences that stay on a sheet keep their line breaks (About); a copied link is one long word that breaks where its cell ends */
.ll-page .zs-plate[data-plate="file_note"] td.num, .ll-page .zs-plate[data-plate="save_note"] td.num, .ll-page .zs-plate[data-plate="page"] tr[data-var="link"] td.num { white-space:pre-line; overflow-wrap:anywhere; }
/* the buttons of the band stand in a column, each the width of its plate */
.ll-page .zs-plate:is([data-plate="run"], [data-plate="open_quick"], [data-plate="place"], [data-plate^="export_"], [data-plate="home"], [data-plate="engine"]) .zs-btns { flex-direction:column; align-items:stretch; gap:.45cqw; }
.ll-page .zs-plate:is([data-plate="run"], [data-plate="open_quick"], [data-plate="place"], [data-plate^="export_"]) .zs-btn { padding:.3cqw .6cqw; min-height:2.1cqw; }
/* The Settings graph (js/settings-graph.js): each box a column of its own width, so the joins between have room for what they carry;
   its sub, its one line and its buttons wrap inside it (the kit's boxes are as wide as their longest line) */
.ll-page .zs-plate[data-plate="settings"] .zs-node { width:16cqw; }
.ll-page .zs-plate[data-plate="settings"] .zs-node__t small, .ll-page .zs-plate[data-plate="settings"] .zs-node__note { white-space:normal; max-width:none; }
.ll-page .zs-plate[data-plate="settings"] .zs-node__r > span { overflow:hidden; text-overflow:ellipsis; }
.ll-page .zs-plate[data-plate="settings"] .zs-node .zs-table td { white-space:normal; overflow-wrap:normal; }
.ll-page .zs-plate[data-plate="settings"] .zs-node .zs-table td:first-child { width:34%; }
.ll-page .zs-plate[data-plate="settings"] .zs-node .zs-table td.unit:empty { padding:0; width:0; }
.ll-page .zs-plate[data-plate="settings"] .zs-node__btns { display:grid; grid-template-columns:1fr 1fr; }
.ll-page .zs-plate[data-plate="settings"] .zs-node__btns .zs-btn { padding:.1cqw .2cqw; letter-spacing:.02em; }
/* the Method switch, first on the Model box (the one switch: Blocks | Bead paths, 2026-10-17) */
.ll-page .zs-plate[data-plate="settings"] .zs-node__lead { grid-template-columns:auto 1fr 1fr; }
.ll-page .zs-plate[data-plate="settings"] .zs-node__lead .zs-btn { padding:.3cqw .3cqw; font-size:var(--zs-fs-l); }
.ll-page .zs-plate[data-plate="method"] .zs-btns .zs-btn { font-size:var(--zs-fs-l); font-weight:700; min-width:9em; }
/* the views the page draws are made before the sheets and wait out of sight */
body > .field { display:none; }

/* ---- the 3D drawing: one canvas, kept by the sheet core and shown on every sheet that has the plate "drawing" ---- */
.field { position:absolute; inset:0; overflow:hidden; --rail:50px; }     /* --rail: the strip up the right edge that the layer slider stands in */
#viewplate { position:absolute; inset:0; }
canvas#view { display:block; width:100%; height:100%; touch-action:none; outline:none; }
/* a touch screen: one finger scrolls the page, two move the drawing (js/viewer.js; the kit's ZuTouch.twoFinger sets the same) */
@media (hover:none) and (pointer:coarse) { canvas#view { touch-action:pan-y; } }
.field .zu-caption { position:absolute; left:1.2cqw; bottom:calc(.5cqw + 50px); right:calc(var(--rail) + 8px); font-size:max(9px,.92cqw); pointer-events:none; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#legend { position:absolute; right:calc(.6cqw + var(--rail) + 8px); top:1cqw; border:var(--pen-dim) solid var(--ink); background:var(--paper); padding:.8cqw 1cqw; font-size:max(8.5px,.86cqw); min-width:13cqw; max-width:34%; pointer-events:none; }
#legend .ttl { font-weight:700; margin-bottom:4px; text-transform:uppercase; letter-spacing:.06em; }
#legend .bar { display:flex; gap:6px; }
#legend .col { width:max(10px,1.5cqw); height:max(86px,15cqw); border:var(--pen-dim) solid var(--ink); flex:none; }
#legend .ticks { display:flex; flex-direction:column; justify-content:space-between; height:max(86px,15cqw); font-variant-numeric:tabular-nums; }
#legend .cats div { display:flex; align-items:center; gap:5px; margin:2px 0; }
#legend .cats i { width:max(9px,1.1cqw); height:max(9px,1.1cqw); display:inline-block; border:var(--pen-dim) solid var(--ink); flex:none; }
#legend .sub { margin-top:4px; color:var(--ink-light); }
/* the drawing's own controls are drawn on it: square, in ink. They are the same values as on the plate "The drawing shows". */
.viewtools { position:absolute; left:1cqw; top:1cqw; display:flex; flex-direction:column; gap:5px; align-items:flex-start; max-width:46%; }
.viewtools select, .cutbar select { font-family:var(--mono); font-size:max(11px,.9cqw); min-height:34px; padding:4px 6px; background:var(--paper); color:var(--ink); border:var(--pen-dim) solid var(--ink); border-radius:0; max-width:100%; }
/* the drawing's colours: a secondary control, named, quieter than the result sheet's Show (UI audit 2026-10-18, finding 4:
   the big select at the top left read as the Show) */
.viewtools__colours { display:flex; align-items:center; gap:6px; max-width:100%; font-family:var(--mono); font-size:max(10.5px,.8cqw); letter-spacing:.06em; text-transform:uppercase; color:var(--ink-light); }
.viewtools__colours select { border-color:var(--ink-light) !important; font-size:max(11px,.82cqw) !important; min-height:28px !important; }
.zs-wrap.is-portrait .viewtools__colours select { min-height:40px !important; font-size:14px !important; }
.viewtools .methodtag { font-family:var(--mono); font-size:max(11px,.86cqw); letter-spacing:.04em; text-transform:uppercase; color:var(--ink); background:var(--paper); border:var(--pen-dim) solid var(--ink-light); padding:5px 8px; align-self:center; }
.viewtools .zu-seg .zu-btn { font-family:var(--mono); background:var(--paper); color:var(--ink); border:var(--pen-dim) solid var(--ink); border-radius:0; min-height:30px; padding:3px 9px; font-size:max(11px,.86cqw); }
.viewtools .zu-seg .zu-btn + .zu-btn { border-left:0; }
.viewtools .zu-seg .zu-btn.is-on { background:var(--ink); color:var(--paper); }
/* The sliders on the drawing, as a slicer has them: bend under the view buttons, the layers up the
   right edge, the cut along the bottom. Each is a fine ink line with a square ink handle. The handle
   is --grip across to the finger (40 px or more); what is drawn of it is smaller. Only the handles
   and the boxes take a tap: between them the part can still be turned and tapped. */
.viewslide { position:relative; display:block; pointer-events:none; }
.viewslide > span, #layerval { font-size:10px; line-height:1.35; background:var(--paper); color:var(--ink); border:var(--pen-dim) solid var(--ink); padding:0 3px; white-space:nowrap; pointer-events:none; }
.viewslide > span { position:absolute; left:0; top:0; z-index:1; text-transform:uppercase; letter-spacing:.06em; }
.field .zu-range { --grip:44px; -webkit-appearance:none; appearance:none; display:block; width:100%; height:var(--grip); min-height:0; margin:0; padding:0; border:0; pointer-events:auto; cursor:pointer;
  background:linear-gradient(var(--ink),var(--ink)) center / calc(100% - var(--grip)) 1.6px no-repeat, linear-gradient(var(--paper),var(--paper)) center / calc(100% - var(--grip) + 2px) 3.6px no-repeat; }
.field .zu-range::-webkit-slider-runnable-track { height:100%; background:none; border:0; }
.field .zu-range::-moz-range-track { height:100%; background:none; border:0; }
.field .zu-range::-webkit-slider-thumb { -webkit-appearance:none; width:var(--grip); height:var(--grip); border:0; border-radius:0; box-shadow:none;
  background:linear-gradient(var(--ink),var(--ink)) center / 10px 22px no-repeat, linear-gradient(var(--paper),var(--paper)) center / 13px 25px no-repeat; }
.field .zu-range::-moz-range-thumb { width:var(--grip); height:var(--grip); border:0; border-radius:0;
  background:linear-gradient(var(--ink),var(--ink)) center / 10px 22px no-repeat, linear-gradient(var(--paper),var(--paper)) center / 13px 25px no-repeat; }
.viewtools .viewslide { align-self:stretch; min-width:min(100%,150px); }
.layerrail { position:absolute; right:.6cqw; top:1cqw; bottom:calc(.5cqw + 50px); width:var(--rail); display:flex; flex-direction:column; align-items:flex-end; gap:2px; pointer-events:none; }
#layerval { display:block; flex:none; text-align:right; font-variant-numeric:tabular-nums; }
#layerval b { display:block; }
/* upright: the first layer at the bottom, the last at the top */
.field #layer { writing-mode:vertical-lr; direction:rtl; flex:1; width:var(--grip); height:auto; min-height:0; touch-action:none;
  background:linear-gradient(var(--ink),var(--ink)) center / 1.6px calc(100% - var(--grip)) no-repeat, linear-gradient(var(--paper),var(--paper)) center / 3.6px calc(100% - var(--grip) + 2px) no-repeat; }
.field #layer::-webkit-slider-runnable-track { width:100%; height:100%; }
.field #layer::-moz-range-track { width:100%; height:100%; }
.field #layer::-webkit-slider-thumb { background-size:22px 10px, 25px 13px; }
.field #layer::-moz-range-thumb { background-size:22px 10px, 25px 13px; }
.cutbar { position:absolute; left:1cqw; right:1cqw; bottom:.5cqw; display:flex; align-items:center; gap:6px; pointer-events:none; }
.cutbar select { flex:none; min-height:var(--tap); pointer-events:auto; }
.cutbar .viewslide { flex:1; min-width:0; }
/* the time slider of Impact, Fatigue or Creep: over the cut, with Play beside it and the moment in words; the caption moves up over it */
.timebar { position:absolute; left:1cqw; right:calc(var(--rail) + 8px); bottom:calc(.5cqw + 46px); pointer-events:none; }
.timebar[hidden] { display:none; }
/* the kit's time bar (ZuSheet.timebar, ui/sheet.css), on paper so its words read over the drawing, in one line */
.timebar .zs-time { flex-wrap:nowrap; pointer-events:auto; background:var(--paper); border:var(--pen-dim) solid var(--ink); padding:2px 4px; font-size:10px; }
.field.has-time .zu-caption { bottom:calc(.5cqw + 96px); }
/* a browser without 3D shows a note in place of the drawing: nothing to slide */
#noview:not([hidden]) ~ .layerrail, #noview:not([hidden]) ~ .cutbar, #noview:not([hidden]) ~ .timebar { display:none; }
#noview { position:absolute; inset:0; display:grid; place-items:center; text-align:center; padding:20px; color:var(--ink-light); }
/* the chooser that appears where the part was tapped: a fixture, or a load */
.spotpop { position:absolute; z-index:3; display:flex; flex-wrap:wrap; align-items:center; gap:6px; max-width:calc(100% - 16px); padding:6px; background:var(--paper); border:var(--pen-object) solid var(--ink); }
.spotpop .zs-btn { min-height:var(--tap); padding:4px 12px; font-size:max(11px,.9cqw); }
.spotpop small { flex-basis:100%; color:var(--ink-light); font-size:max(9px,.72cqw); padding:0 2px; }
.spotpop [hidden] { display:none !important; }
.spotpop b { flex-basis:100%; font-size:max(11px,.85cqw); padding:0 2px; color:var(--ink); }
/* the face under the pointer, named beside it (js/faces-ui.js) */
.facetip { position:absolute; z-index:3; pointer-events:none; max-width:min(360px, calc(100% - 8px)); padding:3px 8px; background:var(--paper); border:var(--pen-object, 1px) solid var(--accent, #0a84ff); color:var(--ink); font-size:max(11px,.8cqw); line-height:1.3; }
.facetip[hidden] { display:none; }
/* the ring that marks where the failure index is highest: drawn over the canvas, so it shows through the part */
#peakmark { position:absolute; width:22px; height:22px; margin:-11px 0 0 -11px; border:2.5px solid var(--ink); border-radius:50%; box-shadow:0 0 0 1.5px var(--paper); pointer-events:none; display:none; }
#peakmark::after { content:'highest'; position:absolute; left:24px; top:1px; font-size:10px; letter-spacing:.06em; text-transform:uppercase; background:var(--paper); color:var(--ink); padding:0 3px; border:var(--pen-dim) solid var(--ink); }
/* how far a run has got, over the top of the drawing while it works (the sheet is not drawn again while it moves) */
.pbar { position:absolute; left:50%; bottom:calc(.5cqw + 78px); transform:translateX(-50%); width:min(46%,360px); height:22px; z-index:2; background:var(--paper); border:var(--pen-object) solid var(--ink); overflow:hidden; pointer-events:none; }
.pbar i { position:absolute; left:0; top:0; bottom:0; background:var(--hot); opacity:.35; }
.pbar span { position:absolute; inset:0; display:grid; place-items:center; font-size:10px; letter-spacing:.04em; white-space:nowrap; color:var(--ink); }
.pbar.is-wait i { width:30% !important; animation:pbar-wait 1.2s linear infinite; }
@keyframes pbar-wait { from { left:-30%; } to { left:100%; } }
@media print { .pbar, .spotpop, .facetip { display:none; } }
/* a long value (the name of a choice, a sentence in a table) breaks over lines instead of running off its plate */
.zs-sheet tr[data-var] td.num, .zs-plate[data-plate="numbers"] td, .zs-plate[data-plate="mode_numbers"] td, .zs-plate[data-plate="loads"] td,
.zs-plate:is([data-plate="physics_cost"], [data-plate="physics_did"], [data-plate="checklist"], [data-plate="mode_numbers"], [data-plate="material_values"], [data-plate="material_db"], [data-plate="bead_numbers"], [data-plate="examples"]) td { white-space:normal; }
/* ... but not its numbers, its yes or no, or its state */
.zs-sheet .zs-plate td.num, .zs-sheet .zs-plate td.item, .zs-sheet .zs-plate td.zs-status, .zs-sheet .zs-plate td:has(> .is-toggle) { white-space:nowrap; }
.zs-sheet tr[data-var] td:first-child { white-space:nowrap; }
/* The one table of twenty-two rows (the bead-path numbers) is ruled a hair closer than the others (2.0 against 2.1), so that all of it stands on its sheet. */
.ll-page .zs-plate:is([data-plate="bead_numbers"], [data-plate="material_db"]) .zs-table th, .ll-page .zs-plate:is([data-plate="bead_numbers"], [data-plate="material_db"]) .zs-table td { height:2cqw; padding-top:.22cqw; padding-bottom:.22cqw; }
/* the headings of the narrow reference tables break over two lines rather than widen their table */
.ll-page .zs-plate:is([data-plate="material_values"], [data-plate="physics_cost"], [data-plate="checklist"], [data-plate="material_db"], [data-plate="loads"]) th { white-space:normal; }
.ll-page .zs-plate[data-plate="material_db"] td:not(:nth-child(2)) { white-space:nowrap; }
/* the model's reference lists (MODEL DATA) break their long cells over lines and scroll down, never sideways */
.ll-page .zs-plate[data-plate^="model-"] td { white-space:normal; }
/* the values of the band stand on one line each */
.ll-page .zs-plate:is([data-plate="show"], [data-plate="answer"], [data-plate="also"], [data-plate="beads"], [data-plate="mode_out"], [data-plate="on_drawing"], [data-plate="spot"]) tr[data-var] td.num { white-space:nowrap; }
/* The Result title block (every result sheet) lead with the verdict (UI audit 2026-10-15, LL1): their first row runs across the whole
   block, the verdict in large type in the colour of its tone (html data-ll-result; data-ll-impact, -fatigue, -creep, -dynamic on one showing that view, each judged by its own index: app.js), what gives first
   and where under it in the block's own size; the label "qualitative, for comparing prints" stays small above it. The kit's title
   block has no lead row yet: when it has, this goes. */
/* (a result sheet showing every number has a plain title block, as the Numbers sheet had: its tables take the height; :has, no hook in the kit)
   (the block is wider on these sheets, so the verdict stands on one line and the drawing keeps two thirds of the sheet; the rows a hair closer) */
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-sheet__foot { grid-template-columns:minmax(0,1fr) 52cqw; }
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock td { padding-top:.1cqw; padding-bottom:.1cqw; }
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr { display:contents; }
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td { grid-column:1 / -1; white-space:normal; line-height:1.2; }
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td:first-child { font-size:max(15px, 1.55cqw); font-weight:700; line-height:1.05; }   /* the verdict: 1.5x the line under it (the kit's small type) */
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td:first-child small { font-weight:400; }
html[data-ll-result="ok"] .zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"], [data-plate="mode_in"], [data-plate="mode_setup"], [data-plate="dynamic_out"])) .zs-tblock > tr:first-child > td:first-child, html[data-ll-impact="ok"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="impact_mass_kg"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-fatigue="ok"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="fatigue_cycles"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-creep="ok"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="creep_hours"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-dynamic="ok"] .zs-sheet[data-sheet^="result"]:has([data-plate="dynamic_out"]) .zs-tblock > tr:first-child > td:first-child { color:var(--good-ink); }
html[data-ll-result="watch"] .zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"], [data-plate="mode_in"], [data-plate="mode_setup"], [data-plate="dynamic_out"])) .zs-tblock > tr:first-child > td:first-child, html[data-ll-impact="watch"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="impact_mass_kg"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-fatigue="watch"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="fatigue_cycles"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-creep="watch"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="creep_hours"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-dynamic="watch"] .zs-sheet[data-sheet^="result"]:has([data-plate="dynamic_out"]) .zs-tblock > tr:first-child > td:first-child { color:var(--warn); }
html[data-ll-result="bad"] .zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"], [data-plate="mode_in"], [data-plate="mode_setup"], [data-plate="dynamic_out"])) .zs-tblock > tr:first-child > td:first-child, html[data-ll-impact="bad"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="impact_mass_kg"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-fatigue="bad"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="fatigue_cycles"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-creep="bad"] .zs-sheet[data-sheet^="result"]:has([data-plate="mode_in"] tr[data-var="creep_hours"]) .zs-tblock > tr:first-child > td:first-child, html[data-ll-dynamic="bad"] .zs-sheet[data-sheet^="result"]:has([data-plate="dynamic_out"]) .zs-tblock > tr:first-child > td:first-child { color:var(--alarm); }
/* Layer temperatures (js/thermal-panel.js) judges nothing: its title block leads with the coolest and hottest layer in ink, not in a verdict's tone */
.zs-sheet[data-sheet^="result"]:has([data-plate="temps_out"]) .zs-tblock > tr:first-child > td:first-child { color:var(--ink) !important; }
/* a mode shown but not chosen on Simulate (UI audit 2026-10-18, LL3): not judged, said in amber, as anything not worked out */
.zs-sheet[data-sheet^="result"]:has([data-plate="mode_setup"]) .zs-tblock > tr:first-child > td:first-child { color:var(--warn); }
.zs-sheet [data-plate="mode_setup"] td.is-wrap { text-align:left; }   /* (its line is words, not a number) */
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td:first-child small { color:var(--ink-light); }
/* a file that could not be opened is said over the drawing, and the drawing under it is faded: it is not the file that was chosen (LL5) */
.badopen { position:absolute; left:50%; top:46%; transform:translate(-50%,-50%); width:min(72%, 40cqw); z-index:3; background:var(--paper); border:var(--pen-object) solid var(--alarm); padding:1.1cqw 1.3cqw; color:var(--ink); font-size:max(10px, .95cqw); line-height:1.35; }
.badopen b { display:block; color:var(--alarm); font-size:max(12px, 1.45cqw); letter-spacing:.04em; text-transform:uppercase; margin-bottom:.5cqw; overflow-wrap:anywhere; }
.badopen p { margin:0 0 .6cqw; }
.field.is-bad #viewplate, .field.is-bad #legend, .field.is-bad #peakmark { opacity:.15; }
@media print { .badopen { display:none; } }
/* on a sheet drawn small (a narrow window) the verdict keeps its row, in the sheet's own size, and the line under it is left to the band's "Gives first" */
@container (max-width: 999px) {
  .zs-wrap:not(.is-portrait) .zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td:first-child { font-size:max(9px, 1.4cqw); }
  .zs-wrap:not(.is-portrait) .zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:first-child > td:nth-child(2) { display:none; }
}
/* the line under the verdict (what gives first, where) in the kit's small type: it explains the verdict, it is not the verdict */
.zs-sheet[data-sheet^="result"]:not(:has([data-plate="numbers"])) .zs-tblock > tr:nth-child(2) > td { font-size:var(--zs-fs-s); }
/* on a portrait sheet (a phone; the kit's portrait sheets): the drawing's own lettering a phone's, its controls a fingertip high */
.zs-wrap.is-portrait .field .zu-caption, .zs-wrap.is-portrait #legend, .zs-wrap.is-portrait .viewslide > span, .zs-wrap.is-portrait #layerval, .zs-wrap.is-portrait .timebar .zs-time { font-size:12px; }
.zs-wrap.is-portrait #legend { left:6px; right:calc(var(--rail) + 8px); top:auto; bottom:calc(.5cqw + 96px); padding:5px 8px; min-width:0; max-width:none; }   /* (a band along the foot of the drawing, over the cut: an upright drawing has no room beside its buttons) */
.zs-wrap.is-portrait #legend .col, .zs-wrap.is-portrait #legend .ticks { height:64px; }
.zs-wrap.is-portrait #legend .cats { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:0 10px; }
.zs-wrap.is-portrait #legend .cats div { align-items:flex-start; line-height:1.25; }
.zs-wrap.is-portrait .viewtools { left:6px; top:6px; max-width:48%; }
.zs-wrap.is-portrait .viewtools select, .zs-wrap.is-portrait .cutbar select { font-size:14px; min-height:40px; }
.zs-wrap.is-portrait .viewtools .zu-seg .zu-btn { font-size:13px; min-height:40px; }
/* text cut with "…" at 1440 (UI audit 2026-10-18, LL11): the title block's values and the line under each sheet's name wrap onto a
   second line instead (the kit's cells are one line, cut); the notes are written short enough for one line at a desk's width */
main#sheets .zs-wrap:not(.is-portrait) .zs-tblock td:not(.name) { white-space:normal; overflow-wrap:anywhere; }
main#sheets .zs-wrap:not(.is-portrait) .zs-tblock td.name > small:last-child { white-space:normal; }
