/* ==========================================================================
   数据复盘模块：复盘海报生成器 + 笔记数据本地看板
   所有自定义 class 统一 data- 前缀，不污染共享设计系统
   ========================================================================== */

/* ---------------------------------------------------------------- 通用 */
.data-page .tabs {
  margin-bottom: 18px;
}

.data-tabs .tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.data-tabs .tab svg {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
}

.data-panel {
  min-width: 0;
}

.data-inline-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 30px 16px;
  text-align: center;
  color: var(--muted);
  font-size: 12.5px;
  line-height: 1.7;
}

.data-inline-empty svg {
  width: 20px;
  height: 20px;
  color: var(--faint);
}

/* ---------------------------------------------------------------- 海报页 */
.data-poster-form .divider {
  margin: 16px 0 14px;
}

.data-num-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.data-num-grid .field {
  margin: 0;
}

.data-num-grid .field-label {
  font-size: 11.5px;
  margin-bottom: 4px;
}

.data-num-grid .input {
  font-variant-numeric: tabular-nums;
}

.data-form-actions {
  gap: 8px;
}

.data-form-actions .btn {
  flex: 1 1 auto;
}

/* 模板选择 */
.data-tpl-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.data-tpl {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 6px;
  border: 1px solid var(--line-2);
  border-radius: 10px;
  background: #fff;
  min-width: 0;
  text-align: left;
  transition: border-color 0.15s, box-shadow 0.15s;
}

.data-tpl:hover {
  border-color: #c2c5ca;
}

.data-tpl.is-on {
  border-color: var(--brand);
  box-shadow: 0 0 0 2px rgba(255, 46, 77, 0.14);
}

.data-tpl-preview {
  position: relative;
  display: block;
  height: 46px;
  border-radius: 6px;
  overflow: hidden;
  padding: 7px;
  border: 1px solid var(--line);
}

.data-tpl-line {
  display: block;
  height: 3px;
  width: 64%;
  border-radius: 99px;
  background: currentColor;
  opacity: 0.85;
}

.data-tpl-line.is-short {
  width: 40%;
  height: 2px;
  margin-top: 4px;
  opacity: 0.45;
}

.data-tpl-bars {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 14px;
  margin-top: 5px;
}

.data-tpl-bars i {
  display: block;
  flex: 1 1 auto;
  border-radius: 2px 2px 1px 1px;
  background: currentColor;
  opacity: 0.55;
}

.data-tpl-preview.is-minimal .data-tpl-bars i {
  background: #ff2e4d;
  opacity: 0.75;
}

.data-tpl-preview.is-brand .data-tpl-bars i {
  background: #fff;
  opacity: 0.92;
}

.data-tpl-preview.is-dark .data-tpl-bars i {
  background: #ff2e4d;
  opacity: 0.92;
}

.data-tpl-preview.is-minimal {
  background: #fff;
  color: #1f2023;
}

.data-tpl-preview.is-brand {
  background: linear-gradient(150deg, #ff5c72, #d41f38);
  border-color: transparent;
  color: #fff;
}

.data-tpl-preview.is-dark {
  background: linear-gradient(150deg, #1b1d22, #2a2d36);
  border-color: transparent;
  color: #ff7a8c;
}

.data-tpl-name {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ink-2);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.data-tpl.is-on .data-tpl-name {
  color: var(--brand-700);
}

/* 强调色 */
.data-swatches {
  display: flex;
  align-items: center;
  gap: 9px;
  flex-wrap: wrap;
}

.data-swatch {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 2px solid #fff;
  box-shadow: 0 0 0 1px var(--line-2);
  padding: 0;
  transition: transform 0.14s, box-shadow 0.14s;
}

.data-swatch:hover {
  transform: scale(1.06);
}

.data-swatch.is-on {
  box-shadow: 0 0 0 2px var(--ink);
}

/* 预览 */
.data-preview-card {
  padding: 16px;
}

.data-canvas-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  background: #fafafb;
}

.data-canvas {
  display: block;
  width: 100%;
  max-width: 440px;
  height: auto;
  border-radius: 10px;
  background: #fff;
  box-shadow: 0 12px 30px rgba(16, 17, 20, 0.14);
}

.data-preview-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 16px;
  margin-top: 12px;
  font-size: 11.5px;
  color: var(--muted);
}

.data-preview-meta b {
  color: var(--ink-2);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------- 看板 */
.data-kpi-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 12px;
}

/* 基座未给 .kpi-label 内的 svg 定尺寸，这里补上，避免图标撑满卡片 */
.data-kpi-grid .kpi-label {
  white-space: nowrap;
}

.data-kpi-grid .kpi-label svg {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
  color: var(--muted);
}

.data-kpi-grid .kpi-accent .kpi-label svg {
  color: var(--brand);
}

.data-board-split {
  grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
}

.data-filters {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 10px 14px;
}

.data-filter {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.data-filter-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: 0.02em;
}

.data-filter .select {
  min-width: 108px;
}

.data-filter-search {
  flex: 1 1 200px;
  min-width: 160px;
}

.data-filter-search .input {
  padding-left: 30px;
}

.data-search-wrap {
  position: relative;
}

.data-search-wrap > svg {
  position: absolute;
  left: 9px;
  top: 50%;
  transform: translateY(-50%);
  width: 14px;
  height: 14px;
  color: var(--muted);
  pointer-events: none;
}

.data-filters .spacer {
  flex: 1 1 auto;
}

.data-chart {
  min-height: 240px;
}

.data-chart-hint {
  margin-top: 8px;
  font-size: 11.5px;
  color: var(--muted);
  line-height: 1.6;
}

/* 排行 */
.data-rank {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

.data-rank-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 0;
  border-bottom: 1px dashed var(--line);
  min-width: 0;
}

.data-rank-item:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.data-rank-item:first-child {
  padding-top: 2px;
}

.data-rank-no {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  border-radius: 7px;
  display: grid;
  place-items: center;
  font-size: 11.5px;
  font-weight: 700;
  background: #f2f2f4;
  color: var(--sub);
  font-variant-numeric: tabular-nums;
}

.data-rank-no.is-top {
  background: var(--brand-soft);
  color: var(--brand-700);
}

.data-rank-main {
  flex: 1 1 auto;
  min-width: 0;
}

.data-rank-title {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.data-rank-meta {
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.data-rank-val {
  flex: 0 0 auto;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.data-rank-val b {
  display: block;
  font-size: 13.5px;
  font-weight: 700;
  line-height: 1.35;
}

.data-rank-val span {
  font-size: 10.5px;
  color: var(--muted);
}

/* 表格 */
.data-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.data-note {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-top: 12px;
  padding: 9px 12px;
  border: 1px solid var(--line);
  border-radius: var(--r-s);
  background: #fafafb;
  font-size: 12px;
  line-height: 1.6;
  color: var(--sub);
}

.data-note svg {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
  margin-top: 2px;
  color: var(--ok);
}

.data-list {
  margin-top: 12px;
}

.data-cell-title {
  display: block;
  max-width: 300px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.data-cell-date {
  font-variant-numeric: tabular-nums;
  color: var(--sub);
}

.data-cell-tags {
  display: flex;
  align-items: center;
  gap: 4px;
}

.data-num-neg {
  color: var(--bad);
  font-weight: 600;
}

.data-num-pos {
  color: var(--ok);
}

.data-actions {
  display: flex;
  align-items: center;
  gap: 4px;
}

.data-actions .btn {
  color: var(--sub);
}

.data-actions .btn:hover {
  color: var(--ink);
}

.data-actions .btn[data-del]:hover {
  color: var(--bad);
  border-color: var(--bad-line);
  background: var(--bad-soft);
}

/* 弹窗表单 */
.data-form-hint {
  font-size: 11.5px;
  color: var(--muted);
  align-self: center;
}

.data-modal-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.data-modal-grid .field {
  margin: 0;
}

.data-modal-grid .field-label {
  font-size: 11.5px;
  margin-bottom: 4px;
}

.data-modal-grid .input {
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------- 响应式 */
@media (max-width: 1180px) {
  .data-kpi-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (max-width: 1020px) {
  .data-board-split {
    grid-template-columns: minmax(0, 1fr);
  }

  .data-canvas {
    max-width: 400px;
  }
}

@media (max-width: 760px) {
  .data-kpi-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .data-modal-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 560px) {
  .data-kpi-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  .data-kpi-grid .kpi {
    padding: 13px 14px;
  }

  .data-kpi-grid .kpi-value {
    font-size: 22px;
  }

  .data-modal-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .data-tpl-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .data-canvas-wrap {
    padding: 8px;
  }

  .data-form-actions {
    flex-direction: column;
  }

  .data-form-actions .btn {
    width: 100%;
  }
}

@media (max-width: 380px) {
  .data-kpi-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
