/* Atelier 3D (Print Lab), façon iOS. Le tableau reprend celui des Tâches (.board/.bcol/.bcard de tasks.css) ;
   la fiche reprend son panneau (.drawer). Ici, seulement ce qui est propre à l'atelier. */

/* Chiffres du jour (widgets) */
/* [GPT 2026-10-25] Scoped previews for externally designed files and optional printer cameras. */
.ws-model-preview { min-height: 360px; width: 100%; overflow: hidden; }
.ws-model-preview canvas { display: block; max-width: 100%; touch-action: none; }
.ws-code-preview { white-space: pre; overflow: auto; max-height: 55vh; font-size: 12px; }
.ws-camera { display: block; max-width: 100%; max-height: 65vh; margin: auto; }
/* [GPT 2026-10-25] Keyboard-accessible work list that reflows on phone and tablet. */
.ws-work-row { min-height: 80px; align-items: center; gap: 12px; }
.ws-work-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; text-align: left; overflow-wrap: anywhere; }
.ws-work-status { flex: 0 0 auto; max-width: 24%; text-align: right; font-size: 13px; font-weight: 500; }
@media (max-width: 420px) { .ws-work-row { gap: 9px; padding: 12px; } .ws-work-row .itile { width: 30px; height: 30px; } }
.ws-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 760px) { .ws-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.ws-kpi .s { font-size: 13px; color: var(--muted); letter-spacing: 0; margin-top: 2px; }
.ws-kpi.bad .v, .ws-kpi.bad .s { color: var(--red); }
button.ws-kpi { text-align: left; width: 100%; transition: transform .3s var(--spring); }
button.ws-kpi:active { transform: scale(.97); }

/* Tableau : 7 colonnes, défilement horizontal */
.ws-board { grid-template-columns: repeat(7, minmax(232px, 1fr)); }
@media (max-width: 899px) { .ws-board { grid-template-columns: repeat(7, 80%); } }
.ws-empty { color: var(--faint); font-size: 13px; text-align: center; padding: 12px 0; }
.ws-ctop { gap: 8px; }
.ws-ctop .no { margin-left: 0; flex: none; }
.ws-try { color: var(--orange); }
.ws-cfoot { margin-top: 2px; font-size: 15px; }
.ws-dep { color: var(--green); }

/* Listes : valeur à droite, état d'une imprimante, jauge de matière */
.ws-val { max-width: 55%; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.item.strong .grow, .item.strong .ws-val { font-weight: 600; color: var(--text); }
.ws-ok { color: var(--green) !important; }
.ws-state { flex: none; font-weight: 500; }
.ws-bar { height: 4px; border-radius: 999px; background: var(--fill); overflow: hidden; margin-top: 6px; max-width: 220px; }
.ws-bar i { display: block; height: 100%; border-radius: inherit; }

/* Formulaire : champs à gauche, devis à droite (en dessous sur téléphone) */
.ws-form { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; align-items: start; }
.ws-quote { position: sticky; top: 0; display: flex; flex-direction: column; }
.ws-quote .section-title { margin: 0 16px 6px; }
.ws-total .ws-qprice { font-family: var(--rounded); font-size: 28px; font-weight: 700; letter-spacing: -.02em; color: var(--text); }
label.item.ws-sw { color: var(--text); font-weight: 400; font-size: 17px; letter-spacing: -.02em; }
.ws-price-in { width: 120px !important; text-align: right; }
@media (max-width: 760px) { .ws-form { grid-template-columns: 1fr; } .ws-quote { position: static; } .ws-form .grid3 { grid-template-columns: 1fr 1fr; } }

/* Fiche d'un travail */
.ws-dtitle { font-size: 28px; font-weight: 700; letter-spacing: -.03em; line-height: 1.15; }
.ws-stage { padding: 12px 16px; display: flex; flex-direction: column; gap: 10px; }
.ws-progress { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.ws-progress i { height: 4px; border-radius: 999px; background: var(--fill-2); }
.ws-progress i.done { background: var(--green); }
.ws-progress i.now { background: var(--accent); }
.ws-desc { white-space: pre-wrap; font-size: 15px; }
