/**
 * PVQ-UI Frontend（前端页面）
 * 通用内容组件：callout / quote / prose
 * 依赖：pvq-ui（令牌）
 * 唯一真源：doc/模块文档/设计令牌与组件清单.md §3.4
 * @version 1.0.0
 */

.pvq-callout {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    padding: 16px 18px;
    border-radius: var(--pvq-radius);
    background: var(--pvq-primary-light);
    border: 1px solid rgba(96, 128, 98, 0.12);
    margin: 16px 0;
}
.pvq-callout__icon { color: var(--pvq-primary); font-size: 18px; margin-top: 1px; flex-shrink: 0; }
.pvq-callout__content { font-size: 14px; color: var(--pvq-text); line-height: 1.7; }
.pvq-callout__content :first-child { margin-top: 0; }
.pvq-callout__content :last-child { margin-bottom: 0; }

.pvq-quote {
    margin: 16px 0;
    padding: 14px 20px;
    border-left: 4px solid var(--pvq-primary);
    background: var(--pvq-bg);
    border-radius: 0 var(--pvq-radius) var(--pvq-radius) 0;
    color: var(--pvq-text-secondary);
    font-style: italic;
    line-height: 1.7;
}

.pvq-prose { color: var(--pvq-text); line-height: 1.8; font-size: 15px; }
.pvq-prose p { margin: 0 0 14px; }
.pvq-prose h2, .pvq-prose h3, .pvq-prose h4 { color: var(--pvq-text); margin: 24px 0 12px; }
.pvq-prose a { color: var(--pvq-primary); text-decoration: none; }
.pvq-prose a:hover { text-decoration: underline; }
.pvq-prose code {
    background: var(--pvq-primary-light);
    color: var(--pvq-primary);
    padding: 2px 6px;
    border-radius: 4px;
    font-family: "SF Mono", "Fira Code", monospace;
    font-size: 0.9em;
}
.pvq-prose img { max-width: 100%; height: auto; border-radius: var(--pvq-radius); }
.pvq-prose ul, .pvq-prose ol { padding-left: 22px; margin: 0 0 14px; }
.pvq-prose blockquote { border-left: 3px solid var(--pvq-border); padding-left: 14px; color: var(--pvq-text-muted); margin: 14px 0; }

/* =========================================================
   PVQ-UI Frontend · Wolai 迁移组件（1.2.8 并入，覆盖部署）
   来源：examples/wolai-components-preview.html（提案 → 入库）
   命名 .pvq- 前缀 + BEM；颜色全部走 --pvq-* 令牌
   ========================================================= */

/* ---------- 进度条 Progress ---------- */
.pvq-progress {
  --pvq-progress-accent: var(--pvq-primary, #608062);
  position: relative; height: 10px;
  background: var(--pvq-border, #e4e7ec);
  border-radius: 999px; overflow: hidden; margin: 18px 0;
}
.pvq-progress__fill {
  height: 100%; width: 0;
  background: var(--pvq-progress-accent);
  border-radius: inherit;
  transition: width .45s cubic-bezier(.34,1.56,.64,1);
}
.pvq-progress__text {
  position: absolute; right: 0; top: -20px;
  font-size: 12px; font-weight: 600; color: var(--pvq-text-muted, #8a94a6);
}
.pvq-progress--lg { height: 16px; }
.pvq-progress--danger { --pvq-progress-accent: var(--pvq-danger, #c45454); }

/* ---------- 书签 Bookmark ---------- */
.pvq-bookmark {
  display: flex; align-items: center; gap: 14px;
  margin: 16px 0; padding: 14px;
  border: 1px solid var(--pvq-border, #e4e7ec);
  border-radius: var(--pvq-radius, 12px);
  background: var(--pvq-surface, #fff);
  text-decoration: none; color: inherit;
  transition: var(--pvq-transition, .15s ease);
}
.pvq-bookmark:hover { background: var(--pvq-surface-hover, #f3f5f7); border-color: var(--pvq-border-strong, #cdd2db); }
.pvq-bookmark__image {
  width: 84px; height: 84px;
  background-size: cover; background-position: center;
  border-radius: var(--pvq-radius-sm, 8px); flex-shrink: 0;
}
.pvq-bookmark__content { flex: 1; min-width: 0; }
.pvq-bookmark__url {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 600; color: var(--pvq-primary, #608062);
  margin-bottom: 2px;
}
.pvq-bookmark__favicon { width: 16px; height: 16px; border-radius: 3px; flex-shrink: 0; }
.pvq-bookmark__title { font-size: 15px; font-weight: 600; color: var(--pvq-text, #1f2733); }
.pvq-bookmark__description {
  margin-top: 4px; font-size: 13px; color: var(--pvq-text-muted, #8a94a6);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}


/* ---------- 简单表格 Table（卡片化，对齐 buke.css .pvq-wolai-simple-table） ---------- */
/* 提案令牌：卡片化表格（主题用 !important 覆盖为卡片，现收为库默认观感） */
.pvq-table, .pvq-datagrid__table {
  --pvq-table-radius: var(--pvq-radius-md, 8px);
  --pvq-table-head-bg: var(--pvq-primary, #608062);
  --pvq-table-head-bg-hover: #49684b;
  --pvq-table-cell-bg: color-mix(in srgb, var(--pvq-primary, #608062) 17%, transparent);
  --pvq-table-cell-bg-hover: rgba(96, 128, 98, 0.55);
  --pvq-table-stripe-bg: color-mix(in srgb, var(--pvq-primary, #608062) 28%, transparent);
}
.pvq-table-wrap { overflow-x: auto; }
.pvq-table {
  width: 100%;
  border: none;
  border-collapse: separate;          /* 关键：单元格独立成卡 */
  border-spacing: 0.3em;               /* 单元格间留间隙 */
}
.pvq-table th {
  font-weight: 500;
  color: #fff;
  background: var(--pvq-table-head-bg);
  border: none;
  border-radius: var(--pvq-table-radius);
  white-space: nowrap;
  padding: 0.5em 1em;
  text-align: left;
  transition: transform .2s ease-in-out, box-shadow .2s ease-in-out, background-color .2s ease-in-out;
  cursor: default;
  position: relative;
  z-index: 1;
}
.pvq-table td {
  color: var(--pvq-text, #1f2733);
  background: var(--pvq-table-cell-bg);
  border: none;
  border-radius: var(--pvq-table-radius);
  padding: 0.5em 1em;
  transition: transform .2s ease-in-out, box-shadow .2s ease-in-out, background-color .2s ease-in-out;
  cursor: text;
  position: relative;
  z-index: 1;
}
/* 悬停动效（搬自 buke.css，入库） */
.pvq-table th:hover, .pvq-table td:hover {
  transform: scale(1.01);
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1);
  z-index: 10;
}
.pvq-table td:hover { background-color: var(--pvq-table-cell-bg-hover); }
.pvq-table th:hover { background-color: var(--pvq-table-head-bg-hover); }
/* 斑马纹（卡片语境下成立：偶数行整行单元格换深一档绿底） */
.pvq-table--striped tbody tr:nth-child(even) td { background: var(--pvq-table-stripe-bg); }
/* 列级对齐（卡片语境下仍有效；整表对齐/边框/紧凑等变体已移除——不成立） */
.pvq-table__col--center { text-align: center; }
.pvq-table__col--right { text-align: right; }
/* 标题 */
.pvq-table caption {
  padding: 8px 12px; font-size: 14px; font-weight: 600; color: var(--pvq-text, #1f2733);
  text-align: left; caption-side: top;
}

/* ---------- 数据表格 DataGrid（含工具栏：搜索 / 排序 / 筛选 / 重置） ---------- */
.pvq-datagrid { position: relative; }
.pvq-datagrid__toolbar {
  display: flex; align-items: center; justify-content: flex-end; gap: 8px;
  margin-bottom: 12px;
}
/* 图标按钮：圆角胶囊，自包含（不依赖库 .pvq-btn） */
.pvq-datagrid__btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; padding: 0;
  border: 1px solid var(--pvq-border, #e4e7ec); border-radius: 999px;
  background: var(--pvq-surface, #fff); color: var(--pvq-text, #1f2733);
  font-size: 14px; cursor: pointer; flex-shrink: 0;
  transition: transform .2s cubic-bezier(.34,1.2,.64,1), background .2s, filter .1s, border-color .2s;
}
.pvq-datagrid__btn:hover { background: var(--pvq-surface-hover, #f3f5f7); transform: translateY(-1px); }
.pvq-datagrid__btn:active { transform: scale(.92); filter: brightness(.96); }
.pvq-datagrid__btn--active { background: var(--pvq-primary, #608062); border-color: var(--pvq-primary, #608062); color: #fff; }
/* 激活态:hover/:focus 必须保持绿系（--pvq-primary-hover），否则 :hover 浅灰背景(特异性0,1,1)会盖掉 --active 绿底(0,1,0)致图标变白不可见 */
.pvq-datagrid__btn--active:hover,
.pvq-datagrid__btn--active:focus-visible { background: var(--pvq-primary-hover, #4f6b51); border-color: var(--pvq-primary-hover, #4f6b51); color: #fff; }
.pvq-datagrid__btn--reset.pvq-spin { animation: pvq-dg-spin .6s ease-in-out; }
@keyframes pvq-dg-spin { from { transform: rotate(0); } to { transform: rotate(360deg); } }

/* 搜索/筛选：自包含可展开胶囊——折叠态就是一枚圆按钮，点图标原地长出输入/筛选区
   （对齐 buke.css 意图：图标「变成」搜索框，而非在别处弹出） */
.pvq-datagrid__search, .pvq-datagrid__filter {
  display: inline-flex; align-items: center;
  height: 38px; box-sizing: border-box; flex-shrink: 0;
  width: 38px;                                  /* 折叠：仅容一枚图标 */
  border: 1px solid var(--pvq-border, #e4e7ec); border-radius: 999px;
  background: var(--pvq-surface, #fff);
  transition: width .38s cubic-bezier(.4,0,.2,1), border-color .3s ease, box-shadow .3s ease, background .2s ease;
}
.pvq-datagrid__search { overflow: hidden; }
.pvq-datagrid__filter { overflow: visible; gap: 6px; }   /* 允许下拉菜单溢出 */
.pvq-datagrid__search:not(.pvq-is-open):hover,
.pvq-datagrid__filter:not(.pvq-is-open):hover { background: var(--pvq-surface-hover, #f3f5f7); }
.pvq-datagrid__search.pvq-is-open,
.pvq-datagrid__filter.pvq-is-open {
  border-color: var(--pvq-primary, #608062);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--pvq-primary, #608062) 12%, transparent);
}
.pvq-datagrid__search.pvq-is-open { width: 240px; padding-right: 8px; }
.pvq-datagrid__filter.pvq-is-open { width: 330px; padding: 0 8px 0 0; }

/* 胶囊内的触发图标（透明、无自身边框/底，展开后作前置图标） */
.pvq-datagrid__toggle {
  width: 36px; height: 36px; flex-shrink: 0; padding: 0; border: none; background: transparent;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--pvq-text, #1f2733); font-size: 14px; cursor: pointer;
  transition: color .2s ease, transform .3s ease;
}
.pvq-datagrid__toggle:active { transform: scale(.9); }
.pvq-is-open > .pvq-datagrid__toggle { color: var(--pvq-primary, #608062); }
.pvq-datagrid__filter.pvq-is-open > .pvq-datagrid__toggle--filter { transform: rotate(180deg); }

/* 搜索输入 + 清除 */
.pvq-datagrid__search-input {
  flex: 1; min-width: 0; width: 0; height: 100%;
  border: none; outline: none; background: transparent;
  font-size: 14px; color: var(--pvq-text, #1f2733);
  opacity: 0; transition: opacity .22s ease .08s;
}
.pvq-datagrid__search.pvq-is-open .pvq-datagrid__search-input { opacity: 1; }
.pvq-datagrid__search-input::placeholder { color: var(--pvq-text-muted, #8a94a6); }
.pvq-datagrid__search-clear {
  display: none; width: 22px; height: 22px; padding: 0; border: none; background: none;
  color: var(--pvq-text-muted, #8a94a6); cursor: pointer; flex-shrink: 0;
}
.pvq-datagrid__search.pvq-has-value .pvq-datagrid__search-clear { display: inline-flex; align-items: center; justify-content: center; }
.pvq-datagrid__search-clear:hover { color: var(--pvq-danger, #c45454); }

/* 筛选内的两个下拉：折叠时挤为 0、展开后淡入 */
.pvq-datagrid__filter .pvq-dd { opacity: 0; transition: opacity .22s ease .08s; }
.pvq-datagrid__filter.pvq-is-open .pvq-dd { opacity: 1; }

/* 自绘下拉（筛选用） */
.pvq-dd { position: relative; display: flex; flex: 1; min-width: 0; align-items: center; }
.pvq-dd__trigger {
  display: inline-flex; align-items: center; justify-content: space-between; gap: 6px;
  width: 100%; height: 28px; padding: 0 10px;
  background: var(--pvq-surface-hover, #f3f5f7); border: none; border-radius: 999px;
  font-size: 13px; cursor: pointer; color: var(--pvq-text, #1f2733);
  transition: background .2s;
}
.pvq-dd__trigger:hover { background: color-mix(in srgb, var(--pvq-border, #e4e7ec) 60%, #fff); }
.pvq-dd__text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; text-align: left; }
.pvq-dd__arrow { font-size: 10px; flex-shrink: 0; transition: transform .2s; }
.pvq-dd--open .pvq-dd__arrow { transform: rotate(180deg); }
.pvq-dd__menu {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 1000;
  min-width: 160px; max-height: 260px; overflow-y: auto;
  background: var(--pvq-surface, #fff); border: 1px solid var(--pvq-border, #e4e7ec);
  border-radius: 14px; box-shadow: 0 10px 25px -5px rgba(0,0,0,.12);
  opacity: 0; transform: scaleY(.9) translateY(-8px); transform-origin: top;
  transition: opacity .2s ease, transform .2s ease; pointer-events: none;
}
.pvq-dd--open .pvq-dd__menu { opacity: 1; transform: scaleY(1) translateY(0); pointer-events: auto; }
.pvq-dd__item { padding: 8px 14px; font-size: 13px; cursor: pointer; white-space: nowrap; transition: background .15s; }
.pvq-dd__item:hover { background: var(--pvq-surface-hover, #f3f5f7); }
.pvq-dd__item--muted { color: var(--pvq-text-muted, #8a94a6); cursor: default; }
.pvq-dd__item--muted:hover { background: none; }
.pvq-dd__check { display: flex; align-items: center; gap: 8px; }
.pvq-dd__check input { margin: 0; accent-color: var(--pvq-primary, #608062); cursor: pointer; }

/* 表体（卡片化，与 .pvq-table 一致；th 兼排序触发器） */
.pvq-datagrid__content { position: relative; overflow-x: auto; }
.pvq-datagrid__table {
  width: 100%; border: none;
  border-collapse: separate; border-spacing: 0.3em;
}
.pvq-datagrid__table th {
  font-weight: 500; color: #fff;
  background: var(--pvq-table-head-bg);
  border: none; border-radius: var(--pvq-table-radius);
  white-space: nowrap; padding: 0.5em 1em; text-align: left;
  cursor: pointer; user-select: none; position: relative; z-index: 1;
  transition: transform .2s ease-in-out, box-shadow .2s ease-in-out, background-color .2s ease-in-out;
}
.pvq-datagrid__table td {
  color: var(--pvq-text, #1f2733);
  background: var(--pvq-table-cell-bg);
  border: none; border-radius: var(--pvq-table-radius);
  padding: 0.5em 1em;
  transition: transform .2s ease-in-out, box-shadow .2s ease-in-out, background-color .2s ease-in-out;
  cursor: text; position: relative; z-index: 1;
}
.pvq-datagrid__table th:hover, .pvq-datagrid__table td:hover {
  transform: scale(1.01); box-shadow: 0 1px 5px rgba(0,0,0,0.1); z-index: 10;
}
.pvq-datagrid__table td:hover { background-color: var(--pvq-table-cell-bg-hover); }
.pvq-datagrid__table th:hover { background-color: var(--pvq-table-head-bg-hover); }
.pvq-datagrid__table th.pvq-sort-asc .pvq-sort-icon::after { content: "\2191"; opacity: 1; }
.pvq-datagrid__table th.pvq-sort-desc .pvq-sort-icon::after { content: "\2193"; opacity: 1; }
.pvq-sort-icon { margin-left: 4px; font-size: 12px; color: rgba(255,255,255,0.85); font-family: inherit; line-height: 1; }
.pvq-sort-icon::after { content: "\2195"; opacity: 0.4; }
.pvq-datagrid__table th:hover .pvq-sort-icon::after { opacity: 0.7; }
.pvq-datagrid__empty { padding: 18px; text-align: center; color: var(--pvq-text-muted, #8a94a6); display: none; }
.pvq-datagrid__empty.pvq-is-show { display: block; }
/* 搜索/筛选隐藏行 */
.pvq-search-hidden, .pvq-filter-hidden { display: none; }
/* 列级对齐（卡片语境下仍有效） */
.pvq-datagrid__table .pvq-table__col--center { text-align: center; }
.pvq-datagrid__table .pvq-table__col--right { text-align: right; }
/* 斑马纹（与 .pvq-table 一致） */
.pvq-datagrid__table.pvq-table--striped tbody tr:nth-child(even) td { background: var(--pvq-table-stripe-bg); }

/* ---------- 权重输入框 Weight（v1.2.11 新增，frontend 层） ---------- */
/* 形状归库、颜色归令牌：--pvq-weight-accent 默认主色绿，零硬编码 */
.pvq-weight {
  --pvq-weight-accent: var(--pvq-primary, #608062);
  --pvq-weight-item-bg: var(--pvq-surface-hover, #fafaf8);
  --pvq-weight-item-hover: color-mix(in srgb, var(--pvq-weight-accent, #608062) 6%, var(--pvq-surface, #fff));
  display: block;
}
.pvq-weight__list {
  display: flex; flex-direction: column; gap: 1.25rem;
  margin: 1.8rem 0 2.2rem;
}
.pvq-weight__item {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 0.8rem 1rem;
  padding: 0.6rem 1.2rem 0.6rem 1.5rem;
  border-radius: var(--pvq-radius-pill, 999px);
  background: var(--pvq-weight-item-bg);
  border: 1px solid var(--pvq-border-light, #eaecea);
  box-shadow: 0 4px 8px -4px rgba(30, 42, 31, 0.04);
  transition: background var(--pvq-transition-fast, .15s ease), border-color var(--pvq-transition-fast, .15s ease), box-shadow var(--pvq-transition-fast, .15s ease);
}
.pvq-weight__item:hover {
  background: var(--pvq-weight-item-hover);
  border-color: color-mix(in srgb, var(--pvq-weight-accent, #608062) 30%, #fff);
  box-shadow: 0 8px 16px -8px rgba(30, 42, 31, 0.08);
}
.pvq-weight__label {
  flex: 1 0 80px; font-weight: 500;
  color: var(--pvq-text-strong, #1f3a4b); font-size: 1rem;
  letter-spacing: 0.01em;
  display: flex; align-items: center; gap: 6px;
}
.pvq-weight__badge {
  display: inline-block;
  background: var(--pvq-primary-light, rgba(96, 128, 98, 0.08));
  color: var(--pvq-primary, #608062);
  font-size: 0.65rem; font-weight: 600;
  padding: 0.1rem 0.5rem; border-radius: 30px;
  letter-spacing: 0.02em;
}
.pvq-weight__input-wrap {
  flex: 2 1 140px; min-width: 120px;
  position: relative; display: flex; align-items: center;
}
.pvq-weight__input {
  width: 100%;
  padding: 0.6rem 1rem 0.6rem 1.2rem;
  border-radius: var(--pvq-radius-pill, 999px);
  border: 1px solid var(--pvq-border, #dfe3dc);
  background: var(--pvq-surface, #fff);
  font-size: 0.95rem; font-weight: 500;
  color: var(--pvq-text-strong, #0b1e2b);
  outline: none;
  transition: border-color var(--pvq-transition-fast, .15s ease), box-shadow var(--pvq-transition-fast, .15s ease), background var(--pvq-transition-fast, .15s ease);
  font-feature-settings: "tnum"; letter-spacing: 0.01em; line-height: 1.4;
  appearance: textfield; -moz-appearance: textfield;
}
.pvq-weight__input::-webkit-outer-spin-button,
.pvq-weight__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.pvq-weight__input:focus {
  border-color: var(--pvq-weight-accent, #608062);
  background: var(--pvq-surface, #fff);
  box-shadow: 0 0 0 4px var(--pvq-primary-glow, rgba(96, 128, 98, 0.15));
}
.pvq-weight__input:hover { border-color: color-mix(in srgb, var(--pvq-weight-accent, #608062) 45%, #fff); }
.pvq-weight__unit {
  position: absolute; right: 16px;
  font-size: 0.8rem; font-weight: 500; color: var(--pvq-text-secondary, #5c6b5e);
  pointer-events: none;
  background: var(--pvq-surface-hover, #fafaf8);
  padding: 0.1rem 0.6rem; border-radius: 30px;
}
.pvq-weight__slider-wrap {
  flex: 1 1 100px; min-width: 80px;
  display: flex; align-items: center;
}
.pvq-weight__slider {
  width: 100%; height: 4px;
  -webkit-appearance: none; appearance: none;
  background: var(--pvq-border, #dfe3dc);
  border-radius: 10px; outline: none;
  transition: background 0.15s;
}
.pvq-weight__slider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--pvq-weight-accent, #608062);
  cursor: pointer;
  box-shadow: 0 2px 8px var(--pvq-primary-glow, rgba(96, 128, 98, 0.3));
  border: 2px solid #fff;
  transition: transform 0.08s, background 0.08s;
}
.pvq-weight__slider::-webkit-slider-thumb:hover {
  transform: scale(1.12);
  background: var(--pvq-primary-hover, #4f6b51);
}
.pvq-weight__slider::-moz-range-thumb {
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--pvq-weight-accent, #608062);
  cursor: pointer; border: 2px solid #fff;
  box-shadow: 0 2px 8px var(--pvq-primary-glow, rgba(96, 128, 98, 0.3));
}
.pvq-weight__action {
  display: flex; flex-wrap: wrap;
  justify-content: space-between; align-items: center;
  gap: 1rem 0.8rem;
  margin-top: 0.5rem; padding-top: 1.2rem;
  border-top: 1px solid var(--pvq-border-light, #eaecea);
}
.pvq-weight__total {
  background: var(--pvq-surface-hover, #fafaf8);
  padding: 0.5rem 1.3rem; border-radius: var(--pvq-radius-pill, 999px);
  font-size: 0.95rem; font-weight: 500; color: var(--pvq-text-strong, #1f3a4b);
  border: 1px solid var(--pvq-border-light, #eaecea);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.02);
  display: flex; align-items: center; gap: 0.3rem;
}
.pvq-weight__total-val {
  font-weight: 700; color: var(--pvq-text-strong, #0b1e2b);
  min-width: 2.8rem; text-align: center;
}
/* 胶囊按钮外形（库 .pvq-btn 默认非 pill，这里覆圆角复用库配色） */
.pvq-weight__btn-pill { border-radius: var(--pvq-radius-pill, 999px) !important; }
/* 紧凑变体 */
.pvq-weight--sm .pvq-weight__item { padding: 0.4rem 1rem 0.4rem 1.1rem; gap: 0.5rem 0.8rem; }
.pvq-weight--sm .pvq-weight__input { padding: 0.45rem 0.9rem 0.45rem 1rem; font-size: 0.9rem; }
/* 玻璃拟态变体（需彩色背板才显 blur） */
.pvq-weight--glass {
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}
.pvq-weight--glass .pvq-weight__item {
  background: rgba(255, 255, 255, 0.5);
  border-color: rgba(255, 255, 255, 0.8);
}
.pvq-weight--glass .pvq-weight__item:hover {
  background: rgba(255, 255, 255, 0.75);
}

/* 入场动画（仅 data 驱动表格 / DataGrid；尊重 reduced-motion）
   注意：隐藏初始态仅作用于带 data-pvq-table / data-pvq-datagrid 的容器，
   普通 .pvq-table 不加 data 属性时完全可见，避免 JS 未加载导致内容不可见。 */
.pvq-table-wrap[data-pvq-table],
[data-pvq-datagrid] .pvq-datagrid__content,
[data-pvq-datagrid] .pvq-datagrid__toolbar {
  opacity: 0; transform: scale(.94) translateY(16px);
  transition: opacity .5s ease, transform .5s cubic-bezier(.34,1.56,.64,1);
}
[data-pvq-datagrid] .pvq-datagrid__toolbar { transform: translateY(-8px); }
.pvq-table-wrap[data-pvq-table].pvq-is-visible,
[data-pvq-datagrid] .pvq-datagrid__content.pvq-is-visible,
[data-pvq-datagrid] .pvq-datagrid__toolbar.pvq-is-visible { opacity: 1; transform: none; }

.pvq-table-wrap[data-pvq-table] thead,
[data-pvq-datagrid] .pvq-datagrid__table thead {
  opacity: 0; transform: translateY(-6px);
  transition: opacity .35s ease, transform .35s ease;
}
.pvq-table-wrap[data-pvq-table] thead.pvq-is-visible,
[data-pvq-datagrid] .pvq-datagrid__table thead.pvq-is-visible { opacity: 1; transform: none; }

.pvq-table-wrap[data-pvq-table] tbody tr,
[data-pvq-datagrid] .pvq-datagrid__table tbody tr {
  opacity: 0; transform: scale(.92);
  transition: opacity .35s ease, transform .35s cubic-bezier(.34,1.56,.64,1);
}
.pvq-table-wrap[data-pvq-table] tbody tr.pvq-is-visible,
[data-pvq-datagrid] .pvq-datagrid__table tbody tr.pvq-is-visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .pvq-table-wrap[data-pvq-table],
  [data-pvq-datagrid] .pvq-datagrid__content,
  [data-pvq-datagrid] .pvq-datagrid__toolbar,
  .pvq-table-wrap[data-pvq-table] thead,
  [data-pvq-datagrid] .pvq-datagrid__table thead,
  .pvq-table-wrap[data-pvq-table] tbody tr,
  [data-pvq-datagrid] .pvq-datagrid__table tbody tr {
    opacity: 1 !important; transform: none !important; transition: none !important;
  }
  .pvq-datagrid__btn--reset.pvq-spin { animation: none; }
}
