.cross_table_view {
  background-color: rgba(0, 0, 0, 0);
  font-size: 10px;
  box-sizing: border-box;
  height: 100%;
  z-index: 20;
  position: relative;
  /*padding-left: 10px;*/
  /*padding-top: 10px;*/
}
.cross_table_view a {
  color: inherit;
}
.cross_table_view a.hide {
  display: none;
}
.cross_table_view .toolbar {
  z-index: 20;
}
.cross_table_view .toolbar .info {
  display: flex;
  padding: 0 2px;
  margin: 0;
  color: #333333;
  text-align: left;
}
.cross_table_view .toolbar .info .exportBnt {
  margin-right: 5px;
}
.cross_table_view .toolbar .info .title {
  flex-grow: 1;
}
.cross_table_view .toolbar .info .sub-title {
  font-size: 12px;
  color: #8e8f92;
}
.cross_table_view .table-container {
  z-index: 20;
  overflow: auto;
  position: relative;
}
.cross_table_view .skip-cell {
  display: none;
}
.cross_table_view table {
  /*border-right: @borderStyle;*/
  margin-bottom: 0;
  /*table-layout: fixed;*/
  width: auto;
  border-collapse: separate;
  border-spacing: 0;
  /*font-size: 10px;*/
}
.cross_table_view table td.fix_col {
  z-index: 2;
}
.cross_table_view table td.column_header {
  z-index: 3;
}
.cross_table_view table td.column_header.fix_col {
  z-index: 5;
}
.cross_table_view table td.column_header.sub-fix {
  z-index: 4;
}
.cross_table_view table td.column_header.last {
  border-bottom: 1px solid #d5d5d5;
}
.cross_table_view table tr.sum td.fix_col {
  z-index: 3;
}
.cross_table_view table tr.sum td {
  z-index: 1;
}
.cross_table_view table.no_col_header tr:first-child td {
  border-top: 1px solid #d5d5d5;
}
.cross_table_view table .sort {
  margin-left: 3px;
  cursor: pointer;
  padding: 2px;
}
.cross_table_view table .sort i.fa {
  transform: scale(0.75);
}
.cross_table_view table .sort:hover {
  color: rgba(47, 165, 255, 0.75);
  text-shadow: 0 0 1px #ffffff;
}
.cross_table_view table thead {
  user-select: none;
}
.cross_table_view table thead .value_header {
  cursor: pointer;
}
.cross_table_view table thead .value_header sup i.fa {
  cursor: help;
}
.cross_table_view table thead tr:last-child th,
.cross_table_view table thead tr:last-child td {
  border-bottom: 1px solid #d5d5d5;
}
.cross_table_view table thead sup[comment] {
  cursor: help;
}
.cross_table_view table tbody tr:hover td,
.cross_table_view table tbody tr:hover th {
  background-color: rgba(199, 199, 199, 0.6);
}
.cross_table_view table tbody tr:first-child th,
.cross_table_view table tbody tr:first-child td {
  border-top: none;
}
.cross_table_view table tbody tr:last-child th,
.cross_table_view table tbody tr:last-child td {
  border-bottom: 1px solid #d5d5d5;
}
.cross_table_view table tbody tr th.last,
.cross_table_view table tbody tr td.last {
  border-bottom: 1px solid #d5d5d5;
}
.cross_table_view table td,
.cross_table_view table th {
  position: -webkit-sticky;
  /* for Safari */
  position: sticky;
}
.cross_table_view table td.selected,
.cross_table_view table th.selected {
  background-color: #BFDDF6 !important;
  color: black !important;
}
.cross_table_view table td div.data-wrapper,
.cross_table_view table th div.data-wrapper {
  /*border-left: @borderStyle;*/
  /*border-top: @borderStyle;*/
  /*text-align: right;*/
  /*font-weight: normal;*/
  padding: 3px 8px;
  /*background: white;*/
  align-items: center;
}
.cross_table_view table td.column_header div.data-wrapper,
.cross_table_view table th.column_header div.data-wrapper,
.cross_table_view table td.row_header div.data-wrapper,
.cross_table_view table th.row_header div.data-wrapper,
.cross_table_view table td.value_header div.data-wrapper,
.cross_table_view table th.value_header div.data-wrapper {
  display: flex;
  justify-content: center;
}
.cross_table_view table td.column_header,
.cross_table_view table th.column_header,
.cross_table_view table td.row_header,
.cross_table_view table th.row_header {
  text-align: center;
}
.cross_table_view table td.data div {
  white-space: nowrap;
  text-align: right;
}
.cross_table_view table tr td {
  border-right: 1px solid #d5d5d5;
}
.cross_table_view table tr td.header_empty {
  border-top: 1px solid #d5d5d5;
  z-index: 1;
}
.cross_table_view table tr td.row_header {
  border-top: 1px solid #d5d5d5;
}
.cross_table_view table tr td.col {
  border-top: 1px solid #d5d5d5;
}
.cross_table_view table tr td.all_null {
  background: none;
  border: 0;
}
.cross_table_view table tr td.row_null {
  border-left: 1px solid #d5d5d5;
}
.cross_table_view table tr td.col_null {
  border-left: 0;
  border-top: 1px solid #d5d5d5;
}
.cross_table_view table tr td .header_key {
  font-weight: bold;
}
.cross_table_view table tr th.data,
.cross_table_view table tr td.data,
.cross_table_view table tr th.column_header,
.cross_table_view table tr td.column_header {
  border-right: 1px solid #d5d5d5;
  border-top: 1px solid #d5d5d5;
  text-align: center;
}
.cross_table_view table tr th.column_header.sum_header div,
.cross_table_view table tr td.column_header.sum_header div {
  justify-content: center;
}
.cross_table_view table tr th[nth="0"],
.cross_table_view table tr td:first-child {
  border-left: 1px solid #d5d5d5;
}
.cross_table_view table tr .data-wrapper {
  overflow: hidden;
}
.cross_table_view table tr td.data .data-wrapper {
  position: relative;
}
.cross_table_view table tr td.data .heat-bar {
  position: absolute;
  z-index: -1;
  height: calc(100% - 6px);
}
.cross_table_view table tr td.data.link[data]:not([data='undefined']) {
  text-decoration-line: underline;
}
.cross_table_view table tr td.sum_data,
.cross_table_view table tr td.sub_sum {
  background: rgba(241, 241, 241, 0.44);
}
.cross_table_view table tr td.data.link:hover,
.cross_table_view table tr td .sum_data.link:hover {
  background-color: #999;
  font-weight: bold;
  cursor: pointer;
}
.cross_table_view table .table_drill_cell,
.cross_table_view table .link_header {
  font-weight: bold;
  font-style: italic;
  text-decoration: underline;
  cursor: pointer;
  /*text-decoration-style: dotted;*/
}
.cross_table_view table .table_drill_cell.hover,
.cross_table_view table .link_header.hover {
  background-color: #999;
  color: white !important;
}
.cross_table_view table .table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 20px;
}
.cross_table_view table tfoot th {
  text-align: center;
  font-weight: bold;
  border-top: 1px solid #d5d5d5;
  border-left: 1px solid #d5d5d5;
}
.cross_table_view table tfoot td {
  border-top: 1px solid #d5d5d5;
  border-left: 1px solid #d5d5d5;
}
.cross_table_view .toolbar {
  font-size: 12px;
  margin-bottom: 7px;
  text-align: left;
  /*box-shadow: 1px 1px 5px #ccc;*/
  /*background-color: #F9F9F9;*/
}
.cross_table_view .toolbar .exportBnt {
  background-size: cover;
}
.cross_table_view .footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin: 5px 1px;
  user-select: none;
  top: -8px;
  font-weight: bold;
  font-size: 14px;
  color: #333333;
}
.cross_table_view .footer .tbl-info {
  line-height: 24px;
}
.cross_table_view .footer .optionNum {
  top: 5px;
  white-space: nowrap;
}
.cross_table_view .footer .optionNum select {
  background-color: transparent;
  border-radius: 4px;
  padding: 3px;
  border: 1px solid #999;
}
.cross_table_view .footer .optionNum select option {
  text-align: center;
}
.cross_table_view .footer .page {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  right: 0;
  top: 0;
}
.cross_table_view .footer .page > ul {
  list-style: none;
  display: flex;
  justify-content: space-between;
  flex-flow: nowrap;
  margin: 0;
}
.cross_table_view .footer .page > ul li {
  float: left;
  min-width: 25px;
  line-height: 28px;
  padding: 0 4px;
  cursor: pointer;
  margin-left: 5px;
  background-color: #f4f4f5;
  text-align: center;
  border: none;
  border-radius: 3px;
}
.cross_table_view .footer .page > ul li.current {
  background: #ccc;
}
.cross_table_view .footer .page > ul li.disable {
  color: #C0C4CC;
  cursor: not-allowed;
}
.cross_table_view .footer .page > ul li:hover {
  background-color: #585858 !important;
  color: white !important;
}

.metric-comment {
  cursor: pointer;
}
.view-div .splide {
  height: 100%;
}
.view-div .splide .splide__track {
  height: 100%;
}
.view-div .splide .splide__arrow {
  background: rgba(243, 242, 242, 0.48);
}
.view-div .splide .splide__arrow svg {
  fill: rgba(105, 105, 105, 0.83);
  height: 10px;
  width: 10px;
}
.view-div .splide .splide__arrow:disabled {
  opacity: 0.1;
}
.view-div .splide .splide__pagination__page.is-active {
  background: rgba(105, 105, 105, 0.43);
  transform: scale(1.4);
  z-index: 1;
}
.kpi-wrapper {
  font-size: 14px;
  height: calc(100% - 10px);
  margin: 5px;
}
.kpi-wrapper .widget-title {
  position: absolute;
  width: calc(100% - 10px);
  font-size: 18px;
  font-weight: bold;
  top: 5px;
  left: 5px;
  padding: 5px;
}
.kpi-wrapper .kpi-name {
  font-weight: bold;
}
.kpi-wrapper .kpi-value {
  white-space: nowrap;
}
.kpi-wrapper .kpi-stat .kpi-crr,
.kpi-wrapper .kpi-stat .kpi-yoy {
  margin-right: 5px;
  white-space: nowrap;
}
.kpi-wrapper .tippy {
  cursor: pointer;
}
.kpi-wrapper .group-title {
  font-size: 24px;
  font-weight: bold;
  width: 100%;
}
.kpi-wrapper .multi-metric {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.kpi-wrapper .card-style {
  display: table;
  position: relative;
  height: 100%;
  width: 100%;
  margin-bottom: 0;
  border-radius: 5px;
  color: white;
}
.kpi-wrapper .card-style:first-child {
  margin-left: 0;
}
.kpi-wrapper .card-style:last-child {
  margin-right: 0;
}
.kpi-wrapper .card-style .inner {
  padding: 10px;
  display: table-cell;
  vertical-align: middle;
}
.kpi-wrapper .card-style .inner .kpi-metric {
  font-size: 20px;
  font-weight: bold;
}
.kpi-wrapper .card-style .inner .info-title {
  font-size: medium;
  font-weight: bold;
  width: 100%;
}
.kpi-wrapper .card-style .kpi-icon {
  position: absolute;
  right: 5%;
  top: 50%;
  transform: translateY(-50%);
  font-size: 60px;
  color: rgba(0, 0, 0, 0.15);
}
.kpi-wrapper .card-style .metric-row {
  margin-bottom: 5px;
}
.kpi-wrapper .card-style:hover .kpi-icon {
  font-size: 65px;
}
.kpi-wrapper .plain-style {
  font-family: 'NotoSansSC', 'Microsoft YaHei', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  font-weight: bold;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  flex-grow: 1;
}
.kpi-wrapper .plain-style .icon-part {
  width: 40%;
  height: 30%;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-right: 0;
}
.kpi-wrapper .plain-style .icon-part .icon {
  width: 50px;
  height: 50px;
  border-radius: 100%;
  font-size: 25px;
  color: white;
  background: rgba(129, 185, 226, 0.8);
  display: flex;
  justify-content: center;
  align-items: center;
  flex-shrink: 0;
}
.kpi-wrapper .plain-style .inner {
  flex-grow: 1;
}
.kpi-wrapper .plain-style .inner .main-metric .metric-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-direction: column;
}
.kpi-wrapper .plain-style .inner .metrics {
  gap: 5px;
}
.kpi-wrapper .plain-style .inner .metrics .metric-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-direction: column;
}
.kpi-wrapper .brick-style {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: center;
}
.kpi-wrapper .brick-style .kpi-metric {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.kpi-wrapper .brick-style .kpi-metric .kpi-name {
  position: absolute;
  top: 0;
  transform: translateY(-110%);
  white-space: nowrap;
}
.kpi-wrapper .brick-style .kpi-metric .prefix {
  position: absolute;
  font-size: 30px;
  color: #314252;
  left: 0;
  bottom: 0;
  transform: translateX(-110%);
}
.kpi-wrapper .brick-style .kpi-metric .suffix {
  position: absolute;
  font-size: 30px;
  color: #314252;
  right: 0;
  bottom: 0;
  transform: translateX(110%);
}
.kpi-wrapper .brick-style .kpi-metric .brick {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 60px;
  font-size: 50px;
  margin: 5px;
  border-radius: 5px;
  background: linear-gradient(to right, #314252, #697c8e);
  color: #FEFA8C;
  padding: 0 8px;
}
.kpi-wrapper .brick-style .kpi-metric .char {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 60px;
  font-size: 50px;
  color: #314252;
}
.kpi-wrapper .brick-style .kpi-metric .kpi-stat {
  position: absolute;
  bottom: 0;
  right: 0;
  transform: translateY(110%);
}
.kpi-wrapper .main-sub {
  display: grid;
  grid-template-rows: 1.2fr 1px 1fr;
  grid-template-columns: 1fr;
  height: 100%;
  text-align: center;
  justify-content: center;
  border: 1px solid #dcdfe6;
  border-radius: 5px;
}
.kpi-wrapper .main-sub .main-kpi {
  align-self: center;
  font-size: 18px;
}
.kpi-wrapper .main-sub .main-kpi .main-metric {
  font-weight: bold;
  color: #5490B0;
}
.kpi-wrapper .main-sub .main-kpi .main-stat {
  font-size: 15px;
}
.kpi-wrapper .main-sub .divider {
  height: 1px;
  margin: auto;
  width: 95%;
}
.kpi-wrapper .main-sub .sub-kpi {
  display: flex;
  justify-content: center;
  flex-direction: column;
  height: 100%;
  background: linear-gradient(to right, #c9c9c9, #f5f5f5);
}
.kpi-wrapper .main-sub .sub-kpi .sub-item .metric-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 5px 15px;
}
.kpi-wrapper .main-sub .sub-kpi .sub-item .metric-row .sub-name {
  text-align: right;
  font-weight: bold;
}
.kpi-wrapper .main-sub .sub-kpi .sub-item .metric-row .sub-metric {
  text-align: left;
}
.kpi-wrapper .table-title {
  margin: 10px 5px;
  width: calc(100% - 10px);
}
.kpi-wrapper table {
  margin: 0 5px 5px 5px;
  width: calc(100% - 10px);
  font-size: 16px;
  text-align: center;
  border: 0;
  border-bottom: 1px solid #d5d5d5;
  border-right: 1px solid #d5d5d5;
}
.kpi-wrapper table tr th {
  background: #888888;
  white-space: nowrap;
  color: white;
}
.kpi-wrapper table tr th.header-name {
  text-align: right;
}
.kpi-wrapper table tr th.header-kpi,
.kpi-wrapper table tr th.header-stat {
  text-align: right;
}
.kpi-wrapper table tr th,
.kpi-wrapper table tr td {
  vertical-align: middle;
  border: 0;
  padding: 2px 6px;
  border-left: 1px solid #d5d5d5;
  border-top: 1px solid #d5d5d5;
}
.kpi-wrapper table tr th.info-title,
.kpi-wrapper table tr td.info-title {
  text-align: right;
  font-weight: bold;
}
.kpi-wrapper table tr th.body-kpi,
.kpi-wrapper table tr td.body-kpi,
.kpi-wrapper table tr th.stat-number,
.kpi-wrapper table tr td.stat-number {
  text-align: right;
}
.kpi-wrapper table tr th.kpi-metric,
.kpi-wrapper table tr td.kpi-metric,
.kpi-wrapper table tr th.kpi-stat,
.kpi-wrapper table tr td.kpi-stat {
  text-align: right;
}
.view-div.layout-helper .kpi-box,
.view-div.layout-helper .icon-part,
.view-div.layout-helper .inner,
.view-div.layout-helper .metric-row,
.view-div.layout-helper .main-name,
.view-div.layout-helper .main-metric,
.view-div.layout-helper .main-stat,
.view-div.layout-helper .kpi-name,
.view-div.layout-helper .kpi-metric,
.view-div.layout-helper .kpi-stat,
.view-div.layout-helper .group-title,
.view-div.layout-helper .icon {
  border: rgba(105, 105, 105, 0.25) 1px dashed;
}
.kpi-table {
  display: flex;
  flex-direction: column;
}
.kpi-table .table-container {
  flex-grow: 1;
  display: flex;
}
.kpi-tooltip {
  display: flex;
  justify-content: space-between;
  gap: 20px;
}
.kpi-tooltip label {
  font-weight: bold;
  white-space: nowrap;
}

.view-div .float-menu {
  z-index: 30;
  position: absolute;
  top: 0;
  right: 0;
  display: flex;
}
.view-div .float-menu .drill-up-menu i {
  transform: rotateX(180deg);
}
.view-div .float-menu .fa {
  font-size: 12px;
}
.view-div .float-menu button {
  cursor: pointer;
  visibility: hidden;
  height: 31px;
  background-color: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-left: 5px;
  border: 1px solid rgba(217, 216, 216, 0.5);
  border-radius: 3px;
}
.view-div .float-menu button:hover {
  background-color: rgba(231, 231, 231, 0.34);
  color: #81b9e2;
}
.view-div .float-menu button.active,
.view-div .float-menu button:active {
  background-color: rgba(226, 226, 226, 0.27);
  font-weight: bold;
}
.view-div .play-menu {
  z-index: 30;
  position: absolute;
  right: 10px;
  bottom: 15px;
  display: flex;
}
.view-div .play-menu button {
  border: 1px solid rgba(217, 216, 216, 0.5);
  border-radius: 50%;
  height: 40px;
  width: 40px;
  color: gray;
}
.view-div .play-menu button:hover {
  color: #0e90d2;
  border-color: #0e90d2;
}
.tippy-box[data-theme~='popup-menu'] {
  background-color: black;
  border-radius: 5px;
}
.tippy-box[data-theme~='popup-menu'] .tippy-content {
  padding: 5px 0;
}
ul.link-pop {
  /*background-color: rgba(0, 0, 0, 0.7);*/
  font-size: 12px;
  padding: 0;
  margin: 0;
  box-shadow: none;
  border: none;
}
ul.link-pop li {
  cursor: pointer;
  list-style-type: none;
  padding: 3px 5px;
  margin: 0 !important;
}
ul.link-pop li i {
  color: #2980b9;
  margin-right: 3px;
}
ul.link-pop li:hover {
  background-color: #5e5757;
  color: white;
}
.contextmenu-drilldown .context-menu-item {
  padding: 0.2em 2em;
}
._3d-earth {
  height: 100%;
  width: 100%;
}

.tree-table {
  height: 100%;
  display: flex;
  flex-direction: column;
  padding: 8px 10px;
}
.tree-table .title-row {
  padding: 2px;
  margin-bottom: 5px;
  font-size: 18px;
}
.tree-table .title-row.hidden {
  display: none;
}
.tree-table .table-body {
  width: 100%;
  flex-grow: 1;
}

.maplibre-map {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  /* 1. 给个基础底色，防止白屏闪烁 (JS中会动态覆盖) */
  background-color: #1c1f24;
}
.maplibre-map .maplibregl-canvas-container {
  opacity: 0;
  transition: opacity 0.8s cubic-bezier(0.25, 1, 0.5, 1);
}
.maplibre-map.is-loaded .maplibregl-canvas-container {
  opacity: 1;
}
.maplibre-map::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 80px;
  height: 80px;
  margin-top: -40px;
  margin-left: -40px;
  border: 3px solid rgba(0, 255, 255, 0.1);
  border-top-color: rgba(0, 255, 255, 0.8);
  border-radius: 50%;
  animation: map-spin 1s linear infinite;
  z-index: 1;
  pointer-events: none;
  transition: opacity 0.5s ease;
}
.maplibre-map.is-loaded::before {
  opacity: 0;
  animation: none;
}
.maplibre-map .maplibregl-ctrl-top-right {
  top: 32px;
}
.maplibre-map .map-container {
  height: 100%;
  width: 100%;
  position: relative;
}
.maplibre-map .maplibre-tooltip {
  position: absolute;
  pointer-events: none;
  display: none;
  padding: 10px 15px;
  background: rgba(0, 15, 30, 0.95);
  border: 1px solid #00ffff;
  color: #fff;
  border-radius: 4px;
  z-index: 100;
  transform: translate(20px, 20px);
  font-size: 14px;
  white-space: nowrap;
  transition: left 0.1s ease, top 0.1s ease;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
  font-family: sans-serif;
  line-height: 1;
}
.maplibre-map .maplibre-tooltip .tooltip-title {
  font-weight: bold;
  font-size: 14px;
  margin-bottom: 8px;
  padding-bottom: 6px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  color: #e0e0e0;
}
.maplibre-map .maplibre-tooltip .tooltip-row {
  margin: 7px 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 5px;
}
.maplibre-map .maplibre-tooltip .tooltip-label {
  flex-shrink: 0;
  color: #9e9e9e;
}
.maplibre-map .maplibre-tooltip .tooltip-val {
  color: #00ffff;
  font-size: 14px;
  font-weight: bold;
  display: block;
}
.maplibre-map .roll-btns {
  position: absolute;
  /* 【修改】移除硬编码的 top 和 left，改为底部居中默认值 */
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  transform-origin: top left;
  transition: transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);
  z-index: 10;
  display: flex;
  gap: 8px;
}
.maplibre-map .roll-btns .btn {
  padding: 6px 12px;
  background: rgba(8, 23, 52, 0.85);
  border: 1px solid rgba(0, 255, 255, 0.4);
  color: #fff;
  border-radius: 4px;
  font-size: 13px;
  cursor: pointer;
  backdrop-filter: blur(4px);
  /* 毛玻璃特效，科技感拉满 */
  transition: all 0.3s;
  user-select: none;
}
.maplibre-map .roll-btns .btn:hover {
  background: rgba(0, 255, 255, 0.2);
}
.maplibre-map .roll-btns .btn.update {
  border-color: #00ffff;
  background: rgba(0, 255, 255, 0.15);
  font-weight: bold;
  /* 也可以考虑在这里加一点外发光效果提升层级感 */
  box-shadow: 0 0 8px rgba(0, 255, 255, 0.2);
}
@keyframes map-spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

/**
 * dupont.less
 * 杜邦分析图样式 - 紧凑高密对齐版
 */
/* ================= 核心树容器 ================= */
.dp-tree-container {
  display: flex;
  align-items: flex-start;
  flex-wrap: nowrap;
  padding: 20px;
  width: 100%;
  height: 100%;
  overflow: auto;
}
.dp-tree-container::before,
.dp-tree-container::after {
  content: '';
  margin: auto;
  flex-shrink: 0;
}
/* 🌟 新增：专门用于承载动态缩放的画布容器 */
.dp-tree-canvas {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  flex-shrink: 0;
  /* 绑定由 JS 动态注入的缩放比例与宽高计算 */
  transform: scale(var(--dp-scale, 1));
  transform-origin: center top;
  /* 以顶边中心点进行缩放 */
  /* 核心：根据动态比例实时撑开物理占位，确保外层 container 能正常计算出滚动条 */
}
.dp-group {
  display: flex;
  flex-direction: column;
  align-items: center;
  flex-shrink: 0;
}
.dp-group.collapsed > .dp-children {
  display: none !important;
}
/* ================= 连线拓扑主干 ================= */
.dp-children {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  position: relative;
  padding-top: 32px;
  /* 父节点向下的主干垂直出发线 */
}
.dp-children::before {
  content: '';
  position: absolute;
  top: 4px;
  left: 50%;
  width: 1px;
  height: 29px;
  background-color: #dcdfe6;
}
.dp-branch {
  position: relative;
  padding: 0 16px;
  display: flex;
  flex-direction: column;
  align-items: center;
  /* 横向连线长折线 */
  /* 指标卡片正上方的垂直进入短线 */
}
.dp-branch::before {
  content: '';
  position: absolute;
  top: 0;
  width: 100%;
  border-top: 1px solid #dcdfe6;
  z-index: 1;
}
.dp-branch:first-child::before {
  left: 50%;
  width: 50%;
}
.dp-branch:last-child::before {
  right: 50%;
  width: 50%;
}
.dp-branch:only-child::before {
  display: none;
}
.dp-branch::after {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  width: 1px;
  height: 20px;
  background-color: #dcdfe6;
  z-index: 1;
}
/* ================= 修饰容器 (140px 绝对死锁对齐核心) ================= */
.dp-card-wrapper {
  position: relative;
  width: 140px;
  z-index: 3;
  margin: 20px 10px 0 10px;
}
/* 绝对外挂定位符号流 */
.dp-formula-symbol {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  font-size: 34px;
  font-weight: 400;
  color: #909399;
  font-family: Arial, "Helvetica Neue", sans-serif;
  white-space: nowrap;
  user-select: none;
  z-index: 5;
}
.dp-formula-symbol.prefix {
  right: 100%;
  margin: 0 16px;
}
.dp-formula-symbol.suffix {
  left: 100%;
  margin: 0 5px;
}
/* ================= KPI 指标卡片本体 ================= */
.dp-card {
  background: transparent;
  border: 1px solid #e4e7ed;
  border-top-width: 3px;
  border-top-color: #3498db;
  border-radius: 6px;
  padding: 14px 14px 12px;
  min-height: 64px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  transition: all 0.2s ease;
  position: relative;
}
.dp-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.dp-card .dp-card-title {
  font-size: 12px;
  color: #909399;
  margin-bottom: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dp-card .dp-card-value {
  font-size: 18px;
  font-weight: 700;
  color: #303133;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
}
/* 根节点全局修正 */
.dp-tree-container > .dp-group > .dp-card-wrapper {
  margin-top: 0;
}
/* ================= 环比数据与切换按钮 ================= */
.dp-card-sub {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  line-height: 1;
  padding-top: 6px;
  border-top: 1px dashed #ebeef5;
  margin-top: 8px;
}
.dp-card-sub .sub-name {
  color: #909399;
}
.dp-card-sub .sub-val {
  font-weight: 500;
}
.dp-card-sub .sub-val.up {
  color: #f56c6c;
}
.dp-card-sub .sub-val.down {
  color: #67c23a;
}
.dp-card-sub .kpi-stat {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.dp-toggle {
  position: absolute;
  bottom: -10px;
  left: 50%;
  transform: translateX(-50%);
  width: 18px;
  height: 18px;
  background: transparent;
  border: 1px solid #dcdfe6;
  border-radius: 50%;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 12px;
  z-index: 10;
  color: #909399;
}
.dp-toggle:hover {
  color: #3498db;
  border-color: #3498db;
}
/* 局部树距美学压缩 */
.dp-group > .dp-card-wrapper + .dp-children {
  margin-top: 2px;
}
.dp-group .dp-group > .dp-children {
  padding-top: 28px;
}

.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
