/* ================================
   BookHub UI Theme (v1.2.1)
   - 更现代的排版/留白/阴影
   - 更一致的组件（按钮/输入/卡片/面板）
   - 更好看的 InstantSearch 控件
   - 更舒服的 Admin 版式（两栏 + sticky 侧栏）
   ================================ */

/* ---- Theme tokens ---- */
:root{
  /* surfaces */
  --bg: #f6f7fb;
  --bg2: #ffffff;
  --panel: rgba(255,255,255,.86);
  --panel2: rgba(255,255,255,.70);

  /* text */
  --text: rgba(15, 23, 42, .92);
  --muted: rgba(15, 23, 42, .62);

  /* borders/shadows */
  --border: rgba(15, 23, 42, .14);
  --border2: rgba(15, 23, 42, .10);
  --shadow-sm: 0 10px 24px rgba(2, 6, 23, .07);
  --shadow-md: 0 18px 46px rgba(2, 6, 23, .10);
  --shadow-lg: 0 30px 90px rgba(2, 6, 23, .12);

  /* radius */
  --radius-lg: 24px;
  --radius: 18px;
  --radius-sm: 14px;

  /* accent */
  --accent: #2563eb;
  --accent2: #7c3aed;
  --danger: #ef4444;
  --success: #16a34a;

  /* focus ring */
  --ring: rgba(37, 99, 235, .22);

  /* header */
  --header-bg: rgba(255,255,255,.68);
  --header-border: rgba(15, 23, 42, .08);

  /* misc */
  --kbd-bg: rgba(15, 23, 42, .06);
  --kbd-border: rgba(15, 23, 42, .14);
}

html[data-theme="dark"]{
  --bg: #07080b;
  --bg2: #0b0c10;
  --panel: rgba(16, 18, 24, .86);
  --panel2: rgba(16, 18, 24, .68);

  --text: rgba(255,255,255,.92);
  --muted: rgba(255,255,255,.62);

  --border: rgba(255,255,255,.11);
  --border2: rgba(255,255,255,.07);
  --shadow-sm: 0 14px 30px rgba(0,0,0,.45);
  --shadow-md: 0 26px 70px rgba(0,0,0,.55);
  --shadow-lg: 0 38px 120px rgba(0,0,0,.62);

  /* 你喜欢的「暖金强调」 */
  --accent: #f5c15b;
  --accent2: #ff7a59;
  --danger: #ff5b5b;
  --success: #34d399;

  --ring: rgba(245, 193, 91, .18);

  --header-bg: rgba(10, 12, 16, .62);
  --header-border: rgba(255,255,255,.06);

  --kbd-bg: rgba(255,255,255,.06);
  --kbd-border: rgba(255,255,255,.12);
}

/* ---- Base ---- */
*{ box-sizing: border-box; }
html, body { height: 100%; }

html:not([data-theme="dark"]){ color-scheme: light; }
html[data-theme="dark"]{ color-scheme: dark; }

body{
  margin:0;
  font-family: system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;

  color: var(--text);
  background:
    radial-gradient(900px 520px at 10% -10%, rgba(124,58,237,.12), transparent 55%),
    radial-gradient(780px 480px at 85% 10%, rgba(37,99,235,.10), transparent 60%),
    linear-gradient(180deg, rgba(255,255,255,.05), transparent 42%),
    var(--bg);
}

html[data-theme="dark"] body{
  background:
    radial-gradient(900px 520px at 10% -10%, rgba(255,122,89,.10), transparent 58%),
    radial-gradient(780px 480px at 85% 10%, rgba(245,193,91,.12), transparent 60%),
    linear-gradient(180deg, rgba(255,255,255,.03), transparent 42%),
    var(--bg);
}

::selection{
  background: rgba(124,58,237,.24);
}
html[data-theme="dark"] ::selection{
  background: rgba(245,193,91,.20);
}

a{ color: inherit; }
.muted{ color: var(--muted); }

/* Reduce motion */
@media (prefers-reduced-motion: reduce){
  *{ animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}

/* Scrollbar (best-effort) */
*::-webkit-scrollbar{ width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb{
  background: rgba(127,127,127,.28);
  border-radius: 999px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
*::-webkit-scrollbar-thumb:hover{ background: rgba(127,127,127,.38); }
html[data-theme="dark"] *::-webkit-scrollbar-thumb{ background: rgba(255,255,255,.16); }
html[data-theme="dark"] *::-webkit-scrollbar-thumb:hover{ background: rgba(255,255,255,.22); }

/* ---- Layout helpers ---- */
.bh-header{
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--header-bg);
  border-bottom: 1px solid var(--header-border);
  backdrop-filter: blur(14px);
}

.bh-toprow{
  display:flex;
  align-items:center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px 10px 16px;
}

.bh-brand{
  display:flex;
  align-items:center;
  gap: 10px;
  font-weight: 900;
  letter-spacing: .2px;
  line-height: 1;
}
.bh-brand-title{
  font-size: 26px;
}
.bh-brand-sub{
  font-weight: 600;
  font-size: 12px;
  color: var(--muted);
  letter-spacing: 0;
}

.bh-actions{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; }

/* ---- Header nav / user menu (v1.2.0) ---- */
.bh-nav{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.bh-btn-nav-active{
  border-color: rgba(255,255,255,0.22);
  background: rgba(255,255,255,0.08);
}
.light .bh-btn-nav-active{
  border-color: rgba(0,0,0,0.16);
  background: rgba(0,0,0,0.04);
}

.bh-user{ position:relative; }
.bh-user-btn{ cursor:pointer; }
.bh-menu{
  position:absolute;
  right:0;
  top: calc(100% + 10px);
  min-width: 130px;
  padding: 8px;
  border-radius: 16px;
  border: 1px solid var(--line);
  background: var(--panel);
  box-shadow: 0 10px 30px rgba(0,0,0,0.35);
  backdrop-filter: blur(16px);
}
.bh-menu-item{ width:100%; justify-content:flex-start; }

/* ---- Data dashboard (v1.2.0) ---- */
.bh-kpi-grid{
  display:grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}
@media (max-width: 980px){
  .bh-kpi-grid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.bh-kpi{
  padding: 14px;
  border-radius: 18px;
  border: 1px solid rgba(255,255,255,0.10);
  background: rgba(255,255,255,0.04);
}
.light .bh-kpi{
  border: 1px solid rgba(0,0,0,0.08);
  background: rgba(0,0,0,0.03);
}
.bh-kpi-label{ font-size:12px; color: var(--muted); }
.bh-kpi-value{ margin-top:6px; font-size:22px; font-weight:900; letter-spacing: 0.2px; }


/* ---- KPI clickable + missing drilldown (v1.2.1) ---- */
.bh-kpi--clickable{
  width: 100%;
  text-align: left;
  cursor: pointer;
  appearance: none;
}
.bh-kpi--clickable:hover{
  transform: translateY(-1px);
  border-color: rgba(124,58,237,.26);
  box-shadow: 0 10px 26px rgba(2,6,23,.10);
  background: rgba(255,255,255,0.06);
}
html[data-theme="dark"] .bh-kpi--clickable:hover{
  border-color: rgba(245,193,91,.24);
  box-shadow: 0 16px 34px rgba(0,0,0,.40);
}
.bh-kpi--clickable:active{ transform: translateY(0); }
.bh-kpi--clickable:focus-visible{
  outline: none;
  box-shadow: 0 0 0 4px var(--ring);
  border-color: rgba(37,99,235,.50);
}
html[data-theme="dark"] .bh-kpi--clickable:focus-visible{
  border-color: rgba(245,193,91,.50);
}
.bh-kpi-hint{ margin-top:6px; font-size:12px; color: var(--muted); }


/* ---- Pie charts (status/source dist) v1.2.1 ---- */
.bh-pie{
  display:flex;
  gap: 14px;
  align-items:center;
  flex-wrap:wrap;
  margin-top: 8px;
}
.bh-pie-chart{
  width: 150px;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  border: 1px solid var(--border2);
  background: conic-gradient(rgba(127,127,127,.35) 0% 100%);
  box-shadow: var(--shadow-sm);
  position: relative;
  flex: 0 0 auto;
}
.bh-pie-chart::after{
  content:"";
  position:absolute;
  inset: 20%;
  border-radius: 50%;
  background: var(--panel);
  border: 1px solid var(--border2);
}
.bh-pie-legend{
  flex: 1 1 240px;
  min-width: 220px;
  display:flex;
  flex-direction: column;
  gap: 8px;
}
.bh-pie-item{
  display:flex;
  align-items:center;
  gap: 10px;
  font-size: 13px;
}
.bh-pie-dot{
  width: 10px;
  height: 10px;
  border-radius: 999px;
  flex: 0 0 auto;
}
.bh-pie-label{ font-weight: 700; }
.bh-pie-meta{
  margin-left: auto;
  font-size: 12px;
  color: var(--muted);
  white-space: nowrap;
}

.grid-span-2{ grid-column: 1 / -1; }


/* ---- Tag drilldown (v1.2.0) ---- */
.bh-taglink{
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: var(--text);
  font: inherit;
  font-weight: 700;
  text-align: left;
}
.bh-taglink:hover{ text-decoration: underline; }
.bh-taglink:focus{ outline: 2px solid rgba(255,255,255,0.25); outline-offset: 2px; border-radius: 8px; }
html:not([data-theme="dark"]) .bh-taglink:focus{ outline-color: rgba(0,0,0,0.18); }

.bh-scrollbox{
  max-height: 360px;
  overflow: auto;
  padding-right: 6px;
}
.bh-list{
  margin: 0;
  padding-left: 18px;
}
.bh-list li{ margin: 6px 0; }
.bh-layout{
  display:grid;
  grid-template-columns: 280px 1fr;
  gap: 16px;
  padding: 16px;
  max-width: 1720px;
  margin: 0 auto;
}

@media (max-width: 980px){
  .bh-layout{ grid-template-columns: 1fr; }
  .bh-header{ position: static; }
}

/* ---- Panels / Cards ---- */
.bh-panel{
  background:
    linear-gradient(180deg, rgba(255,255,255,.08), transparent 58%),
    var(--panel);
  border: 1px solid var(--border2);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.bh-panel-inner{ padding: 14px; }

.bh-card{
  background:
    linear-gradient(180deg, rgba(255,255,255,.10), transparent 60%),
    var(--panel);
  border: 1px solid var(--border2);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-md);
  transition: transform .14s ease, box-shadow .14s ease, border-color .14s ease, filter .14s ease;
  position: relative;
}

.bh-card::after{
  content:"";
  position:absolute;
  inset:-1px;
  border-radius: calc(var(--radius) + 1px);
  pointer-events:none;
  background: linear-gradient(135deg, rgba(124,58,237,.22), rgba(37,99,235,.16), transparent 70%);
  opacity: .35;
  mask: linear-gradient(#000, #000) content-box, linear-gradient(#000, #000);
  -webkit-mask: linear-gradient(#000, #000) content-box, linear-gradient(#000, #000);
  padding: 1px;
  -webkit-mask-composite: xor;
  mask-composite: exclude;
}

html[data-theme="dark"] .bh-card::after{
  background: linear-gradient(135deg, rgba(245,193,91,.22), rgba(255,122,89,.16), transparent 70%);
  opacity: .40;
}

.bh-card:hover{
  transform: translateY(-2px);
  border-color: rgba(124,58,237,.26);
  box-shadow: var(--shadow-lg);
  filter: saturate(1.03);
}
html[data-theme="dark"] .bh-card:hover{
  border-color: rgba(245,193,91,.24);
}

.bh-card:hover .bh-cover{ transform: scale(1.02); }

.bh-cover{
  width: 100%;
  transition: transform .18s ease;
  will-change: transform;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  display:block;
  background:
    radial-gradient(520px 420px at 30% 20%, rgba(255,255,255,.10), transparent 60%),
    linear-gradient(180deg, rgba(255,255,255,.10), transparent 65%),
    var(--panel2);
  border-bottom: 1px solid var(--border2);
}

.bh-cover-placeholder{
  display:flex;
  align-items:center;
  justify-content:center;
  color: rgba(255,255,255,.60);
  font-size: 13px;
  letter-spacing: .2px;
  padding: 10px;
  min-height: 180px;
}
html:not([data-theme="dark"]) .bh-cover-placeholder{ color: rgba(15,23,42,.55); }


/* ---- Cover hover preview (Index) ---- */
.bh-cover-hover{
  position: fixed;
  z-index: 9999;
  width: clamp(180px, 22vw, 260px);
  aspect-ratio: 3 / 4;
  border-radius: 18px;
  border: 1px solid var(--border2);
  background: var(--panel2);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  pointer-events: none;

  opacity: 0;
  visibility: hidden;
  transform: scale(.96);
  transition: opacity .12s ease, transform .12s ease, visibility .12s ease;

  left: 0;
  top: 0;
}
.bh-cover-hover img{
  width:100%;
  height:100%;
  object-fit: cover;
  display:block;
}
.bh-cover-hover.show{
  opacity: 1;
  visibility: visible;
  transform: scale(1);
}
@media (hover: none){
  .bh-cover-hover{ display:none; }
}

.bh-meta{
  padding: 11px 12px 12px 12px;
  display:flex;
  flex-direction: column;
  gap: 7px;
}

.bh-title{
  font-size: 14px;
  font-weight: 900;
  line-height: 1.35;
  text-decoration:none;
}
.bh-title:hover{ text-decoration: underline; }

.bh-sub{
  font-size: 12px;
  color: var(--muted);
  line-height: 1.25;
}

.bh-desc{
  font-size: 12px;
  color: var(--muted);
  line-height: 1.45;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.bh-chips{ display:flex; flex-wrap:wrap; gap:6px; margin-top: 2px; }
.bh-chips--meta{ gap:6px; opacity: .95; }

.bh-chip{
  font-size: 11px;
  padding: 4px 8px;
  border-radius: 999px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--muted);
}

.bh-chip--accent{
  border-color: rgba(124,58,237,.28);
  background: rgba(124,58,237,.10);
  color: var(--text);
}
html[data-theme="dark"] .bh-chip--accent{
  border-color: rgba(245,193,91,.26);
  background: rgba(245,193,91,.12);
}

.bh-chip--meta{
  border-color: rgba(37,99,235,.22);
  background: rgba(37,99,235,.08);
}
html[data-theme="dark"] .bh-chip--meta{
  border-color: rgba(245,193,91,.20);
  background: rgba(245,193,91,.08);
}

.bh-row{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top: 10px; }

/* ---- Buttons ---- */
.bh-btn{
  appearance: none;
  border: 1px solid var(--border);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 999px;
  padding: 8px 12px;
  font-size: 13px;
  cursor:pointer;
  text-decoration:none;
  display:inline-flex;
  align-items:center;
  gap: 8px;
  transition: transform .14s ease, background .14s ease, border-color .14s ease, box-shadow .14s ease, opacity .14s ease;
  box-shadow: 0 0 0 rgba(0,0,0,0);
}
.bh-btn-sm{ padding: 6px 10px; font-size: 12px; }

.bh-btn:hover{
  border-color: rgba(124,58,237,.28);
  background: rgba(255,255,255,.08);
  transform: translateY(-1px);
  box-shadow: 0 10px 26px rgba(2,6,23,.10);
}
html[data-theme="dark"] .bh-btn:hover{
  border-color: rgba(245,193,91,.26);
  box-shadow: 0 16px 34px rgba(0,0,0,.40);
}

.bh-btn:active{ transform: translateY(0); }
.bh-btn[disabled]{ opacity:.45; pointer-events:none; }

.bh-btn-primary{
  border-color: rgba(37,99,235,.34);
  background: linear-gradient(135deg, rgba(37,99,235,.18), rgba(124,58,237,.14));
}
html[data-theme="dark"] .bh-btn-primary{
  border-color: rgba(245,193,91,.34);
  background: linear-gradient(135deg, rgba(245,193,91,.16), rgba(255,122,89,.10));
}
.bh-btn-primary:hover{
  border-color: rgba(37,99,235,.55);
  background: linear-gradient(135deg, rgba(37,99,235,.24), rgba(124,58,237,.18));
}
html[data-theme="dark"] .bh-btn-primary:hover{
  border-color: rgba(245,193,91,.55);
  background: linear-gradient(135deg, rgba(245,193,91,.22), rgba(255,122,89,.14));
}

/* ---- AI buttons ---- */
.bh-btn-ai:not(.bh-btn-primary){
  border-color: rgba(124,58,237,.22);
  background: rgba(124,58,237,.08);
}
html[data-theme="dark"] .bh-btn-ai:not(.bh-btn-primary){
  border-color: rgba(245,193,91,.22);
  background: rgba(245,193,91,.08);
}
.bh-btn-ai:not(.bh-btn-primary):hover{
  border-color: rgba(124,58,237,.40);
  background: rgba(124,58,237,.12);
}
html[data-theme="dark"] .bh-btn-ai:not(.bh-btn-primary):hover{
  border-color: rgba(245,193,91,.42);
  background: rgba(245,193,91,.12);
}

@keyframes bh-spin{ to{ transform: rotate(360deg); } }
.bh-btn.is-loading::after{
  content: "";
  width: 12px;
  height: 12px;
  border: 2px solid var(--accent);
  border-top-color: transparent;
  border-radius: 50%;
  display:inline-block;
  animation: bh-spin 1s linear infinite;
}

.bh-btn-danger{
  border-color: rgba(239,68,68,.32);
  background: rgba(239,68,68,.10);
}
html[data-theme="dark"] .bh-btn-danger{
  border-color: rgba(255,91,91,.34);
  background: rgba(255,91,91,.10);
}
.bh-btn-danger:hover{
  border-color: rgba(239,68,68,.55);
  background: rgba(239,68,68,.14);
}

.bh-pill{
  border: 1px solid var(--border2);
  border-radius: 999px;
  padding: 7px 10px;
  font-size: 13px;
  color: var(--muted);
  background: rgba(255,255,255,.05);
  display:inline-flex;
  align-items:center;
  gap: 8px;
}

/* Focus */
.bh-btn:focus-visible,
.bh-input:focus-visible,
.bh-textarea:focus-visible,
.ais-SearchBox-input:focus-visible,
.ais-RangeInput-input:focus-visible{
  outline: none;
  box-shadow: 0 0 0 4px var(--ring);
  border-color: rgba(37,99,235,.50);
}
html[data-theme="dark"] .bh-btn:focus-visible,
html[data-theme="dark"] .bh-input:focus-visible,
html[data-theme="dark"] .bh-textarea:focus-visible,
html[data-theme="dark"] .ais-SearchBox-input:focus-visible,
html[data-theme="dark"] .ais-RangeInput-input:focus-visible{
  border-color: rgba(245,193,91,.50);
}

/* ---- Inputs ---- */
.bh-input, .bh-textarea{
  width: 100%;
  padding: 11px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--border2);
  outline: none;
  background: rgba(255,255,255,.04);
  color: var(--text);
  font-size: 14px;
}
.bh-textarea{
  border-radius: var(--radius-sm);
  min-height: 130px;
  resize: vertical;
}
.bh-input:focus, .bh-textarea:focus{
  border-color: rgba(37,99,235,.55);
}
html[data-theme="dark"] .bh-input:focus, html[data-theme="dark"] .bh-textarea:focus{
  border-color: rgba(245,193,91,.55);
}
.bh-label{
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 6px;
}


/* file input button (细节美化) */
input[type="file"]::file-selector-button{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.06);
  color: var(--text);
  border-radius: 999px;
  padding: 8px 12px;
  margin-right: 10px;
  cursor: pointer;
  transition: transform .12s ease, border-color .12s ease, background .12s ease;
}
input[type="file"]::file-selector-button:hover{
  transform: translateY(-1px);
  border-color: rgba(37,99,235,.30);
  background: rgba(255,255,255,.10);
}
html[data-theme="dark"] input[type="file"]::file-selector-button:hover{
  border-color: rgba(245,193,91,.26);
}
/* small helper */
.bh-kbd{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width: 1.4em;
  padding: 2px 8px;
  font-size: 12px;
  border-radius: 10px;
  background: var(--kbd-bg);
  border: 1px solid var(--kbd-border);
  color: var(--text);
  line-height: 1.6;
}

/* ---- Login modal ---- */
.bh-modal{
  position: fixed;
  inset: 0;
  display:none;
  align-items:center;
  justify-content:center;
  z-index: 1000;
  background: rgba(0,0,0,.55);
  backdrop-filter: blur(10px);
}
.bh-modal.show{ display:flex; }
.bh-modal-card{
  width: min(560px, calc(100vw - 28px));
  border-radius: var(--radius-lg);
  border: 1px solid var(--border2);
  background:
    radial-gradient(650px 420px at 12% 0%, rgba(124,58,237,.14), transparent 60%),
    linear-gradient(180deg, rgba(255,255,255,.10), transparent 62%),
    var(--panel);
  box-shadow: var(--shadow-lg);
  padding: 18px;
  transform: translateY(0);
  animation: bh-pop .14s ease-out;
}
html[data-theme="dark"] .bh-modal-card{
  background:
    radial-gradient(650px 420px at 12% 0%, rgba(245,193,91,.14), transparent 60%),
    linear-gradient(180deg, rgba(255,255,255,.06), transparent 62%),
    var(--panel);
}
@keyframes bh-pop{
  from{ transform: translateY(6px) scale(.99); opacity:.92; }
  to{ transform: translateY(0) scale(1); opacity:1; }
}
.bh-modal-title{ font-size: 18px; font-weight: 900; margin: 0 0 6px 0; }
.bh-modal-sub{ font-size: 12px; color: var(--muted); margin-bottom: 12px; }
.bh-grid{ display:grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 560px){ .bh-grid{ grid-template-columns: 1fr; } }

/* ---- Toast ---- */
.bh-toast{
  position: fixed;
  left: 50%;
  bottom: 18px;
  transform: translateX(-50%);
  z-index: 1200;
  padding: 10px 14px;
  border-radius: 999px;
  border: 1px solid var(--border2);
  background: rgba(14,16,21,.82);
  color: rgba(255,255,255,.92);
  display:none;
  box-shadow: 0 18px 60px rgba(0,0,0,.55);
  max-width: min(780px, calc(100vw - 24px));
  text-align: center;
}
html:not([data-theme="dark"]) .bh-toast{
  background: rgba(255,255,255,.92);
  color: rgba(15,23,42,.92);
}

/* ---- Error box ---- */
.bh-err{
  white-space: pre-wrap;
  border: 1px solid rgba(239,68,68,.35);
  background: rgba(239,68,68,.10);
  color: rgba(255,255,255,.92);
  padding: 12px 14px;
  border-radius: var(--radius-sm);
  margin: 10px 16px 14px 16px;
  display:none;
}
html:not([data-theme="dark"]) .bh-err{
  color: rgba(127,0,0,.92);
}

/* ---- InstantSearch: SearchBox ---- */
.ais-SearchBox-form { display:flex; gap:10px; align-items:center; }
.ais-SearchBox-input{
  width:100%;
  padding: 12px 16px;
  border: 1px solid var(--border2);
  border-radius: 999px;
  outline:none;
  font-size: 15px;
  background: rgba(255,255,255,.05);
  color: var(--text);
}
.ais-SearchBox-submit, .ais-SearchBox-reset{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 999px;
  width: 40px;
  height: 40px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  transition: transform .14s ease, border-color .14s ease, background .14s ease;
}
.ais-SearchBox-submit:hover, .ais-SearchBox-reset:hover{
  transform: translateY(-1px);
  border-color: rgba(37,99,235,.38);
  background: rgba(255,255,255,.08);
}
html[data-theme="dark"] .ais-SearchBox-submit:hover, html[data-theme="dark"] .ais-SearchBox-reset:hover{
  border-color: rgba(245,193,91,.32);
}
.ais-SearchBox-submitIcon, .ais-SearchBox-resetIcon{ width: 16px; height: 16px; }

/* ---- InstantSearch: Toolbar ---- */
.bh-toolbar{
  display:flex;
  align-items:center;
  justify-content: space-between;
  gap: 10px;
  padding: 0 16px 12px 16px;
  flex-wrap:wrap;
}
.bh-toolbar-left{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.bh-toolbar-right{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }

.bh-stats{
  display:inline-flex;
  align-items:center;
  gap: 8px;
  font-size: 12px;
  color: var(--muted);
  padding: 6px 10px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  border-radius: 999px;
}
/* 首页不再显示“连接中…”，未渲染时直接隐藏 */
.bh-stats:empty{ display:none; }

/* ---- InstantSearch: CurrentRefinements ---- */
.ais-CurrentRefinements{
  padding: 0 16px 14px 16px;
}
.ais-CurrentRefinements-list{
  list-style:none;
  padding:0;
  margin:0;
  display:flex;
  flex-wrap:wrap;
  gap: 8px;
}
.ais-CurrentRefinements-item{ margin:0; padding:0; }
.ais-CurrentRefinements-category{
  display:flex;
  gap:8px;
  align-items:center;
}
.ais-CurrentRefinements-label{
  font-size: 12px;
  color: var(--muted);
}
.ais-CurrentRefinements-delete{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 999px;
  padding: 6px 10px;
  cursor:pointer;
}
.ais-CurrentRefinements-delete:hover{
  border-color: rgba(37,99,235,.35);
  background: rgba(255,255,255,.08);
}
html[data-theme="dark"] .ais-CurrentRefinements-delete:hover{
  border-color: rgba(245,193,91,.28);
}

/* ---- InstantSearch: ClearRefinements ---- */
.ais-ClearRefinements-button{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 999px;
  padding: 7px 12px;
  cursor:pointer;
}
.ais-ClearRefinements-button:hover{
  border-color: rgba(37,99,235,.35);
  background: rgba(255,255,255,.08);
}
.ais-ClearRefinements-button:disabled{
  opacity:.45;
  cursor:not-allowed;
}

/* ---- InstantSearch: RefinementList ---- */
.ais-RefinementList-list{
  list-style:none;
  padding:0;
  margin: 10px 0 0 0;
}
.ais-RefinementList-item{ margin: 7px 0; }
.ais-RefinementList-label{
  display:flex;
  align-items:center;
  gap:10px;
  cursor:pointer;
  user-select:none;
  padding: 7px 10px;
  border-radius: 14px;
  border: 1px solid transparent;
}
.ais-RefinementList-label:hover{
  background: rgba(255,255,255,.06);
  border-color: var(--border2);
}
.ais-RefinementList-checkbox{
  width: 16px;
  height: 16px;
  accent-color: var(--accent);
}
.ais-RefinementList-labelText{ font-size: 13px; }
.ais-RefinementList-count{
  margin-left:auto;
  font-size: 12px;
  color: var(--muted);
  background: rgba(255,255,255,.05);
  border: 1px solid var(--border2);
  padding: 2px 8px;
  border-radius: 999px;
}

.ais-RefinementList-searchBox { margin-top: 10px; }
.ais-SearchBox.ais-RefinementList-searchBox input{
  padding: 10px 12px;
  border-radius: 999px;
}

.ais-RefinementList-showMore{
  margin-top: 8px;
  border:  1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 999px;
  padding: 7px 10px;
  cursor: pointer;
}
.ais-RefinementList-showMore:hover{
  border-color: rgba(37,99,235,.35);
  background: rgba(255,255,255,.08);
}
html[data-theme="dark"] .ais-RefinementList-showMore:hover{
  border-color: rgba(245,193,91,.28);
}

/* ---- InstantSearch: RangeInput (year) ---- */
.ais-RangeInput-form{
  display:flex;
  gap: 8px;
  align-items:center;
  margin-top: 10px;
}
.ais-RangeInput-input{
  width: 100%;
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  outline:none;
}
.ais-RangeInput-submit{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  color: var(--text);
  border-radius: 12px;
  padding: 10px 12px;
  cursor:pointer;
}
.ais-RangeInput-submit:hover{
  border-color: rgba(37,99,235,.35);
  background: rgba(255,255,255,.08);
}
html[data-theme="dark"] .ais-RangeInput-submit:hover{
  border-color: rgba(245,193,91,.28);
}

/* ---- InstantSearch: Pagination ---- */
.ais-Pagination-list{
  list-style:none;
  padding:0;
  display:flex;
  gap: 8px;
  flex-wrap:wrap;
}
.ais-Pagination-link{
  display:block;
  padding: 8px 12px;
  border: 1px solid var(--border2);
  border-radius: 999px;
  text-decoration:none;
  color: var(--text);
  background: rgba(255,255,255,.05);
}
.ais-Pagination-item--selected .ais-Pagination-link{
  background: rgba(37,99,235,.14);
  border-color: rgba(37,99,235,.38);
}
html[data-theme="dark"] .ais-Pagination-item--selected .ais-Pagination-link{
  background: rgba(245,193,91,.16);
  border-color: rgba(245,193,91,.34);
}
.ais-Pagination-item--disabled .ais-Pagination-link{
  opacity:.4;
  pointer-events:none;
}

/* ---- Hits grid ---- */
#hits{ display:block !important; }
#hits .ais-Hits-list{
  list-style:none;
  padding:0;
  margin:0;
  display:grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 14px;
}
@media (min-width: 1600px){
  #hits .ais-Hits-list{ grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); }
}
@media (max-width: 980px){
  #hits .ais-Hits-list{ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
}
#hits .ais-Hits-item{ margin:0; padding:0; }
#hits .ais-Hits-item::marker{ content:""; }

/* ---- Admin: Tag chips editor ---- */
.bh-tag-editor{
  display:block;
  padding: 10px 12px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.04);
}
.bh-tag-chips{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  align-items:center;
  max-height: 132px;
  overflow:auto;
  padding-right: 4px;
}
.bh-tagchip{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.06);
  color: var(--muted);
  font-size: 12px;
}
.bh-tag-del{
  appearance:none;
  border:0;
  background: transparent;
  color: var(--muted);
  cursor:pointer;
  font-size: 14px;
  line-height: 1;
  padding: 0 2px;
}
.bh-tag-del:hover{ color: var(--text); }

.bh-tag-input{
  width: 100%;
  min-width: 0;
  border:0;
  outline:none;
  background: transparent;
  color: var(--text);
  font-size: 14px;
  margin-top: 8px;
  padding: 10px 0 6px;
  border-top: 1px dashed var(--border2);
}
.bh-tag-input::placeholder{ color: rgba(127,127,127,.55); }

/* ---- Details ---- */
.bh-details summary{
  cursor:pointer;
  user-select:none;
  list-style:none;
  font-weight:900;
}
.bh-details summary::-webkit-details-marker{ display:none; }
.bh-details summary::before{
  content:"▸";
  display:inline-block;
  margin-right:8px;
  transform: translateY(-1px);
  color: var(--muted);
}
.bh-details[open] summary::before{ content:"▾"; }

/* ---- AI options layout ---- */
.bh-ai-options{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  align-items:center;
  margin-top:10px;
}
.bh-input-sm{
  width: 90px;
  padding: 9px 12px;
}

/* ---- Admin layout (v1.1.6) ---- */
.bh-admin-layout{
  display:grid;
  gap: 14px;
}

/* 顶部两张卡：左“加载/编辑”，右“封面与来源”（同高对齐） */
.bh-admin-topgrid,
.bh-admin-bodygrid{
  display:grid;
  grid-template-columns: 1.12fr .88fr;
  gap: 16px;
}
.bh-admin-topgrid{ align-items: stretch; }
.bh-admin-bodygrid{ align-items: start; }

@media (max-width: 980px){
  .bh-admin-topgrid,
  .bh-admin-bodygrid{ grid-template-columns: 1fr; }
}

.bh-admin-main{ display:grid; gap: 14px; }
.bh-admin-side{ display:grid; gap: 14px; position: sticky; top: calc(var(--bh-header-h, 72px) + 16px); align-self:start; }
@media (max-width: 980px){
  .bh-admin-side{ position: static; top: auto; }
}

/* cover preview */
.bh-coverbox{
  display:grid;
  grid-template-columns: 150px 1fr;
  gap: 14px;
  align-items:start;
}
@media (max-width: 560px){
  .bh-coverbox{ grid-template-columns: 1fr; }
}
.bh-coverPreview{
  width: 150px;
  aspect-ratio: 3/4;
  border-radius: 18px;
  border: 1px solid var(--border2);
  background: var(--panel2);
  overflow:hidden;
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow: var(--shadow-sm);
  position: relative;
}
.bh-coverPreview img{ width:100%; height:100%; object-fit:cover; display:block; }
.bh-coverPreview:hover{
  border-color: rgba(37,99,235,.30);
}
html[data-theme="dark"] .bh-coverPreview:hover{
  border-color: rgba(245,193,91,.26);
}

.bh-status{
  display:inline-flex;
  align-items:center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: 999px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  font-size: 12px;
  color: var(--muted);
}
.bh-status[data-state="saved"]{
  border-color: rgba(22,163,74,.28);
  background: rgba(22,163,74,.10);
  color: var(--text);
}
.bh-status[data-state="saving"]{
  border-color: rgba(37,99,235,.26);
  background: rgba(37,99,235,.10);
  color: var(--text);
}
html[data-theme="dark"] .bh-status[data-state="saving"]{
  border-color: rgba(245,193,91,.22);
  background: rgba(245,193,91,.10);
}
.bh-status[data-state="dirty"]{
  border-color: rgba(124,58,237,.26);
  background: rgba(124,58,237,.10);
  color: var(--text);
}
.bh-status[data-state="error"]{
  border-color: rgba(239,68,68,.30);
  background: rgba(239,68,68,.12);
  color: var(--text);
}
/* ---- Admin: mini table (v1.1.6 governance) ---- */
.bh-table{
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.bh-table th, .bh-table td{
  text-align: left;
  padding: 8px 10px;
  border-bottom: 1px solid var(--border2);
  vertical-align: top;
}
.bh-table th{
  font-size: 12px;
  color: var(--muted);
  font-weight: 800;
}
.bh-table tr:hover td{
  background: rgba(255,255,255,.04);
}

/* ---- Dashboard: AI analysis output (v1.2.0) ---- */
.bh-ai-box{
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.04);
  border-radius: 18px;
  padding: 12px;
}
html[data-theme="dark"] .bh-ai-box{
  background: rgba(255,255,255,.03);
}

.bh-ai-section{ margin-top: 12px; }
.bh-ai-title{
  font-weight: 900;
  margin: 2px 0 8px 0;
  font-size: 13px;
}
.bh-ai-actions{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  align-items:center;
}

.bh-badge{
  display:inline-flex;
  align-items:center;
  padding: 3px 8px;
  border-radius: 999px;
  border: 1px solid var(--border2);
  background: rgba(255,255,255,.05);
  font-size: 12px;
  color: var(--muted);
}
.bh-badge[data-level="high"]{
  border-color: rgba(239,68,68,.32);
  background: rgba(239,68,68,.10);
  color: var(--text);
}
.bh-badge[data-level="medium"]{
  border-color: rgba(245,193,91,.30);
  background: rgba(245,193,91,.10);
  color: var(--text);
}
.bh-badge[data-level="low"]{
  border-color: rgba(22,163,74,.26);
  background: rgba(22,163,74,.10);
  color: var(--text);
}


/* ---- v1.2.1: semi-closed dropdown (status/source) ---- */
.bh-combo{
  display:flex;
  gap:8px;
  align-items:center;
}
.bh-combo .bh-input{ flex:1; }
.bh-btn-icon{
  width:34px;
  padding: 0;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}
.bh-modal-tabs{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  align-items:center;
  margin-top: 6px;
}
.bh-modal-tabs .bh-btn[aria-current="true"]{
  box-shadow: inset 0 0 0 1px var(--border2);
}
.bh-option-note{
  font-size:12px;
  color: var(--muted);
  margin-top: 6px;
}
.bh-table .opt-emoji{
  width:72px;
  text-align:center;
}
.bh-table .opt-value{
  width:100%;
}
.bh-table .opt-actions{
  white-space:nowrap;
  text-align:right;
}
