/* =========================================================
   聚合盘 JuhePan v2 - 专业设计系统
   设计原则：克制的配色 / 清晰的层级 / 细腻的质感
   ========================================================= */
/* Inline SVG 图标（jp-xxx sprite）基础样式：1em 大小，跟随文字颜色 */
.jp-i {
  display: inline-block;
  width: 1em;
  height: 1em;
  vertical-align: -0.125em;
  fill: currentColor;
  flex-shrink: 0;
  overflow: visible;
}
.jp-i-lg { font-size: 1.6em; }
.jp-i-sm { font-size: .78em; }
/* 多行省略（预览摘要） */
.jp-line-clamp-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
:root {
  /* ============== 品牌色（纯色高级：深蓝）============== */
  --jp-primary: #1D4ED8;
  --jp-primary-rgb: 29, 78, 216;
  --jp-primary-600: #1E40AF;
  --jp-primary-50: #EFF6FF;
  --jp-primary-200: #A5B8EF;   /* 导航浅底：主色40%混白 */
  --jp-primary-400: #6C8CE6;   /* hero 中浅底：主色65%混白 */
  --jp-secondary: #0EA5E9;
  --jp-accent: #F59E0B;
  --jp-accent-2: #86C77D;
  --jp-on-primary: #FFFFFF;   /* 主色上的文字色（深底白字/亮底深字自动） */
  --jp-on-accent: #FFFFFF;
  --jp-on-accent-2: #FFFFFF;   /* 第二辅助色（撞色/绿家族） */
  --jp-grad: #1D4ED8;
  --jp-grad-soft: #EFF6FF;
  --jp-gold: #F59E0B;

  /* ============== 中性色（纯白底+深炭字）============== */
  --jp-bg: #FFFFFF;
  --jp-card: #FFFFFF;
  --jp-border: #E5E7EB;
  --jp-border-strong: #D1D5DB;
  --jp-text: #111827;          /* 接近黑：标题/正文 */
  --jp-text-2: #374151;        /* 深炭：次级文字 */
  --jp-text-muted: #4B5563;    /* 中炭：辅助文字（保证清晰可读） */
  --jp-muted: #4B5563;         /* 同上，兼容旧引用 */
  --jp-faint: #6B7280;         /* 弱炭：最浅辅助，绝不低于此 */

  /* ============== 语义色 ============== */
  --jp-success: #10B981;
  --jp-success-bg: #ECFDF5;
  --jp-danger: #EF4444;
  --jp-danger-bg: #FEF2F2;
  --jp-warn: #F59E0B;
  --jp-warn-bg: #FFFBEB;

  /* ============== 尺寸（精致圆角+阴影）============== */
  --jp-radius: 12px;
  --jp-radius-sm: 8px;
  --jp-shadow: 0 1px 2px rgba(17, 24, 39, .03), 0 3px 10px rgba(17, 24, 39, .03);
  --jp-shadow-hover: 0 2px 6px rgba(17, 24, 39, .05), 0 16px 36px -12px rgba(var(--jp-primary-rgb), .28);
  --jp-shadow-lg: 0 14px 36px -10px rgba(17, 24, 39, .14);
  --jp-shadow-sm: 0 1px 2px rgba(17, 24, 39, .04);

  --jp-font: -apple-system, BlinkMacSystemFont, "PingFang SC", "HarmonyOS Sans SC",
             "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;
  --jp-mono: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  background: var(--jp-primary-50, #FFFFFF);   /* 背景跟随主题浅色调：切换主题时页面整体变化 */
  color: var(--jp-text);
  font-family: var(--jp-font);
  font-size: 15px;
  line-height: 1.65;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  letter-spacing: .1px;
}
main { flex: 1; }
a { color: var(--jp-primary); text-decoration: none; transition: color .15s; }
a:hover { color: var(--jp-accent); text-decoration: underline; }
a:hover { color: var(--jp-accent); }
h1,h2,h3,h4,h5,h6 { font-weight: 700; color: var(--jp-text); letter-spacing: .2px; }
::selection { background: rgba(var(--jp-primary-rgb),.18); }

/* ---------- 滚动条 ---------- */
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-thumb { background: #D9D2C0; border-radius: 8px; }
::-webkit-scrollbar-thumb:hover { background: #B8AE96; }
::-webkit-scrollbar-track { background: transparent; }

/* =========================================================
   按钮
   ========================================================= */
.btn {
  border-radius: var(--jp-radius-sm);
  font-weight: 600;
  transition: transform .12s, box-shadow .15s, background .15s, color .15s, border-color .15s;
}
.btn:active { transform: scale(.97); }
.btn-jp {
  background: var(--jp-primary-600);
  box-shadow: 0 2px 10px rgba(var(--jp-primary-rgb), .22);
  color: #fff !important;
  border: none;
  padding: .55rem 1.3rem;
  box-shadow: 0 4px 14px rgba(var(--jp-primary-rgb), .28);
}
.btn-jp:hover { background: var(--jp-primary); color: var(--jp-on-primary) !important; transform: translateY(-1px); box-shadow: 0 8px 22px rgba(var(--jp-primary-rgb), .38); }
.btn-jp:active { background: var(--jp-primary-600); color: #fff !important; transform: translateY(0); }
.btn-jp-outline {
  border: 1.5px solid var(--jp-primary-600);
  color: var(--jp-primary-600);
  background: #fff;
  padding: .48rem 1.15rem;
}
.btn-jp-outline:hover { background: var(--jp-primary); color: var(--jp-on-primary, #fff) !important; border-color: var(--jp-primary); }
.btn-jp-outline:active { background: var(--jp-primary-600); color: #fff !important; border-color: var(--jp-primary-600); }
/* 统一上传/FAQ 标签按钮（胶囊白底+主色字） */
.jp-tabs-uniform .jp-tab-chip,
.jp-tabs-uniform .nav-link.jp-tab-chip {
  display: inline-flex; align-items: center; gap: .25rem;
  padding: .4rem 1rem; font-size: .85rem; font-weight: 600;
  border: 1.5px solid var(--jp-primary-600);
  background: #fff; color: var(--jp-primary-600);
  border-radius: 999px; cursor: pointer;
  transition: all .15s;
}
.jp-tabs-uniform .jp-tab-chip:hover,
.jp-tabs-uniform .nav-link.jp-tab-chip:hover {
  background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600);
}
.jp-tabs-uniform .nav-link.jp-tab-chip.active,
.jp-tabs-uniform .nav-link.jp-tab-chip.show,
.jp-tabs-uniform .jp-tab-chip.active {
  background: var(--jp-primary-600); color: #fff !important; border-color: var(--jp-primary-600);
  box-shadow: 0 4px 12px rgba(var(--jp-primary-rgb),.25);
}
.jp-tabs-uniform .jp-tab-chip.active .badge,
.jp-tabs-uniform .nav-link.jp-tab-chip.active .badge {
  background: rgba(255,255,255,.25) !important; color: #fff !important;
}
.btn-jp-ghost {
  border: 1px solid var(--jp-primary-600);
  color: var(--jp-primary-600);
  background: #fff;
  padding: .48rem 1.15rem;
  font-weight: 600;
}
.btn-jp-ghost:hover { border-color: var(--jp-accent); background: var(--jp-accent); color: var(--jp-on-accent, #fff); }
.btn-jp-sm { padding: .32rem .8rem; font-size: .84rem; border-radius: 8px; }
/* 筛选按钮选中态修复：outline+active 同时存在时确保渐变底 + 白字可见 */
.btn-jp-outline.btn-jp {
  background: var(--jp-grad) !important;
  color: var(--jp-on-primary, #fff) !important;
  border-color: transparent !important;
  box-shadow: 0 4px 12px rgba(var(--jp-primary-rgb), .28);
}
.btn-jp-ghost.btn-jp { background: var(--jp-grad) !important; color: var(--jp-on-primary, #fff) !important; border-color: transparent !important; }

.btn-danger-soft { background: var(--jp-danger-bg); color: var(--jp-danger); border: 1px solid #fecaca; border-radius: 8px; }
.btn-danger-soft:hover { background: var(--jp-danger); color: #fff; border-color: var(--jp-danger); }
.btn-success-soft { background: var(--jp-success-bg); color: var(--jp-success); border: 1px solid #bbf7d0; border-radius: 8px; }
.btn-success-soft:hover { background: var(--jp-success); color: #fff; border-color: var(--jp-success); }

/* =========================================================
   导航
   ========================================================= */
.jp-navbar {
  background: var(--jp-primary-200);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--jp-border);
  box-shadow: 0 6px 18px -10px rgba(15,23,42,.16);
  padding: .72rem 0;
  z-index: 1030;
}
.jp-navbar .navbar-brand {
  font-weight: 800;
  font-size: 1.32rem;
  color: var(--jp-text);
  letter-spacing: .5px;
  display: flex; align-items: center; gap: .5rem;
}
.jp-navbar .navbar-brand .logo-mark {
  width: 30px; height: 30px; border-radius: 9px;
  background: var(--jp-grad);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--jp-on-primary, #fff); font-size: 1rem;
  box-shadow: 0 3px 10px rgba(var(--jp-primary-rgb), .35);
}
.jp-navbar .nav-link {
  color: var(--jp-text-2);
  font-weight: 600;
  font-size: .84rem;
  margin: 0 .02rem;
  padding: .4rem .5rem !important;
  border-radius: 9px;
  transition: all .15s;
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
}
.jp-navbar .nav-link svg { margin-right: .35rem; font-size: 1.05rem; opacity: .85; }
.jp-navbar .nav-link i,
.jp-navbar .nav-link svg { opacity: .8; }
.jp-navbar .nav-link:hover { color: var(--jp-primary-600); background: var(--jp-primary-50); }
.jp-navbar .nav-link.active { color: var(--jp-primary-600); background: var(--jp-primary-50); box-shadow: inset 0 0 0 1px var(--jp-border-strong); }
.jp-navbar .dropdown-menu {
  border-radius: 12px; border: 1px solid var(--jp-border);
  box-shadow: var(--jp-shadow-lg); padding: .4rem;
}
.jp-navbar .dropdown-menu .dropdown-item { border-radius: 8px; padding: .5rem .8rem; font-size: .9rem; }
.jp-navbar .dropdown-menu .dropdown-item:hover { background: var(--jp-primary-50); color: var(--jp-primary-600); }
.jp-nav-user {
  color: var(--jp-text); font-weight: 700; font-size: .95rem;
  display: flex; align-items: center; gap: .45rem;
  border-radius: 10px; padding: .3rem .55rem;
}
.jp-nav-user.nav-user-active {
  color: var(--jp-primary);
  background: rgba(var(--jp-primary-rgb), .14);
  box-shadow: 0 0 0 1px rgba(var(--jp-primary-rgb), .22);
}
/* 全局返回条（每个跳转页面顶部的返回标志） */
.jp-back-wrap {
  display: flex; align-items: center; gap: .9rem;
  padding: .5rem 0;
  background: var(--jp-primary-50);
  border-bottom: 1px solid var(--jp-border);
  flex-wrap: wrap;
}
.jp-back-btn {
  display: inline-flex; align-items: center; gap: .2rem;
  border: 1px solid var(--jp-border);
  background: #fff;
  color: var(--jp-primary-600);
  font-weight: 600; font-size: .84rem;
  border-radius: 999px; padding: .28rem .8rem;
  cursor: pointer; transition: all .15s;
  box-shadow: 0 1px 3px rgba(15,23,42,.05);
}
.jp-back-btn:hover { background: var(--jp-primary-50); border-color: var(--jp-primary-600); }
.jp-back-crumb { display: inline-flex; align-items: center; gap: .35rem; font-size: .8rem; color: #5F5F5F; }
.jp-back-crumb a { color: var(--jp-primary); text-decoration: none; }
.jp-back-crumb .jp-back-sep { font-size: .7rem; opacity: .6; }
.jp-back-current { color: #0f172a; font-weight: 600; }
@media (max-width: 575.98px) {
  .jp-back-crumb { display: none; }
}
.jp-avatar {
  width: 30px; height: 30px; border-radius: 50%;
  background: var(--jp-primary-600); color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: .85rem; font-weight: 700; flex-shrink: 0;
}

/* =========================================================
   Hero
   ========================================================= */
.jp-hero {
  background: var(--jp-primary-600);
  color: #fff;
  padding: 4rem 0 4.6rem;
  position: relative;
  overflow: hidden;
}
.jp-hero::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: transparent; }
.jp-hero .jp-hero-inner { position: relative; z-index: 1; }
.jp-hero .jp-eyebrow {
  display: inline-flex; align-items: center; gap: .45rem;
  background: rgba(255,255,255,.22); border: 1px solid rgba(255,255,255,.4);
  color: #fff; font-size: .8rem; font-weight: 600;
  padding: .3rem .9rem; border-radius: 99px; margin-bottom: 1.1rem;
  backdrop-filter: blur(6px);
}
.jp-hero h1 {
  font-weight: 800; font-size: 2.6rem; letter-spacing: 1px; color: #fff;
  line-height: 1.25; margin-bottom: .7rem;
}
.jp-hero h1 .jp-gradient-text {
  background: linear-gradient(92deg, #FFFFFF 0%, var(--jp-primary-200) 55%, var(--jp-primary-400) 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  -webkit-text-fill-color: transparent;
}
.jp-hero .sub { color: #fff; opacity: .85; font-size: 1.02rem; letter-spacing: .3px; max-width: 620px; margin: 0 auto; }
.jp-hero .jp-searchbox { max-width: 720px; margin: 1.6rem auto 0; }

.jp-searchbox {
  display: flex;
  background: #fff;
  border-radius: 16px;
  padding: 6px;
  box-shadow: 0 18px 50px rgba(45, 45, 45, .18);
  border: 1px solid rgba(255,255,255,.4);
}
.jp-searchbox input {
  flex: 1; border: none; outline: none; padding: .68rem 1rem;
  font-size: 1.05rem; background: transparent; color: var(--jp-text); min-width: 0;
}
.jp-searchbox input::placeholder { color: var(--jp-faint); }
.jp-searchbox .btn { border-radius: 12px; padding: .62rem 1.7rem; font-weight: 700; }
.jp-hero .jp-searchbox .btn { background: #fff !important; color: var(--jp-text) !important; font-weight: 700; box-shadow: 0 4px 14px rgba(var(--jp-primary-rgb),.28); }
.jp-hero .jp-searchbox .btn:hover { background: var(--jp-accent) !important; color: var(--jp-on-accent, #1F1F1F) !important; }
.jp-hero .jp-searchbox .btn svg { opacity: .85; }

.jp-hot-tags { display: flex; flex-wrap: wrap; gap: .45rem; justify-content: center; margin-top: 1rem; }
.jp-hot-tags a {
  color: #fff; font-size: .83rem;
  background: rgba(255,255,255,.22); border: 1px solid rgba(255,255,255,.4);
  padding: .25rem .8rem; border-radius: 99px; transition: all .15s;
}
.jp-hot-tags a:hover { color: var(--jp-text); background: #fff; border-color: #fff; }
.jp-hot-tags .jp-hot-label { color: #fff; opacity: .75; font-size: .8rem; border: none; background: transparent; }

.jp-stat { text-align: center; }
.jp-stat .num { font-size: 1.9rem; font-weight: 800; color: #fff; letter-spacing: .5px; }
.jp-stat .lbl { color: #fff; opacity: .8; font-size: .86rem; margin-top: .1rem; }

/* =========================================================
   卡片与板块
   ========================================================= */
.jp-card {
  background: var(--jp-primary-50);
  border: 1px solid var(--jp-border);
  border-radius: var(--jp-radius);
  box-shadow: 0 1px 2px rgba(17, 24, 39, .04), 0 6px 20px -8px rgba(17, 24, 39, .08);
}
.jp-card-hover { transition: transform .18s, box-shadow .18s, border-color .18s; }
.jp-card-hover:hover { transform: translateY(-4px); box-shadow: var(--jp-shadow-hover); border-color: var(--jp-accent); }

.jp-board-card { display: flex; align-items: center; gap: .95rem; padding: 1.1rem 1.2rem; }
.jp-board-icon {
  width: 48px; height: 48px; border-radius: 13px;
  background: var(--jp-grad-soft); color: var(--jp-primary-600);
  display: flex; align-items: center; justify-content: center; font-size: 1.45rem;
  flex-shrink: 0; transition: all .2s;
  border: 1px solid rgba(var(--jp-primary-rgb),.08);
}
.jp-board-card:hover .jp-board-icon { background: var(--jp-accent); color: var(--jp-on-accent, #fff); transform: scale(1.05); }
.jp-board-card .jp-board-name { font-weight: 700; font-size: .98rem; }
.jp-board-card .jp-board-meta { color: var(--jp-muted); font-size: .8rem; }

/* 资源卡片 */
.jp-res-card { padding: 1.05rem 1.15rem 1.1rem; height: 100%; display: flex; flex-direction: column; }
.jp-res-card .jp-res-head { display: flex; align-items: center; gap: .4rem; margin-bottom: .6rem; flex-wrap: wrap; }
.jp-res-card .jp-res-title {
  font-weight: 600; font-size: .96rem; line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  min-height: 2.95em;
}
.jp-res-card .jp-res-title a { color: var(--jp-text); }
.jp-res-card .jp-res-title a:hover { color: var(--jp-accent); }
.jp-res-card .jp-res-foot {
  margin-top: auto; padding-top: .7rem;
  display: flex; align-items: center; justify-content: space-between;
  color: var(--jp-muted); font-size: .78rem;
}
.jp-res-card .jp-res-foot i { font-size: .8rem; }

/* ===================== 新版资料卡片（截图样式） ===================== */
.jp-res-card-v2 {
  padding: .85rem .95rem .9rem;
  height: 100%;
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--jp-border);
  border-radius: 14px;
  box-shadow: var(--jp-shadow);
  transition: transform .18s, box-shadow .18s, border-color .18s;
}
.jp-res-card-v2:hover {
  transform: translateY(-4px);
  box-shadow: var(--jp-shadow-hover);
  border-color: var(--jp-border-strong);
}
.jp-res-v2-head {
  display: flex;
  align-items: flex-start;
  gap: .5rem;
  margin-bottom: .55rem;
}
.jp-res-v2-pan {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  padding: .18rem .55rem;
  border-radius: 6px;
  font-size: .72rem;
  font-weight: 600;
  line-height: 1.4;
  border: 1px solid transparent;
}
.jp-res-v2-title {
  flex: 1;
  margin: 0;
  font-size: .98rem;
  font-weight: 700;
  line-height: 1.45;
  color: var(--jp-text);
}
.jp-res-v2-preview-btn {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px; height: 28px;
  padding: 0;
  border: 1px solid var(--jp-border);
  border-radius: 7px;
  background: #fff;
  color: var(--jp-muted);
  cursor: pointer;
  transition: all .15s;
}
.jp-res-v2-preview-btn:hover {
  border-color: var(--jp-primary-600);
  color: var(--jp-primary-600);
  background: var(--jp-primary-50);
}
.jp-res-v2-preview-btn svg { font-size: .9rem; }
.jp-res-v2-preview {
  background: #EEF4EC;
  border: 1px solid #bbf7d0;
  border-radius: 10px;
  padding: .75rem .9rem;
  margin-bottom: .85rem;
}
.jp-res-v2-preview-title {
  font-size: .78rem;
  color: var(--jp-muted);
  margin-bottom: .5rem;
}
.jp-res-v2-file {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .4rem 0;
  font-size: .85rem;
  color: var(--jp-text);
  border-bottom: 1px dashed #bbf7d0;
}
.jp-res-v2-file span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.jp-res-v2-file:last-child { border-bottom: none; }
.jp-res-v2-file .jp-i { color: var(--jp-primary); font-size: 1.05rem; flex-shrink: 0; }
.jp-res-v2-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .9rem;
  margin-bottom: .5rem;
  font-size: .78rem;
  color: var(--jp-muted);
}
.jp-res-v2-meta .jp-i { font-size: .85rem; }
.jp-res-v2-tip {
  display: flex;
  align-items: center;
  gap: .35rem;
  font-size: .74rem;
  color: var(--jp-muted);
  margin-bottom: .75rem;
}
.jp-res-v2-tags {
  display: flex;
  flex-wrap: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
  gap: .45rem;
  margin-bottom: .95rem;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.jp-res-v2-tags::-webkit-scrollbar { display: none; }
.jp-res-v2-tag {
  display: inline-flex;
  padding: .2rem .55rem;
  border: 1px solid #a7f3d0;
  border-radius: 999px;
  font-size: .74rem;
  line-height: 1.35;
  white-space: nowrap;
  flex-shrink: 0;
  flex-shrink: 0;
  color: #059669;
  background: #ecfdf5;
}
.jp-res-v2-actions {
  margin-top: auto;
  display: flex;
  flex-wrap: wrap;
  gap: .45rem;
}
/* 卡片：详情 / 收藏 / 举报 三按钮永远排在一行（强制 3 等分、nowrap） */
.jp-res-v2-actions.jp-res-v2-actions-row {
  flex-wrap: nowrap;
  gap: .35rem;
}
.jp-res-v2-actions.jp-res-v2-actions-row .jp-res-v2-btn {
  flex: 1 1 0;
  min-width: 0;
}
.jp-res-v2-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .35rem;
  flex: 1 1 calc(50% - .23rem);
  min-width: 70px;
  padding: .4rem .35rem;
  border: 1px solid var(--jp-border);
  border-radius: 8px;
  background: #fff;
  color: var(--jp-text);
  font-size: .74rem;
  font-weight: 500;
  text-decoration: none;
  transition: all .15s;
  cursor: pointer;
  line-height: 1.3;
  white-space: nowrap;
}
.jp-res-v2-btn:hover {
  border-color: var(--jp-primary-600);
  color: var(--jp-primary-600);
  background: var(--jp-primary-50);
}
.jp-res-v2-btn svg { font-size: .85rem; flex-shrink: 0; }
.jp-res-v2-btn-primary {
  background: var(--jp-primary);
  color: var(--jp-on-primary, #fff);
  border-color: var(--jp-primary);
}
.jp-res-v2-btn-primary:hover {
  background: var(--jp-primary-600);
  color: #fff;
  border-color: var(--jp-primary-600);
}

/* 详情页网盘文件预览（可滑动） */
.jp-filetree {
  max-height: 300px;
  overflow-y: auto;
  border: 1px solid var(--jp-border);
  border-radius: 10px;
  background: #f8fafc;
  padding: .25rem .5rem;
}
.jp-filetree .jp-ft-row {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .35rem .25rem;
  border-bottom: 1px dashed #eef2f7;
}
.jp-filetree .jp-ft-row:last-child { border-bottom: none; }
.jp-filetree .jp-ft-row svg { font-size: 1.05rem; flex-shrink: 0; color: var(--jp-primary); }
.jp-filetree .jp-ft-row.folder svg { color: #f59e0b; }
.jp-filetree .jp-ft-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: .85rem;
  color: var(--jp-text);
}
.jp-filetree .jp-ft-size { color: #6E6E6E; font-size: .74rem; flex-shrink: 0; }
/* 滚动条美化 */
.jp-filetree::-webkit-scrollbar { width: 8px; }
.jp-filetree::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 8px; }
.jp-filetree::-webkit-scrollbar-track { background: transparent; }

/* 详情页右侧相关推荐 */
.jp-reco-side {
  display: block;
  padding: .75rem .5rem;
  border-bottom: 1px solid #f1f5f9;
  border-radius: 8px;
  text-decoration: none;
  color: inherit;
  transition: all .15s;
}
.jp-reco-side:hover {
  background: #f8fafc;
  transform: translateX(3px);
}
.jp-reco-side:last-child { border-bottom: none; }

/* 列表卡片（搜索/记录） */
.jp-res-row { padding: 1.05rem 1.2rem; }

/* 返回按钮（进入板块/查看更多后使用） */
.jp-back-link {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  color: var(--jp-muted);
  font-size: .84rem;
  font-weight: 500;
  text-decoration: none;
  padding: .35rem .6rem;
  border-radius: 8px;
  transition: all .15s;
}
.jp-back-link:hover {
  color: var(--jp-primary-600);
  background: var(--jp-primary-50);
}
.jp-back-link svg { font-size: .85rem; }

/* 徽章体系 */
.jp-badge {
  display: inline-flex; align-items: center; gap: .28rem;
  padding: .14rem .55rem; border-radius: 7px;
  font-size: .72rem; font-weight: 600; line-height: 1.5; white-space: nowrap;
}
.jp-badge-board { background: var(--jp-primary-50); color: var(--jp-primary-600); }
.jp-badge-top { background: var(--jp-warn-bg); color: var(--jp-warn); }
.jp-badge-vip { background: var(--jp-gold); color: #1F1F1F; font-weight: 700; }
.jp-badge-ok { background: var(--jp-success-bg); color: var(--jp-success); }
.jp-badge-wait { background: var(--jp-warn-bg); color: var(--jp-warn); }
.jp-badge-no { background: var(--jp-danger-bg); color: var(--jp-danger); }
.jp-badge-muted { background: #f1f3f9; color: var(--jp-muted); }
.jp-badge-cat { background: #f1f3f9; color: #4b5568; }
.jp-badge-batch { background: #ecfeff; color: #0891b2; }

/* 网盘类型徽章 */
.jp-pan {
  display: inline-flex; align-items: center; gap: .3rem;
  font-size: .72rem; font-weight: 600; padding: .12rem .5rem; border-radius: 7px;
  border: 1px solid transparent; white-space: nowrap;
}
.jp-pan-baidu  { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-quark  { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-alipan { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-lanzou { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-pan123 { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-xunlei { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-tianyi { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-pan115 { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-weiyun { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-uc     { background: var(--jp-primary-50); color: var(--jp-primary-600); border-color: var(--jp-primary-600); }
.jp-pan-other  { background: #f1f3f9; color: var(--jp-muted); border-color: var(--jp-border); }

/* 提取码遮罩 */
.jp-code-mask {
  font-family: var(--jp-mono);
  font-weight: 700; letter-spacing: 2px;
  background: #eef1f6; padding: .18rem .65rem; border-radius: 7px;
  cursor: pointer; user-select: none; border: 1px dashed var(--jp-border-strong);
  transition: all .15s;
}
.jp-code-mask:hover { border-color: var(--jp-primary); color: var(--jp-primary); }

/* 星级 */
.jp-stars { color: #f59e0b; letter-spacing: 1px; }
.jp-stars .bi-star { color: #d6d9e4; }

/* =========================================================
   表单
   ========================================================= */
.form-control, .form-select {
  border-radius: var(--jp-radius-sm);
  border-color: var(--jp-border-strong);
  font-size: .94rem;
  padding: .55rem .8rem;
}
.form-control:focus, .form-select:focus {
  border-color: var(--jp-primary);
  box-shadow: 0 0 0 .22rem rgba(var(--jp-primary-rgb), .12);
}
.form-control::placeholder { color: var(--jp-faint); }
.jp-label { font-weight: 600; font-size: .87rem; margin-bottom: .4rem; color: var(--jp-text-2); }
.form-text { color: var(--jp-muted); font-size: .8rem; }
.form-check-input:checked { background-color: var(--jp-primary); border-color: var(--jp-primary); }

/* =========================================================
   章节标题 / 通用
   ========================================================= */
.jp-section-head { display: flex; align-items: center; justify-content: space-between; margin: 2.1rem 0 1.1rem; }
.jp-section-title {
  font-weight: 800; font-size: 1.22rem; margin: 0;
  display: flex; align-items: center; gap: .55rem;
}
.jp-section-title::before {
  content: ""; width: 4px; height: 18px; border-radius: 3px;
  background: var(--jp-grad); display: inline-block;
}
.jp-section-title .bi { color: var(--jp-primary); }
.jp-more-link { color: var(--jp-muted); font-size: .86rem; font-weight: 500; }
.jp-more-link:hover { color: var(--jp-primary); }
.jp-divider { border: none; border-top: 1px solid var(--jp-border); margin: 1.25rem 0; }

.jp-empty { text-align: center; color: var(--jp-muted); padding: 3.2rem 1rem; }
.jp-empty .bi { font-size: 3rem; opacity: .3; display: block; margin-bottom: .6rem; }
.jp-empty .jp-empty-title { font-weight: 600; color: var(--jp-text-2); margin-bottom: .2rem; }

/* 面包屑 */
.jp-crumb { font-size: .84rem; color: var(--jp-muted); }
.jp-crumb a { color: var(--jp-muted); }
.jp-crumb a:hover { color: var(--jp-accent); }
.jp-crumb .bi-chevron-right { font-size: .7rem; margin: 0 .35rem; opacity: .6; }

/* 分页 */
.jp-pagination .page-link {
  border-radius: 9px !important; margin: 0 3px; color: var(--jp-primary);
  border: 1px solid var(--jp-border); font-size: .88rem; font-weight: 600;
}
.jp-pagination .page-item.active .page-link { background: var(--jp-grad); border-color: transparent; color: var(--jp-on-primary, #fff); box-shadow: 0 4px 12px rgba(var(--jp-primary-rgb),.3); }
.jp-pagination .page-item.disabled .page-link { color: var(--jp-faint); }

/* 高亮 */
mark, .mark {
  background: #FDE68A;
  color: inherit; padding: 0 .1em; border-radius: 2px;
}

/* 提示条 */
.jp-tipbar {
  display: flex; align-items: center; gap: .6rem;
  background: var(--jp-primary-50); border: 1px solid #dfe3ff;
  color: var(--jp-primary-600); font-size: .86rem;
  padding: .6rem 1rem; border-radius: var(--jp-radius-sm);
}
.jp-tipbar-warn { background: var(--jp-warn-bg); border-color: #fde68a; color: var(--jp-warn); }

/* =========================================================
   页脚
   ========================================================= */
.jp-footer {
  background: var(--jp-primary-600); color: rgba(255,255,255,.85);
  padding: 2.6rem 0 1.5rem; margin-top: 3.5rem; font-size: .88rem;
}
/* 桌面端：底部内容整体左移，避开右下角公众号浮窗（浮窗宽200px+右侧18px） */
@media (min-width: 992px) {
  .jp-footer .container { padding-right: 190px; }
  .jp-footer { padding-bottom: 2.5rem; }
}
.jp-footer a { color: rgba(255,255,255,.8); }
.jp-footer a:hover { color: #fff; text-decoration: underline; }
.jp-footer .ft-title { color: #fff; font-weight: 700; margin-bottom: .8rem; font-size: .95rem; }
.jp-footer .ft-brand { font-weight: 800; font-size: 1.2rem; color: #fff; display: flex; align-items: center; gap: .5rem; margin-bottom: .6rem; }

/* =========================================================
   会员页
   ========================================================= */
.jp-price-card { border-radius: 18px; overflow: hidden; transition: transform .2s, box-shadow .2s; background: var(--jp-primary-50); border: 1px solid var(--jp-border-strong); }
.jp-price-card:hover { transform: translateY(-5px); box-shadow: var(--jp-shadow-hover); }
.jp-price-card .head { padding: 1.5rem 1.2rem; color: #fff; text-align: center; }
.jp-price-card .price { font-size: 2.1rem; font-weight: 800; letter-spacing: .5px; }
.jp-price-card .perk { padding: .42rem .9rem; font-size: .84rem; color: var(--jp-text-2); }
.jp-price-card .perk .bi-check2 { color: var(--jp-success); }
.jp-price-card .perk.off { color: var(--jp-faint); }
.jp-price-card .perk.off .bi-x-lg { color: #d6d9e4; }
.jp-price-flag { text-align: center; font-size: .76rem; font-weight: 700; padding: .28rem; background: var(--jp-warn-bg); color: var(--jp-warn); }

/* =========================================================
   后台
   ========================================================= */
.jp-admin-body { background: #eef0f6; }
.jp-sidebar {
  background: #14172b; min-height: 100vh; color: rgba(255,255,255,.82);
  position: sticky; top: 0; height: 100vh; overflow-y: auto;
  display: flex; flex-direction: column;
}
.jp-sidebar .brand {
  color: #fff; font-weight: 800; font-size: 1.12rem; padding: 1.15rem 1.25rem;
  display: flex; align-items: center; gap: .55rem; border-bottom: 1px solid rgba(255,255,255,.07);
}
.jp-sidebar .brand .logo-mark {
  width: 30px; height: 30px; border-radius: 9px; background: var(--jp-grad);
  display: inline-flex; align-items: center; justify-content: center; font-size: .95rem;
}
.jp-sidebar nav { padding: .7rem .6rem; flex: 1; }
.jp-sidebar .jp-snav-label { font-size: .7rem; color: rgba(255,255,255,.72); font-weight: 700; letter-spacing: 1px; padding: .9rem .8rem .35rem; }
.jp-sidebar a.slink {
  display: flex; align-items: center; gap: .68rem; color: rgba(255,255,255,.7);
  padding: .58rem .85rem; font-size: .9rem; border-radius: 9px;
  margin-bottom: 2px; transition: all .14s; border-left: 3px solid transparent;
}
.jp-sidebar a.slink i { width: 18px; text-align: center; font-size: .98rem; opacity: .8; }
.jp-sidebar a.slink:hover { color: #fff; background: rgba(255,255,255,.07); }
.jp-sidebar a.slink.active {
  color: var(--jp-on-primary, #fff); background: var(--jp-primary);
  border-left-color: #818cf8;
}
.jp-sidebar a.slink .badge { margin-left: auto; }

.jp-stat-card { border-radius: 14px; padding: 1.1rem 1.25rem; color: #fff; box-shadow: var(--jp-shadow); position: relative; overflow: hidden; }
.jp-stat-card::after {
  content: ""; position: absolute; right: -18px; top: -18px; width: 74px; height: 74px;
  border-radius: 50%; background: rgba(255,255,255,.12);
}
.jp-stat-card .bi { font-size: 1.6rem; opacity: .9; }
.jp-stat-card .num { font-size: 1.7rem; font-weight: 800; line-height: 1.2; }
.jp-stat-card .lbl { opacity: .85; font-size: .83rem; }

/* 智能运营建议 */
.jp-insight { border-radius: 12px; padding: .8rem 1rem; border: 1px solid var(--jp-border); background: #fbfcfe; }
.jp-insight-good { background: var(--jp-success-bg, #ecfdf5); border-color: #a7f3d0; }
.jp-insight-warn { background: var(--jp-warn-bg, #fff7ed); border-color: #fdba74; }
.jp-insight-urgent { background: #F9EBEB; border-color: #fca5a5; }
.jp-insight-detail { color: var(--jp-muted, #64748b); font-size: .85rem; line-height: 1.6; }
.jp-insight-badge { display: inline-block; padding: .1rem .55rem; border-radius: 999px; font-size: .72rem; font-weight: 700; background: #e5e7eb; color: #475569; }
.jp-insight-badge-good { background: #10b981; color: #1F1F1F; }
.jp-insight-badge-warn { background: #f59e0b; color: #1F1F1F; }
.jp-insight-badge-urgent { background: #ef4444; color: #1F1F1F; }

.jp-table thead th {
  background: #f6f7fb; font-size: .8rem; color: var(--jp-muted);
  font-weight: 700; white-space: nowrap; border-bottom: 1px solid var(--jp-border);
  padding: .65rem .75rem !important;
}
.jp-table td { vertical-align: middle; font-size: .88rem; padding: .6rem .75rem !important; }
.jp-table tbody tr:hover { background: #fafbff; }
/* ============== 表格链接深色显眼（修淡色）============== */
.jp-table td a { color: var(--jp-text); font-weight: 500; transition: color .15s; }
.jp-table td a:hover { color: var(--jp-primary); text-decoration: underline; }
.jp-table thead th { color: var(--jp-text-2) !important; font-weight: 700; background: #F9FAFB; }
.jp-table tbody tr:hover { background: var(--jp-primary-50) !important; }

.jp-table .text-truncate { max-width: 260px; }

.jp-trend { display: flex; align-items: flex-end; gap: 10px; height: 130px; padding-top: 10px; }
.jp-trend .bar { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.jp-trend .bar i {
  width: 100%; max-width: 46px; border-radius: 6px 6px 0 0;
  background: var(--jp-grad); min-height: 4px; transition: height .4s;
  box-shadow: 0 4px 10px rgba(var(--jp-primary-rgb),.25);
}
.jp-trend .bar span { font-size: .7rem; color: var(--jp-muted); }

/* 后台登录页 */
.jp-admin-login-body {
  background: #12142e;
  min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 1rem;
}
/* 全站公众号引导 */
.jp-gzh-fab {
  position: fixed; right: 12px; bottom: 16px; z-index: 1040;
  width: 118px; background: #fff; border: 1px solid var(--jp-border);
  border-radius: 12px; box-shadow: var(--jp-shadow);
  padding: .5rem .5rem .45rem; text-align: center;
  animation: jpFadeIn .4s ease;
}
.jp-gzh-fab .jp-gzh-close, .jp-gzh-bar .jp-gzh-close {
  position: absolute; top: 6px; right: 8px; border: none; background: transparent;
  color: var(--jp-faint); font-size: .75rem; padding: 4px; cursor: pointer;
}
.jp-gzh-fab .jp-gzh-close:hover, .jp-gzh-bar .jp-gzh-close:hover { color: var(--jp-text); }
.jp-gzh-title { display: flex; align-items: center; justify-content: center; gap: .35rem; font-size: .76rem; margin-bottom: .45rem; }
.jp-gzh-icon {
  width: 26px; height: 26px; border-radius: 8px; flex-shrink: 0;
  background: var(--jp-primary-600); color: #fff; font-size: .85rem;
  display: inline-flex; align-items: center; justify-content: center;
}
.jp-gzh-name { font-size: .68rem; color: var(--jp-muted); }
.jp-gzh-img { width: 74px; height: 74px; object-fit: contain; border-radius: 8px; border: 1px solid var(--jp-border); margin-bottom: .3rem; }
.jp-gzh-tip { font-size: .62rem; color: var(--jp-faint); }
@keyframes jpFadeIn { from { opacity: 0; transform: translateY(8px);} to { opacity: 1; transform: none; } }

/* 移动端公众号底部条 */
.jp-gzh-bar {
  display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 1040;
  background: var(--jp-primary-600); color: #fff; font-size: .8rem;
  padding: .55rem 2.2rem .55rem .8rem; gap: .5rem; align-items: center;
  backdrop-filter: blur(8px); box-shadow: 0 -4px 20px rgba(0,0,0,.2);
}
.jp-gzh-bar .jp-gzh-icon { width: 28px; height: 28px; font-size: .9rem; border-radius: 8px; }
.jp-gzh-bar .jp-gzh-follow {
  margin-left: auto; color: var(--jp-accent-2); font-weight: 700; font-size: .78rem; flex-shrink: 0;
}
@media (max-width: 767.98px) {
  .jp-gzh-fab { display: none !important; }
  .jp-gzh-bar { display: flex; }
}
@media (min-width: 768px) {
  .jp-gzh-fab { display: block; }
  .jp-gzh-bar { display: none !important; }
}

/* =========================================================
   移动端适配（移动优先思路：手机端清爽、电脑端专业）
   ========================================================= */

/* ---------- 平板及以下（<992px） ---------- */
@media (max-width: 767.98px) {
  body { font-size: 14.5px; }
  .jp-filter-panel { display: none; }
  .jp-filter-panel.jp-filter-open { display: block; }
  .jp-hero { padding: 2.8rem 0 3.4rem; }
  .jp-hero h1 { font-size: 2rem; }
  /* 后台移动端：侧边栏改为抽屉 + 顶部汉堡条 */
  .jp-topbar { display: flex; align-items: center; gap: .6rem; padding: .55rem .8rem;
    background: #14172b; color: #fff; position: sticky; top: 0; z-index: 1040; }
  .jp-topbar .jp-top-title { font-weight: 700; }
  .jp-topbar .btn-toggle { background: rgba(255,255,255,.1); border: 0; color: #fff;
    width: 38px; height: 38px; border-radius: 9px; display: inline-flex; align-items: center; justify-content: center; }
  .jp-sidebar { position: fixed; top: 0; left: 0; bottom: 0; width: 82vw; max-width: 320px;
    z-index: 1060; transform: translateX(-100%); transition: transform .25s ease; box-shadow: 0 0 40px rgba(0,0,0,.4); }
  body.admin-menu-open .jp-sidebar { transform: translateX(0); }
  .jp-sidebar-backdrop { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 1055; }
  body.admin-menu-open .jp-sidebar-backdrop { display: block; }
  .jp-sidebar .brand { padding: .9rem 1rem; }
  .jp-sidebar nav { display: block; padding: .6rem; }
  .jp-sidebar .jp-snav-label { padding: .8rem .6rem .3rem; }
  .jp-sidebar a.slink { margin-bottom: 1px; }
  .jp-sidebar .px-3 { display: flex; flex-direction: row; gap: .4rem; padding: 0 .5rem .8rem !important; }
  .jp-sidebar .px-3 .btn { flex: 1; }
  .jp-table thead th, .jp-table td { white-space: nowrap; }
  .table-responsive { -webkit-overflow-scrolling: touch; }
}

/* ---------- 手机（<768px） ---------- */
@media (max-width: 767.98px) {
  body { font-size: 14px; line-height: 1.6; }
  .container { padding-left: .9rem; padding-right: .9rem; }

  /* Hero */
  .jp-hero { padding: 2.4rem 0 2.8rem; }
  .jp-hero h1 { font-size: 1.6rem; letter-spacing: .3px; }
  .jp-hero .sub { font-size: .92rem; }
  .jp-hero .jp-eyebrow { font-size: .72rem; padding: .25rem .7rem; margin-bottom: .8rem; }
  .jp-hero .jp-searchbox { margin-top: 1.2rem; border-radius: 13px; padding: 5px; }
  .jp-hero .jp-searchbox input { font-size: .95rem; padding: .6rem .7rem; }
  .jp-hero .jp-searchbox .btn { padding: .55rem 1rem; font-size: .9rem; border-radius: 10px; }
  .jp-hot-tags { gap: .35rem; margin-top: .8rem; }
  .jp-hot-tags a { font-size: .76rem; padding: .22rem .65rem; }
  .jp-stat .num { font-size: 1.4rem; }
  .jp-stat .lbl { font-size: .75rem; }

  /* 板块：手机 4 列紧凑网格（一屏全览） */
  .jp-boards { flex-wrap: wrap !important; gap: .5rem; margin-left: 0 !important; margin-right: 0 !important; }
  .jp-boards .jp-board-col { flex: 0 0 calc(25% - .4rem); max-width: calc(25% - .4rem); padding: 0 !important; }
  .jp-boards .jp-board-card { flex-direction: column; align-items: center; justify-content: center; gap: .4rem; padding: .7rem .3rem; height: 100%; text-align: center; border-radius: 12px; }
  .jp-boards .jp-board-icon { width: 34px; height: 34px; font-size: 1.05rem; border-radius: 10px; }
  .jp-boards .jp-board-name { font-size: .78rem; }
  .jp-boards .jp-board-meta { font-size: .66rem; }
  .jp-boards .jp-board-card > .bi-chevron-right { display: none; }
  .jp-cat-grid { grid-template-columns: repeat(4, 1fr); gap: .5rem; }
  .jp-cat-item { padding: .7rem .2rem; }
  .jp-cat-icon { width: 34px; height: 34px; font-size: 1rem; border-radius: 10px; }
  .jp-cat-name { font-size: .74rem; }

  /* 章节标题 */
  .jp-section-head { margin: 1.6rem 0 .9rem; }
  .jp-section-title { font-size: 1.08rem; }

  /* 资源卡片：手机 2 列 */
  .jp-res-card { padding: .85rem .9rem .9rem; }
  .jp-res-card .jp-res-title { font-size: .88rem; min-height: 2.7em; }
  .jp-res-card .jp-res-head { margin-bottom: .45rem; }
  .jp-pan, .jp-badge { font-size: .68rem; }
  .jp-res-card .jp-res-foot { font-size: .72rem; }

  /* 搜索结果 */
  .jp-res-row { padding: .9rem 1rem; }
  .jp-res-row h5 { font-size: .95rem !important; }
  .jp-res-row .jp-res-meta { gap: .7rem !important; font-size: .78rem; }
  .jp-res-row .jp-res-meta .ms-auto { margin-left: 0 !important; width: 100%; margin-top: .5rem; }
  .jp-res-row .jp-res-meta .d-flex { width: 100%; }
  .jp-res-row .jp-res-meta .btn { flex: 1; }

  /* 详情页 */
  .jp-crumb { font-size: .76rem; }
  .jp-crumb .bi-chevron-right { margin: 0 .2rem; }

  /* 上传页 */
  .nav-pills { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .nav-pills::-webkit-scrollbar { display: none; }
  .nav-pills .nav-item { flex-shrink: 0; }

  /* 表格容器横向滚动 */
  .table-responsive { -webkit-overflow-scrolling: touch; border-radius: 10px; }

  /* 个人中心 */
  .jp-avatar { width: 26px; height: 26px; font-size: .75rem; }

  /* 页脚 */
  .jp-footer { padding: 1.8rem 0 1.2rem; margin-top: 2.5rem; }

  /* 会员套餐卡（手机 2 列紧凑） */
  .jp-price-card .head { padding: 1rem .8rem; }
  .jp-price-card .price { font-size: 1.6rem; }
  .jp-price-card .p-4 { padding: .3rem .6rem !important; }
  .jp-price-card .perk { padding: .3rem .6rem; font-size: .78rem; }
  .jp-price-flag { font-size: .68rem; padding: .2rem; }

  /* 新版资料卡片：手机 1 列紧凑 */
  .jp-res-card-v2 { padding: .8rem .9rem .85rem; border-radius: 12px; }
  .jp-res-v2-head { gap: .45rem; margin-bottom: .55rem; }
  .jp-res-v2-title { font-size: .92rem; line-height: 1.4; }
  .jp-res-v2-pan { font-size: .66rem; padding: .14rem .45rem; }
  .jp-res-v2-preview { padding: .6rem .75rem; margin-bottom: .65rem; border-radius: 8px; }
  .jp-res-v2-preview-title { font-size: .72rem; margin-bottom: .35rem; }
  .jp-res-v2-file { font-size: .78rem; padding: .3rem 0; }
  .jp-res-v2-file .jp-i { font-size: .95rem; }
  .jp-res-v2-meta { gap: .7rem; font-size: .72rem; }
  .jp-res-v2-tip { font-size: .7rem; margin-bottom: .55rem; }
  .jp-res-v2-tags { gap: .35rem; margin-bottom: .75rem; }
  .jp-res-v2-tag { font-size: .68rem; padding: .15rem .45rem; }
  .jp-res-v2-actions { gap: .4rem; }
  .jp-res-v2-btn { font-size: .7rem; padding: .35rem .25rem; gap: .25rem; }
  .jp-res-v2-btn svg { font-size: .78rem; }
  .jp-res-v2-preview-btn { width: 24px; height: 24px; }

  /* 弹窗 */
  .modal-dialog { margin: .6rem; }
  .modal-content { border-radius: 16px; }
}

/* ---------- PC 大屏（>=1200px）：4 列参考图样式 ---------- */
@media (min-width: 1200px) {
  .jp-list-wrap { max-width: 1520px; margin: 0 auto; padding-left: 1rem; padding-right: 1rem; }
  .jp-res-card-v2 { padding: .65rem .75rem .7rem; border-radius: 12px; }
  .jp-res-v2-head { margin-bottom: .4rem; gap: .4rem; }
  .jp-res-v2-title {
    font-size: .88rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .jp-res-v2-preview { padding: .5rem .6rem; margin-bottom: .45rem; border-radius: 8px; }
  .jp-res-v2-preview-title { font-size: .68rem; margin-bottom: .25rem; }
  .jp-res-v2-file { padding: .2rem 0; font-size: .74rem; }
  .jp-res-v2-file .jp-i { font-size: .92rem; }
  .jp-res-v2-meta { gap: .55rem; font-size: .68rem; margin-bottom: .35rem; }
  .jp-res-v2-tip { font-size: .66rem; margin-bottom: .45rem; }
  .jp-res-v2-tags { flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; margin-bottom: .55rem; gap: .3rem; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .jp-res-v2-tags::-webkit-scrollbar { display: none; }
  .jp-res-v2-tag { font-size: .64rem; padding: .1rem .35rem; }
  .jp-res-v2-actions { flex-wrap: wrap; gap: .3rem; }
  .jp-res-v2-btn {
    flex: 1 1 calc(50% - .15rem);
    min-width: 0;
    padding: .32rem .2rem;
    font-size: .68rem;
    gap: .2rem;
    border-radius: 7px;
  }
  .jp-res-v2-btn svg { font-size: .72rem; }
}

/* ---------- 小屏手机（<400px） ---------- */
@media (max-width: 399.98px) {
  .jp-res-card-v2 { padding: .7rem .8rem .75rem; }
  .jp-res-v2-title { font-size: .86rem; }
  .jp-res-v2-btn { font-size: .66rem; min-width: 60px; }
  .jp-res-v2-preview-btn { width: 22px; height: 22px; }
}
@media (max-width: 399.98px) {
  .jp-res-card .jp-res-title { font-size: .84rem; }
  .jp-hero .jp-searchbox .btn { padding: .5rem .8rem; }
  .jp-searchbox input { font-size: .88rem; }
}

/* 相关推荐：精致富卡片（序号徽章 + 封面 + 标题/简介 + meta） */
.jp-reco-rich {
  position: relative; display: flex; gap: .75rem; padding: .75rem;
  border-radius: 14px; border: 1px solid var(--jp-border); background: #fff;
  text-decoration: none; color: var(--jp-text);
  transition: border-color .2s, box-shadow .2s, transform .2s, background .2s;
  margin-bottom: .65rem; align-items: flex-start; overflow: hidden;
}
/* hover 高光：仅边框/阴影/位移，不再覆盖卡片内容（修复 hover 时看不到内容的 bug） */
.jp-reco-rich:hover {
  border-color: var(--jp-primary);
  box-shadow: 0 10px 24px rgba(var(--jp-primary-rgb), .18);
  transform: translateY(-2px);
  background: #fff;
}
.jp-reco-rank {
  position: absolute; top: -7px; left: -7px; z-index: 3;
  width: 24px; height: 24px; border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
  font-size: .68rem; font-weight: 700; color: var(--jp-on-primary);
  background: var(--jp-grad);
  box-shadow: 0 2px 8px rgba(var(--jp-primary-rgb),.35);
  font-family: var(--jp-mono, monospace);
}
.jp-reco-rank.rank-1 { background: #F59E0B; box-shadow:0 2px 8px rgba(245,158,11,.45); }
.jp-reco-rank.rank-2 { background: #94A3B8; box-shadow:0 2px 8px rgba(100,116,139,.45); }
.jp-reco-rank.rank-3 { background: #B45309; box-shadow:0 2px 8px rgba(180,83,9,.45); }
.jp-reco-cover {
  position: relative; width: 78px; height: 78px; flex-shrink: 0;
  border-radius: 11px; overflow: hidden;
  background: var(--jp-grad-soft);
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 0 0 1px rgba(99,102,241,.12), 0 2px 6px rgba(15,23,42,.05);
}
.jp-reco-cover img { width: 100%; height: 100%; object-fit: cover; }
/* v14 重写：封面 fallback 按序号/板块循环渐变 + 几何图案装饰，让卡片有视觉变化 */
.jp-reco-cover-fallback {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  color: #cbd5e1; font-size: 1.6rem;
  background: #f1f5f9;
  border-radius: 11px;
  position: relative;
  overflow: hidden;
}
/* 当相关推荐卡片没有封面图时：只显示简洁的灰色占位块，不显示任何彩色图标 */
.jp-reco-cover-noface {
  width: 100%; height: 100%;
  background: #f1f5f9;
  border-radius: 11px;
  border: 1px dashed #cbd5e1;
}
/* 序号 1-3 金银铜背景 */
.jp-reco-rich .jp-reco-cover-fallback.rank-1 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-2 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-3 { background:#e2e8f0;color:#94a3b8; }
/* 4+ 用主色渐变循环 */
.jp-reco-rich .jp-reco-cover-fallback.rank-4 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-5 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-6 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-7 { background:#e2e8f0;color:#94a3b8; }
.jp-reco-rich .jp-reco-cover-fallback.rank-8 { background:#e2e8f0;color:#94a3b8; }
/* 几何图案装饰（白色半透明圆+线） */
/* 不再绘制几何装饰，避免无封面时仍出现图案 */
.jp-reco-cover-fallback svg { position: relative; z-index: 2; filter: drop-shadow(0 2px 4px rgba(0,0,0,.25)); }
.jp-reco-tag {
  position: absolute; left: 0; right: 0; bottom: 0;
  background: rgba(15,23,42,.62); color: #fff;
  font-size: .56rem; line-height: 1.5; padding: .06rem .35rem;
  text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  backdrop-filter: blur(2px);
}
/* 相关推荐资料预览按钮：封面右上角小眼睛，点击打开全局预览框 */
.jp-reco-preview {
  position: absolute; right: 4px; top: 4px;
  width: 22px; height: 22px; padding: 0;
  border: none; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: #EFF6FF; color: #1D4ED8;
  font-size: .72rem; cursor: pointer; z-index: 2;
  box-shadow: 0 2px 6px rgba(15,23,42,.18);
  transition: transform .15s ease, background .15s ease;
}
.jp-reco-preview:hover { background: #F0EDE4; transform: scale(1.12); }
.jp-reco-preview .jp-i { width: 13px; height: 13px; }
.jp-reco-points {
  position: absolute; right: 4px; top: 4px;
  background: #E85D3F; color: #fff;
  font-size: .56rem; font-weight: 700; padding: 1px 6px; border-radius: 6px;
  box-shadow: 0 1px 4px rgba(239,68,68,.3);
}
.jp-reco-free {
  position: absolute; right: 4px; top: 4px;
  background: #2E8B57; color: #fff;
  font-size: .56rem; font-weight: 700; padding: 1px 6px; border-radius: 6px;
  box-shadow: 0 1px 4px rgba(22,163,74,.3);
}
.jp-reco-body { flex-grow: 1; min-width: 0; display: flex; flex-direction: column; padding-top: .1rem; }
.jp-reco-title {
  font-weight: 600; font-size: .86rem; line-height: 1.4; color: #1e293b;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; margin-bottom: .18rem;
}
.jp-reco-snippet {
  font-size: .69rem; color: #6E6E6E; line-height: 1.4;
  display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical;
  overflow: hidden; margin-bottom: .3rem;
}
.jp-reco-meta {
  margin-top: auto; font-size: .65rem; color: #6E6E6E;
  display: flex; gap: .6rem; align-items: center;
}
.jp-reco-meta .jp-i { font-size: .78rem; vertical-align: -1px; margin-right: 2px; }
.jp-reco-meta .jp-reco-rating { color: #f59e0b; font-weight: 600; }

/* 分类大全页：网格紧凑（PC/手机都方便浏览） */
.jp-cat-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: .5rem; }
.jp-cat-card {
  display: flex; flex-direction: column; align-items: center; gap: .28rem;
  padding: .7rem .35rem; text-align: center; border-radius: 10px;
  background: var(--jp-primary-50); border: 1px solid var(--jp-border);
  box-shadow: var(--jp-shadow-sm); transition: all .2s; color: var(--jp-text); text-decoration: none;
}
.jp-cat-card:hover { transform: translateY(-2px); box-shadow: var(--jp-shadow-hover); border-color: var(--jp-primary); }
/* 分类图标：撞色底 + 白字（体现多色撞色） */
.jp-cat-icon {
  width: 36px; height: 36px; border-radius: 10px; font-size: 1.05rem;
  background: var(--jp-accent); color: var(--jp-on-accent, #fff);
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 3px 10px rgba(var(--jp-primary-rgb), .22);
}
.jp-cat-card:hover .jp-cat-icon { transform: scale(1.08) rotate(-3deg); }
.jp-cat-name { font-weight: 600; font-size: .76rem; line-height: 1.2; }
.jp-cat-count { font-size: .65rem; color: var(--jp-faint); }
@media (max-width: 767.98px) { .jp-cat-grid { grid-template-columns: repeat(6, 1fr); } }
@media (max-width: 767.98px) { .jp-cat-grid { grid-template-columns: repeat(5, 1fr); gap: .45rem; } .jp-cat-card { padding: .55rem .3rem; } }
@media (max-width: 575.98px) { .jp-cat-grid { grid-template-columns: repeat(4, 1fr); gap: .4rem; } .jp-cat-card { padding: .5rem .25rem; } .jp-cat-icon { width: 30px; height: 30px; font-size: .95rem; } .jp-cat-name { font-size: .7rem; } }
@media (max-width: 575.98px) { .jp-cat-grid { grid-template-columns: repeat(3, 1fr); gap: .6rem; } .jp-cat-card { padding: .9rem .4rem; } .jp-cat-icon { width: 44px; height: 44px; font-size: 1.25rem; border-radius: 13px; } .jp-cat-name { font-size: .78rem; } }

/* 标签云 */
.jp-tag-chip {
  display: inline-flex; align-items: center; gap: .35rem;
  background: var(--jp-primary-50); color: var(--jp-text);
  border: 1px solid var(--jp-border); border-radius: 99px;
  padding: .3rem .85rem; font-weight: 600; transition: all .15s;
}
.jp-tag-chip:hover { background: var(--jp-primary-600); color: #fff; border-color: var(--jp-primary-600); transform: translateY(-2px); box-shadow: 0 6px 14px rgba(var(--jp-primary-rgb),.3); }
.jp-tag-count { font-size: .72em; opacity: .7; background: rgba(var(--jp-primary-rgb),.12); border-radius: 99px; padding: .05rem .45rem; }
.jp-tag-chip:hover .jp-tag-count { background: rgba(255,255,255,.22); }

/* 搜索页/商城 筛选胶囊 */
.jp-filter-chip {
  display: inline-flex; align-items: center; gap: .35rem;
  padding: .38rem .9rem; font-size: .84rem; font-weight: 500;
  color: var(--jp-text-2); background: #fff;
  border: 1px solid var(--jp-border); border-radius: 99px;
  transition: all .15s; line-height: 1.4;
}
.jp-filter-chip:hover { border-color: var(--jp-primary-600); color: var(--jp-primary-600); background: var(--jp-primary-50); }
.jp-filter-chip.active { background: var(--jp-primary-600); color: #fff; border-color: var(--jp-primary-600); box-shadow: 0 4px 12px rgba(var(--jp-primary-rgb),.25); }
.jp-filter-chip.active:hover { color: #fff; }

/* 全站顶部提示条 */
.jp-top-notice {
  background: var(--jp-primary-600);
  color: #fff;
  font-size: .82rem;
  padding: .45rem 0;
  position: relative;
  z-index: 1031;
  border-bottom: 1px solid rgba(0,0,0,.12);
}
.jp-top-notice b { font-weight: 600; }
.jp-top-notice-link {
  color: #fff;
  background: rgba(255,255,255,.22);
  padding: .15rem .7rem;
  border-radius: 99px;
  font-size: .75rem;
  font-weight: 600;
  margin-left: .3rem;
}
.jp-top-notice-link:hover { background: #fff; color: var(--jp-primary-600); }
.jp-top-notice-close {
  background: none; border: none; color: #fff; opacity: .7;
  padding: 0; margin-left: .5rem; cursor: pointer;
}
.jp-top-notice-close:hover { opacity: 1; }

/* 商城目录/分类卡片 */
.jp-cate-card {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 1rem .5rem; background: #fff;
  border: 1px solid var(--jp-border); border-radius: var(--jp-radius-sm);
  transition: all .15s; height: 100%;
}
.jp-cate-card:hover { border-color: var(--jp-primary); transform: translateY(-2px); box-shadow: var(--jp-shadow-hover); }
.jp-cate-card.active { background: var(--jp-grad-soft); border-color: var(--jp-primary-600); }
.jp-cate-card .jp-cate-icon {
  width: 48px; height: 48px; border-radius: 14px; display: flex; align-items: center; justify-content: center;
  background: var(--jp-grad-soft); color: var(--jp-primary-600); font-size: 1.4rem; margin-bottom: .4rem;
}
.jp-cate-card.sm .jp-cate-icon { width: 38px; height: 38px; font-size: 1.15rem; border-radius: 11px; margin-bottom: .3rem; }
.jp-cate-card .jp-cate-name { font-size: .86rem; font-weight: 600; color: var(--jp-text); text-align: center; }
.jp-cate-card .jp-cate-count { font-size: .72rem; color: var(--jp-muted); margin-top: .1rem; }
.jp-cate-card.active .jp-cate-icon { background: var(--jp-grad); color: var(--jp-on-primary, #fff); }

/* 首页功能入口 */
.jp-entry-card { display: flex; align-items: center; gap: .8rem; padding: 1rem 1.1rem; }
.jp-entry-card .jp-entry-icon {
  width: 44px; height: 44px; border-radius: 12px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center; font-size: 1.3rem;
  background: var(--jp-grad-soft); color: var(--jp-primary-600);
  border: 1px solid rgba(var(--jp-primary-rgb),.08); transition: all .18s;
}
.jp-entry-card:hover .jp-entry-icon { background: var(--jp-grad); color: var(--jp-on-primary, #fff); transform: scale(1.06); }
.jp-entry-name { font-weight: 700; font-size: .95rem; }
.jp-entry-desc { color: var(--jp-muted); font-size: .78rem; }

/* 使用建议步骤 */
.jp-step { position: relative; padding-left: 3.2rem; }
.jp-step .jp-step-num {
  position: absolute; left: 0; top: 0;
  width: 2.4rem; height: 2.4rem; border-radius: 12px;
  background: var(--jp-grad); color: var(--jp-on-primary, #fff); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 16px rgba(var(--jp-primary-rgb),.35);
}
.jp-step h6 { font-weight: 700; margin-bottom: .2rem; }
.jp-step p { color: var(--jp-muted); font-size: .86rem; margin: 0; }

/* 分类大全页 */
.jp-cat-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: .6rem; }
.jp-cat-item {
  display: flex; flex-direction: column; align-items: center; gap: .4rem;
  padding: .9rem .4rem; text-align: center; border-radius: 12px;
}
.jp-cat-icon {
  width: 40px; height: 40px; border-radius: 11px; font-size: 1.15rem;
  background: var(--jp-grad-soft); color: var(--jp-primary-600);
  display: flex; align-items: center; justify-content: center;
  border: 1px solid rgba(var(--jp-primary-rgb),.08); transition: all .18s;
}
.jp-cat-item:hover .jp-cat-icon { background: var(--jp-grad); color: var(--jp-on-primary, #fff); transform: scale(1.06); }
.jp-cat-name { font-size: .82rem; font-weight: 600; color: var(--jp-text-2); line-height: 1.3; }
.jp-cat-count { font-size: .7rem; color: var(--jp-faint); }

/* ---------- 通知角标 / 回到顶部 / 热搜标签 ---------- */
.jp-badge-dot {
  position: absolute; top: -2px; right: -6px; min-width: 17px; height: 17px;
  border-radius: 10px; background: #ef4444; color: #fff;
  font-size: .62rem; font-weight: 700; line-height: 17px; text-align: center;
  padding: 0 4px; box-shadow: 0 0 0 2px var(--jp-bg, #fff);
}
.jp-backtop {
  position: fixed; right: 18px; bottom: 160px; z-index: 1000;
  width: 42px; height: 42px; border-radius: 50%; border: none;
  background: var(--jp-grad); color: var(--jp-on-primary, #fff); font-size: 1.05rem;
  display: none; align-items: center; justify-content: center;
  box-shadow: 0 8px 20px rgba(var(--jp-primary-rgb),.35); cursor: pointer; transition: transform .15s;
}
.jp-backtop:hover { transform: translateY(-3px); }

/* =========================================================
   客服微信 / 公众号二维码浮窗（右下角常驻可关闭）
   ========================================================= */
.jp-kefu-fab-btn {
  position: fixed; right: 18px; bottom: 96px; z-index: 1040;
  width: 50px; height: 50px; border-radius: 50%; border: none;
  background: #07C160; color: #fff; font-size: 1.4rem;
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 22px rgba(7,193,96,.42); cursor: pointer;
  transition: transform .15s, box-shadow .15s;
}
.jp-kefu-fab-btn:hover { transform: translateY(-3px) scale(1.05); box-shadow: 0 12px 28px rgba(7,193,96,.55); }
.jp-kefu-fab-btn .jp-i { font-size: 1.35rem; }
.jp-kefu-fab {
  position: fixed; right: 18px; bottom: 160px; z-index: 1041;
  width: 282px; max-width: 92vw; background: #fff;
  border-radius: 16px; box-shadow: 0 18px 50px rgba(15,23,42,.22);
  padding: 16px 16px 12px; display: none;
  border: 1px solid var(--jp-border);
}
.jp-kefu-fab-close {
  position: absolute; top: 8px; right: 8px;
  background: transparent; border: 0; color: var(--jp-muted);
  font-size: 1.1rem; cursor: pointer; padding: 4px 8px; line-height: 1;
  border-radius: 8px;
}
.jp-kefu-fab-close:hover { background: var(--jp-primary-50); color: var(--jp-text); }
.jp-kefu-fab-head {
  display: flex; align-items: center; gap: .55rem;
  background: var(--jp-primary-50); color: var(--jp-primary-600);
  padding: 8px 10px; border-radius: 10px; margin-bottom: 10px;
}
.jp-kefu-fab-head .jp-kefu-fab-icon {
  width: 30px; height: 30px; border-radius: 8px;
  background: #07C160; color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: .95rem; flex-shrink: 0;
}
.jp-kefu-fab-body {
  display: flex; gap: 10px; justify-content: center; align-items: flex-start;
  padding: 4px 0 6px;
}
.jp-kefu-fab-tip {
  display: flex; align-items: center; flex-wrap: wrap; gap: .25rem;
  font-size: .78rem; padding-top: 8px;
  border-top: 1px dashed var(--jp-border);
  color: var(--jp-text-2);
}
.jp-kefu-fab-tip b { font-weight: 700; }
@media (max-width: 575px) {
  .jp-kefu-fab-btn { right: 12px; bottom: 82px; width: 46px; height: 46px; }
  .jp-kefu-fab { right: 12px; bottom: 140px; width: 268px; }
  .jp-backtop { right: 12px; bottom: 140px; }
}
.jp-tag {
  display: inline-block; padding: 2px 10px; border-radius: 14px;
  background: var(--jp-grad-soft); color: var(--jp-primary-600);
  font-size: .76rem; text-decoration: none; transition: all .15s;
  border: 1px solid rgba(var(--jp-primary-rgb),.12);
}
.jp-tag:hover { background: var(--jp-grad); color: var(--jp-on-primary, #fff); }
.jp-tag-ghost { background: transparent; border-color: var(--jp-border); color: var(--jp-muted); }
.jp-tag-ghost:hover { background: var(--jp-grad-soft); color: var(--jp-primary-600); }

/* ---------- 触控优化 ---------- */
@media (hover: none) {
  .jp-card-hover:hover { transform: none; box-shadow: var(--jp-shadow); }
  .btn:active { transform: scale(.96); }
}
@media (max-width: 576px) {
  .jp-backtop { right: 14px; bottom: 84px; width: 38px; height: 38px; }
}

/* ---------- 充值商城分类导航 ---------- */
.jp-cate-chip {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 6px 14px; border-radius: 20px;
  background: var(--jp-card, #fff); border: 1.5px solid var(--jp-primary-600, #1F2937);
  color: var(--jp-primary-600, #1F2937); font-size: .85rem; font-weight: 700;
  text-decoration: none; transition: all .15s; white-space: nowrap;
}
.jp-cate-chip:hover { border-color: var(--jp-primary); color: #fff; background: var(--jp-primary); transform: translateY(-1px); }
.jp-cate-chip.active {
  background: var(--jp-primary-600); border-color: var(--jp-primary-600); color: #fff !important;
  box-shadow: 0 4px 12px rgba(var(--jp-primary-rgb),.3);
}
.jp-cate-count {
  background: rgba(0,0,0,.12); border-radius: 10px; padding: 0 7px;
  font-size: .7rem; font-weight: 700; line-height: 16px; margin-left: 3px;
}
.jp-cate-chip.active .jp-cate-count { background: rgba(255,255,255,.25); }

/* ---------- 好物推荐卡片 ---------- */
.jp-reco-card { display: flex; flex-direction: column; text-decoration: none; padding: 1rem !important; }
.jp-reco-card:hover { transform: translateY(-3px); }
.jp-reco-dot {
  width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  color: #1F1F1F; font-size: .95rem;
}

/* =============================================================
   移动端现代化 (≤768px)：紧凑卡片 + 紧凑筛选 + 紧凑板块网格
   ============================================================= */
@media (max-width: 768px) {
  /* 全局收紧间距 */
  .container, .container-fluid { padding-left: .75rem; padding-right: .75rem; }

  /* ---------- 顶部导航 ---------- */
  .navbar { padding: .5rem .75rem !important; }
  .navbar-brand { font-size: 1.05rem !important; gap: .35rem !important; }
  .navbar-brand svg { font-size: 1.4rem !important; }
  .navbar-nav .nav-link { padding: .45rem .6rem !important; font-size: .85rem !important; }
  .navbar-actions .btn { font-size: .78rem !important; padding: .35rem .6rem !important; }
  .navbar-actions .btn .jp-i { font-size: .9em !important; margin-right: .2rem !important; }

  /* ---------- Hero 区 ---------- */
  .jp-hero { padding: 1.2rem 0 1.4rem !important; }
  .jp-hero h1 { font-size: 1.25rem !important; }
  .jp-hero .sub { font-size: .85rem !important; }
  .jp-hero .fs-1 { font-size: 1.8rem !important; margin-bottom: .25rem !important; }
  .jp-hero-inner { padding: 0 .5rem; }

  /* ---------- 筛选按钮（小号 chip 化） ---------- */
  .btn-jp-sm, .btn.btn-jp-sm {
    font-size: .72rem !important; padding: .28rem .55rem !important;
    border-radius: 8px !important; line-height: 1.35 !important;
  }
  .btn-jp-outline.btn-jp-sm { border-width: 1px !important; }
  .jp-filter-link.btn-jp-sm { padding: .28rem .55rem !important; }

  /* ---------- 板块标题 + 提示行 ---------- */
  .jp-section-head {
    padding: .35rem 0 .35rem .75rem !important;
    margin: 1.1rem 0 .5rem !important;
  }
  .jp-section-head .jp-section-title { font-size: .92rem !important; }
  .jp-section-head .small { font-size: .72rem !important; }

  /* ---------- 板块卡片网格（分类页子分类） ---------- */
  .jp-cat-grid {
    grid-template-columns: repeat(3, 1fr) !important;
    gap: .4rem !important;
  }
  .jp-cat-card {
    padding: .6rem .25rem !important;
    border-radius: 10px !important;
  }
  .jp-cat-icon {
    width: 28px !important; height: 28px !important; font-size: .9rem !important; border-radius: 8px !important;
    margin-bottom: .25rem !important;
    background: var(--jp-grad) !important; color: var(--jp-on-primary, #fff) !important;
    display: flex !important; align-items: center !important; justify-content: center !important;
    box-shadow: 0 2px 6px rgba(var(--jp-primary-rgb), .18) !important;
  }
  .jp-cat-icon svg { width: 16px !important; height: 16px !important; }
  .jp-cat-name { font-size: .72rem !important; line-height: 1.25 !important; }
  .jp-cat-count { font-size: .65rem !important; margin-top: .15rem !important; }

  /* ---------- 资源卡片（紧凑、删除虚构预览区） ---------- */
  .jp-res-card-v2 {
    padding: .55rem .6rem !important;
    border-radius: 10px !important;
    margin-bottom: .55rem !important;
    box-shadow: 0 1px 3px rgba(15, 23, 42, .06) !important;
  }
  .jp-res-v2-head { margin-bottom: .3rem !important; gap: .3rem !important; }
  .jp-res-v2-pan { font-size: .72rem !important; min-width: 22px !important; height: 22px !important; }
  .jp-res-v2-title { font-size: .84rem !important; line-height: 1.35 !important;
    -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden;
  }
  .jp-res-v2-preview-btn { font-size: 1rem !important; }
  .jp-res-v2-meta {
    font-size: .68rem !important; gap: .5rem !important; margin: .25rem 0 .35rem !important;
    color: var(--jp-text-muted, #5F5F5F);
  }
  .jp-res-v2-meta .jp-i { font-size: .8em !important; }
  .jp-res-v2-tags { margin: .35rem 0 !important; gap: .25rem !important; }
  .jp-res-v2-tag {
    font-size: .65rem !important; padding: .12rem .45rem !important; border-radius: 5px !important;
  }
.jp-res-v2-tag-price { background: var(--jp-grad); color:#fff !important; font-weight:600; }
.jp-res-v2-tag-cat { background:#EFF6FF; color:#1D4ED8; border-color:#BFDBFE; font-weight: 500; }
.jp-res-v2-tag-board { background:#f1f5f9; color:#64748b; border-color:#e2e8f0; font-weight: 500; }
.jp-res-v2-tag-kw { background:#ecfeff; color:#0e7490; border-color:#a5f3fc; }
  .jp-res-v2-actions { margin-top: .4rem !important; gap: .4rem !important; }
  .jp-res-v2-btn {
    font-size: .7rem !important; padding: .3rem .55rem !important; border-radius: 7px !important;
    min-width: 0 !important; flex: 1 1 auto;
  }
  .jp-res-v2-btn-primary { flex: 1.4 1 auto; }

  /* ---------- 首页板块卡片（紧凑、3 列网格） ---------- */
  .jp-boards { gap: .5rem !important; }
  .jp-boards .jp-board-col { flex: 0 0 calc(33.333% - .34rem) !important; max-width: calc(33.333% - .34rem) !important; }
  .jp-board-card {
    flex-direction: column !important; align-items: center !important; justify-content: center !important;
    gap: .3rem !important; padding: .55rem .25rem !important; border-radius: 10px !important; text-align: center !important;
  }
  .jp-board-card > svg.jp-i { display: none !important; }  /* 隐藏右侧 chevron */
  .jp-board-icon { width: 30px !important; height: 30px !important; font-size: .95rem !important; border-radius: 8px !important; }
  .jp-board-name { font-size: .72rem !important; line-height: 1.25 !important; }
  .jp-board-meta { font-size: .62rem !important; }

  /* ---------- 会员入口条（紧凑） ---------- */
  .jp-card.p-3.mb-4 { padding: .75rem !important; margin-bottom: .85rem !important; }
  .jp-card.p-3 .fw-bold { font-size: .85rem !important; }
  .jp-card.p-3 .small { font-size: .7rem !important; }

  /* ---------- 搜索/筛选面板 ---------- */
  .jp-card .input-group.input-group-sm .form-control { font-size: .82rem !important; padding: .35rem .55rem !important; }
  .input-group-text { padding: .3rem .5rem !important; font-size: .8rem !important; }

  /* ---------- 分页 ---------- */
  .jp-pagination .page-link { padding: .3rem .55rem !important; font-size: .78rem !important; }

  /* ---------- 跟读筛选面板（剧本杀页）的分组间距 ---------- */
  .d-flex.flex-wrap.gap-1.mb-3 { margin-bottom: .55rem !important; gap: .3rem !important; }
  .fw-bold.small.mb-2 { font-size: .75rem !important; margin-bottom: .3rem !important; color: var(--jp-text-muted, #5F5F5F); }

  /* ---------- 顶部分类导航 ---------- */
  .jp-card.p-3 .d-flex.flex-wrap.gap-2.align-items-center { gap: .3rem !important; }
  .jp-cate-chip { font-size: .7rem !important; padding: .2rem .5rem !important; border-radius: 6px !important; }

  /* ---------- 相关推荐（详情页） ---------- */
  .jp-reco-rich { padding: .55rem !important; gap: .5rem !important; }
  .jp-reco-body { padding-right: .2rem !important; }
  .jp-reco-title { font-size: .82rem !important; }

  /* ---------- 页脚（精简） ---------- */
  .jp-footer { padding: 1.2rem 0 !important; }
  .jp-footer .small { font-size: .7rem !important; }
  .jp-footer a { font-size: .78rem !important; }
  .jp-footer h6 { font-size: .8rem !important; }

  /* ---------- 顶部公告/关注条 ---------- */
  .jp-follow-bar { padding: .55rem .75rem !important; font-size: .75rem !important; }
  .jp-follow-bar .small { font-size: .7rem !important; }
}

/* 更小屏幕 (≤480px) */
@media (max-width: 480px) {
  .jp-cat-grid { grid-template-columns: repeat(3, 1fr) !important; gap: .35rem !important; }
  .jp-cat-name { font-size: .68rem !important; }
  .jp-cat-count { font-size: .62rem !important; }
  .jp-res-v2-title { font-size: .82rem !important; }
  .btn-jp-sm { font-size: .68rem !important; padding: .25rem .5rem !important; }
}

/* ---------- 多级级联筛选 chip（分类页） ---------- */
.cat-row-label {
  font-weight: 600; font-size: .72rem; color: var(--jp-text-muted, #5F5F5F);
  min-width: 2.2em; white-space: nowrap;
}
.jp-cat-chip {
  display: inline-flex; align-items: center; gap: .2rem;
  font-size: .78rem; line-height: 1.4; padding: .3rem .65rem;
  border: 1px solid var(--jp-primary-600, #1F2937); border-radius: 8px;
  background: #fff; color: var(--jp-primary-600, #1F2937); font-weight: 600;
  cursor: pointer; transition: all .15s;
}
.jp-cat-chip:hover { border-color: var(--jp-primary); color: #fff; background: var(--jp-primary); }
.jp-cat-chip.active {
  background: var(--jp-primary-600); color: #fff !important; border-color: var(--jp-primary-600);
  box-shadow: 0 2px 6px rgba(var(--jp-primary-rgb), .25);
}
.jp-cat-chip-count {
  font-size: .62rem; padding: 0 .3rem; border-radius: 99px;
  background: rgba(var(--jp-primary-rgb),.1); color: var(--jp-primary-600, #1F2937); font-weight: 700;
}
.jp-cat-chip.active .jp-cat-chip-count { background: rgba(255,255,255,.25); color: #fff; }
@media (max-width: 768px) {
  .jp-cat-chip { font-size: .68rem; padding: .22rem .48rem; border-radius: 7px; }
  .cat-row-label { font-size: .68rem; }
}

/* ---------- chip 禁用态（剧本杀筛选用） ---------- */
.jp-cat-chip.disabled {
  opacity: .45; cursor: not-allowed; pointer-events: none;
  border-color: #e2e8f0; color: #6E6E6E; background: #f8fafc;
}
.jp-cat-chip.flex-grow-1 { justify-content: center; }

/* 打印 / 导出 PDF 时隐藏后台框架，让报表占满整页 */
@media print {
  .jp-topbar, .jp-sidebar, .jp-sidebar-backdrop { display: none !important; }
  .jp-admin-body { background: #fff !important; }
  .col-lg-10.col-xl-10 { width: 100% !important; max-width: 100% !important; flex: 0 0 100% !important; padding: 0 !important; }
  .jp-card, .jp-stat-card { box-shadow: none !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .jp-stat-card { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}

/* ============================================================
   移动端精修 v2 — 顶栏 / 底栏 / 筛选 chip / 卡片 / 全局字号
   让手机端体验接近专业级 APP/网页
   ============================================================ */

/* ---------- 全局：手机端基础排版 ---------- */
@media (max-width: 767.98px) {
  body { font-size: 14px; -webkit-text-size-adjust: 100%; }
  h1, .h1, .jp-page-title { font-size: 1.35rem; }
  h2, .h2 { font-size: 1.15rem; }
  h3, .h3 { font-size: 1.05rem; }
  h4, .h4 { font-size: .98rem; }
  h5, .h5 { font-size: .9rem; }
  h6, .h6 { font-size: .82rem; }
  .lead { font-size: 1rem; }
  .container, .container-md, .container-lg { padding-left: .9rem; padding-right: .9rem; max-width: 100%; }
  .row { --bs-gutter-x: .85rem; margin-left: -.4rem; margin-right: -.4rem; }
  .row > * { padding-left: .4rem; padding-right: .4rem; }
  .jp-section-title { font-size: .95rem; margin-bottom: .55rem; }
  .jp-tipbar { padding: .55rem .75rem; font-size: .8rem; border-radius: 10px; }
  .jp-tipbar .jp-i { font-size: 1rem; }
}

/* ---------- 顶栏：手机端紧凑精致 ---------- */
@media (max-width: 767.98px) {
  .jp-top-notice { display: none !important; }
  .navbar.jp-navbar { min-height: 50px; padding: .25rem 0; box-shadow: 0 2px 12px rgba(15,23,42,.08); }
  .navbar.jp-navbar .container { padding-left: .75rem; padding-right: .75rem; }
  .navbar.jp-navbar .navbar-brand { font-size: 1rem; padding: .3rem 0; }
  .navbar.jp-navbar .navbar-brand .logo-mark { width: 26px; height: 26px; font-size: .85rem; border-radius: 7px; }
  .navbar.jp-navbar .navbar-brand span:not(.logo-mark) { font-weight: 700; letter-spacing: .5px; }
  .navbar-toggler.jp-tog { padding: .35rem .45rem; border-radius: 8px; background: rgba(255,255,255,.14); }
  .navbar-toggler.jp-tog:active { background: rgba(255,255,255,.26); }
  .navbar-toggler.jp-tog .jp-i { font-size: 1.3rem; }
  /* 折叠菜单：全屏下拉卡片 */
  .navbar-collapse.jp-mob-menu {
    background: #fff; border-radius: 14px; margin-top: .45rem;
    box-shadow: 0 12px 36px rgba(15,23,42,.12);
    padding: .6rem .55rem; max-height: 76vh; overflow-y: auto;
    border: 1px solid rgba(15,23,42,.04);
  }
  .navbar-collapse.jp-mob-menu .nav-link {
    padding: .7rem .85rem; border-radius: 10px; margin: .1rem 0;
    color: var(--jp-text) !important; font-size: .92rem; display: flex; align-items: center;
    border: 1px solid transparent;
  }
  .navbar-collapse.jp-mob-menu .nav-link.active,
  .navbar-collapse.jp-mob-menu .nav-link:active {
    background: var(--jp-primary-50); color: var(--jp-primary-600) !important;
    border-color: #c7d2fe; font-weight: 600;
  }
  .navbar-collapse.jp-mob-menu .nav-link .jp-i { font-size: 1.05rem; opacity: .75; }
  /* 用户区移动端：紧凑按钮组 */
  .navbar-collapse.jp-mob-menu + .d-flex { padding-top: .5rem; border-top: 1px solid #eef2f7; margin-top: .4rem; }
}

/* ---------- 筛选 chip：紧凑、可滚动、超长换行 ---------- */
@media (max-width: 767.98px) {
  .jp-cat-chip, .jp-filter-link.jp-cat-chip {
    font-size: .78rem; padding: .32rem .68rem; border-radius: 999px;
    min-height: 30px; line-height: 1.2; white-space: nowrap;
    border: 1px solid #e2e8f0; background: #fff; color: var(--jp-text);
    transition: all .15s;
  }
  .jp-cat-chip:hover, .jp-filter-link.jp-cat-chip:hover { border-color: var(--jp-primary); }
  .jp-cat-chip.active, .jp-filter-link.jp-cat-chip.active,
  a.jp-cat-chip.active, .jp-filter-link.active {
    background: var(--jp-primary); color: var(--jp-on-primary, #fff) !important; border-color: var(--jp-primary);
    box-shadow: 0 2px 6px rgba(var(--jp-primary-rgb),.25);
  }
  /* 多行 chip 容器：横向滚动条 + 阴影指示器 */
  .jp-chip-scroll {
    display: flex; flex-wrap: wrap; gap: .38rem;
    margin: 0 -.25rem; padding: .15rem .25rem .35rem;
  }
  /* 标签组小标题更紧凑 */
  .jbs-filter-label {
    display: inline-flex; align-items: center; gap: .35rem;
    font-size: .82rem; font-weight: 600; color: var(--jp-text);
    margin: .65rem 0 .35rem;
  }
  /* 减少 chip 行间距 */
  #jbs-filter-panel .d-flex.flex-wrap.gap-1.mb-3,
  #jbs-filter-panel .d-flex.flex-wrap.gap-2.mb-3 { gap: .35rem !important; margin-bottom: .65rem !important; }
  #jbs-filter-panel > div { margin-bottom: .25rem !important; }
  #jbs-filter-panel .small.text-muted.me-1 { font-size: .75rem; min-width: 38px !important; }
}

/* ---------- 资源卡片：手机端单列 + 紧凑 ---------- */
@media (max-width: 767.98px) {
  .jp-res-card-v2 {
    padding: .85rem .95rem .9rem; border-radius: 14px;
    margin-bottom: .7rem; background: #fff;
    box-shadow: 0 1px 0 rgba(15,23,42,.04), 0 4px 14px rgba(15,23,42,.05);
    border: 1px solid rgba(15,23,42,.04);
  }
  .jp-res-card-v2 .jp-res-v2-head { gap: .45rem; }
  .jp-res-card-v2 .jp-res-v2-title { font-size: .96rem; line-height: 1.4; -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }
  .jp-res-card-v2 .jp-res-v2-meta { font-size: .72rem; gap: .45rem; flex-wrap: wrap; margin-top: .4rem; }
  .jp-res-card-v2 .jp-res-v2-tip { font-size: .72rem; margin-top: .35rem; }
  .jp-res-card-v2 .jp-res-v2-tags { gap: .25rem; margin-top: .5rem; }
  .jp-res-card-v2 .jp-res-v2-tag { font-size: .72rem; padding: .18rem .5rem; }
  .jp-res-card-v2 .jp-res-v2-actions { gap: .35rem; margin-top: .65rem; }
  .jp-res-card-v2 .jp-res-v2-btn { font-size: .78rem; padding: .38rem .7rem; min-height: 34px; min-width: 70px; }
  .jp-res-card-v2 .jp-res-v2-preview { padding: .55rem .65rem; border-radius: 10px; }
  .jp-res-card-v2 .jp-res-v2-file { font-size: .75rem; }
  /* 列表双列 → 单列 */
  .jp-res-grid-2, .jp-res-grid { grid-template-columns: 1fr !important; gap: .65rem !important; }
  /* 主页入口卡片 grid：4列→2列+更紧凑 */
  .jp-entry-grid { grid-template-columns: repeat(2, 1fr) !important; gap: .5rem !important; }
  .jp-entry-grid .jp-entry { padding: .8rem .5rem; border-radius: 12px; }
  .jp-entry-grid .jp-entry-name { font-size: .82rem; }
  .jp-entry-grid .jp-entry-desc { font-size: .68rem; }
  .jp-entry-grid .jp-entry i { font-size: 1.35rem; }
}

/* ---------- 底栏：手机端紧凑 ---------- */
@media (max-width: 767.98px) {
  footer.jp-footer { padding: 1.5rem 0 5.5rem !important; }
  footer.jp-footer .container { padding-left: .9rem; padding-right: .9rem; }
  footer.jp-footer .ft-brand { font-size: 1rem; margin-bottom: .5rem; }
  footer.jp-footer .ft-brand .logo-mark { width: 24px !important; height: 24px !important; font-size: .78rem !important; }
  footer.jp-footer .ft-title { font-size: .82rem; margin-bottom: .35rem; font-weight: 600; color: #fff; }
  footer.jp-footer a { font-size: .78rem; padding: .15rem 0; opacity: .8; }
  footer.jp-footer .col-6 { margin-bottom: .8rem; }
  footer.jp-footer .jp-copyright { font-size: .72rem; padding-top: .8rem; margin-top: .5rem; border-top: 1px solid rgba(255,255,255,.08); }
}

/* ---------- 底部浮动导航：手机端紧凑专业 ---------- */
@media (max-width: 767.98px) {
  .jp-bottom-nav, nav.jp-mob-bottom {
    height: 52px !important; padding-bottom: env(safe-area-inset-bottom, 0);
    box-shadow: 0 -2px 16px rgba(15,23,42,.08);
    border-top: 1px solid rgba(15,23,42,.05);
  }
  .jp-bottom-nav a, nav.jp-mob-bottom a {
    font-size: .7rem; gap: .15rem; padding: .3rem .2rem;
    color: #5F5F5F; flex-direction: column;
  }
  .jp-bottom-nav a.active, nav.jp-mob-bottom a.active {
    color: var(--jp-primary) !important;
  }
  .jp-bottom-nav a i, nav.jp-mob-bottom a i,
  .jp-bottom-nav a .jp-i, nav.jp-mob-bottom a .jp-i { font-size: 1.25rem; }
  /* 浮窗返回顶部等按钮缩小 */
  .jp-fab, .jp-fab-top {
    width: 40px !important; height: 40px !important;
    bottom: 70px !important; right: 12px !important; font-size: 1rem !important;
  }
  /* 主体底部留出底栏空间，避免内容被遮 */
  body { padding-bottom: 56px; }
}

/* ---------- 详情页：手机端标题与文件预览紧凑 ---------- */
@media (max-width: 767.98px) {
  .container.py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; }
  .container.py-3 { padding-top: .7rem !important; padding-bottom: .7rem !important; }
  /* 资源卡片大图、标题 */
  h1.fs-3, h1.fs-2 { font-size: 1.15rem; line-height: 1.4; }
  .jp-card { border-radius: 12px; padding: .9rem !important; }
  .jp-card.p-3 { padding: .85rem !important; }
  .jp-card.p-4 { padding: 1rem !important; }
  /* 文件预览树行高收紧 */
  .jp-ft-row { padding: .25rem 0 !important; font-size: .82rem; }
  .jp-filetree { font-size: .82rem; }
  /* breadcrumb */
  nav.small.text-muted.mb-3 { font-size: .75rem; margin-bottom: .55rem !important; }
  /* 替代链接行 */
  .rounded-3.border.p-3 .d-flex.flex-wrap > a { font-size: .82rem; }
}

/* ---------- 搜索/上传/个人中心表单：紧凑 ---------- */
@media (max-width: 767.98px) {
  .form-control, .form-select { font-size: .92rem; padding: .55rem .7rem; }
  .input-group-text { padding: .55rem .7rem; }
  .btn { font-size: .9rem; padding: .55rem .9rem; }
  .btn-sm, .btn-jp-sm { padding: .4rem .75rem; font-size: .82rem; }
  .btn-lg { font-size: 1rem; padding: .75rem 1rem; }
  textarea.form-control { font-size: .92rem; }
  /* 弹窗优化 */
  .modal-dialog { margin: .5rem; }
  .modal-content { border-radius: 14px; max-height: 88vh; }
  .modal-body.p-4 { padding: .9rem !important; }
  .modal-header, .modal-footer { padding: .75rem .9rem; }
  .modal-title { font-size: 1rem; }
}

/* ---------- 超小屏 (≤400px)：进一步压缩 ---------- */
@media (max-width: 399.98px) {
  body { font-size: 13.5px; }
  .navbar.jp-navbar .navbar-brand { font-size: .92rem; }
  .jp-cat-chip, .jp-filter-link.jp-cat-chip { font-size: .72rem; padding: .28rem .55rem; }
  .jp-res-card-v2 { padding: .75rem .8rem .8rem; }
  .jp-res-card-v2 .jp-res-v2-title { font-size: .88rem; }
  .jp-res-card-v2 .jp-res-v2-btn { font-size: .72rem; min-width: 60px; padding: .32rem .55rem; }
  .jp-bottom-nav a, nav.jp-mob-bottom a { font-size: .65rem; }
  .jp-bottom-nav a .jp-i, nav.jp-mob-bottom a .jp-i { font-size: 1.15rem; }
}




/* ============= 撞色辅助色应用（accent-2） ============= */
.jp-tag-chip { border-color: var(--jp-accent-2, #86C77D); }
.jp-section-title::before { background: var(--jp-accent-2, #86C77D); }
.jp-badge-ok { background: var(--jp-accent-2, #86C77D); color: #fff; }
.jp-cat-chip:hover { border-color: var(--jp-accent, #E41017); color: var(--jp-accent, #E41017); }

/* ============= 主题切换按钮（精致装饰）============= */
.jp-theme-trigger { display: inline-flex; align-items: center; gap: .15rem; }
.jp-theme-trigger-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: rgba(255,255,255,.95);
  box-shadow: 0 0 0 2px rgba(255,255,255,.5), 0 2px 10px rgba(var(--jp-primary-rgb), .25);
  margin-right: .35rem; transition: transform .25s ease;
  flex-shrink: 0;
}
.jp-theme-trigger:hover .jp-theme-trigger-dot { transform: scale(1.2); }
.jp-theme-trigger-icon { animation: jpPaletteRotate 8s linear infinite; transform-origin: center; }
@keyframes jpPaletteRotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
.jp-theme-dd { position: relative; }
.jp-theme-dd .dropdown-menu { box-shadow: var(--jp-shadow-lg); border: 1px solid var(--jp-border); z-index: 1060; }
.jp-theme-dd .dropdown-header { color: var(--jp-primary); font-weight: 700; }
.jp-theme-item { display: flex; align-items: center; gap: .55rem; border-radius: 8px; font-size: .85rem; padding: .5rem .8rem; cursor: pointer; width: 100%; border: 0; background: transparent; }
.jp-theme-item:hover { background: var(--jp-primary-50); color: var(--jp-primary-600); }
.jp-theme-dot { width: 16px; height: 16px; border-radius: 50%; display: inline-block; box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.5), 0 1px 3px rgba(45,45,45,.25); flex-shrink: 0; }
/* ================= 主题切换菜单（全站莫兰迪主题） ================= */
.jp-theme-dd .dropdown-menu { box-shadow: var(--jp-shadow-lg); }
.jp-theme-item { display: flex; align-items: center; gap: .55rem; border-radius: 8px; font-size: .85rem; }
.jp-theme-item:hover { background: var(--jp-primary-50); color: var(--jp-primary-600); }
.jp-theme-dot { width: 16px; height: 16px; border-radius: 50%; display: inline-block; box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.5), 0 1px 3px rgba(45,45,45,.25); flex-shrink: 0; }

/* ================= AI 智能助手 ================= */
.jp-ai-fab { position: fixed; left: 18px; bottom: 24px; z-index: 1040; display: flex; flex-direction: column; align-items: flex-start; }
.jp-ai-fab-btn {
  width: 60px; height: 60px; border-radius: 50%; border: none; cursor: pointer; position: relative;
  background: var(--jp-grad); color: var(--jp-on-primary, #fff); box-shadow: 0 8px 24px rgba(var(--jp-primary-rgb), .35);
  display: flex; align-items: center; justify-content: center; transition: transform .15s ease, box-shadow .15s ease;
  animation: jpAiBreathe 3s ease-in-out infinite;
}
.jp-ai-fab-btn:hover { transform: translateY(-2px) scale(1.05); box-shadow: 0 12px 30px rgba(var(--jp-primary-rgb), .45); }
@keyframes jpAiBreathe { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }
/* AI 形象头像（图片可替换：static/img/ai_avatar.png） */
.jp-ai-avatar { position: relative; display: inline-flex; align-items: center; justify-content: center; overflow: visible; }
.jp-ai-avatar-sm { width: 30px; height: 30px; margin-right: .45rem; }
.jp-ai-avatar-lg { width: 46px; height: 46px; }
.jp-ai-avatar-img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; border: 2px solid rgba(255,255,255,.85); display: block; }
.jp-ai-avatar-emoji { width: 100%; height: 100%; border-radius: 50%; background: var(--jp-primary-50); display: flex; align-items: center; justify-content: center; font-size: 1.4rem; }
.jp-ai-avatar-lg .jp-ai-avatar-emoji { font-size: 2.1rem; }
/* 顶部小情绪表情（头部右侧） */
.jp-ai-mood { position: absolute; right: -4px; bottom: -2px; font-size: .95rem; background: #fff; border-radius: 50%; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; box-shadow: 0 1px 4px rgba(0,0,0,.18); }
/* 浮窗按钮上的随机小动作 emoji 气泡 */
.jp-ai-action { position: absolute; right: -6px; top: -6px; font-size: 1.15rem; background: #fff; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; box-shadow: 0 2px 6px rgba(0,0,0,.22); z-index: 2; }
.jp-ai-fab-hint { position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%); background: #fff; color: #1f2937; font-size: .78rem; padding: .3rem .6rem; border-radius: 999px; box-shadow: 0 2px 10px rgba(15,23,42,.15); white-space: nowrap; }
.jp-ai-pop { animation: jpAiPop .5s ease both; }
@keyframes jpAiPop { 0% { transform: scale(0); } 70% { transform: scale(1.25); } 100% { transform: scale(1); } }
.jp-ai-panel {
  width: 340px; max-width: calc(100vw - 36px); background: #fff; border: 1px solid var(--jp-border, #e5e7eb);
  border-radius: 16px; box-shadow: 0 16px 48px rgba(15,23,42,.18); overflow: hidden; margin-bottom: 12px;
  display: flex; flex-direction: column; max-height: 70vh;
}
.jp-ai-head {
  display: flex; align-items: center; justify-content: space-between; gap: .5rem;
  padding: .7rem .9rem; background: var(--jp-grad); color: var(--jp-on-primary, #fff); font-weight: 600;
}
.jp-ai-title { display: flex; align-items: center; }
.jp-ai-name { line-height: 1.15; }
.jp-ai-state { display: block; font-size: .66rem; font-weight: 400; opacity: .9; }
.jp-ai-close { background: rgba(255,255,255,.18); border: none; color: #fff; width: 26px; height: 26px; border-radius: 8px; cursor: pointer; font-size: 1.1rem; line-height: 1; }
.jp-ai-close:hover { background: rgba(255,255,255,.32); }
.jp-ai-msgs { flex: 1 1 auto; overflow-y: auto; padding: .9rem; display: flex; flex-direction: column; gap: .6rem; background: #f8fafc; min-height: 220px; }
.jp-ai-row { display: flex; }
.jp-ai-user { justify-content: flex-end; }
.jp-ai-assistant { justify-content: flex-start; }
.jp-ai-bubble { max-width: 82%; padding: .55rem .75rem; border-radius: 14px; font-size: .9rem; line-height: 1.5; word-break: break-word; white-space: normal; }
.jp-ai-user .jp-ai-bubble { background: var(--jp-primary,#1D4ED8); color: #fff; border-bottom-right-radius: 4px; }
.jp-ai-assistant .jp-ai-bubble { background: #fff; color: #1f2937; border: 1px solid var(--jp-border,#e5e7eb); border-bottom-left-radius: 4px; }
.jp-ai-bubble a { color: var(--jp-primary,#1D4ED8); text-decoration: underline; }
.jp-ai-typing { display: inline-flex; gap: 4px; align-items: center; }
.jp-ai-typing span { width: 6px; height: 6px; border-radius: 50%; background: var(--jp-faint); display: inline-block; animation: jpAiBlink 1.2s infinite both; }
.jp-ai-typing span:nth-child(2) { animation-delay: .2s; }
.jp-ai-typing span:nth-child(3) { animation-delay: .4s; }
@keyframes jpAiBlink { 0%, 80%, 100% { opacity: .3; } 40% { opacity: 1; } }
.jp-ai-inputbar { display: flex; gap: .5rem; padding: .6rem; border-top: 1px solid var(--jp-border,#e5e7eb); background: #fff; align-items: flex-end; }
.jp-ai-input { flex: 1 1 auto; border: 1px solid var(--jp-border,#e5e7eb); border-radius: 10px; padding: .5rem .6rem; font-size: .9rem; resize: none; max-height: 120px; outline: none; font-family: inherit; }
.jp-ai-input:focus { border-color: var(--jp-primary,#1D4ED8); }
.jp-ai-page { width: 100%; max-width: 760px; margin: 0 auto; border: 1px solid var(--jp-border,#e5e7eb); border-radius: 16px; display: flex; flex-direction: column; height: 62vh; min-height: 420px; }
.jp-ai-page .jp-ai-msgs { min-height: 0; }
.jp-ai-badge { font-size: .68rem; background: rgba(255,255,255,.22); padding: .15rem .5rem; border-radius: 999px; font-weight: 500; }
@media (max-width: 575.98px) {
  .jp-ai-fab { left: 12px; bottom: 16px; }
  .jp-ai-fab-btn { width: 54px; height: 54px; }
  .jp-ai-panel { width: calc(100vw - 24px); }
}

/* ========== 搜索视图切换 ========== */
.jp-view-btn.active { background: var(--jp-grad) !important; color: var(--jp-on-primary, #fff) !important; border-color: transparent !important; }
.jp-view-btn { padding: .28rem .55rem !important; font-size: .82rem; }

/* 列表视图 */
#jpResGrid.jp-view-list .col-12.col-md-6.col-lg-4.col-xl-3 { width: 100% !important; max-width: 100% !important; flex: 0 0 100% !important; }
#jpResGrid.jp-view-list .jp-res-card-v2 { display: flex; align-items: center; gap: 1rem; padding: .75rem 1rem; }
#jpResGrid.jp-view-list .jp-res-v2-head { width: 35%; flex-shrink: 0; }
#jpResGrid.jp-view-list .jp-res-v2-head h5 { font-size: .9rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#jpResGrid.jp-view-list .jp-res-v2-meta { font-size: .78rem; width: 30%; }
#jpResGrid.jp-view-list .jp-res-v2-tags { display: none; }
#jpResGrid.jp-view-list .jp-res-v2-tip { display: none; }
#jpResGrid.jp-view-list .jp-res-v2-actions { width: auto; flex-shrink: 0; }
#jpResGrid.jp-view-list .jp-res-card-v2 { flex-wrap: wrap; align-items: stretch; }
#jpResGrid.jp-view-list .jp-res-v2-preview { display: block; order: 9; flex: 0 0 100%; margin-top: .55rem; }

/* 紧凑视图 */
#jpResGrid.jp-view-compact .col-12.col-md-6.col-lg-4.col-xl-3 { width: 50% !important; max-width: 50% !important; flex: 0 0 50% !important; }
@media (max-width: 767.98px) {
  #jpResGrid.jp-view-compact .col-12.col-md-6.col-lg-4.col-xl-3 { width: 100% !important; max-width: 100% !important; flex: 0 0 100% !important; }
}
#jpResGrid.jp-view-compact .jp-res-card-v2 { padding: .5rem .65rem; }
#jpResGrid.jp-view-compact .jp-res-v2-head h5 { font-size: .85rem; line-height: 1.3; }
#jpResGrid.jp-view-compact .jp-res-v2-meta { font-size: .72rem; }
#jpResGrid.jp-view-compact .jp-res-v2-tags { gap: 3px; }
#jpResGrid.jp-view-compact .jp-res-v2-tag { font-size: .68rem; padding: 1px 6px; }
#jpResGrid.jp-view-compact .jp-res-v2-tip { display: none; }
#jpResGrid.jp-view-compact .jp-res-v2-preview { display: block; }
#jpResGrid.jp-view-compact .jp-res-v2-actions { flex-wrap: wrap; gap: 4px; }
#jpResGrid.jp-view-compact .jp-res-v2-btn { padding: .25rem .55rem; font-size: .78rem; }

/* ============ Footer 优化 v13 ============ */
.jp-footer-link-chip {
  display: inline-block;
  padding: .35rem .85rem;
  background: rgba(255,255,255,.12);
  color: #fff !important;
  border-radius: 999px;
  font-size: .78rem;
  text-decoration: none !important;
  transition: all .15s;
  border: 1px solid rgba(255,255,255,.18);
}
.jp-footer-link-chip:hover {
  background: rgba(255,255,255,.22);
  color: #fff !important;
  transform: translateY(-1px);
}
.jp-footer .ft-title { color: #fff; font-weight: 700; margin-bottom: .7rem; font-size: .92rem; letter-spacing: .5px; }
.jp-footer .ft-brand { font-weight: 800; font-size: 1.25rem; color: #fff; display: flex; align-items: center; gap: .55rem; }
.jp-footer-contact { font-size: .86rem; }
.jp-footer-friends { font-size: .78rem; }
.jp-footer-disclaimer { border: 1px solid rgba(255,255,255,.1); }
.jp-footer { padding: 2.8rem 0 1.8rem; margin-top: 3.5rem; font-size: .88rem; }
@media (max-width: 767px) {
  .jp-footer-link-chip { padding: .3rem .7rem; font-size: .74rem; }
  .jp-footer .ft-brand { font-size: 1.1rem; }
}

/* ============ v17: 文件预览框（真实网盘文件，资源卡片+相关推荐统一） ============ */
.jp-file-preview {
  background: linear-gradient(180deg, var(--jp-primary-50) 0%, var(--jp-primary-50) 100%);
  border: 1px solid var(--jp-primary-200, var(--jp-border-strong));
  border-radius: 10px;
  padding: .6rem .9rem .5rem;
  margin-bottom: .85rem;
  display: flex;
  flex-direction: column;
  max-height: 158px;      /* 高度约 1/2：保证可见约 7 行，内部滚动 */
  overflow: hidden;
}
.jp-file-preview-head {
  display: flex;
  align-items: center;
  font-size: .78rem;
  color: var(--jp-primary-600);
  font-weight: 700;
  margin-bottom: .35rem;
  letter-spacing: .3px;
  flex-shrink: 0;
}
.jp-file-preview-title {
  color: var(--jp-primary-600);
}
.jp-file-preview-list {
  list-style: none;
  padding: 0;
  margin: 0;
  border-top: 1px dashed var(--jp-border-strong, var(--jp-border));
  border-bottom: 1px dashed var(--jp-border-strong, var(--jp-border));
  flex: 1;
  min-height: 0;
  overflow-y: auto;      /* 上下滑动预览全部内容 */
  scrollbar-width: thin;
  scrollbar-color: var(--jp-primary, var(--jp-primary-600)) transparent;
}
.jp-file-preview-list::-webkit-scrollbar { width: 4px; }
.jp-file-preview-list::-webkit-scrollbar-thumb { background: var(--jp-primary, var(--jp-primary-600)); border-radius: 4px; opacity: .7; }
.jp-file-preview-list::-webkit-scrollbar-track { background: transparent; }
.jp-file-preview-list .jp-file-item {
  display: flex;
  align-items: center;
  gap: .45rem;
  padding: .1rem 0;
  font-size: .68rem;      /* 字体缩小，保证 7 行可见 */
  line-height: 1.3;
  color: var(--jp-text);
}
.jp-file-preview-list .jp-file-item .jp-file-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--jp-text);
}
.jp-file-preview-list .jp-file-item.is-folder .jp-file-name {
    color: #e74c3c;
  font-weight: 600;
  font-weight: 600;
}
.jp-file-preview-list .jp-file-item.is-folder .jp-i {
    color: #e74c3c;
}
.jp-file-preview-list .jp-file-item .jp-i {
  color: var(--jp-primary);
}
.jp-file-preview-list .jp-file-item.indent {
  padding-left: 1rem;
}
.jp-file-preview-list .jp-file-item:hover {
  background: var(--jp-primary-50);
  border-radius: 4px;
}
.jp-file-preview-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: .5rem;
  margin-top: .25rem;
  flex-shrink: 0;
}
.jp-file-preview-total {
  font-size: .68rem;
  color: var(--jp-primary-600);
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  white-space: nowrap;
}
.jp-file-preview-tip {
  font-size: .62rem;
  color: var(--jp-muted);
  display: inline-flex;
  align-items: center;
  gap: .25rem;
}
/* 相关推荐里的迷你目录（去掉外框，融入卡片） */
.jp-reco-file-list {
  background: var(--jp-primary-50);
  border: 1px solid var(--jp-primary-200, var(--jp-border-strong));
  border-radius: 8px;
  padding: .4rem .55rem .35rem;
  margin-bottom: .5rem;
  max-height: 110px;     /* 高度约 1/2：约 5 行可见，内部滚动 */
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: #D69E2E88 transparent;
}
.jp-reco-file-list::-webkit-scrollbar { width: 4px; }
.jp-reco-file-list::-webkit-scrollbar-thumb { background: var(--jp-primary, var(--jp-primary-600)); border-radius: 4px; opacity: .7; }
.jp-reco-file-list .jp-file-item {
  padding: .1rem 0;
  font-size: .66rem;
  line-height: 1.3;
}
.jp-reco-file-list .jp-file-item .jp-i {
  color: var(--jp-primary);
}
/* 卡片变体：紧凑模式（去掉重复标题，目录直接置顶） */
@media (max-width: 767px) {
  .jp-file-preview-list .jp-file-item { font-size: .68rem; }
  .jp-reco-file-list { max-height: 96px; }
}

/* ============================================================
   v15 文件框统一化：详情页 / 模态框 / 相关推荐 与卡片 _res_card 用同套 jp-file-preview 结构
   ============================================================ */
.jp-file-preview { font-size: .8rem; }
.jp-file-preview-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .4rem;
  font-size: .78rem;
  font-weight: 700;
  color: var(--jp-primary-600);
  margin-bottom: .35rem;
  flex-wrap: nowrap;
}
.jp-file-preview-head .jp-i { color: var(--jp-primary); }
.jp-file-preview-title-wrap {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  min-width: 0;
  overflow: hidden;
}
.jp-file-preview-title {
  font-size: .78rem;
  font-weight: 700;
  color: var(--jp-primary-600);
}
/* 文件大小（右对齐，跟随真实清单） */
.jp-file-preview-list .jp-file-item .jp-file-size {
  margin-left: auto;
  flex-shrink: 0;
  font-size: .7rem;
  color: var(--jp-muted);
  font-variant-numeric: tabular-nums;
}
/* 无文件清单空状态 */
.jp-file-preview-empty {
  font-size: .72rem;
  color: var(--jp-muted);
  padding: .5rem .25rem;
  text-align: center;
}
.jp-file-preview-empty-item {
  list-style: none;
  font-size: .72rem;
  color: var(--jp-muted);
  padding: .5rem .25rem;
  text-align: center;
}
.jp-file-preview-empty-reco { font-size: .64rem; padding: .25rem 0; }
/* 详情页文件预览（与卡片同款，去 jf-filetree 旧结构） */
.jp-file-preview.jp-file-preview-detail {
  padding: .8rem .9rem;
  margin-bottom: 1rem;
  border-radius: 10px;
  background: linear-gradient(180deg, var(--jp-primary-50), #fff);
  border: 1px solid var(--jp-border);
}
.jp-file-preview-list.jp-file-preview-list-detail {
  max-height: 320px;
  overflow-y: auto;
  padding: .25rem 0;
}
.jp-file-preview-list.jp-file-preview-list-detail .jp-file-item {
  padding: .35rem .25rem;
  font-size: .82rem;
  border-radius: 4px;
}
.jp-file-preview-list.jp-file-preview-list-detail .jp-file-item:hover {
  background: rgba(0,0,0,.02);
}
.jp-file-preview-list.jp-file-preview-list-detail .jp-file-size {
  margin-left: auto;
  flex-shrink: 0;
  font-size: .72rem;
  color: var(--jp-muted);
  font-variant-numeric: tabular-nums;
}
.jp-file-preview-total-detail {
  font-size: .76rem;
  padding: .35rem .6rem;
  border-radius: 999px;
  background: var(--jp-primary);
  color: var(--jp-on-primary, #fff);
}
.jp-file-preview-total-detail b { font-weight: 700; }
.jp-file-preview-total-detail .jp-detail-file-count {
  font-variant-numeric: tabular-nums;
  margin-right: .15rem;
}

/* 全局模态框文件预览（与卡片共用 jp-file-preview 结构） */
.jp-file-preview.jp-file-preview-modal {
  padding: .8rem .9rem;
}
.jp-file-preview-list.jp-file-preview-list-modal {
  max-height: 260px;
  overflow-y: auto;
  padding: .2rem 0;
  margin-bottom: .35rem;
}
.jp-file-preview-list.jp-file-preview-list-modal .jp-file-item {
  padding: .3rem .4rem;
  border-radius: 4px;
  font-size: .82rem;
}
.jp-file-preview-list.jp-file-preview-list-modal .jp-file-item:hover {
  background: rgba(0,0,0,.025);
}
.jp-file-preview-total-modal {
  font-size: .76rem;
  padding: .35rem .55rem;
  border-radius: 999px;
  background: var(--jp-primary);
  color: var(--jp-on-primary, #fff);
}
.jp-file-preview-total-modal b { font-weight: 700; }

/* 相关推荐的迷你文件框：紧凑模式 + 高度限制 */
.jp-reco-rich .jp-file-preview.jp-file-preview-mini {
  background: transparent;
  padding: 0;
  border: none;
  margin: 0 0 .5rem;
}
.jp-reco-rich .jp-file-preview-head {
  font-size: .66rem;
  font-weight: 600;
  margin-bottom: .2rem;
  color: var(--jp-primary);
}
.jp-reco-rich .jp-file-preview-title {
  font-size: .66rem;
  font-weight: 600;
}
.jp-reco-file-box {
  background: var(--jp-primary-50);
  border: 1px solid var(--jp-primary-200, var(--jp-border-strong));
  border-radius: 8px;
  padding: .35rem .5rem .3rem;
}
.jp-reco-file-list {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  margin-bottom: .25rem !important;
  max-height: 96px;
  overflow-y: auto;
}
.jp-reco-file-list .jp-file-item { padding: .12rem 0; font-size: .68rem; }
.jp-reco-file-list .jp-file-item .jp-i { color: var(--jp-primary); }
.jp-file-preview-total-reco {
  font-size: .62rem;
  padding: .2rem .5rem;
  border-radius: 999px;
  background: var(--jp-primary);
  color: var(--jp-on-primary, #fff);
  font-weight: 600;
}
.jp-file-preview-total-reco b { font-weight: 700; }

/* 卡片总大小胶囊 */
.jp-file-preview-total.jp-file-preview-total-card {
  font-size: .68rem;
  padding: .25rem .55rem;
  border-radius: 999px;
  background: var(--jp-primary);
  color: var(--jp-on-primary, #fff);
}
.jp-file-preview-total-card b { font-weight: 700; }

/* 窄屏兼容：相关推荐与模态框保持可读，不出现横向滚动 */
@media (max-width: 575px) {
  .jp-res-v2-actions.jp-res-v2-actions-row .jp-res-v2-btn { font-size: .66rem; padding: .35rem .25rem; }
  .jp-reco-file-list { max-height: 88px; }
  .jp-file-preview-list.jp-file-preview-list-modal { max-height: 220px; }
  .jp-file-preview-list.jp-file-preview-list-detail { max-height: 260px; }
}

/* （历史：网盘元数据信息面板样式已废弃，统一改为如实目录树渲染，见上文 jp-file-preview-*） */

/* ============================================================
   v21：网盘原生风格文件预览框（带勾选框 + 可上下滑动）
   ========================================================== */

/* 卡片/相关推荐：~220px ≈ 11 行可见 */
.jp-file-preview {
  background: linear-gradient(180deg, var(--jp-primary-50) 0%, var(--jp-primary-50) 100%);
  border: 1px solid var(--jp-primary-200, var(--jp-border-strong));
  border-radius: 10px;
  padding: .55rem .85rem .45rem;
  margin-bottom: .85rem;
  display: flex;
  flex-direction: column;
  max-height: 220px;
  overflow: hidden;
  position: relative;
}
.jp-file-preview.jp-file-preview-detail { max-height: 600px; }
/* 详情页为嵌套结构，放开内层 jp-res-v2-preview 的 220px 限制，使 600px 生效且列表滚动 */
.jp-file-preview.jp-file-preview-detail > .jp-res-v2-preview { max-height: none; overflow: visible; flex: 1 1 auto; min-height: 0; }
.jp-file-preview.jp-file-preview-modal { max-height: 420px; }
@media (max-width: 575.98px) {
  .jp-file-preview { max-height: 180px; }
.jp-file-preview.jp-file-preview-detail { max-height: 420px; }
  .jp-file-preview.jp-file-preview-detail > .jp-res-v2-preview { max-height: none; overflow: visible; flex: 1 1 auto; min-height: 0; }
  .jp-file-preview.jp-file-preview-modal { max-height: 320px; }
}

/* 顶部区域 */
.jp-file-preview-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .5rem;
  font-size: .78rem;
  color: var(--jp-primary-600);
  font-weight: 700;
  margin-bottom: .3rem;
  flex-shrink: 0;
  letter-spacing: .2px;
}
.jp-file-preview-title-wrap {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  min-width: 0;
  flex: 1;
  overflow: hidden;
}
.jp-file-preview-check {
  width: 14px; height: 14px;
  accent-color: var(--jp-primary);
  cursor: default;
  margin: 0;
  flex-shrink: 0;
}
.jp-file-preview-title {
  color: var(--jp-primary-600);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.jp-file-preview-count {
  font-size: .68rem;
  color: var(--jp-muted);
  font-weight: 400;
  white-space: nowrap;
  margin-left: .15rem;
}
.jp-file-preview-total {
  font-size: .68rem;
  color: var(--jp-primary-600);
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  white-space: nowrap;
}
.jp-file-preview-total b { font-weight: 700; }

/* 列表区域 + 上下滑动提示渐变 */
.jp-file-preview-body {
  position: relative;
  flex: 1;
  min-height: 0;
  border-top: 1px solid var(--jp-border);
  border-bottom: 1px solid var(--jp-border);
}
.jp-file-preview-body::before,
.jp-file-preview-body::after {
  content: '';
  position: absolute;
  left: 0; right: 0;
  height: 14px;
  pointer-events: none;
  z-index: 2;
  transition: opacity .15s;
}
.jp-file-preview-body::before {
  top: 0;
  background: linear-gradient(180deg, var(--jp-primary-50) 30%, rgba(255,255,255,0) 100%);
  opacity: 0;
}
.jp-file-preview-body::after {
  bottom: 0;
  background: linear-gradient(0deg, var(--jp-primary-50) 30%, rgba(255,255,255,0) 100%);
  opacity: 0;
}
.jp-file-preview-body.jp-fp-top::before { opacity: 1; }
.jp-file-preview-body.jp-fp-bottom::after { opacity: 1; }

.jp-file-preview-list {
  list-style: none;
  padding: .25rem 0;
  margin: 0;
  height: 100%;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  scrollbar-color: var(--jp-primary, var(--jp-primary-600)) transparent;
  scroll-behavior: smooth;
}
.jp-file-preview-list::-webkit-scrollbar { width: 5px; }
.jp-file-preview-list::-webkit-scrollbar-thumb { background: var(--jp-primary, var(--jp-primary-600)); border-radius: 5px; }
.jp-file-preview-list::-webkit-scrollbar-track { background: transparent; }

/* 单项：勾选 + 图标 + 名称 + 大小 + 操作 */
.jp-file-preview-list .jp-file-item {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .12rem .3rem;
  font-size: .72rem;
  line-height: 1.35;
  color: var(--jp-text);
  border-radius: 4px;
  transition: background-color .12s;
}
.jp-file-preview-list .jp-file-item:hover {
  background: rgba(99, 102, 241, .08);
}
.jp-file-preview-list .jp-file-item .jp-file-check {
  width: 13px; height: 13px;
  accent-color: var(--jp-primary);
  cursor: default;
  margin: 0;
  flex-shrink: 0;
}
.jp-file-preview-list .jp-file-item .jp-i {
  color: #f59e0b;
  flex-shrink: 0;
  width: 14px; height: 14px;
}
.jp-file-preview-list .jp-file-item.is-folder .jp-i {
  color: #f59e0b;
}
.jp-file-preview-list .jp-file-item .jp-file-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--jp-text);
}
.jp-file-preview-list .jp-file-item.is-folder .jp-file-name {
  color: #b45309;
  font-weight: 600;
}
.jp-file-preview-list .jp-file-item .jp-file-size {
  font-size: .64rem;
  color: var(--jp-muted);
  white-space: nowrap;
  flex-shrink: 0;
}
.jp-file-preview-list .jp-file-item .jp-file-action {
  border: 0;
  background: transparent;
  color: var(--jp-muted);
  padding: 0 .15rem;
  cursor: pointer;
  font-size: .9rem;
  line-height: 1;
  border-radius: 4px;
  flex-shrink: 0;
  opacity: 0;
  transition: opacity .12s, color .12s, background-color .12s;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.jp-file-preview-list .jp-file-item:hover .jp-file-action,
.jp-file-preview-list .jp-file-item.is-action-show .jp-file-action { opacity: 1; }
.jp-file-preview-list .jp-file-item .jp-file-action:hover {
  background: rgba(99, 102, 241, .12);
  color: var(--jp-primary-600);
}

/* 详情页/模态框稍大字号 */
.jp-file-preview.jp-file-preview-detail .jp-file-preview-list .jp-file-item { font-size: .82rem; padding: .26rem .4rem; }
.jp-file-preview.jp-file-preview-detail .jp-file-preview-list .jp-file-item .jp-i { width: 16px; height: 16px; }
.jp-file-preview.jp-file-preview-detail .jp-file-preview-head { font-size: .88rem; }
.jp-file-preview.jp-file-preview-modal .jp-file-preview-list .jp-file-item { font-size: .86rem; padding: .3rem .45rem; }
.jp-file-preview.jp-file-preview-modal .jp-file-preview-list .jp-file-item .jp-i { width: 16px; height: 16px; }
.jp-file-preview.jp-file-preview-modal .jp-file-preview-head { font-size: .92rem; }

/* 空数据 */
.jp-file-preview-empty {
  text-align: center;
  padding: 1.2rem .5rem;
  color: var(--jp-muted);
  font-size: .76rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .35rem;
}
.jp-file-preview-empty .jp-i { color: var(--jp-muted); opacity: .5; font-size: 1.4rem; }
.jp-file-preview-empty-item {
  padding: 1rem;
  color: var(--jp-muted);
  text-align: center;
  font-size: .8rem;
  list-style: none;
}

/* 兼容：旧标题 wrap 与 head 元素的 align （避免破坏） */
.jp-file-preview-foot { display: none; } /* 旧版底部行不再使用 */


/* v22：第一层级分类折叠 —— caret + 折叠提示 */
.jp-file-preview-list .jp-file-item .jp-file-caret {
  margin-left: auto;
  color: var(--jp-muted);
  width: 12px; height: 12px;
  flex-shrink: 0;
  opacity: .55;
}
.jp-file-preview-list .jp-file-item.is-folder .jp-file-caret {
  margin-left: .35rem;
}
.jp-file-preview-fold-tip {
  flex-shrink: 0;
  font-size: .68rem;
  color: var(--jp-primary-600);
  background: var(--jp-primary-50);
  border: 1px dashed var(--jp-primary-200, #c7d2fe);
  border-radius: 6px;
  padding: .3rem .5rem;
  margin-top: .35rem;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .3rem;
  text-align: center;
}
.jp-file-preview-fold-tip .jp-i { color: var(--jp-primary); }

/* ============================================================
   v27：导航首页筛选结果网格（一行4个，拉宽）+ 文件预览框排版优化
   ============================================================ */
/* 容器居中留白，拉宽但避免遮挡左右浮窗 */
.container { max-width: 1440px; }

/* 取消卡片「总大小」胶囊背景，改为主题色文字 */
.jp-file-preview-total.jp-file-preview-total-card {
  background: transparent;
  color: var(--jp-primary-600);
  padding: .12rem .35rem;
  border-radius: 6px;
}
.jp-file-preview-total-card b { font-weight: 700; }

/* 统一卡片内文件框（jp-res-v2-preview 与 jp-file-preview 叠加，显式统一） */
.jp-res-v2-preview.jp-file-preview {
  padding: .6rem .9rem .55rem;
  margin-bottom: .7rem;
  background: linear-gradient(180deg, var(--jp-primary-50), var(--jp-primary-50));
  border: 1px solid var(--jp-primary-200, var(--jp-border-strong));
  border-radius: 10px;
  max-height: 220px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  position: relative;
}

/* 标题行：左（目录+计数），右（总大小），整齐对齐 */
.jp-file-preview-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .5rem;
  margin-bottom: .4rem;
  flex-shrink: 0;
}
.jp-file-preview-title-wrap {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  min-width: 0;
  flex: 1;
  overflow: hidden;
}
.jp-file-preview-title {
  font-size: .78rem;
  font-weight: 700;
  color: var(--jp-primary-600);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.jp-file-preview-count {
  font-size: .68rem;
  color: var(--jp-muted);
  font-weight: 400;
  white-space: nowrap;
  margin-left: .2rem;
}

/* 文件列表：整齐行、舒适间距、细分隔线 */
.jp-file-preview-list {
  list-style: none;
  padding: 0;
  margin: 0;
  border-top: 1px solid var(--jp-border, #eee);
  border-bottom: 1px solid var(--jp-border, #eee);
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--jp-primary, #7c3aed) transparent;
}
.jp-file-preview-list .jp-file-item {
  display: flex;
  align-items: center;
  gap: .55rem;
  padding: .36rem .2rem;
  font-size: .78rem;
  line-height: 1.45;
  color: var(--jp-text);
  border-bottom: 1px solid rgba(0,0,0,.035);
}
.jp-file-preview-list .jp-file-item:last-child { border-bottom: none; }
.jp-file-preview-list .jp-file-item .jp-i {
  width: 16px; height: 16px; flex: 0 0 16px;
  color: var(--jp-primary);
}
.jp-file-preview-list .jp-file-item .jp-file-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--jp-text);
}
.jp-file-preview-list .jp-file-item.is-folder .jp-file-name {
    color: #e74c3c;
  font-weight: 600;
  font-weight: 600;
}
.jp-file-preview-list .jp-file-item:hover {
  background: var(--jp-primary-50);
  border-radius: 5px;
}

/* v27-补充：详情页/模态框/相关推荐的总大小也取消背景，与卡片统一 */
.jp-file-preview-total-detail,
.jp-file-preview-total-modal,
.jp-file-preview-total-reco {
  background: transparent !important;
  color: var(--jp-primary-600) !important;
  padding: .12rem .35rem !important;
  border-radius: 6px !important;
}
.jp-file-preview-total-detail b,
.jp-file-preview-total-modal b,
.jp-file-preview-total-reco b { font-weight: 700; }

/* ===== v33: 所有页面主内容不遮挡两侧浮窗（72px 最小安全区） =====
   浮窗：AI 助手 left:18px 宽~46px(至64px) / 微信 right:18px 宽~46px(至64px)
   留 72px = 64px 浮窗 + 8px 间距。
   用 body > * 通配（除 nav/浮窗/弹窗外）确保所有页面（含 /me /jubensha /feedback）全部生效 */
@media (min-width: 1200px) {
  .jp-navbar { margin-left: -72px !important; margin-right: -72px !important; }
  body > *:not(.jp-navbar):not([class*="fab"]):not(.jp-backtop):not([class*="kefu"]):not([class*="gzh"]):not([class*="float"]):not([class*="fix-bar"]):not(.modal):not(.modal-backdrop):not(.toast):not(.toast-container):not(.dropdown-menu):not(.offcanvas):not(nav):not(script):not(style):not(link):not(meta) {
    padding-left: 72px !important;
    padding-right: 72px !important;
  }
}

/* 资源汇总 /categories：外层已 72px padding，这里只限制最大宽度 + 兜底 */
.jp-cat-container { max-width: 1800px; }
@media (max-width: 1980px) {
  .jp-cat-container { max-width: calc(100vw - 144px); }
}
@media (max-width: 1199.98px) {
  .jp-cat-container { max-width: 100%; }
}

/* ===== v36: 预览框字号精确匹配 meta 行实际像素 =====
   body font-size: 15px；meta 实际 10.88px
   rem 相对 html 16px -> 预览框子元素 .68rem = 10.88px 像素级一致 */
.jp-file-preview-title { font-size: .68rem !important; font-weight: 400 !important; color: var(--jp-muted) !important; }
.jp-file-preview-count { font-size: .68rem !important; font-weight: 400 !important; color: var(--jp-muted) !important; }
.jp-file-preview-list .jp-file-item { font-size: .68rem !important; }
.jp-file-preview-list .jp-file-item:not(.is-folder) .jp-file-name { color: var(--jp-muted) !important; font-weight: 400 !important; }
.jp-file-preview-list .jp-file-item.is-folder .jp-file-name { color: var(--jp-muted) !important; font-weight: 400 !important; }
/* 文件夹图标保留主题色作视觉提示 */
.jp-file-preview-title-wrap > .jp-i,
.jp-file-preview-list .jp-file-item > .jp-i { color: var(--jp-primary) !important; font-size: .85rem !important; }

.jp-file-preview-list .jp-file-item.is-folder .jp-file-name { color: #e74c3c !important; font-weight: 600 !important; }
.jp-file-preview-list .jp-file-item.is-folder .jp-i { color: #e74c3c !important; }
