@layer modules{
/* Imprimante 3D - vue de pilotage (#printer), CDC_PRINTER.md Lot 1.
   App-level, plein écran (body.in-printer) ou montée en fenêtre Live. */

/* Plein écran : masque les colonnes latérales (comme #mission / #discovery). */
body.in-printer .col-profile,body.in-printer .col-report{ display:none; }
body.in-printer .split{ grid-template-columns:1fr; }
body.in-printer #grid{ max-width:none; }

.pz-wrap{ padding:var(--sp-18) var(--sp-22) var(--sp-40); max-width:1240px; margin:0 auto; }
.pz-wrap.pz-full{ min-height:60vh; }
.pz-head{ display:flex; align-items:center; gap:var(--sp-14); flex-wrap:wrap; margin-bottom:var(--sp-18); }
.pz-title{ font-size:var(--fs-xl); font-weight:var(--fw-bold); margin:0; display:flex; align-items:center; gap:var(--sp-8); }
.pz-title .ic,.pz-title svg{ width:26px; height:26px; }
.pz-sub{ font-weight:var(--fw-regular); color:var(--muted); font-size:var(--fs-base); }
.pz-tools{ margin-left:auto; display:flex; align-items:center; gap:var(--sp-8); flex-wrap:wrap; }
.pz-select{ min-width:200px; }

/* État vide / appairage initial */
.pz-empty{ text-align:center; padding:var(--sp-48) var(--sp-20); border:1px dashed var(--bd); border-radius:var(--radius-modal); background:var(--card); }
.pz-empty-ic{ opacity:.5; }
.pz-empty-ic svg,.pz-empty-ic .ic{ width:52px; height:52px; }
.pz-empty h2{ margin:var(--sp-12) 0 var(--sp-6); }
.pz-empty p{ max-width:440px; margin:0 auto var(--sp-18); color:var(--muted); }

/* Tableau de bord */
.pz-board{ display:grid; grid-template-columns:minmax(0,1.3fr) minmax(280px,1fr); gap:var(--sp-20); align-items:start; }
@media (max-width:880px){ .pz-board{ grid-template-columns:1fr; } }

.pz-cam{ position:relative; aspect-ratio:4/3; background:#0b0e14; border:1px solid var(--bd); border-radius:var(--radius); overflow:hidden; display:flex; align-items:center; justify-content:center; }
.pz-cam-img{ width:100%; height:100%; object-fit:contain; display:block; }
.pz-cam-off{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; text-align:center; padding:var(--sp-24); color:#94a3b8; font-size:var(--fs-base); }

/* Multi-caméras : barre de sélection + rôles + gestion (L-cam) */
.pz-cam-bar{ display:flex; flex-wrap:wrap; gap:var(--sp-6); margin-top:var(--sp-8); }
.pz-cam-chip{ display:inline-flex; align-items:center; gap:var(--sp-6); padding:var(--sp-4) var(--sp-10); border:1px solid var(--bd); background:var(--card); border-radius:var(--radius-pill); cursor:pointer; color:var(--txt); font-size:var(--fs-md); }
.pz-cam-chip.on{ border-color:var(--accent); background:color-mix(in srgb,var(--accent) 10%,var(--card)); }
.pz-cam-gear{ margin-left:auto; }
.pz-role{ font-size:var(--fs-xs); font-weight:var(--fw-bold); padding:var(--sp-1) var(--sp-6); border-radius:var(--radius-pill); color:var(--on-solid); background:var(--c,#94a3b8); }
.pz-cam-mgr{ margin-top:var(--sp-10); border:1px solid var(--bd); border-radius:var(--radius); background:var(--card); padding:var(--sp-14); }
.pz-cam-mgr h4{ margin:0 0 var(--sp-8); font-size:var(--fs-base); }
.pz-cam-list{ display:flex; flex-direction:column; gap:var(--sp-6); margin-bottom:var(--sp-12); }
.pz-cam-li{ display:flex; align-items:center; justify-content:space-between; gap:var(--sp-10); padding:var(--sp-6) var(--sp-10); border:1px solid var(--bd); border-radius:var(--radius); }
.pz-cam-add{ border-top:1px solid var(--bd); padding-top:var(--sp-12); }
.pz-cam-form{ display:flex; flex-direction:column; gap:var(--sp-8); }
.pz-cam-form input,.pz-cam-form select{ width:100%; }

.pz-dash{ display:flex; flex-direction:column; gap:var(--sp-16); }
.pz-state-row{ display:flex; align-items:center; justify-content:space-between; gap:var(--sp-10); }
.pz-badge{ font-weight:var(--fw-bold); padding:var(--sp-4) var(--sp-12); border-radius:var(--radius-pill); color:var(--on-solid); background:var(--c,#94a3b8); }
.pz-conn{ font-size:var(--fs-md); font-weight:var(--fw-strong); color:var(--c,#94a3b8); }

.pz-gauges{ display:grid; grid-template-columns:1fr 1fr; gap:var(--sp-12); }
@media (max-width:480px){ .pz-gauges{ grid-template-columns:1fr; } }
.pz-gauge{ background:var(--card); border:1px solid var(--bd); border-radius:var(--radius); padding:var(--sp-12) var(--sp-14); }
.pz-g-top{ display:flex; justify-content:space-between; align-items:baseline; }
.pz-g-l{ color:var(--muted); font-size:var(--fs-md); }
.pz-g-v{ font-weight:var(--fw-bold); font-variant-numeric:tabular-nums; }
.pz-g-bar{ height:8px; border-radius:var(--radius-sm); background:color-mix(in srgb,var(--txt) 10%,transparent); margin:var(--sp-8) 0 var(--sp-4); overflow:hidden; }
.pz-g-bar>span{ display:block; height:100%; width:0; border-radius:var(--radius-sm); transition:width .4s ease; }
.pz-g-max{ color:var(--muted); }

.pz-prog{ background:var(--card); border:1px solid var(--bd); border-radius:var(--radius); padding:var(--sp-14); }
.pz-prog-top{ display:flex; justify-content:space-between; gap:var(--sp-10); align-items:baseline; }
.pz-file{ font-weight:var(--fw-strong); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pz-prog-v{ font-weight:var(--fw-bold); font-variant-numeric:tabular-nums; }
.pz-prog-bar{ height:12px; border-radius:var(--radius); background:color-mix(in srgb,var(--txt) 10%,transparent); overflow:hidden; margin:var(--sp-10) 0 var(--sp-8); }
.pz-prog-bar>span{ display:block; height:100%; width:0; border-radius:var(--radius); background:var(--accent); transition:width .5s ease; }
.pz-meta{ display:flex; justify-content:space-between; gap:var(--sp-10); color:var(--muted); font-size:var(--fs-md); }
.pz-homed{ font-variant-numeric:tabular-nums; }
.pz-note{ color:var(--muted); }

/* Formulaire d'appairage */
.pz-form{ max-width:540px; background:var(--card); border:1px solid var(--bd); border-radius:var(--radius-modal); padding:var(--sp-22); display:flex; flex-direction:column; gap:var(--sp-14); }
.pz-form h2{ margin:0; }
.pz-form label{ display:flex; flex-direction:column; gap:var(--sp-4); font-size:var(--fs-base); color:var(--muted); }
.pz-form input{ font-size:var(--fs-base); }
.pz-form-2{ display:grid; grid-template-columns:2fr 1fr; gap:var(--sp-12); }
.pz-form-acts{ display:flex; align-items:center; gap:var(--sp-8); margin-top:var(--sp-4); }
.pz-spacer{ flex:1; }
.pz-test-res{ min-height:1.2em; margin:0; }
.pz-test-res.ok{ color:var(--ok); }
.pz-test-res.err{ color:var(--err); }

/* ── Lot 2 : arrêt d'urgence + contrôles d'impression ── */
.pz-estop{ width:100%; padding:var(--sp-12); border-radius:var(--radius); border:2px solid #b91c1c;
  background:linear-gradient(var(--err),var(--err)); color:var(--on-solid); font-weight:var(--fw-bold); font-size:var(--fs-base); cursor:pointer;
  letter-spacing:.02em; box-shadow:0 2px 0 #991b1b; }
.pz-estop:hover{ filter:brightness(1.06); }
.pz-estop:active{ transform:translateY(1px); box-shadow:0 1px 0 #991b1b; }
.pz-printctl{ display:flex; gap:var(--sp-8); margin-top:var(--sp-10); }
.pz-printctl:empty{ display:none; }
.disco-btn.danger{ border-color:var(--err); color:var(--err); }
.disco-btn.danger:hover{ background:color-mix(in srgb,var(--err) 12%,var(--card)); }

/* ── Onglets du bas ── */
.pz-tabs{ display:flex; gap:var(--sp-4); margin:var(--sp-22) 0 var(--sp-14); border-bottom:1px solid var(--bd); }
.pz-tab{ padding:var(--sp-8) var(--sp-16); border:0; background:none; color:var(--muted); font-weight:var(--fw-strong); cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-1px; }
.pz-tab.on{ color:var(--txt); border-bottom-color:var(--accent); }
.pz-tab:hover{ color:var(--txt); }

/* ── Pilotage ── */
.pz-ctl{ display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:var(--sp-16); align-items:start; }
.pz-card{ background:var(--card); border:1px solid var(--bd); border-radius:var(--radius); padding:var(--sp-16); }
.pz-card h3{ margin:0 0 var(--sp-12); font-size:var(--fs-base); }
.pz-heat{ display:flex; flex-wrap:wrap; gap:var(--sp-8); align-items:flex-end; }
.pz-heat label{ display:flex; flex-direction:column; gap:var(--sp-4); font-size:var(--fs-md); color:var(--muted); }
.pz-heat input{ width:84px; }
.pz-presets{ display:flex; flex-wrap:wrap; gap:var(--sp-6); margin-top:var(--sp-10); }
.pz-steps{ font-size:var(--fs-md); color:var(--muted); margin-bottom:var(--sp-10); display:flex; align-items:center; gap:var(--sp-4); flex-wrap:wrap; }
.pz-step{ border:1px solid var(--bd); background:var(--card); border-radius:var(--radius); padding:var(--sp-2) var(--sp-8); cursor:pointer; color:var(--txt); }
.pz-step.on{ background:var(--accent); color:var(--on-solid); border-color:var(--accent); }
.pz-jog{ display:grid; gap:var(--sp-6); justify-content:center;
  grid-template-columns:repeat(3,48px); grid-template-rows:repeat(3,48px);
  grid-template-areas:"yp . zp" "xm hm xp" "ym . zm"; }
.pz-j{ border:1px solid var(--bd); background:var(--card); border-radius:var(--radius); font-weight:var(--fw-bold); cursor:pointer; color:var(--txt); }
.pz-j:hover{ border-color:var(--accent); background:color-mix(in srgb,var(--accent) 8%,var(--card)); }
.pz-j.pz-home{ background:color-mix(in srgb,var(--accent) 12%,var(--card)); font-size:var(--fs-lg); }
.pz-jog-acts{ display:flex; gap:var(--sp-8); margin-top:var(--sp-12); flex-wrap:wrap; }
.pz-fan{ display:flex; align-items:center; gap:var(--sp-10); font-size:var(--fs-md); color:var(--muted); }
.pz-fan input[type=range]{ flex:1; }
.pz-macros{ display:flex; gap:var(--sp-6); flex-wrap:wrap; margin-top:var(--sp-12); }

/* ── Fichiers & file ── */
.pz-upload{ display:flex; align-items:center; gap:var(--sp-10); flex-wrap:wrap; margin-bottom:var(--sp-14); }
.pz-upchk{ font-size:var(--fs-md); color:var(--muted); display:flex; align-items:center; gap:var(--sp-4); }
.pz-flist{ display:flex; flex-direction:column; gap:var(--sp-6); }
.pz-frow,.pz-qrow{ display:flex; align-items:center; gap:var(--sp-10); padding:var(--sp-8) var(--sp-12); background:var(--card); border:1px solid var(--bd); border-radius:var(--radius); }
.pz-fname{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:var(--fw-strong); }
.pz-fsize{ color:var(--muted); flex-shrink:0; }
.pz-err-txt{ color:var(--err); }
.pz-queue{ margin-top:var(--sp-22); }
.pz-queue-h{ display:flex; align-items:center; gap:var(--sp-10); margin-bottom:var(--sp-10); }
.pz-queue-h h3{ margin:0; flex:1; font-size:var(--fs-base); }
.pz-qrow{ gap:var(--sp-8); }
.pz-qn{ color:var(--muted); font-variant-numeric:tabular-nums; }
#pz-qlist{ display:flex; flex-direction:column; gap:var(--sp-6); }

/* ── Console ── */
.pz-console{ max-width:760px; }
.pz-cline{ display:flex; gap:var(--sp-8); margin:var(--sp-10) 0; }
.pz-cline input{ flex:1; font-family:var(--font-mono); }
.pz-clog{ background:#0b0e14; color:#cbd5e1; border-radius:var(--radius); padding:var(--sp-10) var(--sp-12); max-height:240px; overflow:auto; font-family:var(--font-mono); font-size:var(--fs-md); }
.pz-cl-cmd{ color:#93c5fd; }
.pz-cl-ok{ color:#86efac; }
.pz-cl-err{ color:#fca5a5; }

}
