/* XinXin 14 · Data visualization / chart cards / accessible legends */
body.app-body .chart-grid {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px!important;margin:0!important}
body.app-body .chart-grid .chart-card {position:relative;min-height:305px;padding:21px 22px!important;background:#fff!important;border:1px solid var(--v14-edge)!important;border-radius:var(--v14-r-lg)!important;box-shadow:var(--v14-shadow-sm)!important;overflow:hidden}
body.app-body .chart-grid .chart-card.span-2 {grid-column:span 2}
body.app-body .chart-title {display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin:0 0 12px!important;padding:0!important;max-width:100%}
body.app-body .chart-title > div {min-width:0}
body.app-body .chart-title span:not(.badge) {color:#8b9bb1!important;font-weight:650!important;font-size:10px!important}
body.app-body .chart-title :is(h2,h3) {margin:4px 0 0!important;font-size:16px!important;letter-spacing:-.025em!important;font-weight:780!important;color:#2a3c5a!important}
body.app-body .chart-host {height:218px!important;min-height:218px!important;width:100%;max-width:100%;position:relative;background:linear-gradient(180deg,#f9fbff 0%,#fff 100%)!important;border-radius:var(--v14-r-md)!important;padding:8px 6px!important;overflow:hidden}
body.app-body .chart-host.tall {height:270px!important;min-height:270px!important}
body.app-body .chart-host.horizontal-chart {height:280px!important;min-height:280px!important}
body.app-body .chart-host.donut-host {height:234px!important;min-height:234px!important;background:#fff!important}
body.app-body .aurora-data-svg {width:100%;height:100%;overflow:visible;display:block}
body.app-body .aurora-axis-label {fill:#96a2b4;font-size:10px;font-weight:530}
body.app-body .aurora-gridline {stroke:#e9edf5;stroke-width:1;stroke-dasharray:4 5}
body.app-body .aurora-gridline.is-baseline {stroke:#dfe6f0;stroke-width:1.3;stroke-dasharray:none}
body.app-body .aurora-value-label {fill:#53647c;font-size:10px;font-weight:740}
body.app-body .aurora-trend-path {stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 3px 7px rgba(88,115,224,.14))}
body.app-body .aurora-area-path {opacity:.92}
body.app-body .aurora-bar,body.app-body .aurora-hbar {opacity:.92;transition:opacity .18s ease,filter .18s ease;cursor:crosshair}
body.app-body :is(.aurora-bar,.aurora-hbar):hover,body.app-body :is(.aurora-bar,.aurora-hbar):focus {opacity:1;filter:brightness(1.06) drop-shadow(0 3px 7px rgba(69,101,214,.2))}
body.app-body .aurora-bar-track {fill:#edf2fa}
body.app-body .aurora-peak-ring {fill:white;stroke:#5a72ed;stroke-width:2.2}
body.app-body .aurora-peak-core {fill:#5270eb}
body.app-body .aurora-peak-label {fill:#526bc6;font-weight:750;font-size:10px;paint-order:stroke;stroke:#f9fbff;stroke-width:4px;stroke-linejoin:round}
body.app-body .aurora-hover-line {stroke:#9ab0eb;stroke-width:1.2;stroke-dasharray:4 4}
body.app-body .aurora-hover-halo {fill:#5f7ae0;opacity:.15}
body.app-body .aurora-hover-dot {fill:#fff;stroke:#536bea;stroke-width:2.8}
body.app-body .aurora-chart-hit {cursor:crosshair;outline:none}
body.app-body .aurora-data-svg:focus-within .aurora-chart-hit {outline:1px dashed #bac8eb}
body.app-body .aurora-chart-meta {margin-top:14px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
body.app-body .aurora-chart-meta > span {min-width:0;display:grid;gap:2px;padding:9px 11px;border:1px solid #edf1f7;border-radius:10px;background:#fbfcff}
body.app-body .aurora-chart-meta small {color:#98a5b5;font-size:9px;font-weight:650}
body.app-body .aurora-chart-meta b {color:#405679;font-size:12px;font-weight:780;overflow-wrap:anywhere}
body.app-body .aurora-donut-layout {display:grid;grid-template-columns:154px minmax(0,1fr);gap:13px;align-items:center;height:100%;min-width:0}
body.app-body .aurora-donut-svg {width:min(100%,154px);height:auto;max-height:165px;justify-self:center;overflow:visible}
body.app-body .aurora-donut-track {stroke:#eef2fa;stroke-width:17}
body.app-body .aurora-donut-segment {stroke-width:17;stroke-linecap:butt;opacity:.97;cursor:pointer;transition:stroke-width .16s ease,opacity .16s ease}
body.app-body .aurora-donut-segment:hover,body.app-body .aurora-donut-segment.is-active,body.app-body .aurora-donut-segment:focus {stroke-width:21;opacity:1}
body.app-body .aurora-donut-total {fill:#2b3e5e;font-size:20px;font-weight:800;letter-spacing:-.04em}
body.app-body .aurora-donut-caption {fill:#96a2b5;font-size:9px;font-weight:600}
body.app-body .aurora-donut-legend {min-width:0;display:grid;gap:7px}
body.app-body .aurora-donut-legend-row {display:flex;align-items:center;justify-content:space-between;gap:8px;border-radius:8px;padding:6px 8px;min-width:0;color:#64748e;font-size:10px;cursor:default}
body.app-body .aurora-donut-legend-row:hover,body.app-body .aurora-donut-legend-row:focus {background:#f5f8ff}
body.app-body .aurora-donut-legend-row>span {min-width:0;display:flex;gap:8px;align-items:center}
body.app-body .aurora-donut-legend-row i {width:8px;height:8px;flex:0 0 8px;border-radius:99px;background:var(--legend-color)}
body.app-body .aurora-donut-legend-row strong {font-size:10px;color:#425671;white-space:nowrap;font-weight:700}
body.app-body .aurora-chart-tooltip {position:fixed;z-index:160;pointer-events:none;max-width:min(265px,85vw);padding:10px 13px;background:#273853f5;border:1px solid #41567e;border-radius:10px;box-shadow:0 12px 30px rgba(26,44,81,.2);color:#fff;min-width:115px;font-size:11px}
body.app-body .aurora-chart-tooltip .aurora-tip-label {color:#bccded;font-size:10px}
body.app-body .aurora-chart-tooltip .aurora-tip-value {display:block;color:#fff;font-size:13px;font-weight:780;margin-top:3px}
body.app-body .aurora-chart-empty {min-height:190px;height:100%;display:grid;place-items:center;color:#8796ad;font-size:12px;border:1px dashed #e0e8f5;border-radius:11px;background:#fbfcff}
body.app-body .chart-utility {display:flex;gap:6px;margin-left:auto;flex-shrink:0}
body.app-body .chart-utility button {min-height:28px!important;padding:5px 8px!important;font-size:10px!important;border-radius:8px!important;background:#f5f7fc!important;color:#677895!important;border:1px solid #e7ecf6!important;box-shadow:none!important}
body.app-body .chart-utility button:hover {background:#e9efff!important;color:#4460b2!important}
body.app-body .chart-data-panel {max-height:240px;overflow:auto;margin:10px 0 0;border:1px solid #e9eef7;border-radius:10px;scrollbar-width:thin;background:#fff}
body.app-body .chart-data-panel table {width:100%;border-collapse:collapse;font-size:11px}
body.app-body .chart-data-panel :is(th,td) {padding:7px 12px;border-bottom:1px solid #f0f2f7;text-align:left}
body.app-body .chart-data-panel th {background:#f7f9fd;color:#7b8ba2;font-weight:700;position:sticky;top:0}
body.app-body .chart-data-panel td {color:#4d5e79}
body.app-body .chart-data-panel tr:last-child td {border-bottom:0}
body.app-body .chart-grid .chart-card:focus-within {border-color:#cdd8f4!important}
@keyframes v14ChartStroke {from {stroke-dashoffset:var(--aurora-path-length)}to {stroke-dashoffset:0}}
body.app-body .aurora-chart-enter .aurora-trend-path {stroke-dasharray:var(--aurora-path-length);stroke-dashoffset:0;animation:v14ChartStroke .8s var(--v14-ease) both}
@media(prefers-reduced-motion:reduce){body.app-body .aurora-chart-enter .aurora-trend-path{animation:none!important;stroke-dasharray:none!important}}
/* Lightweight data actions shared by line, area, column, donut, and ranking charts. */
body.app-body .v14-chart-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin:0 0 11px;min-height:29px;position:relative;z-index:2}
body.app-body .v14-chart-tool{display:inline-flex;align-items:center;justify-content:center;min-height:27px;padding:5px 10px!important;border:1px solid #e7ebf4!important;border-radius:9px!important;background:#f7f9fd!important;box-shadow:none!important;color:#65758f!important;font:inherit!important;font-size:10px!important;font-weight:690!important;white-space:nowrap;transition:background .2s ease,border-color .2s ease,color .2s ease,transform .2s ease}
body.app-body .v14-chart-tool:hover{background:#edf2ff!important;color:#3f58af!important;border-color:#dce5fc!important;transform:translateY(-1px)}
body.app-body .v14-chart-tool[aria-pressed=true],body.app-body .v14-chart-tool[aria-expanded=true]{background:#edf1ff!important;border-color:#cedafe!important;color:#3e56b1!important}
body.app-body .v14-chart-tool[data-chart-tool=table]{margin-left:auto}
body.app-body .v14-chart-data{min-width:0;padding:2px 0 8px}
body.app-body .v14-chart-data[hidden],body.app-body .chart-host[hidden]{display:none!important}
body.app-body .v14-chart-data-scroll{max-height:290px;overflow:auto;background:#fff;border:1px solid #e6ecf6;border-radius:12px;scrollbar-width:thin;scrollbar-color:#d9e2f1 transparent}
body.app-body .v14-chart-table{width:100%;border-collapse:separate;border-spacing:0;text-align:left;font-size:11px}
body.app-body .v14-chart-table caption{padding:9px 13px;text-align:left;font-size:10px;color:#8999b0;font-weight:670}
body.app-body .v14-chart-table th,body.app-body .v14-chart-table td{padding:9px 13px;border-bottom:1px solid #f0f2f8;white-space:nowrap}
body.app-body .v14-chart-table thead th{position:sticky;top:0;background:#f6f8fc;color:#697b96;font-weight:740}
body.app-body .v14-chart-table tbody th{font-weight:560;color:#63758e}
body.app-body .v14-chart-table td{font-variant-numeric:tabular-nums;text-align:right;color:#2e4569;font-weight:740}
body.app-body .v14-chart-table tr:hover :is(th,td){background:#fafbff}
body.app-body .chart-card.v14-showing-data>.aurora-chart-meta{display:none}
@media(max-width:640px){body.app-body .v14-chart-toolbar{gap:5px}body.app-body .v14-chart-tool{font-size:9px!important;padding:4px 7px!important}body.app-body .v14-chart-tool[data-chart-tool=table]{margin-left:0}}
