/* The printer strip belongs to the 3D board header only. */
.dept-page-header.p3d-page-header{flex-wrap:wrap;align-items:flex-start;min-width:0;gap:10px 16px}
.p3d-page-header .cnc-page-heading{display:grid;grid-template-columns:max-content max-content max-content;grid-template-rows:auto auto;gap:8px 12px;align-items:start;flex:0 0 auto;padding-top:4px}
.p3d-page-header .cnc-page-heading>span{grid-column:1;grid-row:1}
.p3d-page-header .cnc-page-heading>.dept-page-title{grid-column:2;grid-row:1}
.p3d-page-header .cnc-page-heading>.dept-rename-btn{grid-column:3;grid-row:1;align-self:center;margin:0}
.p3d-page-header .cnc-page-heading>.dept-back-btn{grid-column:1/-1;grid-row:2;justify-self:start}
.p3d-printers{display:flex;flex:1 1 720px;gap:9px;min-width:0;max-width:100%;overflow-x:auto;padding:3px 2px 10px;scroll-snap-type:x proximity;scrollbar-width:thin;overscroll-behavior-x:contain}
.p3d-printers.is-drag-scrolling{scroll-snap-type:none}
.p3d-printer-unit{flex:1 0 220px;width:220px;max-width:278px;min-width:0;scroll-snap-align:start;display:flex;flex-direction:column;gap:5px}
.p3d-printer{--trim:#74669c;position:relative;height:230px;box-sizing:border-box;border:1px solid #c7d3e5;border-radius:13px;padding:8px;background:linear-gradient(145deg,#fafcff,#e8eff8);box-shadow:0 2px 7px #24364b14;transition:border-color .2s,box-shadow .2s,transform .2s}
.p3d-printer.is-running{border-color:#8ccaae;box-shadow:0 3px 11px #21815423}
.p3d-printer.is-complete{border-color:#53ac77;box-shadow:0 3px 12px #26834b38}
.p3d-printer.is-repair{border-color:#e0bd73;background:linear-gradient(145deg,#fffaf0,#eee8dc)}
.p3d-printer.is-idle{filter:saturate(.66)}
.p3d-printer-unit:hover .p3d-printer:not(.is-drop-hover):not(.is-drop-blocked):not(.is-repair){transform:translateY(-2px);box-shadow:0 5px 15px #24364b2b}
.p3d-fdm{--trim:#c49755}.p3d-sla{--trim:#569aaf}
.p3d-printer.is-drop-hover,.p3d-queue.is-drop-hover,.p3d-dryer.is-drop-hover{border-color:#247fc4;box-shadow:0 0 0 3px #2996e633;background:#eef8ff;animation:p3dDropPulse 1.15s ease-in-out infinite}
.p3d-printer.is-drop-blocked,.p3d-queue.is-drop-blocked,.p3d-dryer.is-drop-blocked{border-color:#d68272;box-shadow:0 0 0 3px #d682722b}
@keyframes p3dDropPulse{0%,100%{box-shadow:0 0 0 3px #2996e633}50%{box-shadow:0 0 0 6px #2996e61c}}
.p3d-printer::after,.p3d-queue::after,.p3d-dryer::after{content:attr(data-drop-hint);position:absolute;z-index:7;left:13px;right:13px;top:58px;box-sizing:border-box;border:1px solid #91bdda;border-radius:8px;padding:9px 7px;background:#ecf8ff;color:#14517a;box-shadow:0 3px 13px #0b416155;font-size:11px;font-weight:800;line-height:1.25;text-align:center;pointer-events:none;opacity:0;transform:translateY(8px) scale(.97);transition:opacity .16s,transform .16s}
.p3d-printer.is-drop-hover::after,.p3d-printer.is-drop-blocked::after,.p3d-queue.is-drop-hover::after,.p3d-queue.is-drop-blocked::after,.p3d-dryer.is-drop-hover::after,.p3d-dryer.is-drop-blocked::after{opacity:1;transform:translateY(0) scale(1)}
.p3d-printer.is-drop-blocked::after,.p3d-queue.is-drop-blocked::after,.p3d-dryer.is-drop-blocked::after{border-color:#dfaa9f;background:#fff0ed;color:#8a3f33}
.p3d-printer-stage{position:relative;height:139px;overflow:hidden;border:4px solid #637487;border-top-color:#9baabc;border-radius:8px;background:radial-gradient(circle at 50% 25%,#2e4257,#142636 72%);box-shadow:inset 0 4px 12px #07152299}
.p3d-printer-frame{position:absolute;inset:8px 11px 11px;border-left:3px solid #718da1;border-right:3px solid #718da1;border-top:3px solid #718da1;opacity:.9}
.p3d-printer-stage>div:not(.p3d-printer-frame){position:absolute;pointer-events:none}
.p3d-printer:not(.is-running) .p3d-printer-stage>div:not(.p3d-printer-frame){animation:none!important}
.p3d-msla-plate{left:31%;top:13px;width:38%;height:16px;border:2px solid #d6d6e8;border-bottom:5px solid #aaa7ce;border-radius:3px;background:linear-gradient(90deg,#625e85,#b9b6d6,#625e85);box-shadow:0 4px 7px #0008;z-index:2}
.p3d-msla-plate:after{content:'';position:absolute;left:16%;right:16%;top:17px;height:26px;background:repeating-linear-gradient(0deg,#9f8bd6 0 3px,#705fa7 3px 5px);opacity:.9}
.p3d-msla-vat{left:18%;right:18%;bottom:11px;height:20px;border:4px solid #737c99;border-radius:2px 2px 8px 8px;background:linear-gradient(#51486d,#312c50);box-shadow:inset 0 4px 0 #8b6fbd}
.p3d-msla-uv{left:28%;right:28%;bottom:12px;height:13px;background:#aa83ff;filter:blur(5px);opacity:.15}
.p3d-printer.is-running .p3d-msla-plate{animation:p3dMslaLift 3.6s ease-in-out infinite}
.p3d-printer.is-running .p3d-msla-uv{animation:p3dMslaExpose 3.6s linear infinite}
@keyframes p3dMslaLift{0%,28%{transform:translateY(49px)}47%,67%{transform:translateY(8px)}86%,100%{transform:translateY(49px)}}
@keyframes p3dMslaExpose{0%,8%,33%,100%{opacity:.06}10%,30%{opacity:.9}}
.p3d-fdm-rail{left:10%;right:10%;top:23px;height:7px;border-radius:4px;background:linear-gradient(#b9c9d1,#526a78,#a7b9c5)}
.p3d-fdm-head{left:15%;top:12px;width:28px;height:27px;border-radius:5px 5px 3px 3px;border:2px solid #c5d1d6;background:linear-gradient(90deg,#5e6e73,#b9c8c6,#4e626b);box-shadow:0 3px 5px #0008;z-index:2}
.p3d-fdm-head:after{content:'';position:absolute;left:10px;top:25px;border:4px solid transparent;border-top:12px solid #d9ac68}
.p3d-fdm-bed{left:17%;right:17%;bottom:13px;height:9px;border-radius:3px;background:linear-gradient(#a8bbc3,#475f69);box-shadow:0 4px 4px #0007}
.p3d-fdm-layer{left:31%;right:31%;bottom:24px;height:28px;background:repeating-linear-gradient(0deg,#e7ad62 0 3px,#b57541 3px 5px);clip-path:inset(100% 0 0 0)}
.p3d-printer.is-running .p3d-fdm-head{animation:p3dFdmScan 2.8s ease-in-out infinite}
.p3d-printer.is-running .p3d-fdm-layer{animation:p3dFdmBuild 2.8s steps(5,end) infinite}
@keyframes p3dFdmScan{0%{transform:translate(0,18px)}25%{transform:translate(82px,18px)}50%{transform:translate(82px,42px)}75%{transform:translate(0,42px)}100%{transform:translate(0,62px)}}
@keyframes p3dFdmBuild{0%{clip-path:inset(100% 0 0 0)}100%{clip-path:inset(0 0 0 0)}}
.p3d-sla-projector{left:40%;top:5px;width:20%;height:14px;border-radius:3px;background:linear-gradient(#8ba0b8,#364a5c);box-shadow:0 2px 4px #0008}
.p3d-sla-vat{left:15%;right:15%;bottom:10px;height:22px;border:4px solid #587e8a;border-radius:3px 3px 7px 7px;background:linear-gradient(#37687e,#173e58);box-shadow:inset 0 4px 0 #60bed3}
.p3d-sla-beam{left:50%;top:19px;width:2px;height:75px;transform-origin:top;background:linear-gradient(#9ef9ff,#4de8fa88);box-shadow:0 0 8px #83f5ff;opacity:.2}
.p3d-sla-spot{left:45%;bottom:30px;width:9px;height:5px;border-radius:50%;background:#a9fbff;box-shadow:0 0 12px 5px #60f0ff}
.p3d-printer.is-running .p3d-sla-beam{animation:p3dLaser 2.5s ease-in-out infinite}
.p3d-printer.is-running .p3d-sla-spot{animation:p3dLaserSpot 2.5s ease-in-out infinite}
@keyframes p3dLaser{0%,100%{transform:rotate(-17deg);opacity:.35}50%{transform:rotate(17deg);opacity:.95}}
@keyframes p3dLaserSpot{0%,100%{transform:translateX(-28px)}50%{transform:translateX(29px)}}
.p3d-printer-job{position:absolute;z-index:4;left:13px;right:13px;bottom:29px;width:calc(100% - 26px);height:68px;box-sizing:border-box;border:1px solid #add5c1;border-radius:7px;padding:7px 8px;background:linear-gradient(#f9fffb,#daf3e5);color:#215940;text-align:left;box-shadow:0 2px 7px #112e2480;cursor:pointer;overflow:hidden}
.p3d-printer-job{display:flex;align-items:flex-start;gap:8px}
.p3d-printer-job.is-complete{border-color:#77c99a;background:linear-gradient(#f3fff5,#c9f1d6)}
.p3d-printer-job-copy{flex:1 1 auto;min-width:0;padding-top:3px}
.p3d-printer-job-copy b,.p3d-printer-job-copy>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p3d-printer-elapsed{flex:0 0 auto;align-self:flex-start;min-width:42px;max-width:105px;box-sizing:border-box;border:0;border-radius:6px;padding:5px 6px;background:#d8efdf;color:#186543;font-family:inherit;font-size:11px;font-weight:800;text-align:center;white-space:normal;line-height:1.15}
button.p3d-printer-elapsed{cursor:pointer}button.p3d-printer-elapsed:hover{background:#b7e5c8}
.p3d-printer-job.is-complete .p3d-printer-elapsed{background:#b8e9c8;color:#12633c}
.p3d-printer-job-copy b{font-size:12px}.p3d-printer-job-copy>span{font-size:11px;color:#587869;margin-top:2px}
.p3d-printer-job[draggable=true]{cursor:grab}
.p3d-printer-empty{position:absolute;left:12px;right:12px;bottom:31px;color:#6c8093;text-align:center;font-size:10px;font-weight:700}
.p3d-printer-state{position:absolute;bottom:7px;left:9px;right:9px;text-align:center;color:#456075;font-size:10px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p3d-printer.is-running .p3d-printer-state,.p3d-printer.is-complete .p3d-printer-state{color:#167e54}.p3d-printer.is-repair .p3d-printer-state{color:#a16911}
.p3d-printer-gear{position:absolute;right:10px;top:10px;z-index:5;width:25px;height:25px;border:1px solid #b3c2ce;border-radius:7px;background:#f8fbfd;color:#506777;cursor:pointer}
.p3d-printer-label{min-height:36px;text-align:center;line-height:1.25}
.p3d-printer-label b{display:block;color:#213a50;font-size:12px}.p3d-printer-label span{display:block;margin-top:2px;color:#65798b;font-size:10px;font-weight:700}
.p3d-queue{position:relative;min-height:118px;max-height:210px;box-sizing:border-box;padding:6px;border:1px dashed #b9c9d9;border-radius:9px;background:#f8fafc;overflow:hidden;transition:border-color .2s,box-shadow .2s}
.p3d-queue:hover:not(.is-drop-hover):not(.is-drop-blocked){border-color:#8fbad9;box-shadow:0 2px 9px #247fc41a}
.p3d-queue::after{top:33px}
.p3d-queue-head{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 2px 5px;color:#344e66;font-size:11px;font-weight:800}
.p3d-queue-head b{display:inline-block;border-radius:10px;padding:1px 5px;background:#e4edf6}
.p3d-queue-empty{color:#8ca0b1;font-size:10px;text-align:center;padding:20px 4px}
.p3d-queue-list{max-height:160px;overflow-y:auto;display:grid;gap:4px}
.p3d-queue-item{display:flex;align-items:center;gap:7px;min-width:0;min-height:49px;padding:4px;border:1px solid #d6e0eb;border-radius:6px;background:#fff;cursor:pointer}
.p3d-queue-item[draggable=true]{cursor:grab}
.p3d-queue-thumb{flex:0 0 40px;width:40px;height:40px;display:grid;place-items:center;border-radius:4px;background:#e8eef5;font-size:14px;overflow:hidden}
.p3d-queue-thumb img{width:100%;height:100%;object-fit:cover}
.p3d-queue-text{min-width:0;flex:1}
.p3d-queue-text b,.p3d-queue-text small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p3d-queue-text b{font-size:11px;color:#243e55}.p3d-queue-text small{font-size:10px;color:#677e90}
.p3d-queue-remove{flex:0 0 18px;width:18px;height:18px;border:0;border-radius:4px;background:#eef3f7;color:#667e90;font-size:14px;line-height:1;cursor:pointer}
.p3d-queue-remove:hover{background:#fdecec;color:#b83535}
.p3d-dryer-unit{flex:1 0 290px;width:290px;max-width:360px;min-width:0;scroll-snap-align:start;display:flex;flex-direction:column;gap:5px}
.p3d-dryer-head{min-height:36px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 5px;color:#513f25;font-size:12px}
.p3d-dryer-head b{font-size:13px}.p3d-dryer-head span{border-radius:12px;background:#eadfcf;padding:3px 7px;font-weight:800;white-space:nowrap}
.p3d-dryer{position:relative;box-sizing:border-box;height:354px;padding:9px;border:1px solid #c9ad7f;border-radius:13px;background:linear-gradient(145deg,#fff9ed,#f3ead8);box-shadow:0 2px 7px #4938201c;transition:border-color .2s,box-shadow .2s;overflow:hidden}
.p3d-dryer::after{top:72px}
.p3d-dryer.is-drop-hover{border-color:#247fc4;box-shadow:0 0 0 3px #2996e633;background:#eef8ff}
.p3d-dryer-hint{min-height:40px;color:#79694e;font-size:10px;font-weight:700;line-height:1.35}
.p3d-dryer-empty{margin-top:70px;text-align:center;color:#9a8a71;font-size:11px;font-weight:700}
.p3d-dryer-list{height:284px;overflow-y:auto;display:grid;align-content:start;gap:6px;padding-right:2px}
.p3d-dryer-item{display:flex;align-items:center;gap:7px;min-width:0;min-height:59px;box-sizing:border-box;border:1px solid #e4ca7d;border-radius:8px;padding:5px;background:#fff5d4;color:#71511d;cursor:pointer}
.p3d-dryer-item[draggable=true]{cursor:grab}
.p3d-dryer-item.is-done{border-color:#90cfaa;background:#e3f7e9;color:#236342}
.p3d-dryer-thumb{flex:0 0 43px;width:43px;height:43px;display:grid;place-items:center;border-radius:5px;background:#f2e8ca;overflow:hidden}
.p3d-dryer-thumb img{width:100%;height:100%;object-fit:cover}
.p3d-dryer-copy{min-width:0;flex:1}.p3d-dryer-copy b,.p3d-dryer-copy small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p3d-dryer-copy b{font-size:11px}.p3d-dryer-copy small{margin-top:3px;font-size:10px;opacity:.8}
.p3d-dryer-timer{flex:0 0 auto;min-width:42px;text-align:center;border-radius:6px;padding:4px;background:#f1dc94;font-size:10px;font-weight:800;white-space:nowrap}
.p3d-dryer-item.is-done .p3d-dryer-timer{background:#beeacb;color:#14653c}
@media(max-width:760px){.p3d-page-header .cnc-page-heading{flex-basis:100%}.p3d-printers{flex:1 1 100%}.p3d-printer-unit{flex-basis:235px;width:235px}}
@media(prefers-reduced-motion:reduce){.p3d-printer,.p3d-queue,.p3d-dryer{transition:none;animation:none!important}.p3d-printer::after,.p3d-queue::after,.p3d-dryer::after{transition:none}.p3d-printer-unit:hover .p3d-printer{transform:none!important}.p3d-printer-stage>div{animation:none!important}}

/* Keep active printers and queues visible while filtering the board. */
.p3d-page-header .is-filtered{opacity:.42}

/* Compact print board: use the screen, with bounded readable columns. */
#p3dBoardRoot .cnc-col{box-sizing:border-box;flex:1 0 262px;min-width:262px;max-width:340px}
#p3dBoardRoot .cnc-head{display:grid;grid-template-columns:minmax(180px,400px) minmax(0,1fr);align-items:start;gap:10px}
#p3dBoardRoot .cnc-find{grid-column:1;grid-row:1;width:100%;min-width:0;max-width:none}
#p3dBoardRoot .cnc-head-acts{grid-column:2;grid-row:1;min-width:0;margin-left:0;justify-content:flex-end;align-items:center}
#p3dBoardRoot .cnc-find-inp,#p3dBoardRoot .cnc-btn{min-height:34px;box-sizing:border-box}
#p3dFindSum{grid-column:1/-1;grid-row:2;justify-self:start;max-width:100%;white-space:normal}
@media(max-width:760px){
  #p3dBoardRoot .cnc-head{grid-template-columns:minmax(0,1fr)}
  #p3dBoardRoot .cnc-head-acts{grid-column:1;grid-row:2;justify-content:flex-start}
  #p3dFindSum{grid-row:3}
}
