/* ==========================================================================
   表格组件 (Table)
   ========================================================================== */

/* 容器 (支持响应式滚动) */
.zuoekai-table-container {
  width: 100%;
  overflow-x: auto;
  border-radius: var(--zuoekai-radius-lg);
  border: 1px solid var(--zuoekai-color-border);
  background-color: var(--zuoekai-color-surface-panel);
  box-shadow: var(--zuoekai-shadow-sm);
}

/* 嵌套在卡片内时：清除多余边框和阴影，圆角由容器自身定义保留 */
.zuoekai-card .zuoekai-table-container {
  border: none;
  box-shadow: none;
}

/* 基础表格 */
.zuoekai-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  text-align: left;
  color: var(--zuoekai-color-text);
}

/* 表头 */
.zuoekai-table__head {
  background-color: var(--zuoekai-color-surface-page);
  border-bottom: 1px solid var(--zuoekai-color-border-strong);
}

.zuoekai-table__th {
  padding: 12px 16px;
  font-weight: 600;
  color: var(--zuoekai-color-text-secondary);
  white-space: nowrap;
  text-align: left;
}

.zuoekai-table__th--right {
  text-align: right;
}

/* 表体 */
.zuoekai-table__body {
  background-color: var(--zuoekai-color-surface-panel);
}

.zuoekai-table__row {
  border-bottom: 1px solid var(--zuoekai-color-border);
  transition: background-color 0.2s ease;
}

/* 全局隔行条纹：偶数行用 brand-500 6% 透明度，自动跟随主题切换 */
.zuoekai-table__body .zuoekai-table__row:nth-child(even),
.zuoekai-table > tbody > tr:nth-child(even) {
  background-color: color-mix(in srgb, var(--zuoekai-color-brand-500) 6%, transparent);
}

.zuoekai-table__row:last-child {
  border-bottom: none;
}

.zuoekai-table__td {
  padding: 12px 16px;
  vertical-align: middle;
  white-space: nowrap;
}

.zuoekai-table__td--right {
  text-align: right;
}

.zuoekai-table__td--center {
  text-align: center;
}

.zuoekai-table-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  border-top: 1px solid var(--zuoekai-color-border);
  background-color: var(--zuoekai-color-surface-page);
}

.zuoekai-table-footer__left,
.zuoekai-table-footer__right {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.zuoekai-table-footer__label {
  font-size: 13px;
  color: var(--zuoekai-color-text-secondary);
}

.zuoekai-table-footer__value {
  font-weight: 600;
  color: var(--zuoekai-color-text);
}

/* 辅助文本 */
.zuoekai-table__text-secondary {
  color: var(--zuoekai-color-text-secondary);
  font-size: 13px;
}

/* 管理表格：工具栏 */
.zuoekai-table-toolbar {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 16px;
  border-bottom: 1px solid var(--zuoekai-color-border);
  background-color: var(--zuoekai-color-surface-page);
}

.zuoekai-table-toolbar__main,
.zuoekai-table-toolbar__actions {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.zuoekai-table-toolbar__main {
  flex: 1 1 auto;
  min-width: 0;
}

.zuoekai-table-toolbar__actions {
  justify-content: flex-end;
  flex: 0 0 auto;
}

.zuoekai-table-toolbar__title {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--zuoekai-color-text);
}

.zuoekai-table-toolbar__desc {
  margin: 0;
  font-size: 13px;
  color: var(--zuoekai-color-text-secondary);
}

.zuoekai-table-toolbar__meta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* 管理表格：空态 */
.zuoekai-table-empty {
  padding: 28px 16px;
  text-align: center;
}

.zuoekai-table-empty__title {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--zuoekai-color-text);
}

.zuoekai-table-empty__desc {
  margin: 6px 0 0;
  font-size: 13px;
  color: var(--zuoekai-color-text-secondary);
}

/* 管理表格：状态单元格 */
.zuoekai-table__cell--status {
  white-space: nowrap;
}

.zuoekai-table__cell--status .zuoekai-tag {
  vertical-align: middle;
}

/* 宽度控制 */
.zuoekai-table__cell--checkbox { width: 48px; text-align: center; }
.zuoekai-table__cell--actions { width: 1%; white-space: nowrap; text-align: right; }
.zuoekai-table__cell--empty { text-align: center; }

@media (max-width: 640px) {
  .zuoekai-table-toolbar {
    flex-direction: column;
    align-items: stretch;
  }

  .zuoekai-table-toolbar__actions {
    justify-content: flex-start;
  }
}

/* ==========================================================================
   变体 (Variants)
   ========================================================================== */

/* 条纹行 (Striped) */
.zuoekai-table--striped .zuoekai-table__row:nth-child(even) {
  background-color: var(--zuoekai-color-surface-page);
}

/* 悬停高亮 (Hover) */
.zuoekai-table--hover .zuoekai-table__row:hover {
  background-color: var(--zuoekai-color-action-hover-bg);
}

/* 紧凑模式 (Compact) */
.zuoekai-table--sm .zuoekai-table__th,
.zuoekai-table--sm .zuoekai-table__td {
  padding: 8px 12px;
  font-size: 13px;
}

/* 无边框模式 (Borderless) */
.zuoekai-table--borderless .zuoekai-table__row {
  border-bottom: none;
}
.zuoekai-table-container.zuoekai-table--borderless {
  border: none;
  box-shadow: none;
}

/* 垂直对齐 */
.zuoekai-table__td--top { vertical-align: top; }
.zuoekai-table__td--bottom { vertical-align: bottom; }

/* ==========================================================================
   语义化 HTML 兼容 (Semantic HTML Fallback)
   当直接使用 <table class="zuoekai-table"> + 原生 thead/tbody/tr/th/td 时，
   无需逐个添加 BEM 类名也能获得一致的基础样式。
   ========================================================================== */

/* 表头：原生 thead */
.zuoekai-table > thead {
  background-color: var(--zuoekai-color-surface-page);
  border-bottom: 1px solid var(--zuoekai-color-border-strong);
}

/* 表头单元格：原生 th（排除已有 BEM 类的情况） */
.zuoekai-table > thead > tr > th {
  padding: 12px 16px;
  font-weight: 600;
  color: var(--zuoekai-color-text-secondary);
  white-space: nowrap;
  text-align: left;
}

/* 表体：原生 tbody */
.zuoekai-table > tbody {
  background-color: var(--zuoekai-color-surface-panel);
}

/* 表体行：原生 tr */
.zuoekai-table > tbody > tr {
  border-bottom: 1px solid var(--zuoekai-color-border);
  transition: background-color 0.2s ease;
}

.zuoekai-table > tbody > tr:last-child {
  border-bottom: none;
}

/* 表体单元格：原生 td */
.zuoekai-table > tbody > tr > td {
  padding: 12px 16px;
  vertical-align: middle;
}

/* 紧凑模式：语义化 HTML 版本 */
.zuoekai-table--sm > thead > tr > th,
.zuoekai-table--sm > tbody > tr > td {
  padding: 8px 12px;
  font-size: 13px;
}

/* 条纹行：语义化 HTML 版本 */
.zuoekai-table--striped > tbody > tr:nth-child(even) {
  background-color: var(--zuoekai-color-surface-page);
}

/* 悬停高亮：语义化 HTML 版本 */
.zuoekai-table--hover > tbody > tr:hover {
  background-color: var(--zuoekai-color-action-hover-bg);
}

/* 无边框：语义化 HTML 版本 */
.zuoekai-table--borderless > tbody > tr {
  border-bottom: none;
}

/* ==========================================================================
   排序分支 (Sortable)
   用法：在 <th> 上添加 data-sort-key="字段名" 即可激活排序行为；
   ZuoekaiTable.init() 负责管理状态类，业务代码监听 zuoekai:tableSort 事件。
   ========================================================================== */

/* 可排序列头基础态 */
.zuoekai-table__th--sortable,
.zuoekai-table > thead > tr > th[data-sort-key] {
  cursor: pointer;
  user-select: none;
  position: relative;
  padding-right: 28px; /* 为图标留出空间 */
  transition: color 0.15s ease, background-color 0.15s ease;
}

.zuoekai-table__th--sortable:hover,
.zuoekai-table > thead > tr > th[data-sort-key]:hover {
  color: var(--zuoekai-color-text);
  background-color: var(--zuoekai-color-action-hover-bg);
}

/* 排序图标容器（伪元素承载 SVG 替代方案：使用内联 background-image） */
.zuoekai-table__th--sortable::after,
.zuoekai-table > thead > tr > th[data-sort-key]::after {
  content: '';
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  width: 14px;
  height: 14px;
  opacity: 0.35;
  /* 默认：双向箭头（未排序） */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%236b7280' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M7 16V4m0 0L3 8m4-4l4 4M17 8v12m0 0l4-4m-4 4l-4-4'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-size: contain;
  transition: opacity 0.15s ease;
}

/* 激活排序时图标变实 */
.zuoekai-table__th--sort-asc::after,
.zuoekai-table__th--sort-desc::after,
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='asc']::after,
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='desc']::after {
  opacity: 1;
}

/* 升序：向上箭头 */
.zuoekai-table__th--sort-asc::after,
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='asc']::after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%233b82f6' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M5 15l7-7 7 7'/%3E%3C/svg%3E");
}

/* 降序：向下箭头 */
.zuoekai-table__th--sort-desc::after,
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='desc']::after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%233b82f6' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'/%3E%3C/svg%3E");
}

/* 激活列头文字颜色加深 */
.zuoekai-table__th--sort-asc,
.zuoekai-table__th--sort-desc,
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='asc'],
.zuoekai-table > thead > tr > th[data-sort-key][data-sort-dir='desc'] {
  color: var(--zuoekai-color-brand-500, #3b82f6);
}
