/* Animated charts (src/diagrams-charts.mjs). CSP-safe: all motion lives here. Charts play once and rest in the final state. */
.dc-svg{--dc-bg:#FBF8F1;--dc-ink:#18202E;--dc-mut:#586174;--dc-grid:#E2DACA;--dc-axis:#8A8372;--dc-ok:#1D3A66;--dc-mid:#6F8DB8;--dc-atk:#B22234;--dc-old:#B08D57;--dc-a:#13294B;--dc-b:#B22234;--dc-card:#F5EFE1;--dc-band:#B22234;--dc-h1:#D5E1F2;--dc-h2:#A9C0E1;--dc-h3:#7C9BC8;--dc-h4:#2F5A9A;--dc-h5:#13294B;--dc-x1:#18202E;--dc-x2:#18202E;--dc-x3:#10203A;--dc-x4:#F5EFE1;--dc-x5:#F5EFE1;--dc-hd:#EFE8D8;--dc-ph0:#8A8372;--dc-ph1:#B08D57;--dc-ph2:#1D3A66;
  display:block;width:100%;height:auto;border-radius:6px;box-shadow:0 1px 2px rgba(19,41,75,.08),0 10px 30px rgba(19,41,75,.12)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .dc-svg{--dc-bg:#0E1F3A;--dc-ink:#F5EFE1;--dc-mut:#C3BBA6;--dc-grid:#2A4166;--dc-axis:#7F8CA3;--dc-ok:#7FA6E0;--dc-mid:#4E73A8;--dc-atk:#F0626F;--dc-old:#D6B574;--dc-a:#9DBBEA;--dc-b:#F0626F;--dc-card:#13294B;--dc-band:#F0626F;--dc-h1:#244975;--dc-h2:#2E5384;--dc-h3:#5B86BE;--dc-h4:#9DBBEA;--dc-h5:#D3E3FA;--dc-x1:#F5EFE1;--dc-x2:#F5EFE1;--dc-x3:#0E1F3A;--dc-x4:#0E1F3A;--dc-x5:#0E1F3A;--dc-hd:#13294B;--dc-ph0:#7F8CA3;--dc-ph1:#D6B574;--dc-ph2:#7FA6E0}}
:root[data-theme="dark"] .dc-svg{--dc-bg:#0E1F3A;--dc-ink:#F5EFE1;--dc-mut:#C3BBA6;--dc-grid:#2A4166;--dc-axis:#7F8CA3;--dc-ok:#7FA6E0;--dc-mid:#4E73A8;--dc-atk:#F0626F;--dc-old:#D6B574;--dc-a:#9DBBEA;--dc-b:#F0626F;--dc-card:#13294B;--dc-band:#F0626F;--dc-h1:#244975;--dc-h2:#2E5384;--dc-h3:#5B86BE;--dc-h4:#9DBBEA;--dc-h5:#D3E3FA;--dc-x1:#F5EFE1;--dc-x2:#F5EFE1;--dc-x3:#0E1F3A;--dc-x4:#0E1F3A;--dc-x5:#0E1F3A;--dc-hd:#13294B;--dc-ph0:#7F8CA3;--dc-ph1:#D6B574;--dc-ph2:#7FA6E0}
.dc-svg text{font-family:"Libre Franklin",system-ui,-apple-system,"Segoe UI",sans-serif}
.dc-bg{fill:var(--dc-bg)}
.dc-frame{fill:none;stroke:#B08D57;stroke-opacity:.55;stroke-width:1}
.dc-t{fill:var(--dc-ink);font-size:14px;font-weight:600}
.dc-ts{fill:var(--dc-mut);font-size:13px;font-weight:400}
.dc-tt{fill:var(--dc-ink);font-size:17px;font-weight:700}
.dc-tb{fill:var(--dc-ink);font-size:14px;font-weight:700}
.dc-tv{fill:var(--dc-ink);font-size:13px;font-weight:600}
.dc-tvl{fill:var(--dc-ink);font-size:17px;font-weight:700}
.dc-tv,.dc-tb,.dc-ts{paint-order:stroke;stroke:var(--dc-bg);stroke-width:3px;stroke-linejoin:round}
.dc-grid{stroke:var(--dc-grid);stroke-width:1;fill:none}
.dc-row{stroke-dasharray:2 5}
.dc-axis{stroke:var(--dc-axis);stroke-width:1.5;fill:none}
.dc-ref{stroke:var(--dc-mut);stroke-width:1.25;stroke-dasharray:4 4;fill:none}
.dc-tgt{stroke:var(--dc-old);stroke-width:2;stroke-dasharray:6 4;fill:none}
.dc-s-ref{stroke:var(--dc-old);stroke-dasharray:6 4}
.dc-card{fill:var(--dc-card);stroke:var(--dc-old);stroke-opacity:.7}
.dc-band{fill:var(--dc-band);fill-opacity:.1}
.dc-ln{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.dc-s-atk.dc-ln,.dc-s-b.dc-ln{stroke:var(--dc-atk)}
.dc-s-ok.dc-ln{stroke:var(--dc-ok)}
.dc-s-a.dc-ln{stroke:var(--dc-a)}
.dc-s-ref.dc-ln{stroke:var(--dc-old)}
.dc-fill.dc-s-ok,.dc-dot.dc-s-ok{fill:var(--dc-ok)}
.dc-fill.dc-s-mid{fill:var(--dc-mid)}
.dc-fill.dc-s-old{fill:var(--dc-old)}
.dc-dot.dc-s-atk{fill:var(--dc-atk)}
.dc-dot{stroke:var(--dc-bg);stroke-width:2}
.dc-area.dc-s-atk{fill:var(--dc-atk);fill-opacity:.12;stroke:none}
.dc-ring{fill:none;stroke-width:2;transform-box:fill-box;transform-origin:center;animation:dc-pulse 2.4s ease-out infinite;animation-delay:2.4s}
.dc-ring.dc-s-ok{stroke:var(--dc-ok)}
/* round 8 */
.dc-h1{fill:var(--dc-h1)}.dc-h2{fill:var(--dc-h2)}.dc-h3{fill:var(--dc-h3)}.dc-h4{fill:var(--dc-h4)}.dc-h5{fill:var(--dc-h5)}
.dc-hd{fill:var(--dc-hd)}
.dc-svg .dc-tc{font-size:14px;font-weight:700;stroke:none}
.dc-svg .dc-x1{fill:var(--dc-x1)}.dc-svg .dc-x2{fill:var(--dc-x2)}.dc-svg .dc-x3{fill:var(--dc-x3)}.dc-svg .dc-x4{fill:var(--dc-x4)}.dc-svg .dc-x5{fill:var(--dc-x5)}
.dc-ph0{fill:var(--dc-ph0);fill-opacity:.1}.dc-ph1{fill:var(--dc-ph1);fill-opacity:.16}.dc-ph2{fill:var(--dc-ph2);fill-opacity:.12}
.dc-fill.dc-s-atk{fill:var(--dc-atk)}
.dc-seg{stroke:var(--dc-bg);stroke-width:2}
.dc-dot.dc-s-ok{stroke:var(--dc-bg)}
.dc-dashln{stroke:var(--dc-axis);stroke-width:2;stroke-dasharray:3 6;opacity:.8}
/* the failover ISP B line uses the series-b token */
.dc-failover .dc-ln.dc-s-b{stroke:var(--dc-ok)}
.dc-failover .dc-ring.dc-s-b{stroke:var(--dc-ok)}
.dc-failover .dc-ln.dc-s-a{stroke:var(--dc-old)}

/* round 9 */
.dc-ln.dc-s-old{stroke:var(--dc-old)}
.dc-ln.dc-s-mid{stroke:var(--dc-mid)}
.dc-dot.dc-s-old{fill:var(--dc-old)}
.dc-dot.dc-s-mid{fill:var(--dc-mid)}
.dc-glyph{fill:none;stroke:var(--dc-bg);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.dc-win{fill:var(--dc-ok);fill-opacity:.08}

/* round 11 */
.dc-arr{fill:none;stroke:var(--dc-ok);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dc-hold{fill:none;stroke:var(--dc-atk);stroke-width:1.5;stroke-dasharray:4 4}
.dc-cardh{stroke:var(--dc-atk)}
.dc-rg{fill:none;stroke-width:2}
.dc-st-ok{stroke:var(--dc-ok)}.dc-st-old{stroke:var(--dc-old)}.dc-st-atk{stroke:var(--dc-atk)}.dc-st-mid{stroke:var(--dc-axis)}

/* motion: draw, grow, fade, pop. Static (reduced-motion) state is the finished chart. */
.dc-draw{stroke-dasharray:100;animation:dc-draw 1.8s ease-out both}
.dc-grow{transform-box:fill-box;transform-origin:50% 100%;animation:dc-grow .9s cubic-bezier(.2,.7,.2,1) both}
.dc-growx{transform-box:fill-box;transform-origin:0 50%;animation:dc-growx .9s cubic-bezier(.2,.7,.2,1) both}
.dc-fade{animation:dc-fade .7s ease-out both}
.dc-pop{transform-box:fill-box;transform-origin:center;animation:dc-pop .5s cubic-bezier(.2,.9,.3,1.3) both}
@keyframes dc-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes dc-grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes dc-growx{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes dc-fade{from{opacity:0}to{opacity:1}}
@keyframes dc-pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes dc-pulse{0%{transform:scale(.8);opacity:.9}100%{transform:scale(2.2);opacity:0}}
.dc-d0{animation-delay:0.0s}
.dc-d1{animation-delay:0.2s}
.dc-d2{animation-delay:0.4s}
.dc-d3{animation-delay:0.6s}
.dc-d4{animation-delay:0.8s}
.dc-d5{animation-delay:1.0s}
.dc-d6{animation-delay:1.2s}
.dc-d7{animation-delay:1.4s}
.dc-d8{animation-delay:1.6s}
.dc-d9{animation-delay:1.8s}
.dc-d10{animation-delay:2.0s}
.dc-d11{animation-delay:2.2s}
.dc-d12{animation-delay:2.4s}
.dc-d13{animation-delay:2.6s}
.dc-d14{animation-delay:2.8s}
@media (prefers-reduced-motion:reduce){.dc-svg *{animation:none!important}.dc-ring{opacity:0}}
