/* PRO Business Dashboard — styling + animations. Uses the app's own theme tokens so it
   follows light/dark automatically. Motion is gated on .is-in and disabled for
   prefers-reduced-motion. */
.proDash{
  --c2:#3fb8b0; --c3:#9b8cff; --c4:#e0a83a;
  --pd-line:var(--line,#28323f); --pd-panel:var(--panel,#141b24); --pd-raised:var(--surface-raised,var(--panel2,#1a222d));
  display:flex; flex-direction:column; gap:14px; margin-top:8px;
  font-variant-numeric:tabular-nums;
}
.proDash .tnum{font-variant-numeric:tabular-nums}

/* header */
.pdHead{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.pdTitle{display:flex;align-items:center;gap:13px;min-width:0}
.pdTitle h2{margin:0;font-size:1.3rem;letter-spacing:-.01em;line-height:1.1}
.pdTitle p{margin:2px 0 0;color:var(--muted);font-size:.76rem}
.pdBadge{flex:0 0 auto;display:inline-flex;align-items:center;padding:7px 12px;border-radius:999px;font-size:.7rem;font-weight:800;letter-spacing:.08em;color:var(--button-text,#12100c);background:linear-gradient(120deg,var(--accent),var(--accent2))}
.pdExport{margin-left:auto}

/* KPI row */
.pdKpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.pdK{position:relative;overflow:hidden;padding:15px 15px 12px;border:1px solid var(--pd-line);border-radius:15px;background:linear-gradient(180deg,var(--pd-raised),var(--pd-panel))}
.pdKlab{display:block;color:var(--muted);font-size:.7rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.pdKval{margin-top:8px;font-size:1.62rem;font-weight:800;letter-spacing:-.02em;line-height:1;min-height:1.1em}
.pdKsub{margin-top:7px;display:flex;align-items:center;gap:7px;font-size:.73rem;color:var(--muted)}
.delta{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:999px;font-weight:800;font-size:.68rem}
.delta.up{color:var(--good,#3fb95e);background:color-mix(in srgb,var(--good,#3fb95e) 15%,transparent)}
.delta.down{color:var(--bad,#f0603f);background:color-mix(in srgb,var(--bad,#f0603f) 15%,transparent)}
.delta.flat{color:var(--muted);background:color-mix(in srgb,var(--muted) 18%,transparent)}
.pdSpark{position:absolute;right:12px;bottom:11px;width:78px;height:30px;opacity:.85}

/* panels + grids */
.pdGrid{display:grid;gap:12px}
/* minmax(0,...) not bare Nfr: a bare fr track has an implicit min-width:auto, so a wide
   child (the nowrap product name / its bar row) could grow the column and spill the whole
   "Most profitable" panel sideways into "Materials runway". minmax(0,...) lets it shrink. */
.pdGrid-a{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}
.pdGrid-b{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr)}
/* overflow:hidden is the hard backstop — clips any child to the panel's rounded box so
   nothing can ever paint into the neighbouring panel, whatever the inner cause. */
.pdPanel{border:1px solid var(--pd-line);border-radius:15px;background:var(--pd-panel);padding:16px 17px;min-width:0;overflow:hidden}
.pdPanel>header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:13px}
.pdPanel h3{margin:0;font-size:.98rem;letter-spacing:-.01em}
.pdPanel>header span{color:var(--muted);font-size:.71rem;font-weight:600}
.pdMuted{color:var(--muted);font-size:.8rem;margin:6px 0 0}
.pdNote{margin:12px 0 0;color:var(--muted);font-size:.7rem}
.pdScroll{overflow-x:auto}

/* trend chart */
.trendSvg .grid line{stroke:var(--pd-line);stroke-width:1}
.trendSvg .tBar{fill:var(--accent);opacity:.9;transition:y .8s cubic-bezier(.2,.7,.2,1),height .8s cubic-bezier(.2,.7,.2,1)}
.trendSvg .tBar:hover{opacity:1;fill:var(--accent2)}
.trendSvg .tLine{stroke:var(--good,#3fb95e);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.1s ease .25s}
.is-in .trendSvg .tLine{stroke-dashoffset:0}
.pdLegend{display:flex;gap:16px;margin-top:9px;font-size:.72rem;color:var(--muted)}
.pdLegend b{display:inline-flex;align-items:center;gap:6px;font-weight:600}
.pdLegend i{width:10px;height:10px;border-radius:3px;background:var(--accent)}
.pdLegend i.line{width:14px;height:0;border-radius:0;border-top:2.5px solid var(--good,#3fb95e)}

/* donut */
.pdDonut{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.dSeg{transition:stroke-dasharray .95s cubic-bezier(.3,.8,.3,1)}
.dTot{font-size:.92rem;font-weight:800;fill:var(--text)}
.dLab{font-size:.66rem;fill:var(--muted)}
.pdBrk{flex:1;min-width:150px;display:grid;gap:9px}
.brk{display:flex;align-items:center;gap:10px;font-size:.82rem}
.brk i{width:11px;height:11px;border-radius:4px;flex:0 0 11px}
.brk b{margin-left:auto;font-weight:800}

/* shared animated bar (rank + runway) */
.pdBarT{position:relative;height:9px;border-radius:6px;background:color-mix(in srgb,var(--muted) 16%,transparent);overflow:hidden}
.pdBar{position:absolute;inset:0 auto 0 0;width:0;border-radius:6px;background:linear-gradient(90deg,var(--accent),var(--accent2));transition:width .9s cubic-bezier(.2,.7,.2,1) .1s}
.is-in .pdBar{width:var(--w)}
.pdBar.ok{background:linear-gradient(90deg,#2f8f49,var(--good,#3fb95e))}
.pdBar.warn{background:linear-gradient(90deg,#b9862a,var(--warn,#e0a83a))}
.pdBar.bad{background:linear-gradient(90deg,#c23f26,var(--bad,#f0603f))}

/* product ranking */
.pdRank{display:grid;grid-template-columns:minmax(0,1fr);gap:11px}
.pdRankRow{min-width:0}
.pdBarT{max-width:100%}
.pdRankTop{display:flex;align-items:baseline;gap:8px;font-size:.85rem;margin-bottom:5px}
.pdRankTop .nm{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pdRankTop .qty{color:var(--muted);font-size:.72rem;flex:0 0 auto}
.pdRankTop .amt{margin-left:auto;font-weight:800;flex:0 0 auto}
.mchip{flex:0 0 auto;font-size:.66rem;font-weight:800;padding:1px 6px;border-radius:999px}
.mchip.good{color:var(--good,#3fb95e);background:color-mix(in srgb,var(--good,#3fb95e) 15%,transparent)}
.mchip.warn{color:var(--warn,#e0a83a);background:color-mix(in srgb,var(--warn,#e0a83a) 16%,transparent)}
.mchip.bad{color:var(--bad,#f0603f);background:color-mix(in srgb,var(--bad,#f0603f) 15%,transparent)}

/* runway */
.pdRun{display:grid;gap:12px}
.pdRunRow{display:grid;grid-template-columns:88px 1fr auto;align-items:center;gap:12px}
.pdRunName{font-size:.82rem;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pdRunDays{font-size:.78rem;font-weight:800;white-space:nowrap;text-align:right}
.pdRunDays small{display:block;color:var(--muted);font-weight:600;font-size:.66rem}
.pdRunDays.flag{color:var(--bad,#f0603f)}

/* recommendations */
.pdRecGrid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.pdRec{display:flex;gap:11px;padding:12px 13px;border:1px solid var(--pd-line);border-left-width:3px;border-radius:12px;background:var(--pd-raised)}
.pdRec.crit{border-left-color:var(--bad,#f0603f)} .pdRec.warn{border-left-color:var(--warn,#e0a83a)} .pdRec.tip{border-left-color:var(--accent)} .pdRec.good{border-left-color:var(--good,#3fb95e)}
.pdRecIcon{flex:0 0 28px;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;font-size:14px;background:color-mix(in srgb,var(--accent) 12%,transparent)}
.pdRecBody b{display:block;font-size:.85rem;margin-bottom:2px}
.pdRecBody p{margin:0;color:var(--muted);font-size:.76rem;line-height:1.45}
.pdImpact{display:inline-block;margin-top:5px;font-size:.7rem;font-weight:800;color:var(--good,#3fb95e)}

/* empty state */
.pdEmpty{text-align:center;padding:40px 24px;border:1px dashed var(--pd-line);border-radius:16px;background:var(--pd-panel)}
.pdEmptyIcon{font-size:34px}
.pdEmpty h3{margin:10px 0 6px;font-size:1.05rem}
.pdEmpty p{margin:0 auto;max-width:460px;color:var(--muted);font-size:.85rem;line-height:1.5}

/* staggered reveal */
.pdK,.pdPanel{opacity:0;transform:translateY(10px);transition:opacity .5s ease,transform .5s cubic-bezier(.2,.7,.2,1)}
.is-in .pdK,.is-in .pdPanel{opacity:1;transform:none}
.is-in .pdKpis .pdK:nth-child(2){transition-delay:.05s}
.is-in .pdKpis .pdK:nth-child(3){transition-delay:.1s}
.is-in .pdKpis .pdK:nth-child(4){transition-delay:.15s}
.is-in .pdGrid-a .pdPanel:nth-child(2){transition-delay:.1s}
.is-in .pdGrid-b .pdPanel:nth-child(2){transition-delay:.1s}

/* clickable (expandable) panels */
.pdClickable{cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease,opacity .5s ease}
.pdClickable:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--pd-line));box-shadow:0 6px 22px -12px color-mix(in srgb,var(--accent) 60%,transparent)}
.pdClickable:hover .pdExpandIcon{opacity:1;color:var(--accent)}
.pdClickable:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pdExpandIcon{font-style:normal;margin-left:6px;opacity:.5;font-size:.9em;transition:opacity .18s ease,color .18s ease}

/* modal shell (mounted at body — global tokens only) */
body.pdModalOpen{overflow:hidden}
.pdModalWrap{position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;padding:20px;opacity:0;transition:opacity .18s ease}
.pdModalWrap.is-open{opacity:1}
.pdModalBackdrop{position:absolute;inset:0;background:rgba(3,7,12,.62);backdrop-filter:blur(3px)}
.pdModal{--c2:#3fb8b0;--c3:#9b8cff;--c4:#e0a83a;--pd-line:var(--line,#28323f);position:relative;width:min(960px,100%);max-height:90vh;display:flex;flex-direction:column;background:var(--panel,#141b24);color:var(--text);border:1px solid var(--line,#28323f);border-radius:18px;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);transform:translateY(14px) scale(.985);transition:transform .2s cubic-bezier(.2,.7,.2,1);font-variant-numeric:tabular-nums}
.pdModalWrap.is-open .pdModal{transform:none}
.pdModalHead{display:flex;align-items:flex-start;gap:14px;padding:18px 66px 14px 20px;border-bottom:1px solid var(--line)}
.pdModalHead h2{margin:0;font-size:1.15rem;letter-spacing:-.01em}
.pdModalHead p{margin:3px 0 0;color:var(--muted);font-size:.78rem}
/* pinned to the frame's top-right; !important guards against the app's global button styles */
.pdModalWrap .pdModalX{position:absolute!important;top:14px!important;right:14px!important;left:auto!important;margin:0!important;z-index:3;display:grid;place-items:center;width:34px!important;height:34px!important;padding:0!important;border-radius:9px!important;border:1px solid var(--line)!important;background:var(--panel2,#1a222d)!important;color:var(--text)!important;font-size:15px;line-height:1;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}
.pdModalWrap .pdModalX:hover{border-color:var(--accent)!important;color:var(--accent)!important}
.pdModalWrap .pdModalX:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pdModalBody{padding:18px 20px 22px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}
/* children keep their natural height — never let the flex column shrink & clip the chart */
.pdModalBody>*{flex:0 0 auto;min-width:0}
.dtChart{display:block;width:100%;height:auto}

/* stat strip */
.pdStatStrip{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}
.pdStat{padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2,#1a222d);min-width:0}
.pdStatLab{display:block;color:var(--muted);font-size:.64rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pdStatVal{display:block;margin-top:5px;font-size:1.12rem;font-weight:800;letter-spacing:-.01em}
.pdStatSub{display:block;margin-top:2px;color:var(--muted);font-size:.66rem}

/* detail chart */
.pdChartWrap{border:1px solid var(--line);border-radius:12px;padding:10px 6px 4px;background:var(--panel2,#1a222d)}
.dtChart .grid{stroke:var(--line);stroke-width:1}
.dtChart .dtBar{fill:var(--accent);opacity:.9}
.dtChart .dtBar:hover{opacity:1;fill:var(--accent2)}
.dtChart .dtLine{stroke:var(--good,#3fb95e);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.dtChart .dtDot{fill:var(--good,#3fb95e);pointer-events:none}
.dtChart .dtBar{cursor:help}
.dtChart .dtHit{fill:transparent;pointer-events:all;cursor:help}
.dtChart .dtHit:hover{fill:color-mix(in srgb,var(--good,#3fb95e) 20%,transparent)}
/* labelled hover tooltip: bar = filament used, line = completed prints */
.dtTip{position:fixed;z-index:2147483001;transform:translate(-50%,-100%);pointer-events:none;opacity:0;transition:opacity .12s ease;padding:8px 11px;border-radius:10px;border:1px solid var(--line);background:var(--panel2,#1a222d);box-shadow:0 12px 28px -8px rgba(0,0,0,.65);min-width:118px;max-width:230px;font-variant-numeric:tabular-nums}
.dtTip.show{opacity:1}
.dtTip b{display:block;font-size:.7rem;font-weight:800;letter-spacing:.02em;color:var(--accent2,var(--accent))}
.dtTip span{display:block;font-size:.85rem;font-weight:800;margin-top:2px;color:var(--text)}
.dtTip small{display:block;font-size:.68rem;color:var(--muted);margin-top:2px}
.dtChart .axL,.dtChart .axR,.dtChart .axX,.dtChart .axU{fill:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}
.dtChart .axU{font-size:9px;font-weight:700}

/* detail columns + tables */
.pdDetailCols{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.pdCostTop{grid-template-columns:auto 1fr;align-items:start}
.pdDonutBig svg{width:170px;height:170px}
.pdH4{margin:2px 0 9px;font-size:.9rem;letter-spacing:-.01em}
.pdTable{width:100%;border-collapse:collapse;font-size:.8rem}
.pdTable th{text-align:right;font-size:.66rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);padding:0 10px 8px;white-space:nowrap;border-bottom:1px solid var(--line)}
.pdTable th:first-child,.pdTable td:first-child{text-align:left}
.pdTable td{padding:7px 10px;border-bottom:1px solid color-mix(in srgb,var(--line) 60%,transparent);white-space:nowrap}
.pdTable tbody tr:hover{background:color-mix(in srgb,var(--accent) 7%,transparent)}
.pdTable .barCell{width:34%;min-width:90px}
.pdTable .barCell .pdBarT{height:7px}
.pdTable .barCell .pdBar{position:relative;transition:none}
.pdTableWide{font-size:.76rem}
.pdTableWide td,.pdTableWide th{padding-left:8px;padding-right:8px}

@media(max-width:720px){
  .pdStatStrip{grid-template-columns:repeat(3,1fr)}
  .pdDetailCols,.pdCostTop{grid-template-columns:1fr}
  .pdDonutBig{justify-content:center}
}
@media(max-width:440px){ .pdStatStrip{grid-template-columns:repeat(2,1fr)} }

@media(prefers-reduced-motion:reduce){
  .pdModalWrap,.pdModal,.pdClickable{transition:none}
}

@media(max-width:860px){
  .pdKpis{grid-template-columns:1fr 1fr}
  .pdGrid-a,.pdGrid-b{grid-template-columns:1fr}
  .pdRecGrid{grid-template-columns:1fr}
}
@media(max-width:480px){ .pdKpis{grid-template-columns:1fr} }

@media(prefers-reduced-motion:reduce){
  .pdK,.pdPanel{opacity:1;transform:none;transition:none}
  .trendSvg .tBar,.dSeg,.pdBar,.trendSvg .tLine{transition:none}
  .is-in .trendSvg .tLine{stroke-dashoffset:0}
}
