/* Fleet Command Center — a deliberately dark "operations console" (single visual world) so the
   farm reads like machine telemetry, not a marketing page. Uses the app --accent for brand tie-in
   but commits to a technical, monospace, HUD treatment regardless of the active theme. */
.fleetConsole{
  /* Follows the user's theme: every colour maps to the app's theme tokens, falling back to a dark
     control-room palette only if a token is missing. Keeps the HUD/mono treatment in any theme. */
  --fc-ink:var(--text,#e9eef7);
  --fc-dim:var(--muted,#8592a6);
  --fc-faint:color-mix(in srgb, var(--muted,#8592a6) 66%, transparent);
  --fc-line:color-mix(in srgb, var(--line,#2a3240) 55%, transparent);
  --fc-line2:var(--line,#2a3240);
  --fc-ground:var(--bg,#070a11);
  --fc-panel:var(--panel,#0d131e);
  --fc-panel2:var(--panel2,var(--panel,#111a28));
  --fc-accent:var(--accent,#3fa9ff);
  --fc-run:var(--accent2,var(--accent,#39b6ff));
  --fc-good:var(--good,#3fd08a);
  --fc-warn:var(--warn,#f5a623);
  --fc-bad:var(--bad,#ff5f56);
  --fc-idle:color-mix(in srgb, var(--muted,#5f6c80) 82%, transparent);
  --fc-off:color-mix(in srgb, var(--muted,#5f6c80) 50%, transparent);
  --fc-mono:ui-monospace,"SF Mono","JetBrains Mono","Fira Code",Menlo,Consolas,monospace;
  position:fixed; inset:0; z-index:2147483300; display:flex; flex-direction:column;
  background:
    radial-gradient(120% 80% at 50% -10%, color-mix(in srgb,var(--fc-accent) 15%, transparent), transparent 60%),
    url("images/adminbackground.png?v=3") center center / cover no-repeat fixed,
    linear-gradient(180deg, #0a0f18, #05070d);
  color:var(--fc-ink); font-family:var(--fc-mono);
  opacity:0; transform:scale(1.012); transition:opacity .26s ease, transform .26s ease;
  overflow:hidden;
}
.fleetConsole.in{ opacity:1; transform:none; }
body.fleetOpen{ overflow:hidden; }
/* faint engineering grid + a slow scan line */
.fcScan{
  position:absolute; inset:0; pointer-events:none; z-index:0;
  background-image:
    linear-gradient(var(--fc-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--fc-line) 1px, transparent 1px);
  background-size:46px 46px, 46px 46px; opacity:.5;
  -webkit-mask-image:radial-gradient(130% 90% at 50% 0%, #000 55%, transparent 100%);
          mask-image:radial-gradient(130% 90% at 50% 0%, #000 55%, transparent 100%);
}
.fcScan::after{
  content:""; position:absolute; left:0; right:0; height:180px;
  background:linear-gradient(180deg, transparent, color-mix(in srgb,var(--fc-accent) 8%, transparent), transparent);
  animation:fcScanMove 7.5s linear infinite;
}
@keyframes fcScanMove{ 0%{ transform:translateY(-200px); } 100%{ transform:translateY(100vh); } }

.fleetConsole > *{ position:relative; z-index:1; }

/* ---- top bar ---- */
.fcTopbar{
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  padding:14px 20px; border-bottom:1px solid var(--fc-line2);
  background:linear-gradient(180deg, color-mix(in srgb,var(--fc-panel) 92%, transparent), transparent);
  backdrop-filter:blur(6px);
}
.fcBrand{ display:flex; align-items:center; gap:13px; min-width:0; }
.fcBrandMark{ width:38px; height:38px; flex:0 0 auto; overflow:hidden; border-radius:9px;
  border:1px solid color-mix(in srgb,var(--fc-accent) 32%, var(--fc-line2)); background:#0d1117;
  box-shadow:0 0 20px -8px var(--fc-accent); }
.fcBrandMark img{ width:100%; height:100%; object-fit:cover; display:block; }
.fcEyebrow{ display:block; font-size:.58rem; letter-spacing:.32em; color:var(--fc-dim); font-weight:700; }
.fcTopbar h2{ margin:1px 0 0; font-size:1.12rem; font-weight:800; letter-spacing:.04em; font-family:var(--app-font,system-ui); }
.fcTopMeta{ display:flex; align-items:center; gap:10px; flex:0 0 auto; }
.fcLiveClock{ display:inline-flex; align-items:center; gap:8px; padding:7px 12px; border:1px solid var(--fc-line2); border-radius:8px;
  background:var(--fc-panel); font-size:.86rem; font-weight:700; letter-spacing:.08em; color:var(--fc-ink); }
.fcBtn{ appearance:none; cursor:pointer; font-family:var(--fc-mono); font-size:.72rem; font-weight:700; letter-spacing:.1em;
  padding:9px 13px; border:1px solid var(--fc-line2); border-radius:8px; background:var(--fc-panel); color:var(--fc-dim);
  transition:border-color .15s, color .15s, background .15s; }
.fcBtn:hover{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 55%, var(--fc-line2)); background:var(--fc-panel2); }
.fcBtn--close{ color:var(--fc-ink); font-size:.68rem; width:23px; height:23px; padding:0; border-radius:50%;
  display:inline-flex; align-items:center; justify-content:center; line-height:1; }
.fcBtn--close:hover{ border-color:var(--fc-bad); color:var(--fc-bad); background:color-mix(in srgb,var(--fc-bad) 12%, var(--fc-panel)); }

/* ---- body scroll ---- */
.fcBody{ flex:1 1 auto; overflow-y:auto; overflow-x:hidden; padding:18px 20px 26px; }
.fcLoading{ padding:80px 0; text-align:center; color:var(--fc-dim); letter-spacing:.22em; font-size:.8rem; animation:fcBlink 1.3s steps(2) infinite; }
/* When the loader carries the animated radar viz, don't blink the whole graphic (scanViz has its own motion). */
.fcLoading--viz{ animation:none; padding:44px 0; letter-spacing:normal; font-size:inherit; }
@keyframes fcBlink{ 50%{ opacity:.4; } }

/* ---- KPI telemetry strip ---- */
.fcStrip{ display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin-bottom:16px; }
.fcKpi{ position:relative; padding:12px 14px; border:1px solid var(--fc-line2); border-radius:10px;
  background:linear-gradient(160deg,var(--fc-panel2),var(--fc-panel)); overflow:hidden; }
.fcKpi::before{ content:""; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--fc-idle); opacity:.6; }
.fcKpi--run::before{ background:var(--fc-run); box-shadow:0 0 12px var(--fc-run); }
.fcKpi--bad::before{ background:var(--fc-bad); box-shadow:0 0 12px var(--fc-bad); }
.fcKpiLabel{ display:block; font-size:.56rem; letter-spacing:.24em; color:var(--fc-dim); font-weight:700; }
.fcKpiValue{ display:block; margin-top:5px; font-size:1.62rem; font-weight:800; letter-spacing:.01em; font-variant-numeric:tabular-nums; line-height:1; }
.fcKpiValue i,.fcKpiOf{ font-size:.78rem; font-style:normal; color:var(--fc-dim); font-weight:700; }
.fcKpiSub{ display:block; margin-top:5px; font-size:.6rem; letter-spacing:.14em; color:var(--fc-faint); text-transform:uppercase; }

/* ---- plan gate strip ---- */
.fcGate{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:16px; padding:11px 14px;
  border:1px solid color-mix(in srgb,var(--fc-warn) 40%, var(--fc-line2)); border-radius:10px;
  background:color-mix(in srgb,var(--fc-warn) 9%, var(--fc-panel)); font-size:.76rem; color:var(--fc-ink); letter-spacing:.02em; }
.fcGate b{ letter-spacing:.14em; color:var(--fc-warn); }
.fcGateLink{ appearance:none; cursor:pointer; margin-left:auto; border:0; background:none; color:var(--fc-accent); font:inherit; font-weight:700; }
.fcGateLink:hover{ text-decoration:underline; }

/* ---- ops search + status filter (large fleets) ---- */
.fcOpsBar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:14px; }
.fcOpsSearch{ flex:1 1 200px; min-width:180px; padding:9px 12px; font:inherit; font-size:.82rem; color:var(--fc-ink);
  background:var(--fc-panel); border:1px solid var(--fc-line2); border-radius:9px; letter-spacing:.01em; outline:none;
  transition:border-color .15s, box-shadow .15s; }
.fcOpsSearch::placeholder{ color:var(--fc-faint); }
.fcOpsSearch:focus{ border-color:color-mix(in srgb,var(--fc-accent) 60%, var(--fc-line2));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--fc-accent) 18%, transparent); }
.fcOpsFilters{ display:inline-flex; gap:4px; padding:3px; border:1px solid var(--fc-line2); border-radius:9px; background:var(--fc-panel); }
.fcOpsChip{ appearance:none; cursor:pointer; border:0; background:none; color:var(--fc-dim);
  font:inherit; font-size:.62rem; font-weight:700; letter-spacing:.14em; padding:6px 11px; border-radius:6px;
  transition:background .15s, color .15s; }
.fcOpsChip:hover{ color:var(--fc-ink); }
.fcOpsChip.active{ color:var(--fc-ground); background:var(--fc-run); box-shadow:0 0 10px color-mix(in srgb,var(--fc-run) 45%, transparent); }
.fcOpsNone{ margin-top:14px; padding:22px; text-align:center; font-size:.8rem; color:var(--fc-faint);
  border:1px dashed var(--fc-line2); border-radius:10px; letter-spacing:.02em; }

/* ---- onboarding empty state ---- */
.fcOnboard{ display:flex; flex-direction:column; align-items:center; text-align:center; gap:10px;
  padding:52px 24px; border:1px dashed var(--fc-line2); border-radius:14px;
  background:radial-gradient(120% 90% at 50% 0%, color-mix(in srgb,var(--fc-accent) 6%, transparent), transparent 70%); }
.fcOnboardMark{ width:56px; height:56px; border-radius:14px; overflow:hidden;
  border:1px solid color-mix(in srgb,var(--fc-accent) 32%, var(--fc-line2)); background:#0d1117;
  box-shadow:0 0 22px color-mix(in srgb,var(--fc-accent) 22%, transparent); }
.fcOnboardMark img{ width:100%; height:100%; object-fit:cover; display:block; }
.fcOnboard h3{ margin:2px 0 0; font-size:1.05rem; font-weight:800; letter-spacing:.01em; color:var(--fc-ink); }
.fcOnboard p{ margin:0; max-width:420px; font-size:.82rem; line-height:1.55; color:var(--fc-dim); }
.fcOnboardSub{ max-width:520px !important; }
/* the three connectivity paths, explained */
.fcWays{ display:flex; flex-direction:column; gap:10px; width:min(560px,100%); margin:8px auto 0; text-align:left; }
.fcWay{ appearance:none; cursor:pointer; display:block; width:100%; text-align:left; padding:14px 15px; border-radius:12px;
  border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 55%, transparent); color:var(--fc-ink);
  transition:border-color .15s ease, background .15s ease, transform .1s ease; }
.fcWay:hover{ border-color:color-mix(in srgb,var(--fc-accent) 50%, var(--fc-line2)); transform:translateY(-1px); }
.fcWay--primary{ border-color:color-mix(in srgb,var(--fc-accent) 42%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 9%, var(--fc-panel)); }
.fcWayTop{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.fcWayTop b{ font-size:.9rem; font-weight:800; letter-spacing:.02em; color:var(--fc-ink); }
.fcWayBadge{ font-family:var(--fc-mono); font-size:.5rem; font-weight:700; letter-spacing:.11em; color:var(--fc-good);
  padding:2px 8px; border-radius:20px; border:1px solid color-mix(in srgb,var(--fc-good) 40%, var(--fc-line2)); }
.fcWay p{ margin:6px 0 8px; max-width:none; text-align:left; font-size:.8rem; line-height:1.5; color:var(--fc-dim); }
.fcWay p b{ color:var(--fc-ink); font-weight:600; }
.fcWayNeed{ display:block; font-size:.7rem; font-weight:700; letter-spacing:.02em; color:var(--fc-run); }

/* ---- fleet grid ---- */
.fcGrid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(336px,1fr)); gap:14px; }
/* "scroll to load" footer for the windowed grid (large fleets) — spans all columns, subtle */
.fcMore{ grid-column:1/-1; text-align:center; padding:16px 12px; color:var(--fc-dim); opacity:.75;
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.72rem; letter-spacing:.1em; text-transform:uppercase; }
.fcGrid > [hidden]{ display:none !important; }

.fcBay{ position:relative; display:flex; flex-direction:column; gap:11px; padding:14px 14px 13px;
  border:1px solid var(--fc-line2); border-radius:12px;
  background:linear-gradient(165deg, color-mix(in srgb,var(--fc-panel2) 92%, transparent), var(--fc-panel));
  --bay-accent:var(--fc-idle); overflow:hidden;
  /* Farm-scale performance: skip layout/paint/animation for off-screen cards. With 300+ bays the browser
     would otherwise paint and spin every ring at once. contain-intrinsic-size reserves space so the
     scrollbar stays correct; cards render the instant they scroll into view. */
  content-visibility:auto; contain-intrinsic-size:336px 460px; }
.fcBay::before{ content:""; position:absolute; inset:0 auto 0 0; width:3px; background:var(--bay-accent); opacity:.85; }
.fcBay--run{ --bay-accent:var(--fc-run); }
.fcBay--warn{ --bay-accent:var(--fc-warn); }
.fcBay--bad{ --bay-accent:var(--fc-bad); }
.fcBay--idle{ --bay-accent:var(--fc-idle); }
.fcBay--off{ --bay-accent:var(--fc-off); }
.fcBay--live{ border-color:color-mix(in srgb,var(--fc-run) 42%, var(--fc-line2)); box-shadow:0 0 34px -18px var(--fc-run); }
/* HUD corner ticks */
.fcBayCorner{ position:absolute; top:7px; right:7px; width:10px; height:10px; pointer-events:none;
  border-top:1px solid var(--fc-line2); border-right:1px solid var(--fc-line2); opacity:.7; }
.fcBayCorner--br{ top:auto; right:7px; bottom:7px; border-top:0; border-right:1px solid var(--fc-line2); border-bottom:1px solid var(--fc-line2); }

.fcBayHead{ display:flex; align-items:center; justify-content:space-between; gap:8px; }
.fcBayId{ font-size:.58rem; letter-spacing:.22em; color:var(--fc-faint); font-weight:700; }
.fcBayStatus{ display:inline-flex; align-items:center; gap:6px; font-size:.62rem; font-weight:800; letter-spacing:.16em; color:var(--bay-accent); }
.fcBayStatus em{ font-style:normal; color:var(--fc-faint); letter-spacing:.06em; font-weight:600; }

.fcLed{ width:8px; height:8px; border-radius:50%; flex:0 0 auto; background:var(--fc-idle); box-shadow:0 0 0 0 transparent; }
.fcLed--run{ background:var(--fc-run); box-shadow:0 0 9px var(--fc-run); animation:fcPulse 1.7s ease-out infinite; }
.fcLed--warn{ background:var(--fc-warn); box-shadow:0 0 8px var(--fc-warn); }
.fcLed--bad{ background:var(--fc-bad); box-shadow:0 0 8px var(--fc-bad); animation:fcPulse 1.2s ease-out infinite; }
.fcLed--idle{ background:var(--fc-good); box-shadow:0 0 7px color-mix(in srgb,var(--fc-good) 70%, transparent); }
.fcLed--off{ background:var(--fc-off); }
@keyframes fcPulse{ 0%{ box-shadow:0 0 0 0 color-mix(in srgb,var(--bay-accent,var(--fc-run)) 55%, transparent); } 70%,100%{ box-shadow:0 0 0 7px transparent; } }

.fcBayMain{ display:flex; align-items:center; gap:12px; }
.fcBayGlyph{ width:56px; height:56px; flex:0 0 56px; display:grid; place-items:center; }
.fcBayIcon svg{ width:30px; height:30px; fill:none; stroke:var(--fc-dim); stroke-width:1.4; stroke-linecap:round; stroke-linejoin:round; }
.fcRunRing svg{ width:56px; height:56px; overflow:visible; transform:rotate(-90deg); }
.fcRunTrack{ fill:none; stroke:color-mix(in srgb,var(--fc-run) 22%, transparent); stroke-width:3; }
.fcRunArc{ fill:none; stroke:var(--fc-run); stroke-width:3; stroke-linecap:round; stroke-dasharray:26 71;
  filter:drop-shadow(0 0 5px color-mix(in srgb,var(--fc-run) 60%, transparent)); animation:fcSpin 1.15s linear infinite; transform-origin:50% 50%; }
@keyframes fcSpin{ to{ transform:rotate(360deg); } }
.fcBayIdentity{ min-width:0; flex:1 1 auto; }
.fcBayName{ display:block; font-family:var(--app-font,system-ui); font-size:1.02rem; font-weight:750; letter-spacing:.01em;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcBayMeta{ display:block; margin-top:2px; font-size:.64rem; letter-spacing:.06em; color:var(--fc-faint); text-transform:uppercase;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* facility floor-plan placement chip */
.fcBayPlace{ display:inline-flex; align-items:center; gap:5px; margin-top:5px; max-width:100%; padding:2px 8px; border-radius:999px;
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.56rem; font-weight:700; letter-spacing:.05em; line-height:1.5;
  color:var(--fc-accent); border:1px solid color-mix(in srgb,var(--fc-accent) 40%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 10%, transparent);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* provenance chip — how this printer is connected (Fleet Agent / Cloud / Manual) */
.fcBayVia{ display:inline-flex; align-items:center; gap:5px; margin-top:5px; padding:2px 8px; border-radius:999px;
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.54rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; line-height:1.5;
  color:var(--fc-dim); border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-ink) 4%, transparent); white-space:nowrap; }
.fcBayVia--agent{ color:var(--fc-run); border-color:color-mix(in srgb,var(--fc-run) 42%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-run) 10%, transparent); }
.fcBayVia--cloud{ color:var(--fc-accent); border-color:color-mix(in srgb,var(--fc-accent) 42%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 10%, transparent); }
/* Fleet Agent paired but not currently posting (user quit it) — muted, not the live-agent accent. */
.fcBayVia--offline{ color:var(--fc-dim); border-color:var(--fc-line2); background:color-mix(in srgb,var(--fc-ink) 4%, transparent); opacity:.85; }
/* history-estimated planned weight marker — small + muted so it never reads as a measured value */
.fcBayEst{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.5rem; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--fc-dim); opacity:.8; }
/* filament captured by the Fleet Agent (this print / last print) */
.fcBayFilament{ display:flex; align-items:center; gap:6px; margin-top:8px; padding:6px 10px; border-radius:8px;
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.62rem; letter-spacing:.04em; color:var(--fc-dim);
  border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 55%, transparent); }
.fcBayFilament b{ color:var(--fc-ink); font-size:.8rem; font-weight:800; }
.fcBayFilNone{ color:var(--fc-faint); }

/* click-to-expand detail panel */
.fcBay.is-expandable{ cursor:pointer; }
.fcBay.is-expandable button, .fcBay.is-expandable select, .fcBay.is-expandable label, .fcBay.is-expandable a{ cursor:auto; }
.fcBayChev{ margin-left:6px; color:var(--fc-faint); font-size:.7rem; transition:color .14s; }
.fcBay.is-expanded .fcBayChev{ color:var(--fc-accent); }
.fcBayDetail{ margin-top:10px; padding:12px; border-radius:10px; border:1px solid var(--fc-line2);
  background:color-mix(in srgb,var(--fc-panel) 50%, transparent); display:flex; flex-direction:column; gap:10px; }
.fcDetJob{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.fcDetJob span{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.5rem; letter-spacing:.14em; color:var(--fc-dim); }
.fcDetJob b{ font-size:.86rem; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcDetGrid{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px 10px; }
.fcDet{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.fcDet span{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.46rem; letter-spacing:.09em; color:var(--fc-faint); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcDet b{ font-size:.82rem; font-weight:800; color:var(--fc-ink); font-variant-numeric:tabular-nums; }
.fcDetFoot{ display:flex; flex-wrap:wrap; gap:4px 14px; padding-top:8px; border-top:1px solid var(--fc-line2);
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.5rem; letter-spacing:.06em; color:var(--fc-dim); }
@media (max-width:520px){ .fcDetGrid{ grid-template-columns:repeat(2,minmax(0,1fr)); } }

/* small button variant + per-printer auto-deduct toggle */
.fcBtn--sm{ padding:5px 10px; font-size:.62rem; }
.fcAutoDeduct{ appearance:none; cursor:pointer; font-family:var(--fc-mono,ui-monospace,monospace); font-size:.56rem; font-weight:800; letter-spacing:.08em;
  padding:6px 10px; border-radius:8px; color:var(--fc-dim); border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 60%, transparent); white-space:nowrap; transition:color .14s, border-color .14s; }
.fcAutoDeduct:hover{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 45%, var(--fc-line2)); }
.fcAutoDeduct.is-on{ color:var(--fc-good); border-color:color-mix(in srgb,var(--fc-good) 55%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-good) 12%, transparent); }

/* ACTIVITY tab notification badge */
.fcModeBtn--badged{ position:relative; }
.fcModeBadge{ display:inline-grid; place-items:center; min-width:15px; height:15px; margin-left:6px; padding:0 4px; border-radius:8px;
  font-family:var(--fc-mono,ui-monospace,monospace); font-size:.58rem; font-weight:800; color:var(--button-text,#04121f); background:var(--fc-accent); vertical-align:middle;
  box-shadow:0 0 0 1.5px color-mix(in srgb,var(--fc-accent) 26%, transparent); }
/* `hidden` sets display:none, but the class's display: would win — restore it so the badge truly disappears at 0. */
.fcModeBadge[hidden]{ display:none; }

/* ACTIVITY log (Azure-style) */
.fcLog{ display:flex; flex-direction:column; gap:12px; }
.fcLogHead{ display:flex; align-items:center; gap:9px; }
.fcLogHead b{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.72rem; letter-spacing:.14em; color:var(--fc-ink); }
.fcLogPending{ font-size:.72rem; color:var(--fc-warn); font-weight:700; }
.fcLogClear{ font-size:.72rem; color:var(--fc-dim); }
.fcLogBar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.fcLogChips{ display:flex; gap:6px; flex-wrap:wrap; }
.fcLogChip{ appearance:none; cursor:pointer; display:inline-flex; align-items:center; gap:6px; padding:7px 12px; border-radius:8px; font-size:.72rem; font-weight:700;
  color:var(--fc-dim); border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 55%, transparent); transition:color .14s, border-color .14s; }
.fcLogChip:hover{ color:var(--fc-ink); }
.fcLogChip.active{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 55%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 12%, transparent); }
.fcLogChipN{ display:inline-grid; place-items:center; min-width:18px; height:18px; padding:0 5px; border-radius:9px; font-family:var(--fc-mono,ui-monospace,monospace); font-size:.62rem; font-weight:900; color:#1c1403; background:var(--fc-warn); }
.fcLogSkip{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.58rem; color:var(--fc-dim); white-space:nowrap; }
.fcLogPrinterWrap{ margin-left:auto; }
.fcLogPrinter{ appearance:none; cursor:pointer; padding:7px 26px 7px 11px; border-radius:8px; border:1px solid var(--fc-line2); color:var(--fc-ink); font-size:.74rem; font-weight:700;
  background:color-mix(in srgb,var(--fc-panel) 70%, transparent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none' stroke='%238893a3' stroke-width='1.6'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E") no-repeat right 10px center; }
.fcLogList{ display:flex; flex-direction:column; gap:6px; max-height:min(62vh,560px); overflow-y:auto; padding-right:4px; }
/* wraps so an expanded row's breakdown panel drops onto its own full-width line inside the row */
.fcLogRow{ display:flex;  align-items:center; gap:12px; padding:11px 13px; border-radius:10px; border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 45%, transparent); }
/* Wrapping is enabled only on a row that is actually expanded. Applying it to every row moved
   the right-hand badge column onto its own line on narrow screens for rows that can never
   expand -- a layout change to log entries unrelated to this feature. */
.fcLogRow.is-expanded{ flex-wrap:wrap; }
.fcLogRow.is-pending{ border-color:color-mix(in srgb,var(--fc-warn) 45%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-warn) 7%, transparent); }
.fcLogDot{ flex:none; width:24px; height:24px; display:grid; place-items:center; border-radius:7px; font-size:.7rem; color:#fff; }
.fcLogDot--run{ background:var(--fc-run,var(--fc-accent)); } .fcLogDot--good{ background:var(--fc-good); } .fcLogDot--bad{ background:var(--fc-bad); }
.fcLogDot--warn{ background:var(--fc-warn); } .fcLogDot--idle{ background:var(--fc-faint); }
/* flex-basis:0 (not auto) so the row's new flex-wrap can't be triggered by this column's CONTENT width:
   with an auto basis a long print name makes the base sizes overflow and the whole right-hand column
   drops to a second line on a narrow screen. At 0 it simply takes the leftover space and ellipsises,
   which is what it did before the row could wrap. */
.fcLogMain{ flex:1 1 0%; min-width:0; }
.fcLogName{ font-size:.86rem; font-weight:700; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcLogSub{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.6rem; letter-spacing:.04em; color:var(--fc-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:2px; }
.fcLogRight{ display:flex; align-items:center; gap:10px; flex:none; }
.fcLogWhen{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.58rem; color:var(--fc-faint); white-space:nowrap; }
.fcLogAct{ display:flex; gap:6px; }
.fcLogDone{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.58rem; color:var(--fc-good); white-space:nowrap; }
/* auto-deducted (⚡) reads in the run/accent tone so it stands apart from a manual ✓ deduction */
.fcLogDone--auto{ color:var(--fc-run); font-weight:700; }
/* rename a print — subtle ✎ that fades in on row hover (Bambu never transmits a real name for an
   untitled plate, so the user sets one here). Keyboard-reachable via focus. */
.fcLogRename{ margin-left:6px; padding:0 4px; border:0; background:transparent; color:var(--fc-faint); font-size:.72rem; line-height:1; cursor:pointer; opacity:0; transition:opacity .12s ease, color .12s ease; }
.fcLogRow:hover .fcLogRename, .fcLogRename:focus-visible{ opacity:1; }
.fcLogRename:hover{ color:var(--fc-accent); }
/* honest caveat when Bambu Cloud is off — internal-memory prints can't capture grams/name/auto-deduct */
.fcLogCloudNote{ margin:8px 0 4px; padding:8px 12px; border:1px solid color-mix(in srgb,var(--fc-warn) 40%, var(--fc-line2)); border-radius:8px; background:color-mix(in srgb,var(--fc-warn) 8%, transparent); color:var(--fc-dim); font-size:.72rem; line-height:1.55; }
.fcLogCloudNote b{ color:var(--fc-ink); }
/* Dismiss an errored (failed) print from the Errors filter — subtle ✕ that brightens on hover. */
.fcLogDismiss{ appearance:none; border:1px solid var(--fc-line2); background:transparent; color:var(--fc-faint); width:22px; height:22px; border-radius:6px; font-size:.66rem; line-height:1; cursor:pointer; display:grid; place-items:center; transition:color .15s,border-color .15s; }
.fcLogDismiss:hover{ color:var(--fc-bad); border-color:color-mix(in srgb,var(--fc-bad) 50%, var(--fc-line2)); }
/* On-screen "deducted" feedback that stays inside Fleet Command — a brief green pulse on the row. */
.fcLogRow--flash{ animation:fcLogDeducted 1.3s ease; }
@keyframes fcLogDeducted{ 0%{ background:color-mix(in srgb,var(--fc-good) 34%, transparent); box-shadow:0 0 0 1px color-mix(in srgb,var(--fc-good) 55%, transparent) inset; } 100%{ background:color-mix(in srgb,var(--fc-panel) 45%, transparent); box-shadow:none; } }
@media (prefers-reduced-motion:reduce){ .fcLogRow--flash{ animation:none; } }
.fcLogEmpty{ padding:40px; text-align:center; color:var(--fc-dim); font-size:.85rem; line-height:1.6; }

/* ---- click-to-expand deduction breakdown (deducted rows only) ----
   Only a row that ACTUALLY deducted gets a pointer, a chevron or a hover response — every other row
   stays visually inert, so nothing offers a click that leads nowhere. Mirrors the .fcBay expand pattern. */
.fcLogRow.is-expandable{ cursor:pointer; }
.fcLogRow.is-expandable:hover{ border-color:color-mix(in srgb,var(--fc-accent) 40%, var(--fc-line2)); }
.fcLogChev{ appearance:none; border:0; background:transparent; color:var(--fc-dim); cursor:pointer; width:20px; height:20px;
  border-radius:6px; display:grid; place-items:center; font-size:.66rem; line-height:1; transition:color .14s, background-color .14s; }
.fcLogChev:hover{ color:var(--fc-accent); background:color-mix(in srgb,var(--fc-accent) 12%, transparent); }
.fcLogChev:focus-visible{ outline:2px solid var(--fc-run); outline-offset:1px; color:var(--fc-accent); }
.fcLogRow.is-expanded .fcLogChev{ color:var(--fc-accent); }
/* Full-width line inside the row; the row's 12px gap spaces it, so no extra margin. box-sizing is
   explicit because this page has no global border-box reset — a content-box 100% basis plus the
   panel's own padding/border would push the row 22px wider than the list and add a scrollbar. */
.fcLogBreak{ flex:1 0 100%; box-sizing:border-box; cursor:auto; padding:9px 10px; border-radius:8px; border:1px solid var(--fc-line2);
  background:color-mix(in srgb,var(--fc-panel) 62%, transparent); display:flex; flex-direction:column; gap:7px;
  animation:fcLogBreakIn .16s ease; }
/* no fill-mode on purpose: if the animation never runs the panel simply renders in its FINAL state */
@keyframes fcLogBreakIn{ from{ opacity:0; transform:translateY(-3px); } to{ opacity:1; transform:none; } }
@media (prefers-reduced-motion:reduce){ .fcLogBreak{ animation:none; } }
.fcLogBreakHead{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.5rem; letter-spacing:.14em; color:var(--fc-dim); }
.fcLogBreakList{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:6px; }
.fcLogBreakItem{ display:flex; align-items:center; gap:9px; min-width:0; }
.fcLogBreakSw{ flex:none; width:12px; height:12px; border-radius:4px; background:var(--fc-swatch,var(--fc-faint));
  box-shadow:0 0 0 1px color-mix(in srgb,var(--fc-ink) 24%, transparent) inset; }
.fcLogBreakMain{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:1px; }
.fcLogBreakMain b{ font-size:.78rem; font-weight:700; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcLogBreakMain small{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.55rem; letter-spacing:.04em; color:var(--fc-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcLogBreakG{ flex:none; display:flex; align-items:baseline; gap:8px; font-family:var(--fc-mono,ui-monospace,monospace);
  font-size:.68rem; font-weight:800; color:var(--fc-ink); font-variant-numeric:tabular-nums; white-space:nowrap; }
.fcLogBreakG em{ font-style:normal; font-weight:700; font-size:.6rem; color:var(--fc-dim); }
.fcLogBreakTotal{ display:flex; align-items:baseline; justify-content:space-between; gap:10px; padding-top:7px; border-top:1px solid var(--fc-line2); }
.fcLogBreakTotal span{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.5rem; letter-spacing:.14em; color:var(--fc-dim); }
.fcLogBreakTotal b{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.7rem; font-weight:800; color:var(--fc-good); font-variant-numeric:tabular-nums; }
/* deducted before the breakdown was ever recorded — say so rather than show an empty panel */
.fcLogBreakNote{ font-size:.7rem; line-height:1.5; color:var(--fc-dim); }
.fcLogBreakNote b{ color:var(--fc-ink); }

/* manual-deduct dialog */
.fcDeductWrap{ position:fixed; inset:0; z-index:2147483200; display:grid; place-items:center; padding:20px; background:rgba(0,0,0,.55); }
.fcDeduct{ width:min(420px,100%); border-radius:16px; border:1px solid var(--fc-line2); overflow:hidden;
  background:linear-gradient(165deg,var(--fc-panel2,var(--fc-panel)),var(--fc-panel)); box-shadow:0 30px 80px rgba(0,0,0,.6); }
.fcDeductHead{ display:flex; align-items:center; justify-content:space-between; padding:14px 16px; border-bottom:1px solid var(--fc-line2); }
.fcDeductHead b{ font-size:.95rem; color:var(--fc-ink); }
.fcDeductX{ appearance:none; cursor:pointer; border:0; background:transparent; color:var(--fc-dim); font-size:1rem; }
.fcDeductBody{ display:flex; flex-direction:column; gap:12px; padding:16px; }
.fcDeductJob{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.64rem; letter-spacing:.05em; color:var(--fc-dim); }
.fcDeductField{ display:flex; flex-direction:column; gap:5px; }
.fcDeductField span{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.54rem; letter-spacing:.14em; color:var(--fc-dim); }
.fcDeductField select, .fcDeductField input{ padding:9px 11px; border-radius:9px; border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 70%, transparent); color:var(--fc-ink); font-size:.85rem; }
.fcDeductNote{ font-size:.76rem; color:var(--fc-dim); line-height:1.5; }
/* rich spool picker (same SMSpool look as the app's Inventory) */
.fcDeductLbl{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.54rem; letter-spacing:.14em; color:var(--fc-dim); }
.fcDeductSpools{ display:flex; flex-direction:column; gap:6px; max-height:240px; overflow-y:auto; padding:2px; }
.fcDeductSpool{ appearance:none; cursor:pointer; display:flex; align-items:center; gap:10px; text-align:left; padding:8px 10px; border-radius:10px;
  border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 55%, transparent); color:var(--fc-ink); }
.fcDeductSpool:hover{ border-color:color-mix(in srgb,var(--fc-accent) 45%, var(--fc-line2)); }
.fcDeductSpool.is-sel{ border-color:var(--fc-accent); background:color-mix(in srgb,var(--fc-accent) 12%, transparent); box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--fc-accent) 40%, transparent); }
.fcDeductSpool.is-out{ opacity:.55; }
.fcDeductSpool .filSpoolIcon{ width:32px; height:32px; flex:none; }
.fcDeductSpoolMain{ display:flex; flex-direction:column; gap:1px; min-width:0; flex:1 1 auto; }
.fcDeductSpoolMain b{ font-size:.82rem; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcDeductSpoolMain small{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.56rem; letter-spacing:.02em; color:var(--fc-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcDeductOut{ font-style:normal; font-family:var(--fc-mono,ui-monospace,monospace); font-size:.52rem; color:var(--fc-bad); }
.fcDeductFoot{ display:flex; justify-content:flex-end; gap:8px; padding:14px 16px; border-top:1px solid var(--fc-line2); }
/* ---- in-console deduction burst — echoes the app's deduct card (spool + "−N g" + cost) but renders
       ON TOP of the Fleet Command overlay. The app's own animation rolls the Inventory header hidden
       behind us; this plays here instead. Appended to .fleetConsole so it inherits the --fc-* tokens;
       z-index sits above the console's own children (incl. the 2147483200 deduct dialog). ---- */
.fcDeductBurst{ position:fixed; inset:0; z-index:2147483250; display:grid; place-items:center;
  pointer-events:none; opacity:0; transition:opacity .26s ease;
  background:radial-gradient(58% 46% at 50% 46%, color-mix(in srgb,var(--fc-good) 12%, transparent), transparent 70%); }
.fcDeductBurst.in{ opacity:1; }
.fcDeductBurst.out{ opacity:0; }
.fcDeductBurstCard{ position:relative; display:grid; justify-items:center; gap:7px; padding:26px 34px;
  border:1px solid color-mix(in srgb,var(--fc-good) 55%, var(--fc-line2)); border-radius:18px;
  background:color-mix(in srgb,var(--fc-panel) 94%, #000 6%);
  box-shadow:0 26px 70px rgba(0,0,0,.55), 0 0 44px color-mix(in srgb,var(--fc-good) 20%, transparent);
  animation:fcDeductPop .42s cubic-bezier(.2,.85,.2,1) both; }
@keyframes fcDeductPop{ from{ opacity:0; transform:translateY(16px) scale(.92); } to{ opacity:1; transform:none; } }
.fcDeductBurstCard .filSpoolIcon{ width:56px; height:56px; }
.fcDeductBurstFx{ position:absolute; top:26px; left:50%; margin-left:-28px; width:56px; height:56px; border-radius:50%;
  border:2px solid color-mix(in srgb,var(--fc-good) 60%, transparent); pointer-events:none;
  animation:fcDeductRipple .9s ease-out .05s both; }
@keyframes fcDeductRipple{ 0%{ transform:scale(.7); opacity:.85; } 100%{ transform:scale(2.4); opacity:0; } }
.fcDeductBurstAmt{ font-family:var(--fc-mono); font-size:2rem; line-height:1; letter-spacing:-.03em;
  color:var(--fc-good); font-variant-numeric:tabular-nums; }
.fcDeductBurstCost{ font-family:var(--fc-mono); font-size:.9rem; font-weight:700; letter-spacing:.02em;
  color:color-mix(in srgb,var(--fc-good) 80%, var(--fc-ink)); }
.fcDeductBurstLabel{ font-size:.6rem; letter-spacing:.2em; text-transform:uppercase; color:var(--fc-dim); font-weight:700; }
.fcDeductBurstName{ font-family:var(--fc-mono); font-size:.68rem; letter-spacing:.02em; color:var(--fc-faint);
  text-align:center; max-width:34ch; }
@media (prefers-reduced-motion:reduce){
  .fcDeductBurst{ transition:none; }
  .fcDeductBurstCard, .fcDeductBurstFx{ animation:none; }
}
.fcBayLive{ margin-top:6px; min-height:0; font-size:.66rem; color:var(--fc-dim); }
.fcLiveTag{ color:var(--fc-run); font-weight:800; letter-spacing:.1em; }
.fcLiveNote{ color:var(--fc-faint); }

/* telemetry grid */
.fcTelemGrid{ display:grid; grid-template-columns:1fr 1fr; gap:1px; border:1px solid var(--fc-line); border-radius:9px; overflow:hidden;
  background:var(--fc-line); }
.fcTelem{ display:flex; align-items:baseline; justify-content:space-between; gap:8px; padding:8px 10px; background:color-mix(in srgb,var(--fc-panel) 86%, var(--fc-ground)); }
.fcTelem span{ font-size:.56rem; letter-spacing:.16em; color:var(--fc-faint); font-weight:700; }
.fcTelem b{ font-size:.82rem; font-weight:700; color:var(--fc-ink); font-variant-numeric:tabular-nums; }
.fcTelem b i{ font-style:normal; font-size:.66rem; color:var(--fc-dim); }
/* Build volume: keep it on ONE line in the narrow cell — allow the label to shrink and never wrap the value. */
.fcTelem--vol{ gap:6px; }
.fcTelem--vol span{ flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.fcTelem--vol b{ flex:none; white-space:nowrap; font-size:.74rem; letter-spacing:-.01em; }

/* maintenance bar */
.fcSvc{ display:flex; flex-direction:column; gap:5px; }
.fcSvcHead{ display:flex; align-items:center; justify-content:space-between; font-size:.56rem; letter-spacing:.16em; color:var(--fc-faint); font-weight:700; }
.fcSvcHead b{ color:var(--fc-good); letter-spacing:.08em; }
.fcSvc--over .fcSvcHead b{ color:var(--fc-bad); }
.fcSvcBar{ height:5px; border-radius:99px; background:color-mix(in srgb,var(--fc-line2) 70%, transparent); overflow:hidden; }
.fcSvcBar i{ display:block; height:100%; border-radius:99px; background:linear-gradient(90deg,var(--fc-good),color-mix(in srgb,var(--fc-good) 60%, var(--fc-warn))); }
.fcSvc--over .fcSvcBar i{ background:linear-gradient(90deg,var(--fc-warn),var(--fc-bad)); }

/* status control */
.fcBayFoot{ margin-top:auto; padding-top:2px; display:flex; flex-direction:column; align-items:stretch; gap:9px; }
.fcBayFoot .fcStatusCtl{ width:100%; min-width:0; }
/* one aligned, wrapping row of actions: maintenance + auto-deduct on the left, tool icons pushed right */
.fcBayActions{ display:flex; flex-wrap:wrap; align-items:center; gap:6px; }
/* inline per-bay tools: unbind (→ manual) + remove; quiet until you hover the bay */
.fcBayTools{ display:flex; align-items:center; gap:5px; flex:0 0 auto; margin-left:auto; opacity:0; transition:opacity .15s ease; }
.fcBay:hover .fcBayTools, .fcBayTools:focus-within{ opacity:1; }
.fcBayTool{ appearance:none; cursor:pointer; width:26px; height:26px; flex:0 0 auto; display:grid; place-items:center; padding:0;
  border:1px solid var(--fc-line2); border-radius:7px; background:color-mix(in srgb,var(--fc-panel) 80%, transparent); color:var(--fc-dim);
  transition:color .14s, border-color .14s, background .14s; }
.fcBayTool svg{ width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.fcBayTool:hover{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 45%, var(--fc-line2)); }
.fcBayTool--del:hover{ color:var(--fc-bad); border-color:color-mix(in srgb,var(--fc-bad) 50%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-bad) 10%, var(--fc-panel)); }
@media (hover:none){ .fcBayTools{ opacity:1; } }   /* touch: always visible */
.fcStatusCtl{ display:flex; align-items:center; gap:9px; }
.fcStatusCtl > span{ font-size:.56rem; letter-spacing:.18em; color:var(--fc-faint); font-weight:700; flex:0 0 auto; }
.fcStatusCtl select{ appearance:none; -webkit-appearance:none; flex:1 1 auto; min-width:0; cursor:pointer;
  padding:8px 30px 8px 11px; border:1px solid var(--fc-line2); border-radius:8px; background:var(--fc-panel2); color:var(--fc-ink);
  font-family:var(--fc-mono); font-size:.72rem; font-weight:700; letter-spacing:.1em;
  background-image:linear-gradient(45deg,transparent 50%,var(--fc-dim) 50%),linear-gradient(135deg,var(--fc-dim) 50%,transparent 50%);
  background-position:calc(100% - 15px) 52%, calc(100% - 10px) 52%; background-size:5px 5px,5px 5px; background-repeat:no-repeat; }
.fcStatusCtl select:hover,.fcStatusCtl select:focus{ border-color:color-mix(in srgb,var(--fc-accent) 55%, var(--fc-line2)); outline:none; }

/* locked / add / upsell bays */
.fcBay--locked{ opacity:.62; }
.fcBayLockBody{ display:flex; flex-direction:column; align-items:flex-start; gap:8px; }
.fcBayLockBody strong{ font-family:var(--app-font,system-ui); font-size:1rem; }
.fcBayLockBody p{ margin:0; font-size:.68rem; color:var(--fc-faint); letter-spacing:.04em; }
.fcBtn--primary{ background:var(--fc-accent); border-color:var(--fc-accent); color:var(--button-text,#04121f); }
.fcBtn--primary:hover{ filter:brightness(1.08); color:var(--button-text,#04121f); }
.fcBay--add{ appearance:none; cursor:pointer; align-items:center; justify-content:center; text-align:center; gap:8px;
  min-height:150px; border-style:dashed; color:var(--fc-dim); font-family:var(--fc-mono); letter-spacing:.14em; font-weight:700; font-size:.72rem;
  background:color-mix(in srgb,var(--fc-panel) 60%, transparent); transition:border-color .15s, color .15s; }
.fcBay--add::before{ display:none; }
.fcBay--add:hover{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 55%, var(--fc-line2)); }
.fcBay--add small{ font-size:.6rem; letter-spacing:.06em; color:var(--fc-faint); font-weight:600; }
.fcAddPlus{ font-size:1.7rem; line-height:1; color:var(--fc-accent); }
.fcBay--upsell{ border-color:color-mix(in srgb,var(--fc-warn) 40%, var(--fc-line2)); }
.fcBay--upsell .fcAddPlus{ color:var(--fc-warn); }

/* footer */
.fcFooter{ display:flex; align-items:center; justify-content:space-between; padding:9px 20px; border-top:1px solid var(--fc-line2);
  font-size:.56rem; letter-spacing:.2em; color:var(--fc-faint); background:color-mix(in srgb,var(--fc-panel) 80%, transparent); }
.fcFootRight{ color:var(--fc-dim); }

/* ---- live overlay (real integration data) ---- */
/* Box the ring to a fixed square and drop the SVG + the % label into the SAME grid cell, so the
   label is dead-centre on the circle. The label must NOT be a grid/flex container itself, or the
   "85" text node and the <i>%</i> become separate items and stack — keep it plain inline text. */
.fcRunRing--real{ position:relative; display:grid; place-items:center; width:56px; height:56px; }
.fcRunRing--real > svg, .fcRunRing--real > .fcRingPct{ grid-area:1 / 1; }
.fcRunFill{ fill:none; stroke:var(--fc-run); stroke-width:3; stroke-linecap:round;
  filter:drop-shadow(0 0 4px color-mix(in srgb,var(--fc-run) 55%, transparent)); transition:stroke-dashoffset .6s ease; }
.fcRingPct{ align-self:center; justify-self:center; text-align:center; line-height:1; white-space:nowrap;
  font-size:.72rem; font-weight:800; color:var(--fc-ink); font-variant-numeric:tabular-nums; }
.fcRingPct i{ font-size:.5rem; font-style:normal; color:var(--fc-dim); }
.fcLiveStats{ display:flex; flex-wrap:wrap; gap:4px 10px; margin-top:5px; }
.fcLiveStat{ font-size:.62rem; letter-spacing:.03em; color:var(--fc-dim); font-variant-numeric:tabular-nums; white-space:nowrap; }
.fcLiveTag--std{ color:var(--fc-good); }
/* A halted machine. Without this rule the modifier matches nothing and the tag inherits .fcLiveTag's
   --fc-run, so an ERROR line renders in the same orange as a healthy print — the failure mode being
   that it looks deliberate. */
.fcLiveTag--bad{ color:var(--fc-bad); }
.fcBoundTag{ font-size:.48rem; letter-spacing:.1em; color:var(--fc-dim); border:1px solid var(--fc-line2); border-radius:4px; padding:1px 4px; margin-left:4px; }
.fcAutoTag{ font-size:.58rem; letter-spacing:.14em; color:var(--fc-run); font-weight:700; }
.fcAutoWrap{ display:inline-flex; align-items:center; gap:9px; flex-wrap:wrap; }
.fcMaintBtn{ appearance:none; cursor:pointer; font-family:var(--fc-mono); font-size:.54rem; font-weight:700; letter-spacing:.1em;
  padding:4px 9px; border-radius:7px; color:var(--fc-dim); border:1px solid var(--fc-line2);
  background:color-mix(in srgb,var(--fc-panel) 60%, transparent); transition:color .14s, border-color .14s, background .14s; }
.fcMaintBtn:hover{ color:var(--fc-warn); border-color:color-mix(in srgb,var(--fc-warn) 45%, var(--fc-line2)); }
.fcMaintBtn.is-on{ color:var(--fc-warn); border-color:color-mix(in srgb,var(--fc-warn) 55%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-warn) 12%, transparent); }

/* unregistered / adopt bay */
.fcBay--unreg{ border-style:dashed; border-color:color-mix(in srgb,var(--fc-run) 45%, var(--fc-line2)); }
.fcUnregHint{ margin:0; font-size:.66rem; line-height:1.4; color:var(--fc-faint); letter-spacing:.02em; }
.fcBayFoot--reg{ display:flex; flex-direction:column; gap:8px; align-items:stretch; }
.fcBayFoot--reg .fcBtn--primary{ width:100%; }
.fcLinkCtl{ display:flex; align-items:center; gap:8px; }
.fcLinkCtl > span{ font-size:.54rem; letter-spacing:.16em; color:var(--fc-faint); font-weight:700; flex:0 0 auto; }
.fcLinkCtl select{ appearance:none; -webkit-appearance:none; flex:1 1 auto; min-width:0; cursor:pointer;
  padding:7px 26px 7px 10px; border:1px solid var(--fc-line2); border-radius:8px; background:var(--fc-panel2); color:var(--fc-ink);
  font-family:var(--fc-mono); font-size:.68rem; font-weight:700; letter-spacing:.05em;
  background-image:linear-gradient(45deg,transparent 50%,var(--fc-dim) 50%),linear-gradient(135deg,var(--fc-dim) 50%,transparent 50%);
  background-position:calc(100% - 14px) 52%, calc(100% - 9px) 52%; background-size:5px 5px,5px 5px; background-repeat:no-repeat; }

/* ---- mode toggle (Live Ops / Analytics) ---- */
.fcModes{ display:inline-flex; gap:3px; padding:3px; border:1px solid var(--fc-line2); border-radius:9px; background:var(--fc-panel); }
.fcModeBtn{ appearance:none; cursor:pointer; font-family:var(--fc-mono); font-size:.64rem; font-weight:700; letter-spacing:.12em;
  padding:7px 12px; border:0; border-radius:6px; background:transparent; color:var(--fc-dim); transition:background .15s, color .15s; }
.fcModeBtn:hover{ color:var(--fc-ink); }
.fcModeBtn.active{ background:color-mix(in srgb,var(--fc-accent) 26%, var(--fc-panel2)); color:var(--fc-ink); box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--fc-accent) 40%, transparent); }
@media(max-width:760px){ .fcModes{ order:3; } .fcTopbar{ flex-wrap:wrap; } }

/* ---- analytics cards ---- */
.fcAnRow{ display:grid; grid-template-columns:1.7fr 1fr; gap:14px; margin-bottom:14px; }
.fcCard{ border:1px solid var(--fc-line2); border-radius:12px; padding:14px 15px 15px;
  background:linear-gradient(165deg, color-mix(in srgb,var(--fc-panel2) 92%, transparent), var(--fc-panel)); }
.fcCardHead{ display:flex; align-items:baseline; justify-content:space-between; gap:10px; margin-bottom:12px; }
.fcCardHead h3{ margin:0; font-size:.66rem; font-weight:800; letter-spacing:.2em; color:var(--fc-ink); }
.fcCardNote{ font-size:.56rem; letter-spacing:.12em; color:var(--fc-faint); text-transform:uppercase; }

/* trend chart */
.fcMetricToggle{ display:inline-flex; gap:2px; }
.fcMetricBtn{ appearance:none; cursor:pointer; font-family:var(--fc-mono); font-size:.55rem; font-weight:700; letter-spacing:.1em;
  padding:5px 8px; border:1px solid var(--fc-line2); border-radius:6px; background:var(--fc-panel); color:var(--fc-dim); }
.fcMetricBtn+.fcMetricBtn{ margin-left:3px; }
.fcMetricBtn.active{ color:var(--fc-ink); border-color:color-mix(in srgb,var(--fc-accent) 50%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 20%, var(--fc-panel2)); }
.fcChart{ width:100%; height:120px; display:block; }
.fcChartBar{ fill:var(--fc-run); opacity:.82; transition:opacity .12s; }
.fcChartBar:hover{ opacity:1; }
.fcChartBar--zero{ fill:var(--fc-line2); opacity:.5; }
.fcChartGrid{ stroke:var(--fc-line); stroke-width:.3; stroke-dasharray:1 1.5; }
.fcChartAxis{ stroke:var(--fc-line2); stroke-width:.4; }
.fcChartAxisRow{ display:flex; justify-content:space-between; margin-top:6px; font-size:.56rem; letter-spacing:.1em; color:var(--fc-faint); }
/* chart controls: range · type · metric (wrap so three groups don't crowd the card head) */
.fcCard--chart .fcCardHead{ align-items:center; flex-wrap:wrap; }
.fcChartCtrls{ display:flex; flex-wrap:wrap; align-items:center; gap:8px; justify-content:flex-end; }
.fcSeg{ display:inline-flex; gap:2px; padding:2px; border:1px solid var(--fc-line); border-radius:8px; background:color-mix(in srgb,var(--fc-panel) 70%, transparent); }
.fcSegBtn{ appearance:none; cursor:pointer; font-family:var(--fc-mono); font-size:.55rem; font-weight:700; letter-spacing:.08em;
  padding:5px 9px; border:0; border-radius:6px; background:transparent; color:var(--fc-dim); white-space:nowrap; }
.fcSegBtn:hover{ color:var(--fc-ink); }
.fcSegBtn.active{ color:var(--fc-ink); background:color-mix(in srgb,var(--fc-accent) 26%, var(--fc-panel2)); box-shadow:0 0 0 1px color-mix(in srgb,var(--fc-accent) 40%, transparent) inset; }
/* line variant */
.fcChartLine{ fill:none; stroke:var(--fc-run); stroke-width:2; stroke-linejoin:round; stroke-linecap:round; }
.fcChartArea{ fill:color-mix(in srgb,var(--fc-accent) 15%, transparent); stroke:none; }
/* Analytics plot: an HTML y-axis (max/mid/0) + x-axis date ticks laid out around the stretched svg. */
.fcPlot{ display:grid; grid-template-columns:auto minmax(0,1fr); grid-template-rows:auto auto; column-gap:8px; }
.fcPlotY{ display:flex; flex-direction:column; justify-content:space-between; height:120px; text-align:right; padding-right:1px;
  font-size:.58rem; letter-spacing:.02em; color:var(--fc-faint); font-variant-numeric:tabular-nums; white-space:nowrap; }
.fcPlotMain{ position:relative; min-width:0; }
.fcPlotX{ display:flex; justify-content:space-between; margin-top:6px; font-size:.56rem; letter-spacing:.06em;
  color:var(--fc-faint); font-variant-numeric:tabular-nums; }
.fcBarVal{ position:absolute; transform:translate(-50%,-3px); font-size:.54rem; font-weight:700; color:var(--fc-text);
  font-variant-numeric:tabular-nums; white-space:nowrap; pointer-events:none; }
/* Recent-prints row: secondary time beside the date. */
.fcPrTime{ color:var(--fc-faint); font-weight:400; font-size:.92em; font-variant-numeric:tabular-nums; }
/* Make the machine-detail "back" control read clearly as a back button. */
.fcBtn--back{ font-weight:600; }
.fcBtn--back:hover{ border-color:var(--fc-accent); color:var(--fc-accent); }
/* pie: share of the metric by machine (donut via mask; centre + legend are overlay siblings, not masked) */
.fcPie{ display:flex; align-items:center; gap:22px; flex-wrap:wrap; padding:8px 4px 2px; min-height:120px; }
.fcPieWrap{ position:relative; width:148px; height:148px; flex:0 0 auto; }
.fcPieDisc{ width:100%; height:100%; border-radius:50%;
  -webkit-mask:radial-gradient(closest-side, transparent 55%, #000 56%); mask:radial-gradient(closest-side, transparent 55%, #000 56%); }
.fcPieCenter{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; pointer-events:none; }
.fcPieCenter b{ font-size:1.05rem; font-weight:900; color:var(--fc-ink); }
.fcPieCenter em{ font-size:.5rem; letter-spacing:.14em; text-transform:uppercase; color:var(--fc-faint); font-style:normal; }
.fcPieLegend{ display:flex; flex-direction:column; gap:6px; font-size:.62rem; color:var(--fc-dim); min-width:150px; }
.fcPieLeg{ display:inline-flex; align-items:center; gap:8px; }
.fcPieLeg i{ width:11px; height:11px; border-radius:3px; flex:0 0 auto; }
.fcPieLeg b{ color:var(--fc-ink); margin-left:auto; }

/* source split */
.fcSrcRows{ display:flex; flex-direction:column; gap:11px; }
.fcSrcRow{ display:grid; grid-template-columns:96px 1fr auto; align-items:center; gap:10px; }
.fcSrcName{ display:inline-flex; align-items:center; gap:6px; font-size:.6rem; font-weight:700; letter-spacing:.1em; color:var(--fc-dim); }
.fcSrcBar{ height:8px; border-radius:99px; background:color-mix(in srgb,var(--fc-line2) 60%, transparent); overflow:hidden; }
.fcSrcBar i{ display:block; height:100%; border-radius:99px; background:var(--fc-idle); }
.fcSrcBar i.fcSrc--run{ background:var(--fc-run); box-shadow:0 0 8px -1px var(--fc-run); }
.fcSrcBar i.fcSrc--good{ background:var(--fc-good); box-shadow:0 0 8px -1px var(--fc-good); }
.fcSrcRow > b{ font-size:.82rem; font-weight:800; font-variant-numeric:tabular-nums; color:var(--fc-ink); }
.fcSrcRow > b em{ font-style:normal; font-size:.6rem; color:var(--fc-faint); margin-left:2px; }

/* per-machine table */
.fcTableWrap{ overflow-x:auto; }
.fcTable{ width:100%; border-collapse:collapse; font-variant-numeric:tabular-nums; }
.fcTable th{ text-align:right; font-size:.56rem; letter-spacing:.14em; color:var(--fc-faint); font-weight:700; padding:0 10px 9px; white-space:nowrap; border-bottom:1px solid var(--fc-line2); }
.fcTable th:first-child{ text-align:left; }
.fcTable td{ text-align:right; padding:9px 10px; font-size:.8rem; color:var(--fc-ink); border-bottom:1px solid var(--fc-line); white-space:nowrap; }
.fcTable tbody tr:hover td{ background:color-mix(in srgb,var(--fc-accent) 7%, transparent); }
.fcPrName{ text-align:left!important; font-weight:700; }
.fcPrRank{ display:inline-block; min-width:20px; margin-right:9px; color:var(--fc-faint); font-size:.62rem; letter-spacing:.06em; }
.fcPrTotal{ color:var(--fc-run)!important; font-weight:800; }
.fcPrShare{ width:90px; }
.fcShareBar{ height:6px; border-radius:99px; background:color-mix(in srgb,var(--fc-line2) 60%, transparent); overflow:hidden; }
.fcShareBar i{ display:block; height:100%; border-radius:99px; background:linear-gradient(90deg,color-mix(in srgb,var(--fc-run) 60%,var(--fc-accent)),var(--fc-run)); }

/* highlights */
.fcHighlights{ display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:10px; margin-bottom:14px; }
.fcHi{ padding:11px 14px; border:1px solid var(--fc-line2); border-radius:10px; background:linear-gradient(160deg,var(--fc-panel2),var(--fc-panel)); }
.fcHi span{ display:block; font-size:.55rem; letter-spacing:.18em; color:var(--fc-faint); font-weight:700; }
.fcHi b{ display:block; margin-top:5px; font-size:.98rem; font-weight:750; color:var(--fc-ink); font-family:var(--app-font,system-ui); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcHi em{ font-style:normal; font-size:.66rem; color:var(--fc-run); letter-spacing:.04em; }
.fcAnFoot{ margin:14px 2px 0; font-size:.6rem; letter-spacing:.06em; color:var(--fc-faint); }

/* analytics gate + empty */
.fcAnGate,.fcAnEmpty{ max-width:520px; margin:56px auto; text-align:center; padding:0 20px; }
.fcAnGateMark{ font-size:2.4rem; color:var(--fc-accent); text-shadow:0 0 24px color-mix(in srgb,var(--fc-accent) 60%, transparent); }
.fcAnGate h3,.fcAnEmpty h3{ margin:12px 0 8px; font-family:var(--app-font,system-ui); font-size:1.3rem; letter-spacing:.02em; }
.fcAnGate p,.fcAnEmpty p{ margin:0 0 16px; color:var(--fc-dim); font-size:.82rem; line-height:1.6; letter-spacing:.01em; }
.fcAnGatePreview{ display:flex; flex-wrap:wrap; gap:8px; justify-content:center; margin-bottom:18px; }
.fcAnGatePreview span{ font-size:.58rem; letter-spacing:.14em; color:var(--fc-faint); font-weight:700; padding:6px 11px; border:1px solid var(--fc-line2); border-radius:99px; }
.fcAnEmpty span{ font-size:2rem; color:var(--fc-dim); }

/* per-machine detail drill-in */
.fcPrRow{ cursor:pointer; }
.fcPrRow:hover td,.fcPrRow:focus-visible td{ background:color-mix(in srgb,var(--fc-accent) 11%, transparent)!important; }
.fcPrRow:focus-visible{ outline:none; }
.fcPrGo{ margin-left:8px; color:var(--fc-faint); font-weight:800; }
.fcPrRow:hover .fcPrGo{ color:var(--fc-accent); }
.fcDetailHead{ display:flex; align-items:center; gap:14px; margin-bottom:16px; }
.fcDetailTitle{ min-width:0; }
.fcDetailTitle h2{ margin:1px 0 0; font-size:1.14rem; font-weight:800; letter-spacing:.02em; font-family:var(--app-font,system-ui); }
.fcDetailSpecs{ margin-bottom:14px; grid-template-columns:repeat(auto-fit,minmax(120px,1fr))!important; }
.fcDetailChart{ margin-bottom:14px; }
.fcStat{ font-size:.58rem; font-weight:800; letter-spacing:.1em; padding:2px 7px; border-radius:5px; }
.fcStat--ok{ color:var(--fc-good); background:color-mix(in srgb,var(--fc-good) 15%, transparent); }
.fcStat--bad{ color:var(--fc-bad); background:color-mix(in srgb,var(--fc-bad) 16%, transparent); }
.fcDetailEmpty{ text-align:center!important; color:var(--fc-faint); padding:22px!important; }

@media(max-width:720px){ .fcAnRow{ grid-template-columns:1fr; } }

/* Entry button in the Printer Profiles toolbar — a distinct "console" accent so it reads as a
   live/operational action, not another CRUD button. */
.printerFleetBtn{
  position:relative;
  border:1px solid color-mix(in srgb, var(--accent) 62%, #fff)!important;
  background:linear-gradient(135deg, var(--accent2, var(--accent)), var(--accent))!important;
  color:var(--button-text, #fff)!important; font-weight:800!important; letter-spacing:.03em;
  /* Gently pulsing halo so it reads as the marquee "go here" destination, distinct from the flat
     primary buttons beside it. */
  animation:fleetBtnGlow 2.4s ease-in-out infinite;
}
.printerFleetBtn::before{
  content:""; position:absolute; left:11px; top:50%; transform:translateY(-50%);
  width:7px; height:7px; border-radius:50%; background:var(--button-text,#fff);
  box-shadow:0 0 0 0 color-mix(in srgb,#fff 70%,transparent); animation:fleetBtnDot 2.4s ease-out infinite;
}
.printerFleetBtn{ padding-left:30px!important; }
@keyframes fleetBtnGlow{
  0%,100%{ box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 45%, transparent), 0 6px 18px -6px color-mix(in srgb, var(--accent) 70%, transparent); }
  55%{ box-shadow:0 0 0 6px color-mix(in srgb, var(--accent) 0%, transparent), 0 9px 28px -4px color-mix(in srgb, var(--accent) 100%, transparent); }
}
@keyframes fleetBtnDot{ 0%{ box-shadow:0 0 0 0 color-mix(in srgb,#fff 65%,transparent); } 70%,100%{ box-shadow:0 0 0 6px transparent; } }
.printerFleetBtn:hover{ filter:brightness(1.07); transform:translateY(-1px); box-shadow:0 9px 28px -6px color-mix(in srgb, var(--accent) 92%, transparent)!important; }
.printerFleetBtn:active{ transform:translateY(0); }
@media(prefers-reduced-motion:reduce){ .printerFleetBtn,.printerFleetBtn::before{ animation:none!important; } }

@media (max-width:560px){
  .fcTopbar{ padding:12px 14px; }
  .fcTopbar h2{ font-size:1rem; }
  .fcBody{ padding:14px 12px 22px; }
  .fcGrid{ grid-template-columns:1fr; }
  .fcLiveClock{ display:none; }
}
/* ---- Auto Detect tile + modal ---- */
.fcBay--detect{ border-style:dashed; }
.fcBay--detect .fcAddPlus{ color:var(--fc-run); }
.fcBay--detect:hover{ border-color:color-mix(in srgb,var(--fc-run) 55%, var(--fc-line2)); }
.fcBay--capture{ border-color:color-mix(in srgb,var(--fc-accent) 40%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-accent) 7%, transparent); }
.fcBay--capture .fcAddPlus{ color:var(--fc-accent); }
.fcBay--capture:hover{ border-color:color-mix(in srgb,var(--fc-accent) 62%, var(--fc-line2)); }
.fcOnboardActions{ display:flex; gap:10px; flex-wrap:wrap; justify-content:center; }

.fcDetect{ position:fixed; inset:0; z-index:40; display:grid; place-items:center; padding:20px; }
.fcDetBackdrop{ position:absolute; inset:0; background:color-mix(in srgb,var(--fc-ground) 74%, transparent); backdrop-filter:blur(3px); }
.fcDetPanel{ position:relative; width:min(460px,100%); max-height:82vh; display:flex; flex-direction:column;
  border:1px solid var(--fc-line2); border-radius:16px; overflow:hidden;
  background:linear-gradient(165deg,var(--fc-panel2),var(--fc-panel)); box-shadow:0 30px 80px rgba(0,0,0,.5); }
.fcDetHead{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:15px 16px 12px; border-bottom:1px solid var(--fc-line2); }
.fcDetKicker{ font-size:.56rem; font-weight:700; letter-spacing:.22em; color:var(--fc-run); }
.fcDetHead h3{ margin:3px 0 0; font-size:1.02rem; font-weight:800; color:var(--fc-ink); letter-spacing:.01em; }
.fcDetList{ overflow-y:auto; padding:8px; display:flex; flex-direction:column; gap:6px; }
.fcDetRow{ display:flex; align-items:center; gap:11px; padding:11px 12px; border-radius:11px; border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-panel) 60%, transparent); }
.fcDetRow.is-in{ opacity:.7; }
.fcDetInfo{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px; }
.fcDetInfo strong{ font-size:.86rem; font-weight:700; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcDetInfo span{ font-family:var(--fc-mono,ui-monospace,monospace); font-size:.6rem; letter-spacing:.06em; color:var(--fc-dim); }
.fcDetTag{ font-size:.56rem; font-weight:700; letter-spacing:.1em; color:var(--fc-good); white-space:nowrap; }
.fcDetPick{ display:inline-flex; align-items:center; gap:7px; cursor:pointer; font-size:.6rem; font-weight:700; letter-spacing:.12em; color:var(--fc-ink); white-space:nowrap; }
.fcDetPick input{ width:16px; height:16px; accent-color:var(--fc-run); cursor:pointer; }
/* "Add as a new machine" vs "Link to <an existing profile>". Stacked under the ADOPT checkbox so a
   long profile name can wrap without shoving the row's name/status column out of shape. max-width
   keeps a verbose name ("Ender 3 V3 KE — garage, left shelf") from doubling the row height. */
.fcDetChoose{ display:flex; flex-direction:column; align-items:flex-end; gap:6px; flex:none; }
.fcDetLink{
  font-size:.62rem; font-weight:600; letter-spacing:.02em; max-width:190px;
  padding:5px 7px; border-radius:8px; cursor:pointer;
  color:var(--fc-ink); background:var(--fc-panel); border:1px solid var(--fc-line2);
}
.fcDetLink:focus-visible{ outline:2px solid var(--fc-run); outline-offset:1px; }
/* The menu is painted by the OS using the element's own colours, so on a dark console an
   unstyled option list renders black-on-black in several browsers. */
.fcDetLink option{ background:var(--fc-panel); color:var(--fc-ink); }
@media (max-width:560px){ .fcDetLink{ max-width:150px; } }
.fcDetScan{ display:flex; flex-direction:column; align-items:center; gap:9px; padding:38px 20px; text-align:center; }
.fcDetScan b{ font-size:.72rem; letter-spacing:.16em; color:var(--fc-ink); }
.fcDetScan span{ font-size:.72rem; color:var(--fc-dim); }
.fcDetRadar{ width:40px; height:40px; border-radius:50%; border:2px solid color-mix(in srgb,var(--fc-run) 30%, var(--fc-line2)); border-top-color:var(--fc-run); animation:fcSpin .9s linear infinite; }
.fcDetEmpty{ display:flex; flex-direction:column; align-items:center; gap:7px; padding:34px 22px; text-align:center; }
.fcDetEmpty b{ font-size:.9rem; color:var(--fc-ink); }
.fcDetEmpty span{ font-size:.78rem; color:var(--fc-dim); max-width:320px; line-height:1.5; }
.fcDetFoot{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:12px 14px; border-top:1px solid var(--fc-line2); }

/* ---- Engineering-style network scan animation (add-printer + auto-detect) ---- */
.fcScanViz{ display:flex; flex-direction:column; align-items:center; gap:13px; padding:26px 18px 30px; text-align:center; }
.fcScanRadar{ position:relative; width:150px; height:150px; border-radius:50%;
  background:radial-gradient(circle at 50% 50%, color-mix(in srgb,var(--fc-run) 12%, transparent) 0%, transparent 70%), var(--fc-panel2);
  border:1px solid color-mix(in srgb,var(--fc-run) 40%, var(--fc-line2));
  box-shadow:inset 0 0 22px color-mix(in srgb,var(--fc-run) 16%, transparent), 0 8px 26px rgba(0,0,0,.35); overflow:hidden; }
.fcScanGrid{ position:absolute; inset:0; border-radius:50%;
  background:linear-gradient(to right, transparent calc(50% - .5px), color-mix(in srgb,var(--fc-run) 26%, transparent) 50%, transparent calc(50% + .5px)),
             linear-gradient(to bottom, transparent calc(50% - .5px), color-mix(in srgb,var(--fc-run) 26%, transparent) 50%, transparent calc(50% + .5px)); }
.fcScanRing{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); border-radius:50%; border:1px solid color-mix(in srgb,var(--fc-run) 22%, transparent); }
.fcScanRing--1{ width:62%; height:62%; } .fcScanRing--2{ width:30%; height:30%; }
.fcScanPing{ position:absolute; top:50%; left:50%; width:20%; height:20%; transform:translate(-50%,-50%); border-radius:50%; border:1px solid color-mix(in srgb,var(--fc-run) 55%, transparent); animation:fcScanPing 2.4s ease-out infinite; }
.fcScanSweep{ position:absolute; inset:0; border-radius:50%; background:conic-gradient(from 0deg, color-mix(in srgb,var(--fc-run) 46%, transparent), transparent 70deg, transparent 360deg); animation:fcScanSweep 2.6s linear infinite; mix-blend-mode:screen; }
.fcScanBlip{ position:absolute; width:7px; height:7px; border-radius:50%; background:var(--fc-run); box-shadow:0 0 8px color-mix(in srgb,var(--fc-run) 80%, transparent); opacity:0; animation:fcScanBlip 2.6s ease-in-out infinite; }
.fcScanBlip--a{ top:30%; left:64%; animation-delay:.3s; } .fcScanBlip--b{ top:60%; left:38%; animation-delay:1.1s; } .fcScanBlip--c{ top:46%; left:70%; animation-delay:1.9s; }
.fcScanLogo{ position:absolute; top:50%; left:50%; width:52px; height:52px; transform:translate(-50%,-50%); border-radius:12px; object-fit:cover; background:var(--fc-panel);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--fc-panel) 80%, transparent), 0 0 18px color-mix(in srgb,var(--fc-run) 45%, transparent); animation:fcScanLogo 2.2s ease-in-out infinite; }
.fcScanText{ display:flex; align-items:center; gap:6px; }
.fcScanText b{ font-family:var(--fc-mono); font-size:.72rem; letter-spacing:.18em; color:var(--fc-ink); }
.fcScanDots{ display:inline-flex; gap:3px; }
.fcScanDots i{ width:4px; height:4px; border-radius:50%; background:var(--fc-run); opacity:.25; animation:fcScanDot 1.2s ease-in-out infinite; }
.fcScanDots i:nth-child(2){ animation-delay:.2s; } .fcScanDots i:nth-child(3){ animation-delay:.4s; }
.fcScanSub{ font-family:var(--fc-mono); font-size:.6rem; letter-spacing:.08em; color:var(--fc-dim); max-width:280px; line-height:1.5; }
@keyframes fcScanSweep{ to{ transform:rotate(360deg); } }
@keyframes fcScanPing{ 0%{ width:20%; height:20%; opacity:.7; } 100%{ width:96%; height:96%; opacity:0; } }
@keyframes fcScanBlip{ 0%,100%{ opacity:0; transform:scale(.4); } 12%,40%{ opacity:1; transform:scale(1); } 60%{ opacity:0; } }
@keyframes fcScanLogo{ 0%,100%{ transform:translate(-50%,-50%) scale(1); } 50%{ transform:translate(-50%,-50%) scale(1.05); } }
@keyframes fcScanDot{ 0%,100%{ opacity:.25; } 50%{ opacity:1; } }

/* ---- Local LAN bridge pairing modal ---- */
.fcBridge{ position:fixed; inset:0; z-index:41; display:grid; place-items:center; padding:20px; }
.fcBrPanel{ width:min(560px,100%); }
.fcBtn--sm{ padding:6px 9px; font-size:.6rem; letter-spacing:.08em; }
.fcBrBody{ overflow-y:auto; padding:15px 17px 5px; display:flex; flex-direction:column; gap:15px; }
.fcBrHero{ display:flex; justify-content:center; margin:-2px 0 2px; }
.fcBrHero img{ width:min(240px, 60%); height:auto; display:block; filter:drop-shadow(0 10px 26px rgba(0,0,0,.45)); }
.fcBrLede{ margin:0; font-size:.82rem; line-height:1.55; color:var(--fc-dim); }
.fcBrLede b{ color:var(--fc-ink); font-weight:700; }
.fcBrSteps{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:14px; }
.fcBrSteps > li{ display:flex; gap:12px; align-items:flex-start; }
.fcBrSteps > li > div{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:6px; }
.fcBrSteps b{ font-size:.86rem; color:var(--fc-ink); font-weight:700; }
.fcBrNum{ flex:none; width:24px; height:24px; border-radius:50%; display:grid; place-items:center; margin-top:1px;
  font-family:var(--fc-mono); font-size:.72rem; font-weight:800; color:var(--fc-run);
  border:1px solid color-mix(in srgb,var(--fc-run) 45%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-run) 12%, transparent); }
.fcBrHint{ font-size:.72rem; line-height:1.45; color:var(--fc-dim); }
.fcBrHint b{ color:var(--fc-ink); font-weight:600; }
.fcBrSteps code, .fcBrHint code{ font-family:var(--fc-mono); font-size:.82em; color:var(--fc-ink); }
.fcBrCode{ display:flex; align-items:center; gap:8px; margin-top:3px; padding:8px 8px 8px 12px; border-radius:10px;
  border:1px dashed color-mix(in srgb,var(--fc-run) 55%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-run) 8%, var(--fc-panel)); }
.fcBrCode code{ flex:1 1 auto; font-family:var(--fc-mono); font-size:.92rem; font-weight:700; letter-spacing:.02em; color:var(--fc-ink); word-break:break-all; }
.fcBrCode--load{ color:var(--fc-dim); font-size:.78rem; padding:12px; justify-content:center; border-style:solid; }
.fcBrCmd{ display:flex; align-items:center; gap:8px; padding:8px 8px 8px 10px; border-radius:9px; border:1px solid var(--fc-line2);
  background:color-mix(in srgb,var(--fc-ground) 40%, var(--fc-panel)); }
.fcBrCmdLabel{ flex:none; font-family:var(--fc-mono); font-size:.54rem; font-weight:700; letter-spacing:.12em; color:var(--fc-run); align-self:flex-start; margin-top:3px; }
.fcBrCmd code{ flex:1 1 auto; min-width:0; font-family:var(--fc-mono); font-size:.68rem; line-height:1.5; color:var(--fc-ink); word-break:break-all; }
.fcBrCmd .fcBtn--sm{ align-self:flex-start; }
.fcBrNote{ display:flex; align-items:center; gap:9px; padding:10px 12px; border-radius:10px; font-size:.74rem; line-height:1.45; color:var(--fc-dim);
  border:1px solid var(--fc-line2); background:color-mix(in srgb,var(--fc-good) 7%, transparent); }

/* Fleet Agent modal: download + live status + per-printer Access Code */
.fcBrHeadRight{ display:flex; align-items:center; gap:10px; }
.fcBrHeadLeft{ display:flex; align-items:center; gap:11px; min-width:0; }
.fcBrAgentIcon{ width:36px; height:36px; flex:none; overflow:hidden; border-radius:9px;
  border:1px solid color-mix(in srgb,var(--fc-run) 35%, var(--fc-line2)); box-shadow:0 6px 18px -9px var(--fc-run); }
.fcBrAgentIcon img{ width:100%; height:100%; object-fit:cover; display:block; }
.fcBrBadge{ display:inline-flex; align-items:center; gap:6px; font-family:var(--fc-mono); font-size:.56rem; font-weight:700; letter-spacing:.12em;
  color:var(--fc-dim); padding:5px 9px; border-radius:20px; border:1px solid var(--fc-line2); white-space:nowrap; }
.fcBrBadge--on{ color:var(--fc-good); border-color:color-mix(in srgb,var(--fc-good) 45%, var(--fc-line2)); }
.fcBrDlRow{ display:flex; gap:10px; flex-wrap:wrap; }
.fcBrDlRow > .fcBtn, .fcBrDlRow > a.fcBtn{ flex:1 1 180px; text-align:center; text-decoration:none; padding:12px 14px; }
a.fcBrDl{ display:inline-flex; align-items:center; justify-content:center; }
.fcBrWait{ display:flex; align-items:flex-start; gap:11px; padding:12px 13px; border-radius:11px;
  border:1px dashed color-mix(in srgb,var(--fc-run) 45%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-run) 7%, transparent); }
.fcBrWait > div{ display:flex; flex-direction:column; gap:3px; }
.fcBrWait b{ font-size:.84rem; color:var(--fc-ink); }
.fcDetRadar--sm{ width:22px; height:22px; border-width:2px; flex:none; margin-top:2px; }
.fcBrConn{ font-size:.82rem; line-height:1.5; color:var(--fc-dim); padding:11px 13px; border-radius:11px;
  border:1px solid color-mix(in srgb,var(--fc-good) 35%, var(--fc-line2)); background:color-mix(in srgb,var(--fc-good) 8%, transparent); }
.fcBrConn b{ color:var(--fc-ink); font-weight:700; }
.fcBrPList{ display:flex; flex-direction:column; gap:8px; }
.fcBrP{ display:flex; align-items:center; gap:10px; padding:11px 12px; border-radius:11px; border:1px solid var(--fc-line2);
  background:color-mix(in srgb,var(--fc-panel) 60%, transparent); }
.fcBrP.is-set{ border-color:color-mix(in srgb,var(--fc-good) 35%, var(--fc-line2)); }
.fcBrPInfo{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px; }
.fcBrPInfo strong{ font-size:.86rem; color:var(--fc-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fcBrPInfo span{ font-family:var(--fc-mono); font-size:.58rem; letter-spacing:.05em; color:var(--fc-dim); }
.fcBrPOk{ font-family:var(--fc-mono); font-size:.58rem; font-weight:700; letter-spacing:.1em; color:var(--fc-good); white-space:nowrap; }
.fcBrPCode{ width:130px; padding:8px 10px; border-radius:8px; border:1px solid var(--fc-line2); background:var(--fc-ground);
  color:var(--fc-ink); font-family:var(--fc-mono); font-size:.8rem; letter-spacing:.08em; }
.fcBrPCode:focus{ outline:none; border-color:var(--fc-run); }
.fcBrFootHint{ font-size:.72rem; color:var(--fc-dim); }
.fcBrManual{ margin-top:4px; border:1px solid var(--fc-line2); border-radius:11px; padding:10px 12px; }
.fcBrManual > summary{ cursor:pointer; font-size:.78rem; font-weight:700; color:var(--fc-dim); }
.fcBrManual[open] > summary{ color:var(--fc-ink); margin-bottom:6px; }
.fcBrManualForm{ display:flex; flex-direction:column; gap:7px; }
.fcBrManualForm input{ padding:8px 10px; border-radius:8px; border:1px solid var(--fc-line2); background:var(--fc-ground);
  color:var(--fc-ink); font-size:.82rem; }
.fcBrManualForm input:focus{ outline:none; border-color:var(--fc-run); }
.fcBrManualForm .fcBtn{ align-self:flex-start; }
/* "How to open on Mac" tip — unsigned .dmg needs a one-time Gatekeeper bypass */
.fcBrMacTip{ margin-top:-2px; border:1px solid var(--fc-line2); border-radius:11px; padding:10px 12px; }
.fcBrMacTip > summary{ cursor:pointer; font-size:.74rem; font-weight:700; color:var(--fc-dim); }
.fcBrMacTip[open] > summary{ color:var(--fc-ink); margin-bottom:6px; }
.fcBrMacTip ol{ margin:6px 0; padding-left:18px; display:flex; flex-direction:column; gap:4px; }
.fcBrMacTip code{ display:inline-block; margin-top:5px; padding:5px 8px; border-radius:7px; background:var(--fc-ground);
  border:1px solid var(--fc-line2); user-select:all; word-break:break-all; }
@media (max-width:560px){
  .fcBrPCode{ width:100px; }
  .fcBrDlRow > .fcBtn, .fcBrDlRow > a.fcBtn{ flex-basis:100%; }
}

@media (max-width:560px){
  .fcTopbar{ padding:12px 14px; }
  .fcTopbar h2{ font-size:1rem; }
  .fcBody{ padding:14px 12px 22px; }
  .fcGrid{ grid-template-columns:1fr; }
  .fcLiveClock{ display:none; }
}
@media (prefers-reduced-motion:reduce){
  .fcScan::after,.fcRunArc,.fcLed--run,.fcLed--bad,.fcLoading,.fcDetRadar{ animation:none; }
  .fleetConsole{ transition:opacity .2s ease; transform:none; }
}

/* Light-theme wallpaper.
   The console inherits the app's theme tokens, so on a light theme the panels turn light while the
   backdrop stayed a dark control-room image — text on glass over the wrong ground. The whole stack is
   restated rather than just swapping background-image, because the radial accent wash and the base
   gradient underneath it are both dark-first and would muddy a light wallpaper.
   The theme list is explicit and mirrors public/light-theme-refresh-20260721.css: "arctic" is a light
   theme with no -light suffix, so [class*="-light"] would leave it on the dark backdrop. */
body.arctic .fleetConsole,
body.theme-light .fleetConsole,
body.graphite-light .fleetConsole,
body.midnight-light .fleetConsole,
body.forest-light .fleetConsole,
body.royal-light .fleetConsole,
body.rose-light .fleetConsole,
body.crimson-light .fleetConsole,
body.copper-light .fleetConsole,
body.ocean-light .fleetConsole,
body.orange-light .fleetConsole,
body.sunrise-light .fleetConsole{
  background:
    radial-gradient(120% 80% at 50% -10%, color-mix(in srgb,var(--fc-accent) 10%, transparent), transparent 60%),
    url("images/adminbackgroundL.png?v=1") center center / cover no-repeat fixed,
    linear-gradient(180deg, #eef1f6, #e2e7ef);
}

/* Same reasoning as the support panel: the circle is small by request, so the button keeps a
   comfortable hit area with an invisible inset overlay rather than a 19px target. */
.fcBtn--close{ position:relative; }
.fcBtn--close::after{ content:""; position:absolute; inset:-6px; border-radius:50%; }

/* ⚠ Same override, same reason: system-polish-20260717.css pins every dimension of
   `button[aria-label*="close" i]` to 44px with !important, and this button's aria-label is
   "Close fleet console". Without !important here the 19px above is discarded and the console keeps
   the global 44px accent circle. See the matching note in support-chat.css. */
.fleetConsole .fcBtn--close{
  width:23px!important;min-width:23px!important;max-width:23px!important;
  height:23px!important;min-height:23px!important;max-height:23px!important;
  flex:0 0 23px!important;aspect-ratio:1/1!important;
  padding:0!important;font-size:.72rem!important;line-height:1!important;border-radius:50%!important}
