/* Page-specific layout helpers layered on top of the glass design system. */

.muted { color: var(--text-2); }
.tiny { font-size: var(--font-size-2xs); }
.right { text-align: right; }
.center { text-align: center; }
.flex { display: flex; }
.between { display: flex; justify-content: space-between; align-items: center; }
.gap8 { gap: var(--space-8); }
.gap12 { gap: var(--space-12); }
.wrap { flex-wrap: wrap; }

/* Home hero */
/* v63：.hero 已无调用方（首页使用 home-hero，产品页使用 pd-hero），连同蓝紫渐变一并移除 */
.hero .h-user { font-size: 18px; font-weight: 800; }
.hero .h-dept { font-size: var(--font-size-sm); color: var(--text-2); margin-top: 2px; }
.hero .h-range {
  display: inline-flex; align-items: center; gap: var(--space-4);
  margin-top: 10px; font-size: var(--font-size-xs); color: var(--primary);
  background: var(--glass-strong); padding: 5px 10px; border-radius: 999px;
}
.alert-banner {
  display: flex; align-items: center; gap: var(--space-10);
  padding: 11px 13px; border-radius: var(--radius-lg); margin-bottom: 12px;
  background: var(--danger-soft); color: var(--danger); font-size: var(--font-size-md); font-weight: var(--font-weight-semibold);
}
.alert-banner.warn { background: var(--warning-soft); color: #b9770a; }

/* Quick actions — 统一玻璃容器 + 业务低饱和强调色 */
.quick-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: var(--space-8); }
.quick {
  display: flex; flex-direction: column; align-items: center; gap: var(--space-8);
  padding: var(--space-12) 2px 10px; border-radius: var(--radius-lg); cursor: pointer;
  transition: transform var(--motion-duration-fast) var(--ease-standard);
}
.quick .qi {
  width: 52px; height: 52px; border-radius: var(--radius-xl);
  display: grid; place-items: center; line-height: 1;
  background: var(--glass-input); border: 1px solid var(--glass-border);
  box-shadow: var(--shadow-sm);
  transition: transform var(--motion-duration-fast) var(--ease-standard), box-shadow var(--motion-duration-fast) var(--ease-standard), background-color var(--motion-duration-fast) var(--ease-standard);
}
.quick .qi svg { display: block; }
/* 业务强调色（低饱和：10% 底 + 饱和图标色） */
.quick .qi--blue   { color: #1677ff; background: rgba(22, 119, 255, 0.1);  border-color: rgba(22, 119, 255, 0.18); }
.quick .qi--purple { color: #6366f1; background: rgba(99, 102, 241, 0.1);  border-color: rgba(99, 102, 241, 0.18); }
.quick .qi--cyan   { color: #0891b2; background: rgba(8, 145, 178, 0.1);   border-color: rgba(8, 145, 178, 0.18); }
.quick .qi--green  { color: #16a34a; background: rgba(22, 163, 74, 0.1);   border-color: rgba(22, 163, 74, 0.18); }
.quick .qi--orange { color: #d97706; background: rgba(217, 119, 6, 0.1);   border-color: rgba(217, 119, 6, 0.18); }
.quick .ql { font-size: 11px; color: var(--text-2); }
/* 按压反馈：轻微缩放 + 高亮 */
.quick:active { transform: scale(0.95); }
.quick:active .qi { transform: scale(1.04); box-shadow: 0 4px 14px rgba(31, 38, 135, 0.16); }

/* Supplier/Product card grid */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-12); }
.pcard {
  padding: 13px; border-radius: var(--radius); cursor: pointer;
  background: var(--glass); border: 1px solid var(--glass-border); box-shadow: var(--shadow-sm);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
}
.pcard .pc-name { font-weight: var(--font-weight-bold); font-size: var(--font-size-base); }
.pcard .pc-meta { font-size: var(--font-size-xs); color: var(--text-2); margin-top: 4px; }
.pcard .pc-price { font-weight: 800; font-size: 16px; margin-top: 8px; }
.pcard .pc-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 8px; }

/* Comparison table */
.cmp-table { width: 100%; border-collapse: collapse; font-size: var(--font-size-sm); }
.cmp-table th, .cmp-table td { padding: 9px 8px; text-align: center; border-bottom: 1px solid rgba(0,0,0,0.05); }
.cmp-table th { color: var(--text-2); font-weight: var(--font-weight-semibold); }
.cmp-table td.lab { text-align: left; color: var(--text-2); }
.cmp-table .best { color: var(--success); font-weight: 800; }
.cmp-table .low { color: var(--danger); font-weight: 800; }
.cmp-scroll { overflow-x: auto; }

/* Profit detail item */
.pitem { padding: var(--space-12); border-radius: var(--radius-lg); background: var(--glass-input); border: 1px solid var(--glass-border); margin-bottom: 10px; }
.pitem .pi-top { display: flex; justify-content: space-between; align-items: center; }
.pitem .pi-name { font-weight: var(--font-weight-bold); font-size: var(--font-size-base); }
.pitem .pi-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-8); margin-top: 8px; }
.pitem .pi-grid .field { margin-bottom: 0; }

/* Compare scheme columns */
.scheme-compare { display: grid; gap: var(--space-12); }
.sc-col { padding: 14px; border-radius: var(--radius); background: var(--glass); border: 1px solid var(--glass-border); box-shadow: var(--shadow-sm); }
.sc-col.best { border-color: var(--success); box-shadow: 0 8px 30px var(--success-soft); }
.sc-col .sc-name { font-weight: 800; font-size: 16px; display: flex; justify-content: space-between; align-items: center; }
.sc-big { font-size: 24px; font-weight: 800; margin: 8px 0 2px; letter-spacing: -0.5px; }
.sc-row { display: flex; justify-content: space-between; font-size: var(--font-size-md); padding: var(--space-6) 0; border-bottom: 1px dashed rgba(0,0,0,0.06); }
.sc-row .k { color: var(--text-2); }
.diff-pill { font-size: 11px; padding: 2px 7px; border-radius: var(--radius-xs); font-weight: var(--font-weight-bold); }
.diff-pill.up { background: var(--success-soft); color: var(--success); }
.diff-pill.down { background: var(--danger-soft); color: var(--danger); }

/* Page header inside content */
.page-head { display: flex; align-items: center; gap: var(--space-10); margin-bottom: 12px; }
.page-head .back { font-size: 22px; cursor: pointer; color: var(--text); width: 34px; height: 34px; display: grid; place-items: center; border-radius: var(--radius-md); background: var(--glass-input); }
.page-head .ph-title { font-size: 18px; font-weight: 800; }

/* Tabs */
.tabs { display: flex; gap: var(--space-6); margin-bottom: 12px; }
.tab { padding: var(--space-8) 13px; border-radius: var(--radius-lg); font-size: var(--font-size-md); font-weight: var(--font-weight-semibold); color: var(--text-2); background: var(--glass-input); border: 1px solid var(--glass-border); cursor: pointer; }
.tab.active { background: var(--primary); color: #fff; border-color: var(--primary); }

/* Misc */
.divider { height: 1px; background: rgba(0,0,0,0.06); margin: 12px 0; }
.pill { display: inline-block; padding: 2px 8px; border-radius: var(--radius-xs); font-size: 11px; background: var(--primary-soft); color: var(--primary); }
.list-empty-hint { font-size: var(--font-size-sm); color: var(--text-3); padding: var(--space-8) 2px; }
.checkbox { width: 20px; height: 20px; border-radius: var(--radius-xs); border: 2px solid var(--text-3); display: grid; place-items: center; cursor: pointer; color: #fff; font-size: var(--font-size-md); }
.checkbox.on { background: var(--primary); border-color: var(--primary); }

/* ---------- Click feedback ---------- */
.card.clickable:active, .pcard:active, .row.clickable:active, .sc-col:active {
  transform: scale(0.985);
  transition: transform var(--motion-duration-fast) var(--ease-standard);
}

/* ---------- Filter bar (compact, scrollable) ---------- */
.filter-bar {
  display: flex;
  flex-wrap: wrap;   /* v80n P1-03：筛选钮可换行，390px 全部可见（原横滑+隐藏滚动条=裁切不可发现） */
  gap: var(--space-8);
  overflow-x: auto;
  padding: 2px 0 8px;
}
.filter-bar::-webkit-scrollbar { display: none; }
.filter-btn {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-8) var(--space-12);
  border-radius: var(--radius-lg);
  background: var(--glass-input);
  border: 1px solid var(--glass-border);
  color: var(--text-2);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  cursor: pointer;
  font-family: inherit;
}
.filter-btn .chev { color: var(--text-3); display: inline-flex; }
.filter-btn.active { background: var(--primary-soft); color: var(--text-primary); border-color: var(--border-strong); }
.filter-btn:active { transform: scale(0.96); }

/* Active filter tags (removable) */
.tag-row { display: flex; gap: var(--space-8); flex-wrap: wrap; padding: 2px 0 8px; }
.active-tag {
  display: inline-flex; align-items: center; gap: var(--space-6);
  padding: 5px 8px 5px 11px; border-radius: 999px;
  background: var(--primary-soft); color: var(--primary); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold);
}
.active-tag .at-x { cursor: pointer; display: inline-flex; color: var(--primary); opacity: .7; }
.active-tag .at-x:hover { opacity: 1; }

/* Sheet (bottom drawer) */
.sheet { border-radius: 24px 24px 0 0; padding-bottom: calc(16px + env(safe-area-inset-bottom, 0px)); }
.sheet-actions { display: flex; gap: var(--space-10); margin-top: 16px; }
.chip-grid { display: flex; flex-wrap: wrap; gap: var(--space-8); }
.chip-grid .chip { padding: var(--space-8) 14px; }

/* Home range picker: grouped choices, explicit outcome and usable custom dates. */
.home-range-picker { display: grid; gap: var(--space-16); }
.home-range-help { margin: 0; color: var(--text-2); font-size: var(--font-size-sm); line-height: 1.6; }
.home-range-groups { display: grid; gap: var(--space-14); }
.home-range-group { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: var(--space-12); align-items: start; }
.home-range-group__label { padding-top: 9px; color: var(--text-2); font-size: var(--font-size-sm); }
.home-range-group__options { display: flex; flex-wrap: wrap; gap: var(--space-8); }
.home-range-option { min-height: 38px; padding: 7px 14px; border: 1px solid var(--border-default); border-radius: var(--radius-sm); background: var(--bg-surface); color: var(--text-2); font: inherit; cursor: pointer; }
.home-range-option:hover { background: var(--bg-surface-hover); color: var(--text); }
.home-range-option.active { border-color: var(--border-strong); background: var(--bg-surface-active); color: var(--text); font-weight: var(--font-weight-semibold); box-shadow: inset 0 0 0 1px var(--border-strong); }
.home-range-custom { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: var(--space-10); align-items: end; padding-top: var(--space-4); }
.home-range-custom .field { margin: 0; }
.home-range-custom__to { padding-bottom: 11px; color: var(--text-2); }
.home-range-summary { display: flex; align-items: center; justify-content: space-between; gap: var(--space-12); padding: 12px 14px; border-radius: var(--radius-sm); background: var(--bg-surface-hover); }
.home-range-summary__label { color: var(--text-2); font-size: var(--font-size-sm); }
.home-range-summary strong { text-align: right; font-size: var(--font-size-sm); }
@media (max-width: 767px) {
  .home-range-group { grid-template-columns: 1fr; gap: var(--space-6); }
  .home-range-group__label { padding-top: 0; }
  .home-range-group__options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .home-range-option { width: 100%; }
  .home-range-custom { grid-template-columns: 1fr; }
  .home-range-custom__to { display: none; }
  .home-range-summary { align-items: flex-start; flex-direction: column; }
  .home-range-summary strong { text-align: left; }
}

.confirm-body { font-size: var(--font-size-base); color: var(--text); line-height: 1.55; padding: var(--space-4) 0; }

/* ---------- Product card thumbnail：统一 1:1 图片区域 ---------- */
.pc-thumb {
  width: 100%;
  aspect-ratio: 1 / 1;
  height: auto;
  object-fit: cover;
  border-radius: var(--radius-lg);
  background: #eef0f4;
  display: block;
  margin-bottom: 8px;
}
.pc-code { font-size: 10.5px; color: var(--text-3); letter-spacing: .3px; }
.pc-line { display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--text-2); margin-top: 3px; }
.pc-line b { color: var(--text); font-weight: var(--font-weight-semibold); }

/* ---------- Flat supplier list (less glass stacking) ---------- */
.list-flat {
  border-radius: var(--radius);
  background: var(--glass);
  border: 1px solid var(--glass-border);
  box-shadow: var(--shadow-sm);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
  overflow: hidden;
}
.list-flat .row { padding: 14px 14px; margin: 0; cursor: pointer; }
.list-flat .row:active { background: var(--bg-surface-active); }

/* ---------- Comparison risk / best highlights ---------- */
.cmp-table .risk { color: var(--danger); font-weight: var(--font-weight-bold); }
.cmp-table .best { color: var(--success); font-weight: 800; }
.cmp-table .best-price { color: #0b9e8a; font-weight: 800; }
.cmp-banner {
  padding: var(--space-10) var(--space-12); border-radius: var(--radius-lg); margin-bottom: 10px;
  background: var(--warning-soft); color: #b9770a; font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold);
}

/* ---------- Reconciliation panel ---------- */
.recon { border-radius: var(--radius-lg); padding: var(--space-12) 14px; margin-top: 10px; }
.recon.ok { background: var(--success-soft); color: var(--success); }
.recon.bad { background: var(--danger-soft); color: var(--danger); }
.recon .r-row { display: flex; justify-content: space-between; font-size: var(--font-size-sm); padding: 3px 0; }
.recon .r-row b { font-weight: var(--font-weight-bold); }

/* ---------- Inline form error ---------- */
.field-error { color: var(--danger); font-size: var(--font-size-2xs); margin-top: 4px; }
.input.invalid { border-color: var(--danger); box-shadow: 0 0 0 3px var(--danger-soft); }

/* ---------- LISHI 品牌位 ---------- */
.brand-logo { user-select: none; -webkit-user-drag: none; }
.h-brand { margin-bottom: 14px; }
.mine-brand { padding: var(--space-8) var(--space-4) 14px; }
.about-brand { padding: var(--space-6) 0 12px; }

/* ---------- 启动页 ---------- */
.splash {
  position: fixed; inset: 0; z-index: 200;
  display: grid; place-items: center; overflow: hidden; isolation: isolate;
  background: #f4f6fa;
  transition: opacity 420ms cubic-bezier(.22,.72,.24,1), visibility 420ms linear;
}
.splash::before {
  content: ''; position: absolute; z-index: -1; width: min(76vw, 760px); aspect-ratio: 1;
  left: 50%; top: 50%; border-radius: 50%; transform: translate(-50%, -50%);
  background: radial-gradient(circle, rgba(183, 157, 101, .12) 0%, rgba(183, 157, 101, .045) 38%, transparent 70%);
  animation: splash-halo 4.6s ease-in-out infinite;
}
.splash.hide { opacity: 0; visibility: hidden; pointer-events: none; }
.splash-content {
  width: min(calc(100% - 40px), 360px); padding: 28px 20px; display: flex; flex-direction: column;
  align-items: center; text-align: center; animation: splash-arrive 680ms cubic-bezier(.2,.72,.2,1) both;
}
.splash-logo { width: clamp(96px, 9vw, 104px); height: auto; display: block; filter: drop-shadow(0 4px 11px rgba(31, 30, 29, .07)); }
.splash-name { margin-top: 16px; font-size: 14px; line-height: 1.5; font-weight: var(--font-weight-semibold); color: var(--text); letter-spacing: .7px; }
.splash-sub { margin-top: 2px; font-size: 8.5px; line-height: 1.6; color: var(--text-3); letter-spacing: .65px; }
.splash-track {
  width: 132px; height: 2px; margin-top: 29px; overflow: hidden; border-radius: 999px;
  background: color-mix(in srgb, var(--text-primary) 9%, transparent);
}
.splash-track span {
  display: block; width: 38%; height: 100%; border-radius: inherit;
  background: linear-gradient(90deg, transparent, #b79d65 45%, #d2c49f 75%, transparent);
  animation: splash-progress 1.55s cubic-bezier(.45,0,.55,1) infinite;
}
.splash-loading { display: flex; align-items: center; gap: 9px; margin-top: 15px; color: var(--text-secondary); font-size: 12px; line-height: 1.5; letter-spacing: .15px; }
.splash-loading-dot { width: 6px; height: 6px; flex: 0 0 6px; border-radius: 50%; background: #b79d65; animation: splash-pulse 1.6s ease-in-out infinite; }
.splash-footer { position: absolute; bottom: max(22px, env(safe-area-inset-bottom)); color: var(--text-tertiary); font-size: 10px; letter-spacing: .7px; }
@keyframes splash-arrive { from { opacity: 0; transform: translateY(9px); } to { opacity: 1; transform: translateY(0); } }
@keyframes splash-halo { 0%, 100% { opacity: .62; transform: translate(-50%, -50%) scale(.94); } 50% { opacity: 1; transform: translate(-50%, -50%) scale(1.04); } }
@keyframes splash-progress { from { transform: translateX(-140%); } to { transform: translateX(390%); } }
@keyframes splash-pulse { 0%, 100% { opacity: .45; scale: .82; } 50% { opacity: 1; scale: 1.16; } }
@media (prefers-reduced-motion: reduce) {
  .splash::before, .splash-content, .splash-track span, .splash-loading-dot { animation: none !important; }
  .splash-track span { width: 54%; margin-inline: auto; opacity: .65; }
  .splash, .splash.hide { transition-duration: 1ms; }
}

/* ---------- 钉钉身份初始化页（演示） ---------- */
/* v27：wrap 加水平留白（375px 下卡片居中、左右对称，杜绝偏右裁切） */

/* ============================ Desktop / responsive ============================ */
.d-page .metric-grid { grid-template-columns: repeat(6, 1fr); }
.d-page .grid-2 { grid-template-columns: repeat(2, 1fr); }
/* 12-col cockpit grid utility */
.cockpit { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--space-12); }
.cockpit > .col-8 { grid-column: span 8; }
.cockpit > .col-4 { grid-column: span 4; }
.cockpit > .col-6 { grid-column: span 6; }
.cockpit > .col-12 { grid-column: span 12; }
@media (max-width: 1199px) {
  .d-page .metric-grid { grid-template-columns: repeat(3, 1fr); }
  .cockpit > .col-8, .cockpit > .col-4, .cockpit > .col-6 { grid-column: span 12; }
}

/* Data table
   v63：基础 .data-tbl 只定义通用视觉，不再默认定宽；
       宽表业务宽度由修饰类 .data-tbl--wide（min-width:1080px）显式声明。 */
.tbl-wrap { width: 100%; overflow-x: auto; border-radius: var(--radius-lg); border: 1px solid var(--glass-border); background: var(--glass); }
.data-tbl { width: 100%; border-collapse: collapse; font-size: var(--font-size-md); }
.data-tbl--wide { min-width: 1080px; }
.data-tbl thead th { text-align: left; padding: var(--space-10) var(--space-12); font-weight: var(--font-weight-semibold); color: var(--text-2); background: var(--bg-surface-subtle); white-space: nowrap; border-bottom: 1px solid var(--glass-border); }
.data-tbl tbody td { padding: var(--space-10) var(--space-12); border-bottom: 1px solid rgba(0,0,0,0.05); vertical-align: middle; }
.data-tbl tbody tr:hover { background: var(--bg-surface-hover); }
.data-tbl tbody tr:last-child td { border-bottom: none; }
.data-tbl td.del { color: var(--danger); text-decoration: line-through; }
.data-tbl td.ins { color: var(--success); font-weight: var(--font-weight-semibold); }
.log-row { cursor: pointer; }

/* Extra tag tones for log center */
.tag--active { background: var(--primary-soft); color: var(--primary); }
.tag--pending { background: var(--warning-soft); color: #b9770a; }
.tag--confirmed { background: var(--success-soft); color: var(--success); }
.tag--eliminated { background: var(--danger-soft); color: var(--danger); }
.tag--archived { background: rgba(120,120,128,0.14); color: #6e6e73; }
.chip--ghost { background: transparent; border: 1px dashed var(--glass-border); color: var(--text-2); }

/* Data scope badge (home) */
.scope-badge { display: inline-flex; align-items: center; gap: var(--space-6); padding: var(--space-4) var(--space-10); border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); }

/* Desktop profit two-column */
@media (min-width: 768px) {
  .profit-edit-grid { display: grid; grid-template-columns: 1fr 360px; gap: var(--space-16); align-items: start; }
  .profit-edit-grid > .pe-sticky { position: sticky; top: calc(var(--topbar-h) + 16px); }
}

/* Home hero: data scope + time range */
.h-scope-row { display: flex; align-items: center; gap: var(--space-8); flex-wrap: wrap; margin-top: 12px; }
.range-btn { display: inline-flex; align-items: center; gap: var(--space-4); padding: var(--space-4) var(--space-10); border-radius: 999px; background: var(--glass-input); border: 1px solid var(--glass-border); color: var(--text); font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); cursor: pointer; }
.range-btn:hover { background: var(--primary-soft); color: var(--primary); }
.d-page .hero { background: var(--glass); border: 1px solid var(--glass-border); border-radius: var(--radius-lg); padding: var(--space-16) 18px; box-shadow: var(--shadow-sm); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px); }

/* Operation-record timeline */
.tl-item { display: flex; gap: var(--space-12); padding: var(--space-10) 0; border-bottom: 1px solid rgba(0,0,0,0.05); }
.tl-item:last-child { border-bottom: none; }
.tl-dot { width: 26px; height: 26px; border-radius: 50%; flex: 0 0 26px; display: grid; place-items: center; background: var(--primary-soft); color: var(--primary); }
.tl-body { flex: 1; min-width: 0; }
.tl-head { display: flex; align-items: center; gap: var(--space-8); margin-bottom: 2px; }
.tl-changes { margin-top: 6px; display: flex; flex-direction: column; gap: 2px; }
.tl-changes .del { color: var(--danger); text-decoration: line-through; }
.tl-changes .ins { color: var(--success); font-weight: var(--font-weight-semibold); }

/* Desktop profit: sticky summary panel follows scroll */
@media (min-width: 768px) {
  .d-page .pitem { align-items: center; }
}

/* ============================ Home: 经营基本面 ============================ */
.home-fundamentals .hero { display: none; } /* 旧 hero 已弃用 */
.fb-titlebar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-10); padding: var(--space-8) var(--space-4) 12px; flex-wrap: wrap; }
.fb-brand { display: flex; align-items: center; gap: var(--space-10); }
.fb-title { font-weight: 800; font-size: 17px; color: var(--text); }
.fb-titlebar-right { display: flex; align-items: center; gap: var(--space-8); flex-wrap: wrap; }
.fb-user .avatar { display: grid; place-items: center; color: #fff; font-weight: var(--font-weight-bold); border-radius: 50%; }
.d-page .fb-titlebar { padding: var(--space-4) 0 14px; }

/* 指标卡 */
.fb-metrics { display: grid; gap: var(--space-10); }
.fb-metrics--6 { grid-template-columns: repeat(6, 1fr); }
.fb-metrics--2x2 { grid-template-columns: repeat(2, 1fr); }
.fb-metric { background: var(--glass); border: 1px solid var(--glass-border); border-radius: var(--radius-sm); padding: var(--space-12) 13px; box-shadow: var(--shadow-sm); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); }
.fb-metric.good .fb-m-value { color: var(--success); }
.fb-metric.warn .fb-m-value { color: #b9770a; }
.fb-m-label { font-size: var(--font-size-2xs); color: var(--text-3); }
.fb-m-value { font-size: 19px; font-weight: 800; color: var(--text); margin: 3px 0 2px; letter-spacing: -0.3px; }
.fb-m-value.sm { font-size: 15px; }
.fb-m-delta { font-size: var(--font-size-2xs); font-weight: var(--font-weight-semibold); display: flex; align-items: center; gap: var(--space-4); }
.fb-m-delta.up { color: var(--success); }
.fb-m-delta.down { color: var(--danger); }
.fb-m-delta.flat { color: var(--text-3); font-weight: var(--font-weight-medium); }
.fb-m-delta .arrow { font-weight: 800; }
.fb-m-status { color: var(--text-3); margin-top: 1px; }

/* 诊断栏 */
.fb-diag { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-10); }
@media (max-width: 767px) { .fb-diag { grid-template-columns: repeat(2, 1fr); } }
.fb-diag-item { display: flex; gap: var(--space-10); align-items: flex-start; background: var(--glass); border: 1px solid var(--glass-border); border-radius: var(--radius-sm); padding: 11px 12px; box-shadow: var(--shadow-sm); }
.fb-diag-item .ico { color: var(--text-3); flex: 0 0 auto; }
.fb-diag-item.up .ico, .fb-diag-item.up .fb-diag-state { color: var(--success); }
.fb-diag-item.down .ico, .fb-diag-item.down .fb-diag-state { color: var(--danger); }
.fb-diag-item.warn .ico, .fb-diag-item.warn .fb-diag-state { color: #b9770a; }
.fb-diag-item.ok .ico, .fb-diag-item.ok .fb-diag-state { color: var(--primary); }
.fb-diag-head { display: flex; align-items: center; gap: var(--space-6); margin-bottom: 2px; }
.fb-diag-state { font-weight: var(--font-weight-bold); font-size: var(--font-size-sm); }
.fb-diag-text { line-height: 1.5; }

/* 趋势图 */
.fb-trend-toggles { display: flex; gap: var(--space-6); margin-bottom: 8px; flex-wrap: wrap; }
.chart-combo .combo-legend { display: flex; gap: var(--space-12); justify-content: center; margin-top: 4px; flex-wrap: wrap; }
.combo-legend .lg-item { display: inline-flex; align-items: center; gap: var(--space-4); font-size: 11px; color: var(--text-2); }
.combo-legend .lg-item i { width: 10px; height: 3px; border-radius: 2px; display: inline-block; }

/* 风险卡 */
.fb-risk-tag { display: inline-flex; align-items: center; gap: var(--space-4); padding: 3px 9px; border-radius: 999px; background: var(--danger-soft); color: var(--danger); font-size: var(--font-size-2xs); font-weight: var(--font-weight-bold); margin-bottom: 10px; }
.fb-risk-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-8); }
@media (max-width: 767px) { .fb-risk-grid { grid-template-columns: repeat(2, 1fr); } }
.fb-risk-item { display: flex; gap: var(--space-8); align-items: center; padding: 9px 10px; border-radius: var(--radius-md); background: var(--glass-input); border: 1px solid var(--glass-border); }
.fb-risk-item.ok { border-left: 3px solid var(--success); }
.fb-risk-item.warn { border-left: 3px solid var(--warning); }
.fb-risk-item.bad { border-left: 3px solid var(--danger); }
.fb-risk-item.ok .fb-risk-ico { color: var(--success); }
.fb-risk-item.warn .fb-risk-ico { color: var(--warning); }
.fb-risk-item.bad .fb-risk-ico { color: var(--danger); }

/* 供应商集中度结论 */
.fb-conc { font-size: var(--font-size-sm); padding: var(--space-8) var(--space-10); border-radius: var(--radius-sm); line-height: 1.5; }
.fb-conc.ok { background: var(--success-soft); color: var(--success); }
.fb-conc.warn { background: var(--warning-soft); color: #b9770a; }
.fb-conc.bad { background: var(--danger-soft); color: var(--danger); }

/* 手机核心盈利卡 */
.fb-profit-card { display: flex; gap: var(--space-12); align-items: center; background: var(--bg-surface); border: 1px solid var(--glass-border); border-radius: var(--radius); padding: 14px 16px; box-shadow: var(--shadow-sm); }
.fb-profit-main { flex: 0 0 auto; text-align: center; padding-right: 12px; border-right: 1px solid rgba(0,0,0,0.08); }
.fb-profit-margin { font-size: 30px; font-weight: 800; letter-spacing: -1px; }
.fb-profit-margin.good { color: var(--success); }
.fb-profit-margin.normal { color: var(--primary); }
.fb-profit-margin.bad { color: var(--danger); }
.fb-profit-sub { flex: 1; display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-8); }

/* ============================ 视觉返修：溢出/密度/比例 ============================ */
/* 全局防溢出：flex/grid 子元素 min-width:0，内容 max-width:100% */
.d-page, .d-shell, .d-main, .m-page, .m-shell { min-width: 0; }
.d-page > *, .m-page > *, .cockpit > *, .fb-metrics > *, .fb-diag > *, .fb-risk-grid > *, .grid-2 > *, .pt-row > * { min-width: 0; max-width: 100%; }
.card, .glass { min-width: 0; max-width: 100%; }
img, svg { max-width: 100%; }
/* 文字省略 */
.r-title, .pc-name, .pc-code, .s-user, .fb-m-value, .fb-m-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.fb-diag-text, .fb-m-status, .fb-conc { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
/* 金额不断行 */
.fb-m-value, .fb-risk-item .v, .r-right, td { white-space: nowrap; }

/* 页面内边距与卡片圆角/阴影减弱 */
.d-page { padding: var(--space-16) 28px 40px; }
.card, .glass { border-radius: var(--radius-xl); box-shadow: 0 1px 3px rgba(31,38,135,0.05), 0 4px 14px rgba(31,38,135,0.05); }
.cockpit { gap: var(--space-16); }

/* 控制栏：右对齐紧凑，无重复标题 */
.fb-titlebar { padding: 2px 0 12px; justify-content: flex-end; }
.fb-titlebar-right { flex-wrap: wrap; }

/* 风险提示条压缩 */
.alert-banner { min-height: 46px; padding: var(--space-12) var(--space-16); font-size: var(--font-size-base); border-radius: var(--radius-lg); }
.alert-banner .ico { flex: 0 0 auto; }

/* 核心指标卡压缩 */
.fb-metric { padding: var(--space-12) 14px; min-height: 108px; }
.fb-m-label { font-size: var(--font-size-md); }
.fb-m-value { font-size: 26px; }
.fb-m-value.sm { font-size: 17px; }
.fb-m-delta { font-size: var(--font-size-md); }
.fb-m-status { font-size: var(--font-size-xs); }

/* 诊断卡压缩 */
.fb-diag-item { min-height: 92px; padding: var(--space-10) var(--space-12); }
.fb-diag-text { font-size: var(--font-size-xs); }

/* 资金风险卡：桌面 2列(1200-1799)，≥1800 才 3列 */
.fb-risk-grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-10); }
@media (min-width: 1800px) { .fb-risk-grid { grid-template-columns: repeat(3, 1fr); } }
.fb-risk-item { padding: var(--space-10) var(--space-12); border-left: 2px solid; border-radius: var(--radius-sm); }
.fb-risk-item.ok { background: rgba(33,163,102,0.05); border-left-color: var(--success); }
.fb-risk-item.warn { background: rgba(255,159,10,0.06); border-left-color: var(--warning); }
.fb-risk-item.bad { background: rgba(255,59,48,0.06); border-left-color: var(--danger); }
.fb-stack { display: flex; flex-direction: column; gap: var(--space-16); }

/* 趋势图：主图 230 + 迷你图 80，共享横轴 */
.trend-pair { display: flex; flex-direction: column; gap: var(--space-4); }
.chart-trend-main svg, .chart-trend-mini svg { display: block; }
.fb-trend-bar { margin-bottom: 8px; }
.fb-trend-bar .segment { height: 34px; }
.fb-trend-bar .segment button { height: 30px; font-size: var(--font-size-sm); padding: 0 12px; }

/* 产品工具栏 */
.pt-row { display: flex; align-items: center; gap: var(--space-10); margin-bottom: 12px; }
.pt-row--wrap { flex-wrap: wrap; gap: var(--space-8); }
.search--grow { flex: 1 1 260px; min-width: 180px; }
.pt-seg { flex: 0 0 auto; }
.pt-sort-label { flex: 0 0 auto; margin-left: auto; }
.pt-row--wrap .chip-row { flex: 0 0 auto; }

/* 产品表格：全宽 + 列宽 + 行高
   v63：原全局 min-width:1080px 已迁移至 .data-tbl--wide 修饰类（避免少列表格被强制超宽） */
.d-page .list-flat { width: 100%; }
.data-tbl thead th, .data-tbl tbody td { padding: var(--space-8) var(--space-10); }
.data-tbl tbody tr { height: 64px; }
.data-tbl td.num, .data-tbl th.num { text-align: right; }
.data-tbl .col-name { min-width: 180px; max-width: 220px; }
.data-tbl .col-supplier { min-width: 130px; max-width: 160px; }
.data-tbl .col-cat, .data-tbl .col-mat { min-width: 100px; max-width: 130px; }

/* 侧栏底部用户信息 */
.s-foot { padding: var(--space-10) var(--space-8) 2px; border-top: 1px solid var(--glass-border); }
.s-brand { display: none; } /* 移除侧栏底部 LOGO，整页只保留侧栏顶部一个 */
.s-user-row { display: flex; align-items: center; gap: var(--space-8); }
.s-user-row .avatar { display: grid; place-items: center; color: #fff; font-weight: var(--font-weight-bold); border-radius: 50%; flex: 0 0 auto; }
.s-user-info { min-width: 0; }

/* ============================ 移动端返修 ============================ */
/* 金额永不截断：移除省略号，字号自适应(最低16px)，保持不换行 */
.fb-m-value { overflow: visible; text-overflow: clip; white-space: nowrap; font-size: clamp(16px, 5.2vw, 26px); }
.fb-m-value.sm { font-size: clamp(15px, 4.6vw, 17px); }
.fb-m-label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* 手机核心盈利卡：行1 毛利率整行 + 行2-4 两列指标 */
.fb-profit-card { display: flex; flex-direction: column; gap: var(--space-10); }
.fb-profit-row1 { display: flex; align-items: baseline; gap: var(--space-10); flex-wrap: wrap; padding-bottom: 8px; border-bottom: 1px solid rgba(0,0,0,0.08); }
.fb-profit-row1 .fb-profit-margin { font-size: 30px; font-weight: 800; letter-spacing: -1px; }
.fb-profit-row1 .fb-m-delta { font-size: var(--font-size-xs); }
.fb-profit-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-10); }
.fb-profit-grid .fb-metric { min-height: 0; padding: var(--space-8) var(--space-10); }
.fb-profit-grid .fb-m-value { font-size: clamp(16px, 4.4vw, 20px); }

/* 手机工具栏：允许换行，搜索可缩，新建按钮缩写 */
@media (max-width: 767px) {
  .pt-row { flex-wrap: wrap; }
  .search--grow { flex: 1 1 100%; min-width: 0; }
  .pt-seg { flex: 1 1 auto; }
  .pt-row .btn--primary span { display: none; } /* "新建产品"→仅图标+“新建” */
  .pt-row--wrap { flex-wrap: wrap; }
  .pt-sort-label { margin-left: 0; }
}

/* 筛选栏：内部横向滑动，不撑开页面，渐隐提示 */
.pt-row--wrap { position: relative; }
.filter-bar { width: 100%; max-width: 100%; }
@media (max-width: 767px) {
  .filter-bar { flex: 1 0 100%; }
}

/* 页面级防溢出安全网（根因已修复：min-width:0 / 金额自适应 / 工具栏换行） */
html, body { overflow-x: hidden; }
.m-shell, .m-page { max-width: 100%; overflow-x: clip; }

/* 趋势图跟随容器，底部留白避开 Dock */
.chart-trend-main svg, .chart-trend-mini svg, .chart-combo svg, .chart-line { max-width: 100%; height: auto; }
.fb-trend-bar .segment { overflow-x: auto; scrollbar-width: none; }
.fb-trend-bar .segment::-webkit-scrollbar { display: none; }
/* 新建按钮：桌面“新建产品”，手机“新建” */
.new-short { display: none; }
@media (max-width: 767px) { .new-short { display: inline; } .new-full { display: none; } }

/* 采购详情抽屉 / 新建表单 */
.po-drawer { width: min(720px, 96vw); max-height: 92vh; overflow-y: auto; }
.po-detail { padding: var(--space-4) 2px; }
.kv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 16px; }
.kv-grid .kv { display: flex; justify-content: space-between; gap: var(--space-8); padding: var(--space-6) 0; border-bottom: 1px solid rgba(0,0,0,0.05); }
.po-item-row { display: flex; align-items: center; gap: var(--space-8); margin-bottom: 8px; }
.po-item-row .input, .po-item-row .select { height: 36px; }
.po-summary { margin-top: 10px; padding: var(--space-10) var(--space-12); border-radius: var(--radius-md); background: var(--primary-soft); }
.po-summary .kv { display: flex; justify-content: space-between; padding: 2px 0; }
@media (max-width: 767px) {
  .kv-grid { grid-template-columns: 1fr; }
  .po-item-row { flex-wrap: wrap; }
  .po-item-row .select { flex: 1 1 100% !important; }
}

/* 身份初始化：开发身份选择 + 过期提示 */
.init-idrow { display: flex; gap: var(--space-6); justify-content: center; flex-wrap: wrap; }

/* ==================== v101：选择统计时间弹窗重设计 ==================== */
/* 桌面 600px modal 变体（手机自动 calc(100vw-32px)） */
.modal--range { max-width: 600px; width: calc(100vw - 32px); }
.modal--range .modal-body, .modal--range .modal-content { padding: 4px 24px 8px; }
/* 分组：小标题在上、选项网格在下（废除 72px 左标签列） */
.home-range-group { display: block; }
.home-range-group + .home-range-group { margin-top: 16px; }
.home-range-group__label { margin: 0 0 8px; padding: 0; font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); color: var(--text-3, var(--text-secondary)); letter-spacing: 0.02em; }
.home-range-group__options { display: grid; grid-template-columns: repeat(var(--range-cols, 2), minmax(0, 1fr)); gap: 8px; }
/* 选项按钮：等高等宽、主色选中态、完整状态 */
.home-range-option {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 44px; padding: 8px 12px;
  border: 1px solid var(--border-default); border-radius: var(--radius-sm);
  background: var(--bg-content, var(--bg-surface)); color: var(--text-2, var(--text-secondary));
  font: inherit; font-size: var(--font-size-sm); cursor: pointer;
  transition: background-color var(--motion-duration-fast) var(--ease-standard), border-color var(--motion-duration-fast) var(--ease-standard), color var(--motion-duration-fast) var(--ease-standard);
}
.home-range-option:hover { background: var(--bg-surface-hover); color: var(--text); }
.home-range-option:focus-visible { outline: 2px solid var(--primary, #2563eb); outline-offset: 2px; }
.home-range-option:active { background: var(--bg-surface-active); }
.home-range-option.active {
  border-color: var(--primary, #2563eb);
  background: var(--primary-soft, rgba(37, 99, 235, 0.10));
  color: var(--primary, #2563eb);
  font-weight: var(--font-weight-semibold);
  box-shadow: inset 0 0 0 1px var(--primary, #2563eb);
}
.home-range-option__check { font-size: 12px; line-height: 1; width: 14px; }
/* 自定义日期：桌面等宽两列；错误内联 */
.home-range-custom { margin-top: 12px; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 10px; align-items: end; }
.home-range-custom .field { min-width: 0; }
.home-range-custom .input { width: 100%; min-width: 0; box-sizing: border-box; font-size: 16px; }
.home-range-custom__to { color: var(--text-2, var(--text-secondary)); padding-bottom: 10px; }
.home-range-custom__error { grid-column: 1 / -1; min-height: 18px; font-size: var(--font-size-xs); color: var(--danger, #e5484d); }
/* 当前选择：紧凑摘要卡（左标签右结果） */
.home-range-summary {
  margin-top: 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 10px 14px; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm);
  background: var(--bg-surface-hover);
}
.home-range-summary__label { font-size: var(--font-size-sm); color: var(--text-2, var(--text-secondary)); }
.home-range-summary__value { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); color: var(--text); }
/* 手机：2 列网格、正文独立滚动、footer 完整可见 */
@media (max-width: 640px) {
  .modal--range { max-width: calc(100vw - 32px); width: calc(100vw - 32px); }
  .modal--range .modal-body, .modal--range .modal-content { max-height: calc(100dvh - 200px); overflow-y: auto; overscroll-behavior: contain; }
  .home-range-group__options { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .home-range-custom { grid-template-columns: 1fr; }
  .home-range-custom__to { display: none; }
  .home-range-summary { flex-wrap: wrap; }
}

/* ==================== v150.12：开票申请弹窗分组排版 + 财务权限界面 ==================== */
.fin-create--grouped .form-field { margin-bottom: 10px; }
.fin-project-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(240px, .9fr);
  align-items: start;
  gap: 12px 16px;
}
.fin-project-grid .form-field { min-width: 0; margin-bottom: 0; }
.fin-project-grid .input { width: 100%; min-width: 0; }
.fin-payment-hint { min-height: 1.4em; margin-top: 5px; line-height: 1.4; }
.fin-payment-select:disabled { cursor: not-allowed; opacity: .72; }
.fin-form-sec {
  font-size: 12px; font-weight: 600; color: var(--text-2, #6b6b70); letter-spacing: 0.3px;
  margin: 14px 0 8px; padding-top: 10px; border-top: 1px solid var(--border-subtle, #e8e8e4);
}
.fin-create--grouped .fin-form-sec:first-child { margin-top: 2px; padding-top: 0; border-top: none; }
.fin-pay-form { display: grid; gap: 12px; min-width: 0; margin-top: 12px; padding-top: 14px; border-top: 1px solid var(--border-subtle, #e8e8e4); }
.fin-pay-form > .fin-form-sec { margin: 0; padding: 0; border: 0; color: var(--text-primary); font-size: 13px; letter-spacing: 0; }
.fin-pay-form__fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; gap: 14px; min-width: 0; }
.fin-pay-form .form-field { display: grid; gap: 6px; min-width: 0; margin: 0; }
.fin-pay-form .form-field > label { margin: 0; color: var(--text-tertiary); font-size: 12px; line-height: 1.4; }
.fin-pay-form .input { width: 100%; min-width: 0; min-height: 40px; box-sizing: border-box; }
.fin-pay-voucher { min-height: 40px; padding: 4px 8px; flex-wrap: nowrap; gap: 8px; }
.fin-pay-voucher .piv-file-name { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fin-pay-voucher > .btn { flex: 0 0 auto; min-height: 32px; white-space: nowrap; }
.fin-pay-form__actions { display: flex; align-items: center; justify-content: flex-end; min-width: 0; }
.fin-pay-form__actions > .btn { min-height: 36px; padding-inline: 16px; white-space: nowrap; }
.fin-upload-ok { color: var(--success, #63b88c); font-weight: 500; }
.fin-upload-err { color: var(--danger, #c0392b); font-weight: 500; }
.fin-uploading { color: var(--text-secondary, #5e5d59); }
.fin-detail-sec { margin-bottom: 12px; }
.fin-detail-sec__title { font-size: 12px; font-weight: 600; color: var(--text-tertiary, #8a8f98); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px solid var(--border-subtle, rgba(127,127,127,0.14)); }
.fin-detail-grouped .fin-kv { display: flex; gap: 8px; padding: 3px 0; }
.fin-detail-grouped .fin-kv .k { min-width: 100px; color: var(--text-secondary, #5e5d59); flex-shrink: 0; font-size: 13px; }
.fin-detail-grouped .fin-kv .v { color: var(--text-primary, #1f1e1d); font-size: 13px; word-break: break-all; }
.fin-note-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.fin-note-count.is-over { color: var(--danger, #c0392b); font-weight: 600; }
.fin-create--grouped textarea.input { resize: vertical; min-height: 52px; line-height: 1.5; }
@media (max-width: 640px) {
  .fin-project-grid { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .fin-project-grid .form-field { margin-bottom: 10px; }
  .fin-payment-hint { min-height: 0; }
  .fin-pay-form__fields { grid-template-columns: minmax(0, 1fr); gap: 12px; }
}

/* 个人权限编辑界面 */
.upm-head { display: flex; flex-wrap: wrap; gap: 6px 14px; padding: 10px 12px; border: 1px solid var(--border-subtle, #e8e8e4); border-radius: 10px; background: var(--bg-surface, var(--bg-content)); margin-bottom: 12px; }
.upm-head .kv { margin: 0; }
.upm-search-row { display: flex; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.upm-module { border: 1px solid var(--border-subtle, #e8e8e4); border-radius: 10px; margin-bottom: 10px; overflow: hidden; }
.upm-module__head { display: flex; align-items: center; justify-content: space-between; padding: 9px 12px; background: var(--bg-surface, var(--bg-content)); cursor: pointer; user-select: none; min-height: 44px; }
.upm-module__title { font-size: 13px; font-weight: 600; }
.upm-module__meta { font-size: 11.5px; color: var(--text-3, #9a9a9e); }
.upm-module__body { padding: 4px 12px 10px; }
.upm-row { display: grid; grid-template-columns: minmax(0, 1.2fr) auto; gap: 8px 12px; padding: 9px 0; border-top: 1px solid var(--border-subtle, #ececea); align-items: center; }
.upm-row:first-child { border-top: none; }
.upm-row__name { font-size: 13px; font-weight: 600; }
.upm-row__purpose { font-size: 11.5px; color: var(--text-3, #9a9a9e); line-height: 1.45; margin-top: 2px; }
.upm-row__src { font-size: 11px; color: var(--text-3, #9a9a9e); margin-top: 2px; }
.upm-row__src.is-deny { color: var(--danger, #c0392b); }
.upm-row__src.is-allow { color: var(--success, #2e7d32); }
.upm-seg { display: inline-flex; border: 1px solid var(--border-subtle, #e0e0dc); border-radius: 8px; overflow: hidden; }
.upm-seg button { min-width: 52px; min-height: 44px; padding: 0 10px; border: none; background: transparent; font-size: 12px; font-family: inherit; cursor: pointer; color: var(--text-2, #6b6b70); }
.upm-seg button + button { border-left: 1px solid var(--border-subtle, #e0e0dc); }
.upm-seg button.is-on { background: #1b1b1d; color: #fff; font-weight: 600; }
.upm-seg button.is-on.is-deny-on { background: var(--danger, #c0392b); }
.upm-diff { border: 1px solid var(--border-subtle, #e8e8e4); border-radius: 10px; padding: 10px 12px; margin-top: 12px; font-size: 12.5px; line-height: 1.7; }
.upm-diff .add { color: var(--success, #2e7d32); }
.upm-diff .rev { color: var(--danger, #c0392b); }
.upm-foot { display: flex; justify-content: flex-end; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.upm-warn { color: var(--danger, #c0392b); font-size: 12.5px; margin-top: 8px; }

/* ==================== v150.13：铃铛面板 + 邮箱式消息中心 ==================== */
.bell-panel { position: fixed; z-index: 90; width: min(380px, calc(100vw - 16px)); color: var(--text-primary); background-color: var(--bg-content); border: 1px solid var(--border-subtle, #e0e0dc); border-radius: 12px; box-shadow: 0 12px 32px rgba(0,0,0,.14); max-height: min(70vh, 480px); display: flex; flex-direction: column; overflow: hidden; }
.bell-panel__head { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--border-subtle, #ececea); }
.bell-panel__title { font-size: 13.5px; font-weight: 600; }
.bell-panel__list { flex: 1; min-height: 0; overflow-y: auto; background-color: var(--bg-content); }
.bell-panel__item { display: block; width: 100%; text-align: left; padding: 9px 14px; border: none; background-color: var(--bg-content); color: var(--text-primary); cursor: pointer; font-family: inherit; border-top: 1px solid var(--border-subtle, #f0f0ee); min-height: 44px; box-sizing: border-box; }
.bell-panel__item:hover { background: var(--bg-surface-hover); }
.bell-panel__item.is-unread { background-color: var(--bg-surface-subtle); }
[data-theme="dark"] .bell-panel__list,
[data-theme="dark"] .bell-panel__item { background-color: var(--bg-content); color: var(--text-primary); }
[data-theme="dark"] .bell-panel__item.is-unread { background-color: var(--bg-surface-subtle); }
[data-theme="light"] .bell-panel__list,
[data-theme="light"] .bell-panel__item { background-color: var(--bg-content); color: var(--text-primary); }
[data-theme="light"] .bell-panel__item.is-unread { background-color: var(--bg-surface-subtle); }
.bell-panel__item-top { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; }
.bell-panel__item-title { font-size: 12.5px; line-height: 1.45; color: var(--text-primary); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.bell-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--danger, #c0392b); display: inline-block; flex: none; }
.bell-panel__foot { padding: 8px 14px; border-top: 1px solid var(--border-subtle, #ececea); display: flex; justify-content: flex-end; }

.inbox-page { display: flex; flex-direction: column; gap: 12px; }
.inbox-filterbar { display: flex; align-items: center; justify-content: space-between; }
.inbox-push-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px 16px; }
.inbox-push-card__copy { min-width: 0; display: grid; gap: 4px; }
.inbox-push-card__title { font-size: 13px; font-weight: 700; color: var(--text-primary); }
.inbox-push-card__info { color: var(--text-secondary); font-size: 12px; line-height: 1.55; }
.inbox-push-card > .btn { flex: none; }
.inbox-title { font-size: 17px; font-weight: 700; }
.inbox-grid { display: grid; grid-template-columns: 220px minmax(0, 0.9fr) minmax(0, 1.25fr); gap: 16px; align-items: start; }
.inbox-side { display: flex; flex-direction: column; gap: 10px; position: sticky; top: 12px; align-self: start; }
.inbox-side__group { display: flex; flex-direction: column; gap: 1px; background: var(--bg-content); border: 1px solid var(--border-subtle); border-radius: 10px; padding: 5px; }   /* v150.18：组内自然高度，不撑满 */
.inbox-side__title { font-size: 11.5px; color: var(--text-tertiary); padding: 4px 10px 2px; }
.inbox-side__item { display: flex; align-items: center; justify-content: flex-start; gap: 8px; min-height: 40px; padding: 7px 10px; border: none; border-radius: 8px; background: transparent; font-size: 13px; font-family: inherit; cursor: pointer; text-align: left; color: var(--text-1); }
.inbox-side__item:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.inbox-side__item:hover { background: var(--bg-surface-hover, rgba(31, 30, 29, 0.08)); }
.inbox-side__item.is-on { background: var(--primary-soft, rgba(22, 119, 255, 0.08)); color: var(--primary, #1677ff); font-weight: 600; }   /* v150.19（图6）：与全站导航选中语言一致（primary-soft 底+primary 字），取消灰底 */
.inbox-side__badge { font-size: 11px; background: var(--danger, #c0392b); color: #fff; border-radius: 9px; padding: 1px 7px; font-variant-numeric: tabular-nums; margin-left: auto; }
.inbox-list { background: var(--bg-content); border: 1px solid var(--border-subtle); border-radius: 10px; padding: 10px; min-height: min(420px, 52vh); display: flex; flex-direction: column; gap: 8px; }
.inbox-toolbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.inbox-search { width: min(240px, 100%); }
.inbox-batch { display: flex; gap: 6px; flex-wrap: wrap; }
.inbox-rows { display: flex; flex-direction: column; }
.inbox-row { display: flex; gap: 10px; align-items: flex-start; padding: 10px 8px; border-top: 1px solid var(--border-subtle); cursor: pointer; border-radius: 8px; }
.inbox-row:first-child { border-top: none; }
.inbox-row:hover { background: var(--bg-surface-hover, rgba(31, 30, 29, 0.08)); }
.inbox-row.is-selected { background: var(--bg-subtle, rgba(31, 30, 29, 0.10)); }
.inbox-row.is-unread .inbox-row__title { font-weight: 700; }
.inbox-row__check { margin-top: 4px; width: 15px; height: 15px; flex: none; }
.inbox-row__main { flex: 1; min-width: 0; }
.inbox-row__top { display: flex; align-items: center; gap: 8px; margin-bottom: 2px; }
.inbox-row__title { font-size: 13.5px; line-height: 1.45; }
.inbox-row__snippet { font-size: 12px; color: var(--text-tertiary); line-height: 1.45; margin-top: 2px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.inbox-detail { background: var(--bg-content); border: 1px solid var(--border-subtle); border-radius: 10px; padding: 14px; min-height: 240px; position: sticky; top: 12px; }   /* v150.19（图1）：降低空面板高度感 */
.inbox-detail__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.inbox-detail__title { font-size: 15px; font-weight: 700; line-height: 1.5; margin-bottom: 8px; }
.inbox-detail__text { font-size: 13px; line-height: 1.7; color: var(--text-secondary); white-space: pre-wrap; margin-bottom: 12px; overflow-wrap: anywhere; }
.inbox-detail__meta { padding-top: 8px; border-top: 1px solid var(--border-subtle); }
.inbox-detail__actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
@media (max-width: 1023px) {
  .inbox-grid { grid-template-columns: minmax(0, 1fr); }
  .inbox-side { position: static; flex-direction: row; overflow-x: auto; }
  .inbox-side__group { flex-direction: row; flex: none; align-items: center; }
  .inbox-side__title { display: none; }
  .inbox-detail { position: static; }
}

/* ===== v150.26 财务登记发票表单布局 ===== */
.fin-reg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; }
@media (max-width: 640px) { .fin-reg-grid { grid-template-columns: 1fr; } }
.fin-amount-ref { display: block; margin-top: 4px; }
.fin-upload-card { border: 1.5px dashed var(--border-strong, #d9d7cd); border-radius: 10px; padding: 14px 16px; text-align: center; cursor: pointer; margin-top: 6px; transition: border-color 160ms ease; min-height: 72px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; }
.fin-upload-card:hover, .fin-upload-card.is-dragover { border-color: var(--text-secondary, #5e5d59); background: var(--bg-surface-hover); }
.fin-upload-card__inner { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: center; }
.fin-submit-bar { position: sticky; bottom: 0; display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-top: 16px; padding: 12px 0; border-top: 1px solid var(--border-subtle); background: var(--bg-content, #fff); z-index: 1; }
.fin-submit-bar__err { flex: 1; }
.fin-submit-bar__btns { display: flex; gap: 8px; flex-shrink: 0; }
@media (max-width: 640px) { .fin-submit-bar { flex-direction: column; } .fin-submit-bar__btns { width: 100%; } .fin-submit-bar__btns .btn { flex: 1; } }

/* v150.26：详情内容铺满弹窗宽度（消除右侧空白根因） */
.fin-detail-grouped .fin-kv .v { flex: 1; min-width: 0; }
.fin-complete .form-field { width: 100%; box-sizing: border-box; }
.fin-complete .fin-reg-grid { width: 100%; }
.fin-complete .fin-upload-card { width: 100%; box-sizing: border-box; }
.fin-complete .fin-submit-bar { width: 100%; box-sizing: border-box; }

/* v150.27：开票详情弹窗尺寸变体（经由 openModal size 参数） */

/* v150.27: finance modal size variants + detail 2-col grid */
/* detail kv grid: 2-col on desktop */
@media (min-width: 768px) {
  .fin-detail-grouped .fin-detail-sec .fin-kv {
    display: grid; grid-template-columns: 140px 1fr; gap: 4px 12px; align-items: start;
  }
  .fin-detail-grouped .fin-detail-sec .fin-kv .k { min-width: unset; }
}
/* fix label not wrapping to 2 lines */
.fin-detail-grouped .fin-kv .k { white-space: nowrap; }
.fin-detail-grouped .fin-kv .v { word-break: break-word; }
/* sticky submit bar */
.fin-submit-bar { position: sticky; bottom: 0; background: var(--bg-content, #fff); z-index: 1; padding: 12px 0; border-top: 1px solid var(--border-subtle); margin-top: 12px; display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.fin-submit-bar__err { flex: 1; min-width: 0; }
.fin-submit-bar__btns { display: flex; gap: 8px; flex-shrink: 0; }
/* upload card full width */
.fin-upload-card { width: 100%; box-sizing: border-box; }

/* v150.27: modal flex column — head fixed / body scrolls / foot fixed */
/* detail kv grid */
@media (min-width: 768px) {
  .fin-detail-grouped .fin-detail-sec .fin-kv { display: grid; grid-template-columns: 140px 1fr; gap: 4px 12px; align-items: start; }
}
.fin-detail-grouped .fin-kv .k { white-space: nowrap; }
.fin-detail-grouped .fin-kv .v { word-break: break-word; }
/* upload card */
.fin-upload-card { width: 100%; box-sizing: border-box; border: 1.5px dashed var(--border-strong, #d9d7cd); border-radius: 10px; padding: 14px 16px; text-align: center; cursor: pointer; margin-top: 6px; transition: border-color 160ms ease; min-height: 72px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; }
.fin-upload-card:hover, .fin-upload-card.is-dragover { border-color: var(--text-secondary, #5e5d59); background: var(--bg-surface-hover); }
.fin-upload-card__inner { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: center; }
/* submit bar (in footer) */
.fin-submit-bar { display: flex; justify-content: space-between; align-items: center; gap: 8px; width: 100%; }
.fin-submit-bar__err { flex: 1; min-width: 0; }
.fin-submit-bar__btns { display: flex; gap: 8px; }
/* 2-col reg grid */
.fin-reg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; }
@media (max-width: 640px) { .fin-reg-grid { grid-template-columns: 1fr; } }
.fin-amount-ref { display: block; margin-top: 4px; }

/* v150.27: 付款节点发票汇总卡（openNodeInvoices 弹窗） */
.inv-summary { padding: 12px 16px; border: 1px solid var(--border-subtle, rgba(127,127,127,0.14)); border-radius: 10px; margin-bottom: 12px; background: var(--bg-content, #fff); }
.inv-summary__row { display: flex; justify-content: space-between; align-items: baseline; padding: 3px 0; font-size: 13px; color: var(--text-secondary, #5e5d59); }
.inv-summary__row .tabular { font-variant-numeric: tabular-nums; color: var(--text-primary, #1f1e1d); }
.inv-summary__row--b { font-weight: 600; border-top: 1px solid var(--border-subtle); margin-top: 4px; padding-top: 6px; }
.inv-summary__row--b .tabular { font-weight: 700; }
.inv-summary__status { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; margin-top: 6px; }
.inv-summary--none .inv-summary__status { color: var(--text-tertiary, #8a8f98); background: var(--bg-surface-hover, rgba(31,30,29,0.05)); }
.inv-summary--partial .inv-summary__status { color: var(--warning, #b9770a); background: rgba(185,119,10,0.08); }
.inv-summary--full .inv-summary__status { color: var(--success, #63b88c); background: rgba(99,184,140,0.08); }

/* v150.27：财务弹窗统一布局（合并所有重复规则，唯一来源） */
.modal--fin-create, .modal--fin-detail {
  display: flex; flex-direction: column;
  max-width: 860px; width: calc(100vw - 32px);
  max-height: calc(100vh - 48px);
  align-self: center !important;   /* 覆盖 glass.css align-items:flex-end（bottom-sheet） */
}
.modal--fin-create { max-width: 800px; }
.modal--fin-create .modal-body, .modal--fin-detail .modal-body {
  overflow-y: auto; min-height: 0;
}
.modal--fin-create .modal-foot, .modal--fin-detail .modal-foot {
  flex-shrink: 0; display: flex; gap: 8px; padding: 12px 16px;
  border-top: 1px solid var(--border-subtle, rgba(127,127,127,0.14));
  background: var(--bg-content, #fff);
}

/* v150.27: searchable project selector */
.fin-proj-dropdown { position: absolute; z-index: 10; top: 100%; left: 0; right: 0; max-height: 240px; overflow-y: auto; background: var(--bg-content, #fff); border: 1px solid var(--border-default); border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
.fin-proj-opt { padding: 8px 12px; cursor: pointer; display: flex; justify-content: space-between; align-items: center; font-size: 13px; }
.fin-proj-opt:hover { background: var(--bg-surface-hover); }
.fin-proj-selected { padding: 6px 10px; background: var(--bg-surface-hover); border-radius: 6px; font-size: 13px; font-weight: 500; margin-top: 4px; }
.fin-proj-selected.is-hidden { display: none; }
/* detail 2-col kv grid: one row = two label+value pairs */
@media (min-width: 768px) {
  .fin-detail-grouped .fin-detail-sec { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 24px; }
  .fin-detail-grouped .fin-detail-sec .fin-detail-sec__title { grid-column: 1 / -1; }
}

/* 鼠标操作按钮不显示键盘焦点环；键盘 :focus-visible 保持可见 */
.user-tbl .admin-user-opcell .btn:focus:not(:focus-visible),
.user-card__ops .btn:focus:not(:focus-visible),
.modal--upm .btn:focus:not(:focus-visible) { outline: none; box-shadow: none; }
.user-tbl .admin-user-opcell .btn.is-pointer-restored:focus,
.user-card__ops .btn.is-pointer-restored:focus { outline: none !important; box-shadow: none !important; }

/* v150.28：登记/处理记录是信息网格之后的独立全宽行。
   显式 grid-column + 单列网格，避免旧弹窗样式或父级网格将该区压入左列。 */
.fin-detail-grouped > .fin-detail-full {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  width: 100%; min-width: 0; box-sizing: border-box;
}
.fin-detail-full > .fin-process,
.fin-detail-full > .fin-tl-title {
  grid-column: 1 / -1;
  width: 100%; min-width: 0; box-sizing: border-box;
}
.fin-detail-full > .fin-tl-list,
.fin-detail-full > .fin-tl-empty {
  grid-column: 1 / -1;
  width: min(100%, 680px); min-width: 0; box-sizing: border-box;
}
.fin-detail-full .fin-process,
.fin-detail-full .fin-complete { display: block; width: 100%; max-width: none; min-width: 0; box-sizing: border-box; }
.fin-detail-full .fin-process-btns { display: flex; width: 100%; gap: 8px; flex-wrap: wrap; }
.fin-detail-full .fin-complete > .fin-reg-grid,
.fin-detail-full .fin-complete > .form-field,
.fin-detail-full .fin-complete > .fin-err { width: 100%; min-width: 0; box-sizing: border-box; }
.fin-detail-full .fin-complete .form-field > .input,
.fin-detail-full .fin-complete .form-field > .fin-upload-card { width: 100%; box-sizing: border-box; }

/* v150.28：详情操作只在 modal-foot 中出现一次 */
.modal--fin-detail .modal-foot { padding: 0 16px; }
.fin-detail-footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; width: 100%; min-height: 64px; }
.fin-detail-foot-hint { flex: 1 1 auto; min-width: 0; line-height: 1.5; }
.fin-detail-footer__actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.fin-detail-footer .btn[hidden] { display: none; }
.modal--fin-detail .modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.modal--fin-detail .modal-foot > .fin-detail-footer { flex: 1 1 auto; min-width: 0; }

@media (max-width: 640px) {
  .fin-detail-footer { align-items: stretch; flex-direction: column; padding: 10px 0; gap: 8px; }
  .fin-detail-footer__actions { width: 100%; }
  .fin-detail-footer__actions .btn { flex: 1 1 0; }
}

/* v150.27: 软装财务详情——已开票发票紧凑卡片 + 处理记录时间线 */
.fin-inv-item { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border: 1px solid var(--border-subtle, rgba(127,127,127,0.14)); border-radius: 8px; margin-bottom: 6px; background: var(--bg-content, #fff); }
.fin-inv-item:last-child { margin-bottom: 0; }
.fin-inv-item__row { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.fin-inv-item__no { font-weight: 500; font-size: 13px; color: var(--text-primary, #1f1e1d); }
.fin-inv-item .tiny.muted { font-size: 12px; }
/* 已开票详情：真实模板使用 fin-inv-item；覆盖旧通用规则，卡片在桌面端横向呈现。 */
.fin-detail-grouped .fin-detail-sec--full { display: block; width: 100%; min-width: 0; }
.fin-detail-grouped .fin-detail-sec--full > .fin-inv-item {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(120px, .75fr) minmax(135px, .8fr) auto;
  align-items: center; gap: 12px 20px;
  width: 100%; min-width: 0; box-sizing: border-box;
  margin: 0 0 8px; padding: 13px 16px;
  border: 1px solid var(--border-subtle, rgba(127,127,127,.14));
  border-radius: 10px; background: var(--bg-surface, #fff);
}
.fin-detail-grouped .fin-detail-sec--full > .fin-inv-item:last-child { margin-bottom: 0; }
.fin-detail-grouped .fin-inv__field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.fin-detail-grouped .fin-inv__label { color: var(--text-tertiary); font-size: 11px; line-height: 1.35; }
.fin-detail-grouped .fin-inv__value { color: var(--text-primary); font-size: 13px; line-height: 1.45; overflow-wrap: anywhere; }
.fin-detail-grouped .fin-inv__number .fin-inv__value { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.fin-detail-grouped .fin-inv-download { justify-self: end; white-space: nowrap; min-height: 34px; }

/* 处理记录：轻量时间线，不把细分隔线横拉到整张弹窗，减少空旷感。 */
.fin-detail-full > .fin-process + .fin-tl-title { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border-subtle); }
.fin-detail-full > .fin-tl-title { margin: 8px 0 6px; font-size: 13px; line-height: 1.4; }
.fin-tl-list { position: relative; width: min(100%, 680px); min-width: 0; }
.fin-tl-list::before { content: ''; position: absolute; top: 9px; bottom: 9px; left: 5px; border-left: 1px solid var(--border-subtle); }
.fin-detail-full .fin-tl-row {
  position: relative; display: grid; grid-template-columns: 12px minmax(122px, 142px) minmax(0, 1fr);
  align-items: start; gap: 10px; min-width: 0; width: 100%; box-sizing: border-box;
  padding: 7px 0; border: 0; font-size: 12.5px; line-height: 1.5;
}
.fin-detail-full .fin-tl-row::before { content: ''; grid-column: 1; grid-row: 1; width: 8px; height: 8px; margin: 4px auto 0; border: 2px solid var(--bg-content, #fff); border-radius: 50%; background: var(--text-tertiary); box-shadow: 0 0 0 1px var(--border-subtle); z-index: 1; }
.fin-tl-time { grid-column: 2; color: var(--text-tertiary); font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.fin-tl-event { grid-column: 3; min-width: 0; color: var(--text-primary); overflow-wrap: anywhere; }
.fin-tl-empty { width: min(100%, 680px); padding: 10px 0 2px 22px; color: var(--text-tertiary); font-size: 12.5px; }
@media (max-width: 640px) {
  .fin-detail-grouped .fin-detail-sec--full > .fin-inv-item { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 14px; padding: 12px; }
  .fin-detail-grouped .fin-inv__number, .fin-detail-grouped .fin-inv-download { grid-column: 1 / -1; }
  .fin-detail-grouped .fin-inv-download { justify-self: start; }
  .fin-detail-full .fin-tl-row { grid-template-columns: 12px minmax(0, 1fr); gap: 3px 10px; }
  .fin-tl-time, .fin-tl-event { grid-column: 2; }
  .fin-tl-event { grid-row: 2; }
}
.fin-tl-row .tiny.muted { min-width: 100px; flex-shrink: 0; }

/* 项目进项发票归集：按项目入口、识别复核与金额统计 */
.piv-page { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.piv-page .card { min-width: 0; }
.piv-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 18px; }
.piv-header h2, .piv-section-head h3, .piv-list-title h3 { margin: 0; }
.piv-header h2 { font-size: 18px; font-weight: var(--font-weight-semibold, 600); line-height: 1.4; letter-spacing: -0.01em; }
.piv-header p, .piv-section-head p { margin: 4px 0 0; line-height: 1.55; }
.piv-header p { max-width: 760px; color: var(--text-2, #666); font-size: 12.5px; }
.piv-stats { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; }
.piv-stat { position: relative; overflow: hidden; padding: 12px 14px 12px 17px; display: flex; flex-direction: column; gap: 7px; }
.piv-stat::before { content: ''; position: absolute; inset: 0 auto 0 0; width: 3px; border-radius: 3px 0 0 3px; background: var(--piv-stat-accent, var(--text-tertiary)); }
.piv-stat--total { --piv-stat-accent: var(--text-secondary, #666); }
.piv-stat--pending { --piv-stat-accent: var(--warning, #a86613); }
.piv-stat--mismatch { --piv-stat-accent: var(--danger, #b53333); }
.piv-stat--verified { --piv-stat-accent: var(--success, #1a7f5a); }
.piv-stat--tax { --piv-stat-accent: var(--info, #4a76b8); }
.piv-stat-label { color: var(--text-3, #888); font-size: var(--font-size-xs, 12px); font-weight: var(--font-weight-medium, 500); }

.piv-stat strong { color: var(--piv-stat-accent, var(--text, #222)); font-size: 18px; font-weight: var(--font-weight-semibold, 600); line-height: 1.3; }
/* 软装财务摘要沿用项目发票的轻量状态色，避免四张数字卡片视觉完全同色。 */
.fin-summary .fin-sum-card { position: relative; overflow: hidden; min-height: 84px; padding: 13px 16px 13px 19px; border-color: var(--border-subtle, rgba(127,127,127,.16)); }
.fin-summary .fin-sum-card::before { content: ''; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--fin-sum-accent, var(--text-tertiary)); }
.fin-summary .fin-sum-card--submitted { --fin-sum-accent: var(--warning, #a86613); }
.fin-summary .fin-sum-card--processing { --fin-sum-accent: var(--info, #4a76b8); }
.fin-summary .fin-sum-card--completed { --fin-sum-accent: var(--success, #1a7f5a); }
.fin-summary .fin-sum-card--returned { --fin-sum-accent: var(--danger, #b53333); }
/* v150.43 修订：付款申请摘要卡——沿用 fin-sum-accent 状态色（待审批橙/待付款蓝/已付绿/驳回红） */
.fin-summary .fin-sum-card--pending_approval { --fin-sum-accent: var(--warning, #a86613); }
.fin-summary .fin-sum-card--pending_pay { --fin-sum-accent: var(--info, #4a76b8); }
.fin-summary .fin-sum-card--paid { --fin-sum-accent: var(--success, #1a7f5a); }
.fin-summary .fin-sum-card--rejected { --fin-sum-accent: var(--danger, #b53333); }
.fin-summary .fin-sum-card .fin-sum-num { color: var(--fin-sum-accent, var(--text-1)); font-size: 20px; font-weight: var(--font-weight-semibold, 600); }
.fin-summary .fin-sum-card--on { border-color: color-mix(in srgb, var(--fin-sum-accent, var(--text-1)) 48%, var(--border-subtle)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fin-sum-accent, var(--text-1)) 38%, transparent); background: color-mix(in srgb, var(--fin-sum-accent, var(--text-1)) 5%, var(--bg-content, #fff)); }
.piv-project-directory { padding: 16px 18px; }
.piv-section-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 10px; }
.piv-section-head h3, .piv-list-title h3 { font-size: 16px; font-weight: var(--font-weight-semibold, 600); line-height: 1.4; }
.piv-section-head p { max-width: 680px; font-size: 12.5px; }
.piv-section-head > .input { width: min(340px, 40%); min-width: 200px; }
.piv-project-tools { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 30px; margin: -2px 0 8px; }
.piv-project-groups { display: flex; flex-direction: column; gap: 14px; }
.piv-month-group { min-width: 0; }
.piv-month-heading { display: flex; align-items: center; gap: 9px; margin: 0 1px 8px; padding: 0 1px 7px; border-bottom: 1px solid var(--border-subtle, #eeece7); }
.piv-month-heading h4 { margin: 0; color: var(--text, #222); font-size: 13px; font-weight: var(--font-weight-semibold, 600); line-height: 1.4; }
.piv-month-heading > span { color: var(--text-3, #888); }
.piv-project-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 1px 1px 2px; }
.piv-project-grid > .piv-project-tile:only-child { grid-column: 1 / -1; }
.piv-project-tile { min-width: 0; padding: 12px 13px; border: 1px solid var(--border-subtle, #e9e7e1); border-radius: 10px; background: var(--bg-content, #fff); }
.piv-project-tile__top { display: grid; grid-template-columns: minmax(0, 1fr) max-content; justify-content: space-between; align-items: start; gap: 12px; }
.piv-project-tile__top > .btn { justify-self: end; flex: 0 0 auto; width: max-content; min-width: 88px; max-width: 100%; white-space: nowrap; word-break: keep-all; overflow-wrap: normal; writing-mode: horizontal-tb; }
.piv-project-tile__name { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.piv-project-tile__name strong { font-size: 15px; font-weight: var(--font-weight-semibold, 600); line-height: 1.45; overflow-wrap: anywhere; }
.piv-project-tile__stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--border-subtle, #eeece7); }
.piv-project-tile__metric { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.piv-project-tile__metric > span { color: var(--text-3, #888); font-size: 11.5px; font-weight: var(--font-weight-medium, 500); }
.piv-project-tile__metric > strong { color: var(--text-2, #666); font-size: 12px; font-weight: var(--font-weight-semibold, 600); line-height: 1.35; overflow-wrap: anywhere; }
.piv-project-warning { margin-top: 9px; color: var(--warning, #a96d08); font-size: 12px; line-height: 1.5; }
.piv-project-empty { padding: 20px; text-align: center; }
.piv-page .piv-invoice-panel { --piv-content-gutter: 16px; padding: 0; overflow: hidden; }
.piv-filters { display: grid; grid-template-columns: minmax(190px, 1.45fr) repeat(4, minmax(105px, 1fr)) auto auto; gap: 8px; align-items: center; padding: 14px var(--piv-content-gutter); border-bottom: 1px solid var(--border-subtle, #eceae5); background: var(--bg-surface, var(--bg-content, #fff)); }
.piv-filters > * { min-width: 0; }
.piv-filters > .input { height: 40px; min-height: 40px; padding: 0 12px; box-sizing: border-box; font-size: 13px; line-height: 1.2; }
.piv-filters > select.input { padding-right: 28px; }
.piv-filters > .btn { min-width: 76px; min-height: 40px; padding: 0 14px; box-sizing: border-box; font-size: 13px; }
.piv-list-host { min-width: 0; }
.piv-list-card { padding: 0; overflow: hidden; }
.piv-list-title { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px var(--piv-content-gutter); border-bottom: 1px solid var(--border-subtle, #eceae5); }
.piv-invoice-panel .piv-table-wrap { width: auto; margin-inline: var(--piv-content-gutter); overflow-x: auto; }
.piv-table { width: 100%; min-width: 880px; table-layout: fixed; }
.piv-table thead th, .piv-table tbody td { white-space: normal; overflow-wrap: anywhere; vertical-align: middle; }
.piv-table thead th, .piv-table tbody td { border-left: 0; border-right: 0; }
.piv-table tbody tr.piv-invoice-row > td { border-bottom-color: var(--border-subtle, rgba(0, 0, 0, .08)); }
.piv-table thead th:first-child, .piv-table tbody td:first-child { text-align: left; }
.piv-table thead th:nth-child(n+2), .piv-table tbody td:nth-child(n+2) { text-align: center; }
.piv-table tbody td.num, .piv-table tbody td.tabular { white-space: nowrap; }
.piv-table tbody td:nth-child(3), .piv-table tbody td:nth-child(4) { font-weight: var(--font-weight-semibold, 600); }
.piv-table tbody td.piv-amount--verified { color: var(--success, #1a7f5a); }
.piv-table tbody td:nth-child(4) { color: var(--info, #4a76b8); }
.piv-table tbody tr.piv-invoice-row { cursor: pointer; transition: background-color .15s ease; }
.piv-table tbody tr.piv-invoice-row:hover { background: var(--bg-surface-hover, rgba(31, 30, 29, 0.05)); }
.piv-table tbody tr.piv-invoice-row:focus-within { outline: 2px solid var(--border-focus, #87867f); outline-offset: -2px; }
.piv-table .piv-invoice-identity { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; min-width: 0; }
.piv-invoice-identity__project { color: var(--text-3, #888); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; }
.piv-table tbody td .piv-seller-name { color: var(--text-primary, #242321); font-size: 13px; font-weight: var(--font-weight-semibold, 600); line-height: 1.45; overflow-wrap: anywhere; }
.piv-table tbody td.piv-action-cell { padding-right: var(--space-10); padding-left: var(--space-10); text-align: center; }
.piv-row-actions { display: flex; width: 100%; box-sizing: border-box; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 6px; padding-right: 4px; }
.piv-detail-open { min-height: 32px; padding: 5px 10px; font-size: 12px; white-space: nowrap; }
.piv-delete-btn { color: var(--danger, #bd3737); white-space: nowrap; }
.piv-pagination-wrap { display: flex; align-items: center; min-height: 58px; box-sizing: border-box; padding: 8px var(--piv-content-gutter) 12px; }
.piv-pagination-wrap .pagination { width: 100%; min-height: 38px; margin: 0; align-items: center; }
.piv-list-host[aria-busy="true"] { opacity: .72; transition: opacity .12s ease; }
.piv-load-error { padding: 20px; display: grid; gap: 10px; justify-items: start; }
.piv-tag--danger, .piv-warning { color: var(--danger, #bd3737); }
.piv-tag--success { color: var(--success, #26835f); background: color-mix(in srgb, var(--success, #26835f) 10%, transparent); }
.piv-tag--pending { color: var(--warning, #a96d08); background: color-mix(in srgb, var(--warning, #a96d08) 10%, transparent); }
.piv-warning { padding: 12px 14px; border: 1px solid color-mix(in srgb, var(--danger, #bd3737) 22%, transparent); border-radius: 9px; background: color-mix(in srgb, var(--danger, #bd3737) 6%, var(--bg-content, #fff)); line-height: 1.6; }
.piv-upload-note { display: flex; align-items: flex-start; gap: 11px; padding: 13px 15px; border: 1px solid color-mix(in srgb, var(--info, #4a76b8) 16%, var(--border-subtle, #e9e7e1)); border-radius: 10px; background: color-mix(in srgb, var(--info, #4a76b8) 4%, var(--bg-content, #fff)); color: var(--text-2, #666); font-size: 12px; line-height: 1.55; }
.piv-upload-note__mark { display: grid; flex: 0 0 28px; width: 28px; height: 28px; place-items: center; border-radius: 8px; color: var(--info, #4a76b8); background: color-mix(in srgb, var(--info, #4a76b8) 12%, transparent); font-size: 13px; font-weight: 700; }
.piv-upload-note > div { display: grid; gap: 3px; min-width: 0; }
.piv-upload-note strong { color: var(--text-primary, #242321); font-size: 12.5px; font-weight: var(--font-weight-semibold, 600); }
.piv-upload-form, .piv-review-form { display: grid; gap: 13px; }
.piv-form-row, .piv-review-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.piv-upload-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.piv-upload-payment { width: 100%; min-width: 0; max-width: 100%; box-sizing: border-box; padding: 12px 14px 14px; border: 1px solid var(--border-subtle, #e9e7e1); border-radius: 10px; background: var(--bg-surface-subtle, #faf9f6); }
.piv-upload-subhead { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; color: var(--text-primary, #242321); font-size: 12px; }
.piv-upload-subhead > span { color: var(--text-3, #888); font-size: 11px; font-weight: 400; }
.piv-upload-footnote { color: var(--text-3, #888); font-size: 11.5px; line-height: 1.5; }
.piv-form-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; color: var(--text-2, #666); font-size: 12px; }
.piv-upload-payment .piv-form-row, .piv-upload-payment .piv-form-field { min-width: 0; max-width: 100%; box-sizing: border-box; }
.piv-upload-payment .piv-form-field > .input[type="date"] { padding: 0; text-indent: 12px; }
.piv-form-field--wide { grid-column: 1 / -1; }
.piv-form-label { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
.piv-field-status { flex: 0 0 auto; font-size: 10.5px; font-weight: var(--font-weight-medium, 500); }
.piv-field-status--recognized { color: var(--success, #26835f); }
.piv-field-status--pending { color: var(--warning, #a96d08); }
.piv-recognition-summary { padding: 10px 12px; border: 1px solid var(--border-subtle, #e9e7e1); border-radius: 8px; background: var(--bg-surface-subtle, #faf9f6); font-size: 12px; line-height: 1.55; }
.piv-recognition-summary--complete { color: var(--success, #26835f); background: color-mix(in srgb, var(--success, #26835f) 6%, var(--bg-content, #fff)); }
.piv-recognition-summary--pending { color: var(--warning, #a96d08); }
.piv-form-field .input { width: 100%; min-width: 0; box-sizing: border-box; color: var(--text, #222); font-size: 13px; }
.piv-upload-payment .piv-form-field > .input { display: block; width: 100%; min-width: 0; max-width: 100%; box-sizing: border-box; }
.piv-upload-form .piv-form-field > .input:not(textarea) { height: 40px; min-height: 40px; padding: 0 12px; line-height: 1.2; }
.piv-review-grid textarea.input { min-height: 58px; resize: vertical; line-height: 1.5; }
.piv-upload-form .piv-form-field > select.input { border: 1px solid var(--border-default, #d9d7cd); box-shadow: none; font-weight: 400; transition: border-color .15s ease, box-shadow .15s ease; }
.piv-upload-form .piv-form-field > select.input option { font-weight: 400; }
.piv-upload-form .piv-form-field > select.input:hover { border-color: var(--border-strong, #b8b6ae); }
.piv-upload-form .piv-form-field > select.input:focus { border-color: var(--border-focus, #8a8f98); box-shadow: 0 0 0 3px color-mix(in srgb, var(--border-focus, #8a8f98) 18%, transparent); }
.piv-upload-form .piv-form-field > select.input:disabled { color: var(--text-primary, #242321); background: var(--bg-surface-subtle, #faf9f6); opacity: 1; }
.piv-file-pick { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; min-height: 72px; padding: 12px 14px; border: 1px dashed var(--border-default, #d9d6cf); border-radius: 10px; background: var(--bg-content, #fff); transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease; }
.piv-file-pick--dragging { border-color: var(--info, #4a76b8); background: color-mix(in srgb, var(--info, #4a76b8) 6%, var(--bg-content, #fff)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--info, #4a76b8) 12%, transparent); }
.piv-file-pick--selected { border-style: solid; border-color: var(--success, #26835f); background: color-mix(in srgb, var(--success, #26835f) 4%, var(--bg-content, #fff)); }
.piv-file-name { min-width: 0; flex: 1 1 220px; overflow-wrap: anywhere; color: var(--text, #222); }
.piv-file-pick .piv-file-remove { color: var(--danger, #bd3737); }
.piv-file-pick .piv-file-remove[hidden] { display: none !important; }
.modal--fin-create:has(.piv-upload-form) { max-width: 720px; }
.modal--fin-detail:has(.piv-detail) {
  width: min(860px, calc(100vw - 40px)); max-width: 860px;
  height: min(900px, calc(100dvh - 32px)); max-height: calc(100dvh - 32px);
  box-sizing: border-box; overflow: hidden;
}
.modal--fin-detail:has(.piv-detail) > .modal-head,
.modal--fin-detail:has(.piv-detail) > .modal-foot { flex: 0 0 auto; }
.modal--fin-detail:has(.piv-detail) > .modal-body { flex: 1 1 0; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.modal--fin-detail:has(.piv-detail) > .modal-foot { box-shadow: 0 -6px 16px rgba(24, 24, 20, .035); }
.piv-detail { display: grid; gap: 18px; padding: 2px 2px 4px; }
.piv-detail-summary { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: 16px; align-items: center; min-height: 76px; padding: 18px 20px; border: 1px solid var(--border-subtle, #e9e7e1); border-radius: 10px; background: var(--bg-surface-subtle, #faf9f6); }
.piv-detail-summary__amount, .piv-detail-summary__tax { display: grid; gap: 4px; }
.piv-detail-summary__amount > span, .piv-detail-summary__tax > span { color: var(--text-3, #888); font-size: 11px; }
.piv-detail-summary__amount > strong, .piv-detail-summary__tax > strong { font-size: 16px; font-weight: 600; }
.piv-detail-summary__amount > strong { color: var(--text-primary, #242321); }
.piv-detail-summary__tax > strong { color: var(--info, #4a76b8); }
.piv-detail-summary__status { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
.piv-detail-section { padding: 18px 20px 20px; border: 1px solid var(--border-subtle, #e9e7e1); border-radius: 10px; background: var(--bg-content, #fff); }
.piv-detail-section h3 { margin: 0 0 16px; color: var(--text-primary, #242321); font-size: 13px; font-weight: var(--font-weight-semibold, 600); }
.piv-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 28px; }
.piv-detail-field { display: grid; gap: 7px; min-width: 0; }
.piv-detail-field--wide { grid-column: 1 / -1; }
.piv-detail-field__label { color: var(--text-3, #888); font-size: 12px; line-height: 1.4; }
.piv-detail-field__value { color: var(--text-primary, #242321); font-size: 14px; font-weight: 500; line-height: 1.55; overflow-wrap: anywhere; }
.piv-attachment-link { color: var(--info, #4a76b8); text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--info, #4a76b8) 42%, transparent); text-underline-offset: 2px; }
.piv-attachment-link:hover { text-decoration-color: currentColor; }
.piv-detail-field--money .piv-detail-field__value, .piv-detail-field--tax .piv-detail-field__value { font-weight: 500; font-variant-numeric: tabular-nums; }
.piv-detail-field--tax .piv-detail-field__value { color: var(--info, #4a76b8); }
.piv-detail-warning { padding: 15px 17px; border: 1px solid color-mix(in srgb, var(--warning, #a96d08) 24%, transparent); border-radius: 9px; color: var(--warning, #a96d08); background: color-mix(in srgb, var(--warning, #a96d08) 6%, var(--bg-content, #fff)); font-size: 13px; line-height: 1.65; }
.piv-detail-warning p { margin: 7px 0 0; }
.piv-detail-footer { display: flex; justify-content: flex-end; align-items: center; gap: 10px; width: 100%; min-height: 72px; padding: 4px 0; }
.piv-detail-footer .btn { min-height: 42px; padding: 0 16px; font-size: 13px; }
.piv-reject-btn { justify-self: start; color: var(--danger, #bd3737); }
.piv-project-card { padding: 19px 20px; }
.piv-project-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border-subtle, #eceae5); }
.piv-project-head > div { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.piv-project-head strong { font-size: 16px; line-height: 1.45; }
.piv-project-head .tiny { line-height: 1.6; }
.piv-project-list { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
.piv-project-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; gap: 12px; align-items: center; padding: 12px 14px; border: 1px solid var(--border-subtle, #eceae5); border-radius: 8px; }
.piv-project-row__main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.piv-project-row__main strong { font-size: 14px; line-height: 1.45; overflow-wrap: anywhere; }
.piv-project-row__money { font-family: inherit; font-size: 14px; font-weight: var(--font-weight-semibold); line-height: 20px; color: var(--text-primary); font-variant-numeric: tabular-nums; white-space: nowrap; }

.hard-project-page { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.hard-project-intro { padding: 16px 18px; }
.hard-project-intro strong { display: block; color: var(--text-primary); font-size: 15px; }
.hard-project-intro p { margin: 5px 0 0; color: var(--text-secondary); font-size: 12px; line-height: 1.6; }
.hard-project-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) 220px; gap: 10px; padding: 12px; }
.hard-project-search, .hard-project-filter { width: 100%; min-width: 0; }
.hard-project-count { color: var(--text-secondary); font-size: 12px; padding: 0 2px; }
.hard-project-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; min-width: 0; }
.hard-project-card { display: flex; flex-direction: column; gap: 13px; min-width: 0; padding: 16px; }
.hard-project-card__head { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; padding-bottom: 11px; border-bottom: 1px solid var(--border-subtle); }
.hard-project-card__title { color: var(--text-primary); font-size: 14px; font-weight: 700; line-height: 1.5; overflow-wrap: anywhere; }
.hard-project-card__tags { display: flex; flex-wrap: wrap; gap: 6px; }
.hard-project-card__won { color: var(--success, #26835f); background: color-mix(in srgb, var(--success, #26835f) 10%, transparent); }
.hard-project-card__costs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 10px; }
.hard-project-card__cost { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.hard-project-card__cost span, .hard-project-card__total span { color: var(--text-secondary); font-size: 11px; line-height: 1.4; }
.hard-project-card__cost strong { color: var(--text-primary); font-size: 13px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.hard-project-card__total { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding-top: 10px; border-top: 1px solid var(--border-subtle); }
.hard-project-card__total strong { color: var(--text-primary); font-size: 15px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.hard-project-loading { padding: 24px; color: var(--text-secondary); text-align: center; }
.hard-project-pager { display: flex; justify-content: center; }
@media (max-width: 900px) {
  .hard-project-list { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .hard-project-toolbar { grid-template-columns: minmax(0, 1fr); padding: 10px; }
  .hard-project-card { padding: 14px; }
  .hard-project-card__costs { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
}

@media (max-width: 1000px) {
  .piv-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .piv-project-grid { grid-template-columns: 1fr; }
  .piv-filters { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .piv-filters > .input:first-child { grid-column: 1 / -1; }
  .piv-filters > .btn:nth-last-child(2) { grid-column: 2; }
  .piv-filters > .btn:last-child { grid-column: 3; }
}
@media (max-width: 640px) {
  .piv-page { gap: 12px; }
  .piv-page .piv-invoice-panel { --piv-content-gutter: 10px; }
  .piv-header, .piv-section-head, .piv-list-title, .piv-project-head { align-items: stretch; flex-direction: column; }
  .piv-header, .piv-project-directory { padding: 14px; }
  .piv-header h2 { font-size: 17px; }
  .piv-header > .btn { width: 100%; }
  .piv-section-head > .input { width: 100%; min-width: 0; }
  .piv-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .piv-stat { padding: 11px 12px; }
  .piv-stat strong { font-size: 15px; }
  .piv-stat:last-child:nth-child(odd) { grid-column: 1 / -1; }
  .piv-project-grid { grid-template-columns: 1fr; }
  .piv-project-tile__stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .piv-filters { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 10px var(--piv-content-gutter); }
  .piv-filters > .input:first-child { grid-column: 1 / -1; }
  .piv-filters > .btn:nth-last-child(2) { grid-column: 1; }
  .piv-filters > .btn:last-child { grid-column: 2; }
  .piv-filters > .btn { width: 100%; }
  .piv-upload-fields { grid-template-columns: 1fr; gap: 10px; }
  .piv-upload-payment { padding: 11px; }
  .piv-detail-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .piv-detail-summary__status { grid-column: 1 / -1; justify-content: flex-start; }
  .piv-detail-section { padding: 15px 16px 17px; }
  .piv-detail-grid { gap: 14px 16px; }
  .piv-detail-footer { flex-wrap: wrap; }
  .piv-detail-footer .btn { flex: 1 1 auto; }
  .modal--fin-detail:has(.piv-detail) { width: calc(100vw - 24px); height: calc(100dvh - 24px); max-height: calc(100dvh - 24px); }
  .piv-row-actions { flex-direction: column; align-items: stretch; }
  .piv-row-actions .btn { width: 100%; }
  .piv-list-title { gap: 6px; padding: 13px var(--piv-content-gutter); }
  .piv-pagination-wrap { min-height: 58px; padding: 8px var(--piv-content-gutter) 12px; }
  .piv-pagination-wrap .pagination { align-items: center; flex-direction: row; gap: 10px; overflow: visible; }
  .piv-pagination-wrap .pagination-pages { margin-left: auto; }
  .piv-form-row, .piv-review-grid { grid-template-columns: 1fr; gap: 10px; }
  /* 手机 Safari 的原生日期控件带有内建最小内容宽度；1fr 的自动最小值会把整行撑出卡片。 */
  .piv-upload-payment .piv-form-row { width: 100%; grid-template-columns: minmax(0, 1fr); }
  .piv-upload-payment .piv-form-field { width: 100%; min-width: 0; }
  .modal--fin-create:has(.piv-upload-form), .modal--fin-create:has(.piv-review-form) { width: calc(100vw - 24px); max-width: 620px; max-height: calc(100dvh - 32px); }
  .piv-project-row { grid-template-columns: minmax(0, 1fr) auto; gap: 8px; }
  .piv-project-row .tag { justify-self: start; }
  .piv-project-row > .btn, .piv-project-row > a { justify-self: end; }
}
