/* ============================================================
 *  picking-list.css
 *
 *  AUTO-GENERATED by scripts/port-prototype-css.js
 *  Source: prototypes\wo-setup\public\option-31-cnc-picking-list.html
 *  Scope:  #cnc-tab
 *
 *  This file is a verbatim port of the prototype's inline <style>
 *  block, with every selector auto-scoped under `#cnc-tab` (except
 *  body-appended overlays like .cnc-eom-overlay / .plp-overlay /
 *  .picker-overlay / .palette-overlay / .jmd-toast, which stay global).
 *
 *  DO NOT EDIT BY HAND — re-run the port script if the prototype changes.
 * ============================================================ */

/* Scope-shell layout — the prototype's <body> uses
 *   html, body { height:100%; overflow:hidden; }
 *   body { display:flex; flex-direction:column; }
 * to make the inner .body div's flex:1 actually fill the viewport. The
 * port strips global body rules, so without this the production tab
 * shell stays display:block and its children can't grow — content stops
 * at its natural height and the rest of the viewport stays empty.
 *
 * Qualifying with .active so we ONLY override layout when the tab is
 * visible — production's .tab-content / .q-vpanel default to display:none
 * for inactive tabs, and an unqualified ID selector here would beat that
 * (ID > class specificity) and force inactive tabs to layout in flow. */
#cnc-tab.active {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
    min-height: 0;
}


  /* ─────────────────────────────────────────────────────────────
     Option 31 — CNC Picking List View (rev 2)
     3-column body: Pick lists · Center detail · Applied-to-tasks panel
     Header carries running-sheet info + mini sheet preview + label sticker
     Expanded sheet rows show large wood-grained SVG with clickable parts
     ───────────────────────────────────────────────────────────── */

  
  

  /* ── Top bar ─────────────────────────────────────────────── */
  #cnc-tab .cnc-topbar {
    display:flex; align-items:center; gap:12px;
    padding:10px 18px; background:var(--bg-surface);
    border-bottom:1px solid var(--border); flex-shrink:0;
  }
  #cnc-tab .cnc-topbar .back {
    padding:5px 12px; background:transparent;
    border:1px solid var(--border-strong); color:var(--fg-2);
    border-radius:var(--r-sm); cursor:pointer; font-size:var(--fs-sm);
    font-family:inherit;
  }
  #cnc-tab .cnc-topbar .back:hover { color:var(--brand); border-color:var(--brand); }
  #cnc-tab .cnc-topbar h1 {
    margin:0; font-family:var(--font-display);
    font-size:var(--fs-body-lg); font-weight:600; letter-spacing:-0.012em;
  }
  #cnc-tab .cnc-topbar .tag {
    font-size:10px; padding:2px 9px; border-radius:99px;
    background:var(--brand-subtle); color:var(--brand);
    font-weight:600; text-transform:uppercase; letter-spacing:0.12em;
  }
  #cnc-tab .cnc-topbar .grow { flex:1; }
  #cnc-tab .cnc-search {
    display:flex; align-items:center; gap:8px;
    padding:6px 12px; background:var(--bg-app);
    border:1px solid var(--border); border-radius:var(--r-sm);
    width:280px; cursor:pointer;
  }
  #cnc-tab .cnc-search:hover { border-color:var(--border-strong); }
  #cnc-tab .cnc-search .placeholder { color:var(--fg-3); font-size:var(--fs-sm); flex:1; }
  #cnc-tab .cnc-search .kbd {
    padding:1px 6px; border:1px solid var(--border);
    border-radius:4px; font-size:var(--fs-overline); color:var(--fg-3);
    background:var(--bg-app); font-variant-numeric:tabular-nums;
  }

  /* ── Tab strip ───────────────────────────────────────────── */
  #cnc-tab .tab-strip {
    display:flex; align-items:stretch; gap:6px;
    padding:10px 18px 0; background:var(--bg-surface);
    border-bottom:1px solid var(--border); flex-shrink:0;
  }
  #cnc-tab .tab-strip .ts-grow { flex:1; }
  #cnc-tab .tab-strip .top-eom-btn {
    align-self:center;
    margin-bottom:6px;
    padding:9px 18px;
    background:var(--brand); color:var(--fg-on-brand);
    border:1px solid var(--brand); border-radius:var(--r-md);
    font-family:var(--font-display);
    font-size:14px; font-weight:600;
    cursor:pointer; transition:background 120ms;
    display:inline-flex; align-items:center; gap:8px;
    box-shadow:var(--shadow-sm);
  }
  #cnc-tab .tab-strip .top-eom-btn:hover { background:var(--brand-hover); }
  #cnc-tab .tab-strip .top-eom-btn .arrow { font-size:var(--fs-body); line-height:1; }
  #cnc-tab .tab-strip .top-eom-btn .live-dot {
    width:7px; height:7px; border-radius:99px;
    background:#fff; opacity:0.9;
    animation:jmdPulse 1.2s infinite;
  }
  #cnc-tab .tab-strip .tab {
    display:flex; align-items:center; gap:10px;
    padding:9px 18px 10px;
    border:1px solid var(--border); border-bottom:none;
    border-radius:var(--r-md) var(--r-md) 0 0;
    background:var(--bg-app); color:var(--fg-2);
    font-size:14px; cursor:pointer; font-family:inherit;
    font-weight:500; letter-spacing:-0.005em;
    margin-bottom:-1px; position:relative;
  }
  #cnc-tab .tab-strip .tab:hover {
    background:var(--bg-subtle); color:var(--fg-1);
  }
  #cnc-tab .tab-strip .tab.active {
    background:var(--brand); color:var(--fg-on-brand);
    border-color:var(--brand);
    box-shadow:0 -1px 0 var(--brand);
    z-index:1;
  }
  #cnc-tab .tab-strip .tab .tab-name {
    font-family:var(--font-display);
    font-size:var(--fs-body); font-weight:600;
  }
  #cnc-tab .tab-strip .tab .count-badge {
    font-size:var(--fs-caption); padding:1px 8px;
    border-radius:99px; background:rgba(255,255,255,0.18);
    color:inherit; font-variant-numeric:tabular-nums;
    font-weight:600;
  }
  #cnc-tab .tab-strip .tab:not(.active) .count-badge {
    background:var(--bg-sunken); color:var(--fg-2);
  }

  /* ── Body grid — 3 columns + 2 vertical splitters ────────── */
  #cnc-tab .body {
    flex:1; display:grid;
    grid-template-columns:var(--left-w,320px) 6px minmax(0,1fr) 6px var(--right-w,360px);
    min-height:0;
    position:relative;
  }
  /* Vertical splitter handles */
  #cnc-tab .v-splitter {
    cursor:col-resize;
    background:transparent;
    border-left:1px solid var(--border);
    border-right:1px solid var(--border);
    transition:background 120ms;
    position:relative;
    user-select:none;
  }
  #cnc-tab .v-splitter:hover, #cnc-tab .v-splitter.dragging {
    background:rgba(181,136,58,0.55);
  }
  #cnc-tab .v-splitter::after {
    content:''; position:absolute;
    left:1px; top:50%; transform:translateY(-50%);
    width:2px; height:36px; border-radius:2px;
    background:var(--border-strong);
    opacity:0.55;
  }
  #cnc-tab .v-splitter:hover::after, #cnc-tab .v-splitter.dragging::after {
    background:#fff; opacity:0.9;
  }
  /* Horizontal splitter (between cutting + queue) */
  #cnc-tab .h-splitter {
    height:6px; cursor:row-resize;
    background:transparent;
    border-top:1px solid var(--border-strong);
    border-bottom:1px solid var(--border-strong);
    transition:background 120ms;
    position:relative;
    user-select:none;
    flex-shrink:0;
  }
  #cnc-tab .h-splitter:hover, #cnc-tab .h-splitter.dragging {
    background:rgba(181,136,58,0.55);
  }
  #cnc-tab .h-splitter::after {
    content:''; position:absolute;
    top:1px; left:50%; transform:translateX(-50%);
    height:2px; width:36px; border-radius:2px;
    background:var(--border-strong);
    opacity:0.55;
  }
  #cnc-tab .h-splitter:hover::after, #cnc-tab .h-splitter.dragging::after {
    background:#fff; opacity:0.9;
  }
  #cnc-tab body.is-splitting {
    cursor:col-resize;
    user-select:none;
  }
  #cnc-tab body.is-splitting-row {
    cursor:row-resize;
    user-select:none;
  }

  /* ── Left column (picking lists) ─────────────────────────── */
  #cnc-tab .left-col {
    background:var(--bg-surface);
    display:flex; flex-direction:column;
    min-height:0;
  }
  #cnc-tab .left-half {
    flex:1 1 auto; display:flex; flex-direction:column;
    min-height:0; overflow:hidden;
  }
  #cnc-tab .left-half#cuttingHalf {
    flex:0 0 var(--cutting-h, 45%);
  }
  #cnc-tab .left-half#queueHalf {
    flex:1 1 auto;
  }
  #cnc-tab .left-head {
    padding:12px 16px 8px; flex-shrink:0;
  }
  #cnc-tab .left-head .ov { margin:0 0 2px; }
  #cnc-tab .left-head .sub {
    font-size:var(--fs-caption); color:var(--fg-3); line-height:1.45;
    margin-top:2px;
  }
  #cnc-tab .left-head .head-row {
    display:flex; align-items:flex-start; gap:10px;
  }
  #cnc-tab .left-head .head-row > .text { flex:1; min-width:0; }
  /* Add-picking-list button — compact pine outline, light pine fill */
  #cnc-tab .add-pl-btn {
    flex-shrink:0;
    display:inline-flex; align-items:center; gap:5px;
    padding:5px 10px 5px 8px;
    background:var(--brand-subtle);
    color:var(--brand);
    border:1px solid var(--border-brand, var(--brand));
    border-radius:var(--r-sm);
    font-family:var(--font-display);
    font-size:var(--fs-caption); font-weight:600;
    letter-spacing:0.005em;
    cursor:pointer;
    transition:background 120ms, color 120ms, border-color 120ms, box-shadow 120ms;
    white-space:nowrap;
  }
  #cnc-tab .add-pl-btn:hover {
    background:var(--brand);
    color:var(--fg-on-brand);
    border-color:var(--brand);
    box-shadow:var(--shadow-sm);
  }
  #cnc-tab .add-pl-btn .plus {
    display:inline-block;
    width:14px; height:14px;
    line-height:13px; text-align:center;
    border-radius:99px;
    background:var(--brand); color:var(--fg-on-brand);
    font-size:var(--fs-sm); font-weight:700;
    transition:background 120ms, color 120ms;
  }
  #cnc-tab .add-pl-btn:hover .plus {
    background:var(--fg-on-brand); color:var(--brand);
  }

  /* ── Live watch indicator (in queue header) ──────────────────── */
  #cnc-tab .live-watch {
    display:inline-flex; align-items:center; gap:6px;
    margin-left:8px; padding:2px 10px 2px 8px;
    background:var(--brand-subtle);
    border:1px solid var(--border-brand, var(--brand));
    border-radius:99px;
    cursor:pointer;
    font-family:var(--font-display);
    font-size:var(--fs-overline); font-weight:600;
    color:var(--brand);
    letter-spacing:0.04em; text-transform:uppercase;
    transition:opacity 150ms, background 120ms;
    user-select:none;
    vertical-align:middle;
  }
  #cnc-tab .live-watch:hover { background:var(--brand); color:var(--fg-on-brand); }
  #cnc-tab .live-watch:hover .live-dot { background:var(--fg-on-brand); }
  #cnc-tab .live-watch.paused {
    background:var(--bg-subtle);
    color:var(--fg-3);
    border-color:var(--border);
  }
  #cnc-tab .live-watch.paused .live-dot { background:var(--fg-3); animation:none; }
  #cnc-tab .live-dot {
    width:7px; height:7px;
    background:var(--brand);
    border-radius:99px;
    animation:livePulse 1.6s ease-in-out infinite;
  }
  @keyframes livePulse {
    0%, 100% { opacity:1; transform:scale(1); }
    50%      { opacity:0.4; transform:scale(0.78); }
  }

  /* ── Picking List Picker dialog ─────────────────────────────── */
  .plp-overlay {
    position:fixed; inset:0;
    background:rgba(16,40,33,0.55);
    backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
    display:flex; align-items:center; justify-content:center;
    z-index:9200;
    animation:jmdSlide 180ms cubic-bezier(0.2,0.7,0.2,1);
  }
  .plp-modal {
    /* Fixed size so the dialog doesn't resize per content. */
    width:720px; max-width:96vw;
    height:640px; max-height:90vh;
    background:var(--bg-app);
    border:1px solid var(--border-strong);
    border-radius:var(--r-lg, var(--r-xl));
    box-shadow:var(--shadow-lg);
    display:flex; flex-direction:column;
    overflow:hidden;
  }
  .plp-head {
    padding:16px 22px 14px;
    background:var(--bg-surface);
    border-bottom:1px solid var(--border);
    display:flex; align-items:flex-start; gap:14px;
    flex-shrink:0;
  }
  .plp-head .plp-title-wrap { flex:1; min-width:0; }
  .plp-head h3 {
    margin:0 0 3px;
    font-family:var(--font-display);
    font-size:var(--fs-body-lg); font-weight:600;
    letter-spacing:-0.008em;
    color:var(--fg-1);
  }
  .plp-head .plp-sub {
    font-size:var(--fs-caption); color:var(--fg-3);
    line-height:1.45;
  }
  .plp-head .plp-sub code {
    font-family:var(--font-display);
    font-style:italic;
    background:var(--bg-subtle);
    padding:1px 6px; border-radius:var(--r-xs);
    color:var(--fg-2);
  }
  .plp-refresh {
    flex-shrink:0;
    width:30px; height:30px;
    padding:0;
    background:transparent;
    border:1px solid var(--border-strong);
    color:var(--fg-2);
    border-radius:var(--r-sm);
    cursor:pointer;
    display:inline-flex; align-items:center; justify-content:center;
    font-size:var(--fs-body);
    font-family:inherit;
    transition:border-color 120ms, color 120ms, background 120ms;
  }
  .plp-refresh:hover {
    color:var(--brand); border-color:var(--brand);
    background:var(--brand-subtle);
  }
  .plp-refresh.loading { opacity:0.6; pointer-events:none; }
  .plp-refresh.loading .ico {
    display:inline-block;
    animation:plpSpin 0.9s linear infinite;
  }
  @keyframes plpSpin { to { transform:rotate(360deg); } }

  .plp-body {
    flex:1; overflow-y:auto;
    padding:14px 18px;
    background:var(--bg-app);
  }
  .plp-empty, .plp-warn {
    padding:40px 20px; text-align:center;
    color:var(--fg-3); font-style:italic;
    font-family:var(--font-display); font-size:14px;
    line-height:1.55;
  }
  .plp-empty .big {
    display:block;
    font-size:24px; font-style:normal;
    font-weight:500; color:var(--fg-2);
    margin-bottom:6px; letter-spacing:-0.01em;
  }
  .plp-warn { color:var(--brass-600); }

  /* ── Directory-style breadcrumb bar ───────────────────────────── */
  .plp-crumbs {
    display:flex; align-items:center;
    gap:4px; flex-wrap:wrap;
    padding:8px 14px;
    background:var(--bg-subtle);
    border-bottom:1px solid var(--border);
    font-family:var(--font-display);
    font-size:var(--fs-caption);
    color:var(--fg-2);
    flex-shrink:0;
  }
  .plp-back {
    flex-shrink:0;
    width:26px; height:26px;
    border:1px solid var(--border);
    background:var(--bg-app);
    color:var(--fg-2);
    border-radius:var(--r-sm);
    cursor:pointer;
    display:inline-flex; align-items:center; justify-content:center;
    font-size:var(--fs-body); font-weight:600;
    margin-right:6px;
    transition:background 120ms, color 120ms, border-color 120ms;
  }
  .plp-back:hover {
    background:var(--brand);
    color:var(--fg-on-brand);
    border-color:var(--brand);
  }
  .plp-back[disabled] {
    opacity:0.35; cursor:not-allowed;
    pointer-events:none;
  }
  .plp-crumb {
    background:transparent; border:none;
    padding:2px 6px; border-radius:var(--r-xs);
    font-family:inherit;
    font-size:var(--fs-caption); color:var(--fg-2);
    cursor:pointer;
    letter-spacing:0.005em;
    transition:background 120ms, color 120ms;
  }
  .plp-crumb:hover { background:var(--brand-subtle); color:var(--brand); }
  .plp-crumb.current {
    color:var(--fg-1); font-weight:600;
    cursor:default;
  }
  .plp-crumb.current:hover { background:transparent; color:var(--fg-1); }
  .plp-crumb-sep {
    color:var(--fg-3);
    font-size:var(--fs-overline);
    user-select:none;
    padding:0 1px;
  }
  .plp-crumb-root {
    font-style:italic;
    color:var(--fg-3);
  }

  /* ── Directory rows (one level visible at a time) ──────────────── */
  .plp-dir-list {
    display:flex; flex-direction:column;
    gap:1px;
  }
  .plp-row {
    display:flex; align-items:center; gap:9px;
    padding:6px 11px;
    border:1px solid var(--border);
    background:var(--bg-surface);
    border-radius:var(--r-sm);
    cursor:pointer;
    transition:background 120ms, border-color 120ms;
    user-select:none;
  }
  .plp-row + .plp-row { margin-top:3px; }
  .plp-row:hover {
    background:var(--brand-subtle);
    border-color:var(--brand);
  }
  .plp-row.selected {
    background:var(--brand-subtle);
    border-color:var(--brass-600);
    box-shadow:inset 3px 0 0 var(--brass-600);
  }
  .plp-row .row-icon {
    flex-shrink:0;
    width:20px; height:20px;
    display:inline-flex; align-items:center; justify-content:center;
    background:var(--bg-subtle);
    border:1px solid var(--border);
    border-radius:var(--r-xs, 3px);
    color:var(--brand);
    font-family:var(--font-display);
    font-size:var(--fs-caption); font-weight:600;
  }
  .plp-row.selected .row-icon {
    background:var(--brass-600);
    color:var(--fg-on-brand);
    border-color:var(--brass-600);
  }
  .plp-row .row-main {
    flex:1; min-width:0;
    display:flex; flex-direction:column; gap:0;
  }
  .plp-row .row-title {
    font-family:var(--font-display);
    font-size:var(--fs-sm); font-weight:600;
    color:var(--fg-1);
    letter-spacing:-0.005em;
    line-height:1.25;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  .plp-row .row-sub {
    font-family:var(--font-display);
    font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    line-height:1.25;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  .plp-row .row-sub .empty-pill {
    color:var(--brass-600); font-style:italic;
  }
  .plp-row .row-meta {
    flex-shrink:0;
    font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    font-family:var(--font-display);
    text-align:right;
  }
  .plp-row .row-chev {
    flex-shrink:0;
    color:var(--fg-3);
    font-size:var(--fs-body); line-height:1;
    width:12px; text-align:center;
    transition:color 120ms;
  }
  .plp-row:hover .row-chev { color:var(--brand); }

  /* Footer (toggles + actions) */
  .plp-foot {
    padding:12px 18px 14px;
    background:var(--bg-surface);
    border-top:1px solid var(--border);
    flex-shrink:0;
    display:flex; flex-direction:column; gap:10px;
  }
  .plp-toggles {
    display:flex; flex-wrap:wrap;
    gap:14px 22px;
    align-items:center;
  }
  .plp-toggle-group {
    display:flex; align-items:center; gap:8px;
    font-family:var(--font-display);
    font-size:var(--fs-caption);
    color:var(--fg-2);
  }
  .plp-toggle-group .lbl {
    font-weight:600; color:var(--fg-2);
    letter-spacing:0.005em;
  }
  .plp-radio {
    display:inline-flex; align-items:center; gap:5px;
    padding:4px 11px;
    border:1px solid var(--border);
    border-radius:99px;
    background:var(--bg-app);
    color:var(--fg-2);
    font-size:var(--fs-caption); font-weight:500;
    cursor:pointer;
    transition:background 120ms, color 120ms, border-color 120ms;
  }
  .plp-radio:hover {
    border-color:var(--border-strong);
    color:var(--fg-1);
  }
  .plp-radio.selected {
    background:var(--brand);
    color:var(--fg-on-brand);
    border-color:var(--brand);
    font-weight:600;
  }
  .plp-actions {
    display:flex; align-items:center; gap:8px;
    justify-content:flex-end;
  }
  .plp-actions .sel-count {
    flex:1;
    font-size:var(--fs-caption); color:var(--fg-3);
    font-style:italic;
    font-family:var(--font-display);
  }
  .plp-actions .sel-count.has {
    color:var(--brand); font-style:normal; font-weight:600;
  }
  #cnc-tab .left-list {
    flex:1; overflow-y:auto; padding:4px 12px 14px;
    display:flex; flex-direction:column; gap:6px;
  }
  #cnc-tab .pl-card {
    border:1px solid var(--border);
    border-left:3px solid transparent;
    border-radius:var(--r-sm);
    padding:5px 9px 6px;
    background:var(--bg-surface);
    cursor:pointer;
    transition:background 120ms, border-color 120ms;
    position:relative;
  }
  #cnc-tab .pl-card:hover {
    background:var(--bg-subtle); border-color:var(--border-strong);
  }
  #cnc-tab .pl-card.selected {
    background:var(--brand-subtle);
    border-color:var(--border-brand);
    border-left-color:var(--brand);
  }
  #cnc-tab .pl-card .pl-job {
    font-family:var(--font-display);
    font-size:var(--fs-sm); font-weight:600;
    color:var(--fg-1); letter-spacing:-0.005em;
    line-height:1.25;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .pl-card .pl-meta {
    margin-top:1px;
    font-size:var(--fs-overline);
    color:var(--fg-2);
    line-height:1.25;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .pl-card .mini-bar {
    margin-top:5px; height:3px;
    background:var(--bg-sunken); border-radius:99px;
    overflow:hidden;
  }
  #cnc-tab .pl-card .mini-bar .fill {
    height:100%; background:var(--accent); border-radius:99px;
    transition:width 250ms;
  }
  #cnc-tab .pl-card.cutting .mini-bar .fill { background:var(--m-active); }

  /* Drag handle on queue items */
  #cnc-tab .pl-card.draggable {
    padding-left:24px;
  }
  #cnc-tab .pl-card.draggable .handle {
    position:absolute; left:6px; top:0; bottom:0;
    display:flex; align-items:center; justify-content:center;
    width:14px; cursor:grab; color:var(--fg-3);
    font-size:var(--fs-sm); line-height:1;
  }
  #cnc-tab .pl-card.draggable .handle:hover { color:var(--brand); }
  #cnc-tab .pl-card.draggable.dragging { opacity:0.5; }
  #cnc-tab .pl-card.draggable.drop-target {
    border-top:2px solid var(--brand);
  }

  #cnc-tab .empty-msg {
    padding:14px 16px;
    color:var(--fg-3); font-size:var(--fs-sm);
    font-style:italic; line-height:1.5;
  }

  /* ── Center detail pane ───────────────────────────────────── */
  #cnc-tab .center-pane {
    background:var(--bg-app);
    display:flex; flex-direction:column;
    min-height:0; overflow:hidden;
  }
  #cnc-tab .detail-head {
    padding:18px 26px 16px;
    background:var(--bg-surface);
    border-bottom:1px solid var(--border);
    flex-shrink:0;
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    gap:24px;
    align-items:stretch;
  }
  #cnc-tab .detail-head .head-left { min-width:0; }
  #cnc-tab .detail-head .head-right {
    display:flex; align-items:flex-start; gap:14px;
    flex-shrink:0;
  }
  #cnc-tab .detail-head .crumb {
    font-size:var(--fs-caption); color:var(--fg-3); letter-spacing:0.02em;
    margin-bottom:6px;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .detail-head .crumb a {
    color:var(--fg-2); cursor:pointer;
  }
  #cnc-tab .detail-head .crumb a:hover { color:var(--brand); }
  #cnc-tab .detail-head .crumb .sep { color:var(--fg-3); margin:0 6px; }
  #cnc-tab .detail-head .id-row {
    display:flex; align-items:flex-end; gap:14px;
    flex-wrap:wrap;
  }
  #cnc-tab .detail-head .pl-id {
    font-family:var(--font-display);
    font-size:24px; font-weight:600;
    color:var(--fg-1); letter-spacing:-0.018em;
    line-height:1; margin:0;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .detail-head .pills {
    display:flex; align-items:center; gap:6px; flex-wrap:wrap;
    margin-bottom:3px;
  }
  #cnc-tab .detail-head .mat-chip {
    padding:3px 10px; border-radius:99px;
    border:1px solid var(--border);
    background:var(--bg-app);
    font-size:var(--fs-caption); color:var(--fg-1);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .detail-head .progress-row {
    display:flex; align-items:center; gap:14px;
    margin-top:14px;
  }
  #cnc-tab .detail-head .progress-row .label {
    font-size:var(--fs-sm); color:var(--fg-2);
    font-variant-numeric:tabular-nums;
    min-width:120px;
  }
  #cnc-tab .detail-head .progress-row .jmd-progress {
    flex:1;
  }
  #cnc-tab .detail-head .progress-row .pct {
    font-size:var(--fs-sm); color:var(--fg-1); font-weight:600;
    font-variant-numeric:tabular-nums;
    min-width:42px; text-align:right;
  }
  #cnc-tab .detail-head .act-row {
    margin-top:14px;
    display:flex; align-items:center; gap:8px;
  }
  #cnc-tab .detail-head .eom-btn {
    padding:9px 16px;
    background:var(--brand); color:var(--fg-on-brand);
    border:1px solid var(--brand); border-radius:var(--r-md);
    font-family:var(--font-display);
    font-size:14px; font-weight:600;
    cursor:pointer; transition:background 120ms;
    display:inline-flex; align-items:center; gap:8px;
  }
  #cnc-tab .detail-head .eom-btn:hover { background:var(--brand-hover); }
  #cnc-tab .detail-head .eom-btn .arrow { font-size:var(--fs-body); line-height:1; }

  /* Head-right: current sheet preview + label sticker */
  #cnc-tab .head-sheet-preview {
    width:400px;   /* was 280px — bigger header sheet layout (user 2026-06-11) */
    display:flex; flex-direction:column;
    gap:6px;
  }
  #cnc-tab .head-sheet-preview .hp-cap {
    font-size:var(--fs-overline); letter-spacing:0.14em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
  }
  #cnc-tab .head-sheet-svg {
    border:1px solid var(--border);
    border-radius:var(--r-sm);
    background:var(--bg-app);
    aspect-ratio:2/1;
    overflow:hidden; display:block;
  }
  #cnc-tab .head-sheet-svg svg { width:100%; height:100%; display:block; }
  #cnc-tab .head-sheet-meta {
    font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    display:flex; gap:8px;
  }
  #cnc-tab .head-sheet-meta .grain {
    font-style:italic;
  }
  #cnc-tab .head-sheet-meta .parts-n {
    color:var(--fg-2);
  }
  #cnc-tab .head-label-wrap {
    width:330px;   /* was 240px — bigger header sticker (user 2026-06-11) */
    display:flex; flex-direction:column; gap:6px;
  }
  #cnc-tab .head-label-wrap .hp-cap {
    font-size:var(--fs-overline); letter-spacing:0.14em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
  }
  /* Label navigator: arrows + counter + print */
  #cnc-tab .label-nav {
    display:flex; align-items:center; gap:8px;
    font-family:var(--font-display);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .label-nav .nav-btn {
    width:26px; height:26px; padding:0;
    border-radius:var(--r-xs);
    border:1px solid var(--border-strong);
    background:var(--bg-surface);
    color:var(--fg-2);
    font-family:var(--font-display);
    font-size:var(--fs-sm); line-height:1;
    cursor:pointer;
    display:inline-flex; align-items:center; justify-content:center;
    transition:border-color 120ms, color 120ms, background 120ms;
  }
  #cnc-tab .label-nav .nav-btn:hover {
    border-color:var(--brand);
    color:var(--brand);
  }
  #cnc-tab .label-nav .nav-btn:disabled {
    opacity:0.4; cursor:not-allowed;
  }
  #cnc-tab .label-nav .nav-counter {
    flex:1; text-align:center;
    font-size:var(--fs-sm); color:var(--fg-2);
    font-weight:500;
    letter-spacing:0.005em;
  }
  #cnc-tab .label-nav .print-btn {
    padding:5px 12px; border-radius:var(--r-xs);
    border:1px solid #16463A;
    background:#16463A; color:#FDFCF7;
    font-family:var(--font-display);
    font-size:var(--fs-caption); font-weight:500;
    letter-spacing:0.005em;
    cursor:pointer;
    transition:background 120ms, border-color 120ms;
  }
  #cnc-tab .label-nav .print-btn:hover {
    background:#1B5A4A; border-color:#1B5A4A;
  }
  :root[data-theme="jmd-dark"] .label-nav .print-btn {
    background:#1B5A4A; border-color:#247461;
  }
  :root[data-theme="jmd-dark"] .label-nav .print-btn:hover {
    background:#247461;
  }
  #cnc-tab .label-nav-empty {
    padding:18px 12px;
    text-align:center;
    color:var(--fg-3);
    font-family:var(--font-display); font-style:italic;
    font-size:var(--fs-sm);
    border:1px dashed var(--border-strong);
    border-radius:var(--r-sm);
    background:var(--bg-subtle);
  }
  #cnc-tab .label-sticker {
    background:#FDFCF7;
    color:#181B1A;
    border:1px solid #C7CDCA;
    border-radius:6px;
    padding:9px 11px 10px;
    font-family:var(--font-display);
    box-shadow:0 1px 0 rgba(16,40,33,0.04), 0 2px 5px rgba(16,40,33,0.08);
    position:relative;
    overflow:hidden;
  }
  :root[data-theme="jmd-dark"] .label-sticker {
    background:#F0EFEA;
    color:#181B1A;
    border-color:#7C8480;
  }
  #cnc-tab .label-sticker.small { padding:10px 12px 11px; }
  #cnc-tab .label-sticker .ls-part {
    font-size:var(--fs-body); font-weight:600;
    letter-spacing:-0.005em;
    line-height:1.2;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .label-sticker .ls-dim {
    margin-top:2px; font-size:var(--fs-caption);
    font-variant-numeric:tabular-nums;
    color:#434846; font-weight:500;
  }
  #cnc-tab .label-sticker .ls-meta {
    margin-top:6px; display:grid;
    grid-template-columns:auto auto;
    gap:1px 8px;
    font-size:10px;
    color:#434846;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .label-sticker .ls-meta .lbl { color:#7C8480; font-weight:500; }
  #cnc-tab .label-sticker .ls-meta .val { font-weight:600; color:#181B1A; }
  #cnc-tab .label-sticker .ls-barcode {
    margin-top:7px; height:24px;
    background:
      repeating-linear-gradient(90deg,
        #181B1A 0 1px, transparent 1px 3px,
        #181B1A 3px 5px, transparent 5px 6px,
        #181B1A 6px 9px, transparent 9px 10px,
        #181B1A 10px 11px, transparent 11px 14px);
    border-radius:2px;
  }
  #cnc-tab .label-sticker .ls-barcode-num {
    font-size:10px; letter-spacing:0.16em;
    color:#181B1A; text-align:center;
    margin-top:2px;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .label-sticker.empty {
    background:var(--bg-subtle);
    color:var(--fg-3);
    border-style:dashed; border-color:var(--border-strong);
    font-family:var(--font-display); font-style:italic;
    text-align:center; padding:14px 10px;
    box-shadow:none;
    font-size:var(--fs-sm);
  }
  :root[data-theme="jmd-dark"] .label-sticker.empty {
    background:var(--bg-subtle);
    color:var(--fg-3);
  }
  /* Real labeler artwork (BMP) — the BMP is the sticker; no synthetic
     metadata block is rendered beneath it (2026-06-09). */
  #cnc-tab .label-sticker .ls-bmp {
    margin-top:6px; text-align:center;
  }
  #cnc-tab .label-sticker .ls-bmp img {
    max-width:100%; max-height:160px;
    border:1px solid var(--border);
    background:#FFF;
    image-rendering:auto;
  }
  /* BMP-only sticker: the artwork IS the sticker — drop the cream card
     (padding/background/border/shadow) so no white frame surrounds it. */
  #cnc-tab .label-sticker.bmp-only {
    padding:0;
    background:transparent;
    border:none;
    box-shadow:none;
  }
  #cnc-tab .label-sticker.bmp-only .ls-bmp {
    margin-top:0; line-height:0;
  }
  #cnc-tab .label-sticker.bmp-only .ls-bmp img { display:inline-block; }

  #cnc-tab .detail-body {
    flex:1; overflow-y:auto; padding:20px 26px 60px;
  }

  /* Sheets section */
  #cnc-tab .section {
    margin-bottom:30px;
  }
  #cnc-tab .section-head {
    display:flex; align-items:baseline; gap:14px;
    margin-bottom:10px;
  }
  #cnc-tab .section-head h3 {
    margin:0; font-family:var(--font-display);
    font-size:var(--fs-body); font-weight:600;
    letter-spacing:-0.005em;
  }
  #cnc-tab .section-head .sub {
    font-size:var(--fs-sm); color:var(--fg-3);
    line-height:1.5;
  }
  #cnc-tab .section-head .grow { flex:1; }
  #cnc-tab .section-head .stats {
    font-size:var(--fs-sm); color:var(--fg-2);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .section-head .stats .warn {
    color:var(--brass-600); font-weight:600;
  }

  #cnc-tab .sheets-table {
    width:100%; border-collapse:separate; border-spacing:0;
    background:var(--bg-surface);
    border:1px solid var(--border); border-radius:var(--r-md);
    overflow:hidden;
    /* Fixed layout so the table always fits its 2/3 grid track — auto layout
       sized the table to its content (real cut-plan names are long) and let
       it paint under the Failed Parts panel. Column widths below; Material
       takes the remainder. */
    table-layout:fixed;
  }
  #cnc-tab .sheets-table th:nth-child(3) { width:104px; }  /* Status   */
  #cnc-tab .sheets-table th:nth-child(4) { width:118px; }  /* CIX file */
  #cnc-tab .sheets-table th:nth-child(5) { width:22%;   }  /* Parts    */
  #cnc-tab .sheets-table th:nth-child(6) { width:88px;  }  /* Expand   */
  /* Fixed layout means cells must clip their own content. */
  #cnc-tab .sheets-table td:nth-child(3),
  #cnc-tab .sheets-table td:nth-child(4),
  #cnc-tab .sheets-table td:nth-child(5) {
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .sheets-table th {
    text-align:left; padding:8px 12px;
    font-size:var(--fs-overline); letter-spacing:0.1em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
    background:var(--bg-subtle);
    border-bottom:1px solid var(--border);
    /* Production override (2026-06-09): index.html ships a global
       `thead th{position:sticky;top:56px;z-index:100}` that leaks into the
       CNC tab and makes this header ride over the first sheet row when the
       detail pane scrolls. This design has no sticky table headers. */
    position:static;
    top:auto;
    z-index:auto;
  }
  #cnc-tab .sheets-table td {
    padding:9px 12px; font-size:var(--fs-sm);
    border-bottom:1px solid var(--border);
    color:var(--fg-1);
    font-variant-numeric:tabular-nums;
    /* Production override: index.html ships a global `td{white-space:nowrap}`
       that leaks into the CNC tab. Under table-layout:fixed that makes cell
       text paint over the neighboring columns (and under the old auto layout
       it silently inflated the table's min width). Material wraps; the
       Status/CIX/Parts cells re-apply nowrap+ellipsis via nth-child above. */
    white-space:normal;
  }
  #cnc-tab .sheets-table tbody tr:last-child td { border-bottom:none; }
  #cnc-tab .sheets-table tbody tr.sheet-row { cursor:pointer; }
  #cnc-tab .sheets-table tbody tr.sheet-row:hover { background:var(--bg-subtle); }
  #cnc-tab .sheets-table tbody tr.expanded {
    background:var(--brand-subtle);
  }
  #cnc-tab .sheets-table .sheet-num {
    font-weight:600; color:var(--fg-1);
    font-family:var(--font-display);
  }
  #cnc-tab .sheets-table .status-icon {
    font-size:14px; display:inline-block;
    width:18px; text-align:center;
  }
  #cnc-tab .sheets-table .status-icon.cut { color:var(--success); }
  #cnc-tab .sheets-table .status-icon.cutting {
    color:var(--m-active);
    animation:jmdPulse 1.2s infinite;
  }
  #cnc-tab .sheets-table .status-icon.queued { color:var(--fg-3); }
  #cnc-tab .sheets-table .status-icon.failed { color:var(--danger); }
  #cnc-tab .sheets-table .mat {
    color:var(--fg-2); font-size:var(--fs-sm);
  }
  /* Description dominant, code small beneath (2026-06-09) */
  #cnc-tab .sheets-table .mat .mat-desc {
    font-weight:600; color:var(--fg-1); font-size:var(--fs-sm);
    line-height:1.25;
  }
  #cnc-tab .sheets-table .mat .mat-code {
    font-size:var(--fs-overline); color:var(--fg-3);
    margin-top:1px;
    word-break:break-all;
  }
  /* Parts column — distinct part names nested on the sheet (2026-06-09) */
  #cnc-tab .sheets-table .parts-cell {
    color:var(--fg-2); font-size:var(--fs-caption);
    /* Real cut-plan part names (STRINGER_TOP_LEFT…) are long — ellipsize;
       the full list stays on the cell's title tooltip. */
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .sheets-table .parts-cell .more {
    color:var(--fg-3); font-style:italic; white-space:nowrap;
  }
  #cnc-tab .sheets-table .cix {
    color:var(--fg-2); font-size:var(--fs-caption);
    white-space:nowrap;
    overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .sheets-table .rt {
    color:var(--fg-2); font-size:var(--fs-sm);
  }
  #cnc-tab .sheets-table .act-cell {
    text-align:right; white-space:nowrap;
  }
  #cnc-tab .sheets-table .row-action {
    padding:3px 8px; border-radius:var(--r-xs);
    border:1px solid var(--border-strong);
    background:transparent; color:var(--fg-2);
    font-size:var(--fs-caption); cursor:pointer;
    font-family:inherit;
  }
  #cnc-tab .sheets-table .row-action:hover {
    color:var(--brand); border-color:var(--brand);
  }

  /* Expanded row container — slides open */
  #cnc-tab .sheets-table tr.expand-row > td { padding:0; background:var(--bg-subtle); }
  #cnc-tab .expand-wrap {
    display:grid; grid-template-rows:0fr;
    transition:grid-template-rows 280ms cubic-bezier(0.2,0.7,0.2,1);
  }
  #cnc-tab .expand-wrap.open { grid-template-rows:1fr; }
  #cnc-tab .expand-wrap > .sheet-expand { min-height:0; overflow:hidden; }
  /* Expanded sheet body: layout SVG + part list side-by-side (2026-06-09) */
  #cnc-tab .sheet-expand .se-body {
    display:flex; gap:16px; align-items:flex-start;
  }
  #cnc-tab .sheet-expand .se-body .sheet-svg-large-wrap { flex:1; min-width:0; }
  #cnc-tab .se-parts {
    width:280px; flex:none;
    background:var(--bg-surface);
    border:1px solid var(--border);
    border-radius:var(--r-md);
    overflow:hidden;
  }
  #cnc-tab .se-parts-head {
    padding:8px 12px;
    font-size:var(--fs-overline); letter-spacing:0.1em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
    background:var(--bg-subtle);
    border-bottom:1px solid var(--border);
  }
  #cnc-tab .se-parts-head .cnt { color:var(--fg-2); margin-left:4px; }
  #cnc-tab .se-parts-list { max-height:560px; overflow-y:auto; }
  #cnc-tab .se-part-row {
    display:flex; align-items:center; gap:8px;
    padding:7px 12px;
    border-bottom:1px solid var(--border);
    cursor:pointer; font-size:var(--fs-sm);
  }
  #cnc-tab .se-part-row:last-child { border-bottom:none; }
  #cnc-tab .se-part-row:hover { background:var(--bg-subtle); }
  #cnc-tab .se-part-row.focused { background:var(--brand-subtle); }
  #cnc-tab .se-part-row .pn {
    flex:none; min-width:30px;
    font-size:var(--fs-overline); font-weight:700;
    color:var(--fg-3);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .se-part-row .nm {
    flex:1; font-weight:600; color:var(--fg-1);
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  #cnc-tab .se-part-row .dim {
    flex:none; font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .sheet-expand {
    padding:18px 22px 22px;
    background:var(--bg-subtle);
    border-bottom:1px solid var(--border);
  }
  #cnc-tab .sheet-expand .se-head {
    display:flex; align-items:baseline; gap:12px;
    margin-bottom:12px;
  }
  #cnc-tab .sheet-expand .se-head h4 {
    margin:0; font-family:var(--font-display);
    font-size:14px; font-weight:600;
    color:var(--fg-1); letter-spacing:-0.005em;
  }
  #cnc-tab .sheet-expand .se-head .sub {
    font-size:var(--fs-caption); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .sheet-expand .se-head .grow { flex:1; }
  #cnc-tab .sheet-expand .se-head .hint {
    font-size:var(--fs-caption); color:var(--fg-3);
    font-style:italic;
  }
  /* Laminate face-color chip — assigns the per-material solid face color
     for brand laminates (Formica/Wilsonart/Pionite/…) (2026-06-09). */
  #cnc-tab .sheet-expand .se-head .face-color-chip {
    display:inline-flex; align-items:center; gap:6px;
    font-size:var(--fs-caption); color:var(--fg-2);
    border:1px solid var(--border-strong);
    border-radius:var(--r-xs);
    padding:3px 8px; margin-right:12px;
    cursor:pointer; white-space:nowrap;
  }
  #cnc-tab .sheet-expand .se-head .face-color-chip:hover {
    border-color:var(--brand); color:var(--brand);
  }
  #cnc-tab .sheet-expand .se-head .face-color-chip input[type="color"] {
    width:18px; height:18px; padding:0;
    border:1px solid var(--border);
    border-radius:3px; background:none; cursor:pointer;
  }
  #cnc-tab .sheet-svg-large-wrap {
    background:var(--bg-surface);
    border:1px solid var(--border);
    border-radius:var(--r-md);
    padding:14px;
    position:relative;
  }
  #cnc-tab .sheet-svg-large {
    width:100%; height:auto; display:block;
    border-radius:var(--r-sm);
  }
  #cnc-tab .sheet-svg-large .part-rect, #cnc-tab .sheet-svg-large .part-poly {
    cursor:pointer;
    transition:stroke 120ms, stroke-width 120ms;
  }
  #cnc-tab .sheet-svg-large .part-rect:hover, #cnc-tab .sheet-svg-large .part-poly:hover {
    stroke:#fff;
    stroke-width:2.2;
  }
  #cnc-tab .sheet-svg-large .part-hole {
    fill:rgba(0,0,0,0.35);
    pointer-events:none;
  }
  #cnc-tab .sheet-svg-large .grain-arrow-text {
    font-family:var(--font-display);
    font-size:var(--fs-sm);
    font-style:italic;
    fill:rgba(255,255,255,0.85);
    paint-order:stroke;
    stroke:rgba(0,0,0,0.55);
    stroke-width:0.7;
    pointer-events:none;
  }
  #cnc-tab .sheet-svg-large .part-label-text {
    fill:rgba(255,255,255,0.95);
    font-family:var(--font-display);
    font-weight:600;
    pointer-events:none; text-anchor:middle;
    font-variant-numeric:tabular-nums;
    paint-order:stroke;
    stroke:rgba(0,0,0,0.45);
    stroke-width:0.6;
  }

  /* Focused part — brass ring + glow (works on both mini + large SVGs) */
  #cnc-tab .part-g.focused .part-rect, #cnc-tab .part-g.focused .part-poly {
    stroke:#B5883A;
    stroke-width:3.5;
    stroke-dasharray:none;
  }
  #cnc-tab .part-g.focused .part-label-text {
    fill:rgba(255,255,255,1);
    stroke:rgba(0,0,0,0.65);
    stroke-width:0.7;
  }
  /* Mini SVG part labels — make them visible but subtle */
  #cnc-tab .head-sheet-svg .part-label-text {
    fill:rgba(255,255,255,0.92);
    font-family:var(--font-display);
    font-weight:600;
    pointer-events:none; text-anchor:middle;
    font-variant-numeric:tabular-nums;
    paint-order:stroke;
    stroke:rgba(0,0,0,0.5);
    stroke-width:0.5;
  }
  #cnc-tab .head-sheet-svg .part-rect, #cnc-tab .head-sheet-svg .part-poly {
    cursor:pointer;
    transition:stroke 120ms, stroke-width 120ms;
  }
  #cnc-tab .head-sheet-svg .part-rect:hover, #cnc-tab .head-sheet-svg .part-poly:hover {
    stroke:#fff;
    stroke-width:2.2;
  }

  /* Floating part tooltip */
  #cnc-tab .part-tooltip {
    position:fixed; pointer-events:none;
    z-index:8000;
    background:var(--bg-surface);
    border:1px solid var(--border-strong);
    border-radius:var(--r-sm);
    box-shadow:var(--shadow-md);
    padding:8px 11px 9px;
    font-family:var(--font-display);
    font-size:var(--fs-sm);
    color:var(--fg-1);
    max-width:240px;
    opacity:0; transform:translateY(-4px);
    transition:opacity 100ms, transform 100ms;
  }
  #cnc-tab .part-tooltip.show { opacity:1; transform:translateY(0); }
  #cnc-tab .part-tooltip .pt-name {
    font-weight:600; letter-spacing:-0.005em; line-height:1.2;
  }
  #cnc-tab .part-tooltip .pt-dim {
    margin-top:2px; font-size:var(--fs-caption);
    font-variant-numeric:tabular-nums;
    color:var(--fg-2);
  }
  #cnc-tab .part-tooltip .pt-meta {
    margin-top:5px; font-size:var(--fs-overline);
    color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    line-height:1.4;
  }
  #cnc-tab .part-tooltip .pt-path {
    margin-top:6px;
    padding-top:5px;
    border-top:1px solid var(--border);
    font-size:var(--fs-overline);
    color:var(--fg-2);
    line-height:1.45;
  }
  #cnc-tab .part-tooltip .pt-path .lbl {
    color:var(--fg-3); letter-spacing:0.06em;
    font-size:10px; text-transform:uppercase;
    font-weight:600; display:block;
    margin-bottom:1px;
  }
  #cnc-tab .part-tooltip .pt-path .crumb {
    color:var(--brand); font-style:italic;
  }
  #cnc-tab .part-tooltip .pt-path .sep {
    color:var(--fg-3); margin:0 4px;
  }

  /* Empty state for center pane */
  #cnc-tab .empty-detail {
    flex:1; display:flex; align-items:center; justify-content:center;
    flex-direction:column; gap:8px;
    color:var(--fg-3); font-size:14px;
    font-style:italic;
    padding:60px 20px;
  }

  /* ── Sheets + Failed Parts split layout ─────────────────────── */
  /* Always two columns: sheets 2/3, failed parts 1/3 (user decision
     2026-06-11). The sheets table uses table-layout:fixed so it compresses
     into its track (cells ellipsize) instead of overflowing under the
     Failed Parts panel. Phones still stack (pane-stack restyles the table). */
  #cnc-tab .sheets-split {
    display:grid;
    grid-template-columns:minmax(0,2fr) minmax(0,1fr);
    gap:22px;
    margin-bottom:30px;
  }
  @media (max-width: 768px) {
    #cnc-tab .sheets-split { grid-template-columns:1fr; }
  }
  #cnc-tab .sheets-col, #cnc-tab .failed-col {
    min-width:0;
    display:flex; flex-direction:column;
  }
  /* Bigger sheets table styling */
  #cnc-tab .sheets-table.big td {
    padding:13px 14px;
    font-size:14px;
  }
  #cnc-tab .sheets-table.big th {
    padding:11px 14px;
  }
  #cnc-tab .sheets-table.big .sheet-num {
    font-size:var(--fs-body);
  }
  #cnc-tab .sheets-table.big .mat {
    font-size:14px;
  }
  #cnc-tab .sheets-table.big .cix {
    font-size:var(--fs-sm); max-width:200px;
  }
  #cnc-tab .sheets-table.big .row-action {
    padding:5px 11px; font-size:var(--fs-sm);
  }
  #cnc-tab .sheets-table .grain-tag {
    display:inline-block; padding:1px 7px; border-radius:99px;
    font-size:var(--fs-overline); font-style:italic;
    background:var(--brand-subtle); color:var(--brand);
    margin-left:6px;
    letter-spacing:0.005em;
    font-variant-numeric:tabular-nums;
  }

  /* ── Failed parts panel ────────────────────────────────────── */
  #cnc-tab .failed-panel {
    border:1px solid var(--border);
    background:var(--bg-surface);
    border-radius:var(--r-md);
    overflow:hidden;
    display:flex; flex-direction:column;
  }
  #cnc-tab .failed-panel .fp-head {
    padding:12px 14px;
    background:var(--bg-subtle);
    border-bottom:1px solid var(--border);
    display:flex; align-items:center; gap:8px;
  }
  #cnc-tab .failed-panel .fp-head h4 {
    margin:0; font-family:var(--font-display);
    font-size:14px; font-weight:600;
    letter-spacing:-0.005em;
  }
  #cnc-tab .failed-panel .fp-head .count {
    background:var(--danger-bg, rgba(220,80,60,0.12));
    color:var(--danger);
    border:1px solid var(--danger);
    padding:1px 8px; border-radius:99px;
    font-size:var(--fs-caption); font-weight:600;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .failed-panel .fp-head .grow { flex:1; }
  #cnc-tab .failed-panel .fp-body {
    padding:12px;
    display:flex; flex-direction:column;
    gap:10px;
    max-height:560px; overflow-y:auto;
  }
  #cnc-tab .failed-panel .fp-empty {
    padding:30px 16px;
    text-align:center;
    color:var(--fg-3); font-style:italic;
    font-family:var(--font-display); font-size:var(--fs-sm);
  }
  #cnc-tab .fp-card {
    background:var(--bg-app);
    border:1px solid var(--border);
    border-left:3px solid var(--danger);
    border-radius:var(--r-sm);
    padding:11px 12px 12px;
  }
  #cnc-tab .fp-card .fp-row {
    display:flex; gap:12px; align-items:flex-start;
  }
  #cnc-tab .fp-card .fp-thumb-wrap {
    flex-shrink:0;
    width:96px; height:72px;
    border:1px solid var(--border);
    border-radius:var(--r-xs);
    overflow:hidden;
    background:var(--bg-subtle);
  }
  #cnc-tab .fp-card .fp-thumb-wrap svg {
    width:100%; height:100%; display:block;
  }
  #cnc-tab .fp-card .fp-info {
    flex:1; min-width:0;
  }
  #cnc-tab .fp-card .fp-name {
    font-family:var(--font-display);
    font-weight:600; font-size:14px;
    color:var(--fg-1); letter-spacing:-0.005em;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .fp-card .fp-dim {
    font-size:var(--fs-caption); color:var(--fg-2);
    font-variant-numeric:tabular-nums;
    margin-top:1px;
  }
  #cnc-tab .fp-card .fp-reason {
    margin-top:6px;
    display:inline-block;
    padding:1px 8px; border-radius:99px;
    background:var(--danger-bg, rgba(220,80,60,0.12));
    color:var(--danger);
    font-size:var(--fs-overline); font-weight:600;
    text-transform:uppercase;
    letter-spacing:0.06em;
  }
  #cnc-tab .fp-card .fp-when {
    margin-top:5px;
    font-size:var(--fs-overline); color:var(--fg-3);
    font-style:italic;
  }
  #cnc-tab .fp-card .fp-barcode {
    margin-top:5px;
    font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    font-family:var(--font-display);
    letter-spacing:0.08em;
  }
  #cnc-tab .fp-card .fp-meta {
    margin-top:6px;
    display:grid; grid-template-columns:auto auto;
    gap:0 8px;
    font-size:var(--fs-overline);
    color:var(--fg-3);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .fp-card .fp-meta .lbl { color:var(--fg-3); }
  #cnc-tab .fp-card .fp-meta .val { color:var(--fg-2); font-weight:600; }
  #cnc-tab .fp-card .fp-actions {
    margin-top:8px;
    display:flex; gap:6px;
  }
  #cnc-tab .fp-card .fp-actions button {
    padding:4px 10px; border-radius:var(--r-xs);
    border:1px solid var(--border-strong);
    background:transparent; color:var(--fg-2);
    font-size:var(--fs-caption); cursor:pointer;
    font-family:inherit;
  }
  #cnc-tab .fp-card .fp-actions button:hover {
    color:var(--brand); border-color:var(--brand);
  }
  #cnc-tab .fp-card .fp-actions button.recut {
    background:var(--brand); color:var(--fg-on-brand);
    border-color:var(--brand);
  }
  #cnc-tab .fp-card .fp-actions button.recut:hover {
    background:var(--brand-hover);
  }

  /* ── Sheet large SVG: grain direction badge ───────────────── */
  #cnc-tab .sheet-svg-large-wrap .grain-badge, #cnc-tab .head-sheet-svg .grain-badge {
    /* SVG-overlaid badge — actually rendered in SVG, see code */
  }

  /* ── Assembly viewer (Three.js modal) ──────────────────────── */
  .viewer-overlay {
    position:fixed; inset:0;
    background:rgba(16,40,33,0.65);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    display:flex; align-items:center; justify-content:center;
    z-index:9100;
    animation:jmdSlide 200ms cubic-bezier(0.2,0.7,0.2,1);
  }
  .viewer-modal {
    width:min(1280px, 96vw); height:min(860px, 94vh);
    background:var(--bg-app);
    border:1px solid var(--border);
    border-radius:var(--r-xl);
    box-shadow:var(--shadow-lg);
    display:flex; flex-direction:column;
    overflow:hidden;
  }
  .viewer-head {
    display:flex; align-items:center; gap:14px;
    padding:14px 22px;
    background:var(--bg-surface);
    border-bottom:1px solid var(--border);
    flex-shrink:0;
  }
  .viewer-head .title {
    font-family:var(--font-display);
    font-size:16px; font-weight:600;
    letter-spacing:-0.005em;
  }
  .viewer-head .tag {
    font-size:var(--fs-overline); padding:3px 10px;
    border-radius:99px;
    background:var(--brand-subtle); color:var(--brand);
    font-weight:600;
    letter-spacing:0.1em; text-transform:uppercase;
  }
  .viewer-head .grow { flex:1; }
  .viewer-head .close-btn {
    padding:7px 14px;
    background:transparent;
    border:1px solid var(--border-strong);
    color:var(--fg-2);
    border-radius:var(--r-sm); cursor:pointer;
    font-size:var(--fs-sm); font-family:inherit;
  }
  .viewer-head .close-btn:hover {
    color:var(--danger); border-color:var(--danger);
  }
  .viewer-body {
    flex:1; display:grid;
    grid-template-columns:240px minmax(0,1fr);
    min-height:0;
  }
  .viewer-side {
    background:var(--bg-surface);
    border-right:1px solid var(--border);
    overflow-y:auto;
    padding:16px 18px;
    display:flex; flex-direction:column; gap:18px;
  }
  .viewer-side h5 {
    margin:0 0 8px;
    font-size:var(--fs-overline); letter-spacing:0.1em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
  }
  .viewer-side .v-radio {
    display:flex; flex-direction:column; gap:4px;
  }
  .viewer-side .v-radio label {
    display:flex; align-items:center; gap:8px;
    padding:7px 10px; border-radius:var(--r-xs);
    cursor:pointer;
    background:var(--bg-app);
    border:1px solid var(--border);
    font-size:var(--fs-sm); color:var(--fg-1);
    transition:background 120ms, border-color 120ms;
  }
  .viewer-side .v-radio label.selected {
    background:var(--brand-subtle);
    border-color:var(--brand);
    color:var(--brand);
    font-weight:600;
  }
  .viewer-side .v-radio label input { display:none; }
  .viewer-side .v-section-row {
    display:grid;
    grid-template-columns:1fr 1fr 1fr;
    gap:5px;
    margin-bottom:8px;
  }
  .viewer-side .v-section-row button {
    padding:6px 0; border-radius:var(--r-xs);
    border:1px solid var(--border-strong);
    background:var(--bg-app); color:var(--fg-2);
    font-family:var(--font-display);
    font-size:var(--fs-sm); font-weight:600; cursor:pointer;
  }
  .viewer-side .v-section-row button.active {
    background:var(--brand); color:var(--fg-on-brand);
    border-color:var(--brand);
  }
  .viewer-side .v-section-slider {
    width:100%;
  }
  .viewer-side .v-measure-btn {
    width:100%; padding:8px 12px;
    border-radius:var(--r-sm);
    border:1px solid var(--border-strong);
    background:var(--bg-app); color:var(--fg-1);
    font-size:var(--fs-sm); cursor:pointer;
    font-family:inherit;
  }
  .viewer-side .v-measure-btn.active {
    background:var(--accent, var(--brand));
    color:var(--fg-on-brand);
    border-color:var(--accent, var(--brand));
  }
  .viewer-side .v-measure-hint {
    margin-top:6px; font-size:var(--fs-caption);
    color:var(--fg-3); font-style:italic;
    line-height:1.4;
  }
  .viewer-side .v-meas-result {
    margin-top:6px;
    font-family:var(--font-display);
    font-weight:600;
    font-size:14px;
    color:var(--brand);
    font-variant-numeric:tabular-nums;
  }
  .viewer-canvas-wrap {
    position:relative;
    background:var(--bg-app);
    overflow:hidden;
    display:flex;
  }
  .viewer-canvas-wrap canvas {
    display:block;
    width:100% !important; height:100% !important;
  }
  .viewer-presets {
    position:absolute; top:14px; right:14px;
    display:flex; gap:5px;
    z-index:2;
  }
  .viewer-presets button {
    width:36px; height:36px;
    background:var(--bg-surface);
    border:1px solid var(--border-strong);
    color:var(--fg-2);
    border-radius:var(--r-xs);
    cursor:pointer;
    font-family:var(--font-display);
    font-size:var(--fs-overline); font-weight:600;
    letter-spacing:0.05em;
    box-shadow:var(--shadow-sm);
  }
  .viewer-presets button:hover {
    color:var(--brand); border-color:var(--brand);
  }
  .viewer-loading {
    position:absolute; inset:0;
    display:flex; align-items:center; justify-content:center;
    flex-direction:column; gap:10px;
    color:var(--fg-3); font-style:italic;
    font-family:var(--font-display);
    font-size:14px;
    background:var(--bg-app);
    z-index:3;
  }
  .viewer-loading .spinner {
    width:32px; height:32px;
    border:3px solid var(--border);
    border-top-color:var(--brand);
    border-radius:99px;
    animation:viewSpin 0.8s linear infinite;
  }
  @keyframes viewSpin { to { transform:rotate(360deg); } }

  /* ── View Assembly button in detail head ──────────────────── */
  #cnc-tab .detail-head .view-assembly-btn {
    padding:9px 16px;
    background:transparent;
    border:1px solid var(--border-strong);
    color:var(--fg-1);
    border-radius:var(--r-md);
    font-family:var(--font-display);
    font-size:14px; font-weight:600;
    cursor:pointer; transition:background-color 120ms, border-color 120ms, color 120ms;
    display:inline-flex; align-items:center; gap:8px;
  }
  #cnc-tab .detail-head .view-assembly-btn:hover {
    border-color:var(--brand); color:var(--brand);
    background:var(--brand-subtle);
  }
  #cnc-tab .detail-head .view-assembly-btn .icon {
    font-size:14px; line-height:1;
  }

  /* ── Right panel (applied-to-tasks) ──────────────────────── */
  #cnc-tab .right-panel {
    background:var(--bg-surface);
    display:flex; flex-direction:column;
    min-height:0; overflow:hidden;
  }
  #cnc-tab .right-panel .rp-head {
    padding:11px 16px 8px;
    border-bottom:1px solid var(--border);
    background:var(--bg-surface);
    flex-shrink:0;
  }
  #cnc-tab .right-panel .rp-head h3 {
    margin:0 0 2px; font-family:var(--font-display);
    font-size:14px; font-weight:600;
    letter-spacing:-0.005em;
  }
  #cnc-tab .right-panel .rp-head .sub {
    font-size:var(--fs-overline); color:var(--fg-3);
    line-height:1.35;
  }
  #cnc-tab .right-panel .rp-head .rp-stats {
    margin-top:5px;
    display:flex; align-items:center; gap:8px;
    font-size:var(--fs-overline); color:var(--fg-2);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .right-panel .rp-head .rp-stats .num {
    color:var(--fg-1); font-weight:600;
  }
  #cnc-tab .right-panel .rp-head .rp-stats .warn {
    color:var(--brass-600); font-weight:600;
  }
  #cnc-tab .right-panel .rp-body {
    flex:1; overflow-y:auto;
    padding:9px 14px 20px;
  }

  /* Tasks section cards */
  #cnc-tab .tasks-list {
    display:flex; flex-direction:column; gap:7px;
  }
  #cnc-tab .task-card {
    background:var(--bg-app);
    border:1px solid var(--border);
    border-radius:var(--r-sm);
    padding:7px 10px 8px;
  }
  #cnc-tab .task-card .tc-head {
    display:flex; align-items:center; gap:6px;
    margin-bottom:3px;
  }
  #cnc-tab .task-card .tc-num {
    font-family:var(--font-display);
    font-size:var(--fs-caption); font-weight:600;
    color:var(--fg-1);
    font-variant-numeric:tabular-nums;
    line-height:1.2;
  }
  #cnc-tab .task-card .tc-name {
    color:var(--fg-2); font-size:var(--fs-caption);
    flex:1; line-height:1.2;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  #cnc-tab .task-card .remove-btn {
    padding:1px 6px; border-radius:var(--r-xs);
    border:1px solid var(--border);
    background:transparent; color:var(--fg-3);
    font-size:var(--fs-overline); cursor:pointer;
    font-family:inherit;
    line-height:1.2;
  }
  #cnc-tab .task-card .remove-btn:hover {
    color:var(--danger); border-color:var(--danger);
  }
  #cnc-tab .task-card .stats-row {
    display:flex; align-items:center; gap:10px;
    margin:3px 0 4px;
    font-size:var(--fs-overline);
  }
  #cnc-tab .task-card .stat-box {
    background:transparent;
    border:none; border-radius:0;
    padding:0;
    display:flex; align-items:baseline; gap:5px;
  }
  #cnc-tab .task-card .stat-box .lbl {
    font-size:10px; letter-spacing:0.1em;
    text-transform:uppercase; font-weight:600;
    color:var(--fg-3);
  }
  #cnc-tab .task-card .stat-box .num {
    font-family:var(--font-display);
    font-size:var(--fs-sm); font-weight:600;
    color:var(--fg-1);
    font-variant-numeric:tabular-nums;
    line-height:1;
  }
  #cnc-tab .task-card .stat-box.applied .num { color:var(--brand); }
  #cnc-tab .task-card .stat-box.completed .num { color:var(--accent); }
  #cnc-tab .task-card .completed-bar {
    margin-top:4px;
    height:3px; background:var(--bg-sunken);
    border-radius:99px; overflow:hidden;
  }
  #cnc-tab .task-card .completed-bar .fill {
    height:100%; background:var(--accent);
    border-radius:99px;
    transition:width 200ms;
  }

  /* JMD slider */
  #cnc-tab .slider-row {
    margin-top:4px;
    display:flex; align-items:center; gap:8px;
  }
  #cnc-tab .slider-row .slider-label {
    font-size:var(--fs-overline); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
    min-width:30px;
  }
  #cnc-tab input[type="range"].jmd-slider {
    -webkit-appearance:none; appearance:none;
    flex:1; height:5px; background:transparent;
    cursor:pointer; padding:5px 0;
  }
  #cnc-tab input[type="range"].jmd-slider::-webkit-slider-runnable-track {
    height:6px; background:var(--bg-sunken);
    border-radius:99px;
    border:1px solid var(--border);
    background-image:linear-gradient(to right, var(--brand) 0%, var(--brand) var(--val,0%), transparent var(--val,0%));
  }
  #cnc-tab input[type="range"].jmd-slider::-moz-range-track {
    height:6px; background:var(--bg-sunken);
    border-radius:99px; border:1px solid var(--border);
  }
  #cnc-tab input[type="range"].jmd-slider::-moz-range-progress {
    height:6px; background:var(--brand); border-radius:99px;
  }
  #cnc-tab input[type="range"].jmd-slider::-webkit-slider-thumb {
    -webkit-appearance:none; appearance:none;
    width:16px; height:16px; border-radius:99px;
    background:var(--accent);
    border:2px solid var(--bg-surface);
    box-shadow:var(--shadow-sm);
    margin-top:-6px; cursor:grab;
    transition:transform 100ms;
  }
  #cnc-tab input[type="range"].jmd-slider::-webkit-slider-thumb:hover {
    transform:scale(1.1);
  }
  #cnc-tab input[type="range"].jmd-slider::-moz-range-thumb {
    width:16px; height:16px; border-radius:99px;
    background:var(--accent);
    border:2px solid var(--bg-surface);
    box-shadow:var(--shadow-sm); cursor:grab;
  }

  /* Apply-to-task button */
  #cnc-tab .apply-btn {
    margin-top:8px; width:100%;
    padding:5px 12px; border-radius:var(--r-sm);
    border:1px dashed var(--border-strong);
    background:transparent; color:var(--brand);
    font-size:var(--fs-caption); font-weight:500; cursor:pointer;
    font-family:inherit;
    transition:background-color 120ms, border-color 120ms, color 120ms;
  }
  #cnc-tab .apply-btn:hover {
    background:var(--brand-subtle);
    border-style:solid; border-color:var(--brand);
  }

  /* ── End-of-Machine FULLSCREEN overlay (sits below tab strip) ─ */
  .eom-overlay {
    position:fixed;
    left:0; right:0; bottom:0;
    top:var(--eom-top, 0px);
    background:var(--bg-app);
    z-index:9000;
    display:flex; flex-direction:column;
    animation:jmdSlide 200ms cubic-bezier(0.2,0.7,0.2,1);
  }
  .eom-modal {
    flex:1;
    width:100%; height:100%;
    background:var(--bg-app);
    display:flex; flex-direction:column;
    overflow:hidden;
  }
  .eom-overlay .eom-head {
    padding:18px 28px;
  }
  .eom-overlay .eom-head .title {
    font-size:20px;
  }
  .eom-overlay .eom-head .close-btn {
    font-size:var(--fs-body); padding:10px 18px;
  }
  .eom-overlay .eom-foot button {
    padding:18px 26px; font-size:var(--fs-body-lg);
  }
  .eom-overlay .eom-info .sheet-line {
    font-size:var(--fs-h2);
  }
  .eom-overlay .eom-info .sheet-sub {
    font-size:14px;
  }
  .eom-overlay .eom-body {
    grid-template-columns:1fr 380px;
  }
  .eom-overlay .eom-side {
    padding:24px 26px;
  }
  .eom-overlay .eom-parts-list .ep {
    padding:10px 12px; font-size:14px;
  }
  /* ── EOM part-click options menu + details (body-appended, global) ── */
  .eom-part-menu { min-width:340px; }
  .eom-part-menu .epm-sub {
    margin:-4px 0 14px;
    font-size:var(--fs-sm); color:var(--fg-3);
    font-variant-numeric:tabular-nums;
  }
  .eom-part-menu .epm-actions {
    display:flex; flex-direction:column; gap:10px;
  }
  /* Touch targets — operators use this on the machine touchscreen. */
  .eom-part-menu .epm-actions .jmd-btn {
    width:100%; padding:14px 18px; font-size:var(--fs-body);
  }
  .eom-part-menu .epm-fail {
    background:var(--danger, #A33B2E); border-color:var(--danger, #A33B2E);
    color:#FDFCF7;
  }
  .eom-part-details { min-width:380px; max-width:520px; }
  .eom-part-details .epd-grid {
    display:grid; grid-template-columns:auto 1fr;
    gap:6px 14px;
    margin:4px 0 14px;
    font-size:14px;
  }
  .eom-part-details .epd-grid .lbl {
    color:var(--fg-3); font-size:var(--fs-overline);
    text-transform:uppercase; letter-spacing:0.1em; font-weight:600;
    align-self:baseline; padding-top:2px;
  }
  .eom-part-details .epd-grid .val { color:var(--fg-1); }
  .eom-part-details .epd-grid .val .code {
    display:block; font-size:var(--fs-overline); color:var(--fg-3);
  }
  .eom-part-details .epd-sticker { margin-bottom:14px; }
  /* The sticker styles are scoped to #cnc-tab; this dialog is body-appended,
     so it carries its own compact copy. */
  .eom-part-details .label-sticker {
    background:#FDFCF7; color:#181B1A;
    border:1px solid #C7CDCA; border-radius:6px;
    padding:9px 11px 10px;
    font-family:var(--font-display);
    max-width:100%;
  }
  .eom-part-details .label-sticker.bmp-only {
    padding:0; background:transparent; border:none; box-shadow:none;
  }
  .eom-part-details .label-sticker .ls-bmp { text-align:center; line-height:0; }
  .eom-part-details .label-sticker .ls-bmp img {
    max-width:100%; max-height:320px;
    border:1px solid var(--border); background:#FFF;
  }
  .eom-part-details .label-sticker .ls-part { font-size:var(--fs-body); font-weight:600; }
  .eom-part-details .label-sticker .ls-dim { font-size:var(--fs-caption); margin-top:2px; }
  .eom-part-details .label-sticker .ls-meta {
    display:grid; grid-template-columns:auto 1fr; gap:2px 10px;
    font-size:var(--fs-caption); margin-top:6px;
  }
  .eom-part-details .label-sticker .ls-meta .lbl { color:#5A615D; }
  .eom-part-details .label-sticker .ls-barcode-num {
    font-size:10px; letter-spacing:0.08em; margin-top:4px; text-align:center;
  }

  .eom-head {
    display:flex; align-items:center; gap:16px;
    padding:14px 22px;
    background:var(--bg-surface);
    border-bottom:1px solid var(--border);
    flex-shrink:0;
  }
  .eom-head .title {
    font-family:var(--font-display);
    font-size:16px; font-weight:600;
    color:var(--fg-1); letter-spacing:-0.005em;
  }
  .eom-head .tag {
    font-size:var(--fs-overline); padding:3px 10px;
    border-radius:99px;
    background:var(--brand-subtle); color:var(--brand);
    font-weight:600;
    letter-spacing:0.1em; text-transform:uppercase;
  }
  .eom-head .grow { flex:1; }
  .eom-head .close-btn {
    padding:7px 14px;
    background:transparent;
    border:1px solid var(--border-strong);
    color:var(--fg-2);
    border-radius:var(--r-sm); cursor:pointer;
    font-size:var(--fs-sm); font-family:inherit;
  }
  .eom-head .close-btn:hover {
    color:var(--danger); border-color:var(--danger);
  }
  .eom-body {
    flex:1; display:grid;
    grid-template-columns:1fr 320px;
    min-height:0;
  }
  .eom-canvas-wrap {
    padding:20px 26px 16px;
    overflow:hidden;
    display:flex; flex-direction:column;
    min-height:0; min-width:0;
  }
  .eom-info {
    margin-bottom:14px;
  }
  .eom-info .job-path {
    font-size:14px; color:var(--fg-2);
    font-variant-numeric:tabular-nums;
    margin-bottom:4px;
  }
  .eom-info .sheet-line {
    font-family:var(--font-display);
    font-size:var(--fs-h3); font-weight:600;
    color:var(--fg-1); letter-spacing:-0.012em;
    font-variant-numeric:tabular-nums;
  }
  .eom-info .sheet-sub {
    font-size:var(--fs-sm); color:var(--fg-3);
    margin-top:3px;
    font-variant-numeric:tabular-nums;
  }
  .eom-svg-wrap {
    flex:1; background:var(--bg-surface);
    border:1px solid var(--border);
    border-radius:var(--r-md);
    padding:14px;
    min-height:0; min-width:0;
    display:flex; align-items:center; justify-content:center;
    overflow:hidden;
  }
  .eom-svg-wrap svg {
    max-width:100%; max-height:100%;
    width:auto; height:auto;
    display:block;
  }
  .eom-svg-wrap .part-rect {
    cursor:pointer;
  }
  .eom-svg-wrap .part-rect.failed {
    filter:saturate(0.4) brightness(0.85);
  }
  .eom-svg-wrap .part-x {
    stroke:var(--danger); stroke-width:3;
    pointer-events:none;
  }
  .eom-svg-wrap .part-label-text {
    fill:rgba(255,255,255,0.95);
    font-family:var(--font-display);
    font-weight:600;
    pointer-events:none; text-anchor:middle;
    font-variant-numeric:tabular-nums;
    paint-order:stroke;
    stroke:rgba(0,0,0,0.45);
    stroke-width:0.6;
  }

  .eom-side {
    background:var(--bg-surface);
    border-left:1px solid var(--border);
    padding:20px 22px;
    overflow-y:auto;
    display:flex; flex-direction:column; gap:18px;
  }
  .eom-side h4 {
    margin:0 0 8px; font-size:var(--fs-caption);
    letter-spacing:0.1em; text-transform:uppercase;
    font-weight:600; color:var(--fg-3);
  }
  .eom-parts-list {
    display:flex; flex-direction:column; gap:6px;
  }
  .eom-parts-list .ep {
    display:flex; align-items:center; gap:8px;
    padding:6px 8px; border-radius:var(--r-xs);
    border:1px solid var(--border);
    background:var(--bg-app);
    font-size:var(--fs-sm);
  }
  .eom-parts-list .ep .pi {
    width:18px; text-align:center;
    font-size:var(--fs-sm); color:var(--fg-3);
  }
  .eom-parts-list .ep.cut .pi { color:var(--success); }
  .eom-parts-list .ep.failed .pi { color:var(--danger); }
  .eom-parts-list .ep .label { flex:1; color:var(--fg-1); }
  .eom-parts-list .ep .reason {
    font-size:var(--fs-caption); color:var(--danger);
    font-style:italic;
  }
  .eom-parts-list .ep.failed { background:var(--danger-bg); }

  #cnc-tab .triage-box {
    padding:10px 12px;
    background:var(--bg-sunken);
    border-radius:var(--r-sm);
    border:1px solid var(--border);
    font-size:var(--fs-sm); color:var(--fg-2);
  }
  #cnc-tab .triage-box .triage-line { margin-bottom:8px; }
  #cnc-tab .triage-box .triage-line .num {
    color:var(--danger); font-weight:600;
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .triage-box button {
    padding:6px 12px; border-radius:var(--r-sm);
    border:1px solid var(--danger);
    background:transparent; color:var(--danger);
    font-size:var(--fs-caption); cursor:pointer; font-family:inherit;
  }
  #cnc-tab .triage-box button:hover {
    background:var(--danger-bg);
  }

  .eom-foot {
    display:grid; grid-template-columns:1fr 1.4fr 1fr;
    gap:14px;
    padding:14px 22px;
    background:var(--bg-surface);
    border-top:1px solid var(--border);
    flex-shrink:0;
  }
  .eom-foot button {
    padding:14px 20px;
    font-family:var(--font-display);
    font-size:var(--fs-body); font-weight:600;
    border-radius:var(--r-md); cursor:pointer;
    transition:background 120ms;
  }
  .eom-foot .prev-btn, .eom-foot .next-btn {
    background:var(--bg-app);
    border:1px solid var(--border-strong);
    color:var(--fg-1);
  }
  .eom-foot .prev-btn:hover, .eom-foot .next-btn:hover {
    background:var(--bg-subtle); border-color:var(--brand);
    color:var(--brand);
  }
  .eom-foot .prev-btn:disabled, .eom-foot .next-btn:disabled {
    opacity:0.4; cursor:not-allowed;
  }
  .eom-foot .mark-cut-btn {
    background:var(--brand);
    border:1px solid var(--brand);
    color:var(--fg-on-brand);
    font-size:16px;
  }
  .eom-foot .mark-cut-btn:hover { background:var(--brand-hover); }

  /* ── Label modal overlay (click part → big label) ─────────── */
  #cnc-tab .label-overlay {
    position:fixed; inset:0;
    background:rgba(16,40,33,0.62);
    backdrop-filter:blur(4px);
    display:flex; align-items:center; justify-content:center;
    z-index:9200;
    animation:jmdSlide 180ms cubic-bezier(0.2,0.7,0.2,1);
  }
  #cnc-tab .label-modal {
    width:min(440px, 92vw);
    background:var(--bg-surface);
    border-radius:var(--r-lg);
    box-shadow:var(--shadow-lg);
    border:1px solid var(--border);
    padding:22px 22px 18px;
  }
  #cnc-tab .label-modal .lm-head {
    display:flex; align-items:center; gap:10px;
    margin-bottom:14px;
  }
  #cnc-tab .label-modal .lm-head h3 {
    margin:0; font-family:var(--font-display);
    font-size:var(--fs-body); font-weight:600;
    letter-spacing:-0.005em;
  }
  #cnc-tab .label-modal .lm-head .grow { flex:1; }
  #cnc-tab .label-modal .lm-head .close-x {
    padding:4px 10px; border-radius:var(--r-xs);
    border:1px solid var(--border-strong);
    background:transparent; color:var(--fg-2);
    font-size:var(--fs-sm); cursor:pointer; font-family:inherit;
  }
  #cnc-tab .label-modal .lm-head .close-x:hover {
    color:var(--danger); border-color:var(--danger);
  }
  #cnc-tab .label-modal .label-sticker {
    width:100%;
    padding:18px 20px 18px;
  }
  #cnc-tab .label-modal .label-sticker .ls-part { font-size:var(--fs-h4); }
  #cnc-tab .label-modal .label-sticker .ls-dim {
    margin-top:4px; font-size:14px;
  }
  #cnc-tab .label-modal .label-sticker .ls-meta {
    margin-top:12px;
    font-size:var(--fs-caption);
  }
  #cnc-tab .label-modal .label-sticker .ls-barcode {
    margin-top:14px; height:44px;
  }
  #cnc-tab .label-modal .label-sticker .ls-barcode-num {
    margin-top:4px; font-size:var(--fs-caption);
  }
  /* Real-BMP variant — size the palette up so the sticker reads large.
     The img max-height override lets the artwork fill most of the screen. */
  #cnc-tab .label-modal.lm-bmp {
    width:min(820px, 94vw);
    max-height:92vh;
    display:flex; flex-direction:column;
  }
  #cnc-tab .label-modal.lm-bmp .label-sticker {
    overflow-y:auto;
    padding:0;            /* beat .label-modal .label-sticker's 18/20px — no white frame */
    background:transparent;
    border:none; box-shadow:none;
  }
  #cnc-tab .label-modal.lm-bmp .label-sticker .ls-bmp { margin-top:0; line-height:0; }
  #cnc-tab .label-modal.lm-bmp .label-sticker .ls-bmp img {
    max-height:62vh;
  }
  #cnc-tab .label-modal .lm-foot {
    display:flex; gap:8px; justify-content:flex-end;
    margin-top:14px;
  }
  #cnc-tab .label-modal .lm-foot button {
    padding:7px 14px; border-radius:var(--r-sm);
    border:1px solid var(--border-strong);
    background:transparent; color:var(--fg-1);
    font-size:var(--fs-sm); cursor:pointer; font-family:inherit;
  }
  #cnc-tab .label-modal .lm-foot button:hover {
    background:var(--bg-subtle); border-color:var(--brand);
    color:var(--brand);
  }
  #cnc-tab .label-modal .lm-foot button.print {
    background:var(--brand); color:var(--fg-on-brand);
    border-color:var(--brand);
  }
  #cnc-tab .label-modal .lm-foot button.print:hover {
    background:var(--brand-hover);
  }

  /* ⌘K palette */
  #cnc-tab .palette-bg {
    position:fixed; inset:0; background:rgba(16,40,33,0.55);
    display:flex; align-items:flex-start; justify-content:center;
    padding-top:10vh; z-index:9500;
  }
  #cnc-tab .palette {
    width:min(560px, 92vw);
    background:var(--bg-surface);
    border:1px solid var(--border);
    border-radius:var(--r-lg);
    box-shadow:var(--shadow-lg);
    overflow:hidden;
  }
  #cnc-tab .palette input {
    width:100%; padding:14px 18px;
    background:transparent;
    border:none; border-bottom:1px solid var(--border);
    color:var(--fg-1); font-size:var(--fs-body);
    font-family:inherit;
  }
  #cnc-tab .palette input:focus { box-shadow:none; }
  #cnc-tab .palette .results { max-height:50vh; overflow-y:auto; padding:6px 0; }
  #cnc-tab .palette .r {
    padding:9px 18px; cursor:pointer;
    font-size:14px; display:flex; align-items:center; gap:10px;
  }
  #cnc-tab .palette .r:hover, #cnc-tab .palette .r.sel { background:var(--bg-subtle); }
  #cnc-tab .palette .r .label {
    font-family:var(--font-display); font-weight:600;
    color:var(--fg-1);
    font-variant-numeric:tabular-nums;
  }
  #cnc-tab .palette .r .sub {
    color:var(--fg-3); font-size:var(--fs-caption);
    flex:1; text-align:right;
  }
  #cnc-tab .palette .empty {
    padding:24px; text-align:center;
    color:var(--fg-3); font-size:var(--fs-sm);
    font-style:italic;
  }

