/* ReptileMarket Pro — Design tokens from vital_habitats/DESIGN.md */
:root {
  --surface: #fafafa;
  --surface-container-low: #f3f3f3;
  --surface-container-lowest: #ffffff;
  --surface-container: #ededed;
  --on-surface: #0a0a0a;
  --on-surface-variant: #525252;
  --primary: #1c1c1e;
  --primary-container: #404040;
  --brand-orange: #0a0a0a;
  --brand-light: #525252;
  --brand-dark: #000000;
  --brand-soft-bg: #f0f0f0;
  --secondary: #525252;
  --secondary-container: #e5e5e5;
  --tertiary: #262626;
  --tertiary-container: #404040;
  --price-red: #0a0a0a;
  --rating-yellow: #737373;
  --text-primary: #0a0a0a;
  --text-secondary: #3a3a3c;
  --text-muted: #737373;
  --divider: #e5e5e5;
  --error: #262626;
  --margin-mobile: 1rem;
  --radius-sm: 0.25rem;
  --radius-md: 0.75rem;
  --radius-lg: 1rem;
  --radius-xl: 1.5rem;
  --radius-full: 9999px;
  --nav-height: 3.35rem;
  --header-height: 4rem;
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --trust-green: #525252;
  --trust-green-bg: #f0f0f0;
  --trust-gold: #737373;
  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 1.5rem;
  --spacing-xl: 2rem;
  --text-xs: 0.6875rem;
  --text-sm: 0.8125rem;
  --text-base: 0.875rem;
  --text-lg: 1rem;
  --text-xl: 1.25rem;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  background: var(--surface);
  color: var(--on-surface);
  -webkit-font-smoothing: antialiased;
}

body { min-height: 100dvh; }

#app { min-height: 100dvh; }

.material-symbols-outlined {
  font-family: 'Material Symbols Outlined', sans-serif;
  font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
  vertical-align: middle;
  user-select: none;
  font-size: 1.25rem;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  display: inline-block;
  white-space: nowrap;
  word-wrap: normal;
  direction: ltr;
}
.material-symbols-outlined.filled { font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24; }

.hide-scrollbar::-webkit-scrollbar { display: none; }
.hide-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }

.active-glow { box-shadow: 0 4px 14px rgba(0, 0, 0, 0.2); }

.page { min-height: 100dvh; padding-bottom: calc(var(--nav-height) + var(--safe-bottom)); }
.page.no-nav { padding-bottom: var(--safe-bottom); }
.page-content { padding-bottom: 1rem; }

/* Header */
.app-header {
  position: sticky; top: 0; z-index: 40;
  display: flex; align-items: center; justify-content: space-between;
  height: var(--header-height); padding: 0 var(--margin-mobile);
  background: var(--surface-container-lowest);
  border-bottom: 1px solid var(--divider);
}
.app-header.transparent { background: transparent; border: none; position: absolute; width: 100%; }
.app-header .title { font-size: 1.125rem; font-weight: 700; color: var(--primary); }
.app-header .back, .app-header .action {
  width: 2.5rem; height: 2.5rem; display: flex; align-items: center; justify-content: center;
  border: none; background: none; cursor: pointer; color: var(--text-primary);
  border-radius: var(--radius-full);
}
.app-header .back:hover, .app-header .action:hover { background: var(--surface-container-low); }

/* Bottom Nav — 紧凑五栏 */
.bottom-nav {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 50;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  align-items: center;
  height: calc(var(--nav-height) + var(--safe-bottom));
  padding: 0.2rem 0.25rem calc(0.15rem + var(--safe-bottom));
  background: rgba(255, 255, 255, 0.94);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-top: 1px solid rgba(232, 232, 237, 0.9);
  box-shadow: 0 -2px 16px rgba(26, 28, 29, 0.06);
}
.bottom-nav button.nav-item,
.bottom-nav a.nav-item {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-decoration: none; color: var(--text-muted); background: none; border: none;
  cursor: pointer; font-size: 0.5625rem; font-weight: 600; gap: 0.12rem;
  padding: 0.15rem 0; min-height: 0;
  -webkit-tap-highlight-color: transparent;
}
.bottom-nav .nav-item__icon {
  width: 1.875rem; height: 1.875rem;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--radius-full);
  transition: transform 0.28s cubic-bezier(0.34, 1.45, 0.64, 1), background 0.22s ease, box-shadow 0.22s ease;
}
.bottom-nav .nav-item__icon .material-symbols-outlined { font-size: 1.375rem; }
.bottom-nav .nav-item__icon--active {
  background: var(--brand-soft-bg);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22);
}
.bottom-nav .nav-item.active { color: var(--brand-orange); }
.bottom-nav .nav-item.active .nav-item__label { font-weight: 700; }
.bottom-nav .nav-item--tap .nav-item__icon {
  transform: scale(0.78);
}
.bottom-nav .nav-item:active .nav-item__icon {
  transform: scale(0.88);
}
.bottom-nav .fab-wrap { display: none; }

/* Segmented tabs */
.segmented-tabs {
  display: flex; gap: 1.5rem; padding: 0 var(--margin-mobile);
  border-bottom: 1px solid var(--divider); margin-top: 1rem;
}
.segmented-tabs button {
  padding-bottom: 0.5rem; border: none; background: none; cursor: pointer;
  font-size: 1rem; font-weight: 600; color: var(--text-muted);
  border-bottom: 2px solid transparent; transition: all 0.2s;
}
.segmented-tabs button.active { color: var(--brand-orange); border-bottom-color: var(--brand-orange); }

/* Search bar */
.search-row {
  display: flex; gap: 0.5rem; align-items: center;
  padding: 0 var(--margin-mobile); margin-top: 1rem;
}
.search-input-wrap {
  flex: 1; display: flex; align-items: center; gap: 0.5rem;
  background: var(--surface-container-low); border-radius: var(--radius-full);
  height: 3rem; padding: 0 1rem;
}
.search-input-wrap input {
  flex: 1; border: none; background: transparent; outline: none;
  font-size: 0.875rem; font-family: inherit;
}
.filter-btn {
  background: var(--brand-soft-bg); color: var(--brand-orange);
  border: none; border-radius: var(--radius-full); width: 3rem; height: 3rem;
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}

/* Cards */
.card { background: white; border-radius: var(--radius-xl); overflow: hidden; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
.card-padded { padding: 1rem; }

.product-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; padding: 0 var(--margin-mobile); }
.product-grid-card { background: white; border-radius: var(--radius-xl); overflow: hidden; box-shadow: 0 1px 4px rgba(0,0,0,0.06); cursor: pointer; }
.product-grid-card .img-wrap { position: relative; aspect-ratio: 1; }
.product-grid-card img { width: 100%; height: 100%; object-fit: cover; }
.product-grid-card .badge {
  position: absolute; top: 0.5rem; left: 0.5rem;
  padding: 0.125rem 0.5rem; border-radius: var(--radius-sm);
  font-size: 0.625rem; font-weight: 700; color: white;
}
.product-grid-card .info { padding: 0.75rem; }
.product-grid-card h4 { font-size: 0.875rem; font-weight: 700; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; white-space: normal; }
.product-meta-line { font-size: 0.6875rem; color: var(--text-muted); margin: 0.25rem 0 0; }
.product-location { display: flex; align-items: center; gap: 0.15rem; font-size: 0.6875rem; color: var(--text-muted); margin-top: 0.25rem; }
.product-grid-card .tags { display: flex; gap: 0.25rem; margin-top: 0.25rem; flex-wrap: wrap; }
.product-grid-card .tag { font-size: 0.5625rem; padding: 0.125rem 0.375rem; background: var(--surface-container-low); border-radius: var(--radius-sm); color: var(--text-secondary); }
.product-grid-card .footer { display: flex; justify-content: space-between; align-items: center; margin-top: 0.5rem; }
.product-grid-card .price { color: var(--price-red); font-weight: 700; font-size: 1rem; }
.product-grid-card .add-btn {
  width: 2rem; height: 2rem; border-radius: var(--radius-full);
  background: var(--primary-container); color: white; border: none; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}

.product-list-stack {
  display: flex;
  flex-direction: column;
  gap: 0.625rem;
  padding: 0.375rem var(--margin-mobile) 1rem;
}
.product-list-card {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.625rem 0.75rem 0.625rem 0.625rem;
  background: #fff;
  border-radius: var(--radius-xl);
  border: 1px solid rgba(232, 232, 237, 0.65);
  box-shadow: 0 1px 6px rgba(26, 28, 29, 0.04);
  cursor: pointer;
}
.product-list-card__thumb {
  width: 5.5rem;
  height: 5.5rem;
  border-radius: var(--radius-lg);
  overflow: hidden;
  position: relative;
  flex-shrink: 0;
  background: var(--surface-container-low);
}
.product-list-card__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.product-list-card__thumb .badge {
  position: absolute;
  top: 0.35rem;
  left: 0.35rem;
  padding: 0.1rem 0.4rem;
  border-radius: var(--radius-sm);
  font-size: 0.5625rem;
  font-weight: 700;
  color: #fff;
  max-width: calc(100% - 0.5rem);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.product-list-card__body {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  padding: 0.125rem 0;
}
.product-list-card__title {
  font-weight: 600;
  font-size: 0.875rem;
  line-height: 1.4;
  color: var(--text-primary);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.product-list-card__meta {
  font-size: 0.6875rem;
  color: var(--text-muted);
  line-height: 1.35;
}
.product-list-card__tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
}
.product-list-card__tag {
  font-size: 0.5625rem;
  padding: 0.125rem 0.4rem;
  background: var(--surface-container-low);
  border-radius: var(--radius-sm);
  color: var(--text-secondary);
}
.product-list-card__footer {
  margin-top: auto;
  padding-top: 0.125rem;
}
.product-list-card__price-row {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
}
.product-list-card__price {
  color: var(--price-red);
  font-weight: 700;
  font-size: 1rem;
  letter-spacing: -0.02em;
}
.product-list-card__stock {
  font-size: 0.6875rem;
  color: var(--text-muted);
}
.product-list-card__location {
  display: flex;
  align-items: center;
  gap: 0.1rem;
  font-size: 0.625rem;
  color: var(--text-muted);
  margin-top: 0.15rem;
  line-height: 1.2;
}
.product-list-card__location .material-symbols-outlined {
  font-size: 0.75rem;
  opacity: 0.85;
}
.product-list-card__chevron {
  flex-shrink: 0;
  font-size: 1.125rem;
  color: var(--divider);
  margin-left: -0.125rem;
}

/* Chips / tabs */
.chip-row { display: flex; gap: 0.5rem; overflow-x: auto; padding: 0.75rem var(--margin-mobile); }
.chip-row--grid4 {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
  overflow: visible;
  padding: 0;
}
.chip-row--grid4 .chip {
  text-align: center;
  font-size: 0.75rem;
  padding: 0.45rem 0.35rem;
  line-height: 1.25;
}
.chip {
  flex-shrink: 0; padding: 0.375rem 0.875rem; border-radius: var(--radius-full);
  border: 1px solid var(--divider); background: white; font-size: 0.8125rem;
  cursor: pointer; transition: all 0.15s;
}
.chip.active {
  background: var(--primary-container);
  color: white;
  border-color: var(--primary-container);
  font-weight: 600;
}

.compliance-alert {
  margin: 0 var(--margin-mobile) 0.75rem;
  padding: 0.75rem 1rem;
  border-radius: var(--radius-md);
  font-size: 0.8125rem;
  line-height: 1.45;
}
.compliance-alert--error {
  background: #f0f0f0;
  color: #262626;
  border: 1px solid #d4d4d4;
}
.compliance-alert--warn {
  background: #f5f5f5;
  color: #404040;
  border: 1px solid #d4d4d4;
}

/* ── ReptileCascadeFilter 多级联动筛选 ── */
.rcf {
  --rcf-brand: var(--brand-orange, #0a0a0a);
  --rcf-brand-soft: var(--brand-soft-bg, #f0f0f0);
  --rcf-muted: var(--text-muted, #757575);
  --rcf-border: var(--divider, #e0e0e0);
  --rcf-disabled-bg: #ececec;
  --rcf-disabled-fg: #bdbdbd;
}
.rcf--embedded {
  padding: 0 var(--margin-mobile);
}
.rcf-section { margin-bottom: 1rem; }
.rcf-heading {
  display: flex; align-items: baseline; gap: 0.5rem;
  margin: 0 0 0.5rem; font-size: 0.875rem; font-weight: 700;
}
.rcf-meta { font-size: 0.6875rem; font-weight: 400; color: var(--rcf-muted); }
.rcf-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.rcf-chips--grid4 {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
}
.rcf-chips--scroll {
  flex-wrap: nowrap; overflow-x: auto; padding-bottom: 0.25rem; scrollbar-width: thin;
}
.rcf-chips--wrap { flex-wrap: wrap; }
.rcf-chip--subgroup { display: inline-flex; align-items: center; gap: 0.375rem; }
.rcf-chip__count {
  font-size: 0.625rem; font-weight: 600; opacity: 0.75;
  background: rgba(0,0,0,0.06); padding: 0.0625rem 0.375rem; border-radius: 999px;
}
.rcf-chip--active .rcf-chip__count { background: rgba(255,255,255,0.25); }
.rcf-step-header {
  display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem;
}
.rcf-breadcrumb {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.125rem;
  font-size: 0.6875rem; color: var(--rcf-muted); margin-bottom: 0.5rem;
}
.rcf-breadcrumb__sep { margin: 0 0.25rem; opacity: 0.6; }
.rcf-chip--lg {
  flex-direction: column; min-width: 3.5rem; padding: 0.625rem 0.75rem;
  gap: 0.25rem; border-radius: var(--radius-lg, 0.75rem);
}
.rcf-chip__cat-icon { font-size: 1.375rem; }
.rcf-done-hint {
  font-size: 0.8125rem; color: var(--rcf-muted); text-align: center;
  padding: 1rem 0.5rem; margin: 0;
}
.rcf-done-hint strong { color: var(--text-primary, #212121); }
.rcf-back {
  display: inline-flex; align-items: center; gap: 0.25rem;
  padding: 0.25rem 0.5rem; margin: 0 0 0.5rem;
  border: none; background: var(--rcf-brand-soft); color: var(--rcf-brand);
  border-radius: var(--radius-full, 999px); font-size: 0.8125rem; font-weight: 600; cursor: pointer;
}
.rcf-back .material-symbols-outlined { font-size: 1rem; }
.rcf-subgroup { margin-bottom: 0.75rem; }
.rcf-subgroup:last-child { margin-bottom: 0; }
.rcf-subgroup__label {
  display: block; font-size: 0.6875rem; font-weight: 700;
  color: var(--rcf-muted); margin-bottom: 0.375rem; letter-spacing: 0.02em;
}
.rcf-chip {
  flex-shrink: 0; padding: 0.375rem 0.875rem;
  border: 1px solid var(--rcf-border); border-radius: var(--radius-full, 999px);
  background: #fff; font-size: 0.8125rem; cursor: pointer;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.rcf-chips--grid4 .rcf-chip {
  padding: 0.45rem 0.35rem;
  font-size: 0.75rem;
  text-align: center;
  border-radius: var(--radius-md, 0.5rem);
  line-height: 1.25;
  min-height: 2.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
}
.rcf-chips--grid4 .rcf-chip--lg {
  flex-direction: column;
  min-width: 0;
  padding: 0.5rem 0.25rem;
  gap: 0.2rem;
  font-size: 0.6875rem;
}
.rcf-chip:hover:not(.rcf-chip--active) {
  border-color: var(--rcf-brand); background: var(--rcf-brand-soft);
}
.rcf-chip--active {
  background: var(--rcf-brand); border-color: var(--rcf-brand);
  color: #fff; font-weight: 600;
}
.rcf-colors {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
}
.rcf-color {
  display: flex; flex-direction: column; align-items: center; gap: 0.25rem;
  padding: 0.375rem 0.25rem; min-width: 0; width: 100%; border: 2px solid transparent;
  border-radius: 10px; background: transparent; cursor: pointer;
}
.rcf-color--available:hover:not(.rcf-color--selected) {
  background: #fafafa; border-color: var(--rcf-border);
}
.rcf-color--selected {
  border-color: var(--rcf-brand); background: var(--rcf-brand-soft);
}
.rcf-color--disabled { cursor: not-allowed; opacity: 0.55; }
.rcf-color--disabled .rcf-color__swatch {
  background: var(--rcf-disabled-bg) !important;
  border: 1px dashed var(--rcf-disabled-fg);
}
.rcf-color--disabled .rcf-color__label { color: var(--rcf-disabled-fg); }
.rcf-color__swatch {
  width: 1.75rem; height: 1.75rem; border-radius: 50%;
  border: 2px solid rgba(0,0,0,0.08);
  box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
}
.rcf-color--selected .rcf-color__swatch {
  border-color: var(--rcf-brand);
  box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--rcf-brand);
}
.rcf-color__label { font-size: 0.625rem; color: var(--rcf-muted); text-align: center; word-break: break-all; }
.rcf-color--selected .rcf-color__label { color: var(--rcf-brand); font-weight: 600; }
.rcf-genes {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
}
.rcf-gene-tag {
  padding: 0.45rem 0.35rem; border-radius: 8px;
  background: #f5f5f5; border: 1px solid var(--rcf-border);
  font-size: 0.75rem; cursor: pointer; transition: all 0.15s;
  text-align: center; line-height: 1.25; min-height: 2.25rem;
  display: flex; align-items: center; justify-content: center;
}
.rcf-gene-tag--active {
  background: var(--rcf-brand); border-color: var(--rcf-brand); color: #fff;
}
.rcf-empty {
  margin: 0; padding: 0.75rem; border-radius: 8px; background: #fafafa;
  font-size: 0.8125rem; color: var(--rcf-muted); text-align: center;
}
.rcf-summary {
  margin-top: 0.5rem; padding-top: 0.75rem;
  border-top: 1px dashed var(--rcf-border);
}
.rcf-summary__label {
  display: block; font-size: 0.625rem; color: var(--rcf-muted);
  text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 0.25rem;
}
.rcf-summary__value { font-size: 0.8125rem; font-weight: 600; line-height: 1.4; }
.modal-sheet--filter { max-height: 92vh; overflow-y: auto; }
.modal-overlay--motion { align-items: flex-end; }
.modal-sheet--motion { will-change: transform, opacity; }
.filter-section--divider {
  border-top: 1px solid var(--divider);
  margin-top: 0.5rem; padding-top: 0.25rem;
}

.sort-bar {
  display: flex; align-items: center; gap: 1rem; padding: 0.5rem var(--margin-mobile);
  font-size: 0.8125rem; color: var(--text-muted); border-bottom: 1px solid var(--divider);
}
.sort-bar button { border: none; background: none; cursor: pointer; color: inherit; font-family: inherit; padding: 0.25rem 0; }
.sort-bar button.active { color: var(--primary-container); font-weight: 700; }

.sort-result-bar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0.625rem var(--margin-mobile) 0.75rem;
  font-size: 0.8125rem; color: var(--text-secondary);
}
.sort-result-bar__count strong { color: var(--text-primary); font-weight: 700; }
.sort-result-bar__sort {
  display: inline-flex; align-items: center; gap: 0.15rem; position: relative;
}
.sort-result-bar__select {
  appearance: none; border: none; background: transparent;
  font-family: inherit; font-size: 0.8125rem; font-weight: 700;
  color: var(--text-primary); padding-right: 1.25rem; cursor: pointer;
}
.sort-result-bar__chev {
  position: absolute; right: 0; pointer-events: none; font-size: 1.125rem; color: var(--text-muted);
}

.cart-promo-banner {
  display: flex; align-items: center; gap: 0.5rem;
  margin: 0 var(--margin-mobile) 0.75rem; padding: 0.625rem 0.875rem;
  background: var(--brand-soft-bg); border-radius: var(--radius-md);
  font-size: 0.75rem; color: var(--primary); font-weight: 600;
}
.cart-row {
  margin: 0 var(--margin-mobile) 0.75rem; padding: 0.875rem;
  background: #fff; border-radius: var(--radius-xl);
  box-shadow: 0 1px 4px rgba(0,0,0,0.06);
  display: flex; gap: 0.75rem; align-items: flex-start;
}
.cart-row__check {
  width: 1.25rem; height: 1.25rem; accent-color: var(--brand-orange); margin-top: 2rem; flex-shrink: 0;
}
.cart-row__img { width: 5rem; height: 5rem; border-radius: var(--radius-md); object-fit: cover; flex-shrink: 0; }
.cart-row__body { flex: 1; min-width: 0; }
.cart-row__title { font-weight: 700; font-size: 0.875rem; line-height: 1.35; }
.cart-row__meta { font-size: 0.6875rem; color: var(--text-muted); margin-top: 0.25rem; }
.cart-row__foot { display: flex; justify-content: space-between; align-items: center; margin-top: 0.5rem; }
.cart-qty {
  display: inline-flex; align-items: center; gap: 0.5rem;
  background: var(--surface-container-low); border-radius: var(--radius-full); padding: 0.125rem 0.5rem;
}
.cart-qty button { border: none; background: none; cursor: pointer; font-size: 1rem; color: var(--text-secondary); width: 1.5rem; }

/* Buttons */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
  padding: 0.75rem 1.5rem; border-radius: var(--radius-full); border: none;
  font-family: inherit; font-weight: 600; font-size: 0.9375rem; cursor: pointer;
  transition: transform 0.15s, opacity 0.15s;
}
.btn:active { transform: scale(0.97); }
.btn-primary { background: var(--brand-orange); color: white; }
.btn-primary.glow { box-shadow: 0 4px 14px rgba(0, 0, 0, 0.39); }
.btn-secondary { background: white; color: var(--text-primary); border: 1px solid var(--divider); }
.btn-dark { background: var(--primary-container); color: white; }
.btn-block { width: 100%; }
.btn-sm { padding: 0.5rem 1rem; font-size: 0.8125rem; }

/* Form */
.form-section { background: white; border-radius: var(--radius-xl); margin: 0.75rem var(--margin-mobile); padding: 1rem; }
.form-section h3 { font-size: 0.9375rem; font-weight: 700; margin-bottom: 0.75rem; }
.form-input {
  width: 100%; padding: 0.75rem; border: 1px solid var(--divider);
  border-radius: var(--radius-md); font-family: inherit; font-size: 0.875rem;
  outline: none; transition: border-color 0.2s;
}
.form-input:focus { border-color: var(--brand-orange); }
.form-label { font-size: 0.8125rem; color: var(--text-muted); margin-bottom: 0.375rem; display: block; }

.toggle-group { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.5rem; }
.toggle-group--auto { display: flex; flex-wrap: wrap; }
.toggle-btn {
  padding: 0.5rem 1rem; border-radius: var(--radius-full); border: 1px solid var(--divider);
  background: white; cursor: pointer; font-size: 0.8125rem; font-family: inherit;
}
.toggle-btn.active { border-color: var(--primary-container); color: var(--primary-container); background: var(--brand-soft-bg); }

/* Modal */
.modal-overlay {
  position: fixed; inset: 0; z-index: 100;
  background: rgba(0,0,0,0.45); backdrop-filter: blur(4px);
  display: flex; align-items: flex-end; justify-content: center;
}
.modal-sheet {
  width: 100%; max-width: 480px; max-height: 85vh; overflow-y: auto;
  background: white; border-radius: var(--radius-xl) var(--radius-xl) 0 0;
  padding: 1.25rem var(--margin-mobile) calc(1.25rem + var(--safe-bottom));
}
.modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.25rem; }
.modal-header h2 { font-size: 1.125rem; font-weight: 700; }
.modal-footer { display: flex; gap: 0.75rem; margin-top: 1.5rem; position: sticky; bottom: 0; background: white; padding-top: 0.75rem; }

/* Filter modal specifics */
.filter-section { margin-bottom: 1.25rem; }
.filter-section h4 { font-size: 0.875rem; font-weight: 700; margin-bottom: 0.75rem; }
.category-icons { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0.5rem; text-align: center; }
.category-icon-btn {
  display: flex; flex-direction: column; align-items: center; gap: 0.375rem;
  border: none; background: none; cursor: pointer; font-size: 0.75rem; color: var(--text-secondary);
}
.category-icon-btn .icon-wrap {
  width: 3rem; height: 3rem; border-radius: var(--radius-lg);
  display: flex; align-items: center; justify-content: center;
}
.category-icon-btn.active .icon-wrap { outline: 2px solid var(--brand-orange); }
.category-icon-btn.active { color: var(--brand-orange); font-weight: 700; }

.color-swatches { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.color-swatch {
  width: 2rem; height: 2rem; border-radius: var(--radius-full); border: 2px solid transparent;
  cursor: pointer;
}
.color-swatch.active { border-color: var(--brand-orange); box-shadow: 0 0 0 2px white, 0 0 0 4px var(--brand-orange); }

/* Sticky action bar */
.sticky-bar {
  position: fixed; bottom: 0; left: 0; right: 0; z-index: 45;
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.75rem var(--margin-mobile) calc(0.75rem + var(--safe-bottom));
  background: white; border-top: 1px solid var(--divider);
}
.sticky-bar.with-nav { bottom: var(--nav-height); }

/* Menu list */
.menu-group { margin: 0.75rem var(--margin-mobile); background: white; border-radius: var(--radius-xl); overflow: hidden; }
.menu-group-label { font-size: 0.75rem; color: var(--text-muted); padding: 0.75rem 1rem 0.25rem; }
.menu-item {
  display: flex; align-items: center; gap: 0.75rem; padding: 0.875rem 1rem;
  border: none; background: none; width: 100%; text-align: left; cursor: pointer;
  font-family: inherit; font-size: 0.9375rem; border-bottom: 1px solid var(--divider);
}
.menu-item:last-child { border-bottom: none; }
.menu-item .icon { width: 2rem; height: 2rem; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; }
.menu-item .arrow { margin-left: auto; color: var(--text-muted); }

/* Profile hero */
.profile-hero {
  background: linear-gradient(135deg, var(--brand-orange), var(--primary-container));
  padding: 2rem var(--margin-mobile) 3rem; color: white;
}
.profile-hero .user-row { display: flex; align-items: center; gap: 0.75rem; }
.profile-hero .avatar { width: 4rem; height: 4rem; border-radius: var(--radius-full); border: 2px solid white; object-fit: cover; }
.balance-card {
  margin: -2rem var(--margin-mobile) 0.75rem; background: white; border-radius: var(--radius-xl);
  padding: 1.25rem; box-shadow: 0 4px 20px rgba(0,0,0,0.08);
}

/* Safety banner */
.safety-banner {
  margin: 1rem var(--margin-mobile); padding: 1rem; border-radius: var(--radius-xl);
  background: var(--brand-orange); color: white; display: flex; align-items: center; gap: 0.75rem;
  cursor: pointer;
}

/* Category grid home */
.category-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0.5rem; text-align: center; padding: 0 var(--margin-mobile); margin-top: 1.5rem; }
.category-grid-item { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; cursor: pointer; }
.category-grid-item .icon-box { width: 3rem; height: 3rem; border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; }
.category-grid-item span { font-size: 0.75rem; color: var(--text-secondary); }

/* 虫类子分类网格（分类页二级入口） */
.subgroup-picker { padding-top: 0.5rem; padding-bottom: 1rem; }
.subgroup-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.75rem;
}
.subgroup-grid-item {
  display: flex; flex-direction: column; align-items: center; gap: 0.375rem;
  padding: 0.875rem 0.25rem; border-radius: var(--radius-lg);
  background: var(--surface-container, #f5f5f5); cursor: pointer;
  transition: background 0.15s, transform 0.15s;
}
.subgroup-grid-item:active { transform: scale(0.97); background: var(--brand-soft-bg, #f0f0f0); }
.subgroup-grid-item__icon {
  width: 2.75rem; height: 2.75rem; border-radius: var(--radius-lg);
  background: white; display: flex; align-items: center; justify-content: center;
  color: var(--primary, #404040);
}
.subgroup-grid-item__icon .material-symbols-outlined { font-size: 1.375rem; }
.subgroup-grid-item__name { font-size: 0.8125rem; font-weight: 600; color: var(--text-primary, #212121); }
.subgroup-grid-item__count { font-size: 0.625rem; color: var(--text-muted, #757575); }
.subgroup-grid--few { grid-template-columns: repeat(2, 1fr); max-width: 20rem; }
/* FAB */
.fab-publish {
  position: fixed; right: var(--margin-mobile); bottom: calc(var(--nav-height) + 1rem);
  background: var(--primary-container); color: white; border: none; border-radius: var(--radius-full);
  padding: 0.875rem 1.25rem; display: flex; align-items: center; gap: 0.5rem;
  font-weight: 700; cursor: pointer; box-shadow: 0 4px 14px rgba(155, 69, 0, 0.4); z-index: 30;
}

/* Empty state */
.empty-state { text-align: center; padding: 3rem var(--margin-mobile); }
.empty-state img { width: 8rem; height: 8rem; margin: 0 auto 1rem; opacity: 0.6; }

/* Toast */
.toast {
  position: fixed; top: 5rem; left: 50%; transform: translateX(-50%);
  background: rgba(0,0,0,0.8); color: white; padding: 0.625rem 1.25rem;
  border-radius: var(--radius-full); font-size: 0.8125rem; z-index: 200;
  animation: fadeInOut 2s ease forwards;
}
.toast--motion {
  animation: none;
  transform: translateX(-50%);
  will-change: transform, opacity;
  max-width: min(90vw, 22rem);
  text-align: center;
  pointer-events: none;
}
@keyframes fadeInOut {
  0%, 100% { opacity: 0; } 10%, 80% { opacity: 1; }
}

/* Utility */
.text-muted { color: var(--text-muted); }
.text-price { color: var(--price-red); font-weight: 700; }
.text-primary-brand { color: var(--brand-orange); }
.section-title { font-size: 1.125rem; font-weight: 700; padding: 0 var(--margin-mobile); margin-bottom: 0.5rem; }
.mt-md { margin-top: 1rem; }
.mt-lg { margin-top: 1.5rem; }
.px { padding-left: var(--margin-mobile); padding-right: var(--margin-mobile); }

/* ── AI 专属功能 ── */
@keyframes spin { to { transform: rotate(360deg); } }
.ai-badge {
  display: inline-block;
  font-size: 0.625rem;
  font-weight: 700;
  color: var(--brand-orange);
  background: var(--brand-soft-bg);
  padding: 0.2rem 0.5rem;
  border-radius: 999px;
}
.ai-badge--center { margin-top: 0.5rem; }
.ai-entry { cursor: pointer; }
.ai-entry__icon {
  width: 3rem; height: 3rem; border-radius: 0.75rem;
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.ai-entry__icon--orange { background: var(--brand-soft-bg); }
.ai-entry__icon--green { background: rgba(152, 243, 175, 0.3); }
.ai-entry__icon--blue { background: rgba(200, 217, 255, 0.5); }

.ai-scanner {
  background: #111; color: white; min-height: 100dvh;
  display: flex; flex-direction: column;
}
.ai-scanner__hint {
  text-align: center; font-size: 0.8125rem; opacity: 0.75;
  padding: 0 1rem 0.75rem; margin: 0;
}
.ai-scanner__viewport {
  flex: 1; min-height: 50vh; position: relative;
  display: flex; align-items: center; justify-content: center;
  margin: 0 1rem;
}
.ai-scanner__frame {
  width: 16rem; height: 16rem; border: 2px dashed rgba(255,255,255,0.45);
  border-radius: 1rem; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
}
.ai-scanner__preview {
  width: 100%; max-height: 50vh; object-fit: contain; border-radius: 0.75rem;
}
.ai-scanner__loading {
  position: absolute; inset: 0; background: rgba(0,0,0,0.55);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 0.75rem; border-radius: 0.75rem; font-size: 0.875rem;
}
.ai-scanner__meta {
  text-align: center; font-size: 0.6875rem; opacity: 0.55; margin: 0.75rem 0;
}
.ai-scanner__controls {
  display: flex; justify-content: center; align-items: center; gap: 2rem;
  padding: 1.5rem 1rem 2.5rem;
}
.ai-scanner__side-btn {
  background: rgba(255,255,255,0.15); border: none; border-radius: 50%;
  width: 3rem; height: 3rem; color: white; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.ai-scanner__side-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.ai-scanner__shutter {
  width: 4.5rem; height: 4.5rem; border-radius: 50%;
  border: 4px solid white; background: var(--brand-orange); cursor: pointer;
}
.ai-scanner__shutter:disabled { opacity: 0.5; cursor: not-allowed; }
.ai-scanner__shutter--video::after {
  content: '';
  display: block;
  width: 1.25rem;
  height: 1rem;
  margin: 0 auto;
  background: white;
  border-radius: 0.2rem;
}
.ai-scanner__subhint {
  text-align: center;
  font-size: 0.6875rem;
  opacity: 0.5;
  margin: -1.25rem 0 1.5rem;
  padding: 0 1rem;
}

.sell-media-grid {
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.sell-media-add,
.sell-media-item {
  width: 5rem;
  height: 5rem;
  border-radius: 0.75rem;
  position: relative;
  overflow: hidden;
}
.sell-media-add {
  border: 2px dashed var(--divider);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.sell-media-add--video { border-style: dotted; }
.sell-media-item img,
.sell-media-item video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0.75rem;
}
.sell-media-remove {
  position: absolute;
  top: -0.35rem;
  right: -0.35rem;
  width: 1.25rem;
  height: 1.25rem;
  border-radius: 50%;
  border: none;
  background: var(--price-red);
  color: white;
  font-size: 0.75rem;
  cursor: pointer;
}

.morph-result-meta {
  margin-bottom: 0.25rem;
  background: var(--surface, #fff);
  border: 1px solid var(--divider);
}
.morph-result-meta__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.75rem;
  font-size: 0.8125rem;
  padding: 0.35rem 0;
}
.morph-result-meta__row--top { padding-bottom: 0.5rem; }
.morph-result-meta__label { color: var(--text-muted, #888); flex-shrink: 0; }
.morph-result-meta__value { font-weight: 600; text-align: right; }
.morph-result-meta__confidence { padding-top: 0.25rem; border-top: 1px solid var(--divider); margin-top: 0.25rem; }
.morph-result-meta__conf-wrap { display: flex; align-items: center; gap: 0.35rem; }
.morph-result-meta__conf-value { font-size: 1.125rem; font-weight: 700; }
.morph-result-meta__tier {
  font-size: 0.625rem;
  font-weight: 700;
  padding: 0.15rem 0.4rem;
  border-radius: 999px;
  background: var(--brand-soft-bg);
  color: var(--brand-orange);
}
.morph-result-meta__tier--high { background: rgba(0, 0, 0, 0.08); color: #262626; }
.morph-result-meta__tier--very-low { background: rgba(0, 0, 0, 0.12); color: #404040; }
.morph-result-meta__bar {
  height: 0.375rem;
  border-radius: 999px;
  background: var(--divider);
  overflow: hidden;
}
.morph-result-meta__bar-fill {
  height: 100%;
  border-radius: 999px;
  transition: width 0.35s ease;
}

.morph-result-hero {
  background: var(--divider);
  padding: 0.75rem var(--margin-mobile) 0.5rem;
}
.morph-result-hero__img {
  width: 100%;
  max-height: 16rem;
  object-fit: cover;
  border-radius: var(--radius-md);
  display: block;
}
.morph-result-hero__placeholder {
  height: 10rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--surface, #fff);
  border-radius: var(--radius-md);
}
.morph-result-hero__caption {
  font-size: 0.6875rem;
  text-align: center;
  margin: 0.35rem 0 0;
}

/* ── 专家咨询 ── */
.consult-chat-banner {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.625rem 1rem;
  background: var(--brand-soft-bg);
  border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
.consult-chat-banner--expired {
  background: #f0f0f0;
  border-bottom-color: rgba(0, 0, 0, 0.12);
}
.consult-chat-banner--expired .material-symbols-outlined { color: #737373; }

/* 存证拍摄步骤 */
.evidence-step-progress {
  display: flex;
  justify-content: space-between;
  padding: 0.75rem 1rem 0.5rem;
  gap: 0.35rem;
}
.evidence-step-progress__dot {
  flex: 1;
  text-align: center;
  opacity: 0.45;
  font-size: 0.625rem;
}
.evidence-step-progress__dot span {
  display: inline-flex;
  width: 1.5rem;
  height: 1.5rem;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.35);
  font-weight: 700;
  font-size: 0.75rem;
  margin-bottom: 0.2rem;
}
.evidence-step-progress__dot.active { opacity: 1; }
.evidence-step-progress__dot.active span {
  background: var(--brand-orange);
  border-color: var(--brand-orange);
  color: white;
}
.evidence-step-progress__dot.current span { box-shadow: 0 0 0 2px rgba(0,0,0,0.45); }
.evidence-step-progress__dot small {
  display: block;
  line-height: 1.2;
  color: #aaa;
}
.evidence-media-row--dark .evidence-thumb {
  width: 4rem;
  height: 4rem;
  border-radius: 0.5rem;
  object-fit: cover;
  background: #222;
}
.evidence-thumb-wrap {
  position: relative;
  flex-shrink: 0;
}
.evidence-thumb-remove {
  position: absolute;
  top: -0.35rem;
  right: -0.35rem;
  width: 1.125rem;
  height: 1.125rem;
  border-radius: 50%;
  border: none;
  background: rgba(0,0,0,0.75);
  color: white;
  font-size: 0.875rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* 引导拍摄存证 */
.evidence-record-page { padding-bottom: 5rem; }
.evidence-record-order {
  margin: 0.75rem 1rem;
  display: flex;
  gap: 0.75rem;
  align-items: center;
}
.evidence-record-order img {
  width: 3.5rem;
  height: 3.5rem;
  border-radius: var(--radius-md);
  object-fit: cover;
}
.evidence-record-voice-toggle {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.75rem 1rem;
  background: var(--brand-soft-bg);
  border-radius: var(--radius-lg);
}
.evidence-prep-item {
  display: flex;
  gap: 0.625rem;
  align-items: flex-start;
  padding: 0.75rem;
  margin-bottom: 0.5rem;
  border: 1px solid var(--divider);
  border-radius: var(--radius-lg);
  cursor: pointer;
}
.evidence-prep-item.checked {
  border-color: rgba(0,0,0,0.45);
  background: var(--brand-soft-bg);
}
.evidence-prep-item input { margin-top: 0.2rem; flex-shrink: 0; }
.evidence-prep-item__icon {
  font-size: 1.25rem;
  color: var(--brand-orange);
  flex-shrink: 0;
}
.evidence-guide-section {
  margin-bottom: 0.75rem;
  padding: 0.75rem;
  background: var(--surface-variant, #f8f8f8);
  border-radius: var(--radius-md);
}
.evidence-guide-list {
  margin: 0;
  padding-left: 1.125rem;
  font-size: 0.75rem;
  line-height: 1.55;
  color: var(--text-muted, #666);
}
.evidence-guide-list li { margin-bottom: 0.25rem; }
.evidence-record-actions { gap: 0.5rem; }
.evidence-camera-wrap {
  position: relative;
  background: #000;
  min-height: 60vh;
  display: flex;
  align-items: center;
  justify-content: center;
}
.evidence-camera-preview {
  width: 100%;
  max-height: 70vh;
  object-fit: cover;
}
.evidence-recording-badge {
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  display: flex;
  align-items: center;
  gap: 0.35rem;
  background: rgba(220, 38, 38, 0.85);
  color: white;
  padding: 0.25rem 0.625rem;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 700;
}
.evidence-recording-dot {
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: white;
  animation: evidence-rec-blink 1s infinite;
}
@keyframes evidence-rec-blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.3; }
}
.evidence-cue-overlay {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 1rem;
  background: linear-gradient(transparent, rgba(0,0,0,0.85));
  color: white;
}
.evidence-cue-phase {
  display: inline-block;
  font-size: 0.6875rem;
  font-weight: 700;
  background: var(--brand-orange);
  padding: 0.125rem 0.5rem;
  border-radius: 999px;
  margin-bottom: 0.35rem;
}
.evidence-cue-overlay p {
  margin: 0;
  font-size: 0.875rem;
  line-height: 1.5;
}
.evidence-preview-video {
  width: 100%;
  border-radius: var(--radius-lg);
  background: #111;
  max-height: 50vh;
}

.consult-expert-card,
.consult-session-card {
  margin: 0.75rem 1rem;
  display: flex;
  gap: 0.75rem;
  align-items: center;
}
.consult-session-card { cursor: pointer; }
.consult-pay-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 200;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  padding: 1rem;
}
.consult-pay-modal {
  width: 100%;
  max-width: 24rem;
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
}

/* ── 商家数据图表 ── */
.analytics-chart {
  display: flex;
  align-items: flex-end;
  gap: 0.35rem;
  height: 7rem;
  padding-top: 0.5rem;
}
.analytics-chart__col {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 0;
}
.analytics-chart__bar-wrap {
  width: 100%;
  height: 5.5rem;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: 2px;
}
.analytics-chart__bar {
  width: 42%;
  min-height: 2px;
  border-radius: 3px 3px 0 0;
  transition: height 0.3s ease;
}
.analytics-chart__bar--views { background: var(--brand-orange); opacity: 0.85; }
.analytics-chart__bar--orders { background: var(--secondary); opacity: 0.9; }
.analytics-chart__label {
  font-size: 0.5625rem;
  color: var(--text-muted, #888);
  margin-top: 0.25rem;
}
.analytics-legend {
  display: inline-block;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 2px;
  margin-right: 0.2rem;
  vertical-align: middle;
}
.analytics-legend--views { background: var(--brand-orange); }
.analytics-legend--orders { background: var(--secondary); }

/* 转化漏斗 */
.funnel-steps {
  display: flex;
  align-items: flex-end;
  gap: 0.35rem;
  overflow-x: auto;
  padding-bottom: 0.25rem;
}
.funnel-step {
  flex: 1;
  min-width: 3.5rem;
  text-align: center;
  background: var(--brand-soft-bg);
  border-radius: var(--radius-md);
  padding: 0.625rem 0.35rem;
}
.funnel-step__label {
  font-size: 0.625rem;
  color: var(--text-secondary);
  margin-bottom: 0.25rem;
}
.funnel-step__value {
  font-weight: 700;
  font-size: 1rem;
  color: var(--primary);
}
.funnel-step__rate {
  font-size: 0.625rem;
  color: var(--brand-orange);
  margin-top: 0.15rem;
}
.funnel-step__arrow {
  flex-shrink: 0;
  color: var(--text-secondary);
  font-size: 0.75rem;
  padding-bottom: 1rem;
}

/* 骨架屏 */
.page-skeleton { display: flex; flex-direction: column; gap: 0.75rem; }
.page-skeleton__row {
  display: flex;
  gap: 0.75rem;
  align-items: center;
}
.page-skeleton__avatar,
.page-skeleton__line {
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.2s ease-in-out infinite;
  border-radius: var(--radius-md);
}
.page-skeleton__avatar {
  width: 3rem;
  height: 3rem;
  border-radius: 50%;
  flex-shrink: 0;
}
.page-skeleton__lines { flex: 1; display: flex; flex-direction: column; gap: 0.4rem; }
.page-skeleton__line { height: 0.75rem; }
.page-skeleton__line--title { width: 55%; }
.page-skeleton__line--sub { width: 80%; height: 0.625rem; }
.page-skeleton--compact .page-skeleton__line--title { width: 70%; }
.page-skeleton__hero {
  width: 100%;
  aspect-ratio: 1;
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.2s ease-in-out infinite;
}
.page-skeleton__detail-body { padding: 1rem; display: flex; flex-direction: column; gap: 0.5rem; }
.page-skeleton__line--price { height: 1rem; width: 30%; }
.page-skeleton__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem;
  padding: 0 1rem;
}
.page-skeleton__grid-item { display: flex; flex-direction: column; gap: 0.35rem; }
.page-skeleton__grid-img {
  width: 100%;
  aspect-ratio: 1;
  border-radius: var(--radius-md);
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.2s ease-in-out infinite;
}
@keyframes skeleton-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* 咨询状态 */
.consult-status {
  display: inline-block;
  font-size: 0.625rem;
  padding: 0.1rem 0.35rem;
  border-radius: 999px;
  font-weight: 600;
}
.consult-status--active { background: #f0f0f0; color: #262626; }
.consult-status--pending { background: #e8e8e8; color: #404040; }
.consult-status--expired { background: #F5F5F5; color: #757575; }
.consult-record-card {
  display: flex;
  gap: 0.75rem;
  align-items: center;
  margin-bottom: 0.625rem;
  cursor: pointer;
}

/* 验货媒体 */
.evidence-media-row {
  display: flex;
  gap: 0.5rem;
  overflow-x: auto;
}
.evidence-media {
  width: 5rem;
  height: 5rem;
  object-fit: cover;
  border-radius: var(--radius-md);
  flex-shrink: 0;
}
.evidence-media--video {
  background: #111;
}

/* 下拉刷新 */
.ptr-wrap { position: relative; }
.ptr-indicator {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  overflow: hidden;
  color: var(--text-muted);
  font-size: 0.75rem;
  transition: height 0.15s ease;
}
.ptr-indicator__icon { font-size: 1rem; }
.ptr-indicator__icon.spin { animation: ptr-spin 0.8s linear infinite; }
@keyframes ptr-spin { to { transform: rotate(360deg); } }

.ai-care { display: flex; flex-direction: column; min-height: 100dvh; padding-bottom: var(--safe-bottom); }
.ai-care__banner { padding: 0.75rem var(--margin-mobile); background: var(--brand-soft-bg); }
.ai-care__messages {
  flex: 1; overflow-y: auto; padding: 1rem var(--margin-mobile);
  display: flex; flex-direction: column; gap: 0.75rem;
}
.ai-care__bubble {
  max-width: 88%; padding: 0.75rem 1rem; border-radius: 1rem;
  font-size: 0.875rem; line-height: 1.5; white-space: pre-wrap;
}
.ai-care__bubble--bot {
  align-self: flex-start; background: white;
  border: 1px solid var(--divider); border-bottom-left-radius: 0.25rem;
}
.ai-care__bubble--user {
  align-self: flex-end; background: var(--brand-orange); color: white;
  border-bottom-right-radius: 0.25rem;
}
.ai-care__typing { opacity: 0.7; font-style: italic; }
.ai-care__suggestions {
  display: flex; gap: 0.5rem; overflow-x: auto;
  padding: 0  var(--margin-mobile) 0.75rem;
}
.ai-care__input-bar {
  display: flex; gap: 0.5rem; padding: 0.75rem var(--margin-mobile);
  border-top: 1px solid var(--divider); background: white;
}
.ai-care__input-bar .form-input { flex: 1; margin: 0; }

/* ── 温暖空状态（_42 及全站统一） ── */
.warm-empty, .search-empty-warm {
  padding: 1.5rem var(--margin-mobile) 2rem;
  text-align: center;
  background: linear-gradient(180deg, var(--brand-soft-bg) 0%, var(--surface) 45%);
}
.warm-empty--compact, .search-empty-warm--compact { padding: 1rem; background: transparent; }
.warm-empty__hero, .search-empty-warm__hero {
  display: flex; justify-content: center; margin-bottom: 1.25rem;
}
.warm-empty__illus, .search-empty-warm__illus {
  width: 11rem; height: 11rem; object-fit: cover; object-position: center 32%;
  border-radius: 1.75rem;
  box-shadow: 0 12px 32px rgba(118, 51, 0, 0.12);
  border: 4px solid #fff;
}
.warm-empty__title, .search-empty-warm__title {
  font-size: 1.125rem; font-weight: 700; color: var(--text-primary);
  margin: 0 0 0.35rem; line-height: 1.4;
}
.warm-empty__subtitle, .search-empty-warm__subtitle {
  font-size: 0.8125rem; color: var(--text-muted); margin: 0 0 1.25rem;
}
.warm-empty__card, .search-empty-warm__card {
  background: #fff; border-radius: var(--radius-xl);
  padding: 1rem 1.125rem; text-align: left;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
  margin-bottom: 1.25rem;
}
.warm-empty__card-label, .search-empty-warm__card-label {
  font-size: 0.8125rem; color: var(--text-secondary); margin: 0 0 0.75rem;
}
.warm-empty__tags, .search-empty-warm__tags { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.warm-empty__tag, .search-empty-warm__tag {
  border: none; cursor: pointer;
  padding: 0.45rem 0.875rem; border-radius: var(--radius-full);
  background: var(--brand-soft-bg); color: var(--primary);
  font-size: 0.8125rem; font-weight: 600; font-family: inherit;
}
.warm-empty__actions, .search-empty-warm__actions { display: flex; flex-direction: column; gap: 0.75rem; }
.warm-empty__btn, .search-empty-warm__btn-home,
.search-empty-warm__btn-support {
  display: flex; align-items: center; justify-content: center; gap: 0.5rem;
}
.warm-empty__btn--outline, .search-empty-warm__btn-support {
  background: #fff; border: 1px solid var(--divider); color: var(--text-secondary);
}

/* Trust platform v2 */
.trust-row { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.trust-badge {
  display: inline-flex; align-items: center; gap: 0.25rem;
  padding: 0.25rem 0.625rem; border-radius: var(--radius-full);
  background: var(--trust-green-bg); color: var(--trust-green);
  font-size: var(--text-xs); font-weight: 600;
}
.trust-badge .material-symbols-outlined { font-size: 0.875rem; }
.trust-panel {
  border: 1px solid var(--divider); border-radius: var(--radius-lg);
  background: var(--surface-container-lowest);
}
.trust-disclaimer { font-size: var(--text-xs); margin-bottom: 0.75rem; }
.evidence-item { padding: 0.75rem 0; border-top: 1px solid var(--divider); }
.evidence-item:first-of-type { border-top: none; padding-top: 0; }
.audit-banner {
  background: #f0f0f0; color: #404040; text-align: center;
  padding: 0.625rem var(--spacing-md); font-size: var(--text-sm); font-weight: 600;
}
.audit-banner--reject { background: #ededed; color: var(--error); }
.listing-status {
  display: inline-block; padding: 0.15rem 0.5rem; border-radius: var(--radius-full);
  font-size: var(--text-xs); font-weight: 600;
}
.listing-status--pending { background: #f0f0f0; color: #404040; }
.listing-status--approved { background: var(--trust-green-bg); color: var(--trust-green); }
.listing-status--rejected { background: #ededed; color: var(--error); }

/* ── 框选基因标注 ── */
.bbox-annotator-stage {
  position: relative;
  width: 100%;
  border-radius: var(--radius-lg);
  overflow: hidden;
  background: var(--surface-container-low);
  border: 1px solid var(--divider);
}
.bbox-annotator-img {
  display: block;
  width: 100%;
  max-height: 22rem;
  object-fit: contain;
  user-select: none;
  pointer-events: none;
}
.bbox-annotator-layer {
  position: absolute;
  inset: 0;
  cursor: crosshair;
}
.bbox-annotator-layer.readonly { pointer-events: none; }
.bbox-rect {
  position: absolute;
  border: 2px solid var(--brand-orange);
  background: rgba(0, 0, 0, 0.12);
  box-sizing: border-box;
  cursor: pointer;
}
.bbox-rect.selected {
  border-color: var(--primary);
  background: rgba(0, 0, 0, 0.22);
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35);
}
.bbox-rect.draft {
  border-style: dashed;
  pointer-events: none;
}
.bbox-rect.readonly { border-color: rgba(255, 255, 255, 0.85); }
.bbox-rect-tag {
  position: absolute;
  top: -1.35rem;
  left: 0;
  font-size: 0.625rem;
  font-weight: 700;
  color: #fff;
  background: var(--brand-orange);
  padding: 0.1rem 0.35rem;
  border-radius: 0.25rem;
  white-space: nowrap;
  max-width: 120%;
  overflow: hidden;
  text-overflow: ellipsis;
}

.profile-merchant-entry {
  margin: 0.75rem 1rem;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  cursor: pointer;
  background: linear-gradient(135deg, var(--brand-soft-bg) 0%, #fff 70%);
  border: 1px solid rgba(0, 0, 0, 0.2);
}
.profile-merchant-entry__icon {
  font-size: 1.75rem;
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: white;
  border-radius: 0.75rem;
  flex-shrink: 0;
}
.profile-merchant-entry__badge {
  font-size: 0.625rem;
  font-weight: 700;
  padding: 0.15rem 0.45rem;
  border-radius: 999px;
  background: rgba(0, 0, 0, 0.08);
  color: #262626;
  flex-shrink: 0;
}
.profile-merchant-entry__badge--pending {
  background: var(--brand-soft-bg);
  color: var(--brand-orange);
}

.merchant-cert-hero {
  display: flex;
  gap: 0.875rem;
  align-items: flex-start;
  padding: 1rem 0 0.5rem;
}
.merchant-cert-hero__icon {
  font-size: 2rem;
  color: var(--brand-orange);
  background: var(--brand-soft-bg);
  width: 3rem;
  height: 3rem;
  border-radius: 0.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.merchant-cert-hero__title {
  font-size: 1.125rem;
  font-weight: 800;
  color: var(--primary);
}
.merchant-cert-hero__sub {
  font-size: 0.8125rem;
  color: var(--text-muted, #888);
  margin-top: 0.35rem;
  line-height: 1.5;
}
.merchant-cert-deposit {
  background: var(--brand-soft-bg);
  border-radius: var(--radius-lg);
}
.merchant-cert-agree {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5;
  cursor: pointer;
}
.merchant-cert-agree input { margin-top: 0.2rem; flex-shrink: 0; }

/* 首页最新上架无限滚动 */
.home-latest-section {
  padding-bottom: 0.5rem;
}
.home-latest-sentinel {
  height: 1px;
  width: 100%;
}
.home-latest-loadmore {
  text-align: center;
  font-size: 0.75rem;
  padding: 0.75rem 1rem 1rem;
}

/* 高端稀有专区 */
.premium-home-section {
  background: linear-gradient(180deg, rgba(184, 134, 11, 0.06) 0%, transparent 100%);
  padding-bottom: 0.5rem;
}
.premium-hero {
  display: flex;
  gap: 0.875rem;
  align-items: flex-start;
  padding: 1rem 0 0.5rem;
}
.premium-hero-icon {
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 0.75rem;
  background: linear-gradient(135deg, #e5e5e5, #a3a3a3);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #262626;
  flex-shrink: 0;
}
.premium-hero-title {
  font-size: 1.125rem;
  font-weight: 800;
  color: var(--primary);
}
.premium-hero-sub {
  font-size: 0.75rem;
  color: var(--text-muted);
  margin-top: 0.25rem;
  line-height: 1.45;
}
.premium-filter-block { margin-bottom: 0.5rem; }
.premium-filter-label {
  font-size: 0.6875rem;
  font-weight: 700;
  color: var(--text-muted);
  margin-bottom: 0.375rem;
}
.premium-chips {
  display: flex;
  gap: 0.5rem;
  overflow-x: auto;
  padding-bottom: 0.25rem;
}
.premium-chip {
  flex-shrink: 0;
  border: 1px solid var(--divider);
  background: var(--surface-container-lowest);
  color: var(--text-primary);
  border-radius: 999px;
  padding: 0.375rem 0.875rem;
  font-size: 0.8125rem;
  font-weight: 600;
  cursor: pointer;
}
.premium-chip-sm {
  font-size: 0.75rem;
  padding: 0.3rem 0.65rem;
}
.premium-chip.active {
  border-color: #404040;
  background: rgba(0, 0, 0, 0.08);
  color: #0a0a0a;
}
.premium-badge {
  background: linear-gradient(135deg, #525252, #262626) !important;
  color: #fff !important;
  font-size: 0.625rem !important;
  font-weight: 800;
}
.premium-view-toggle {
  border: none;
  background: var(--surface-container-low);
  border-radius: 0.5rem;
  padding: 0.35rem 0.5rem;
  cursor: pointer;
  color: var(--text-muted);
}

/* 附近饲料 — 定位栏 */
.feed-location-bar {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  margin: 0.5rem 1rem 0.75rem;
  padding: 0.75rem 1rem;
  background: var(--brand-soft-bg);
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: var(--radius-lg);
  cursor: pointer;
}
.feed-location-bar__icon {
  color: var(--brand-orange);
  font-size: 1.375rem;
  flex-shrink: 0;
}
.feed-location-bar__text { flex: 1; min-width: 0; }
.feed-location-bar__label {
  font-weight: 700;
  font-size: 0.9375rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.feed-location-bar__hint {
  font-size: 0.6875rem;
  color: var(--text-muted, #888);
  margin-top: 0.125rem;
}
.feed-city-sheet { max-height: 75vh; display: flex; flex-direction: column; }
.feed-city-list { flex: 1; overflow-y: auto; padding: 0 1rem 1rem; }
.feed-city-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 0.875rem 1rem;
  margin-bottom: 0.375rem;
  border: 1px solid var(--divider);
  border-radius: var(--radius-md);
  background: white;
  font-size: 0.875rem;
  cursor: pointer;
  text-align: left;
}
.feed-city-item.active {
  border-color: rgba(0, 0, 0, 0.45);
  background: var(--brand-soft-bg);
}
.feed-city-gps-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
}

/* 附近饲料 — 闲鱼式区域筛选 */
.feed-region-overlay {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0, 0, 0, 0.45);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}
.feed-region-sheet {
  background: #fff;
  border-radius: 1rem 1rem 0 0;
  max-height: 88vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.feed-region-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 1rem 1rem 0.75rem;
  border-bottom: 1px solid var(--divider, #eee);
}
.feed-region-place {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex: 1;
  min-width: 0;
}
.feed-region-place__icon {
  color: var(--brand-orange);
  font-size: 1.25rem;
  flex-shrink: 0;
}
.feed-region-place__text { flex: 1; min-width: 0; }
.feed-region-place__label {
  font-weight: 700;
  font-size: 0.9375rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.feed-region-switch {
  flex-shrink: 0;
  border: none;
  background: none;
  color: var(--text-muted, #888);
  font-size: 0.8125rem;
  cursor: pointer;
  padding: 0.25rem 0.5rem;
}
.feed-region-relocate {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.125rem;
  border: none;
  background: none;
  color: var(--text-muted, #888);
  font-size: 0.625rem;
  cursor: pointer;
  flex-shrink: 0;
  padding: 0;
}
.feed-region-relocate .material-symbols-outlined { font-size: 1.25rem; }
.feed-region-radius {
  display: flex;
  gap: 0.5rem;
  padding: 0.75rem 1rem;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.feed-region-radius__chip {
  flex-shrink: 0;
  padding: 0.375rem 0.875rem;
  border-radius: 999px;
  border: 1px solid var(--divider, #eee);
  background: #fff;
  font-size: 0.8125rem;
  cursor: pointer;
  color: var(--text-primary, #333);
}
.feed-region-radius__chip.active {
  background: #f5f5f5;
  border-color: #ddd;
  font-weight: 600;
}
.feed-region-columns {
  display: flex;
  flex: 1;
  min-height: 16rem;
  max-height: 22rem;
  overflow: hidden;
}
.feed-region-col {
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.feed-region-col--left {
  width: 38%;
  background: #f7f7f7;
  border-right: 1px solid var(--divider, #eee);
}
.feed-region-col--right {
  flex: 1;
  background: #fff;
}
.feed-region-item {
  display: block;
  width: 100%;
  padding: 0.875rem 1rem;
  border: none;
  background: transparent;
  text-align: left;
  font-size: 0.875rem;
  cursor: pointer;
  position: relative;
  color: var(--text-primary, #333);
}
.feed-region-item.active {
  background: #fff;
  font-weight: 600;
  color: var(--brand-orange, #0a0a0a);
}
.feed-region-col--left .feed-region-item.active {
  background: #fff;
}
.feed-region-item__bar {
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 3px;
  height: 1.125rem;
  background: var(--brand-orange, #0a0a0a);
  border-radius: 0 2px 2px 0;
}
.feed-region-item--right {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.feed-region-check {
  font-size: 1.125rem;
  color: var(--brand-orange, #0a0a0a);
}
.feed-region-footer {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 0.75rem 1rem calc(0.75rem + env(safe-area-inset-bottom));
  border-top: 1px solid var(--divider, #eee);
  background: #fff;
}
.feed-region-reset {
  border: none;
  background: none;
  font-size: 0.9375rem;
  color: var(--text-muted, #888);
  cursor: pointer;
  padding: 0.5rem;
}
.feed-region-confirm {
  flex: 1;
  border-radius: 999px;
  font-weight: 700;
  padding: 0.75rem 1rem;
}

/* 品系护照 */
.passport-list { padding: 0 1rem; display: flex; flex-direction: column; gap: 0.75rem; }
.passport-card { display: flex; gap: 0.75rem; cursor: pointer; }
.passport-card__cover {
  width: 4.5rem; height: 4.5rem; border-radius: 0.5rem; background: #eee center/cover no-repeat; flex-shrink: 0;
}
.passport-card__meta { flex: 1; min-width: 0; }
.passport-card__title { font-weight: 700; font-size: 0.9375rem; }
.passport-hero {
  position: relative; min-height: 10rem; background: linear-gradient(135deg, #564339, #8d6e63) center/cover;
  color: #fff; padding: 1.25rem;
}
.passport-hero__overlay h2 { margin: 0; font-size: 1.125rem; }
.passport-hero__overlay p { margin: 0.25rem 0 0; opacity: 0.9; font-size: 0.8125rem; }
.passport-hero__stamp { position: absolute; right: 1rem; top: 1rem; pointer-events: none; }
.passport-timeline-item { display: flex; gap: 0.75rem; margin-bottom: 0.75rem; }
.passport-timeline-item__dot {
  width: 0.5rem; height: 0.5rem; border-radius: 50%; background: var(--brand-orange, #0a0a0a); margin-top: 0.35rem; flex-shrink: 0;
}
.passport-stamp-lottie { display: inline-block; }
.passport-stamp-fallback {
  border: 4px solid #0a0a0a; border-radius: 50%; background: rgba(0, 0, 0, 0.2);
  animation: passport-stamp-drop 0.5s ease-out;
}
@keyframes passport-stamp-drop {
  from { transform: scale(1.8) translateY(-40px); opacity: 0; }
  to { transform: scale(1) translateY(0); opacity: 1; }
}

/* 黑话词典 */
.slang-intro { font-size: 0.8125rem; padding: 0 1rem 0.5rem; margin: 0; }
.slang-list { padding: 0 1rem; display: flex; flex-direction: column; gap: 0.5rem; }
.slang-card { cursor: pointer; }
.slang-card__head { display: flex; justify-content: space-between; align-items: center; }
.slang-card__term { font-weight: 800; font-size: 1rem; color: var(--primary); }
.slang-card__detail { margin-top: 0.75rem; font-size: 0.8125rem; line-height: 1.6; }
.slang-example { color: var(--text-secondary); font-style: italic; }
.slang-tags { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.5rem; }
.slang-banner { background: #FFF8E1 !important; color: var(--primary) !important; margin: 0 1rem 0.75rem; cursor: pointer; }
.certifier-badge-bar {
  display: flex; align-items: center; gap: 0.35rem; padding: 0.35rem 1rem;
  background: #FFF3E0; color: #E65100; font-size: 0.75rem; font-weight: 700;
}
.modal-backdrop {
  position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 200;
  display: flex; align-items: center; justify-content: center;
}

/* SAM 基因热点确认 */
.gene-hotspot-confirm { padding: 0 1rem 1rem; }
.gene-hotspot-confirm__head { margin-bottom: 0.75rem; }
.gene-hotspot-confirm__head h3 { margin: 0 0 0.25rem; font-size: 1rem; }
.gene-hotspot-confirm__head p { margin: 0; font-size: 0.8125rem; color: var(--text-muted, #888); }
.gene-hotspot-stage {
  position: relative; width: 100%; border-radius: 0.75rem; overflow: hidden;
  background: #111; margin-bottom: 0.75rem;
}
.gene-hotspot-img { display: block; width: 100%; height: auto; vertical-align: top; }
.gene-hotspot-layer { position: absolute; inset: 0; pointer-events: none; }
.gene-hotspot-box {
  position: absolute; border: 2px solid; border-radius: 4px;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: 2px 4px; font-size: 0.625rem; line-height: 1.2; color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,0.6);
}
.gene-hotspot-box--pending { border-color: #ffb74d; background: rgba(255, 183, 77, 0.25); }
.gene-hotspot-box--confirmed { border-color: #66bb6a; background: rgba(102, 187, 106, 0.3); }
.gene-hotspot-box--rejected { border-color: #ef5350; background: rgba(239, 83, 80, 0.2); opacity: 0.5; }
.gene-hotspot-label { font-weight: 700; }
.gene-hotspot-score { opacity: 0.85; }
.gene-hotspot-actions {
  display: flex; flex-wrap: wrap; gap: 0.5rem;
}
.gene-hotspot-actions button {
  flex: 1; min-width: 7rem; padding: 0.625rem 0.75rem;
  border-radius: 999px; border: none; font-weight: 600; cursor: pointer;
}
.gene-hotspot-actions .btn-primary { background: var(--brand-orange, #0a0a0a); color: #fff; }
.gene-hotspot-actions .btn-secondary { background: #eee; color: var(--text-primary, #333); }

/* 护照翻开 Lottie */
.passport-open-overlay {
  position: fixed; inset: 0; z-index: 300;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: rgba(86, 67, 57, 0.85); animation: passport-open-fade 0.4s ease;
}
.passport-open-lottie { width: min(280px, 70vw); height: min(280px, 70vw); }
.passport-open-caption {
  margin-top: 1rem; color: #fff; font-size: 1.125rem; font-weight: 700;
  animation: passport-open-fade 0.6s ease 0.3s both;
}
.passport-open-fallback {
  width: 120px; height: 160px; border-radius: 8px;
  background: linear-gradient(135deg, #8d6e63, #564339);
  box-shadow: 0 8px 32px rgba(0,0,0,0.4);
  animation: passport-open-flip 0.8s ease;
}
@keyframes passport-open-fade {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes passport-open-flip {
  from { transform: perspective(400px) rotateY(-90deg); opacity: 0; }
  to { transform: perspective(400px) rotateY(0); opacity: 1; }
}
