:root{
  /* 北欧清新：米白底 + 深蓝主题 #032E7E */
  --bg:#F6F4EE;            /* 米白主背景 */
  --bg2:#FCFBF7;           /* 侧栏 / 浅层 */
  --card:#FFFFFF;          /* 卡片白 */
  --ink:#3A3D38;           /* 正文深墨 */
  --ink-strong:#2A2D28;    /* 标题 */
  --muted:#6B716B;         /* 次要文字（提深至 AA 对比 ≥4.5） */
  --line:#E9E4D8;          /* 柔和边框 */
  --line-soft:#F0ECE3;     /* 更浅分隔 */
  /* 深蓝主色 #032E7E */
  --green:#032E7E;         /* 主蓝 */
  --green-2:#0A3CA0;       /* 深蓝（hover/按钮渐变端） */
  --green-soft:#ECF1FA;    /* 浅蓝底（选中/标签） */
  --green-tint:#F6F9FE;    /* 极浅蓝 */
  --primary:var(--green);
  --primary2:var(--green-2);
  --font-sans:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-serif:"Songti SC","STSong","Source Han Serif SC","SimSun",Georgia,serif;
  --shadow:0 8px 24px rgba(60,63,58,.07);
  --shadow-sm:0 3px 12px rgba(60,63,58,.05);
  --radius:18px;
  --radius-sm:13px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:var(--font-sans);color:var(--ink);min-height:100vh;
  background:
    radial-gradient(900px 520px at 100% -10%, rgba(3,46,126,.10), transparent 60%),
    radial-gradient(700px 480px at -10% 110%, rgba(3,46,126,.07), transparent 55%),
    var(--bg);
  background-attachment:fixed;}
a{color:var(--green-2);text-decoration:none;transition:color .2s}
.hidden{display:none !important}

/* 滚动条 */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:rgba(58,61,56,.16);border-radius:10px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(58,61,56,.28);background-clip:content-box}

/* ===== 整体布局：左栏 + 右侧内容 ===== */
.layout{display:flex;align-items:stretch;min-height:100vh}
.sidebar{width:248px;flex:0 0 248px;position:sticky;top:0;height:100vh;
  background:var(--bg2);border-right:1px solid var(--line);
  display:flex;flex-direction:column;padding:22px 16px;gap:8px}
.brand{display:flex;align-items:center;gap:12px;cursor:pointer;padding:4px 8px 18px}
/* 品牌 logo：透明背景沙漏图标，自带圆形轮廓，无需底色 */
.logo{width:46px;height:46px;display:block;flex:0 0 auto;object-fit:contain;
  transition:transform .25s ease}
.brand:hover .logo{transform:scale(1.06)}
/* 品牌文字：三行左对齐（忆往昔 / 珍藏每一段回忆 / wuzibei.top） */
.brand-text{min-width:0;text-align:left}
.brand-name{font-family:var(--font-serif);font-size:21px;font-weight:700;letter-spacing:3px;color:var(--ink-strong);line-height:1.25}
.brand-slogan{font-size:12px;color:var(--ink);opacity:.72;letter-spacing:.3px;margin-top:3px;line-height:1.3}
.brand-domain{font-size:11px;color:var(--muted);letter-spacing:.3px;margin-top:2px;line-height:1.3}

.sidenav{display:flex;flex-direction:column;gap:10px;overflow-y:auto;flex:1;margin:4px -4px;padding:0 4px}
.sidenav a{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-sm);
  color:var(--ink);font-size:14.5px;cursor:pointer;transition:.2s;border:1px solid transparent}
.sidenav a .s-emoji{font-size:16px;line-height:1;flex:0 0 auto}
.sidenav a:hover{background:var(--green-soft);color:var(--ink-strong)}
.sidenav a.active{background:var(--green-soft);color:var(--green-2);font-weight:600;border-color:rgba(3,46,126,.55)}
/* 管理员入口：醒目金色描边，仅管理员可见（由 buildNav 控制渲染） */
.sidenav a.s-admin{margin-top:2px;color:#7a5a12;background:linear-gradient(135deg,#fff7e6,#fdf1d6);
  border:1px solid #ecd9a6;font-weight:600}
.sidenav a.s-admin:hover{color:#5d4310;background:linear-gradient(135deg,#fff2d2,#fbe7bd);border-color:#e0c174}
.sidenav a.s-admin.active{color:#5d4310;background:linear-gradient(135deg,#ffeec2,#fbe3ad);border-color:#d9b25a}
.sidenav a.s-admin .s-emoji{filter:drop-shadow(0 1px 1px rgba(180,140,40,.25))}
.sidenav .s-divider{height:1px;background:var(--line-soft);margin:10px 8px}

/* 侧栏分组标题 + 北欧线性小图标 */
.s-group{display:flex;flex-direction:column;gap:4px}
.s-group-head{display:flex;align-items:center;gap:9px;padding:14px 14px 7px;
  color:var(--muted);font-size:16px;font-weight:800;letter-spacing:1.5px;cursor:pointer;user-select:none;
  border-radius:var(--radius-sm);transition:background .15s ease,color .15s ease}
.s-group-head:hover{background:var(--green-soft);color:var(--ink-strong)}
.s-group-head:hover .g-ico{color:var(--green-2)}
.s-group-head:focus-visible{outline:2px solid var(--green-2);outline-offset:1px}
.s-group-head .g-ico{width:20px;height:20px;color:var(--green-2);flex:0 0 auto;display:grid;place-items:center}
.s-group-head .g-ico svg{width:20px;height:20px;display:block}
.s-group-title{font-family:var(--font-sans)}
.s-group-head .g-caret{margin-left:auto;width:15px;height:15px;color:var(--muted);flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;transition:transform .18s ease}
.s-group-head .g-caret svg{width:15px;height:15px;display:block}
.s-group.collapsed .g-caret{transform:rotate(-90deg)}
.s-group-items{display:flex;flex-direction:column;gap:4px}
.s-group.collapsed .s-group-items{display:none}

/* 固定高度 68px：容纳最高的登录态内容，使这条线与页脚横线恒定对齐（22+68=90） */
.side-foot{border-top:1px solid var(--line-soft);height:68px;padding-top:0;
  display:flex;flex-direction:column;justify-content:center;gap:10px}
.side-user{display:flex;align-items:center;gap:10px}

/* ===== 右侧主区 ===== */
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:14px;
  padding:14px 30px;background:rgba(246,244,238,.82);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line)}
.menu-toggle{display:none;border:0;background:var(--green-tint);color:var(--green-2);width:40px;height:40px;
  border-radius:11px;font-size:18px;cursor:pointer;flex:0 0 auto}
/* 顶栏标题：字号/行高与侧栏品牌名(.brand-name)一致，并用 align-self+margin-top
   使其 top 落在 14+12=26，与侧栏品牌名(侧栏22+brand padding-top4=26)上下对齐 */
.topbar-title{font-family:var(--font-serif);font-size:21px;font-weight:700;color:var(--ink-strong);letter-spacing:1px;
  line-height:1.25;align-self:flex-start;margin-top:12px;white-space:nowrap;overflow:visible}
/* 长标题文本单独截断（称谓下拉面板需溢出可见，故截断只作用于文字本身） */
.topbar-title .tt-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 顶栏副标题：主标题下方一行小字（玄学故事 → 分享灵异、命理、奇闻） */
.topbar-sub{display:block;font-family:var(--font-sans);font-size:11px;font-weight:400;line-height:1.3;
  color:var(--muted);letter-spacing:.2px;margin-top:1px;max-width:min(52vw,240px);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-sub[hidden]{display:none}
.topbar-spacer{flex:1}
.topbar-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
/* 顶栏登录区：用户名过长时截断，避免撑破顶栏 */
.topbar-actions .uname{max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-views{font-size:12.5px;color:var(--muted);white-space:nowrap}

.content{position:relative;flex:1;max-width:1080px;width:100%;margin:0 auto;padding:28px 30px 10px}
/* min-height 90px = 侧栏底部留白22 + side-foot 68，使页脚横线与侧栏登录区上方的线同高 */
.footer{text-align:center;color:var(--muted);font-size:12px;padding:20px 10px;min-height:90px;
  display:flex;flex-direction:column;justify-content:center;align-items:center;
  border-top:1px solid var(--line);margin-top:24px}
/* 两行共享一个由较宽行决定宽度的居中容器，内部统一右对齐 → 右边缘精确齐平 */
.footer-inner{display:inline-block;text-align:right;max-width:100%}
.footer .beian{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;align-items:center;margin-top:12px}
.beian-item{display:inline-flex;align-items:center;gap:5px;line-height:18px;color:var(--muted);text-decoration:none;transition:.2s}
.beian-item:hover{color:var(--green-2)}
/* 品牌行 / 副标语层级（桌面维持右对齐齐平设计，手机端切换居中布局） */
.foot-brand{font-weight:600;color:var(--ink,#3c3a36);letter-spacing:.2px}
.foot-tag{font-size:11.5px;opacity:.85;margin-top:2px}
@media (max-width:560px){
  .footer{padding:26px 18px 46px}
  .footer-inner{display:block;text-align:center}
  .foot-brand{font-size:13px}
  .foot-tag{margin-top:3px}
  .footer .beian{flex-direction:column;align-items:center;gap:7px;margin-top:12px;line-height:1}
  .footer .beian .beian-item{font-size:11.5px}
}
.beian-icon{height:18px;width:auto;flex:0 0 auto;vertical-align:middle;display:block;border-radius:2px}

/* ===== 用户框 / 头像 ===== */
.userbox{display:flex;align-items:center;gap:10px}
.avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--green),var(--green-2));
  display:grid;place-items:center;color:#fff;font-size:14px;font-weight:600}
/* 头像可点击 → 打开个人资料（上传头像 / 修改名字） */
.avatar-btn{padding:0;border:0;cursor:pointer;position:relative;overflow:visible;font-family:inherit;
  -webkit-tap-highlight-color:transparent;transition:.18s}
.avatar-btn .avatar-img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.avatar-btn:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(0,0,0,.16)}
.avatar-cam{position:absolute;right:-3px;bottom:-3px;width:16px;height:16px;border-radius:50%;
  background:#fff;color:var(--green);font-size:9px;line-height:1;display:grid;place-items:center;
  border:1px solid var(--line);box-shadow:var(--shadow-sm)}
.userbox .uname{cursor:pointer;transition:.16s}
.userbox .uname:hover{color:var(--green)}

/* ===== 个人资料弹窗：上传头像 + 修改名字 ===== */
.pf-ava-row{display:flex;align-items:center;gap:16px;margin:4px 0 16px}
.pf-ava{width:76px;height:76px;flex:0 0 auto;border-radius:50%;overflow:hidden;
  background:linear-gradient(135deg,var(--green),var(--green-2));display:grid;place-items:center;
  color:#fff;font-size:28px;font-weight:600;transition:.2s}
.pf-ava img{width:100%;height:100%;object-fit:cover;display:block}
.pf-ava.pf-loading{opacity:.45}
.pf-side{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0}
.pf-side .btn{padding:7px 12px;font-size:13px}
.pf-tip{margin:0;font-size:12px;color:var(--muted);line-height:1.55}
@media(max-width:480px){
  .pf-ava-row{gap:12px}
  .pf-ava{width:62px;height:62px;font-size:23px}
}

/* ===== 按钮 ===== */
.btn{border:0;border-radius:var(--radius-sm);padding:9px 16px;font-size:14px;cursor:pointer;
  background:var(--card);color:var(--ink);font-family:inherit;
  transition:.2s;box-shadow:var(--shadow-sm);border:1px solid var(--line)}
.btn:hover{transform:translateY(-1px);border-color:var(--green);color:var(--green-2)}
.btn:active{transform:translateY(0)}
.btn.primary{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;font-weight:600;
  box-shadow:0 8px 20px rgba(10,60,160,.3);border:0}
.btn.primary:hover{color:#fff;filter:brightness(1.04)}
.btn.gold{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;font-weight:600;
  box-shadow:0 8px 20px rgba(10,60,160,.3);border:0}
.btn.gold:hover{color:#fff;filter:brightness(1.04)}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
.btn.ghost:hover{border-color:var(--green);color:var(--green-2)}
.btn.sm{padding:6px 12px;font-size:12.5px;border-radius:10px}
.btn.danger{color:#c0564f;background:#fff;border-color:rgba(192,86,79,.45);box-shadow:none}
.btn.danger:hover{color:#fff;background:#c0564f;border-color:#c0564f;filter:none}
.btn.warn{color:#b07a1e;background:#fff;border-color:rgba(176,122,30,.42);box-shadow:none}
.btn.warn:hover{color:#fff;background:#d99a2b;border-color:#d99a2b}

/* ===== Hero 落地页轮播 ===== */
.hero{position:relative;overflow:hidden;border-radius:22px;margin:6px 0 28px;
  padding:58px 30px 62px;text-align:center;
  background:
    radial-gradient(560px 280px at 50% -20%, rgba(3,46,126,.18), transparent 70%),
    linear-gradient(160deg, #FFFFFF, var(--green-tint));
  border:1px solid var(--line);box-shadow:var(--shadow)}
/* 轮播容器：外框（圆角 + 阴影 + 边框）由视口承担，整张卡片一起滑动 */
.hero-carousel{position:relative;margin:6px 0 28px}
.hero-viewport{position:relative;overflow:hidden;border-radius:22px;
  border:1px solid var(--line);box-shadow:var(--shadow);
  background:linear-gradient(160deg,#FFFFFF,var(--green-tint))}
.hero-track{display:flex;transition:transform .55s cubic-bezier(.22,.61,.36,1);will-change:transform}
.hero-slide{position:relative;flex:0 0 100%;max-width:100%;overflow:hidden;
  padding:58px 72px 64px;text-align:center;
  background:
    radial-gradient(560px 280px at 50% -20%, rgba(3,46,126,.18), transparent 70%),
    linear-gradient(160deg, #FFFFFF, var(--green-tint))}
.hero-glow{position:absolute;left:50%;top:8%;width:300px;height:300px;transform:translateX(-50%);
  background:radial-gradient(circle,rgba(3,46,126,.22),transparent 65%);
  filter:blur(10px);animation:glow 6s ease-in-out infinite;pointer-events:none}
.hero-inner{position:relative}
/* 切到该张时重新播放一次内容入场动画 */
.hero-slide.is-in .hero-inner{animation:fadeUp .6s ease both}
.hero-badge{display:inline-block;letter-spacing:4px;font-size:12px;color:var(--green-2);
  border:1px solid rgba(3,46,126,.4);background:var(--green-soft);
  padding:6px 16px;border-radius:999px;margin-bottom:22px}
.hero-title{font-family:var(--font-serif);font-size:clamp(30px,7.6vw,78px);font-weight:700;
  letter-spacing:12px;margin:0 0 18px;padding-left:12px;color:var(--ink-strong)}
.hero-sub{color:var(--muted);font-size:clamp(14px,2.2vw,17px);line-height:2;margin:0 auto 30px;max-width:560px}
.hero-cta{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
.hero-cta .btn{padding:12px 26px;font-size:15px;border-radius:14px}
/* 上一张 / 下一张 按钮 */
.hero-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  width:42px;height:42px;display:grid;place-items:center;padding:0;cursor:pointer;
  border-radius:50%;border:1px solid var(--line);background:rgba(255,255,255,.9);
  color:var(--green-2);box-shadow:0 6px 18px rgba(60,63,58,.12);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  transition:background .2s ease,color .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease}
.hero-arrow svg{width:20px;height:20px;display:block}
.hero-arrow:hover{background:var(--green);color:#fff;border-color:var(--green);
  box-shadow:0 10px 24px rgba(3,46,126,.3)}
.hero-arrow:active{transform:translateY(-50%) scale(.93)}
.hero-arrow:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
.hero-prev{left:14px}
.hero-next{right:14px}
/* 指示点 */
.hero-dots{position:absolute;left:0;right:0;bottom:20px;z-index:3;
  display:flex;justify-content:center;align-items:center;gap:9px}
.hero-dot{width:8px;height:8px;padding:0;border:0;border-radius:999px;cursor:pointer;
  background:rgba(3,46,126,.22);transition:width .3s ease,background .3s ease}
.hero-dot:hover{background:rgba(3,46,126,.45)}
.hero-dot.active{width:22px;background:var(--green)}
.hero-dot:focus-visible{outline:2px solid var(--green-2);outline-offset:3px}
/* 幻灯片背景图（上传 / 更换）：遮罩保证文案可读 + 文字反白 */
.hero-scrim{position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;transition:opacity .45s ease;
  background:linear-gradient(180deg, rgba(3,46,126,.22), rgba(2,18,48,.5))}
.hero-glow{z-index:1}
.hero-inner{position:relative;z-index:2}
/* 背景图铺满整张幻灯片（覆盖默认的渐变平铺行为） */
.hero-slide.has-img{background-size:cover;background-position:center;background-repeat:no-repeat}
.hero-slide.has-img .hero-glow{display:none}
.hero-slide.has-img .hero-title{color:#fff}
.hero-slide.has-img .hero-sub{color:rgba(255,255,255,.92)}
.hero-slide.has-img .hero-badge{color:#fff;background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.5)}
.hero-slide.has-img .hero-cta .btn.ghost{color:#fff;border-color:rgba(255,255,255,.6)}
.hero-slide.has-img .hero-cta .btn.ghost:hover{color:#fff;border-color:#fff}
/* 上传 / 更换 / 移除 按钮（仅登录后显示，位于幻灯片右上角） */
.hero-img-ctrl{position:absolute;top:16px;right:16px;z-index:3;display:flex;gap:8px}
.hero-img-btn{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:12.5px;
  padding:7px 12px;border-radius:999px;border:1px solid rgba(255,255,255,.65);
  background:rgba(255,255,255,.82);color:var(--green-2);box-shadow:0 4px 12px rgba(60,63,58,.12);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  transition:background .2s ease,color .2s ease,border-color .2s ease}
.hero-img-btn:hover{background:#fff;border-color:var(--green);color:var(--green)}
.hero-img-btn svg{width:15px;height:15px;display:block}
.hero-img-btn.hero-img-remove{color:#c0564f;border-color:rgba(192,86,79,.4)}
.hero-img-btn.hero-img-remove:hover{background:#fff;border-color:#c0564f;color:#c0564f}

/* ===== 管理员后台：首页轮播背景图管理 ===== */
.admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;margin-top:6px}
.admin-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:box-shadow .2s ease,border-color .2s ease}
.admin-card:hover{box-shadow:var(--shadow);border-color:rgba(3,46,126,.35)}
.admin-thumb{position:relative;height:150px;background:
    radial-gradient(300px 160px at 50% -20%, rgba(3,46,126,.18), transparent 70%),
    linear-gradient(160deg,#FFFFFF,var(--green-tint));
  background-size:cover;background-position:center;background-repeat:no-repeat}
.admin-thumb.has-img::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(3,46,126,.12),rgba(2,18,48,.42))}
.admin-thumb-title{position:absolute;left:0;right:0;bottom:12px;text-align:center;z-index:1;
  font-family:var(--font-serif);font-size:22px;font-weight:700;letter-spacing:6px;color:var(--ink-strong);
  text-shadow:0 1px 6px rgba(255,255,255,.5)}
.admin-thumb.has-img .admin-thumb-title{color:#fff;text-shadow:0 1px 10px rgba(0,0,0,.45)}
.admin-card-body{padding:14px 16px 18px;display:flex;flex-direction:column;gap:8px}
.admin-card-title{font-family:var(--font-serif);font-size:16px;font-weight:700;color:var(--ink-strong)}
.admin-card-badge{font-size:12px;color:var(--muted);letter-spacing:1px}
.admin-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.admin-upload{cursor:pointer;display:inline-flex;align-items:center}
.admin-upload input{display:none}
.admin-guard{max-width:460px;margin:60px auto;text-align:center;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);padding:38px 28px;box-shadow:var(--shadow)}
.admin-guard-ico{font-size:46px;margin-bottom:6px}
.admin-guard h2{font-family:var(--font-serif);margin:8px 0 10px;color:var(--ink-strong)}
.admin-guard p{color:var(--muted);margin:0 0 20px;line-height:1.8}

/* ===== 卡片网格 ===== */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:18px}
/* 收藏区列表：固定 3 列（2026-10-24 用户要求「每行 3 个」；窄屏收紧间距/字号，按钮均分） */
#col_list{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
#col_list .card{padding:12px}
#col_list .card h3{font-size:14px;line-height:1.45;word-break:break-all}
#col_list .card p{font-size:12px;margin:4px 0 6px}
.col-acts{display:flex;gap:6px;margin-top:6px}
.col-acts .btn{flex:1;min-width:0;text-align:center}
/* 收藏公开状态标记（登录时显示在分类标签后） */
.col-vis{display:inline-block;margin-left:5px;padding:0 7px;border-radius:999px;font-size:11px;line-height:17px;
  background:rgba(58,110,165,.12);color:#3a6ea5;border:1px solid rgba(58,110,165,.25);vertical-align:middle}
.col-vis.private{background:rgba(0,0,0,.05);color:var(--muted);border-color:var(--line)}
/* 未登录访客提示条：收藏区公开可读 */
.col-guest-tip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;padding:10px 14px;
  border:1px dashed var(--line);border-radius:12px;background:rgba(58,110,165,.05);color:var(--muted);font-size:13px}
.col-guest-tip .btn{margin-left:auto;flex:0 0 auto}
/* 添加/编辑弹窗里的「公开」开关 */
.col-pub{display:flex;align-items:center;gap:8px;margin:12px 0 14px;font-size:13px;color:var(--text);cursor:pointer}
.col-pub input{width:16px;height:16px;margin:0;accent-color:#3a6ea5;cursor:pointer}
@media (max-width:560px){
  #col_list{gap:8px}
  #col_list .card{padding:9px}
  #col_list .card h3{font-size:12.5px}
  #col_list .card p{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .col-acts .btn{padding:4px 6px;font-size:11.5px}
}
.card{background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);padding:18px;transition:.25s;
  box-shadow:var(--shadow-sm)}
.card:hover{border-color:rgba(3,46,126,.6);transform:translateY(-4px);
  box-shadow:0 16px 36px rgba(60,63,58,.10)}
.card h3{margin:0 0 8px;font-size:17px;font-family:var(--font-serif);letter-spacing:.5px;color:var(--ink-strong)}
.card .meta{color:var(--muted);font-size:12px;margin-bottom:8px}
/* 树洞卡片「查看更多」：与时间/评论数同行，靠右 */
.card .meta .th-more{margin-left:8px;vertical-align:middle;padding:3px 10px;font-size:12px;
  border-radius:8px}
.card p{color:var(--muted);font-size:13px;line-height:1.7;margin:6px 0}

/* 纪念卡片：参考排版（横图在上 → 名字 → 生卒日期一行，左对齐、无框） */
#mem_list{gap:26px 22px}
.mem-card{padding:0;background:transparent;border-color:transparent;box-shadow:none;
  display:flex;flex-direction:column;cursor:pointer}
.mem-card:hover{transform:none;border-color:transparent;box-shadow:none}
.mem-card:hover .mem-thumb{opacity:.9}
.mem-card:hover h3{color:var(--green)}
.mem-thumb-wrap{position:relative}
.mem-thumb{width:100%;aspect-ratio:1.85;object-fit:cover;object-position:center 30%;
  display:block;border-radius:8px;background:var(--green-tint);transition:opacity .2s}
.mem-thumb-empty{display:grid;place-items:center}
.mem-thumb-empty img{width:46px;height:46px;opacity:.32;object-fit:contain}
.mem-thumb-wrap .vis-badge{position:absolute;top:8px;right:8px;background:rgba(255,255,255,.94);
  box-shadow:0 2px 8px rgba(3,46,126,.18)}
.mem-card .mem-body{padding:12px 2px 0;text-align:left}
/* 姓名行 / 日期行：左侧文字 + 右侧按钮，左右分布，按钮底边与左侧文字底部对齐 */
.mem-row{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.mem-row h3{margin:0;font-size:19px;letter-spacing:.5px;line-height:1.35;text-align:left;
  flex:1;min-width:0;overflow-wrap:anywhere}
.mem-row-sub{margin-top:4px}
.mem-dates{color:var(--muted);font-size:14.5px;line-height:1.4;margin:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.mem-dates .dash{margin:0 2px;opacity:.75}
.mem-btn{flex:0 0 auto;padding:4px 13px;font-size:12.5px;line-height:1.2;border-radius:9px;margin-bottom:1px}

.section-title{font-family:var(--font-serif);font-size:23px;margin:6px 0 18px;position:relative;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;letter-spacing:1px;color:var(--ink-strong)}
.section-title.is-empty{display:none!important}
.section-title small{color:var(--muted);font-weight:400;font-size:13px;font-family:var(--font-sans);
  letter-spacing:0}
/* 玄学故事区：8 个功能入口排 4 列网格（按钮比默认 .btn 小一号），
   「写故事」按钮独占一行（.mx-acts 占满整行后自动换行到下一 flex 行）。
   2026-10-24 用户要求：随便算一算→随机算、按钮调小、每行四个、写故事单独一行。 */
.mx-acts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex:1 1 100%;margin:4px 0 2px}
.mx-acts .mx-act{padding:7px 8px;font-size:13px;line-height:1.35;text-align:center}
.section-title .mx-write{margin-left:0;margin-top:2px}
@media (max-width:560px){
  .mx-acts{gap:6px}
  .mx-acts .mx-act{padding:6px 4px;font-size:11.5px}
  /* 手机端「写故事」靠右：独占一行时 margin-left:auto 把它推到行尾，方便右手单手操作 */
  .section-title .mx-write{margin-left:auto}
}
/* 「纪念亲人」称谓选择：亲人二字为按钮；顶栏 / 列表标题 / 创建弹窗三处共用同一状态 */
.rel-wrap{position:relative;display:inline-flex;align-items:baseline}
.rel-btn{display:inline-flex;align-items:baseline;gap:2px;border:0;background:none;padding:0 2px;
  font:inherit;color:inherit;cursor:pointer;letter-spacing:inherit}
.rel-btn:hover .rel-cur-text,.rel-cur-text:hover{color:var(--green-2)}
.rel-cur-text{border-bottom:1.5px dashed rgba(3,46,126,.45)}
.rel-caret{font-size:12px;color:var(--muted);align-self:center}
.rel-panel{position:absolute;top:calc(100% + 12px);left:0;z-index:52;width:min(370px,88vw);
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:0 12px 30px rgba(3,46,126,.14);padding:14px}
.rel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.rel-chip{padding:8px 4px;text-align:center;border-radius:999px;background:var(--bg2);
  border:1px solid transparent;font-size:13px;color:var(--ink);cursor:pointer;
  font-family:inherit;transition:.15s;white-space:nowrap}
.rel-chip:hover{border-color:rgba(3,46,126,.4)}
.rel-chip.picked{background:var(--green-soft);color:var(--green);font-weight:600;border-color:var(--green)}
.rel-chip.rel-custom{border-style:dashed;color:var(--muted)}
/* 创建弹窗里的关系称谓：胶囊控件 + 面板内联展开（弹窗 overflow:auto，悬浮会被裁剪） */
.rel-wrap-form{display:block;width:100%}
.rel-wrap-form .rel-btn{border:1px solid var(--line);border-radius:999px;background:var(--bg2);
  padding:7px 14px;font-size:13px;letter-spacing:0}
.rel-wrap-form .rel-btn:hover{border-color:rgba(3,46,126,.45)}
.rel-wrap-form .rel-cur-text{border-bottom:0}
.rel-wrap-form .rel-panel{position:static;width:100%;margin-top:10px;box-shadow:none;
  border:1px dashed var(--line);background:var(--bg2)}
/* 顶栏里的称谓按钮（与标题字号一致，靠左侧展开） */
/* 详情页「本页导航」：悬停 / 点击展开，白底卡片 + 细分割线 */
.dnav-wrap{position:relative;display:inline-flex}
.dnav-btn{display:inline-flex;align-items:center;gap:6px}
.dnav-caret{font-size:10px;color:var(--muted);transition:transform .2s;line-height:1}
/* 面板外层只负责"无缝过渡区"：top:100% 且用 padding-top 造出视觉间距，
   这样指针从按钮移到菜单的整段路径始终处于 .dnav-wrap 的 hover 范围内，不会中途收起 */
.dnav-panel{position:absolute;top:100%;left:0;z-index:52;width:190px;padding-top:8px;
  opacity:0;visibility:hidden;transform:translateY(-4px);
  transition:opacity .18s ease,transform .18s ease,visibility .18s}
/* 板块较多时面板加宽为两列（由 dnavSync 判断后加 .multi） */
.dnav-panel.multi{width:330px}
/* 触发按钮靠近视口右缘时（≤900 按钮 50% 宽换行后，「本页导航」常落在右列），
   左缘锚定会让面板整体超出视口——由 dnavPlace() 测量后加 .flip 改为右缘锚定 */
.dnav-panel.flip{left:auto;right:0}
.dnav-card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:0 12px 30px rgba(3,46,126,.16);padding:5px;gap:1px;
  max-height:min(74vh,524px);overflow-y:auto;overscroll-behavior:contain;
  display:grid;grid-template-columns:1fr}
.dnav-card.multi{grid-template-columns:1fr 1fr}
.dnav-card::-webkit-scrollbar{width:7px}
.dnav-card::-webkit-scrollbar-thumb{background:rgba(3,46,126,.18);border-radius:10px;border:0;background-clip:border-box}
.dnav-card::-webkit-scrollbar-thumb:hover{background:rgba(3,46,126,.3);background-clip:border-box}
.dnav-wrap:hover .dnav-panel,
.dnav-wrap.pinned .dnav-panel{opacity:1;visibility:visible;transform:translateY(0)}
.dnav-wrap:hover .dnav-caret,
.dnav-wrap.pinned .dnav-caret{transform:rotate(180deg)}
.dnav-item{display:block;width:100%;text-align:left;background:none;border:0;
  border-radius:8px;padding:9px 11px;font-size:13.5px;line-height:1.25;
  color:var(--ink);font-family:inherit;cursor:pointer;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;
  transition:background .15s,color .15s}
.dnav-item:hover{background:var(--green-tint);color:var(--green)}
/* 导航锚点：避开吸顶顶栏；跳转后短暂高亮 */
.sec-anchor{scroll-margin-top:97px}
.sec-flash{animation:secFlash 1.6s ease}
@keyframes secFlash{
  0%{background-color:var(--green-soft)}
  100%{background-color:transparent}
}
.topbar-rel{align-items:center}

/* 板块引导卡 */
/* ===== 首页探索板块：紧凑图标网格（原 feat-card 大竖卡改为标签式） =====
   手机端 12 个板块若用大竖卡会拖出很长一屏，改为「emoji + 名称」的紧凑网格：
   一行 3–4 个，整体高度约为原来的 1/3，扫视效率更高。desc 退到 title 提示。 */
.explore-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:4px}
.ex-item{display:flex;align-items:center;gap:10px;padding:13px 15px;text-decoration:none;
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-sm);transition:.18s var(--ease,ease);cursor:pointer;min-width:0}
.ex-item:hover{border-color:var(--green);transform:translateY(-2px);
  box-shadow:0 8px 20px rgba(3,46,126,.09)}
.ex-item:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.ex-emoji{font-size:23px;line-height:1;flex:0 0 auto;transition:.22s}
.ex-item:hover .ex-emoji{transform:scale(1.12)}
.ex-label{font-size:14px;font-weight:600;color:var(--ink-strong);letter-spacing:.3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}

/* ===== 表单 ===== */
.field{margin:12px 0}
.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px;letter-spacing:.3px}
/* 上传区label 内的补充说明（弱化显示，不抢主标签） */
.sk-up-tip{font-weight:400;font-size:12px;opacity:.75;margin-left:2px}
/* 表单里跟在 textarea/输入框之后的提交按钮：靠右对齐
   （带width:100% 内联样式的按钮不受影响，仍保持通栏） */
.field .btn{display:block;margin-left:auto;margin-right:0}
input,textarea,select{width:100%;padding:11px 13px;border-radius:var(--radius-sm);
  border:1px solid var(--line);background:#fff;color:var(--ink);
  font-size:14px;font-family:inherit;transition:.2s}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--green);
  box-shadow:0 0 0 3px var(--green-soft);background:#fff}
textarea{min-height:96px;resize:vertical;line-height:1.6}
.row{display:flex;gap:12px;flex-wrap:wrap}
.row>*{flex:1}

/* ===== 弹窗 ===== */
.modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:16px}
.modal-mask{position:absolute;inset:0;background:rgba(42,45,40,.4);backdrop-filter:blur(3px)}
.modal-card{position:relative;background:#fff;
  border:1px solid var(--line);border-radius:20px;padding:24px;
  width:min(560px,94vw);max-height:88vh;overflow:auto;box-shadow:0 20px 60px rgba(42,45,40,.22);
  animation:fadeUp .25s ease both}
.modal-card h3{margin-top:0;font-family:var(--font-serif);letter-spacing:1px;color:var(--ink-strong)}
.closex{position:absolute;top:14px;right:16px;cursor:pointer;color:var(--muted);font-size:22px;
  line-height:1;border:0;background:none;padding:0;font-family:inherit;transition:.2s}
.closex:hover{color:var(--green-2)}

.toast{position:fixed;bottom:32px;left:50%;transform:translateX(-50%);
  background:rgba(42,45,40,.92);color:#fff;border:1px solid rgba(255,255,255,.12);padding:11px 20px;border-radius:12px;
  z-index:200;font-size:14px;box-shadow:0 12px 30px rgba(0,0,0,.2)}

/* ===== 详情 / 标签 ===== */
/* 返回按钮 · 液态玻璃（Liquid Glass）：半透明玻璃面 + 内高光 + 柔和浮起 */
.back{
  position:relative;
  display:inline-flex;align-items:center;gap:5px;
  cursor:pointer;user-select:none;-webkit-user-select:none;
  margin-bottom:14px;padding:7px 16px 7px 13px;
  font-size:14px;font-weight:500;letter-spacing:.2px;
  color:var(--green-2);border-radius:999px;
  border:1px solid rgba(255,255,255,.75);
  background:
    linear-gradient(180deg,rgba(255,255,255,.62),rgba(255,255,255,0) 58%),
    linear-gradient(135deg,rgba(255,255,255,.62),rgba(236,241,250,.42));
  -webkit-backdrop-filter:blur(16px) saturate(180%);
  backdrop-filter:blur(16px) saturate(180%);
  box-shadow:
    0 6px 18px rgba(3,46,126,.12),
    0 1px 2px rgba(3,46,126,.06),
    inset 0 1px 0 rgba(255,255,255,.9),
    inset 0 -1.5px 2px rgba(3,46,126,.07);
  transition:transform .2s cubic-bezier(.34,1.4,.5,1),box-shadow .25s ease,background .25s ease,color .2s ease;
  -webkit-tap-highlight-color:transparent;
}
.back:hover{
  color:var(--green-2);transform:translateY(-1.5px);
  background:
    linear-gradient(180deg,rgba(255,255,255,.82),rgba(255,255,255,0) 58%),
    linear-gradient(135deg,rgba(255,255,255,.82),rgba(236,241,250,.58));
  box-shadow:
    0 12px 26px rgba(3,46,126,.18),
    0 2px 4px rgba(3,46,126,.08),
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -1.5px 2px rgba(3,46,126,.09);
}
.back:active{
  transform:translateY(0) scale(.97);
  box-shadow:
    0 3px 10px rgba(3,46,126,.12),
    inset 0 1px 3px rgba(3,46,126,.12),
    inset 0 1px 0 rgba(255,255,255,.7);
}
/* 不支持 backdrop-filter 的浏览器：加强不透明度，避免按钮"消失" */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .back{background:linear-gradient(135deg,rgba(255,255,255,.94),rgba(236,241,250,.86))}
}
.tabs{display:flex;gap:6px;margin:16px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.tabs button{background:none;border:0;color:var(--muted);padding:9px 14px;cursor:pointer;
  border-bottom:2px solid transparent;font-size:14px;font-family:inherit;transition:.2s}
.tabs button:hover{color:var(--ink)}
.tabs button.active{color:var(--green-2);border-bottom-color:var(--green-2)}
.media-row{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}
.media-row img,.media-row video{width:170px;border-radius:12px;border:1px solid var(--line);
  box-shadow:var(--shadow-sm)}
.audio-item{width:100%}
/* 影像·声音：等尺寸图片网格墙（不同尺寸图片统一裁切填满） */
.media-wrap{margin:12px 0}
.media-wrap .media-wall,.media-wrap .media-av-row{margin:0}
.media-wrap .media-wall+.media-av-row{margin-top:12px}
.media-wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:12px 0}
.media-wall .media-cell{gap:0;border-radius:12px;overflow:hidden;border:1px solid var(--line);
  background:var(--green-tint);box-shadow:var(--shadow-sm)}
.media-tile{display:block;width:100%;aspect-ratio:1/1;object-fit:cover;cursor:zoom-in;transition:transform .25s}
.media-wall .media-cell:hover .media-tile{transform:scale(1.04)}
/* 网格墙内的操作按钮：常驻显示（原先仅 hover 才浮现，触屏无法触达，等于无法编辑/删除照片）；
   常态用较淡的渐变底，悬停加深，兼顾照片墙整洁与可用性 */
.media-wall .item-tools{position:absolute;left:0;right:0;bottom:0;margin:0;padding:6px 8px;
  justify-content:flex-end;background:linear-gradient(transparent,rgba(0,0,0,.34));
  opacity:1;transition:background .2s}
.media-wall .media-cell:hover .item-tools{background:linear-gradient(transparent,rgba(0,0,0,.56))}
.media-wall .item-tools .btn{background:rgba(255,255,255,.92);border-color:transparent;padding:4px 10px;font-size:12px;border-radius:9px}
.media-wall .item-tools .vis-badge{position:absolute;left:8px;bottom:8px}
/* 图片区：横向分页容器（一页不滚动即放完；右上角「圆点 + 更多>」） */
.media-pager{margin:12px 0}
/* 图片墙 / 视频行 / 音频播放器 之间的分隔线 */
.media-divider{border:0;border-top:1px solid var(--line);margin:14px 0}
/* 圆点 + 更多：右上角，与「图片」标签同一行 */
.media-mediabar{display:flex;align-items:center;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;margin:0 0 10px}
/* 视频区标签行：与图片区同款布局（左「视频」+工具栏，右分页/更多） */
.media-mediobar{display:flex;align-items:center;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;margin:0 0 10px}

/* ===== 文档附件（Word / Excel / PDF / txt / md / XMind 等） ===== */
.doc-list{display:flex;flex-direction:column;gap:8px}
.doc-item{display:flex;align-items:center;gap:12px;padding:11px 14px;
  border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:#fff;transition:border-color .15s,box-shadow .15s}
.doc-item:hover{border-color:var(--line);box-shadow:0 1px 6px rgba(0,0,0,.04)}
.doc-item.is-selecting{border-color:rgba(3,46,126,.3);background:rgba(3,46,126,.03)}
.doc-ico{flex:0 0 auto;width:36px;height:36px;border-radius:9px;background:#f5f6f8;
  display:grid;place-items:center;font-size:19px;line-height:1}
.doc-main{flex:1 1 auto;min-width:0}
.doc-name{font-size:13.5px;color:var(--ink);line-height:1.5;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;margin-bottom:3px}
.doc-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.doc-ext{font-weight:700;letter-spacing:.4px;color:var(--green-2);background:rgba(3,46,126,.07);
  border-radius:5px;padding:1px 6px;flex:0 0 auto}
.doc-acts{flex:0 0 auto;display:flex;align-items:center;gap:8px}
/* 文档预览弹窗：PDF 阅读器 + 纯文本 */
.doc-pdf-wrap{width:100%;height:min(72vh,760px);background:#f5f5f3;border-radius:10px;overflow:hidden}
.doc-pdf-wrap iframe{width:100%;height:100%;border:0;display:block}
.doc-text-wrap{width:100%;max-height:min(70vh,700px);overflow:auto;background:#fafaf8;
  border:1px solid var(--line-soft);border-radius:10px;padding:14px 16px}
.doc-text{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:12.5px;line-height:1.75;color:var(--ink);white-space:pre-wrap;word-break:break-word}
/* 弹窗内的格式说明小字 */
.form-tip{font-size:12.5px;line-height:1.7;color:var(--muted);margin:0 0 14px}
@media(max-width:600px){
  .doc-item{flex-wrap:wrap}
  .doc-main{flex:1 1 100%;order:2}
  .doc-acts{flex:1 1 100%;order:3;justify-content:flex-end}
}
.mb-left{display:inline-flex;align-items:center;gap:12px;min-width:0}
.media-label{font-size:14px;font-weight:600;color:var(--ink)}
/* 「图片」标签右侧的操作工具栏：上传图片 / 全选 / 删除（胶囊按钮，与站内其它按钮同风格） */
.mb-tools{display:inline-flex;align-items:center;gap:8px}
.mb-btn{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;
  height:28px;padding:0 12px;border:1px solid rgba(3,46,126,.16);border-radius:999px;
  background:linear-gradient(180deg,#fff,var(--green-tint));color:var(--green);
  font-size:12.5px;font-weight:600;letter-spacing:.2px;line-height:1;cursor:pointer;
  box-shadow:0 1px 2px rgba(3,46,126,.06),inset 0 1px 0 rgba(255,255,255,.9);
  transition:background .2s,color .2s,border-color .2s,box-shadow .2s,transform .15s}
.mb-btn:hover{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;
  border-color:transparent;box-shadow:0 5px 14px rgba(3,46,126,.26);transform:translateY(-1px)}
.mb-btn:active{transform:translateY(0);box-shadow:0 2px 8px rgba(3,46,126,.2)}
.mb-btn:focus-visible{outline:2px solid rgba(3,46,126,.35);outline-offset:2px}
.mb-btn .mb-ico{font-size:13px;line-height:1}
/* 上传图片：实心蓝主按钮，最醒目 */
.mb-btn.up{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;
  border-color:transparent;box-shadow:0 2px 8px rgba(3,46,126,.22)}
.mb-btn.up:hover{filter:brightness(1.06);box-shadow:0 6px 16px rgba(3,46,126,.3)}
/* 全选：选中态高亮 */
.mb-btn.on{background:var(--green-soft);border-color:var(--green);color:var(--green)}
/* 删除：危险色描边，hover 填充 */
.mb-btn.del{color:#c0564f;border-color:rgba(192,86,79,.4)}
.mb-btn.del:hover{background:#c0564f;border-color:#c0564f;color:#fff}
.media-pagebar{display:flex;align-items:center;justify-content:flex-end;gap:14px}
.media-pager.no-pager .media-dots{display:none}
.media-pagebar:empty{display:none}
.media-pager .media-scroll{overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;
  -webkit-overflow-scrolling:touch;scrollbar-width:none}
.media-pager .media-scroll::-webkit-scrollbar{display:none}
.media-pager .media-wall{margin:0;grid-auto-flow:column;grid-template-rows:1fr;
  grid-auto-columns:calc((100% - 40px) / 6);grid-template-columns:none}
/* 单行 6 张时图片较窄，用 4:3 比例让每格更饱满（避免正方形过小） */
.media-pager .media-wall .media-tile{aspect-ratio:4/3}
.media-pager .media-wall .media-cell{width:100%}
/* 展开态：恢复自然换行网格，铺满全部图片 */
.media-pager.expanded .media-scroll{overflow:visible}
.media-pager.expanded .media-wall{grid-auto-flow:row;
  grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-auto-columns:auto}
/* 圆点分页指示器（页数多时更紧凑，未选中常态更轻） */
.media-dots{display:inline-flex;align-items:center;gap:6px}
.media-dot{width:6px;height:6px;padding:0;border:0;border-radius:50%;
  background:rgba(58,61,56,.18);cursor:pointer;
  transition:background .2s,transform .2s,width .2s}
.media-dot:hover{background:rgba(58,61,56,.4)}
/* 图片区用 .on、视频区用 .active，两者都要高亮（原先只定义了 .on，视频圆点无激活态） */
.media-dot.on,.media-dot.active{background:var(--green);width:18px;border-radius:999px;transform:none}
/* 「更多 ›」：精致胶囊按钮，hover 变实心蓝并上浮 */
.media-more{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;
  padding:5px 12px 5px 14px;margin-left:2px;
  border:1px solid rgba(3,46,126,.16);border-radius:999px;
  background:linear-gradient(180deg,#fff,var(--green-tint));
  color:var(--green);font-size:13.5px;font-weight:600;letter-spacing:.2px;
  line-height:1.4;cursor:pointer;
  box-shadow:0 1px 2px rgba(3,46,126,.06),inset 0 1px 0 rgba(255,255,255,.9);
  transition:background .22s,color .22s,border-color .22s,box-shadow .22s,transform .18s}
.media-more:hover{background:linear-gradient(135deg,var(--green),var(--green-2));
  color:#fff;border-color:transparent;
  box-shadow:0 5px 16px rgba(3,46,126,.28);transform:translateY(-1px)}
.media-more:active{transform:translateY(0);box-shadow:0 2px 8px rgba(3,46,126,.22)}
.media-more:focus-visible{outline:2px solid rgba(3,46,126,.35);outline-offset:2px}
.media-more .mm-arrow{font-size:15px;line-height:1;font-weight:700;
  transition:transform .25s cubic-bezier(.34,1.4,.64,1)}
.media-more:hover .mm-arrow.r{transform:translateX(3px)}
.media-more:hover .mm-arrow.l{transform:translateX(-3px)}
/* 移动端：一页显示 2 张，圆点相应减少 */
/* 窄屏：一行 3 张（保持单行排版） */
@media (max-width:560px){
  .media-pager .media-wall{grid-auto-columns:calc((100% - 16px) / 3);grid-template-rows:1fr}
}
/* 视频行：两列网格，每个播放器约占内容区一半宽（原先固定 170px，比照片墙的方块还小） */
.media-av-row{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:12px 0}
/* 视频 >4 时默认收起分页；vpage-N = 当前显示第 N+1 页（每页4个） */
/* 默认第1页：显示 1-4 */
.media-av-row.collapsed .media-cell:nth-child(n+5){display:none}
/* 第2页：显示 5-8 */
.media-av-row.collapsed.vpage-1 .media-cell:nth-child(-n+4){display:none}
.media-av-row.collapsed.vpage-1 .media-cell:nth-child(n+5):nth-child(-n+8){display:block}
/* 第3页：显示 9-12 */
.media-av-row.collapsed.vpage-2 .media-cell:nth-child(-n+8){display:none}
.media-av-row.collapsed.vpage-2 .media-cell:nth-child(n+9):nth-child(-n+12){display:block}
/* 第4页：显示 13-16 */
.media-av-row.collapsed.vpage-3 .media-cell:nth-child(-n+12){display:none}
.media-av-row.collapsed.vpage-3 .media-cell:nth-child(n+13):nth-child(-n+16){display:block}
.media-av-row video{display:block;width:100%;height:auto;border-radius:12px;
  border:1px solid var(--line);background:#000;box-shadow:var(--shadow-sm)}
/* 视频信息栏（名称 + 编辑/删除 + 上传者 + 点赞）：紧贴播放器下方，与播放器拼成一个整体卡片 */
.mi-bar{margin:0 0 6px;padding:9px 12px 10px;background:#f4f5f7;border:1px solid var(--line);
  border-top:0;border-radius:0 0 12px 12px}
/* 标题行：标题在左、编辑/删除在右，底部对齐 */
.mi-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.mi-title{font-size:14.5px;font-weight:600;color:var(--ink-strong,#1f2937);line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1 1 auto}
.mi-tools{display:inline-flex;align-items:center;gap:8px;flex:none}
.mi-tools .btn.sm{height:26px;padding:0 10px;font-size:12.5px;background:#fff}
.mi-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:7px}
.mi-user{display:inline-flex;align-items:center;gap:8px;min-width:0}
.mi-time{font-size:12px;color:#aab0b8;flex:none}
/* 编辑组(.mi-tools) 与 播放/点赞组(.mi-right) 等宽且右对齐：
   使播放量按钮整体左移，左边缘与「编辑」按钮左边缘对齐 */
.mi-tools,.mi-right{min-width:172px;justify-content:flex-end}
.mi-right{display:inline-flex;align-items:center;gap:10px;flex:none}
.mi-play{display:inline-flex;align-items:center;gap:4px;color:#8a909a;font-size:13px;cursor:default}
.mi-play-ico{fill:currentColor;display:block}
.mi-user{display:inline-flex;align-items:center;gap:8px;min-width:0}
.mi-ava{width:22px;height:22px;border-radius:50%;object-fit:cover;flex:none;background:#d1d5db}
.mi-ava-txt{display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;
  color:#fff;background:var(--brand,#3b82f6)}
/* 头像 = 「评论该视频」入口：点击打开等宽评论浮层 */
.mi-ava-btn{padding:0;border:0;background:transparent;cursor:pointer;display:inline-flex;align-items:center;
  border-radius:50%;flex:none;transition:transform .16s,box-shadow .16s}
.mi-ava-btn:hover{transform:scale(1.1);box-shadow:0 0 0 2px rgba(59,130,246,.35)}
.mi-ava-btn:active{transform:scale(.96)}
.mi-name{font-size:13px;color:#6b7280;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mi-like{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;
  border:1px solid transparent;background:transparent;color:#8a909a;font-size:13px;cursor:pointer;
  transition:background .18s,color .18s,transform .12s;flex:none}
.mi-like:hover{background:#e8eaee;color:#4b5563}
.mi-like:active{transform:scale(.94)}
.mi-like .mi-thumb{fill:currentColor;display:block}
.mi-like.on{color:#e0245e}
.mi-like.on .mi-thumb{fill:currentColor}
@media (max-width:560px){.media-av-row{grid-template-columns:1fr}}
/* 视频自定义控制条（替代浏览器原生控件，可自由调整 音量/速度/全屏 的排列） */
/* 所有播放器统一尺寸：宽度自适应半格，高度按 16:9（横屏比例）自动计算 */
.media-cell.media-av .vid-player{position:relative;width:100%;aspect-ratio:16/9;
  border-radius:12px 12px 0 0;background:#000;overflow:hidden}
/* 竖屏专用播放：高度跟随视频原始比例（不再锁 16:9） */
.media-cell.media-av .vid-player.vid-portrait-mode{aspect-ratio:auto;height:auto}
.media-cell.media-av .vid-player.vid-portrait-mode .vid-v{height:auto}
.media-cell.media-av .vid-v{display:block;width:100%;height:100%;object-fit:contain;border-radius:12px;background:#000}
.vid-v{display:block;width:100%;height:auto;border-radius:12px;background:#000}
.vp-big{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:56px;height:56px;
  border-radius:50%;border:0;cursor:pointer;background:rgba(0,0,0,.42);color:#fff;font-size:22px;
  display:flex;align-items:center;justify-content:center;transition:opacity .2s;z-index:3}
.vp-big.hidden{opacity:0;pointer-events:none}
.vp-bar{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;align-items:center;gap:10px;
  padding:8px 12px;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.72));
  border-radius:0 0 12px 12px;text-shadow:0 1px 2px rgba(0,0,0,.45)}
.vp-btn{background:transparent;border:0;color:#fff;cursor:pointer;font-size:16px;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;padding:4px;min-width:22px}
.vp-btn:hover{filter:brightness(1.25)}
.vp-time{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.92}
.vp-progress{position:relative;flex:1;height:6px;border-radius:999px;background:rgba(255,255,255,.3);
  cursor:pointer;min-width:60px;overflow:hidden}
.vp-progress:hover{height:8px}
.vp-buf,.vp-fill{position:absolute;left:0;top:0;bottom:0;border-radius:999px}
.vp-buf{background:rgba(255,255,255,.4)}
.vp-fill{background:var(--green-2,#2f6b3a)}
.vp-speed,.vp-qual,.vp-tr{position:relative}
.vp-speed-btn,.vp-qual-btn,.vp-tr-btn{min-width:36px}
/* 倍速按钮悬停提示（Chrome 4× 以上静音说明） */
.vp-speed-btn[data-tip]{position:relative}
.vp-speed-btn[data-tip]:hover::after{
  content:attr(data-tip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:rgba(18,18,18,.97);color:#eee;border:1px solid rgba(255,255,255,.16);
  border-radius:8px;padding:8px 12px;font-size:12px;line-height:1.5;
  width:max-content;max-width:280px;white-space:normal;text-align:center;
  box-shadow:0 6px 20px rgba(0,0,0,.35);z-index:20;pointer-events:none}
.vp-speed-menu,.vp-qual-menu,.vp-tr-menu{position:absolute;bottom:calc(100% + 10px);right:0;display:none;flex-direction:column;
  background:rgba(18,18,18,.97);border:1px solid rgba(255,255,255,.16);border-radius:10px;
  padding:4px;min-width:66px;box-shadow:0 6px 20px rgba(0,0,0,.35)}
.vp-speed.open .vp-speed-menu,.vp-qual.open .vp-qual-menu,.vp-tr.open .vp-tr-menu{display:flex}
/* 倍速菜单选项多（0.5~16×），改网格多列 + 限高滚动 */
.vp-speed-menu{display:none;grid-template-columns:repeat(4,1fr);gap:2px;
  max-height:200px;overflow-y:auto;min-width:180px}
.vp-speed.open .vp-speed-menu{display:grid}
.vp-speed-menu button,.vp-qual-menu button,.vp-tr-menu button{background:none;border:0;color:#eee;padding:6px 10px;text-align:left;
  border-radius:6px;cursor:pointer;font-size:13px;white-space:nowrap}
.vp-speed-menu button{text-align:center;padding:6px 4px}
.vp-speed-menu button:hover,.vp-qual-menu button:hover,.vp-tr-menu button:hover{background:rgba(255,255,255,.12)}
.vp-speed-menu button.on{color:var(--green-2,#2f6b3a);font-weight:600}
.vp-qual-menu button.on{color:var(--green-2,#2f6b3a);font-weight:600}
.vp-tr-menu button.on{color:var(--green-2,#2f6b3a);font-weight:600}
/* 画质/速度 浮层左对齐，避免最右溢出 */
.vp-qual-menu{right:auto;left:0}
/* 自动字幕 开关 */
.vp-cc{font-weight:600}
.vp-cc.on{color:var(--green-2,#2f6b3a);background:rgba(255,255,255,.16);border-radius:6px}
/* 字幕翻译 开关 */
.vp-tr-btn{font-weight:600}
.vp-tr-btn.on{color:var(--green-2,#2f6b3a);background:rgba(255,255,255,.16);border-radius:6px}
/* 竖屏播放 开关（仅竖屏视频显示） */
.vp-portrait{font-weight:600;font-size:12px}
.vp-portrait.on{color:var(--green-2,#2f6b3a);background:rgba(255,255,255,.16);border-radius:6px}
/* 画质/字幕/翻译：字重彼此一致；字号与「时间」一致（12px） */
.vp-qual-btn, .vp-cc, .vp-tr-btn{font-weight:600;font-size:12px}
/* 字幕实时显示（浮于控制条之上、视频底部；bottom 必须大于控制条高度 ~40px，
   之前写成 calc(100% - 6px) 会把字幕顶到播放器可视区外被 overflow:hidden 裁掉） */
.vp-cap{position:absolute;left:0;right:0;bottom:44px;z-index:4;pointer-events:none;
  text-align:center;padding:0 12% 6px;color:#fff;font-size:15px;line-height:1.6;
  text-shadow:0 1px 3px rgba(0,0,0,.85);white-space:pre-wrap;word-break:break-word}
.vp-cap.hidden{display:none}
.vp-cap-orig{font-weight:500}
.vp-cap-tr{margin-top:4px;font-size:13px;opacity:.85;line-height:1.5}
.vid-player:fullscreen .vp-cap{font-size:22px;bottom:64px}
.vid-player:fullscreen .vp-cap-tr{font-size:18px}
/* 下载按钮（图标已是白色 currentColor） */
.vp-dl{display:inline-flex;align-items:center;justify-content:center}
/* 音量：滑条默认隐藏，悬停/聚焦时才展开（不用时隐藏） */
.vp-vol{display:inline-flex;align-items:center;gap:6px}
.vp-mute{display:inline-flex;align-items:center;justify-content:center}
.vp-vol .vp-range{width:0;opacity:0;overflow:hidden;pointer-events:none;
  transition:width .2s ease,opacity .2s ease}
.vp-vol:hover .vp-range,.vp-vol:focus-within .vp-range{width:76px;opacity:1;pointer-events:auto}
/* 音量滑条：重置全局 input 的内边距/边框（否则会被撑成 24px 高的白胶囊） */
.vp-range{-webkit-appearance:none;appearance:none;box-sizing:border-box;height:16px;
  padding:0;margin:0;border:0;border-radius:0;background:transparent;outline:none;box-shadow:none;cursor:pointer}
.vp-range:focus{box-shadow:none;background:transparent}
.vp-range::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:rgba(255,255,255,.4)}
.vp-range::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;margin-top:-4px;
  border-radius:50%;background:#fff;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.35)}
.vp-range::-moz-range-track{height:4px;border-radius:999px;background:rgba(255,255,255,.4)}
.vp-range::-moz-range-thumb{width:12px;height:12px;border:0;border-radius:50%;background:#fff;cursor:pointer}
.vid-player:fullscreen{background:#000;display:flex;align-items:center;justify-content:center}
.vid-player:fullscreen .vid-v{max-width:100vw;max-height:100vh;width:auto;height:auto;border-radius:0}
.vid-player:fullscreen .vp-bar{bottom:0;border-radius:0}
.vid-player:fullscreen .vp-big{width:74px;height:74px;font-size:30px}
/* 技能分享详情页：复用同一套自定义播放器。统一 16:9 尺寸 */
.media-row .vid-player{position:relative;width:100%;aspect-ratio:16/9;
  border-radius:12px;background:#000;overflow:hidden}
.media-row .vid-player.vid-portrait-mode{aspect-ratio:auto;height:auto}
.media-row .vid-player.vid-portrait-mode .vid-v{height:auto}
.media-row .vid-player .vid-v{width:100%;height:100%;object-fit:contain;border-radius:12px;background:#000}
.media-row .vp-bar{gap:6px;padding:6px 10px}
.media-row .vp-time{display:none}
.media-row .vp-vol:hover .vp-range,.media-row .vp-vol:focus-within .vp-range{width:54px}
/* 图片放大查看 */
#modalCard.lightbox{background:none;box-shadow:none;padding:0;border:0;max-width:92vw}
#modalCard.lightbox .lightbox-img{max-width:92vw;max-height:88vh;border-radius:12px;display:block}
#modalCard.lightbox .closex{background:rgba(0,0,0,.55);color:#fff}
/* 图片查看器：上一张/下一张/跳转 导航 */
.lb-wrap{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px}
#modalCard.lightbox .lb-wrap .lightbox-img{max-height:76vh}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:46px;border:0;border-radius:50%;
  background:rgba(0,0,0,.5);color:#fff;font-size:26px;line-height:1;cursor:pointer;display:grid;place-items:center;
  transition:.18s;z-index:2;-webkit-tap-highlight-color:transparent}
.lb-nav:hover{background:rgba(0,0,0,.75);transform:translateY(-50%) scale(1.06)}
.lb-nav:active{transform:translateY(-50%) scale(.94)}
.lb-prev{left:14px}
.lb-next{right:14px}
.lb-single .lb-nav,.lb-single .lb-bar{display:none}
.lb-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center;
  background:rgba(0,0,0,.62);border-radius:999px;padding:7px 12px;backdrop-filter:blur(3px)}
.lb-bar button{border:0;background:transparent;color:#fff;font-size:12.5px;font-family:inherit;
  padding:5px 10px;border-radius:999px;cursor:pointer;transition:.16s;white-space:nowrap;-webkit-tap-highlight-color:transparent}
.lb-bar button:hover{background:rgba(255,255,255,.2)}
.lb-bar button:active{transform:scale(.95)}
.lb-idx{display:inline-flex;align-items:center;gap:4px;color:#fff;font-size:12.5px;padding:0 4px}
.lb-jump{width:52px;height:26px;text-align:center;border:1px solid rgba(255,255,255,.4);border-radius:999px;
  background:rgba(255,255,255,.12);color:#fff;font-size:12.5px;font-family:inherit;-moz-appearance:textfield}
.lb-jump:focus{outline:none;border-color:#fff;background:rgba(255,255,255,.22)}
.lb-jump::-webkit-outer-spin-button,.lb-jump::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.lb-total{color:rgba(255,255,255,.8);font-variant-numeric:tabular-nums}
@media(max-width:640px){
  .lb-nav{width:38px;height:38px;font-size:22px}
  .lb-prev{left:6px}.lb-next{right:6px}
  .lb-bar{gap:4px;padding:6px 8px}
  .lb-bar button{padding:5px 7px;font-size:12px}
}
.comment{border-top:1px solid var(--line);padding:12px 0;font-size:14px;line-height:1.6}
/* 带头像的评论：左侧圆形头像 + 右侧内容块（玄学/树洞/技能/梦境 评论区） */
.comment.has-av{display:flex;gap:10px;align-items:flex-start}
.comment.has-av .comment-main{flex:1 1 auto;min-width:0}
.comment .who{color:var(--green-2);font-size:13px;font-weight:600}
.comment .when{color:var(--muted);font-size:11px;margin-left:6px}
/* 元信息行：昵称 + 动作 + 时间 + 操作按钮 同一行，按钮靠右 */
.comment-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.comment-meta .when{margin-left:0}
.comment-meta .comment-act{color:var(--ink)}
.comment-meta .item-tools{margin-top:0;margin-left:auto}
.comment-body{margin-top:4px;white-space:pre-wrap;word-break:break-word}

.activity-icons{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}
.act{border:1px solid var(--line);border-radius:12px;padding:9px 14px;cursor:pointer;
  background:var(--green-tint);font-size:13px;transition:.2s;color:var(--ink)}
.act:hover{border-color:var(--green);background:var(--green-soft);transform:translateY(-2px)}
.act b{color:var(--green-2)}

/* ===== 聊天 ===== */
.chat-wrap{display:flex;height:70vh;border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;background:#fff;box-shadow:var(--shadow-sm)}
.chat-list{width:230px;border-right:1px solid var(--line);overflow:auto;background:var(--bg2)}
.chat-list .item{padding:13px 15px;border-bottom:1px solid var(--line-soft);cursor:pointer;transition:.2s}
.chat-list .item:hover{background:var(--green-tint)}
.chat-list .item.active{background:var(--green-soft);border-left:3px solid var(--green)}
.chat-main{flex:1;display:flex;flex-direction:column;min-width:0}
.chat-msgs{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column}
.bubble{max-width:70%;padding:9px 14px;border-radius:14px;margin:6px 0;font-size:14px;line-height:1.55;
  box-shadow:var(--shadow-sm)}
.bubble.me{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;margin-left:auto;border-bottom-right-radius:4px}
.bubble.them{background:var(--green-tint);border-bottom-left-radius:4px}
.chat-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--line)}

.tag{display:inline-block;background:var(--green-tint);border:1px solid rgba(3,46,126,.3);
  border-radius:999px;padding:3px 12px;font-size:12px;color:var(--green-2);margin:2px}
.card .date{display:inline-block;font-size:14px;font-weight:600;color:var(--green-2);
  font-family:var(--font-serif);letter-spacing:1px;margin:2px 0 6px}
.pill{display:inline-flex;gap:6px;align-items:center;background:var(--green-tint);
  border:1px solid rgba(3,46,126,.3);border-radius:10px;padding:7px 11px;font-size:13px;margin:4px 4px 0 0;color:var(--ink)}

/* ===== 纪念：创建面板（锚定「创建纪念」按钮下方，悬停即展开 / 点击固定） ===== */
.mk-wrap{position:relative;display:inline-flex;margin-left:auto}
.mk-toggle{width:160px;text-align:center}
#mk_caret{display:inline-block;font-size:10px;transition:transform .2s}
.mk-wrap:hover #mk_caret,.mk-wrap.pinned #mk_caret{transform:rotate(180deg)}
/* 面板外层只作"无缝过渡区"：top:100% 且用 padding-top 造出视觉间距，
   指针从按钮下移的整段路径都在 .mk-wrap 的 hover 内，不会中途收起 */
.mk-panel{position:absolute;top:100%;right:0;z-index:60;margin:0;padding-top:8px;width:160px;
  opacity:0;visibility:hidden;transform:translateY(-4px);
  transition:opacity .18s ease,transform .18s ease,visibility .18s}
.mk-wrap:hover .mk-panel,
.mk-wrap.pinned .mk-panel{opacity:1;visibility:visible;transform:translateY(0)}
.mk-panel-inner{padding:0}
.mk-menu{width:160px;max-width:calc(100vw - 32px);background:var(--card);border:1px solid var(--line);
  border-radius:10px;box-shadow:0 8px 20px rgba(3,46,126,.14);overflow:hidden;padding:4px 0 0}
.mk-actions{display:flex;flex-direction:column}
.mk-act{display:flex;align-items:center;gap:7px;width:100%;text-align:left;cursor:pointer;
  background:none;border:0;border-bottom:1px solid var(--line);border-radius:0;
  padding:7px 12px;font-size:12.5px;color:var(--ink);font-family:inherit;transition:background .15s,color .15s}
.mk-act:last-child{border-bottom:0}
.mk-act:hover{background:var(--green-soft);color:var(--ink-strong)}
.mk-act .mk-ico{font-size:13px;flex:0 0 auto;width:16px;text-align:center;line-height:1}

/* 可见性徽章 */
.vis-badge{display:inline-block;background:var(--green-soft);color:var(--green-2);
  border:1px solid rgba(3,46,126,.3);border-radius:999px;padding:1px 9px;font-size:11px;
  font-weight:600;vertical-align:middle;letter-spacing:.2px}

/* 详情：操作按钮左边界与区块标题（.sub-h）的蓝色竖线对齐；返回列表置于该行左侧外侧 */
.detail-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0}
.detail-actions .btn{display:inline-flex;align-items:center;gap:5px}
.detail-actions .da-ico{font-size:14px;line-height:1}
/* 认领入口高亮：非创建者在详情页顶部一眼可见 */
.claim-cta{background:linear-gradient(135deg,#e8a33d,#d98324);color:#fff;border:0;font-weight:600;
  box-shadow:0 6px 16px rgba(216,131,36,.35);animation:claimPulse 2.4s ease-in-out infinite}
/* 认领按钮长短文案：默认显示全称「认领此档案」，窄屏（≤575px）由 .has-claim 规则切到短称 */
.claim-cta .claim-short{display:none}
.claim-cta .claim-full{display:inline}
.claim-cta:hover{color:#fff;filter:brightness(1.05)}
@keyframes claimPulse{0%,100%{box-shadow:0 6px 16px rgba(216,131,36,.35)}50%{box-shadow:0 6px 22px rgba(216,131,36,.6)}}
@media (prefers-reduced-motion:reduce){.claim-cta{animation:none}}
/* ===== 详情页吸顶操作栏（替代原 .mem-detail-head 平铺按钮行）=====
   原设计把「返回列表 / 认领 / 本页导航 / 添加媒体 / 上传文件 / 写文章 / 写随笔 /
   送花 / 留言」9 个按钮平铺在首屏，占满上半屏且滚动后不可达。
   新结构：圆形返回 + 页面标题 + 主操作（送花/留言）+「⋯ 更多」下拉，
   与手机端梦境详情页的 .dm-topbar 保持同一阅读页范式。 */
.mem-topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:10px;
  margin:0 0 12px;padding:10px 2px;
  background:rgba(252,251,247,.92);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line-soft)}
.mem-topbar .mt-back{flex:0 0 auto;width:38px;height:38px;border-radius:50%;
  border:1px solid var(--line);background:var(--card);color:var(--ink);
  display:grid;place-items:center;cursor:pointer;transition:.16s var(--ease,ease);padding:0}
.mem-topbar .mt-back:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.mem-topbar .mt-back:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.mem-topbar .mt-title{flex:1;min-width:0;font-family:var(--font-serif);font-size:16px;font-weight:600;
  color:var(--ink-strong);letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mem-topbar .mt-actions{flex:0 0 auto;display:flex;align-items:center;gap:8px}
.mem-topbar .mt-actions .btn{display:inline-flex;align-items:center;gap:5px}
.mem-topbar .mt-actions .da-ico{font-size:14px;line-height:1}
/* 详情头部：返回按钮保持最初的圆形描边款（内联 chevL SVG，不用字符箭头——
   字符「‹」受字体基线影响会偏位，且随字号退化）。送花仍为主 CTA（渐变+柔影）。 */
.mem-topbar .mt-back{border:1px solid var(--line);background:var(--card);color:var(--ink);font-weight:400}
.mem-topbar .mt-back:hover{border-color:var(--green);background:var(--green-tint);color:var(--green)}
.mem-topbar .mt-back .ico-svg{display:block}
.mem-topbar .mt-back:active{transform:scale(.94)}
.mem-topbar .mt-title{letter-spacing:.6px}
.mem-topbar .mt-flower-btn{background:linear-gradient(135deg,var(--green),var(--green-2));border:0;color:#fff;
  font-weight:600;box-shadow:0 4px 12px rgba(3,46,126,.26)}
.mem-topbar .mt-flower-btn .da-ico{color:#fff;flex:0 0 auto}
.mem-topbar .mt-flower-btn:hover{color:#fff;filter:brightness(1.06);box-shadow:0 6px 16px rgba(3,46,126,.34)}
.mem-topbar .mt-flower-btn:active{transform:translateY(1px);box-shadow:0 3px 9px rgba(3,46,126,.26)}
/* 恢复到之前的「纯文字 + 小眼睛」形态：去胶囊底/边框，与顶栏登录区融为一体 */
.topbar-views{display:inline-flex;align-items:center;gap:4px;padding:0 2px;border-radius:0;
  background:transparent;color:var(--muted);font-size:12.5px;font-weight:400}
.topbar-views .ico-svg{flex:0 0 auto;color:var(--muted)}
/* 「更多操作」下拉：承载低频动作（添加媒体/上传文件/写文章/写随笔）+ 本页目录 */
.mt-more-wrap{position:relative;display:inline-flex}
.mt-more-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:52;
  min-width:190px;max-height:min(70vh,520px);overflow-y:auto;padding:8px;
  background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:0 12px 32px rgba(3,46,126,.14);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .18s var(--ease,ease),transform .18s var(--ease,ease),visibility .18s}
.mt-more-wrap.open .mt-more-panel{opacity:1;visibility:visible;transform:translateY(0)}
.mt-more-item{display:flex;align-items:center;gap:9px;width:100%;padding:9px 11px;
  border:0;background:transparent;border-radius:8px;cursor:pointer;font:inherit;
  font-size:14px;color:var(--ink);text-align:left;transition:.14s var(--ease,ease)}
.mt-more-item:hover{background:var(--green-tint);color:var(--green)}
.mt-more-item .mm-ico{font-size:15px;line-height:1;flex:0 0 auto}
.mt-more-cap{font-size:11.5px;letter-spacing:1.6px;color:var(--muted);
  padding:8px 11px 5px;border-top:1px solid var(--line-soft);margin-top:5px}
.mt-more-panel .mt-more-nav:empty{display:none}
.mt-more-nav{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.mt-more-panel .dnav-item{display:flex;align-items:center;gap:6px;width:100%;padding:8px 10px;
  border:0;background:transparent;border-radius:8px;cursor:pointer;font:inherit;
  font-size:13px;color:var(--ink);text-align:left;line-height:1.35;
  transition:.14s var(--ease,ease)}
.mt-more-panel .dnav-item:hover{background:var(--green-tint);color:var(--green)}
.mt-more-panel .dnav-item.is-empty{color:var(--muted)}
.mt-more-panel .dnav-item .dnav-dot{flex:0 0 auto;width:5px;height:5px;border-radius:50%;
  background:var(--line);margin-left:auto}

/* 「生活痕迹库」的二级目录：17 个分类缩进挂在库条目下，点一下直达分类。
   一行横滑而非换行：换行会占 8-10 行（实测 1280px 10 行 / 390px 8 行），
   把「更多」面板撑爆；横滑固定 1 行（约 30px），与分类条的手法一致。 */
.dnav-sub{grid-column:1 / -1;display:flex;flex-wrap:nowrap;gap:3px;align-items:center;
  margin:1px 0 4px 10px;padding:5px 0 5px 9px;border-left:1px solid var(--line-soft);
  overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.dnav-sub-item{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:999px;
  border:1px solid var(--line-soft);background:transparent;color:var(--ink);white-space:nowrap;
  font:inherit;font-size:12px;cursor:pointer;flex:0 0 auto;transition:.14s var(--ease,ease)}
.dnav-sub-item .dsi-ico{font-size:12px;line-height:1}
.dnav-sub-item .dsi-n{flex:0 0 auto;min-width:14px;height:14px;padding:0 4px;border-radius:999px;
  background:var(--green);color:#fff;font-size:9.5px;font-weight:700;line-height:14px;text-align:center}
.dnav-sub-item.is-blank{color:var(--muted);border-style:dashed}
.dnav-sub-item:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.dnav-sub-item.on{background:var(--green);border-color:var(--green);color:#fff;font-weight:600}
.dnav-sub-item.on .dsi-n{background:rgba(255,255,255,.26)}
.dnav-sub-item:focus-visible{outline:2px solid var(--green);outline-offset:2px}
@media (max-width:640px){
  .mem-topbar{gap:8px;padding:8px 0}
  .mem-topbar .mt-title{font-size:14.5px}
  .mem-topbar .mt-actions{gap:6px}
  .mem-topbar .mt-actions .btn{padding:7px 11px;font-size:13px}
  .mt-more-panel{min-width:min(230px,calc(100vw - 28px))}
}
/* 「送花 / 留言」在「更多」面板中的镜像项：桌面隐藏（顶栏已有），手机上按需显示。
   手机顶栏放不下「认领 + 送花 + 留言 + 更多」四个按钮（实测 390px 下标题被挤到 4px 宽）：
   默认「留言」退进更多面板；有认领 CTA 时「送花」也让位，保证标题可见。 */
.mt-more-panel .mt-more-flower,.mt-more-panel .mt-more-msg{display:none}
@media (max-width:640px){
  .mem-topbar .mt-msg-btn{display:none}
  .mem-topbar .mt-more-panel .mt-more-msg{display:flex}
  .mem-topbar.has-claim .mt-flower-btn{display:none}
  .mem-topbar.has-claim .mt-more-panel .mt-more-flower{display:flex}
}
.mem-quote{font-size:15px;color:var(--muted);margin:8px 0 4px}
.mem-desc{margin:8px 0 6px;color:var(--ink);line-height:1.8}
/* 详情页顶部人物卡：左照片 + 右信息（姓名 / 一句话纪念 / 生卒·年龄 / 生平简介） */
.mem-profile{display:flex;gap:20px;align-items:flex-start;padding:18px 20px;margin:12px 0 4px}
.mem-profile:hover{transform:none;border-color:var(--line);box-shadow:var(--shadow-sm)}
.mem-profile-photo-wrap{flex:0 0 auto}
.mem-profile-photo{width:132px;height:176px;object-fit:cover;display:block;border-radius:12px;
  background:var(--green-tint);box-shadow:var(--shadow-sm);border:1px solid var(--line);cursor:zoom-in}
.mem-profile-photo-empty{display:flex;align-items:center;justify-content:center;cursor:default}
.mem-profile-photo-empty img{width:54px;height:auto;opacity:.32}
.mem-profile-info{flex:1 1 auto;min-width:0;position:relative}
.mem-profile-name{font-family:var(--font-serif);font-size:24px;color:var(--ink-strong);
  margin:2px 0 10px;line-height:1.3;letter-spacing:.5px;padding-right:190px}
.mem-profile-quote{display:flex;align-items:center;gap:8px;font-size:15px;color:var(--ink);
  margin:0 0 8px;line-height:1.5}
.mem-profile-quote .mp-ico{font-size:14px;line-height:1;opacity:.7;flex:0 0 auto}
.mem-profile-dates{font-size:14px;color:var(--muted);margin:0 0 10px;
  font-variant-numeric:tabular-nums;letter-spacing:.3px}
.mem-profile-desc{font-size:14px;color:var(--muted);line-height:1.9;margin:0;
  max-width:980px;white-space:pre-wrap}
/* 生平简介折叠态：只显示 3 行 */
.mem-profile-desc.is-clamped{display:-webkit-box;-webkit-box-orient:vertical;
  -webkit-line-clamp:3;line-clamp:3;overflow:hidden}
/* 生平简介右上角「折叠 / 全部展开」胶囊按钮（超过 3 行才启用） */
.mp-tools{position:absolute;top:1px;right:0;display:flex;gap:8px;align-items:center;z-index:2}
.mp-tool{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border-radius:999px;
  background:var(--card);border:1px solid var(--line);color:var(--ink);font-size:13px;line-height:1.2;
  font-family:inherit;cursor:pointer;white-space:nowrap;box-shadow:0 1px 3px rgba(3,46,126,.06);
  transition:border-color .15s,color .15s,background .15s,box-shadow .15s}
.mp-tool .mt-ico{color:var(--muted);transition:color .15s;flex:0 0 auto}
.mp-tool:hover:not(:disabled){border-color:rgba(3,46,126,.45);color:var(--green);
  background:var(--green-tint);box-shadow:0 2px 8px rgba(3,46,126,.12)}
.mp-tool:hover:not(:disabled) .mt-ico{color:var(--green)}
.mp-tool:active:not(:disabled){transform:translateY(1px)}
.mp-tool:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}
.mp-tool:focus-visible{outline:2px solid var(--green);outline-offset:2px}
/* 卡片上的性别标识：♂/♀ 符号或旗帜小图（与一句话纪念同行，垂直居中） */
.mem-profile-quote .mp-sym{font-size:16px;font-weight:700;line-height:1}
.mp-sym.male{color:#2F6FBF}
.mp-sym.female{color:#E75480}
.mp-flag{width:22px;height:15px;object-fit:cover;border-radius:3px;flex:0 0 auto;
  border:1px solid rgba(0,0,0,.08);box-shadow:0 1px 2px rgba(0,0,0,.06)}
/* 创建/编辑表单的性别选择器（chip 行） */
.gender-pick{display:flex;flex-wrap:wrap;gap:8px}
.gp-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;
  border:1px solid var(--line);background:var(--bg2);font-size:13px;color:var(--ink);
  cursor:pointer;transition:.15s;font-family:inherit}
.gp-chip:hover{border-color:rgba(3,46,126,.45)}
.gp-chip.picked{background:var(--green-soft);border-color:var(--green);color:var(--green);font-weight:600}
.gp-chip .gp-sym{font-size:15px;font-weight:700;line-height:1}
.gp-chip .gp-sym.male{color:#2F6FBF}
.gp-chip .gp-sym.female{color:#E75480}
.gp-flag{width:21px;height:14px;object-fit:cover;border-radius:2px;flex:0 0 auto;
  border:1px solid rgba(0,0,0,.08)}
/* 顶栏搜索（详情页浏览量后）：胶囊输入框 + 悬浮下拉结果 */
/* 顶栏搜索：透明底融入顶栏（原 #fff 与右侧头像并排时显得突兀），
   宽度回落到不喧宾夺主的尺寸；focus 才轻微展开 + 白底聚焦提示 */
.top-search{position:relative;display:inline-flex;align-items:center;gap:6px;height:32px;
  padding:0 10px;border-radius:999px;background:transparent;border:1px solid var(--line-soft);
  flex:0 0 auto;width:150px;
  transition:width .2s ease,background .2s,border-color .2s,box-shadow .2s}
.top-search:focus-within{width:210px;background:#fff;border-color:rgba(3,46,126,.45);
  box-shadow:0 0 0 3px var(--green-soft)}
.top-search .ts-ico{display:inline-flex;color:var(--muted);flex:0 0 auto}
/* input 透明：与胶囊同色，避免「中间白、两端奶白」的色差；padding/border-radius 归零，
   避免全局 input 规则把输入框撑出胶囊两端 */
.top-search input{flex:1;min-width:0;border:0;outline:0;background:transparent;
  padding:0;border-radius:0;box-shadow:none;
  font-size:13px;color:var(--ink);font-family:inherit}
.top-search input::placeholder{color:var(--muted)}
/* 下拉结果面板：绝对定位，不参与布局；未展开时用 display:none 彻底移除盒模型，
   避免 padding(8px) 撑出一个可见的小空块（原先只设 visibility 仍占位） */
.ts-drop{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:280px;max-height:330px;
  overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);
  box-shadow:0 10px 28px rgba(3,46,126,.14);padding:4px;display:none;
  opacity:0;transform:translateY(-4px);transition:opacity .16s ease,transform .16s ease}
.ts-drop.open{display:block;opacity:1;transform:none}
.ts-item{display:flex;align-items:center;gap:10px;padding:8px 10px;cursor:pointer;border-radius:9px}
.ts-item:hover{background:var(--green-tint)}
.ts-thumb{width:36px;height:36px;border-radius:8px;object-fit:cover;flex:0 0 auto;border:1px solid var(--line-soft)}
.ts-thumb.ts-empty{display:inline-flex;align-items:center;justify-content:center;font-size:16px;background:var(--green-tint)}
.ts-info{display:flex;flex-direction:column;min-width:0;gap:1px}
.ts-name{font-size:13px;font-weight:600;color:var(--ink-strong);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ts-meta{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ts-empty-r{padding:14px;text-align:center;font-size:13px;color:var(--muted)}
/* 搜索条目：类型徽章 + 命中词高亮 */
.ts-kind{flex:0 0 auto;font-size:11px;font-weight:600;line-height:1;padding:3px 7px;
  border-radius:999px;background:var(--green-soft);color:var(--green);white-space:nowrap}
.ts-kind.ts-k-essay{background:#F3EEFA;color:#7A4FBF}
.ts-kind.ts-k-msg{background:#FDF1E7;color:#C06B2B}
.ts-kind.ts-k-cmt{background:#EDF6EF;color:#3E8E55}
.ts-item mark{background:transparent;color:var(--green);font-weight:700;padding:0}
/* 搜索跳转「留言」时的光晕定位 */
.ts-jump{border-radius:var(--radius-sm);
  box-shadow:0 0 0 3px var(--green-soft),0 0 18px rgba(3,46,126,.28);
  transition:box-shadow .7s ease}
/* 「生平简介」标题内的编辑/删除按钮（跟在“介”字后面，与标题同排） */
.detail-admin{display:inline-flex;gap:8px;vertical-align:middle;margin-left:12px}
/* 标题内按钮略小，避免撑高标题行 */
.sub-h .detail-admin .btn.sm{height:28px;padding:0 10px;font-size:12.5px}
/* 区块标题内的工具栏（镜头/音频区的「全选 / 删除 / 添加媒体」，跟在标题文字后同排） */
.sec-tools{display:inline-flex;align-items:center;vertical-align:middle;margin-left:14px}
.sec-tools .sel-bar{margin:0}
.sub-h .sec-tools .btn.sm{height:28px;padding:0 10px;font-size:12.5px}
/* 悬停提示气泡：鼠标经过（或键盘聚焦）包裹元素时，在正上方淡入显示 */
.tip{position:relative;display:inline-flex}
.tip-box{position:absolute;bottom:calc(100% + 9px);left:50%;z-index:70;
  width:max-content;max-width:min(260px,72vw);transform:translate(-50%,4px);
  background:#2b2b33;color:#fff;font-size:12px;font-weight:400;line-height:1.45;letter-spacing:.2px;
  text-align:center;padding:7px 11px;border-radius:8px;box-shadow:0 8px 22px rgba(0,0,0,.22);
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,transform .18s ease}
.tip-box::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#2b2b33}
.tip:hover .tip-box,.tip:focus-within .tip-box{opacity:1;visibility:visible;transform:translate(-50%,0)}
@media (max-width:760px){
  .top-search{width:100px}
  .top-search:focus-within{width:140px}
  .ts-drop{width:236px}
}
@media (max-width:640px){
  .mem-profile{flex-direction:column;gap:14px;padding:16px}
  .mem-profile-photo{width:104px;height:138px}
  /* 窄屏：折叠/展开按钮回到正常流，右对齐排在姓名上方 */
  .mem-profile-name{padding-right:0}
  .mp-tools{position:static;justify-content:flex-end;margin:0 0 6px}
}
.sub-h{font-family:var(--font-serif);font-size:16px;color:var(--ink-strong);
  margin:24px 0 12px;padding-left:10px;border-left:3px solid var(--green);letter-spacing:.5px}
.media-cell{display:flex;flex-direction:column;gap:6px;position:relative}
/* 区块级「全选 / 删除」选择态 —— 一体化淡底工具条：按钮去描边透明化，
   hover 浮现淡底，形成「工具组」整体感（替代原先一排散乱的白胶囊） */
.sel-bar{display:inline-flex;align-items:center;gap:3px;margin:2px 0 12px;
  background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:13px;padding:4px}
.sel-bar .btn.sm{height:30px;padding:0 12px;line-height:1;display:inline-flex;align-items:center;
  justify-content:center;background:transparent;border-color:transparent;font-size:13px;
  color:var(--ink);border-radius:9px;box-shadow:none}
.sel-bar .btn.sm:hover{background:var(--green-soft);color:var(--green);border-color:transparent}
.sel-bar .btn.sm.danger{color:#B5483D}
.sel-bar .btn.sm.danger:hover{background:#FBEEEC;color:#B5483D}
.sel-bar .btn.sm:has(.da-ico){color:var(--green);font-weight:600}
.sel-bar .btn.sm:has(.da-ico):hover{background:var(--green-soft)}
.sel-bar .btn:disabled{transform:none;cursor:not-allowed}
.sel-bar .btn:disabled:hover{background:transparent;color:#B5483D}
.sel-box{position:absolute;top:10px;right:12px;z-index:2;display:inline-flex;cursor:pointer}
.sel-box input{width:18px;height:18px;cursor:pointer;accent-color:var(--green)}
.is-selecting .item-tools{display:none}
/* 文章目录（悬浮折叠）—— 位于「全选」左侧，依据纪念文章标题生成 */
.toc-wrap{position:relative;display:inline-flex;align-items:center}
.toc-toggle{display:inline-flex;align-items:center;gap:6px}
.toc-toggle .toc-ico{font-size:13px;line-height:1}
/* 面板悬浮于按钮下方，不占布局空间；默认隐藏（用 visibility/opacity，保持留在渲染树，
   避免 hover 触发的平滑滚动进行中折叠 display:none 打断滚动动画） */
.toc-box{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:240px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 14px;margin:0;box-shadow:0 8px 24px rgba(3,46,126,.16);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-4px);
  transition:opacity .16s ease,transform .16s ease}
.toc-box.open{opacity:1;visibility:visible;pointer-events:auto;transform:none}
.toc-head{font-size:12.5px;color:var(--muted);letter-spacing:.5px;margin-bottom:8px}
.toc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;
  max-height:280px;overflow:auto}
.toc-item{display:flex;align-items:baseline;gap:8px;padding:7px 8px;border-radius:8px;
  color:var(--ink);font-size:14px;cursor:pointer;transition:background .15s,color .15s}
.toc-item:hover{background:var(--green-soft);color:var(--green)}
.toc-idx{flex:0 0 auto;min-width:18px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.toc-item:hover .toc-idx{color:var(--green)}
.toc-tx{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 目录跳转后目标文章高亮 */
.article-item{position:relative;transition:box-shadow .3s,border-color .3s}
.article-item.toc-target{border-color:var(--green);
  box-shadow:var(--shadow-sm),0 0 0 3px var(--green-soft)}
.item-tools{display:flex;gap:4px;flex-wrap:wrap;align-items:center;margin-top:14px;
  padding-top:12px;border-top:1px solid var(--line)}
/* 文章卡内「编辑 / 删除」：文字链接式，弱化按钮感、突出内容 */
.art-link{display:inline-flex;align-items:center;font-size:12.5px;color:var(--muted);
  background:none;border:0;cursor:pointer;padding:5px 8px;border-radius:8px;
  font-family:inherit;transition:color .15s,background .15s}
.art-link:hover{color:var(--green);background:var(--green-soft)}
.art-link.danger:hover{color:#B5483D;background:#FBEEEC}
/* 纪念文章：上宽卡片；下方「纪念活动 / 送花」两列独立卡片（参考排版：上宽下双） */
.article-col{display:flex;flex-direction:column;gap:26px}
.article-item{display:flex;flex-direction:column;padding:24px 26px 16px}
.article-item .article-title{font-family:var(--font-serif);font-size:20px;font-weight:700;
  letter-spacing:1.5px;margin:0 0 12px;line-height:1.4;color:var(--ink-strong)}
.article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;
  font-size:12.5px;color:var(--muted);margin-bottom:14px}
.article-meta .am-item{display:inline-flex;align-items:center;gap:5px}
.article-meta .am-item svg{opacity:.55}
.article-meta .am-dot{width:3px;height:3px;border-radius:50%;background:var(--line);flex:0 0 auto}
.article-item .article-body{white-space:pre-wrap;line-height:2;color:var(--ink);font-size:15px;
  max-height:220px;overflow:auto}
/* 纪念活动 / 送花：脱离文章，纪念级独立卡片区块 */
/* align-items:start —— 卡片按自身内容高度排布，不互相拉伸；
   这样折叠某个面板时它才真的会「缩成一行」，不会被同行的高卡片撑住 */
.act-panels{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:32px;align-items:start}
/* ===== 分区标题（P0 信息架构重组）=====
   把 29 个区块按用户心智分成 ①这个人 → ②去陪伴 → ③生活痕迹 → ④大家说。
   在 .act-panels 两列网格里用 grid-column:1/-1 通栏；在 mem_body 里则是普通块级。
   设计要点：序号用 serif 大字 + 绿色，标题加重，副标题弱化为 --muted，
   上下留白 + 细分隔线形成「章节感」，让用户随时知道走到哪一部分。 */
.sec-part{grid-column:1 / -1;display:flex;align-items:baseline;gap:10px;
  margin:26px 0 2px;padding:0 2px 9px;border-bottom:1px solid var(--line)}
.sec-part:first-child{margin-top:6px}
.sec-part-no{font-family:var(--font-serif);font-size:19px;font-weight:700;color:var(--green);
  line-height:1;flex:0 0 auto}
.sec-part-t{font-family:var(--font-serif);font-size:16px;font-weight:700;color:var(--ink-strong);
  letter-spacing:1px;flex:0 0 auto}
.sec-part-s{font-size:12.5px;color:var(--muted);letter-spacing:.4px;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.act-panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;box-shadow:var(--shadow-sm)}
.act-panel-title{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);
  letter-spacing:.5px;margin:0 0 12px;padding-left:9px;border-left:3px solid var(--green);line-height:22px}
/* 面板标题行：标题决定行高（22px），搜索框绝对定位在右侧、不参与行高，
   这样「送花」标题与无搜索框的「纪念活动」标题基线严格对齐 */
.act-panel-head{position:relative;min-height:22px;margin:0 0 12px}
.act-panel-head .act-panel-title{margin:0}
/* ===== 卡片面板折叠 ===== */
/* 头部整体可点：鼠标指针 + hover 轻微反馈（仅头部行，不改变卡片背景） */
.act-panel-head[role="button"]{cursor:pointer;user-select:none;padding-left:22px}
.act-panel-head[role="button"]:hover .act-panel-title{color:var(--green)}
.act-panel-head[role="button"]:focus-visible{outline:2px solid var(--green);outline-offset:3px;border-radius:6px}
/* 标题左侧的折叠箭头：折叠时箭头旋转 -90° */
.act-panel-fold{position:absolute;left:0;top:50%;transform:translateY(-50%);
  display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;
  border:0;border-radius:5px;background:transparent;color:var(--muted);cursor:pointer;
  transition:color .15s,background .15s}
.act-panel-fold svg{width:14px;height:14px;transition:transform .2s ease}
.act-panel-fold:hover{color:var(--green);background:var(--green-tint)}
/* 折叠态：只保留标题行（箭头 + 标题），隐藏头部内的工具区与头部之后的所有正文 */
.act-panel.collapsed .act-panel-head{margin-bottom:0}
.act-panel.collapsed > .act-panel-head ~ *{display:none}
.act-panel.collapsed .act-panel-head .of-tools,
.act-panel.collapsed .act-panel-head .cem-tools,
.act-panel.collapsed .act-panel-head .search-pill{display:none}
.act-panel.collapsed .act-panel-fold svg{transform:rotate(-90deg)}
/* 折叠后卡片背景略微弱化，视觉上更像「一行标题」 */
.act-panel.collapsed{background:var(--green-tint);box-shadow:none}

/* ===== 空面板压成一行目录（.act-panel.is-empty）=====
   诊断数据：某纪念详情页共 29 个区块、整页 6444px（手机 7.6 屏），
   其中 22 个是「登录后可 XX」的空面板，合计占 3165px（近一半）。
   这里把空面板压到一行 44px（= 最小可靠触控高度）：去壳、只留标题行 +
   右对齐「展开 ›」暗示可点；点击后由 JS 加 .is-open 恢复成正常面板。
   .is-empty 管「默认压扁」，.is-open 管「用户已手动展开」，两态互不干扰。 */
.act-panel.is-empty:not(.is-open){background:transparent;border:0;border-bottom:1px solid var(--line-soft);
  border-radius:0;box-shadow:none;padding:0;margin:0}
.act-panel.is-empty:not(.is-open) .act-panel-head{min-height:44px;margin:0;padding-left:22px;
  padding-right:26px;display:flex;align-items:center}
.act-panel.is-empty:not(.is-open) .act-panel-head + *{display:none}
/* 头部之后的直接子元素（正文）全部隐藏；但面板结构里常是
   [head, 说明区, <p class="meta">登录后可 XX</p>, .act-rec] 这种「头部后面还有兄弟」的形式，
   所以用通配选择器把 head 之后的所有兄弟一并隐藏，只留头部那一行。
   例外：.act-rec 内可能已有记录（此时不会被标为空面板），无需担心误伤。 */
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .meta,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .plant-bar,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .act-rec,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .cem-view,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .cem-acts,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .pet-main,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .msg-box,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .empty-click,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .comments{display:none}
.act-panel.is-empty:not(.is-open) .act-panel-head .of-tools,
.act-panel.is-empty:not(.is-open) .act-panel-head .cem-tools,
.act-panel.is-empty:not(.is-open) .act-panel-head .pet-tools,
.act-panel.is-empty:not(.is-open) .act-panel-head .search-pill{display:none}
.act-panel.is-empty:not(.is-open) .act-panel-title{font-size:14px;font-weight:600;color:var(--ink)}
.act-panel.is-empty:not(.is-open) .act-panel-head::after{content:'展开 ›';position:absolute;
  right:2px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--muted);letter-spacing:.4px}
.act-panel.is-empty:not(.is-open) .act-panel-head:hover .act-panel-title{color:var(--green)}
.act-panel.is-empty:not(.is-open) .act-panel-head:hover::after{color:var(--green)}
/* 连续多个空面板之间紧贴，视觉上形成一份「目录」，不再各自撑成大卡片 */
.act-panels>.act-panel.is-empty:not(.is-open){padding:0 16px}
.act-panels>.act-panel.is-empty:not(.is-open):first-child{border-top:1px solid var(--line-soft)}
.search-pill{position:absolute;top:50%;right:0;transform:translateY(-50%);
  display:inline-flex;align-items:center;gap:8px;width:min(260px,52%);height:36px;box-sizing:border-box;
  background:#f1f1f4;border:1px solid transparent;border-radius:999px;padding:0 14px;cursor:text;
  transition:background .15s,border-color .15s,box-shadow .15s}
.search-pill:hover{background:#ebebef}
.search-pill:focus-within{background:#fff;border-color:var(--green);box-shadow:0 0 0 3px var(--green-tint)}
.search-ico{width:15px;height:15px;flex:0 0 auto;color:#40404a}
.search-input,.search-input:focus,.search-input:hover{flex:1 1 auto;min-width:0;width:100%;border:0;
  border-radius:0;background:transparent;outline:none;padding:0;box-shadow:none;
  font-family:inherit;font-size:13px;line-height:1.55;color:var(--ink)}
.search-input::placeholder{color:#9b9ba4}
.search-input::-webkit-search-cancel-button{-webkit-appearance:none;display:none}
.chips-empty{font-size:12.5px;color:var(--muted);margin:10px 2px}
.chips-more{font-size:12px;color:var(--muted);margin:8px 2px 2px;line-height:1.5}
.act-chips{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.act-chip{display:flex;align-items:center;gap:8px;width:100%;text-align:left;cursor:pointer;
  background:var(--green-tint);border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;font-size:13px;color:var(--ink);font-family:inherit;
  transition:background .15s,border-color .15s,transform .15s,box-shadow .15s}
.act-chip:hover{background:#fff;border-color:var(--green);transform:translateY(-1px);box-shadow:0 4px 12px rgba(3,46,126,.1)}
.act-chip-ico{font-size:16px;line-height:1;flex:0 0 auto}
.act-chip-tx{flex:1 1 auto}
.act-rec{margin-top:14px}
/* ===== 音频播放器（内嵌于「影像 · 声音」板块，播放上传的音频）===== */
/* 单行底栏式：左半为播放器（封面 + 曲名 + 点赞/评论），中部控制键，右侧功能键 */
.music-player{margin-top:14px;border:1px solid var(--line);border-radius:14px;background:var(--green-tint);
  display:grid;grid-template-columns:minmax(230px,1.15fr) minmax(300px,1.5fr) auto;gap:12px 18px;
  padding:14px 16px;align-items:center}
/* 左侧：封面 + 曲名 + 点赞/评论 */
.mp-bar{display:contents}
.mp-head{display:flex;align-items:center;gap:12px;min-width:0}
/* 封面（有纪念封面用封面，否则用蓝色渐变底 + 音符） */
.mp-cover{width:58px;height:58px;flex:0 0 auto;border-radius:10px;background:#dbe4f5 center/cover no-repeat;
  display:grid;place-items:center;color:#fff;overflow:hidden;position:relative}
.mp-cover svg{width:24px;height:24px;opacity:.95}
.mp-cover-ph{background:linear-gradient(135deg,var(--green),var(--green-2))}
/* 封面悬停遮罩：本人/所有者可见，点击更换当前曲目封面 */
.mp-cover.has-edit{cursor:pointer}
.mp-cover-edit{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:rgba(20,30,50,.62);opacity:0;transition:opacity .18s;pointer-events:none;border-radius:10px}
.mp-cover.has-edit:hover .mp-cover-edit,
.mp-cover.has-edit:focus-within .mp-cover-edit{opacity:1;pointer-events:auto}
.mp-cover-edit-ico{font-size:15px;line-height:1}
.mp-cover-edit-txt{font-size:10px;font-weight:600;color:#fff;letter-spacing:.3px}
@media (prefers-reduced-motion: reduce){ .mp-cover-edit{transition:none} }
/* 触屏设备无悬停：遮罩常显半透明，保证入口可点 */
@media (hover: none){ .mp-cover.has-edit .mp-cover-edit{opacity:.92;pointer-events:auto} }
/* 曲名 / 上传者 / 点赞·评论 */
.mp-meta{flex:1 1 auto;min-width:0}
.mp-title{font-size:14.5px;font-weight:600;color:var(--ink-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-sub{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:3px}
.mp-head-acts{display:flex;align-items:center;gap:10px;margin-top:7px}
.mp-hact{position:relative;width:26px;height:26px;padding:0;border:0;border-radius:50%;background:#fff;border:1px solid var(--line);
  color:var(--muted);cursor:pointer;display:grid;place-items:center;transition:.16s;-webkit-tap-highlight-color:transparent}
/* 评论图标右上角的评论数角标 */
.mp-hact-badge{position:absolute;top:-5px;right:-5px;min-width:15px;height:15px;padding:0 3px;box-sizing:border-box;
  border-radius:8px;background:#e0245e;color:#fff;font-size:10px;line-height:15px;text-align:center;font-weight:700;
  pointer-events:none;box-shadow:0 0 0 2px #fff}
.mp-hact svg{width:15px;height:15px}
.mp-hact:hover{color:var(--green-2);border-color:var(--green)}
.mp-hact-like.on{color:#e0245e;border-color:#f4c2d4;background:#fdeef3}
/* 评论图标：评论区展开时高亮，作为折叠开关的状态提示 */
.mp-hact-cmt.on{color:var(--green);border-color:var(--green);background:var(--green-tint)}
.mp-hact:active{transform:scale(.92)}
/* 中部：控制键 + 进度条 */
.mp-main{display:flex;flex-direction:column;align-items:center;gap:9px;min-width:0}
.mp-ctrls{display:flex;align-items:center;justify-content:center;gap:16px}
.mp-ico{width:34px;height:34px;border:none;background:transparent;color:var(--green-2);cursor:pointer;
  display:grid;place-items:center;border-radius:9px;transition:.18s;-webkit-tap-highlight-color:transparent}
.mp-ico svg{width:19px;height:19px}
.mp-ico:hover{background:var(--green-soft)}
.mp-ico.active{color:var(--green);background:var(--green-soft)}
.mp-ico.muted{color:#b7bcc4}
/* 播放模式：循环图标只显示当前模式那一个，点击弹出四种模式菜单 */
.mp-loop-wrap{position:relative;display:inline-flex}
.mp-lm{display:none}
#mp_loop[data-mode="list"] .mp-lm-list,
#mp_loop[data-mode="one"] .mp-lm-one,
#mp_loop[data-mode="order"] .mp-lm-order,
#mp_loop[data-mode="shuffle"] .mp-lm-shuffle{display:block}
#mp_loop{position:relative}
#mp_loop.on{color:var(--green);background:var(--green-soft)}
.mp-loop-pop{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:10px;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px;
  box-shadow:0 10px 26px rgba(3,46,126,.22);display:none;z-index:22;min-width:106px}
.mp-loop-pop.show{display:block;animation:mpPop .14s ease}
.mp-loop-pop button{display:block;width:100%;padding:7px 12px;border:0;border-radius:8px;background:transparent;
  color:var(--ink);font-size:12.5px;cursor:pointer;text-align:center;white-space:nowrap;
  transition:background .14s,color .14s}
.mp-loop-pop button:hover{background:var(--green-tint);color:var(--green-2)}
.mp-loop-pop button.on{background:var(--green-tint);color:var(--green-2);font-weight:600}
.mp-vol.muted svg path:nth-child(2),.mp-vol.muted svg path:nth-child(3){opacity:.35}
/* 播放/暂停：蓝色实心圆 */
.mp-play{width:44px;height:44px;border:none;border-radius:50%;cursor:pointer;flex:0 0 auto;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;display:grid;place-items:center;
  box-shadow:0 6px 16px rgba(3,46,126,.32);transition:.18s;-webkit-tap-highlight-color:transparent}
.mp-play svg{width:20px;height:20px}
.mp-play:hover{filter:brightness(1.06)}
.mp-play:active{transform:scale(.95)}
.mp-play .mp-i-pause{display:none}
.mp-play.playing .mp-i-play{display:none}
.mp-play.playing .mp-i-pause{display:block}
/* 右侧功能组：快进 / 后退 / 倍速 / 列表 */
.mp-extra{position:relative;display:flex;align-items:center;gap:8px;justify-self:end}
.mp-xtag{height:28px;padding:0 11px;border:1px solid var(--line);border-radius:8px;background:#fff;
  color:var(--ink);font-size:12.5px;cursor:pointer;white-space:nowrap;transition:.16s;-webkit-tap-highlight-color:transparent}
.mp-xtag:hover{border-color:var(--green);color:var(--green-2)}
.mp-xtag:active{transform:scale(.96)}
.mp-xlist{width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--green-2);
  cursor:pointer;display:grid;place-items:center;transition:.16s}
.mp-xlist svg{width:20px;height:20px}
.mp-xlist:hover{background:var(--green-soft)}
.mp-progress{display:flex;align-items:center;gap:10px;width:100%;max-width:520px}
.mp-cur,.mp-dur{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;flex:0 0 auto;min-width:42px}
.mp-dur{text-align:right}
.mp-track{position:relative;flex:1 1 auto;height:5px;background:#dde3ea;border-radius:999px;cursor:pointer}
.mp-fill{position:absolute;left:0;top:0;height:100%;width:0;background:var(--green);border-radius:999px}
.mp-fill::after{content:'';position:absolute;right:-5px;top:50%;transform:translateY(-50%);
  width:10px;height:10px;border-radius:50%;background:var(--green);box-shadow:0 1px 4px rgba(3,46,126,.4)}
/* 音量键滑条向上弹出，避免遮挡进度条 */
.mp-vol-wrap{position:relative;display:inline-flex}
.mp-vol-pop{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:10px;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px 10px;
  box-shadow:0 10px 26px rgba(3,46,126,.22);display:none;z-index:20;white-space:nowrap}
.mp-vol-pop::before{content:'';position:absolute;bottom:-6px;left:50%;margin-left:-5px;width:10px;height:10px;
  background:#fff;border-right:1px solid var(--line);border-bottom:1px solid var(--line);transform:rotate(45deg)}
.mp-vol-pop.show{display:block;animation:mpPop .14s ease}
@keyframes mpPop{from{opacity:0;transform:translateX(-50%) translateY(4px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
.mp-vol-pop input[type=range]{width:118px;accent-color:var(--green);cursor:pointer;margin:0;vertical-align:middle}
.mp-vol-val{font-size:11px;color:var(--muted);text-align:center;margin-top:8px;font-variant-numeric:tabular-nums}
/* 播放倍速：上弹菜单（锚定在「倍速」按钮上） */
.mp-speed-pop{position:absolute;bottom:100%;right:0;margin-bottom:10px;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px;
  box-shadow:0 10px 26px rgba(3,46,126,.22);display:none;z-index:20;min-width:74px}
.mp-speed-pop.show{display:block;animation:mpPopRight .14s ease}
@keyframes mpPopRight{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
.mp-speed-pop button{display:block;width:100%;padding:6px 10px;border:0;border-radius:8px;background:transparent;
  color:var(--ink);font-size:12.5px;cursor:pointer;text-align:center;transition:background .14s,color .14s}
.mp-speed-pop button:hover{background:var(--green-tint);color:var(--green-2)}
.mp-speed-pop button.on{background:var(--green-tint);color:var(--green-2);font-weight:600}
/* 音频列表：整宽单列，横向五列（序号 | 点赞 | 音频名字 | 发布者 | 时长），
   拥有者额外一列删除键。用 subgrid 让每行与列轨道严格对齐。 */
.mp-list-wrap{grid-column:1 / -1;min-width:0;margin-top:2px}
.mp-list{
  display:grid;
  grid-template-columns:26px 48px minmax(0,2.2fr) minmax(0,1.1fr) auto 46px;
  align-items:center;gap:0 10px;
  margin:0;padding:2px 4px 0;max-height:340px;overflow:auto}
.mp-row{
  display:grid;grid-template-columns:subgrid;grid-column:1 / -1;align-items:center}
.mp-row{padding:7px 6px;border-radius:9px;cursor:pointer;transition:background .16s}
.mp-row:hover{background:#fff}
.mp-row.active{background:#fff;box-shadow:inset 3px 0 0 var(--green)}
.mp-row-idx{text-align:center;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.mp-row.active .mp-row-idx{color:var(--green)}
/* 点赞（心形 + 数字） */
.mp-row-like{display:inline-flex;align-items:center;gap:4px;justify-self:start;
  padding:2px 6px;border:0;border-radius:999px;background:transparent;color:#b9bfc7;cursor:pointer;
  font-size:11.5px;transition:color .16s,background .16s,transform .12s}
.mp-row-like svg{width:13px;height:13px;flex:none}
.mp-row-like:hover{color:#e0245e;background:#fdeef3}
.mp-row-like:active{transform:scale(.92)}
.mp-row-like.on{color:#e0245e}
.mp-row-like-n{font-variant-numeric:tabular-nums}
.mp-row-title{min-width:0;font-size:13.5px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-row.active .mp-row-title{color:var(--green);font-weight:600}
.mp-row-owner{min-width:0;font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mp-row-dur{text-align:right;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
/* 行末删除键（仅拥有者可见）：默认弱化，悬浮显红 */
.mp-row-del{width:26px;height:26px;padding:0;border:0;border-radius:7px;background:transparent;
  color:#b9bfc7;cursor:pointer;display:grid;place-items:center;justify-self:end;transition:.16s;
  -webkit-tap-highlight-color:transparent}
.mp-row-del svg{width:15px;height:15px}
.mp-row-del:hover{color:#e0245e;background:#fdeef3}
.mp-row-del:active{transform:scale(.92)}
.mp-list-wrap.collapsed .mp-list{display:none}
/* 空状态 */
.music-player.is-empty{background:var(--bg2);grid-template-columns:1fr}
.mp-empty{display:flex;align-items:center;justify-content:center;gap:8px;padding:18px;color:var(--muted);font-size:13px}
.mp-empty-ico{font-size:15px}
/* 空状态可点击上传：hover 给出轻微反馈 */
.mp-empty.empty-click{border-radius:10px}
.mp-empty.empty-click:hover{color:var(--green-2);background:var(--green-tint)}
@media (max-width:900px){
  /* 窄屏/平板（≤900）：上下堆叠，控制键换行。
     桌面三列网格 minmax(230px,1.15fr) minmax(300px,1.5fr) auto 的最小宽度和
     在 641–900px 区间超过版心（实测 760px 溢出 43px、播放列表右缘 803px），
     与 ≤900 的详情页移动端改版对齐，统一改为单列堆叠 */
  .music-player{grid-template-columns:1fr;gap:12px}
  .mp-head{width:100%}
  .mp-main{width:100%}
  .mp-extra{justify-self:center;flex-wrap:wrap;justify-content:center}
  .mp-list{padding-left:0;padding-top:8px;max-height:224px;
    grid-template-columns:22px 44px minmax(0,1fr) auto 40px}
  /* 窄屏列表：隐藏「发布者」列 */
  .mp-row-owner{display:none}
}
.act-rec .comment{font-size:13px;padding:8px 0}
/* 送花 / 种绿植 / 供品面板：种类较多，3 列紧凑 + 滚动 */
.act-chips.flowers,.act-chips.plants,.act-chips.offerings,.act-chips.animals{grid-template-columns:repeat(3,1fr);gap:6px;max-height:240px;overflow:auto;padding-right:2px}
.act-chips.flowers .act-chip,.act-chips.plants .act-chip,.act-chips.offerings .act-chip,.act-chips.animals .act-chip{padding:7px 8px;font-size:12px;border-radius:8px}
.act-chips.flowers .act-chip-ico,.act-chips.plants .act-chip-ico,.act-chips.offerings .act-chip-ico,.act-chips.animals .act-chip-ico{font-size:14px}
.flower-lang{font-size:11.5px;color:var(--green-2);margin:2px 0 2px 2px;opacity:.92}
/* 种绿植 / 供品：自定义按钮工具条 */
.plant-bar{display:flex;gap:8px;margin:0 0 10px}
.plant-bar .pb-ico{margin-right:2px}
/* 种绿植 / 动物面板：数据引用注脚（版权属声明） */
.plant-src,.animal-src{font-size:11px;line-height:1.7;color:var(--muted);opacity:.88;margin:10px 2px 4px;overflow-wrap:anywhere}
.plant-src a,.animal-src a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.plant-src a:hover,.animal-src a:hover{color:var(--green-2)}
/* 版权属声明不随面板折叠/压扁而隐藏：折叠态（.collapsed）与空面板压扁态
   （.is-empty:not(.is-open)）下也保持可见，多一个类比通用隐藏规则多一级特异性 */
.act-panel.collapsed > .act-panel-head ~ .plant-src,
.act-panel.collapsed > .act-panel-head ~ .animal-src,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .plant-src,
.act-panel.is-empty:not(.is-open) > .act-panel-head ~ .animal-src{display:block}
.act-panel.is-empty:not(.is-open) .plant-src,
.act-panel.is-empty:not(.is-open) .animal-src{margin:2px 0 10px}
/* 图标卡片：真实动图（宠物卡将来可换 GIF）与记录内缩略图 */
.act-chip-img{width:18px;height:18px;border-radius:4px;object-fit:cover;display:inline-block;vertical-align:middle}
.rec-img{width:20px;height:20px;border-radius:4px;object-fit:cover;vertical-align:middle;margin-right:4px}
/* 供品面板：分类筛选 + 搜索 并排 */
.of-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.of-tools .cat-select{appearance:none;-webkit-appearance:none;background:#f4f4f7;border:1px solid #e2e2e8;border-radius:9px;
  padding:6px 26px 6px 10px;font-size:12px;color:#444;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'><path d='M1 3l4 4 4-4' fill='none' stroke='%23888' stroke-width='1.4'/></svg>");
  background-repeat:no-repeat;background-position:right 9px center}
.of-tools .cat-select:hover{border-color:var(--green)}
.of-tools .search-pill{position:static;transform:none;flex:1 1 auto;min-width:120px}
.of-tools .search-pill .search-input{width:100%}
/* 送花弹窗：可搜索花格 */
.flower-search{width:100%;box-sizing:border-box;padding:9px 12px;border:1px solid var(--line);
  border-radius:10px;font-size:13px;font-family:inherit;margin:6px 0 12px;background:var(--green-tint)}
.flower-search:focus{outline:none;border-color:var(--green);background:#fff}
.flower-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;
  max-height:46vh;overflow:auto;padding:2px}
.flower-card{display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;
  background:var(--green-tint);border:1px solid var(--line);border-radius:12px;padding:10px 6px;
  font-family:inherit;color:var(--ink);text-align:center;transition:background .15s,border-color .15s,transform .15s,box-shadow .15s}
.flower-card:hover{background:#fff;border-color:var(--green);transform:translateY(-2px);box-shadow:0 6px 16px rgba(3,46,126,.14)}
.flower-card .fc-ico{font-size:22px;line-height:1}
.flower-card .fc-name{font-size:12px;font-weight:600;line-height:1.2}
.flower-card .fc-lang{font-size:10px;color:var(--green-2);line-height:1.15;max-height:2.3em;overflow:hidden}
@media (max-width:720px){.flower-grid{grid-template-columns:repeat(auto-fill,minmax(80px,1fr))}}
@media (max-width:720px){.act-panels{grid-template-columns:1fr}}
.act-list{margin-top:2px}
.rec-title{font-size:12px;font-weight:700;letter-spacing:1px;color:var(--green-2);margin:12px 0 4px}
/* 记录区标题 + 操作栏：标题在上，全选/一键删除紧随其下 */
.rec-head .rec-title{margin:12px 0 6px}
.rec-head .sel-bar{margin:0 0 8px}
.cmt-box{margin-top:2px;border-top:0;padding-top:2px;font-size:12.5px}
.cmt-list{margin-top:8px}
.cmt-box textarea{min-height:64px}
/* 「暂无留言」空态：居中弱化 + 装饰引导 */
.cmt-box .meta{text-align:center;font-size:12px;color:var(--muted);opacity:.65;
  padding:10px 0 4px;margin:0;letter-spacing:1px}
/* 参与缅怀：实心蓝改描边轻量风，与「编辑/删除」文字链接同一行内不抢戏 */
.item-tools .cmt-toggle{background:var(--card);color:var(--green);border:1px solid var(--line);
  box-shadow:none;font-weight:600}
.item-tools .cmt-toggle:hover{border-color:var(--green);background:var(--green-soft)}
/* 操作行内元素右侧推齐参与缅怀 */
.item-tools .cmt-toggle-wrap{margin-left:auto}
.cmt-toggle .arrow{display:inline-block;transition:transform .15s;font-size:11px;line-height:1}
.cmt-toggle-wrap{position:relative;display:inline-block}
.cmt-toggle-wrap.open .cmt-toggle .arrow{transform:rotate(180deg)}
.cmt-menu{position:absolute;bottom:calc(100% + 42px);left:auto;right:0;z-index:60;display:none;
  width:180px;background:rgba(255,255,255,.88);
  -webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  border:1px solid rgba(255,255,255,.75);border-radius:14px;
  box-shadow:0 1px 0 rgba(255,255,255,.85) inset, 0 12px 28px -8px rgba(31,45,90,.18);
  overflow:hidden;padding:4px 0;opacity:0;transform:translateY(6px);pointer-events:none;
  transition:opacity .18s ease,transform .18s ease}
.cmt-menu.open{display:block;opacity:1;transform:none;pointer-events:auto}
.cmt-act{display:flex;align-items:center;gap:8px;width:100%;text-align:left;cursor:pointer;
  background:none;border:0;border-bottom:1px solid var(--line);padding:9px 14px;
  font-size:12.5px;color:var(--ink);font-family:inherit;transition:background .15s,color .15s}
.cmt-act:last-child{border-bottom:0}
.cmt-act:hover{background:var(--green-soft);color:var(--ink-strong)}
.cmt-act .cmt-ico{font-size:14px;flex:0 0 auto;width:18px;text-align:center;line-height:1}
/* ===== 生活痕迹库（P0 信息架构重组）=====
   原 17 个 ICON_CFG 场景面板平铺占 18 行目录、折叠态合计 1020px。
   新结构：一个「生活痕迹库」面板 = 分类横滑条 + 当前分类的单个面板。
   切换只改 display（DOM 保留），不重建，避免重复渲染与状态丢失。 */
.life-hub{grid-column:1 / -1}
.life-head .life-sum{font-size:12px;color:var(--muted);letter-spacing:.3px}
/* 分类条：17 个分类一行横滑（手机惯例）。语义分组用「组标签 + 细分隔竖线」表达，
   不竖排 6 组——实测竖排要 230px，横滑只要 44px。 */
.life-cats{display:flex;flex-direction:row;align-items:center;gap:0;margin:2px 0 14px;
  padding:7px 8px;background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.life-grp{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;padding:0 7px 0 0}
.life-grp + .life-grp{margin-left:7px;padding-left:7px;border-left:1px solid var(--line)}
.life-grp-cap{flex:0 0 auto;font-size:10.5px;color:var(--muted);letter-spacing:.5px;
  white-space:nowrap;opacity:.85}
.life-grp-cats{display:inline-flex;gap:5px;flex:0 0 auto}
.life-cat{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:999px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);white-space:nowrap;
  font:inherit;font-size:12.5px;cursor:pointer;transition:.16s var(--ease,ease)}
.life-cat .lc-ico{font-size:13px;line-height:1}
.life-cat .lc-n{flex:0 0 auto;min-width:15px;height:15px;padding:0 4px;border-radius:999px;
  background:var(--green);color:#fff;font-size:10px;font-weight:700;line-height:15px;text-align:center}
/* 尚无记录的分类：降饱和度，让「已有痕迹」的分类在视觉上优先 */
.life-cat.is-blank{color:var(--muted);border-style:dashed;background:transparent}
.life-cat:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.life-cat.on{background:var(--green);border-color:var(--green);color:#fff;font-weight:600}
.life-cat.on .lc-n{background:rgba(255,255,255,.26)}
.life-cat:focus-visible{outline:2px solid var(--green);outline-offset:2px}
/* 面板区：只显示当前分类，其余 display:none（DOM 保留，切回无重建成本） */
.life-body{position:relative}
.life-pane{display:none}
.life-pane.on{display:block;animation:lifeFade .2s var(--ease,ease)}
@keyframes lifeFade{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
/* 库内面板：去掉外层卡片壳（已在 .life-hub 内），只留内容 */
.life-pane .act-panel{border:0;background:transparent;box-shadow:none;padding:0}
@media (max-width:560px){
  .life-grp{flex-direction:column;gap:3px}
  .life-grp-cap{width:auto;padding-top:0}
  .life-cat{font-size:12px;padding:4px 9px}
}
/* 心愿标签（评论区区分于留言） */
.tag-wish{display:inline-block;background:#FFF7E0;color:#B8860B;border:1px solid rgba(184,134,11,.35);
  border-radius:999px;padding:1px 8px;font-size:11px;font-weight:600;vertical-align:middle;letter-spacing:.2px}
.empty{text-align:center;color:var(--muted);padding:48px 10px;font-size:14px;background:#fff;
  border:1px dashed var(--line);border-radius:var(--radius);margin:10px 0}
/* 可点击的空状态：整块可点，悬停高亮 */
.empty-click{cursor:pointer;transition:border-color .2s,color .2s,background .2s}
.empty-click:hover{border-color:var(--green);color:var(--green-2);background:var(--green-tint)}
.empty-click .empty-ico{display:inline-block;margin-right:6px}

/* 留言卡片：宽度与随笔一致，横跨整行（纪念活动 / 送花 仍各占半行） */
.act-panels .msg-panel{grid-column:1 / -1}
/* 3D 墓园：整行通栏（场景需要足够横向空间） */
.act-panels .cem-panel{grid-column:1 / -1}
/* 3D 宠物伙伴：整行通栏（3D 场景 + 聊天窗左右分栏） */
.act-panels .petbuddy-panel{grid-column:1 / -1}
.pet-tools{display:flex;align-items:center;gap:8px;margin-left:auto}
.pet-colors{display:inline-flex;align-items:center;gap:6px}
.pet-color-dot{width:16px;height:16px;border-radius:50%;border:2px solid transparent;cursor:pointer;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.12);transition:transform .15s,border-color .15s;padding:0}
.pet-color-dot:hover{transform:scale(1.18)}
.pet-color-dot.on{border-color:var(--green);box-shadow:0 0 0 2px var(--green-tint)}
.pet-colors.ro{font-size:12px;color:var(--muted)}
/* 宠物形象切换：一排物种图标按钮 */
.pet-spec-row{display:flex;align-items:center;gap:10px;margin:10px 12px 0}
.pet-spec-label{font-size:12px;color:var(--muted);white-space:nowrap}
.pet-specs{display:flex;gap:6px;flex-wrap:wrap}
.pet-spec-dot{width:30px;height:30px;border-radius:9px;border:1px solid var(--line);background:#fff;
  font-size:16px;line-height:1;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.04);transition:transform .15s,border-color .15s;padding:0}
.pet-spec-dot:hover{transform:scale(1.08)}
.pet-spec-dot.on{border-color:var(--green);box-shadow:0 0 0 2px var(--green-tint)}
/* 主体：左 3D 右聊天（窄屏改为上下） */
.pet-main{display:grid;grid-template-columns:1.15fr 1fr;gap:14px;align-items:stretch}
/* 顶部预留 54px「对话条」区域，3D 画布从其下方开始，气泡不再压住鹦鹉头部 */
.pet-view{--pet-bubble-h:54px;position:relative;min-height:344px;border-radius:14px;overflow:hidden;
  background:linear-gradient(180deg,#dff0fa 0%,#f3f9e8 55%,#d5e8c0 100%);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.05);cursor:grab;touch-action:none}
.pet-view.is-drag{cursor:grabbing}
/* 3D 画布容器：从对话条下方铺到视图底部（气泡是兄弟节点，避免被场景初始化清空） */
.pet-stage{position:absolute;top:var(--pet-bubble-h);left:0;right:0;bottom:0}
.pet-view canvas{display:block;width:100%;height:100%}
/* 顶部对话条：展示小鹦鹉的最新一句话，独占画布上方的留白区，不遮挡模型 */
.pet-bubble{position:absolute;top:6px;left:50%;transform:translate(-50%,-8px);
  max-width:92%;max-height:44px;overflow:hidden;
  background:rgba(255,255,255,.94);border:1px solid var(--line);border-radius:11px;
  padding:5px 11px;font-size:12px;color:var(--ink);box-shadow:var(--shadow-sm);
  opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;line-height:1.42;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pet-bubble.show{opacity:1;transform:translate(-50%,0)}
/* 聊天区 */
.pet-chat{display:flex;flex-direction:column;min-height:290px}
.pet-chat-log{flex:1 1 auto;overflow:auto;max-height:230px;min-height:190px;
  background:var(--green-tint);border:1px solid var(--line);border-radius:12px;padding:10px}
.pet-msg{display:flex;margin:0 0 8px;align-items:flex-end}
.pet-msg.me{justify-content:flex-end}
.pet-msg.it{justify-content:flex-start;gap:7px}
.pet-msg-ava{width:26px;height:26px;flex:0 0 auto;border-radius:50%;background:#fff;
  display:inline-flex;align-items:center;justify-content:center;font-size:14px;
  box-shadow:inset 0 0 0 1px var(--line)}
.pet-msg-tx{position:relative;max-width:82%;padding:7px 11px;border-radius:12px;
  font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.pet-msg.me .pet-msg-tx{background:var(--green);color:#fff;border-bottom-right-radius:4px}
.pet-msg.it .pet-msg-tx{background:#fff;border:1px solid var(--line);border-bottom-left-radius:4px}
.pet-msg-name{display:block;font-size:10.5px;color:var(--muted);margin-top:3px}
.pet-typing .pet-msg-tx{color:var(--muted);font-size:12.5px}
.pet-typing .pet-msg-tx i{display:inline-block;width:4px;height:4px;margin-left:3px;border-radius:50%;
  background:var(--muted);animation:petTyping 1.2s infinite}
.pet-typing .pet-msg-tx i:nth-child(2){animation-delay:.2s}
.pet-typing .pet-msg-tx i:nth-child(3){animation-delay:.4s}
@keyframes petTyping{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-2px)}}
.pet-inputrow{display:flex;gap:8px;margin-top:9px}
.pet-input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:10px;
  padding:8px 12px;font-family:inherit;font-size:13px;background:#fff}
.pet-input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-tint)}
.pet-send{flex:0 0 auto}
.pet-login{width:100%;margin-top:9px}
@media (max-width:720px){
  .pet-main{grid-template-columns:1fr}
  .pet-view{min-height:294px}
  .pet-tools{margin-left:0;width:100%}
}
.cem-panel .act-panel-head{align-items:center}
.cem-tools{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.cem-view{position:relative;margin:10px 0 12px;border-radius:14px;overflow:hidden;
  background:linear-gradient(180deg,#2b3a55,#141c2b);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
.cem-stage-wrap{position:relative;width:100%;height:440px;cursor:grab;touch-action:none}
.cem-stage-wrap.is-drag{cursor:grabbing}
.cem-stage-wrap canvas{display:block;width:100%;height:100%}
.cem-stage-wrap:fullscreen{height:100vh;border-radius:0;background:#0d131f}
.cem-loading,.cem-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:#c9d6ea;font-size:14px;background:linear-gradient(180deg,#2b3a55,#141c2b);z-index:2;padding:0 20px;text-align:center}
.cem-hint{position:absolute;left:0;right:0;bottom:0;padding:7px 14px;font-size:12px;color:#dfe8f6;
  background:linear-gradient(0deg,rgba(8,12,20,.72),transparent);pointer-events:none;letter-spacing:.3px}
/* 3D 墓园视角控制条：走近 / 全景 / 旋转 */
.cem-ctrl{position:absolute;right:10px;bottom:38px;display:flex;gap:6px;z-index:3}
.cem-ctrl-btn{border:1px solid rgba(255,255,255,.32);background:rgba(18,26,42,.62);color:#eaf1fb;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding:6px 12px;border-radius:999px;
  font-family:inherit;font-size:12.5px;line-height:1;cursor:pointer;transition:border-color .16s,background .16s,transform .12s}
.cem-ctrl-btn:hover{border-color:rgba(255,255,255,.6);background:rgba(30,42,64,.78)}
.cem-ctrl-btn:active{transform:translateY(1px) scale(.97)}
.cem-ctrl-btn.on{border-color:var(--green,#3a9d6b);color:#fff;background:rgba(34,120,78,.72)}
.cem-ctrl-btn{-webkit-tap-highlight-color:transparent}
@media (max-width:640px){
  .cem-ctrl{right:8px;bottom:36px;gap:5px}
  .cem-ctrl-btn{padding:9px 11px;font-size:12px}
}
/* 公共墓园视角控制条：复用 .cem-ctrl-btn 外观。
   置于左上角——避开底部通栏的 .pc-card（手机端）与右下卡片（桌面端），且开页即可见 */
.pc-ctrl{position:absolute;left:10px;top:10px;display:flex;gap:6px;z-index:4}
.pc-hint-float{position:absolute;left:50%;bottom:20px;transform:translate(-50%,8px);
  background:rgba(18,26,42,.86);color:#eaf1fb;padding:8px 14px;border-radius:999px;
  font-size:13px;white-space:nowrap;pointer-events:none;opacity:0;z-index:6;
  transition:opacity .22s,transform .22s}
.pc-hint-float.show{opacity:1;transform:translate(-50%,0)}
@media (max-width:640px){
  .pc-ctrl{left:8px;top:8px;gap:5px}
  .pc-ctrl .cem-ctrl-btn{padding:9px 11px;font-size:12px}
}
/* 缅怀动作条：墓园下方的横向按钮组 */
.cem-acts{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 14px}
.cem-act{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;
  font-family:inherit;font-size:13px;transition:border-color .16s,background .16s,transform .16s}
.cem-act:hover{border-color:var(--green);background:var(--green-soft);transform:translateY(-1px)}
.cem-act-ico{font-size:15px;line-height:1}
.cem-act:active{transform:translateY(1px) scale(.97);background:var(--green-tint)}
/* 音效开关按钮（墓园工具栏内） */
.cem-tools .btn.sfx-on,.cem-tools .btn.sfx-off{font-variant-numeric:tabular-nums;letter-spacing:.2px}
.cem-tools .btn.sfx-on{border-color:var(--green);color:var(--green);background:var(--green-soft)}
.cem-tools .btn.sfx-off{opacity:.72}
.cem-tools .btn.sfx-off:hover{opacity:1}
/* 自定义弹窗：照片行 + 双列 + 滑块 */
.cem-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.cem-photo-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.cem-photo-box{width:88px;height:88px;border-radius:12px;overflow:hidden;flex:none;
  border:1px dashed var(--line);background:#f6f4ef;display:flex;align-items:center;justify-content:center}
.cem-photo-box img{width:100%;height:100%;object-fit:cover;display:block}
.cem-photo-ph{font-size:12px;color:var(--muted)}
.cem-photo-btns{display:flex;gap:8px;flex-wrap:wrap}
.cem-range{display:flex;align-items:center;gap:10px}
.cem-range input[type=range]{flex:1;accent-color:var(--green)}
.cem-range span{min-width:26px;text-align:right;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
@media (max-width:720px){
  .cem-stage-wrap{height:320px}
  .cem-2col{grid-template-columns:1fr}
  .cem-tools{margin-left:0;width:100%}
}

/* ===== 大型公共 3D 墓园（纪念空间 → 「3D 公共墓园」tab） ===== */
.pc-wrap{display:block}
.pc-head{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin:2px 0 12px}
.pc-title-wrap{min-width:0}
.pc-title{margin:0;font-size:20px;letter-spacing:1px;color:var(--ink)}
.pc-sub{margin:4px 0 0;font-size:13px;color:var(--muted)}
.pc-sub b{color:var(--green);font-variant-numeric:tabular-nums;font-size:15px}
.pc-tools{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.pc-search{padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);
  color:var(--ink);font-family:inherit;font-size:13.5px;min-width:200px;outline:none;transition:border-color .16s}
.pc-search:focus{border-color:var(--green)}
.pc-stats{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px;font-size:13px;color:var(--ink)}
.pc-stats .pc-loading{color:var(--muted)}
.pc-stat{color:var(--ink)}
.pc-stat b{color:var(--green);font-size:15px;font-variant-numeric:tabular-nums}
.pc-stat.dim{color:var(--muted)}
.pc-stat.mine b{color:#c9922f}
.pc-sep{width:1px;height:14px;background:var(--line)}
.pc-chip{padding:3px 10px;border-radius:999px;background:var(--green-soft);color:var(--green);
  font-size:12px;border:1px solid transparent;font-variant-numeric:tabular-nums}
/* 3D 视口 */
.pc-view{position:relative;width:100%;height:min(72vh,660px);border-radius:16px;overflow:hidden;
  background:linear-gradient(180deg,#2b3a55,#141c2b);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06);
  cursor:grab;touch-action:none}
.pc-view.is-drag{cursor:grabbing}
.pc-view canvas{display:block;width:100%;height:100%}
.pc-view:fullscreen{height:100vh;border-radius:0;background:#0d131f}
.pc-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:10px 0 0}
.pc-hint{font-size:12.5px;color:var(--muted);line-height:1.6}
.pc-time{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
.pc-tbtn{padding:5px 12px;border-radius:999px;border:1px solid var(--line);background:var(--card);
  color:var(--ink);cursor:pointer;font-family:inherit;font-size:12.5px;transition:all .16s}
.pc-tbtn:hover{border-color:var(--green)}
.pc-tbtn.active{background:var(--green);color:#fff;border-color:var(--green)}
/* 碑文卡片：浮在场景右下角 */
.pc-card{position:absolute;right:16px;bottom:16px;width:300px;max-width:calc(100% - 32px);
  background:rgba(252,251,247,.96);backdrop-filter:blur(6px);border:1px solid rgba(180,172,158,.5);
  border-radius:14px;padding:14px 16px;box-shadow:0 12px 34px rgba(20,24,32,.22);z-index:3}
.pc-view{position:relative}
.pc-wrap{position:relative}
.pc-card-head{display:flex;align-items:flex-start;gap:8px}
.pc-card-name{flex:1;font-size:17px;font-weight:700;color:#23211e;letter-spacing:1px;
  font-family:"STKaiti","KaiTi","Songti SC","SimSun",serif}
.pc-card-x{border:0;background:transparent;color:#8a8579;cursor:pointer;font-size:14px;
  line-height:1;padding:2px 4px;border-radius:6px}
.pc-card-x:hover{background:rgba(0,0,0,.06);color:#33302a}
.pc-card-life{font-size:13px;color:#5b564d;margin-top:5px;font-variant-numeric:tabular-nums}
.pc-card-tag{font-size:12px;color:#8a8579;margin-top:5px}
.pc-card-ep{margin:8px 0 0;font-size:13px;line-height:1.75;color:#3e3a33;
  max-height:96px;overflow:auto;white-space:pre-wrap}
.pc-card-ep.dim{color:#9a948a;font-style:italic}
.pc-card-btns{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.pc-card-btns .btn[disabled]{opacity:.5;cursor:not-allowed}
/* 墓园姓名牌搜索结果面板（浮在场景左上角，避开右下角 .pc-card） */
.park-search-res{position:absolute;left:16px;top:16px;width:280px;max-width:calc(100% - 32px);
  max-height:min(60vh,420px);overflow:auto;background:rgba(252,251,247,.97);backdrop-filter:blur(6px);
  border:1px solid rgba(180,172,158,.5);border-radius:14px;padding:10px 12px;
  box-shadow:0 12px 34px rgba(20,24,32,.22);z-index:4}
.park-search-res[hidden]{display:none}
.park-search-res-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.park-search-res-title{flex:1;font-size:13px;color:#6b665d}
.park-search-res-x{border:0;background:transparent;color:#8a8579;cursor:pointer;font-size:14px;
  line-height:1;padding:2px 4px;border-radius:6px}
.park-search-res-x:hover{background:rgba(0,0,0,.06);color:#33302a}
.park-search-res-item{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:10px;
  cursor:pointer;border:1px solid transparent;transition:background .14s,border-color .14s}
.park-search-res-item:hover{background:#f1ede3;border-color:rgba(180,172,158,.4)}
.park-search-res-name{font-size:15px;font-weight:700;color:#23211e;
  font-family:"STKaiti","KaiTi","Songti SC","SimSun",serif;letter-spacing:1px}
.park-search-res-meta{font-size:12px;color:#8a8579;font-variant-numeric:tabular-nums}
.park-search-res-empty{padding:10px;font-size:13px;color:#8a8579;text-align:center}
@media (max-width:720px){
  .park-search-res{left:12px;right:12px;top:12px;width:auto}
}

/* ===== 单座墓碑详情大面板（墓园内弹出，不销毁 3D 场景） ===== */
.pc-detail{position:absolute;inset:0;z-index:8;display:flex;align-items:center;justify-content:center;
  padding:22px;background:rgba(12,14,18,.5);backdrop-filter:blur(3px);cursor:default;
  animation:pcDFade .18s ease-out}
@keyframes pcDFade{from{opacity:0}to{opacity:1}}
.pc-detail-panel{width:min(760px,100%);max-height:100%;display:flex;flex-direction:column;
  background:linear-gradient(180deg,#fffdf8,#faf6ee);border-radius:16px;overflow:hidden;
  box-shadow:0 26px 70px rgba(0,0,0,.45);border:1px solid rgba(180,150,90,.35);
  animation:pcDUp .24s cubic-bezier(.2,.8,.25,1)}
@keyframes pcDUp{from{transform:translateY(16px) scale(.985);opacity:0}to{transform:none;opacity:1}}
.pc-detail-head{display:flex;align-items:flex-start;gap:12px;padding:18px 20px 14px;
  border-bottom:1px solid rgba(180,150,90,.22);background:linear-gradient(180deg,rgba(255,248,232,.9),transparent)}
.pc-detail-hd-text{flex:1;min-width:0}
.pc-detail-kicker{display:inline-block;font-size:12px;letter-spacing:.08em;color:#a8823c;
  background:rgba(212,175,90,.16);border-radius:20px;padding:2px 10px;margin-bottom:6px}
.pc-detail-title{margin:0;font-size:24px;line-height:1.25;color:#33291c;font-weight:700;
  font-family:"Songti SC","STSong",serif;letter-spacing:.02em;word-break:break-word}
.pc-detail-body{padding:18px 20px;overflow-y:auto;flex:1}
.pc-detail-top{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.pc-detail-photo{width:132px;height:168px;flex:none;border-radius:10px;overflow:hidden;
  background:linear-gradient(160deg,#e9e2d2,#d8cfba);display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(180,150,90,.35);box-shadow:inset 0 0 0 3px rgba(255,255,255,.5)}
.pc-detail-photo img{width:100%;height:100%;object-fit:cover;display:block}
.pc-detail-photo-ph{font-size:46px;opacity:.4}
.pc-detail-info{flex:1;min-width:210px}
.pc-detail-life{font-size:19px;color:#4a3c27;font-weight:600;margin-bottom:10px;
  font-family:"Songti SC","STSong",serif}
.pc-detail-row{display:flex;gap:10px;font-size:14px;color:#5c503c;margin:5px 0;line-height:1.5}
.pc-detail-row>span:first-child{flex:none;width:68px;color:#9c8a6c}
.pc-detail-ep{margin-top:16px;padding:14px 16px;border-radius:10px;background:rgba(255,255,252,.85);
  border:1px solid rgba(180,150,90,.2)}
.pc-detail-sec-title{font-size:13px;font-weight:700;color:#a8823c;letter-spacing:.06em;margin:18px 0 10px;
  display:flex;align-items:center;gap:8px}
.pc-detail-sec-title::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,rgba(180,150,90,.35),transparent)}
.pc-detail-ep .pc-detail-sec-title{margin-top:0}
.pc-detail-ep-text{margin:0;font-size:15px;line-height:1.9;color:#40341f;white-space:pre-wrap;
  font-family:"Songti SC","STSong",serif}
.pc-detail-cells{display:grid;grid-template-columns:repeat(auto-fit,minmax(92px,1fr));gap:10px}
.pc-detail-cell{text-align:center;padding:12px 6px;border-radius:10px;background:rgba(255,255,252,.9);
  border:1px solid rgba(180,150,90,.2)}
.pc-detail-cell b{display:block;font-size:20px;color:#7a5c1e;font-weight:700;line-height:1.2}
.pc-detail-cell span{display:block;font-size:11px;color:#9c8a6c;line-height:1.45;margin-top:4px}
.pc-detail-sec-sub{font-size:12px;color:#9c8a6c;margin:16px 0 8px;letter-spacing:.04em}
.pc-detail-media{display:flex;gap:8px;flex-wrap:wrap}
.pc-detail-media img{width:78px;height:78px;object-fit:cover;border-radius:8px;
  border:1px solid rgba(180,150,90,.3);background:#eee7d7}
.pc-detail-flowers{display:flex;gap:8px;flex-wrap:wrap}
.pc-detail-fl{font-size:13px;color:#5c503c;background:rgba(212,175,90,.14);
  border-radius:20px;padding:4px 12px;border:1px solid rgba(180,150,90,.22)}
.pc-detail-msgs{display:flex;flex-direction:column;gap:8px}
.pc-detail-msg{padding:10px 12px;border-radius:9px;background:rgba(255,255,252,.9);
  border:1px solid rgba(180,150,90,.18)}
.pc-detail-msg-hd{font-size:12px;color:#9c8a6c;margin-bottom:4px}
.pc-detail-msg p{margin:0;font-size:14px;color:#4a3c27;line-height:1.6;word-break:break-word}
.pc-detail-loading{font-size:13px;color:#9c8a6c;padding:10px 0}
.pc-detail-err{font-size:14px;color:#a04a3c}
.pc-detail-empty{font-size:13px;color:#9c8a6c;text-align:center;padding:14px 0 4px}
.pc-detail-acts{display:flex;gap:10px;padding:14px 20px;border-top:1px solid rgba(180,150,90,.22);
  background:rgba(255,250,240,.85);flex-wrap:wrap}
.pc-detail-acts .btn.primary{margin-right:auto}

@media (max-width:720px){
  .pc-detail{padding:10px}
  .pc-detail-panel{max-height:100%;border-radius:12px}
  .pc-detail-head{padding:14px 14px 10px}
  .pc-detail-title{font-size:20px}
  .pc-detail-body{padding:14px}
  .pc-detail-photo{width:96px;height:124px}
  .pc-detail-photo-ph{font-size:34px}
  .pc-detail-acts{padding:12px 14px}
  .pc-detail-acts .btn{flex:1;min-width:0;justify-content:center}
  .pc-detail-acts .btn.primary{margin-right:0}
}

/* ===== 放大镜：放大墓碑 + 大字读碑（浮在 3D 场景上，不销毁场景） ===== */
.pc-mag{position:absolute;inset:0;z-index:9;display:flex;align-items:center;justify-content:center;
  padding:22px;background:rgba(10,12,16,.58);backdrop-filter:blur(4px);cursor:default;
  animation:pcDFade .18s ease-out}
.pc-mag-panel{width:min(680px,100%);max-height:100%;display:flex;flex-direction:column;
  background:linear-gradient(180deg,#fffdf8,#f6f1e6);border-radius:16px;overflow:hidden;
  box-shadow:0 26px 70px rgba(0,0,0,.5);border:1px solid rgba(180,150,90,.4);
  animation:pcDUp .24s cubic-bezier(.2,.8,.25,1)}
.pc-mag-head{display:flex;align-items:center;gap:10px;padding:14px 18px;
  border-bottom:1px solid rgba(180,150,90,.22);background:linear-gradient(180deg,rgba(255,248,232,.95),transparent)}
.pc-mag-kicker{font-size:12px;letter-spacing:.06em;color:#8a6a2e;background:rgba(212,175,90,.18);
  border-radius:20px;padding:3px 11px;flex:none}
.pc-mag-headname{flex:1;min-width:0;font-size:16px;font-weight:700;color:#3a2f1c;
  font-family:"STKaiti","KaiTi","Songti SC","SimSun",serif;letter-spacing:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pc-mag-scroll{padding:16px 18px;overflow-y:auto;flex:1}
/* 碑面：深色石材底 + 内凿边框，大字碑文 */
.pc-mag-stone{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap;
  padding:20px 22px;border-radius:12px;background:linear-gradient(160deg,#4c4740,#322e29 70%,#272420);
  border:1px solid rgba(0,0,0,.45);box-shadow:inset 0 0 0 3px rgba(255,255,255,.06),inset 0 0 40px rgba(0,0,0,.4)}
.pc-mag-photo{width:112px;height:142px;flex:none;border-radius:8px;overflow:hidden;
  background:rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(212,190,150,.35);box-shadow:0 4px 16px rgba(0,0,0,.35)}
.pc-mag-photo img{width:100%;height:100%;object-fit:cover;display:block}
.pc-mag-photo-ph{font-size:44px;opacity:.5}
.pc-mag-words{flex:1;min-width:200px;text-align:center}
.pc-mag-ctag{font-size:11.5px;color:#b7a988;letter-spacing:.08em;margin-bottom:10px}
.pc-mag-name{font-size:34px;font-weight:700;line-height:1.32;color:#f3ece0;letter-spacing:4px;
  font-family:"STKaiti","KaiTi","Songti SC","SimSun",serif;word-break:break-word}
.pc-mag-life{font-size:16px;color:#cfc4ad;margin-top:10px;font-variant-numeric:tabular-nums;
  letter-spacing:2px;font-family:"Songti SC","SimSun",serif}
.pc-mag-rule{height:1px;width:56%;margin:16px auto;background:linear-gradient(90deg,transparent,rgba(212,190,150,.55),transparent)}
.pc-mag-ep{font-size:18px;line-height:2;color:#ece4d5;white-space:pre-wrap;text-align:center;
  font-family:"Songti SC","STSong",serif;letter-spacing:.5px;word-break:break-word}
.pc-mag-ep .dim{color:#9c9384;font-style:italic}
.pc-mag-sec-title{font-size:13px;font-weight:700;color:#a8823c;letter-spacing:.06em;margin:18px 0 10px;
  display:flex;align-items:center;gap:8px}
.pc-mag-sec-title::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,rgba(180,150,90,.35),transparent)}
.pc-mag-acts{display:flex;gap:10px;padding:14px 18px;border-top:1px solid rgba(180,150,90,.22);
  background:rgba(255,250,240,.9);flex-wrap:wrap}
.pc-mag-acts .btn.primary{margin-right:auto}

@media (max-width:720px){
  .pc-mag{padding:10px}
  .pc-mag-panel{max-height:100%;border-radius:12px}
  .pc-mag-head{padding:12px 14px}
  .pc-mag-scroll{padding:12px 14px}
  .pc-mag-stone{padding:16px;gap:12px}
  .pc-mag-photo{width:88px;height:112px}
  .pc-mag-photo-ph{font-size:34px}
  .pc-mag-name{font-size:26px;letter-spacing:2px}
  .pc-mag-life{font-size:14px}
  .pc-mag-ep{font-size:16px}
  .pc-mag-acts{padding:12px 14px}
  .pc-mag-acts .btn{flex:1;min-width:0;justify-content:center}
  .pc-mag-acts .btn.primary{margin-right:0}
}
@media (max-width:720px){
  .pc-view{height:min(62vh,460px)}
  .pc-tools{margin-left:0;width:100%}
  .pc-search{flex:1;min-width:0}
  .pc-card{left:12px;right:12px;width:auto;bottom:12px}
}

/* ===== 留言卡片（纪念活动 / 送花 下方的留言区块，参考图：粉框输入框 + 字数统计） ===== */
.msg-box{margin:4px 0 6px}
.msgb-input{width:100%;box-sizing:border-box;min-height:132px;resize:vertical;
  border:1px solid #B7CDEE;border-radius:12px;background:#FBFDFF;
  padding:12px 14px;font-family:inherit;font-size:14.5px;line-height:1.75;color:var(--ink);
  outline:none;transition:border-color .2s,box-shadow .2s}
.msgb-input::placeholder{color:#9DB4D6}
.msgb-input:focus{border-color:var(--green);background:#FBFDFF;box-shadow:0 0 0 3px var(--green-soft)}
.msgb-meta{display:flex;align-items:center;gap:10px;margin:6px 2px 10px}
.msgb-meta .msgb-vis{margin-left:0;flex:0 0 auto}
.msgb-count{margin-left:auto;font-size:12px;color:var(--muted)}
.msgb-post{display:block;width:100%}
.msgb-login{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  border:1px dashed var(--line);border-radius:12px;background:none;font-family:inherit;
  padding:22px;font-size:14px}

/* ===== 短篇随笔 · 评论区（HeoGPT 风格卡片） ===== */
.essay-cmt{padding:18px 20px 16px}
.ec-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.ec-ico{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;
  background:var(--green-soft);border-radius:7px;font-size:13px;flex:0 0 auto}
.ec-title{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);letter-spacing:.4px}
.ec-chevron{color:var(--muted);font-size:16px;line-height:1;margin-left:-2px}
.ec-brand{margin-left:auto;font-size:12px;color:var(--muted);letter-spacing:.5px}

.ec-body{font-size:14.5px;line-height:1.85;color:var(--ink);margin-bottom:14px}
.ec-empty{color:var(--muted);font-size:13.5px;margin:2px 0 4px}
/* 随笔卡片内嵌评论区（编辑/删除下方） */
.ec-inner{border-top:1px solid var(--line-soft);margin-top:14px;padding-top:12px}
.ec-inner-title{font-family:var(--font-serif);font-size:13px;font-weight:700;color:var(--ink-strong);
  letter-spacing:.4px;margin-bottom:8px}
.ec-item{padding:10px 0;border-top:1px solid var(--line-soft)}
.ec-item:first-child{border-top:0;padding-top:2px}
.ec-item-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:2px}
.ec-who{color:var(--green-2);font-size:13px;font-weight:600}
.ec-when{color:var(--muted);font-size:11px}
.ec-tools{margin-left:auto;display:flex;gap:10px}
.ec-link{background:none;border:0;padding:0;cursor:pointer;font-size:12px;color:var(--green-2);font-family:inherit}
.ec-link:hover{text-decoration:underline}
.ec-link.danger{color:#B4453C}
.ec-text{color:var(--ink);word-break:break-word;white-space:pre-wrap}

.ec-input-row{display:flex;align-items:center;gap:10px;margin-top:12px}
.ec-input{flex:1 1 auto;min-width:0;height:42px;border:1px solid var(--line);border-radius:999px;
  padding:0 18px;font-size:14px;font-family:inherit;color:var(--ink);background:#fff;transition:.2s}
.ec-input::placeholder{color:var(--muted)}
.ec-input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.ec-send{flex:0 0 auto;height:42px;padding:0 20px;border:0;border-radius:999px;cursor:pointer;
  background:var(--green);color:#fff;font-size:14px;font-family:inherit;
  display:inline-flex;align-items:center;gap:6px;transition:.2s}
.ec-send:hover{background:var(--green-2)}
.ec-enter{font-size:12px;opacity:.85}
@media (max-width:560px){
  .ec-brand{display:none}
  .ec-send{padding:0 14px}
}

/* ===== 短篇随笔 · 内联编辑器（图标风格：圆角输入框，框内下方左侧＋、右侧可见性与发布） ===== */
.essay-editor{border:1px solid var(--line);border-radius:16px;background:#fff;
  padding:14px 16px 10px;margin-bottom:16px;cursor:text;transition:border-color .2s,box-shadow .2s}
.essay-editor:hover{border-color:#D8D0BE}
.essay-editor.is-open,.essay-editor:focus-within{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
/* 随笔输入框：外层 .essay-editor 已提供编辑态边框，内层保持无边框，避免双层套框 */
.ee-input{width:100%;box-sizing:border-box;resize:vertical;min-height:44px;
  font-size:14.5px;line-height:1.75;font-family:inherit;color:var(--ink);
  border:0;background:transparent;outline:none}
.ee-input::placeholder{color:var(--muted)}
.ee-input:focus{border:0;box-shadow:none;background:transparent;outline:none}
.ee-bar{display:flex;align-items:center;gap:10px;min-height:36px}
.ee-post{margin-left:auto}
.ee-vis{border:1px solid var(--line);background:var(--green-tint);color:var(--green-2);
  border-radius:999px;padding:5px 12px;font-size:12.5px;font-family:inherit;cursor:pointer;transition:.2s;margin-left:auto}
.ee-vis:hover{border-color:var(--green);background:var(--green-soft)}
.ee-post~.ee-vis,.ee-vis+.ee-post{margin-left:0}
.ee-cancel{border:0;background:none;color:var(--muted);font-size:12.5px;
  font-family:inherit;cursor:pointer;padding:5px 6px}
.ee-cancel:hover{color:var(--ink)}
/* 未登录提示 */
.essay-editor-idle{display:flex;align-items:center;gap:8px;cursor:pointer;
  color:var(--muted);font-size:14px;min-height:54px}
.essay-editor-idle:hover{border-color:var(--green);color:var(--green-2);background:var(--green-tint)}
/* ===== 纪念文章 · 卡片内联编辑器（嵌在文章卡片「编辑/删除」按钮下方，替代原弹窗） ===== */
.article-editor{padding:16px 18px 12px;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft);margin-top:12px}
/* 文章标题：与正文一致的四周完整浅灰细线边框（聚焦时随全站主题着色，避免只有底部有色） */
.ae-title{width:100%;box-sizing:border-box;font-family:inherit;
  font-size:16px;font-weight:600;color:var(--ink-strong);letter-spacing:.5px;
  border:1px solid var(--line);border-radius:10px;background:#fff;
  padding:9px 12px;margin-bottom:10px;outline:none;transition:border-color .2s,box-shadow .2s}
.ae-title::placeholder{color:var(--muted);font-weight:400}
.ae-title:focus{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.article-editor .ae-input{min-height:120px}
/* 文章编辑器底部操作栏：不再画分隔线，仅留白间距 */
.article-editor .ee-bar{margin-top:8px}
.ee-ico{font-size:15px}
.uploader{border:1px dashed var(--line);border-radius:12px;padding:18px;text-align:center;
  color:var(--muted);cursor:pointer;transition:.2s;background:var(--green-tint)}
.uploader:hover{border-color:var(--green);color:var(--green-2)}
.preview{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.preview img,.preview video{width:84px;border-radius:10px}
/* 视频多分辨率上传区 */
.quals-box{margin-top:10px;border:1px solid var(--line);border-radius:12px;padding:10px;background:var(--bg2);display:flex;flex-direction:column;gap:8px}
.quals-head{font-size:13px;color:var(--muted);margin-bottom:2px}
.quals-list{display:flex;flex-direction:column;gap:8px}
.quals-row{display:flex;align-items:center;gap:8px}
.quals-row .qf{flex:1;min-width:0;font-size:13px}
.quals-row .ql{flex:0 0 120px;width:120px;padding:7px 9px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:var(--bg);color:var(--text)}
.quals-row .qdel{flex:0 0 auto;width:28px;height:28px;border:0;border-radius:8px;background:var(--danger-tint,#fdecec);color:var(--danger,#c0392b);cursor:pointer;font-size:16px;line-height:1}
.quals-box .btn.sm{padding:5px 10px;align-self:flex-start}
/* 已选文件列表（上传前逐条预览，按钮置于其下方） */
.um-list{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.um-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);
  border-radius:10px;background:var(--bg2);font-size:13px;color:var(--text)}
.um-item .um-ico{flex:0 0 auto;font-size:15px;line-height:1}
.um-item .um-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.um-item .um-size{flex:0 0 auto;color:var(--muted);font-size:12px}
.um-item .um-del{flex:0 0 auto;width:24px;height:24px;border:0;border-radius:7px;
  background:var(--danger-tint,#fdecec);color:var(--danger,#c0392b);cursor:pointer;font-size:15px;line-height:1}
.um-item .um-del:hover{background:var(--danger,#c0392b);color:#fff}
/* 创建纪念表单内的封面预览：稍大一些便于确认 */
#mk_cover_prev img{width:120px;border-radius:12px;border:1px solid var(--line);box-shadow:var(--shadow-sm)}

/* ===== 动画 ===== */
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@keyframes glow{0%,100%{opacity:.7;transform:translateX(-50%) scale(1)}50%{opacity:1;transform:translateX(-50%) scale(1.08)}}
/* 尊重系统「减少动态效果」偏好：关闭轮播滑动与呼吸光晕 */
@media (prefers-reduced-motion:reduce){
  .hero-track{transition:none}
  .hero-slide.is-in .hero-inner{animation:none}
  .hero-glow{animation:none}
}

/* ===== 回到顶部悬浮按钮 ===== */
.to-top{
  position:fixed;right:24px;bottom:28px;z-index:90;
  width:46px;height:46px;border:none;border-radius:50%;
  background:var(--green);color:#fff;cursor:pointer;
  display:grid;place-items:center;
  box-shadow:0 10px 26px rgba(3,46,126,.32);
  opacity:0;visibility:hidden;transform:translateY(12px) scale(.92);
  transition:opacity .28s ease,transform .28s ease,visibility .28s,background .2s;
  -webkit-tap-highlight-color:transparent;
}
.to-top svg{width:22px;height:22px;display:block}
.to-top:hover{background:var(--green-2)}
.to-top:active{transform:translateY(2px) scale(.96)}
.to-top.show{opacity:1;visibility:visible;transform:translateY(0) scale(1)}
@media (max-width:768px){
  .to-top{right:16px;bottom:18px;width:42px;height:42px}
  .to-top svg{width:20px;height:20px}
}

/* ===== 响应式 ===== */
@media (max-width:900px){
  .layout{display:block}
  .sidebar{position:fixed;top:0;left:0;height:100vh;z-index:60;transform:translateX(-100%);
    transition:transform .28s ease;box-shadow:0 0 40px rgba(0,0,0,.15)}
  .sidebar.open{transform:translateX(0)}
  /* 移动端显示顶栏汉堡：2026-10-24 起侧栏抽屉入口从底部「我」改为顶栏最左侧的 ☰ 图标
     （底部 Tab 只保留 4 个路由入口，见 bottom-tab.js） */
  .menu-toggle{display:flex;align-items:center;justify-content:center}
  .content{padding:22px 16px 10px}
  .topbar{padding:12px 16px}
  .sidebar-backdrop{position:fixed;inset:0;background:rgba(42,45,40,.35);z-index:55;display:none}
  .sidebar-backdrop.show{display:block}
  /* 移动端底部 Tab 导航：固定底部，主内容区让出高度 */
  .bottom-tab{display:flex}
  .main{padding-bottom:var(--tab-h)}
}

/* ===== 移动端底部 Tab 导航 ===== */
/* --tab-h：底部 Tab 导航的总高度（内容 + 安全区），供各处让位复用。
   注意：任何「页面底部附近的可点击元素」都必须靠它留出安全距离，
   否则会被 fixed 定位的底栏吞掉点击（z-index:50，见下方 .bottom-tab）。 */
:root{--tab-h:calc(57px + env(safe-area-inset-bottom,0px))}
.bottom-tab{display:none;position:fixed;left:0;right:0;bottom:0;z-index:50;
  height:var(--tab-h);
  padding-bottom:env(safe-area-inset-bottom,0px);
  background:rgba(255,255,255,.96);
  backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-top:1px solid var(--line);box-shadow:0 -4px 18px rgba(3,46,126,.08);
  align-items:stretch;justify-content:space-around}
.bt-item{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  border:0;background:transparent;color:var(--muted);cursor:pointer;font-family:inherit;
  padding:6px 0;min-height:0;transition:color .2s ease;-webkit-tap-highlight-color:transparent}
.bt-item .bt-ico{font-size:21px;line-height:1;transition:transform .2s ease}
.bt-item .bt-label{font-size:11px;line-height:1.2;letter-spacing:.5px}
.bt-item.active{color:var(--green-2)}
.bt-item.active .bt-ico{transform:translateY(-1px) scale(1.06)}
.bt-item:active{opacity:.7}
.bt-item:focus-visible{outline:2px solid var(--green-2);outline-offset:-3px}
@media (max-width:600px){
  .brand-domain{font-size:10px}
  .hero{padding:42px 18px 48px}
  /* 轮播：窄屏把翻页按钮移到底部两角，避免压住居中文案。
     注意：指示点 .hero-dots 是整行铺满（left:0;right:0）的容器，若与箭头垂直区间重叠，
     它会在 DOM 中后渲染而盖住箭头、吞掉点击（实测点「下一张」无反应）。
     故箭头下移到指示点所在行之下并抬高层级，二者互不遮挡 */
  .hero-slide{padding:44px 18px 96px}
  .hero-arrow{top:auto;bottom:12px;transform:none;width:36px;height:36px;z-index:4}
  .hero-arrow svg{width:17px;height:17px}
  .hero-arrow:active{transform:scale(.93)}
  .hero-prev{left:12px}
  .hero-next{right:12px}
  .hero-dots{bottom:50px;pointer-events:none}
  .hero-dot{pointer-events:auto}
  .chat-wrap{height:78vh}
  .chat-list{width:140px}
}
@media (max-width:480px){
  /* 窄屏登录态仅保留头像与退出，隐藏用户名文本，避免顶栏溢出 */
  .topbar-actions .uname{display:none}
}

/* ===== 独立评论区（参考网易云风格：标题 → 评论框 → 精彩评论列表） ===== */
.cmt-sec{margin-top:22px;border-top:2px solid #e8c7c7;padding-top:14px}
/* 折叠态：默认收起，由播放器封面的「评论」图标单击展开 / 双击收起 */
.cmt-sec.cmt-collapsed{display:none}
.cmt-head{display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.cmt-head-title{font-size:18px;font-weight:700;color:var(--ink-strong)}
.cmt-head-count{font-size:12.5px;color:var(--muted)}
/* 评论输入框：头像 + 输入区 + 工具行 */
.cmt-editor{display:flex;gap:12px;align-items:flex-start;margin-bottom:10px}
.cmt-editor-main{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}
.cmt-in{display:block;width:100%;min-height:64px;resize:vertical;border:0;outline:none;padding:10px 12px;
  font-size:13.5px;line-height:1.6;color:var(--ink);font-family:inherit;box-sizing:border-box}
.cmt-editor-bar{display:flex;align-items:center;gap:12px;padding:6px 10px;border-top:1px solid var(--line-soft);background:#fbfcfe}
.cmt-tools{display:flex;align-items:center;gap:4px}
.cmt-tool{width:26px;height:26px;padding:0;border:0;border-radius:7px;background:transparent;color:var(--muted);
  cursor:pointer;display:grid;place-items:center;transition:.16s}
.cmt-tool svg{width:18px;height:18px}
.cmt-tool:hover{color:var(--green-2);background:var(--green-tint)}
.cmt-count{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.cmt-editor-bar .cmt-count{margin-left:auto}
/* ===== 表情选择面板：点评论工具栏「表情」按钮弹出（挂 body + fixed 定位，避免被容器 overflow 裁掉） ===== */
.cmt-emoji-btn.on{color:var(--green-2);background:var(--green-tint)}
.cmt-emoji-pop{position:fixed;z-index:190;display:flex;flex-direction:column;
  background:#fff;border:1px solid var(--line);border-radius:14px;
  box-shadow:0 14px 34px rgba(42,45,40,.18);padding:8px 8px 6px;animation:emojiIn .18s ease both}
@keyframes emojiIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.emoji-tabs{display:flex;gap:2px;overflow-x:auto;padding-bottom:6px;border-bottom:1px solid var(--line-soft);scrollbar-width:none}
.emoji-tabs::-webkit-scrollbar{height:0}
.emoji-tab{flex:0 0 auto;width:28px;height:28px;padding:0;border:0;border-radius:8px;background:transparent;
  font-size:16px;line-height:1;cursor:pointer;transition:.15s}
.emoji-tab:hover{background:var(--green-tint)}
.emoji-tab.on{background:var(--green-tint);box-shadow:inset 0 0 0 1px var(--line)}
.emoji-grid{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(34px,1fr));
  gap:2px;overflow:auto;padding:6px 2px 2px}
.emoji-cell{width:100%;padding:5px 0;border:0;border-radius:8px;background:transparent;font-size:19px;
  line-height:1.1;cursor:pointer;transition:transform .12s,background .12s}
.emoji-cell:hover{background:var(--green-tint);transform:scale(1.16)}
.emoji-empty{grid-column:1/-1;text-align:center;color:var(--muted);font-size:12.5px;padding:22px 0}
.emoji-foot{display:flex;align-items:center;gap:8px;padding:5px 4px 0;border-top:1px solid var(--line-soft);margin-top:2px}
.emoji-foot-label{font-size:11.5px;color:var(--muted)}
.emoji-foot-n{margin-left:auto;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
/* ===== @ 用户选择面板（评论工具栏「@某人」按钮） ===== */
.cmt-at-btn.on{color:var(--green-2);background:var(--green-tint)}
.cmt-at-pop{position:fixed;z-index:190;display:flex;flex-direction:column;background:#fff;
  border:1px solid var(--line);border-radius:14px;box-shadow:0 14px 34px rgba(42,45,40,.18);
  padding:8px;animation:emojiIn .18s ease both}
.cmt-at-search{padding:2px 2px 8px;border-bottom:1px solid var(--line-soft);margin-bottom:6px}
.cmt-at-input{width:100%;height:32px;padding:0 10px;border:1px solid var(--line);border-radius:9px;
  background:#fbfcfe;font-size:13px;color:var(--ink-strong);outline:none;transition:.15s}
.cmt-at-input:focus{border-color:var(--green-2);background:#fff;box-shadow:0 0 0 3px var(--green-tint)}
.cmt-at-list{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:2px}
.cmt-at-item{display:flex;align-items:center;gap:9px;width:100%;padding:7px 8px;border:0;border-radius:9px;
  background:transparent;cursor:pointer;text-align:left;transition:.14s}
.cmt-at-item:hover{background:var(--green-tint)}
.cmt-at-av{flex:0 0 auto;width:28px;height:28px;border-radius:50%;background-size:cover;background-position:center;
  background-color:var(--green-tint)}
.cmt-at-ph{display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff;background:var(--brand,#3b82f6)}
.cmt-at-info{display:flex;flex-direction:column;min-width:0;gap:1px}
.cmt-at-name{font-size:13px;color:var(--ink-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmt-at-sub{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmt-at-tip{padding:16px 8px;text-align:center;font-size:12.5px;color:var(--muted)}
/* 评论正文里被 @ 到的高亮 */
.cmt-at{color:var(--green-2);font-weight:600}
.cmt-post{padding:5px 18px;font-size:13px}
.cmt-login{margin:0 0 12px}
.cmt-login .empty-click{width:100%}
/* 头像 */
.cmt-av{display:inline-block;flex:none;border-radius:50%;background:#dbe4f5 center/cover no-repeat;
  width:40px;height:40px}
.cmt-av.lg{width:44px;height:44px}
.cmt-av.sm{width:36px;height:36px}
.cmt-av.xs{width:28px;height:28px}
.cmt-av-ph{display:grid;place-items:center;background:linear-gradient(135deg,var(--green),var(--green-2));
  color:#fff;font-size:15px;font-weight:600}
.cmt-av.sm.cmt-av-ph{font-size:14px}
.cmt-av.xs.cmt-av-ph{font-size:12px}
/* 精彩评论标题 */
.cmt-hot-title{font-size:13.5px;font-weight:700;color:var(--ink-strong);margin:16px 0 6px;
  padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.cmt-empty{color:var(--muted);font-size:13px;padding:22px 0;text-align:center}
/* 评论列表 */
.cmt-list{display:flex;flex-direction:column}
.cmt-item{display:flex;gap:12px;padding:14px 0;border-bottom:1px dashed var(--line-soft)}
.cmt-body{flex:1 1 auto;min-width:0}
.cmt-name-row{display:flex;align-items:center;gap:8px}
.cmt-name{font-size:13px;color:#4a7bb5;font-weight:600}
.cmt-del{border:0;background:transparent;color:#b9bfc7;font-size:12px;cursor:pointer;
  padding:1px 6px;border-radius:6px;transition:.16s}
.cmt-del:hover{color:#e0245e;background:#fdeef3}
/* 仍留在昵称行里的删除按钮（视频评论区 .vcmt-body）靠右：
   用 body 的类限定，避免影响已移入 .cmt-ops 的独立评论区删除按钮。 */
.vcmt-body .cmt-name-row .cmt-del{margin-left:auto}
.cmt-text{font-size:13.5px;line-height:1.7;color:var(--ink);margin:4px 0 0;word-break:break-word}
.cmt-foot{display:flex;align-items:center;gap:12px;margin-top:7px}
.cmt-date{font-size:12px;color:var(--muted)}
/* 时间在左、操作在右：点赞/回复（含评论级「删除」）整组靠右对齐。
   独立评论区的「删除」已从昵称行移入 .cmt-ops，故此处显式清零 margin-left，
   否则它会在 ops 内部把自己顶到最右，把点赞/回复挤到中间。 */
.cmt-ops{margin-left:auto;display:flex;align-items:center;gap:16px}
.cmt-ops .cmt-del{margin-left:0}
.cmt-like{display:inline-flex;align-items:center;gap:4px;border:0;background:transparent;color:var(--muted);
  font-size:12.5px;cursor:pointer;padding:2px 4px;border-radius:6px;transition:.16s}
.cmt-like svg{width:15px;height:15px}
.cmt-like:hover{color:#4a7bb5}
.cmt-like.on{color:#4a7bb5}
.cmt-like-n{font-variant-numeric:tabular-nums}
.cmt-reply{border:0;background:transparent;color:var(--muted);font-size:12.5px;cursor:pointer;padding:2px 4px;
  border-radius:6px;transition:.16s}
.cmt-reply:hover{color:#4a7bb5}
/* 回复输入框（内联展开） */
.cmt-reply-box{margin-top:9px;border:1px solid var(--line);border-radius:9px;background:#fff;overflow:hidden}
.cmt-reply-in{display:block;width:100%;min-height:46px;resize:vertical;border:0;outline:none;padding:9px 11px;
  font-size:13px;line-height:1.6;color:var(--ink);font-family:inherit;box-sizing:border-box}
.cmt-reply-actions{display:flex;align-items:center;gap:8px;justify-content:flex-end;padding:6px 10px;
  border-top:1px solid var(--line-soft);background:#fbfcfe}
.cmt-reply-actions .cmt-count{margin-right:auto}
/* 子回复（楼层内嵌套） */
.cmt-replies{margin-top:10px;background:#f7f9fc;border-radius:9px;padding:4px 12px}
.cmt-sub{display:flex;gap:9px;padding:8px 0;border-top:1px dashed var(--line-soft)}
.cmt-sub:first-child{border-top:0}
.cmt-sub-body{flex:1 1 auto;min-width:0}
.cmt-sub-head{display:flex;align-items:baseline;gap:8px}
.cmt-sub .cmt-text{font-size:13px;margin-top:2px}
.cmt-sub .cmt-name{font-size:12.5px}
@media (max-width:640px){
  .cmt-av.lg{width:36px;height:36px}
  .cmt-editor{gap:9px}
  .cmt-ops{gap:12px}
}

/* ===== 视频级评论区（内联在视频卡片信息栏下方；宽度 = 视频播放器宽度） =====
   点击头像就地展开，再点头像/点「收起」/Esc 收起；收起后节点移除，页面不占位 */
.vcmt-panel{width:100%;background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow-sm);overflow:hidden;opacity:0;transform:translateY(-5px);
  transition:opacity .18s ease,transform .18s ease}
.vcmt-panel.open{opacity:1;transform:none}
.vcmt-head{display:flex;align-items:center;gap:8px;padding:10px 13px 9px;
  border-bottom:1px solid var(--line-soft);background:#f7f8fa}
.vcmt-head-title{font-size:14px;font-weight:700;color:var(--ink-strong)}
.vcmt-head-count{font-size:12px;color:var(--muted)}
.vcmt-collapse{margin-left:auto;border:0;background:transparent;color:var(--muted);cursor:pointer;
  font-size:12.5px;padding:3px 7px;border-radius:7px;transition:background .16s,color .16s;flex:none}
.vcmt-collapse:hover{background:#e8ebef;color:var(--green-2)}
.vcmt-body{padding:12px 13px 13px;max-height:420px;overflow:auto}
.vcmt-body .cmt-editor{margin-bottom:10px}
.vcmt-body .cmt-item:last-child{border-bottom:0}
/* 头像入口的展开态高亮，提示「再点一次可收起」 */
.mi-ava-btn.on{box-shadow:0 0 0 2px rgba(59,130,246,.6)}

/* ===== 图片评论：编辑器内的配图预览 + 评论列表里的配图 ===== */
.cmt-img-prev{display:flex;align-items:center;gap:9px;padding:9px 11px 0}
.cmt-img-prev[hidden]{display:none}
.cmt-img-thumb{width:60px;height:60px;flex:none;border-radius:9px;border:1px solid var(--line);
  background:#f2f4f7 center/cover no-repeat;cursor:zoom-in;transition:transform .16s}
.cmt-img-thumb:hover{transform:scale(1.04)}
.cmt-img-tip{font-size:12px;color:var(--muted);min-width:0}
.cmt-img-load{font-size:12px;color:var(--muted)}
.cmt-img-del{margin-left:auto;flex:none;border:0;background:transparent;color:var(--muted);cursor:pointer;
  font-size:19px;line-height:1;padding:2px 7px;border-radius:7px;transition:background .16s,color .16s}
.cmt-img-del:hover{color:#e0245e;background:#fdeef3}
/* 评论列表中的配图（点击可看大图） */
.cmt-img{margin:8px 0 0;max-width:280px}
.cmt-img img{display:block;width:100%;height:auto;border-radius:10px;border:1px solid var(--line);cursor:zoom-in}

/* 视频转码中覆盖层 */
.vp-transcoding{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:rgba(0,0,0,.72);color:#fff;font-size:13px;z-index:6;text-align:center;padding:8px}
.vp-tc-spin{width:26px;height:26px;border:3px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:vp-spin 1s linear infinite}
@keyframes vp-spin{to{transform:rotate(360deg)}}
/* 音频转码中提示 + 下载原声 */
.audio-item{position:relative}
.audio-item.au-transcoding{pointer-events:none;opacity:.55}
.au-tc{padding:8px 10px;color:#888;font-size:13px;background:#f5f5f7;border-radius:8px;margin-bottom:6px}
.au-dl{display:inline-block;margin-left:10px;color:#1a73e8;text-decoration:none;font-size:13px;vertical-align:middle}
.au-dl:hover{text-decoration:underline}

/* ---- 侧边栏折叠（桌面端）---- */
.side-collapse{display:flex;align-items:center;gap:10px;width:100%;border:0;background:var(--green-tint);color:var(--green-2);font-family:inherit;font-size:14px;padding:9px 13px;border-radius:10px;cursor:pointer;transition:filter .15s}
.side-collapse:hover{filter:brightness(.97)}
.side-collapse svg{width:18px;height:18px;flex:0 0 auto;transition:transform .2s}
.side-collapse .sc-label{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar.collapsed{width:64px;flex-basis:64px;transition:width .18s ease,flex-basis .18s ease}
.sidebar.collapsed .brand{justify-content:center;padding:4px 0 18px}
.sidebar.collapsed .sidenav a{justify-content:center;padding-left:0;padding-right:0}
.sidebar.collapsed .sidenav a .s-emoji{margin:0 auto}
.sidebar.collapsed .brand-text,
.sidebar.collapsed .s-label,
.sidebar.collapsed .s-group-title,
.sidebar.collapsed .s-group-head,
.sidebar.collapsed .sc-label{display:none}
.sidebar.collapsed .side-foot .side-user .uname{display:none}
.sidebar.collapsed .side-collapse{justify-content:center;padding-left:0;padding-right:0}
.sidebar.collapsed .side-collapse svg{transform:rotate(180deg)}
@media (max-width:900px){
  .side-collapse{display:none}
  .sidebar.collapsed{width:auto;flex:none}
  .sidebar.collapsed .brand{justify-content:flex-start;padding:4px 8px 18px}
  .sidebar.collapsed .brand-text{display:block}
  .sidebar.collapsed .s-label{display:inline}
  .sidebar.collapsed .s-group-title{display:inline}
  .sidebar.collapsed .s-group-head{display:flex}
  .sidebar.collapsed .sc-label{display:inline}
}

/* ===== 回收站（底部抽屉：仅查看时出现，其余时间不渲染任何 DOM） ===== */
.rec-drawer{position:fixed;inset:0;z-index:120}
.rec-drawer-mask{position:absolute;inset:0;background:rgba(42,45,40,.42);backdrop-filter:blur(3px);
  opacity:0;transition:opacity .22s ease}
.rec-drawer.show .rec-drawer-mask{opacity:1}
/* 面板不贴底：上移 28px 悬浮，四周圆角，避免紧贴窗口下沿显得局促 */
.rec-drawer-panel{position:absolute;left:0;right:0;bottom:28px;max-width:880px;margin:0 auto;
  max-height:calc(78vh - 28px);display:flex;flex-direction:column;
  background:#fff;border-radius:20px;box-shadow:0 12px 48px rgba(0,0,0,.22);
  transform:translateY(calc(100% + 28px));transition:transform .26s cubic-bezier(.22,.68,.32,1)}
.rec-drawer.show .rec-drawer-panel{transform:translateY(0)}
.rec-grip{width:44px;height:4px;border-radius:99px;background:var(--line);margin:10px auto 2px;flex:0 0 auto}
.rec-drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:8px 18px 12px;border-bottom:1px solid var(--line-soft);flex:0 0 auto}
.rec-drawer-title{font-size:16px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);letter-spacing:.5px}
.rec-drawer-title small{display:block;font-family:var(--font-sans);font-size:12px;font-weight:400;
  color:var(--muted);letter-spacing:0;margin-top:4px}
.rec-drawer-x{flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:1px solid var(--line-soft);
  background:#fff;color:var(--muted);display:grid;place-items:center;cursor:pointer;padding:0}
.rec-drawer-x svg{width:15px;height:15px}
.rec-drawer-x:hover{background:#f3f3f0;color:var(--ink)}
.rec-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-soft)}
.rec-item:last-child{border-bottom:0}
.rec-ico{flex:0 0 auto;min-width:42px;text-align:center;font-size:12px;color:#fff;background:var(--green-2);
  border-radius:8px;padding:3px 0}
.rec-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;color:var(--ink)}
.rec-acts{display:flex;gap:8px;flex:0 0 auto}
.rec-list{margin:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 18px 8px}
.rec-list .rec-item{padding:12px 0}
.rec-list .empty{padding:28px 0;color:var(--muted);font-size:13.5px;text-align:center}
.rec-meta{flex:0 1 auto;font-size:12.5px;color:var(--muted);display:flex;gap:8px;align-items:center;min-width:0;overflow:hidden}
.rec-meta .rec-time{white-space:nowrap;opacity:.85}
@media(max-width:600px){
  .rec-drawer-panel{bottom:16px;max-height:calc(86vh - 16px)}
  .rec-meta{display:none}
}
/* 侧边栏「设置」入口 */
.sidenav a.s-settings{margin-top:10px;color:#5a6b7d;border-top:1px solid var(--line-soft);padding-top:10px;cursor:pointer}
.sidenav a.s-settings .s-emoji{color:#5a6b7d}
.sidenav a.s-settings:hover{background:rgba(90,107,125,.12);color:#3f4d5c}
.sidenav a.s-settings.active{background:rgba(90,107,125,.14);color:#3f4d5c}
/* 侧边栏「消息提醒」入口（紧跟设置下方）+ 未读红点 */
.sidenav a.s-notif{color:#5a6b7d;cursor:pointer;position:relative}
.sidenav a.s-notif .s-emoji{color:#5a6b7d}
.sidenav a.s-notif:hover{background:rgba(90,107,125,.12);color:#3f4d5c}
.sidenav a.s-notif.active{background:rgba(90,107,125,.14);color:#3f4d5c}
.notif-badge{display:inline-block;min-width:18px;height:18px;padding:0 5px;margin-left:auto;
  border-radius:9px;background:#e5484d;color:#fff;font-size:11px;line-height:18px;
  text-align:center;font-weight:600;flex:none}
.notif-badge[hidden]{display:none}
/* 侧栏收起成窄条时，红点改为角标 */
.sidebar.collapsed a.s-notif .notif-badge{position:absolute;top:4px;right:6px;min-width:8px;height:8px;padding:0;margin:0;border-radius:4px;font-size:0}
/* ============ 消息提醒面板 ============ */
.nf-panel{display:flex;flex-direction:column;max-height:70vh;min-width:340px}
.nf-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.nf-head h3{margin:0;font-size:16px}
.nf-head-act{display:flex;gap:8px;margin-right:26px}
.nf-btn{border:1px solid var(--line-soft);background:#fff;border-radius:var(--radius-sm);
  padding:5px 10px;font-size:12.5px;color:#5a6b7d;cursor:pointer}
.nf-btn:hover{background:#f4f6f8;color:#3f4d5c}
.nf-btn:disabled{opacity:.6;cursor:default}
.nf-tip{font-size:12px;color:#8b98a5;margin:8px 0 4px}
.nf-list{margin-top:8px;overflow-y:auto;flex:1;min-height:80px}
.nf-item{display:flex;align-items:flex-start;gap:10px;padding:11px 10px;border-radius:var(--radius-sm);
  border:1px solid var(--line-soft);background:#fff;margin-bottom:8px;cursor:pointer;position:relative}
.nf-item:hover{background:#f7f9fb}
.nf-item.unread{background:#f2f7ff;border-color:#cfe0f7}
.nf-item.unread:hover{background:#eaf2fd}
.nf-av{width:34px;height:34px;border-radius:50%;flex:none;background-size:cover;background-position:center;
  background:#e9edf1 center/cover no-repeat}
.nf-ph{display:flex;align-items:center;justify-content:center;background:#8fa3b8;color:#fff;font-size:14px}
.nf-body{flex:1;min-width:0}
.nf-line1{display:flex;align-items:baseline;gap:5px}
.nf-actor{font-size:13.5px;font-weight:600;color:#2f3b47}
.nf-at{font-size:12.5px;color:#3b7ddd}
.nf-content{font-size:13px;color:#4b5865;margin:3px 0 4px;line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nf-meta{font-size:11.5px;color:#9aa5b1;display:flex;gap:5px;flex-wrap:wrap}
.nf-dot{color:#c8d0d8}
.nf-del{position:absolute;top:6px;right:6px;width:22px;height:22px;border:none;background:transparent;
  color:#b3bcc6;font-size:16px;line-height:1;cursor:pointer;border-radius:50%}
.nf-del:hover{background:#eef1f4;color:#5a6b7d}
.nf-empty{text-align:center;color:#9aa5b1;font-size:13px;padding:28px 12px}
.nf-empty-ico{font-size:30px;margin-bottom:8px;opacity:.7}
/* —— 内容治理通知（管理员删帖提示）：与 @ 提醒区分，红色警示语义 —— */
.nf-item.nf-mod{background:#fff7f7;border-color:#f6d5d5;cursor:default}
.nf-item.nf-mod:hover{background:#fdf0f0}
.nf-item.nf-mod.unread{background:#fff1f1;border-color:#f0bcbc}
.nf-item.nf-mod.unread:hover{background:#fdeaea}
.nf-mod-ico{display:flex;align-items:center;justify-content:center;background:#c73b3b;font-size:16px}
.nf-mod-actor{color:#b13535}
.nf-mod-snip{color:#8a6a2a;background:#fdf6e3;border-radius:3px;padding:0 3px}
.nf-mod-reason{font-size:12.5px;color:#8a3d3d;background:#fff;border:1px dashed #e8bcbc;
  border-radius:var(--radius-sm);padding:6px 8px;margin:4px 0 5px;line-height:1.5}
.nf-mod-noreason{color:#9aa5b1;border-style:solid;border-color:var(--line-soft)}
.nf-mod-tag{color:#b98a8a}
/* —— 内容恢复通知（管理员撤销误删）：绿色语义，与删除提示相对 —— */
.nf-item.nf-res{background:#f4fbf6;border-color:#cfe9d9;cursor:default}
.nf-item.nf-res:hover{background:#eaf7ef}
.nf-item.nf-res.unread{background:#eaf7ef;border-color:#b3ddc6}
.nf-item.nf-res.unread:hover{background:#e2f4ea}
.nf-res-ico{display:flex;align-items:center;justify-content:center;background:#2e8b57;font-size:16px}
.nf-res-actor{color:#1f7a4a}
.nf-res-snip{color:#2e6b4a;background:#e8f6ee;border-radius:3px;padding:0 3px}
.nf-res-reason{font-size:12.5px;color:#2f5f45;background:#fff;border:1px dashed #b5dcc7;
  border-radius:var(--radius-sm);padding:6px 8px;margin:4px 0 5px;line-height:1.5}
.nf-res-noreason{color:#9aa5b1;border-style:solid;border-color:var(--line-soft)}
.nf-res-tag{color:#7aa892}
@media (max-width:600px){
  .nf-panel{min-width:0}
  .nf-list{max-height:58vh}
}
/* ============ 设置弹窗 ============ */
.set-list{display:flex;flex-direction:column;gap:2px;margin:14px 0 4px}
.set-row{display:flex;align-items:flex-start;gap:14px;padding:14px 12px;border-radius:var(--radius-sm);
  border:1px solid var(--line-soft);background:#fff;margin-bottom:10px}
.set-row.danger{border-color:rgba(192,86,79,.3);background:rgba(192,86,79,.04)}
.set-main{flex:1 1 auto;min-width:0}
.set-label{font-size:14.5px;font-weight:600;color:var(--ink-strong);margin-bottom:4px}
.set-desc{font-size:12.5px;color:var(--muted);line-height:1.6}
.set-desc b{color:#c0564f;font-weight:600}
.set-ctl{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding-top:2px}
.set-ctl input{max-width:190px}
.danger-text{color:#c0564f}
.del-warn{font-size:13px;line-height:1.75;color:var(--ink);background:rgba(192,86,79,.07);
  border:1px solid rgba(192,86,79,.25);border-radius:var(--radius-sm);padding:12px 14px;margin:6px 0 16px}
.del-warn b{color:#c0564f}
.del-warn code{background:rgba(3,46,126,.08);padding:1px 6px;border-radius:4px;font-size:12.5px;color:var(--green-2)}
@media(max-width:600px){
  .set-row{flex-direction:column;align-items:stretch;gap:10px}
  .set-ctl{justify-content:flex-end}
  .set-ctl input{max-width:none;flex:1 1 auto}
}

/* ================= 内嵌写作编辑器 + 7 套排版模板（参考 WeDraft） ================= */
.wz-hint{font-size:12.5px;color:var(--muted);line-height:1.7;margin:0 0 14px;
  background:var(--green-tint);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 13px}
.wz-ed{display:flex;flex-direction:column;gap:12px}

/* 模板条 */
.wz-ed-tplbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px}
.wz-ed-tpllab{font-size:12.5px;color:var(--muted);letter-spacing:.5px;flex:0 0 auto}
.wz-tpls{display:flex;gap:6px;flex-wrap:wrap}
.wz-tpl{border:1px solid var(--line);background:#fff;color:var(--ink);font-size:12.5px;
  padding:5px 11px;border-radius:999px;cursor:pointer;transition:.18s;font-family:var(--font-sans)}
.wz-tpl:hover{border-color:rgba(3,46,126,.45);background:var(--green-tint);color:var(--green-2)}
.wz-tpl.active{background:var(--green);border-color:var(--green);color:#fff;font-weight:600;
  box-shadow:0 3px 10px rgba(3,46,126,.22)}
.wz-ed-tplnow{margin-left:auto;font-size:12.5px;color:var(--muted);flex:0 0 auto}
.wz-ed-tplnow b{color:var(--green-2)}

/* 两栏：左写右预览 */
.wz-ed-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.wz-ed-pane{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px;box-shadow:var(--shadow-sm);min-width:0}
.wz-tb{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding-bottom:10px;margin-bottom:10px;
  border-bottom:1px solid var(--line-soft)}
.wz-tbb{min-width:30px;height:30px;padding:0 9px;border:1px solid var(--line);background:#fff;border-radius:9px;
  color:var(--ink);font-size:12.5px;font-family:var(--font-sans);cursor:pointer;transition:.16s;line-height:1}
.wz-tbb:hover{background:var(--green-soft);border-color:rgba(3,46,126,.4);color:var(--green-2)}
.wz-tbb:active{transform:translateY(1px)}
.wz-tb-sep{width:1px;height:18px;background:var(--line);margin:0 3px}
.wz-tb-gap{flex:1 1 auto}
.wz-tbb-fmt{border-color:rgba(3,46,126,.35);color:var(--green-2);font-weight:600;padding:0 12px}
.wz-tbb-fmt:hover{background:var(--green);color:#fff;border-color:var(--green)}
.wz-inwrap{margin-bottom:10px}
.wz-title-in{width:100%;border:1px solid var(--line);background:#fff;border-radius:var(--radius-sm);
  padding:11px 13px;font-size:16.5px;font-weight:600;color:var(--ink-strong);font-family:var(--font-sans)}
.wz-title-in:focus{outline:none;border-color:rgba(3,46,126,.5);box-shadow:0 0 0 3px rgba(3,46,126,.08)}
.wz-body{width:100%;min-height:300px;resize:vertical;border:1px solid var(--line);background:#fff;
  border-radius:var(--radius-sm);padding:12px 13px;font-size:14.5px;line-height:1.85;color:var(--ink);
  font-family:var(--font-sans)}
.wz-body:focus{outline:none;border-color:rgba(3,46,126,.5);box-shadow:0 0 0 3px rgba(3,46,126,.08)}
.wz-ed-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.wz-ed-count{font-size:12.5px;color:var(--muted);flex:0 0 auto}
.wz-ed-tip{font-size:12px;color:var(--muted);opacity:.85;flex:1 1 auto;min-width:120px}
.wz-ed-foot .btn.primary{margin-left:auto}

/* 预览面板 */
.wz-pv-pane{position:sticky;top:14px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden;min-width:0}
.wz-pv-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:10px 14px;border-bottom:1px solid var(--line-soft);background:var(--bg2);
  font-size:12.5px;color:var(--muted);letter-spacing:.5px}
.wz-pv-theme{color:var(--green-2);font-weight:600}
.wz-pv-scroll{max-height:min(66vh,640px);overflow-y:auto;padding:22px 20px}
.wz-pv-scroll::-webkit-scrollbar{width:8px}

/* ---------- 排版样式（预览与详情页共用，保证所见即所得） ---------- */
.wz-art{--art-accent:#032E7E;--art-accent-soft:rgba(3,46,126,.12);--art-title-c:#032E7E;
  --art-text:#2A2D28;--art-quote-bg:#F2F6FE;--art-quote-line:#032E7E;--art-font:var(--font-sans);
  --art-indent:0;--art-gap:18px;--art-title-align:left;--art-title-border:0;
  font-family:var(--art-font);color:var(--art-text);font-size:16px;line-height:1.9;word-break:break-word}
.wz-art .wz-doc-title{margin:0 0 20px;font-size:23px;line-height:1.5;font-weight:700;
  color:var(--art-title-c);letter-spacing:.6px;text-align:var(--art-title-align);
  border-bottom:var(--art-title-border);padding-bottom:0}
.wz-art .wz-p{margin:0 0 var(--art-gap);text-indent:var(--art-indent);text-align:justify;
  letter-spacing:.2px}
.wz-art .wz-p:last-child{margin-bottom:0}
.wz-art h2.wz-h{margin:30px 0 14px;font-size:19px;line-height:1.55;font-weight:700;color:var(--art-title-c)}
.wz-art h3.wz-h{margin:24px 0 12px;font-size:17px;line-height:1.55;font-weight:700;color:var(--art-title-c)}
.wz-art h4.wz-h{margin:20px 0 10px;font-size:16px;line-height:1.55;font-weight:700;color:var(--art-title-c)}
.wz-art h2.wz-h::before{content:'';display:inline-block;width:4px;height:15px;border-radius:2px;
  background:var(--art-accent);margin-right:9px;vertical-align:-1px}
.wz-art .wz-quote{margin:18px 0;padding:12px 16px;background:var(--art-quote-bg);
  border-left:3px solid var(--art-quote-line);border-radius:0 8px 8px 0;font-size:15.5px;color:var(--art-text)}
.wz-art .wz-quote .wz-p,.wz-art .wz-quote p{margin:0;text-indent:0}
.wz-art .wz-hr{border:none;height:1px;background:var(--art-quote-line);opacity:.3;margin:26px auto;width:56%}
.wz-art ul,.wz-art ol{margin:0 0 var(--art-gap);padding-left:24px}
.wz-art li{margin:6px 0;line-height:1.85}
.wz-art li::marker{color:var(--art-accent)}
.wz-art strong{color:var(--art-accent);font-weight:700}
.wz-art em{font-style:normal;border-bottom:1px dashed var(--art-accent);padding-bottom:1px}
.wz-art mark{background:var(--art-accent-soft);color:inherit;padding:0 3px;border-radius:3px}
.wz-art code{background:var(--art-quote-bg);padding:1px 6px;border-radius:5px;font-size:14.5px}
.wz-art a{color:var(--art-accent);border-bottom:1px solid var(--art-accent-soft)}
.wz-art .wz-fig{margin:20px 0;text-align:center}
.wz-art .wz-fig img{max-width:100%;border-radius:10px;display:block;margin:0 auto}
.wz-art .wz-fig figcaption{margin-top:8px;font-size:13px;color:var(--muted);line-height:1.65}
.wz-art .wz-src{display:block;font-size:12px;opacity:.85}

/* 7 套模板配色 */
.wz-th-xiaoha{--art-accent:#B4622F;--art-accent-soft:rgba(180,98,47,.16);--art-title-c:#8C4A20;
  --art-text:#3B3226;--art-quote-bg:#FBF3E8;--art-quote-line:#B4622F;--art-font:var(--font-sans)}
.wz-th-xiaoha2{--art-accent:#2E9E6B;--art-accent-soft:rgba(46,158,107,.16);--art-title-c:#1E6B47;
  --art-text:#2C3A33;--art-quote-bg:#EDF7F1;--art-quote-line:#2E9E6B;--art-font:var(--font-sans)}
.wz-th-sujian{--art-accent:#8A8175;--art-accent-soft:rgba(138,129,117,.18);--art-title-c:#4A443C;
  --art-text:#3A3732;--art-quote-bg:transparent;--art-quote-line:#CFC7B8;--art-font:var(--font-serif);
  --art-indent:2em;--art-gap:20px}
.wz-th-sujian .wz-quote{border-left:none;border-top:1px solid #E4DED2;border-bottom:1px solid #E4DED2;
  border-radius:0;padding:14px 4px;text-align:justify}
.wz-th-mokan{--art-accent:#1A1A1A;--art-accent-soft:rgba(26,26,26,.12);--art-title-c:#111111;
  --art-text:#1F1F1F;--art-quote-bg:transparent;--art-quote-line:#1A1A1A;--art-font:var(--font-serif);
  --art-title-align:center;--art-title-border:2px solid #1A1A1A;--art-gap:20px}
.wz-th-mokan .wz-doc-title{padding-bottom:12px;letter-spacing:2px}
.wz-th-mokan h2.wz-h::before{display:none}
.wz-th-mokan h2.wz-h{text-align:center;border-bottom:1px solid #D8D8D8;padding-bottom:8px}
.wz-th-mokan .wz-quote{border-left:none;border-top:1px solid #1A1A1A;border-bottom:1px solid #1A1A1A;
  border-radius:0;padding:12px 4px;font-style:normal}
.wz-th-qinglan{--art-accent:#2F6E63;--art-accent-soft:rgba(47,110,99,.16);--art-title-c:#245850;
  --art-text:#2E3B39;--art-quote-bg:#F0F6F4;--art-quote-line:#2F6E63;--art-font:var(--font-serif)}
.wz-th-lantu{--art-accent:#032E7E;--art-accent-soft:rgba(3,46,126,.12);--art-title-c:#032E7E;
  --art-text:#2A2D28;--art-quote-bg:#F2F6FE;--art-quote-line:#032E7E;--art-font:var(--font-sans)}
.wz-th-zhusha{--art-accent:#B03A2E;--art-accent-soft:rgba(176,58,46,.14);--art-title-c:#8E2B22;
  --art-text:#3A2B28;--art-quote-bg:#FCF1EF;--art-quote-line:#B03A2E;--art-font:var(--font-sans)}

/* 详情页承载卡片 */
.art-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);padding:26px 28px;margin-top:14px}

/* ===== 梦境详情页（重设计）：吸顶栏 / byline / 点赞行 / 上下篇导航卡片 ===== */
/* 吸顶导航栏：返回 + 标题（省略）+ 跳转，长文阅读中随时可用。
   z-index 40：低于底部 Tab(50) 与弹窗(100)，避免盖住它们 */
.dm-topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:10px;
  margin:0 0 12px;padding:10px 2px;
  background:rgba(252,251,247,.92);backdrop-filter:saturate(180%) blur(12px);
  -webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line-soft)}
.dm-topbar .t-back,.dm-topbar .t-jump{flex:0 0 auto;width:38px;height:38px;border-radius:50%;
  border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:17px;
  display:grid;place-items:center;cursor:pointer;transition:.16s var(--ease,ease);padding:0}
.dm-topbar .t-back{font-size:24px;padding-bottom:3px}
.dm-topbar .t-back:hover,.dm-topbar .t-jump:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.dm-topbar .t-back:focus-visible,.dm-topbar .t-jump:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.dm-topbar .t-title{flex:1;min-width:0;font-family:var(--font-serif);font-size:15px;font-weight:600;
  color:var(--ink-strong);letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 作者 byline：首字头像圆点 + 加重作者名，紧贴文章卡片 */
.dm-byline{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:13px;color:var(--muted);line-height:1.4}
.dm-byline b{color:var(--ink);font-weight:600}
.dm-byline .dm-av{flex:0 0 auto;width:26px;height:26px;border-radius:50%;overflow:hidden;
  background:var(--green-soft);color:var(--green);display:grid;place-items:center;
  font-size:13px;font-weight:700;user-select:none}

/* 点赞行：主按钮独立成行；作者本人的编辑/删除跟在其后 */
.dm-like-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:16px 0 12px}
.dm-like-row .dm-own-ops{display:flex;gap:8px;margin-left:auto}

/* 上下篇导航卡片：左右双栏，带目标标题；空侧虚线置灰不可点 */
.dm-nav-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0 0 22px}
.dm-nav-card{display:flex;flex-direction:column;gap:4px;min-width:0;text-align:left;cursor:pointer;
  border:1px solid var(--line);background:var(--card);border-radius:var(--radius-sm);
  padding:12px 14px;font:inherit;transition:.16s var(--ease,ease)}
.dm-nav-card.next{text-align:right;align-items:flex-end}
.dm-nav-card:hover{border-color:var(--green);background:var(--green-tint);transform:translateY(-1px)}
.dm-nav-card:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.dm-nav-card .dm-nav-l{font-size:12px;color:var(--muted);letter-spacing:.5px}
.dm-nav-card .dm-nav-t{font-size:13.5px;font-weight:600;color:var(--ink-strong);line-height:1.45;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
.dm-nav-card.empty{cursor:default;opacity:.55;background:transparent;border-style:dashed;transform:none}
.dm-nav-card.empty:hover{border-color:var(--line);background:transparent;transform:none}
@media(max-width:480px){
  .dm-nav-cards{gap:8px}
  .dm-nav-card{padding:10px 12px}
  .dm-topbar .t-title{font-size:14.5px}
}

/* 跳转面板（梦境列表 + 搜索） */
.dm-jump-search{width:100%;margin:8px 0 10px;padding:9px 12px;border:1px solid var(--line);
  border-radius:var(--radius-sm);font-size:14px;font-family:inherit;background:var(--bg2);color:var(--ink)}
.dm-jump-search:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.dm-jump-list{max-height:min(56vh,420px);overflow:auto;display:flex;flex-direction:column;gap:6px;
  -webkit-overflow-scrolling:touch}
.dm-jump-item{display:flex;flex-direction:column;gap:2px;text-align:left;cursor:pointer;
  border:1px solid transparent;border-radius:var(--radius-sm);padding:9px 12px;
  background:var(--green-tint);transition:.16s var(--ease, ease)}
.dm-jump-item:hover{background:var(--green-soft);border-color:var(--line)}
.dm-jump-item:focus-visible{outline:2px solid var(--green);outline-offset:1px}
.dm-jump-item.cur{border-color:var(--green);background:var(--green-soft)}
.dm-jump-item.cur .dm-jump-t::after{content:"（当前）";font-size:11px;color:var(--green);margin-left:6px}
.dm-jump-t{font-size:14px;font-weight:600;color:var(--ink-strong);
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.dm-jump-m{font-size:12px;color:var(--muted)}

/* 窄屏堆叠 */
@media(max-width:980px){
  .wz-ed-grid{grid-template-columns:minmax(0,1fr)}
  .wz-pv-pane{position:static}
  .wz-pv-scroll{max-height:none}
  .wz-ed-tplnow{margin-left:0;width:100%}
}
@media(max-width:600px){
  .wz-ed-pane{padding:11px}
  .wz-body{min-height:220px}
  .wz-ed-tip{display:none}
  .art-card{padding:18px 16px}
  .wz-art .wz-doc-title{font-size:20px}
  .wz-art{font-size:15.5px}
}

/* ============================================================
   首页照片墙（三座）：不规则瀑布流 / 3D 旋转 / 响应式网格
   ============================================================ */
.photo-walls{margin:56px 0 8px;display:flex;flex-direction:column;gap:54px}
.wall-block{position:relative}
.wall-loading,.wall-empty{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:6px;min-height:150px;color:var(--muted);font-size:13.5px;letter-spacing:.5px;
  background:var(--green-tint);border:1px dashed var(--line);border-radius:var(--radius)}
.wall-empty span{font-size:12px;opacity:.75}

/* ① 不规则瀑布流：CSS multi-column，卡片高度随图片比例自然错落 */
.wall-masonry{column-count:4;column-gap:16px}
@media(max-width:1100px){.wall-masonry{column-count:3}}
@media(max-width:760px){.wall-masonry{column-count:2}}
@media(max-width:460px){.wall-masonry{column-count:1}}
.ms-item{position:relative;break-inside:avoid;margin:0 0 16px;border-radius:14px;overflow:hidden;
  cursor:zoom-in;background:var(--card);box-shadow:var(--shadow-sm);
  opacity:0;animation:wallIn .55s ease forwards;transition:transform .3s,box-shadow .3s}
.ms-item img{display:block;width:100%;height:auto;transition:transform .5s cubic-bezier(.2,.7,.3,1)}
.ms-item figcaption{position:absolute;left:0;right:0;bottom:0;padding:22px 12px 10px;
  color:#fff;font-size:12.5px;letter-spacing:.4px;
  background:linear-gradient(transparent,rgba(0,0,0,.62));
  opacity:0;transform:translateY(6px);transition:.3s}
.ms-item:hover{transform:translateY(-4px);box-shadow:0 14px 32px rgba(3,46,126,.18)}
.ms-item:hover img{transform:scale(1.07)}
.ms-item:hover figcaption{opacity:1;transform:none}

/* ② 3D 旋转照片墙：环形排布，自动旋转 + 拖拽 + 悬停暂停 */
.wall-ring{display:flex;justify-content:center;align-items:center;overflow:hidden;
  min-height:330px;padding:10px 0;perspective:1400px;user-select:none}
.ring-stage{position:relative;width:210px;height:250px;transform-style:preserve-3d;
  cursor:grab;transition:filter .2s}
.ring-stage.is-drag{cursor:grabbing}
.ring-inner{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform}
.ring-item{position:absolute;left:50%;top:50%;width:186px;height:236px;margin:-118px 0 0 -93px;
  border-radius:14px;overflow:hidden;background:var(--card);box-shadow:0 10px 26px rgba(3,46,126,.22);
  cursor:zoom-in;
  transform:rotateY(calc(var(--i) / var(--n) * 360deg)) translateZ(var(--ring-r))}
.ring-item img{width:100%;height:100%;object-fit:cover;display:block;
  -webkit-user-drag:none;transition:transform .4s}
.ring-item figcaption{position:absolute;left:0;right:0;bottom:0;padding:18px 10px 8px;
  color:#fff;font-size:12px;text-align:center;
  background:linear-gradient(transparent,rgba(0,0,0,.6))}
.ring-item:hover img{transform:scale(1.06)}
@media(max-width:640px){.ring-item{width:140px;height:178px;margin:-89px 0 0 -70px}
  .ring-stage{width:160px;height:190px}.wall-ring{min-height:250px}}

/* ③ 响应式网格：等宽平铺，悬停缩放 */
.wall-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.gd-item{position:relative;margin:0;aspect-ratio:1/1;border-radius:14px;overflow:hidden;cursor:zoom-in;
  background:var(--green-tint);box-shadow:var(--shadow-sm);
  opacity:0;animation:wallIn .55s ease forwards;transition:transform .3s,box-shadow .3s}
.gd-item img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.2,.7,.3,1)}
.gd-item:hover{transform:translateY(-4px);box-shadow:0 14px 32px rgba(3,46,126,.18)}
.gd-item:hover img{transform:scale(1.08)}
.gd-cap{position:absolute;left:0;right:0;bottom:0;padding:20px 12px 10px;color:#fff;font-size:12.5px;
  background:linear-gradient(transparent,rgba(0,0,0,.6));opacity:0;transform:translateY(6px);transition:.3s}
.gd-item:hover .gd-cap{opacity:1;transform:none}
@media(max-width:760px){.wall-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}

@keyframes wallIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
  .wall-masonry,.wall-ring,.wall-grid{animation:none}
  .ms-item,.gd-item{opacity:1;animation:none;transition:none}
  .ms-item:hover,.gd-item:hover{transform:none}
}

/* 管理员：照片墙图库管理 */
.admin-gallery{margin-top:6px}
.gal-upload-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.gal-wall-pick{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted)}
.gal-wall-pick select{padding:6px 10px;border:1px solid var(--line);border-radius:9px;font-family:inherit;
  font-size:13px;background:#fff;color:var(--ink)}
.gal-count{font-size:12.5px;color:var(--muted);margin-left:auto}
.gal-admin-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.gal-admin-item{position:relative;border-radius:12px;overflow:hidden;background:var(--green-tint);
  border:1px solid var(--line)}
.gal-admin-item img{width:100%;height:130px;object-fit:cover;display:block}
.gal-admin-meta{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:7px 9px}
.gal-tag{font-size:11px;padding:2px 8px;border-radius:999px;background:var(--green-soft);color:var(--green)}
.gal-del{border:0;background:transparent;font-size:15px;cursor:pointer;padding:2px 4px;border-radius:6px;
  transition:.18s;line-height:1}
.gal-del:hover{background:#fdecea;transform:scale(1.08)}

/* ============================================================
   祈福商城：扫码支付弹窗 + 管理员订单管理
   ============================================================ */
.pay-qr-box{text-align:center;max-width:340px;margin:0 auto}
.pay-qr-box h3{margin:0 0 6px}
.pay-goods{margin:0;color:var(--muted);font-size:14px}
.pay-amount{font-size:30px;font-weight:700;color:var(--gold);margin:8px 0 2px;letter-spacing:.5px}
.pay-order{margin:0 0 14px;color:var(--muted);font-size:12.5px}
.pay-tabs{display:flex;gap:8px;justify-content:center;margin-bottom:14px}
.pay-tab{flex:1;max-width:140px;padding:9px 0;border-radius:10px;border:1.5px solid var(--line);
  background:#fff;font-family:inherit;font-size:13.5px;cursor:pointer;transition:.18s;color:var(--ink)}
.pay-tab:hover{transform:translateY(-1px)}
.pay-tab-wechat.on{border-color:#07c160;color:#07c160;background:#f0fbf4;font-weight:600}
.pay-tab-alipay.on{border-color:#1677ff;color:#1677ff;background:#eef5ff;font-weight:600}
.pay-qr-wrap{display:flex;justify-content:center;margin-bottom:10px}
.pay-qr-wrap img{width:240px;max-width:100%;border-radius:12px;border:1px solid var(--line);
  box-shadow:var(--shadow-sm);background:#fff}
.pay-hint{font-size:12.5px;color:var(--muted);margin:0 0 14px}
.pay-note{font-size:11.5px;color:var(--muted);opacity:.8;margin:10px 0 0;line-height:1.6}

/* 管理员订单列表 */
.admin-orders{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.ord-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;
  background:var(--card);border:1px solid var(--line);border-radius:12px;font-size:13px}
.ord-row.ord-hot{border-color:#f0b429;background:linear-gradient(0deg,rgba(240,180,41,.07),rgba(240,180,41,.07)),var(--card)}
.ord-id{font-weight:700;color:var(--muted);min-width:44px}
.ord-user{min-width:80px}
.ord-goods{flex:1;min-width:120px}
.ord-amt{font-weight:700;color:var(--gold)}
.ord-st{font-size:12px;padding:2px 10px;border-radius:999px;background:var(--green-soft);color:var(--green)}
.ord-st.st-verifying{background:#fff4dd;color:#b07a00;font-weight:600}
.ord-st.st-paid,.ord-st.st-delivered{background:#e5f6ec;color:#1c7c46}
.ord-st.st-closed{background:#f1f2f4;color:#8a8f99}

/* 管理员内容治理台 */
.admin-mod{display:flex;flex-direction:column;gap:10px;margin-top:6px}
/* tab 切换：内容浏览 / 已删除 */
.am-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:-2px}
.am-tab{appearance:none;border:none;background:transparent;font-family:inherit;font-size:13.5px;
  color:var(--muted);padding:8px 14px;cursor:pointer;border-bottom:2px solid transparent;
  border-radius:8px 8px 0 0;transition:color .15s,border-color .15s,background .15s}
.am-tab:hover{color:var(--ink);background:var(--green-soft)}
.am-tab.active{color:var(--green);border-bottom-color:var(--green);font-weight:600}
.am-tab span{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.am-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.am-sel,.am-q{padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;
  font-family:inherit;background:#fff;color:var(--ink)}
.am-q{flex:1;min-width:160px}
.am-sel:focus,.am-q:focus{outline:none;border-color:var(--green)}
.am-hint{font-size:12px;color:var(--muted)}
.am-list{display:flex;flex-direction:column;gap:7px}
.am-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 13px;
  background:var(--card);border:1px solid var(--line);border-radius:11px;font-size:13px}
.am-row:hover{border-color:#d9c9a8}
.am-tag{font-size:11.5px;padding:2px 9px;border-radius:999px;background:var(--green-soft);
  color:var(--green);white-space:nowrap;flex:none}
.am-id{font-weight:700;color:var(--muted);min-width:42px;font-variant-numeric:tabular-nums}
.am-author{min-width:70px;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.am-author.anon{color:#b08a3e;font-style:italic}
.am-sum{flex:1;min-width:140px;color:#4b5865;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.am-time{font-size:12px;color:var(--muted);white-space:nowrap}
/* 已删除行：整体降饱和，突出「可恢复」 */
.am-row-del{background:linear-gradient(0deg,rgba(229,72,77,.04),rgba(229,72,77,.04)),var(--card);
  border-color:#f0d3d4}
.am-row-del:hover{border-color:#e7b3b5}
.am-tag.del{background:#fdecec;color:#c8342f}
.am-reason{font-size:12px;color:#a2652f;background:#fdf3e3;border:1px solid #f0e0c4;
  border-radius:8px;padding:2px 8px;max-width:200px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;flex:none}
.am-reason.noreason{color:var(--muted);background:transparent;border-color:transparent;font-style:italic}
.btn.am-restore{background:#e9f7ef;color:var(--green);border:1px solid #bfe6cd}
.btn.am-restore:hover{background:#dcf2e6;border-color:#a2d9ba}
@media (max-width:640px){
  .am-row{gap:6px;padding:8px 10px}
  .am-sum{flex-basis:100%;white-space:normal}
  .am-reason{max-width:100%}
}
.ord-time{color:var(--muted);font-size:12px}
.ord-acts{display:flex;gap:6px;margin-left:auto}
.empty{color:var(--muted);text-align:center;padding:18px 0;font-size:13.5px}

/* 订单管理：金额校验（实收录入 + 金额不符状态） */
.ord-bad{border-color:#e5484d;background:linear-gradient(0deg,rgba(229,72,77,.06),rgba(229,72,77,.06)),var(--card)}
.ord-st.st-mismatch{background:#fdeaea;color:#c62828;font-weight:600}
.ord-paid{font-size:12px;color:var(--muted)}
.ord-paid.bad{color:#c62828;font-weight:600}
.ord-paid.bad b{font-weight:700}
.ord-paidinput input{width:92px;padding:5px 8px;border:1px solid var(--line);border-radius:8px;
  font-family:inherit;font-size:12.5px;color:var(--ink);background:#fff}
.ord-paidinput input:focus{outline:none;border-color:var(--green)}

/* 支付弹窗：虚拟商品提示条 */
.pay-virtual{display:inline-block;font-size:12px;color:#8a6d1f;background:#fff8e6;
  border:1px solid #f0dfae;border-radius:8px;padding:6px 12px;margin:0 0 14px;line-height:1.5}

/* 灵符自动发货弹窗 */
.talisman-box{text-align:center}
.talisman-box h3{margin:4px 0 6px}
.talisman-tip{font-size:13px;opacity:.75;margin:0 0 12px;line-height:1.6}
.talisman-img{display:block;max-width:min(300px,78vw);max-height:56vh;margin:0 auto;border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.28)}

/* ===== 祈福商城：标签切换 ===== */
.pd-tabs{display:flex;gap:8px;margin:14px 0 18px;flex-wrap:wrap}
.pd-tab{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;
  padding:8px 18px;font-size:14px;cursor:pointer;font-family:inherit;transition:.18s}
.pd-tab:hover{border-color:var(--green-2);color:var(--green-2)}
.pd-tab.active{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;border-color:transparent;
  box-shadow:0 4px 14px rgba(3,46,126,.22)}

/* ===== 八卦算命 · 梅花易数 ===== */
.glass-panel{background:linear-gradient(160deg,rgba(255,255,255,.72),rgba(236,241,250,.55));
  backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);
  border:1px solid rgba(255,255,255,.75);border-radius:var(--radius);box-shadow:0 10px 34px rgba(3,46,126,.10),inset 0 1px 0 rgba(255,255,255,.8)}
.bagua-card{max-width:760px;margin:0 auto;padding:22px 22px 18px}
.bagua-head h3{margin:0 0 4px;font-size:19px;color:var(--green-2)}
.bagua-sub{margin:0 0 14px;font-size:13px;color:var(--muted);line-height:1.6}
.bagua-methods{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.bg-method{flex:1 1 auto;min-width:96px;border:1px solid var(--line);background:rgba(255,255,255,.6);color:var(--ink);
  border-radius:12px;padding:10px 8px;font-size:14px;cursor:pointer;font-family:inherit;transition:.18s}
.bg-method:hover{border-color:var(--green-2)}
.bg-method.active{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;border-color:transparent;box-shadow:0 4px 12px rgba(3,46,126,.2)}
.bagua-form{display:flex;flex-direction:column;gap:8px}
.bg-label{font-size:13px;color:var(--muted,#8a8a8a);margin-top:2px}
.bg-input-el{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:11px;padding:10px 12px;
  font-size:15px;font-family:inherit;background:rgba(255,255,255,.82);color:var(--ink);outline:none;transition:.18s}
.bg-input-el:focus{border-color:var(--green-2);box-shadow:0 0 0 3px rgba(3,46,126,.12)}
.bg-time{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
#bg_cast{box-shadow:0 6px 18px rgba(3,46,126,.18)}
.bagua-result{margin-top:18px}
.bg-overview{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;
  background:rgba(255,255,255,.6);border:1px solid var(--line);border-radius:14px;padding:14px 10px}
.bg-ti,.bg-yong{display:flex;flex-direction:column;align-items:center;font-size:14px;color:var(--ink);min-width:56px}
.bg-ti b,.bg-yong b{font-size:22px;color:var(--green-2)}
.bg-ti span,.bg-yong span{font-size:12px;color:var(--muted,#8a8a8a)}
.bg-rel{font-size:15px;font-weight:600;color:var(--gold,#b8860b);padding:0 4px}
.bg-grade{font-size:18px;font-weight:700;padding:6px 16px;border-radius:999px;color:#fff;background:var(--green)}
.ji-大吉,.ji-吉{background:linear-gradient(135deg,#1f9d57,#2bb673)}
.ji-平{background:linear-gradient(135deg,#3a7d5d,#5a9bd5)}
.ji-小凶{background:linear-gradient(135deg,#e08a2b,#e0a82b)}
.ji-凶,.ji-大凶{background:linear-gradient(135deg,#d9534f,#e06b6b)}
.bg-hexes{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}
.bg-hex{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:14px;padding:14px 10px;text-align:center}
.bg-hex-tag{font-size:12px;color:var(--muted,#8a8a8a);letter-spacing:2px}
.bg-hex-sym{font-size:34px;line-height:1.1;margin:6px 0;color:var(--green-2)}
.bg-hex-name{font-size:15px;font-weight:600;color:var(--ink-strong)}
.bg-hex-tuan{font-size:11px;color:var(--muted,#8a8a8a);margin:4px 0 8px;line-height:1.5;min-height:30px}
.bg-hex-ji{display:inline-block;font-size:12px;font-weight:700;color:#fff;border-radius:999px;padding:2px 12px;background:var(--green)}
.bg-lunar{margin-top:12px;font-size:13px;color:var(--muted,#8a8a8a);text-align:center}
.bg-verdict{background:rgba(255,255,255,.66);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-top:12px}
.bg-verdict b{display:block;margin-bottom:4px;color:var(--green-2);font-size:14px}
.bg-verdict p{margin:0;font-size:14px;line-height:1.75;color:var(--ink)}
.bg-saved{margin-top:12px;font-size:13px;color:#1f9d57;text-align:center}
.bg-saved.ghost{color:var(--muted,#8a8a8a)}
.bagua-disc{margin:16px 0 0;font-size:12px;color:var(--muted,#8a8a8a);line-height:1.7;text-align:center}
/* 八卦算命 · 占卦记录入口与记录面板 */
.bagua-head-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.bagua-head-titles{min-width:0}
.bg-records-btn{flex:0 0 auto;margin-top:2px;border:1px solid var(--green-2);background:rgba(255,255,255,.6);color:var(--green-2);
  border-radius:999px;padding:7px 14px;font-size:13px;cursor:pointer;white-space:nowrap;transition:.18s}
.bg-records-btn:hover{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;border-color:transparent;box-shadow:0 4px 12px rgba(3,46,126,.2)}
.bg-rec-box{max-width:680px;margin:0 auto}
.bg-rec-box h3{margin:0 0 6px;color:var(--green-2);font-size:18px}
.bg-rec-tip{margin:0 0 14px;font-size:13px;color:var(--muted,#8a8a8a);line-height:1.6}
.bg-rec-list{display:flex;flex-direction:column;gap:12px;max-height:62vh;overflow:auto;padding:2px}
.bg-rec-loading,.bg-rec-empty{text-align:center;color:var(--muted,#8a8a8a);font-size:14px;padding:24px 0}
.bg-rec-bar{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--muted,#8a8a8a);
  position:sticky;top:0;background:rgba(255,255,255,.92);backdrop-filter:blur(6px);padding:6px 2px;z-index:1}
.bg-rec-count{font-weight:600;color:var(--ink)}
.bg-rec-item{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.bg-rec-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bg-rec-grade{font-size:12px;font-weight:700;color:#fff;border-radius:999px;padding:2px 11px;background:var(--green)}
.bg-rec-badge{font-size:12px;color:var(--green-2);background:rgba(3,46,126,.08);border-radius:999px;padding:2px 10px}
.bg-rec-occ{font-size:13px;color:var(--ink)}
.bg-rec-time{margin-left:auto;font-size:12px;color:var(--muted,#8a8a8a)}
.bg-rec-del{margin-left:2px;border:1px solid var(--line);background:transparent;color:#d9534f;border-radius:999px;
  padding:3px 12px;font-size:12px;cursor:pointer;transition:.15s}
.bg-rec-del:hover{background:#d9534f;color:#fff;border-color:transparent}
.bg-rec-q{margin-top:8px;font-size:14px;color:var(--ink);line-height:1.6}
.bg-rec-ben{margin-top:6px;font-size:13px;color:var(--muted,#8a8a8a)}
.bg-rec-toggle{margin-top:10px;border:none;background:transparent;color:var(--green-2);font-size:13px;cursor:pointer;padding:2px 0}
.bg-rec-detail{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.bg-rec-detail .bagua-result{margin-top:0}
@media (max-width:560px){
  .bg-hexes{grid-template-columns:repeat(3,1fr);gap:8px}
  .bg-hex-sym{font-size:28px}
  .bg-time{grid-template-columns:repeat(2,1fr)}
}

/* 算运势 · 四柱八字 / 皇极经世 / 梅花流年卦 / 奇门择吉 */
.ys-card{max-width:760px;margin:0 auto;padding:22px 22px 18px}
.ys-row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ys-result{margin-top:18px}
.ys-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  background:linear-gradient(135deg,rgba(31,157,87,.12),rgba(58,125,93,.08));border:1px solid var(--line);
  border-radius:16px;padding:14px 16px}
.ys-banner-l{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0}
.ys-level{font-size:17px;font-weight:700;color:#fff;border-radius:999px;padding:6px 18px;background:var(--green)}
.ys-who{font-size:13px;color:var(--muted,#8a8a8a)}
.ys-score{font-size:13px;color:var(--muted,#8a8a8a)}
.ys-score b{font-size:22px;color:var(--gold,#b8860b);margin-left:6px}
.ys-sec{background:rgba(255,255,255,.66);border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-top:12px}
.ys-sec-t{display:block;margin-bottom:8px;color:var(--green-2);font-size:14px}
.ys-note{margin:0;font-size:13.5px;line-height:1.75;color:var(--ink)}
.ys-note b{color:var(--green-2)}
.ys-pillars{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.ys-pillar{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:12px;padding:10px 6px;text-align:center}
.ys-p-tag{font-size:12px;color:var(--muted,#8a8a8a);letter-spacing:2px}
.ys-p-gan{font-size:24px;font-weight:700;color:var(--green-2);line-height:1.3}
.ys-p-zhi{font-size:24px;font-weight:700;color:var(--ink-strong);line-height:1.3}
.ys-p-god{margin-top:4px;display:inline-block;font-size:11.5px;color:var(--green-2);background:rgba(3,46,126,.08);border-radius:999px;padding:1px 9px}
.ys-wx{margin-top:10px;display:flex;flex-direction:column;gap:5px}
.ys-wx-row{display:flex;align-items:center;gap:8px;font-size:12.5px}
.ys-wx-name{width:18px;color:var(--ink);font-weight:600}
.ys-wx-bar{flex:1;height:8px;border-radius:99px;background:rgba(3,46,126,.08);overflow:hidden}
.ys-wx-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--green),var(--green-2))}
.ys-wx-val{width:34px;text-align:right;color:var(--muted,#8a8a8a);font-variant-numeric:tabular-nums}
.ys-yun-list{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.ys-yun-step{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:10px;padding:8px 6px;text-align:center}
.ys-yun-step.on{border-color:var(--green-2);box-shadow:0 0 0 2px rgba(3,46,126,.14)}
.ys-yun-gz{display:block;font-size:15px;font-weight:700;color:var(--green-2)}
.ys-yun-age{display:block;font-size:11px;color:var(--muted,#8a8a8a);margin-top:2px}
.ys-yun-god{display:block;font-size:11.5px;color:var(--ink);margin-top:2px}
.ys-mh-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ys-mh{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:12px;padding:10px 6px;text-align:center}
.ys-mh span{display:block;font-size:12px;color:var(--muted,#8a8a8a)}
.ys-mh b{display:block;font-size:15px;color:var(--ink-strong);margin-top:3px}
.ys-mh i{display:inline-block;font-style:normal;font-size:11.5px;font-weight:700;color:#fff;border-radius:999px;padding:1px 10px;margin-top:5px;background:var(--green)}
.ys-jm-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ys-jm{font-size:13px;color:var(--ink);background:rgba(31,157,87,.1);border:1px solid var(--line);border-radius:999px;padding:4px 12px}
.ys-jm b{color:var(--green-2);margin-right:4px}
.ys-advice{margin:0 0 8px;padding-left:18px;font-size:13.5px;line-height:1.75;color:var(--ink)}
@media (max-width:560px){
  .ys-row2{grid-template-columns:1fr}
  .ys-pillars{grid-template-columns:repeat(4,1fr);gap:6px}
  .ys-p-gan,.ys-p-zhi{font-size:19px}
  .ys-yun-list{grid-template-columns:repeat(3,1fr)}
  .ys-banner{flex-direction:column;align-items:flex-start}
}

/* 随机算 · 随机抽取法门 */
.rd-card{max-width:760px;margin:0 auto;padding:22px 22px 18px}
.rd-actions{display:flex;margin-top:12px}
.rd-go{width:100%;font-size:16px;padding:12px 0}
.rd-result{margin-top:18px}
.rd-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.rd-mode{font-size:13px;font-weight:600;color:var(--green-2);background:rgba(3,46,126,.08);border-radius:999px;padding:4px 14px}
.rd-grade{font-size:13px;font-weight:700;color:#fff;border-radius:999px;padding:4px 14px;background:var(--green)}
.rd-again{margin-left:auto;border:1px solid var(--green-2);background:rgba(255,255,255,.6);color:var(--green-2);
  border-radius:999px;padding:5px 14px;font-size:13px;cursor:pointer;font-family:inherit;transition:.18s}
.rd-again:hover{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;border-color:transparent}
.rd-q{font-size:13px;color:var(--muted,#8a8a8a);margin-bottom:8px}
.rd-title{font-size:17px;font-weight:700;color:var(--ink-strong);margin:4px 0 10px}
.rd-body{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:14px;padding:12px 16px}
.rd-line{margin:4px 0;font-size:15px;line-height:1.9;color:var(--ink);letter-spacing:.5px;text-align:center}
.rd-yiji{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.rd-yi,.rd-ji{background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:14px;padding:10px 14px}
.rd-yi b,.rd-ji b{display:block;font-size:14px;margin-bottom:6px}
.rd-yi b{color:#1f9d57}
.rd-ji b{color:#d9534f}
.rd-yi span,.rd-ji span{display:inline-block;font-size:13px;color:var(--ink);background:rgba(3,46,126,.06);
  border-radius:999px;padding:3px 11px;margin:0 6px 6px 0}
.rd-yi span{background:rgba(31,157,87,.1)}
.rd-ji span{background:rgba(217,83,79,.1)}
.rd-cite{margin-top:10px;font-size:12.5px;color:var(--muted,#8a8a8a);text-align:right}
.rd-classics{margin-top:4px;font-size:11.5px;color:var(--muted,#8a8a8a);line-height:1.6}
@media (max-width:560px){
  .rd-yiji{grid-template-columns:1fr}
  .rd-line{font-size:14px;text-align:left}
}

/* ===== 姻缘测算 · 八字合婚 ===== */
.hh-card,.em-card{max-width:760px;margin:0 auto;padding:22px 22px 18px}
.hh-form{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:14px 0}
.hh-side{border:1px solid var(--line,#eee);border-radius:12px;padding:12px;background:rgba(255,255,255,.55)}
.hh-side-tag{font-size:13px;font-weight:700;color:var(--green,#3a7d5d);margin-bottom:8px}
.hh-result{margin-top:16px}
.hh-score{text-align:center;padding:14px;border-radius:14px;
  background:linear-gradient(135deg,rgba(212,175,55,.14),rgba(255,255,255,.6));border:1px solid rgba(212,175,55,.3)}
.hh-score-num{font-size:40px;font-weight:800;color:var(--gold,#d4af37);line-height:1}
.hh-score-lv{font-size:14px;font-weight:700;margin:6px 0 8px;color:var(--ink,#333)}
.hh-bar{height:8px;border-radius:99px;background:rgba(0,0,0,.08);overflow:hidden;margin-top:8px}
.hh-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--green,#3a7d5d),var(--gold,#d4af37))}
.hh-persons{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.hh-person{border:1px solid var(--line,#eee);border-radius:12px;padding:12px;background:rgba(255,255,255,.55)}
.hh-p-name{font-size:15px;font-weight:700;margin-bottom:8px}
.hh-p-name span{font-size:12px;font-weight:400;color:var(--muted,#8a8a8a);margin-left:6px}
.hh-pillars{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.hh-p-dm{margin-top:8px;font-size:12px;color:var(--muted,#8a8a8a)}
.hh-pairs{margin-top:14px;display:grid;gap:10px}
.hh-pair{border:1px solid var(--line,#eee);border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.55)}
.hh-pair-t{font-size:12px;color:var(--muted,#8a8a8a)}
.hh-pair-v{font-size:16px;font-weight:700;margin:2px 0}
.hh-pair-v span{margin:0 6px;color:var(--gold,#d4af37)}
.hh-pair-rel{display:inline-block;font-size:12px;font-weight:700;padding:2px 10px;border-radius:99px;margin:4px 0 6px}
.hh-pair-rel.good{background:rgba(58,125,93,.14);color:var(--green,#3a7d5d)}
.hh-pair-rel.mid{background:rgba(0,0,0,.06);color:var(--muted,#8a8a8a)}
.hh-pair-rel.bad{background:rgba(198,72,72,.12);color:#c64848}
.hh-pair p{font-size:13px;line-height:1.7;color:var(--ink,#333);margin:0}
.hh-verdict,.hh-advice{margin-top:14px;border-left:3px solid var(--gold,#d4af37);padding:10px 12px;
  background:rgba(212,175,55,.07);border-radius:0 10px 10px 0}
.hh-verdict b,.hh-advice b{display:block;margin-bottom:6px}
.hh-verdict p{margin:0;font-size:13px;line-height:1.8}
.hh-advice ul{margin:0;padding-left:18px;font-size:13px;line-height:1.9}
@media (max-width:560px){
  .hh-form{grid-template-columns:1fr}
  .hh-persons{grid-template-columns:1fr}
  .hh-score-num{font-size:34px}
}

/* ===== 情感分析 · 心事解读 ===== */
.em-textarea{width:100%;resize:vertical;font-family:inherit;font-size:14px;line-height:1.7;
  padding:10px;border-radius:10px;border:1px solid var(--line,#eee);box-sizing:border-box}
.em-quick{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.em-quick button{border:1px solid var(--line,#eee);background:#fff;border-radius:99px;
  padding:5px 12px;font-size:12px;cursor:pointer;color:var(--muted,#8a8a8a);font-family:inherit}
.em-quick button:hover{border-color:var(--green,#3a7d5d);color:var(--green,#3a7d5d)}
.em-result{margin-top:16px}
.em-top{display:flex;align-items:center;gap:14px}
.em-pol{font-size:20px;font-weight:800;padding:8px 18px;border-radius:12px}
.em-pol.good{background:rgba(58,125,93,.14);color:var(--green,#3a7d5d)}
.em-pol.bad{background:rgba(198,72,72,.13);color:#c64848}
.em-pol.mid{background:rgba(0,0,0,.06);color:var(--muted,#8a8a8a)}
.em-meta{font-size:12.5px;color:var(--muted,#8a8a8a);line-height:1.9}
.em-meta b{color:var(--ink,#333)}
.em-bar{height:8px;border-radius:99px;background:rgba(0,0,0,.08);overflow:hidden;margin-top:10px}
.em-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#6aa9f0,#c64848)}
.em-crisis{margin-top:12px;padding:12px 14px;border-radius:12px;background:rgba(198,72,72,.12);
  border:1px solid rgba(198,72,72,.3);color:#a33;font-size:13px;line-height:1.8}
.em-sec{margin-top:14px}
.em-sec>b{display:block;font-size:13px;margin-bottom:8px;color:var(--ink,#333)}
.em-emo{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.em-emo span{width:56px;font-size:13px}
.em-emo-bar{flex:1;height:10px;border-radius:99px;background:rgba(0,0,0,.07);overflow:hidden}
.em-emo-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--green,#3a7d5d),var(--gold,#d4af37))}
.em-emo em{width:44px;font-size:12px;font-style:normal;color:var(--muted,#8a8a8a);text-align:right}
.em-kw{display:flex;flex-wrap:wrap;gap:6px}
.em-kw-item{padding:4px 12px;border-radius:99px;font-size:12.5px}
.em-kw-item.pos{background:rgba(58,125,93,.13);color:var(--green,#3a7d5d)}
.em-kw-item.neg{background:rgba(198,72,72,.12);color:#c64848}
.em-sents{display:grid;gap:6px}
.em-sent{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;
  background:rgba(255,255,255,.6);border:1px solid var(--line,#eee)}
.em-sent p{flex:1;margin:0;font-size:13px;line-height:1.6}
.em-sent span{font-size:12px;font-weight:700;width:38px;text-align:right}
.em-sent.pos span{color:var(--green,#3a7d5d)}
.em-sent.neg span{color:#c64848}
.em-sent.neu span{color:var(--muted,#8a8a8a)}
.em-sec ul{margin:0;padding-left:18px;font-size:13px;line-height:1.9}
.em-summary{margin-top:14px;padding:12px;border-radius:12px;background:rgba(0,0,0,.04);
  font-size:13px;line-height:1.8;color:var(--muted,#8a8a8a)}

/* ===== 心灵陪伴者 ===== */
.cp-card{max-width:760px;margin:0 auto;padding:22px 22px 18px}
.cp-head{display:flex;gap:14px;align-items:center;margin-bottom:14px}
.cp-avatar{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-size:26px;flex:none;
  background:linear-gradient(135deg,rgba(212,175,55,.2),rgba(255,255,255,.7));border:1px solid rgba(212,175,55,.4)}
.cp-head-t h3{margin:0 0 4px}
.cp-head-t .bagua-sub{margin:0}
.cp-body{max-height:420px;overflow-y:auto;padding:14px;border-radius:14px;
  background:rgba(255,255,255,.6);border:1px solid var(--line,#eee);display:flex;flex-direction:column;gap:10px}
.cp-msg{max-width:80%;padding:10px 14px;border-radius:14px;font-size:14px;line-height:1.75;word-break:break-word;white-space:pre-wrap}
.cp-bot{align-self:flex-start;background:#fff;border:1px solid var(--line,#eee);
  color:var(--ink,#333);border-bottom-left-radius:4px}
.cp-user{align-self:flex-end;background:var(--green,#3a7d5d);color:#fff;border-bottom-right-radius:4px}
.cp-typing{opacity:.6;font-style:italic}
.cp-mood{margin-top:10px;padding:8px 12px;border-radius:10px;font-size:12.5px}
.cp-mood.good{background:rgba(58,125,93,.12);color:var(--green,#3a7d5d)}
.cp-mood.bad{background:rgba(198,72,72,.1);color:#c64848}
.cp-mood.mid{background:rgba(0,0,0,.05);color:var(--muted,#8a8a8a)}
.cp-crisis{background:rgba(198,72,72,.14);border:1px solid rgba(198,72,72,.35);color:#a33;line-height:1.8}
.cp-quick{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.cp-quick button{border:1px solid var(--line,#eee);background:#fff;border-radius:99px;padding:6px 14px;
  font-size:12.5px;cursor:pointer;color:var(--muted,#8a8a8a);font-family:inherit}
.cp-quick button:hover{border-color:var(--green,#3a7d5d);color:var(--green,#3a7d5d)}
.cp-input{display:flex;gap:8px;margin-top:10px}
.cp-input input{flex:1;border:1px solid var(--line,#eee);border-radius:10px;padding:10px 12px;
  font-size:14px;font-family:inherit;box-sizing:border-box}
.cp-input button{border:0;background:var(--green,#3a7d5d);color:#fff;border-radius:10px;
  padding:0 18px;cursor:pointer;font-family:inherit}
.cp-bar{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
/* 记录详情中的对话回放 */
.cp-rec{display:flex;flex-direction:column;gap:8px}
.cp-rec-stats{font-size:12.5px;color:var(--muted,#8a8a8a);padding:6px 10px;border-radius:8px;background:rgba(0,0,0,.04)}
.cp-rec .cp-msg{max-width:100%;align-self:stretch}
.cp-rec-note{font-size:12.5px;color:var(--muted,#8a8a8a)}
@media (max-width:560px){
  .cp-body{max-height:340px}
  .cp-msg{max-width:90%}
  .cp-head{gap:10px}
  .cp-avatar{width:44px;height:44px;font-size:22px}
}

/* 智能客服浮窗（位置：桌面端上移至「回到顶部」按钮之上，避免 z-index:90 的回顶键遮挡浮标与面板） */
.chat-fab{position:fixed;right:18px;bottom:84px;z-index:60;background:var(--green,#3a7d5d);color:#fff;
  border:0;border-radius:24px;padding:10px 16px;font-size:13px;cursor:pointer;box-shadow:0 6px 18px rgba(0,0,0,.2);font-family:inherit}
.chat-panel{position:fixed;right:18px;bottom:132px;z-index:60;width:320px;max-width:92vw;height:430px;max-height:72vh;
  background:var(--bg2,#fff);border:1px solid var(--line,#eee);border-radius:14px;box-shadow:0 12px 40px rgba(0,0,0,.22);
  display:flex;flex-direction:column;overflow:hidden;font-family:inherit}
.chat-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;background:var(--green,#3a7d5d);color:#fff;font-size:14px;font-weight:600}
.chat-close{border:0;background:transparent;color:#fff;font-size:20px;line-height:1;cursor:pointer}
.chat-body{flex:1;overflow-y:auto;padding:14px;background:var(--bg,#f6f4ee)}
.chat-msg{margin:8px 0;padding:8px 11px;border-radius:10px;font-size:13px;line-height:1.6;max-width:88%;clear:both}
.chat-bot{background:#fff;border:1px solid var(--line,#eee);color:var(--ink,#333);float:left}
.chat-user{background:var(--green,#3a7d5d);color:#fff;float:right;text-align:right}
.chat-talisman{display:block;max-width:160px;margin-top:6px;border-radius:8px;box-shadow:0 4px 14px rgba(0,0,0,.15)}
.chat-quick{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px;border-top:1px solid var(--line,#eee)}
.chat-quick button{flex:1 1 auto;border:1px solid var(--green,#3a7d5d);background:#fff;color:var(--green,#3a7d5d);
  border-radius:8px;padding:6px 8px;font-size:12px;cursor:pointer;font-family:inherit}
.chat-input{display:flex;gap:6px;padding:8px 10px;border-top:1px solid var(--line,#eee)}
.chat-input input{flex:1;border:1px solid var(--line,#eee);border-radius:8px;padding:8px;font-size:13px;font-family:inherit}
.chat-input button{border:0;background:var(--gold,#d4af37);color:#222;border-radius:8px;padding:0 14px;cursor:pointer;font-family:inherit}

/* 修复：hidden 属性必须真正隐藏面板（否则被 display:flex 压过，面板常驻、点击无反应） */
.chat-panel[hidden]{display:none}

/* 客服气泡内的「立即登录」按钮：未登录查看「我的灵符」时内联提示，
   避免使用全屏登录遮罩盖住客服面板（此前遮罩会吞掉面板内所有点击）。 */
.chat-login-btn{margin-top:8px;border:1px solid var(--green,#3a7d5d);background:var(--green,#3a7d5d);color:#fff;
  border-radius:8px;padding:6px 14px;font-size:12px;cursor:pointer;font-family:inherit}

/* 移动端 ≤900px：客服浮标与面板避让底部 Tab（--tab-h）与「回到顶部」按钮。
   此前 .chat-fab 固定 bottom:20px，会被 57px 高的底栏压住；点「发」等按钮也会被
   z-index:90 的回顶键吞掉 → 表现为「点击无反应」。 */
@media (max-width:900px){
  .chat-fab{bottom:calc(var(--tab-h) + 68px);right:14px}
  .chat-panel{right:12px;left:12px;width:auto;max-width:none;
    bottom:calc(var(--tab-h) + 120px);height:430px;max-height:calc(100vh - var(--tab-h) - 156px)}
}

/* ===== 首页「简易纪念」：文字 / 图片 / 录音（折叠入口 + 展开面板） ===== */
.quick-memorial{margin:28px 0 34px}

/* 折叠入口按钮：默认只占一行，把整块内容收在里面 */
.qm-toggle{display:flex;align-items:center;gap:14px;width:100%;text-align:left;cursor:pointer;
  font-family:inherit;background:var(--card);color:var(--ink);
  border:1px solid var(--line);border-radius:var(--radius);padding:16px 20px;
  box-shadow:var(--shadow-sm);transition:border-color .2s, box-shadow .2s, transform .2s}
.qm-toggle:hover{border-color:var(--green);box-shadow:var(--shadow);transform:translateY(-1px)}
.qm-toggle:focus-visible{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.qm-toggle-ico{flex:0 0 auto;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;
  background:var(--green-tint);border:1px solid rgba(3,46,126,.14);font-size:20px;line-height:1}
.qm-toggle-txt{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1 1 auto}
.qm-toggle-txt strong{font-size:16px;font-weight:700;color:var(--ink-strong);letter-spacing:.02em}
.qm-toggle-txt small{font-size:12.5px;color:var(--muted);line-height:1.5}
.qm-badge{flex:0 0 auto;min-width:26px;height:22px;padding:0 8px;border-radius:11px;
  background:var(--green-soft);color:var(--green);font-size:12px;font-weight:600;line-height:22px;
  text-align:center;font-variant-numeric:tabular-nums}
.qm-toggle-more{flex:0 0 auto;font-size:13px;color:var(--green);font-weight:600}
.qm-toggle-more::after{content:'展开'}
.quick-memorial.is-open .qm-toggle-more::after{content:'收起'}
.qm-toggle-arrow{flex:0 0 auto;width:20px;height:20px;color:var(--muted);transition:transform .25s var(--ease,ease)}
.qm-toggle-arrow svg{width:100%;height:100%;display:block}
.quick-memorial.is-open .qm-toggle-arrow{transform:rotate(180deg);color:var(--green)}
.quick-memorial.is-open .qm-toggle-ico{background:var(--green-soft)}
/* 展开后按钮圆角收半，与下方面板拼接成一体 */
.quick-memorial.is-open .qm-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0;
  border-bottom-color:transparent}

/* 展开的面板 */
.qm-panel{background:var(--card);border:1px solid var(--line);border-top:0;
  border-radius:0 0 var(--radius) var(--radius);padding:18px 20px 20px;box-shadow:var(--shadow-sm)}
.qm-panel[hidden]{display:none}
/* 面板内的 composer 不再重复描边/投影，避免边框套边框 */
.qm-panel .qm-composer{box-shadow:none;border:0;padding:0;background:transparent}
.qm-panel .qm-list{margin-top:18px}

.qm-composer{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px 14px;box-shadow:var(--shadow-sm)}
.qm-input{width:100%;min-height:76px;resize:vertical;border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:12px 14px;font-size:14px;line-height:1.7;font-family:inherit;color:var(--ink);
  background:var(--bg2);outline:none;transition:border-color .2s, box-shadow .2s}
.qm-input:focus{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}

/* 预览区（图片缩略图 / 录音播放） */
.qm-preview{margin-top:12px}
.qm-thumb{position:relative;display:inline-block;max-width:100%}
.qm-thumb img{display:block;max-width:min(240px,60vw);max-height:200px;border-radius:var(--radius-sm);
  border:1px solid var(--line);object-fit:cover}
.qm-thumb-x{position:absolute;top:6px;right:6px;width:24px;height:24px;line-height:1;border:0;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;font-size:15px;cursor:pointer;padding:0}

/* 录音面板 */
.qm-recorder{margin-top:12px;border:1px dashed var(--line);border-radius:var(--radius-sm);
  padding:12px 14px;background:var(--green-tint)}
.qm-rec-head{display:flex;align-items:center;justify-content:space-between;font-size:13px;
  font-weight:600;color:var(--ink-strong);margin-bottom:10px}
.qm-rec-x{border:0;background:transparent;font-size:18px;line-height:1;color:var(--muted);cursor:pointer}
.qm-rec-body{display:flex;flex-direction:column;gap:10px}
.qm-rec-main{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.qm-rec-btn{border:1px solid var(--green);background:#fff;color:var(--green);border-radius:20px;
  padding:7px 16px;font-size:13px;cursor:pointer;font-family:inherit;transition:.2s}
.qm-rec-btn:hover{background:var(--green-soft)}
.qm-rec-btn.recording{background:#d33;border-color:#d33;color:#fff;animation:qm-pulse 1.4s infinite}
@keyframes qm-pulse{0%,100%{box-shadow:0 0 0 0 rgba(221,51,51,.45)}50%{box-shadow:0 0 0 8px rgba(221,51,51,0)}}
.qm-rec-time{font-variant-numeric:tabular-nums;font-size:13px;color:var(--ink-strong);font-weight:600}
.qm-rec-tip{font-size:12px;color:var(--muted)}
.qm-rec-tip.warn{color:#c0392b}
.qm-rec-sub{display:flex;gap:8px}
.qm-rec-play{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.qm-rec-play audio{height:34px;max-width:100%}

/* 操作行 */
.qm-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.qm-tool{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);background:#fff;
  color:var(--ink);border-radius:20px;padding:6px 14px;font-size:13px;cursor:pointer;font-family:inherit;transition:.2s}
.qm-tool:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.qm-ico{font-size:14px;line-height:1}
.qm-private{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);cursor:pointer;user-select:none;white-space:nowrap}
.qm-private input{cursor:pointer}
.qm-count{margin-left:auto;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.qm-submit{flex:0 0 auto}
.qm-note{margin:10px 0 0;font-size:12px;color:var(--muted);line-height:1.6}
.qm-note a{color:var(--green);text-decoration:none}
.qm-note a:hover{text-decoration:underline}

/* 列表 */
.qm-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;margin-top:16px}
.qm-list > .empty{grid-column:1/-1}
.qm-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:14px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:10px;
  transition:transform .2s, box-shadow .2s, border-color .4s}
.qm-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.qm-card.is-new{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.qm-media img{display:block;width:100%;max-height:260px;object-fit:cover;border-radius:10px;cursor:zoom-in}
.qm-text{margin:0;font-size:14px;line-height:1.75;color:var(--ink);white-space:pre-wrap;word-break:break-word}
.qm-text::before{content:'“';color:var(--green);opacity:.5;margin-right:1px}
.qm-text::after{content:'”';color:var(--green);opacity:.5;margin-left:1px}

/* 轻量音频播放条 */
.qm-audio{display:flex;align-items:center;gap:9px;background:var(--green-tint);
  border:1px solid var(--line);border-radius:20px;padding:7px 14px 7px 7px}
.qm-audio audio{display:none}
.qm-play{flex:0 0 auto;width:30px;height:30px;border:0;border-radius:50%;background:var(--green);color:#fff;
  font-size:11px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.qm-play:hover{background:var(--green-2)}
.qm-audio-label{font-size:12px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 卡片底部信息 */
.qm-foot{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);
  border-top:1px solid var(--line-soft);padding-top:9px;margin-top:auto}
.qm-who{color:var(--ink)}
.qm-lock{font-size:11px}
.qm-del{margin-left:auto;border:1px solid rgba(192,86,79,.4);background:#fff;color:#c0564f;
  font-size:12px;cursor:pointer;padding:3px 10px;border-radius:8px;font-family:inherit;
  display:inline-flex;align-items:center;gap:3px;line-height:1.4}
.qm-del:hover{background:#c0564f;color:#fff;border-color:#c0564f}

/* 移动端：单列 + 操作行换行 */
@media (max-width:640px){
  .qm-list{grid-template-columns:1fr;gap:12px}
  .qm-composer{padding:14px}
  .qm-count{margin-left:0;order:5;width:100%}
  .qm-submit{order:6;width:100%}
  .qm-actions{gap:8px}
  /* 折叠入口：窄屏收窄内距，隐藏次要副标题，避免挤出一行 */
  .qm-toggle{padding:13px 15px;gap:11px}
  .qm-toggle-ico{width:38px;height:38px;font-size:18px}
  .qm-toggle-txt strong{font-size:15px}
  .qm-toggle-txt small{display:none}
  .qm-panel{padding:15px 15px 17px}
}

/* ===== 家族（纪念亲人）：唯一化 / 认领 / 合并 ===== */
.fam-tabs{display:flex;gap:8px;margin:14px 0 4px;flex-wrap:nowrap;max-width:440px}
.fam-tab{position:relative;border:1px solid var(--line);background:var(--card);color:var(--ink);
  flex:1 1 0;min-width:0;padding:8px 10px;border-radius:999px;cursor:pointer;font-size:13.5px;
  text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:.18s}
.fam-tab:hover{border-color:#cbbf9f}
.fam-tab.active{background:linear-gradient(180deg,var(--green),var(--green-2));color:#fff;border-color:transparent}
.fam-badge{display:inline-block;min-width:17px;height:17px;line-height:17px;padding:0 5px;
  background:#e5484d;color:#fff;border-radius:999px;font-size:11px;margin-left:6px;vertical-align:1px}
.fam-tab.active .fam-badge{background:rgba(255,255,255,.28)}
.fam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-top:14px}
.fam-card{padding:14px}
.fam-card-head{display:flex;gap:12px;align-items:flex-start}
.fam-thumb{width:60px;height:60px;border-radius:14px;overflow:hidden;flex:0 0 auto;background:var(--green-soft);
  display:flex;align-items:center;justify-content:center;cursor:pointer}
.fam-thumb.sm{width:44px;height:44px;border-radius:11px}
.fam-thumb img{width:100%;height:100%;object-fit:cover}
.fam-ph{font-family:var(--font-serif);font-size:24px;color:var(--green)}
.fam-info{min-width:0;flex:1}
.fam-info h3{margin:0 0 4px;font-size:16.5px;cursor:pointer;color:var(--ink-strong)}
.fam-info h3:hover{color:var(--green)}
.fam-dates{font-size:12.5px;color:var(--muted);margin-bottom:6px}
.fam-role-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12px}
.fam-role{padding:2px 9px;border-radius:999px;background:var(--green-soft);color:var(--green);font-weight:600}
.fam-role.owner{background:#FBEFD6;color:#9A6A10}
.fam-mcount{color:var(--muted)}
.fam-card-act{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;border-top:1px solid var(--line-soft);padding-top:11px}
.fam-empty{margin-top:34px;text-align:center;color:var(--muted);padding:28px 16px}
.fam-empty-ico{font-size:44px;margin-bottom:8px}
.fam-empty-tip{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.7}
.fam-empty-act{display:flex;gap:10px;justify-content:center;margin-top:14px;flex-wrap:wrap}
.fam-list{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.fam-row{display:flex;gap:12px;align-items:flex-start;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:13px 15px;flex-wrap:wrap}
.fam-row.ok{border-color:#bfe0c8;background:linear-gradient(0deg,rgba(56,161,105,.05),rgba(56,161,105,.05)),var(--card)}
.fam-row.bad{border-color:#eccfcf}
.fam-row.muted{opacity:.72}
.fam-row-main{flex:1;min-width:220px}
.fam-row-t{font-size:14px;color:var(--ink-strong)}
.fam-who{font-weight:600;color:var(--green)}
.fam-meta{font-size:12px;color:var(--muted);margin-top:4px;display:flex;gap:6px;flex-wrap:wrap}
.fam-rel{color:#9A6A10;background:#FBEFD6;padding:1px 8px;border-radius:999px}
.fam-dot{color:var(--line)}
.fam-msg{margin-top:7px;font-size:13px;color:var(--ink);background:var(--bg);border-radius:9px;padding:8px 11px;line-height:1.65}
.fam-note{margin-top:6px;font-size:12.5px;color:var(--muted)}
.fam-row-st{display:flex;align-items:center}
.fam-st{font-size:12px;padding:3px 10px;border-radius:999px;background:var(--bg);color:var(--muted)}
.fam-st.ok{background:#E4F3E9;color:#2F855A}
.fam-st.bad{background:#FBE9E9;color:#C53030}
.fam-row-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.fam-mlist{display:flex;flex-direction:column;gap:8px;margin:8px 0}
.fam-mrow{display:flex;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);
  border-radius:11px;background:var(--card);flex-wrap:wrap}
.fam-mav{width:34px;height:34px;border-radius:50%;background-size:cover;background-position:center;flex:0 0 auto}
.fam-mph{display:flex;align-items:center;justify-content:center;background:var(--green-soft);color:var(--green);font-weight:600}
.fam-mname{font-size:13.5px;color:var(--ink-strong)}
.fam-mtag{font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--green-soft);color:var(--green)}
.fam-mtag.owner{background:#FBEFD6;color:#9A6A10}
.fam-mtime{font-size:11.5px;color:var(--muted);margin-left:auto}
.fam-find-result{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.fam-find-t{font-size:12.5px;color:var(--muted);margin-bottom:2px}
.fam-find-row{display:flex;gap:10px;align-items:center;padding:9px 11px;border:1px solid var(--line);
  border-radius:12px;background:var(--bg2)}
.fam-find-info{flex:1;min-width:0}
.fam-find-name{font-size:14px;color:var(--ink-strong)}
.fam-find-meta{font-size:12px;color:var(--muted);margin-top:2px}
.fam-find-act{display:flex;gap:7px;flex-wrap:wrap}
.fam-find-none{text-align:center;padding:16px;color:var(--ink)}
/* 详情页家族协作条 */
.fam-bar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:12px 0 4px;padding:11px 15px;
  background:linear-gradient(0deg,rgba(3,46,126,.035),rgba(3,46,126,.035)),var(--card);
  border:1px solid var(--line);border-radius:var(--radius-sm)}
.fam-bar-title{font-size:13.5px;font-weight:600;color:var(--ink-strong);display:flex;align-items:center;gap:7px}
.fam-bar-badge{font-size:11px;padding:2px 9px;border-radius:999px;background:var(--green-soft);color:var(--green)}
.fam-bar-acts{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
/* 创建弹窗重复软提示 */
.mk-dup{margin:4px 0 10px}
.mk-dup-warn{border:1px solid #F0D9A8;background:#FEF8EA;border-radius:12px;padding:11px 13px}
.mk-dup-t{font-size:12.5px;color:#9A6A10;font-weight:600;margin-bottom:7px}
.mk-dup-row{display:flex;gap:10px;align-items:center;justify-content:space-between;padding:6px 0;border-top:1px dashed #EBD9AE}
.mk-dup-info{display:flex;flex-direction:column;font-size:12.5px;color:var(--ink);min-width:0}
.mk-dup-info b{color:var(--ink-strong)}
.mk-dup-info span{color:var(--muted);font-size:11.5px}
.mk-dup-tip{font-size:11.5px;color:#9A6A10;margin-top:7px;opacity:.85}
/* 通知：家族协作 */
.nf-fam-ico{display:flex;align-items:center;justify-content:center;font-size:20px;background:var(--green-soft)}
.nf-fam-tag{color:var(--green)}
/* 管理后台：合并审核行 */
.admin-merges{margin-top:4px}
.fam-merge-row{align-items:center}
.fam-merge-flow{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-strong);min-width:180px}
.fam-merge-src{color:#C53030}
.fam-merge-arrow{color:var(--muted)}
.fam-merge-dst{color:var(--green)}
.fam-merge-stats{font-size:11.5px;color:var(--muted);flex:1;min-width:180px}
.fam-merge-app{font-size:12px;color:var(--muted)}
.fam-merge-acts{display:flex;gap:7px;flex-wrap:wrap}
@media(max-width:640px){
  .fam-grid{grid-template-columns:1fr}
  .fam-bar-acts{margin-left:0;width:100%}
  .fam-mtime{margin-left:0}
}

/* ===== 「纪念名人」群组协作：二维码 / 成员 / 编辑权申请 ===== */
.cg-bar .cg-bar-note{font-size:12px;color:var(--muted)}
.cg-granted{font-size:12px;color:#2F855A}
.cg-pending-tag{font-size:12px;color:#9A6A10}
/* 面板 */
.cg-panel{max-height:74vh;overflow:auto}
.cg-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.cg-head h3{margin:0}
.cg-count{font-size:12.5px;color:var(--muted)}
.cg-loading,.cg-empty,.cg-empty-min{color:var(--muted);font-size:13px;padding:14px 0;text-align:center}
.cg-muted{color:var(--muted)}
/* 二维码卡片 */
.cg-qr-card{display:flex;gap:16px;align-items:flex-start;padding:14px;border:1px solid var(--line);
  border-radius:var(--radius-sm);background:var(--bg2);flex-wrap:wrap}
.cg-qr-img{flex:0 0 auto;background:#fff;padding:8px;border-radius:12px;box-shadow:var(--shadow-sm)}
.cg-qr-img img{display:block;width:170px;height:170px}
.cg-qr-side{flex:1;min-width:200px}
.cg-qr-t{font-weight:600;color:var(--ink-strong);margin-bottom:6px}
.cg-qr-desc{font-size:12.5px;color:var(--muted);line-height:1.7;margin:0 0 10px}
.cg-qr-acts{display:flex;gap:8px;flex-wrap:wrap}
.cg-qr-hint{font-size:11.5px;color:var(--muted);margin-top:7px;opacity:.85}
/* 公告 */
.cg-notice{border:1px solid var(--line);border-radius:var(--radius-sm);padding:11px 14px;margin:12px 0;background:var(--card)}
.cg-notice-h{display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:13.5px;color:var(--ink-strong);margin-bottom:6px}
.cg-notice-body{font-size:13px;color:var(--ink);line-height:1.7;white-space:pre-wrap}
/* 自身操作 */
.cg-self-act{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:10px 0}
/* 区块标题 */
.cg-sub-h{font-size:13.5px;font-weight:600;color:var(--ink-strong);margin:16px 0 8px;display:flex;align-items:center;gap:7px}
.cg-badge{display:inline-block;min-width:17px;height:17px;line-height:17px;padding:0 5px;background:#e5484d;color:#fff;border-radius:999px;font-size:11px;text-align:center}
/* 成员列表 */
.cg-mlist{display:flex;flex-direction:column;gap:8px}
.cg-mrow{display:flex;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:11px;background:var(--card);flex-wrap:wrap}
.cg-mav{width:34px;height:34px;border-radius:50%;background-size:cover;background-position:center;flex:0 0 auto}
.cg-mph{display:flex;align-items:center;justify-content:center;background:var(--green-soft);color:var(--green);font-weight:600}
.cg-mname{font-size:13.5px;color:var(--ink-strong)}
.cg-mtag{font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--bg);color:var(--muted)}
.cg-mtag.owner{background:#FBEFD6;color:#9A6A10}
.cg-mtag.edit{background:#E4F3E9;color:#2F855A}
.cg-mrow .btn.danger{margin-left:auto}
/* 编辑权申请行 */
.cg-reqs{display:flex;flex-direction:column;gap:9px}
.cg-req{display:flex;gap:11px;align-items:center;border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:11px 13px;background:var(--card);flex-wrap:wrap}
.cg-req-main{flex:1;min-width:200px}
.cg-req-t{font-size:13.5px;color:var(--ink-strong)}
.cg-req-reason{font-size:12.5px;color:var(--ink);margin-top:4px;background:var(--bg);border-radius:8px;padding:6px 10px;line-height:1.6}
.cg-req-time{font-size:11.5px;color:var(--muted);margin-top:4px}
.cg-req-act{display:flex;gap:8px;flex-wrap:wrap}
@media(max-width:640px){
  .cg-qr-card{flex-direction:column}
  .cg-qr-img img{width:150px;height:150px}
}

/* ============ 「物是人非」旧物·故人展柜 ============ */
.relic-wrap { padding-top: 4px; }
.relic-head { display: flex; align-items: flex-end; gap: 14px; margin: 6px 0 18px; flex-wrap: wrap; }
.relic-head-text { flex: 1 1 auto; min-width: 200px; }
.relic-title { font-size: 22px; font-weight: 700; color: var(--ink-strong); margin: 0; letter-spacing: .5px; }
.relic-sub { margin: 4px 0 0; font-size: 13px; color: var(--muted); }
.relic-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; }
.relic-card { background: var(--card); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; cursor: pointer;
  box-shadow: 0 1px 2px rgba(0,0,0,.04); transition: transform .16s ease, box-shadow .16s ease; }
.relic-card:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0,0,0,.10); }
.relic-photo { width: 100%; aspect-ratio: 4 / 3; background-size: cover; background-position: center; background-color: var(--bg);
  border-bottom: 1px solid var(--line); }
.relic-info { padding: 11px 13px 13px; }
.relic-name { font-size: 15px; font-weight: 600; color: var(--ink-strong); line-height: 1.35; }
.relic-meta { font-size: 12.5px; color: #9A6A2F; margin-top: 4px; }
.relic-story { font-size: 12.5px; color: var(--ink); margin-top: 7px; line-height: 1.6;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.relic-foot { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.relic-owner { font-size: 12px; color: var(--muted); }
.relic-foot .cmt-av { flex: 0 0 auto; }
/* 详情弹窗 */
.relic-detail { display: flex; gap: 18px; }
.relic-detail-photo { width: 220px; height: 220px; flex: 0 0 auto; border-radius: 12px;
  background-size: cover; background-position: center; background-color: var(--bg); }
.relic-detail-body { flex: 1 1 auto; min-width: 0; }
.relic-detail-body h3 { margin: 0 0 6px; font-size: 19px; color: var(--ink-strong); }
.relic-detail-meta { font-size: 13px; color: #9A6A2F; margin-bottom: 10px; }
.relic-detail-story { font-size: 14px; line-height: 1.75; color: var(--ink); white-space: pre-wrap; word-break: break-word; }
.relic-detail-story.dim { color: var(--muted); }
.relic-detail-foot { display: flex; align-items: center; gap: 9px; margin-top: 14px; font-size: 12px; color: var(--muted); flex-wrap: wrap; }
.relic-detail-foot .cmt-av { flex: 0 0 auto; }
.relic-views { margin-left: 2px; }
.relic-detail-acts { display: flex; gap: 8px; margin-top: 14px; }
.relic-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.relic-photo-edit { display: flex; align-items: center; gap: 12px; }
.relic-photo-box { width: 88px; height: 88px; border-radius: 10px; overflow: hidden; border: 1px solid var(--line);
  background: var(--bg); display: flex; align-items: center; justify-content: center; }
.relic-photo-box img { width: 100%; height: 100%; object-fit: cover; }
.relic-photo-box .ph { font-size: 12px; color: var(--muted); }
@media(max-width: 560px){
  .relic-detail { flex-direction: column; }
  .relic-detail-photo { width: 100%; height: 200px; }
  .relic-2col { grid-template-columns: 1fr; }
}

/* =====================================================================
   精致度提升层 (Polish Layer) — 2026-10
   保持「米白 + 深蓝」素雅调性不变，只做质感精细化：
   1) 统一动效时长 / 缓动曲线
   2) 全站统一焦点可见性（键盘无障碍）
   3) 字体渲染 / 选中色 / 滚动条 / 表单控件质感的全局统一
   本层为「追加覆盖」，不修改上方既有规则，便于回滚。
   ===================================================================== */

:root{
  /* 动效语汇：3 档时长 + 1 条缓动，替代原先 10 种散落取值 */
  --t-fast:.16s;      /* 微交互：hover / 颜色 / 边框 */
  --t:.22s;           /* 常规过渡：卡片抬升 / 位移 */
  --t-slow:.32s;      /* 大块进场：弹窗 / 面板 */
  --ease:cubic-bezier(.22,.61,.36,1);    /* 出场顺滑、收尾柔和 */
  --ease-out:cubic-bezier(.16,1,.3,1);   /* 强调减速 */

  /* 焦点环：统一为品牌蓝的柔和外扩环 */
  --ring:0 0 0 3px rgba(3,46,126,.16);
  --ring-strong:0 0 0 3px rgba(3,46,126,.28);

  /* 层级阴影（替代各自手写的 8px/16px 组合） */
  --shadow-lift:0 16px 34px rgba(60,63,58,.11);
  --shadow-pop:0 22px 54px rgba(30,36,48,.18);
}

/* ---------- 1. 全局字体渲染与选中色 ---------- */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  font-feature-settings:"kern" 1,"liga" 1;
}
/* 标题字距更"讲究"：中文衬线标题轻微收字距更精致 */
h1,h2,h3,.card h3,.sec-title{text-wrap:balance}
p,li{text-wrap:pretty}

::selection{background:rgba(3,46,126,.92);color:#fff;text-shadow:none}
::-moz-selection{background:rgba(3,46,126,.92);color:#fff}

/* ---------- 2. 全站统一焦点可见性（仅键盘触发，不打扰鼠标用户） ---------- */
:focus{outline:none}
:focus-visible{
  outline:2px solid var(--green-2);
  outline-offset:2px;
  border-radius:6px;
}
/* 原生控件/链接走圆角环，观感更统一 */
a:focus-visible,button:focus-visible,summary:focus-visible,[role="button"]:focus-visible{
  outline:none;
  box-shadow:var(--ring);
}
input:focus-visible,textarea:focus-visible,select:focus-visible{
  outline:none;
  border-color:var(--green-2);
  box-shadow:var(--ring);
}

/* ---------- 3. 统一滚动条主题（浅色细条，与米白底协调） ---------- */
*{scrollbar-width:thin;scrollbar-color:rgba(3,46,126,.22) transparent}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{
  background:rgba(3,46,126,.20);
  border-radius:10px;
  border:2px solid transparent;
  background-clip:content-box;
}
::-webkit-scrollbar-thumb:hover{background:rgba(3,46,126,.36);background-clip:content-box}
::-webkit-scrollbar-corner{background:transparent}

/* ---------- 4. 按钮：统一时长 + 更细腻的按压/悬停反馈 ---------- */
.btn{
  transition:transform var(--t-fast) var(--ease),
             box-shadow var(--t-fast) var(--ease),
             border-color var(--t-fast) var(--ease),
             background-color var(--t-fast) var(--ease),
             color var(--t-fast) var(--ease);
  will-change:transform;
}
.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.btn:active{transform:translateY(0) scale(.985);transition-duration:.08s}
.btn:disabled,.btn[disabled]{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}

/* 主按钮：叠加一层柔和高光，避免纯色扁平 */
.btn.primary,.btn.gold{
  position:relative;
  overflow:hidden;
  box-shadow:0 6px 16px rgba(10,60,160,.26);
  transition:transform var(--t-fast) var(--ease),
             box-shadow var(--t-fast) var(--ease),
             filter var(--t-fast) var(--ease);
}
.btn.primary::after,.btn.gold::after{
  content:"";
  position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,0) 55%);
  pointer-events:none;
}
.btn.primary:hover,.btn.gold:hover{
  transform:translateY(-1px);
  filter:brightness(1.06);
  box-shadow:0 12px 26px rgba(10,60,160,.34);
}
.btn.primary:active,.btn.gold:active{transform:translateY(0) scale(.985);filter:brightness(.98)}

/* ---------- 5. 卡片：抬升更克制、阴影层次更自然 ---------- */
.card{
  transition:transform var(--t) var(--ease),
             box-shadow var(--t) var(--ease),
             border-color var(--t) var(--ease);
  will-change:transform;
}
.card:hover{
  transform:translateY(-3px);
  box-shadow:var(--shadow-lift);
  border-color:rgba(3,46,126,.42);
}
/* 尊重系统"减少动态效果"偏好 */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;scroll-behavior:auto!important}
}

/* =====================================================================
   组件打磨层 (Component Polish) — 2026-10
   侧栏激活指示条 / 顶栏毛玻璃 / 弹窗遮罩渐入 / 表单与图片微质感
   ===================================================================== */

/* ---------- 侧栏：active 项加品牌蓝指示条 + 更柔和的过渡 ---------- */
.sidenav a{position:relative;
  transition:background-color var(--t-fast) var(--ease),
             color var(--t-fast) var(--ease),
             border-color var(--t-fast) var(--ease)}
.sidenav a::before{
  content:"";
  position:absolute;left:-4px;top:50%;
  width:3px;height:0;
  background:linear-gradient(180deg,var(--green),var(--green-2));
  border-radius:0 3px 3px 0;
  transform:translateY(-50%);
  transition:height var(--t) var(--ease);
}
.sidenav a.active::before{height:56%}
.sidenav a:hover::before{height:28%;opacity:.45}
.sidenav a.active:hover::before{height:56%;opacity:1}
/* 折叠态隐藏指示条，避免溢出 */
.sidebar.collapsed .sidenav a::before{display:none}

/* ---------- 顶栏：毛玻璃 + 细腻底边（滚动与否都保持一致质感） ---------- */
.topbar{
  background:rgba(252,251,247,.82);
  -webkit-backdrop-filter:saturate(1.4) blur(10px);
  backdrop-filter:saturate(1.4) blur(10px);
  border-bottom:1px solid rgba(233,228,216,.8);
}

/* ---------- 弹窗：遮罩渐入 + 卡片更顺滑的减速曲线 ---------- */
.modal-mask{animation:maskIn var(--t-slow) var(--ease) both}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
.modal-card{animation:popIn var(--t-slow) var(--ease-out) both;
  box-shadow:var(--shadow-pop)}
@keyframes popIn{
  from{opacity:0;transform:translateY(14px) scale(.975)}
  to{opacity:1;transform:translateY(0) scale(1)}
}

/* ---------- 表单控件：聚焦浮起 + 占位符颜色统一 ---------- */
input,textarea,select{transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease)}
input:hover:not(:disabled):not(:focus),textarea:hover:not(:disabled):not(:focus),select:hover:not(:disabled):not(:focus){border-color:rgba(3,46,126,.35)}
input::placeholder,textarea::placeholder{color:var(--muted);opacity:.75}

/* ---------- 图片/头像：统一圆角内阴影，避免"贴边感" ---------- */
.avatar,.m-photo img,.relic-photo img{transition:transform var(--t) var(--ease),filter var(--t) var(--ease)}

/* ---------- 链接：正文内链接统一优雅下划线 ---------- */
.card a:not(.btn),.md-body a:not(.btn){
  color:var(--green-2);
  text-decoration:underline;
  text-decoration-color:rgba(3,46,126,.30);
  text-underline-offset:3px;
  text-decoration-thickness:1px;
  transition:text-decoration-color var(--t-fast) var(--ease);
}
.card a:not(.btn):hover,.md-body a:not(.btn):hover{text-decoration-color:var(--green-2)}

/* ============================================================
   展览（原首页「文物展览」，已迁移至纪念空间「展览」tab）
   米白展柜 + 深蓝点缀；画布可拖拽旋转/滚轮缩放
   ============================================================ */
.artifact-show{max-width:1180px;margin:46px auto 0;padding:0 18px}
/* 迁移到纪念空间 tab 后，作为面板内容不再需要首页级大留白 */
#an_artifact.artifact-show{margin:14px auto 0;padding:0}
.artifact-shell{padding:20px 20px 14px;border-radius:var(--radius)}
.artifact-topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;min-height:34px}
.artifact-meta{min-width:0}
.artifact-title{margin:0;font-size:19px;color:var(--ink-strong);font-family:var(--font-serif);letter-spacing:.04em}
.artifact-era{display:inline-block;margin-left:10px;padding:2px 9px;border-radius:999px;font-size:12px;background:var(--green-soft);color:var(--green);vertical-align:2px}
.artifact-desc{margin:6px 0 0;font-size:13.5px;color:var(--muted);line-height:1.7;max-width:640px}
.artifact-size{display:inline-block;margin-top:6px;font-size:12px;color:var(--muted);opacity:.85}
.artifact-admin-slot{display:flex;gap:8px;flex-shrink:0}

.artifact-stage{position:relative;height:420px;margin-top:12px;border-radius:var(--radius-sm);
  background:radial-gradient(120% 90% at 50% 30%, #FDFCF9 0%, #F2EEE4 62%, #E9E3D3 100%);
  border:1px solid var(--line-soft);overflow:hidden;cursor:grab;touch-action:none}
.artifact-stage:active{cursor:grabbing}
.artifact-stage canvas{display:block;width:100%!important;height:100%!important;outline:none}
.artifact-hint{position:absolute;right:14px;bottom:12px;font-size:12px;color:var(--muted);
  background:rgba(252,251,247,.82);padding:4px 10px;border-radius:999px;pointer-events:none;
  backdrop-filter:blur(4px);transition:opacity var(--t-fast, .16s) var(--ease, ease)}
.artifact-stage:hover .artifact-hint{opacity:.55}

.artifact-progress{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(240px,72%);height:6px;border-radius:999px;background:rgba(3,46,126,.10);overflow:hidden}
.artifact-progress-inner{height:100%;width:0;border-radius:999px;
  background:linear-gradient(90deg,var(--green),var(--green-2));transition:width .25s var(--ease, ease)}

.artifact-error{position:absolute;inset:0;display:flex;flex-direction:column;gap:6px;
  align-items:center;justify-content:center;text-align:center;padding:0 26px;
  font-size:14px;line-height:1.75;color:var(--muted);background:rgba(246,244,238,.72);backdrop-filter:blur(2px)}
/* 降级说明里的第二行（操作建议）用小字弱化，视觉上不与主提示抢焦点 */
.artifact-error span{display:block;margin-top:2px}
.artifact-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:14px;color:var(--muted);text-align:center;padding:0 24px;line-height:1.8}

.artifact-chips{display:flex;gap:9px;margin-top:14px;overflow-x:auto;padding:2px 2px 8px;
  scrollbar-width:thin}
.artifact-chips::-webkit-scrollbar{height:6px}
.artifact-chips::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px}
.artifact-chip{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-start;gap:2px;
  padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--line);
  background:var(--bg2);cursor:pointer;font-family:inherit;
  transition:border-color var(--t-fast,.16s) var(--ease,ease),background var(--t-fast,.16s) var(--ease,ease),transform var(--t-fast,.16s) var(--ease,ease)}
.artifact-chip:hover{border-color:var(--green);transform:translateY(-1px)}
.artifact-chip.on{background:var(--green-soft);border-color:var(--green)}
.artifact-chip-name{font-size:13.5px;color:var(--ink-strong);font-weight:600;letter-spacing:.02em}
.artifact-chip-era{font-size:11.5px;color:var(--muted)}
.artifact-chip.on .artifact-chip-era{color:var(--green)}

/* ============================================================
   移动端系统化窄屏适配（仅 ≤900 / ≤640 / ≤480 生效；桌面端不受影响）
   目标：首页信息流重组、环忆长廊横滑、列表/详情/弹窗统一窄屏排版
   ============================================================ */

/* —— ≤900px：底部 Tab 已显隐；此处处理照片墙横滑容器、回顶、toast 让位 —— */
@media (max-width:900px){
  /* 底部 Tab：放在本媒体查询（位于基础 display:none 之后）确保移动端显示、桌面隐藏 */
  .bottom-tab{display:flex}
  /* 环忆长廊：3D 环改为横滑画廊后，释放容器的 flex/overflow 限制，交给孩子自行滚动 */
  .wall-ring{display:block;overflow:visible;min-height:0;perspective:none;padding:0}
  /* 回顶按钮上移到底部 Tab 之上，避免被遮挡 */
  .to-top{bottom:calc(var(--tab-h) + 16px);right:14px}
  /* toast 上移并约束宽度，避免被底部 Tab 遮挡 */
  .toast{bottom:calc(var(--tab-h) + 14px);
    max-width:calc(100vw - 32px);width:auto;font-size:13.5px}
  /* 简易纪念列表：末张卡片的操作行（含「🗑 删除」）必须能滚到 Tab 之上。
     否则面板展开后的默认落点会让删除按钮恰好压在 fixed 底栏下方 → 点击被吞、看似「无反应」。 */
  .qm-panel .qm-list{padding-bottom:calc(var(--tab-h) + 12px);scroll-margin-bottom:calc(var(--tab-h) + 12px)}
  .qm-card .qm-foot{scroll-margin-bottom:calc(var(--tab-h) + 12px)}
}

/* —— ≤640px：首页探索板块改紧凑网格、照片墙间距收紧、Hero 压扁 —— */
@media (max-width:640px){
  /* 探索板块：一行 2 个紧凑标签，整体高度约为原大竖卡的 1/3 */
  .explore-grid{grid-template-columns:repeat(2,1fr);gap:10px;margin-top:2px}
  .ex-item{padding:11px 13px;gap:9px}
  .ex-emoji{font-size:21px}
  .ex-label{font-size:13.5px}
  .photo-walls{margin:30px 0 8px;gap:32px}
  .wall-block .section-title{margin:2px 0 14px}
  /* 时光格间等网格在手机收敛为 2 列，避免单列拖长 */
  .wall-grid{grid-template-columns:repeat(2,1fr);gap:10px}
  /* 思念掠影瀑布流手机 2 列 */
  .wall-masonry{column-count:2}
}

/* —— ≤480px：标题收紧、Hero 压扁、弹窗/操作区窄屏优化 —— */
@media (max-width:480px){
  .section-title{font-size:19px;margin:2px 0 12px;gap:8px}
  .section-title small{font-size:11.5px;line-height:1.4}
  /* Hero 首屏压扁：原来 badge+大标题+两行副标题+双按钮把整屏占满，
     首屏只看得见一个欢迎语，看不到任何实际内容。这里整体收紧留白与字号，
     让「环忆长廊」的首张图能在首屏底部露出来，暗示页面可下滑。 */
  .hero-carousel{margin:2px 0 18px}
  .hero-slide{padding:30px 20px 46px}
  .hero-badge{font-size:11px;letter-spacing:2.5px;margin-bottom:10px;padding:4px 11px}
  .hero-title{letter-spacing:5px;padding-left:5px;margin:0 0 10px}
  .hero-sub{font-size:13.5px;line-height:1.85;margin:0 auto 18px;max-width:92%}
  .hero-cta{gap:10px}
  .hero-cta .btn{padding:10px 18px;font-size:14px}
  .hero-dots{margin-top:14px}
  .hero-arrow{width:34px;height:34px}
  /* 弹窗：内边距收敛、标题收敛、操作按钮换行全宽 */
  .modal-card{padding:18px;border-radius:18px}
  .modal-card h3{font-size:18px}
  .modal-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
  .modal-actions .btn{flex:1 1 auto;min-width:0;justify-content:center}
  /* 顶栏右侧操作区允许横向滚动，避免压住标题；上限 52vw。
     但详情页会往里塞「浏览量 + 搜索框」（实测 173px），320px 档 52vw=166px 装不下，
     搜索框被裁在可视区外。详情页顶栏在窄屏已把动作收起进「更多」，给到 62vw 即可容纳。 */
  .topbar-actions{overflow-x:auto;max-width:52vw;scrollbar-width:none}
  .topbar-actions:has(.top-search){max-width:62vw}
  .topbar-actions::-webkit-scrollbar{display:none}
  /* 已知操作容器：窄屏换行并让按钮全宽（详情页 / 卡片 / 评论回复 / 简易纪念） */
  .detail-actions,.mk-actions,.pc-detail-btns,.pc-card-btns,.cmt-reply-actions,
  .qm-actions,.cem-photo-btns{display:flex;flex-wrap:wrap;gap:8px}
  .detail-actions .btn,.mk-actions .btn,.pc-detail-btns .btn,.pc-card-btns .btn,
  .cmt-reply-actions .btn,.qm-actions .btn,.cem-photo-btns .btn{
    flex:1 1 auto;min-width:0;justify-content:center}
  /* 详情页正文与标题在窄屏给足留白、避免贴边 */
  .detail,.mem-detail,.rel-detail{padding:0 2px}
}

/* —— 环忆长廊：手机端横滑画廊（仅 ≤900 渲染，桌面走 3D 环） —— */
.wall-strip{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;padding:4px 0 14px;margin:0 -2px;scrollbar-width:none}
.wall-strip::-webkit-scrollbar{height:0;display:none}
.wall-strip-item{flex:0 0 auto;width:128px;aspect-ratio:3/4;border-radius:14px;overflow:hidden;
  position:relative;scroll-snap-align:start;cursor:zoom-in;background:var(--card);
  box-shadow:0 8px 20px rgba(3,46,126,.16)}
.wall-strip-item img{width:100%;height:100%;object-fit:cover;display:block;-webkit-user-drag:none}
.wall-strip-item figcaption{position:absolute;left:0;right:0;bottom:0;padding:16px 8px 6px;
  color:#fff;font-size:11.5px;text-align:center;background:linear-gradient(transparent,rgba(0,0,0,.6))}

.art-manage-row:last-of-type{border-bottom:0!important}

@media (max-width:760px){
  .artifact-show{margin-top:34px;padding:0 13px}
  .artifact-shell{padding:15px 13px 10px}
  .artifact-stage{height:320px}
  .artifact-topbar{flex-direction:column;align-items:stretch}
  .artifact-admin-slot{justify-content:flex-end}
  .artifact-title{font-size:17px}
}

/* 探索板块：首个入口卡片高亮（默认指向纪念空间） */
.ex-item:first-child{border-color:rgba(3,46,126,.22);background:linear-gradient(160deg,#FFFFFF 55%,var(--green-tint))}
.ex-item:first-child:hover{border-color:var(--green)}

/* ============================================================
   纪念详情页 · 移动端适配（仅 ≤900 生效；桌面 >900 完全不变）
   修复：功能按钮行 / 切换纪念下拉 / 视频网格 / 图片墙 在窄屏横向溢出
   ============================================================ */
@media (max-width:900px){
  /* 全局顶栏：长标题（如「纪念亲人 · 张国荣」）需可收缩，避免挤压右侧操作区溢出视口 */
  .topbar{overflow:hidden}
  .topbar-title{min-width:0}
  /* 详情头部：改为吸顶栏后不再需要「按钮行换行」的救火规则。
     ⚠️ 不能给 .mem-topbar 加 overflow:hidden——「⋯ 更多」下拉面板是它的
     绝对定位子元素，加了会被整体裁掉（真机实测「点击更多无法看到内容」）。
     长姓名由 .mt-title 自身的 nowrap+ellipsis 收缩，无需顶栏裁剪。 */
  .mem-topbar .mt-title{min-width:0}
  /* 详情内部「本页目录」下拉：从触发按钮左缘起、限宽，避免绝对定位超出视口两侧 */
  .mt-more-panel{right:0;min-width:min(230px,calc(100vw - 28px))}
  .mt-more-nav{grid-template-columns:1fr}
  /* 标题栏/工具行：允许换行，避免一排按钮在窄屏挤出版心 */
  .media-mediabar{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 10px}
  .mb-left,.mb-tools,.sel-bar{flex-wrap:wrap}
  /* 视频网格：minmax(0,1fr) 修复 grid 被视频播放器撑破的经典溢出坑；
     并给网格项 min-width:0，防止视频 intrinsic 宽度把列撑出视口 */
  .media-av-row{grid-template-columns:repeat(2,minmax(0,1fr))}
  .media-av-row .media-cell{min-width:0}
  .media-cell.media-av,.media-av-row .vid-player{max-width:100%}
  /* 视频控制栏：窄屏换行，进度条整行置顶，其余控件换行排列，
     避免播放/进度/音量/倍速/画质/字幕/翻译/下载/全屏在窄视频内被裁切 */
  .vp-bar{flex-wrap:wrap;gap:6px;padding:6px 8px}
  .vp-bar .vp-progress{flex:1 1 100%;order:-1}
  /* 图片墙：窄屏每列更紧凑，仍受容器约束不溢出 */
  .media-wall{grid-template-columns:repeat(auto-fill,minmax(118px,1fr))}
}
@media (max-width:560px){
  /* 手机：视频单列更清晰；图片墙聚焦单图；功能按钮整宽更易点 */
  .media-av-row{grid-template-columns:1fr}
  .media-av-row .media-cell{min-width:0}
  .media-wall{grid-template-columns:repeat(auto-fill,minmax(104px,1fr))}
  /* 手机：吸顶栏按钮进一步收紧，保证「返回 + 标题 + 送花 + 留言 + 更多」一行放得下 */
  .mem-topbar .mt-actions .btn{padding:6px 10px;font-size:12.5px}
  .mem-topbar .mt-actions .da-ico{font-size:13px}
  /* 空面板目录行：窄屏字号略收，右缘「展开 ›」不挤压标题 */
  .act-panel.is-empty:not(.is-open) .act-panel-head{min-height:42px;padding-right:24px}
  .act-panel.is-empty:not(.is-open) .act-panel-title{font-size:13.5px}
  .act-panel.is-empty:not(.is-open) .act-panel-head::after{font-size:11.5px}
}
/* 弹窗内图片/视频自适应，防止大图撑破窄屏弹窗（lightbox 已有 92vw 约束，不受影响） */
.modal-card img,.modal-card video{max-width:100%;height:auto}

/* ============================================================
   纪念详情页 · 3D墓园 / 宠物伙伴(鹦鹉) / 留言 / 供品 等面板移动端适配
   仅 ≤900 / ≤560 生效；桌面 >900 完全不变
   修复重点：
   1) 面板网格被「书籍」等长文本芯片的 min-content 撑破——grid 子项默认
      min-width:auto，单列 1fr 轨道最小也会涨到芯片 min-content（实测 405px），
      导致整个 .act-panels 超出版心、整页横向溢出（360px 屏溢出 61px）。
   2) 3D 舞台 / 鹦鹉聊天 / 面板工具条在窄屏的收敛（原规则只到 ≤720，
      与 ≤900 的移动端改版断层：721–900 区间仍是桌面排版）。
   ============================================================ */
@media (max-width:900px){
  /* 面板网格：两列轨道也允许收缩到版心以内（防 min-content 撑破） */
  .act-panels{grid-template-columns:repeat(2,minmax(0,1fr))}
  .act-panel{min-width:0}
  /* 芯片网格项同样允许收缩：文本自行换行（overflow-wrap 兜底长串英文） */
  .act-chip{min-width:0}
  .act-chip-tx{overflow-wrap:anywhere}
  /* 3D 墓园：工具条允许换行（音效/自动旋转/全屏/自定义墓园 四枚按钮） */
  .cem-tools{flex-wrap:wrap}
  /* 宠物伙伴：工具条（羽色圆点 + 布景/改名）允许换行，避免挤压标题 */
  .pet-tools{flex-wrap:wrap}
  /* 供品 / 图标卡片：分类下拉 + 搜索框间距收紧（已 flex-wrap，窄屏自动堆叠） */
  .of-tools{gap:7px}
  /* 留言板：输入框与发布按钮更紧凑 */
  .msgb-input{min-height:112px;font-size:14px}
  .msgb-meta{margin:6px 0 8px}
  /* 独立评论区：编辑栏（表情/@/字数/评论）窄屏换行，头像略缩 */
  .cmt-editor-bar{flex-wrap:wrap;gap:8px}
  .cmt-editor-bar .cmt-count{margin-left:auto}
}
@media (max-width:720px){
  /* 面板网格：手机单列（轨道可收缩，防芯片 min-content 撑破） */
  .act-panels{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:560px){
  /* 芯片两列更适合点选（3 列在 360px 手机上每格仅约 100px） */
  .act-chips,.act-chips.flowers,.act-chips.plants,.act-chips.offerings,.act-chips.animals{
    grid-template-columns:repeat(2,minmax(0,1fr))}
  /* 3D 舞台再收敛，给下方缅怀动作条/记录留出首屏空间 */
  .cem-stage-wrap{height:280px}
  .pet-view{min-height:274px}
  /* 面板头部工具按钮收紧内边距，同一行容纳更多按钮 */
  .act-panel-head .cem-tools .btn,
  .act-panel-head .pet-tools .btn,
  .act-panel-head .of-tools .btn{padding:6px 10px;font-size:12.5px}
  /* 缅怀动作条：胶囊更紧凑 */
  .cem-act{padding:7px 11px;font-size:12.5px}
  .cem-acts{gap:7px}
}

/* ============================================================================
   纪念详情页美化层（Apple HIG 对齐，2026-10-13）
   依据 apple-ui-design skill：HIG 静态规格 + Fluid Interfaces 动效体系。
   原则：
   ① 分层靠「材质厚度」，毛玻璃只给导航/控件层（顶栏），不进内容层；
   ② 层级 = 字重 + 字号 + 行高 + 颜色的组合，大字收负字距、小字微加正字距；
   ③ 点击目标 ≥44px；按下即反馈（pointer-down 触发，不等松手），100ms ease-out；
   ④ 只动画 transform / opacity；必备 media query 全部补齐。
   —— 全部为「追加覆盖层」，不改动上方既有规则，便于整体回退。
   ============================================================================ */

/* --- 1. 详情页顶栏：真正的「材质控件层」 ---
   原实现有 margin/padding 且带圆角，视觉上是「内容区里的一个盒子」。
   HIG 要求控件层浮在内容之上、内容从其下方滚过 —— 改为贴边满宽 + 材质配方。
   配方来自 materials.md：rgba 底 + blur + saturate(180%) + 1px 亮顶边。 */
.mem-topbar{
  margin:0 0 14px;padding:10px max(2px, env(safe-area-inset-right)) 10px max(2px, env(safe-area-inset-left));
  background:rgba(252,251,247,.78);
  backdrop-filter:blur(20px) saturate(180%);
  -webkit-backdrop-filter:blur(20px) saturate(180%);
  border-bottom:1px solid var(--line-soft);
  box-shadow:0 1px 0 rgba(255,255,255,.6) inset}
/* 亮顶边：光线打在材质上（材质层统一手法） */
.mem-topbar::before{content:'';position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.85),transparent);pointer-events:none}
/* 返回按钮：38 → 44px（HIG 最小可靠点击目标），字号随内联 chevL SVG 失效 */
.mem-topbar .mt-back{width:44px;height:44px;
  background:rgba(255,255,255,.72);border-color:rgba(3,46,126,.10);
  box-shadow:0 1px 3px rgba(60,63,58,.05);
  transition:transform .1s ease-out, border-color .16s var(--ease,ease), color .16s var(--ease,ease), background .16s var(--ease,ease)}
/* 按下即反馈：100ms ease-out（Fluid Interfaces） */
.mem-topbar .mt-back:active{transform:scale(.94)}
/* 标题：serif 大字收负字距；字重 600 保层级 */
.mem-topbar .mt-title{font-size:16.5px;font-weight:600;letter-spacing:-.2px}

/* --- 2. 按钮：按压反馈 + 统一 44px 命中区 ---
   HIG：按下即反馈、不等松手；反馈在手势全程连续。原仅 translateY，改为同时 scale。 */
.btn{transition:transform .1s ease-out, border-color .18s var(--ease,ease),
  color .18s var(--ease,ease), background .18s var(--ease,ease), box-shadow .18s var(--ease,ease), filter .18s var(--ease,ease)}
.btn:active{transform:translateY(0) scale(.965)}
.btn.primary:active,.btn.gold:active{transform:scale(.965);filter:brightness(.98)}
/* 顶栏内按钮统一 44px 命中高度（视觉高度仍紧凑，用 padding 补足热区） */
.mem-topbar .mt-actions .btn{min-height:40px;padding:9px 15px;font-size:13.5px;border-radius:11px}
/* 同排按钮必须等高：送花（主 CTA）此前 border:0 使其比相邻的「留言/更多」矮 2px，
   桌面档三个按钮基线错开（top 108 vs 107）。改为透明边框——保留无描边的观感，
   同时让盒模型与相邻按钮一致；再统一 min-height，三键严格对齐。 */
.mem-topbar .mt-flower-btn{border:1px solid transparent}
/* 「送花」主操作：唯一强调色按钮，带一层柔光晕（克制使用 Liquid Glass 精神） */
.mem-topbar .mt-actions .btn.primary{box-shadow:0 4px 14px rgba(10,60,160,.26)}

/* --- 3. 更多面板：材质 + 弹簧进出场 ---
   HIG 弹出层：锚定触发元素、进出场同路径；Spring 默认 bounce 0、duration .3-.4s。 */
.mt-more-panel{
  border-radius:16px;border-color:rgba(3,46,126,.08);
  background:rgba(255,255,255,.86);
  backdrop-filter:blur(24px) saturate(180%);
  -webkit-backdrop-filter:blur(24px) saturate(180%);
  box-shadow:0 18px 48px rgba(3,46,126,.16), 0 2px 8px rgba(60,63,58,.06),
             0 1px 0 rgba(255,255,255,.9) inset;
  transform:translateY(-8px) scale(.97);transform-origin:top right;
  transition:opacity .2s var(--ease,ease), transform .28s cubic-bezier(.34,1.3,.64,1), visibility .2s}
.mt-more-wrap.open .mt-more-panel{transform:translateY(0) scale(1)}
.mt-more-item,.mt-more-panel .dnav-item{border-radius:9px}
.mt-more-item:active,.mt-more-panel .dnav-item:active{transform:scale(.98)}
.mt-more-cap{font-size:11px;letter-spacing:1.8px;font-weight:600}

/* --- 4. 分区标题：建立「章节感」，字距随字号变 ---
   Title 2 档（22px/28）映射：serif 序号 + 加重标题 + 弱化副标题。 */
.sec-part{margin:30px 0 4px;padding:0 2px 11px;gap:11px}
.sec-part-no{font-size:20px;letter-spacing:-.3px;opacity:.9}
.sec-part-t{font-size:16.5px;letter-spacing:.6px}
.sec-part-s{font-size:12.5px;letter-spacing:.2px}

/* --- 5. 区块标题（.sub-h）：与分区标题形成层级差 ---
   原 16px + 3px 左竖线。改为 17px（Headline 档）+ 更高的竖线 + 收负字距。 */
.sub-h{font-size:17px;font-weight:600;letter-spacing:-.1px;
  margin:26px 0 13px;padding-left:12px;border-left-width:3.5px;border-radius:1px;
  line-height:1.35}

/* --- 6. 人物卡：肖像质感 + 姓名层级 ---
   HIG：层级优先加字重；大字收负字距。照片半径 12 → 16px 贴近 iOS 卡片。 */
.mem-profile{padding:20px 22px;gap:22px;
  box-shadow:0 12px 32px rgba(60,63,58,.06), 0 1px 0 rgba(255,255,255,.9) inset}
.mem-profile-photo{border-radius:16px;box-shadow:0 10px 26px rgba(60,63,58,.13);
  border-color:rgba(3,46,126,.09)}
.mem-profile-name{font-size:26px;font-weight:700;letter-spacing:-.6px;line-height:1.22}
.mem-profile-quote{font-size:15px;letter-spacing:.1px}
.mem-profile-dates{font-size:13.5px;letter-spacing:.5px}

/* --- 7. 生活痕迹库：分类条与面板质感 --- */
.life-cats{background:rgba(252,251,247,.72);border-color:rgba(3,46,126,.07);
  border-radius:14px;padding:8px 9px}
.life-cat{border-radius:999px;font-size:12.5px;letter-spacing:.1px;
  transition:transform .1s ease-out, background .16s var(--ease,ease),
             border-color .16s var(--ease,ease), color .16s var(--ease,ease)}
.life-cat:active{transform:scale(.95)}
.life-cat.on{box-shadow:0 3px 10px rgba(10,60,160,.24)}
.life-cat .lc-n{font-variant-numeric:tabular-nums}
.life-grp-cap{letter-spacing:.6px;font-weight:600}

/* --- 8. 空面板（压成一行目录）：行高与提示符 --- */
.act-panel.is-empty:not(.is-open) .act-panel-head{min-height:46px}
.act-panel.is-empty:not(.is-open) .act-panel-title{font-size:14.5px;letter-spacing:-.05px}

/* --- 9. 卡片统一：柔化阴影层次（内容层不用模糊，只用阴影分层） --- */
.card{border-radius:var(--radius)}
.mem-profile,.act-panel{border-radius:16px}

/* --- 10. 动效 / 无障碍必备 media query --- */
@media (prefers-reduced-motion: reduce){
  .mt-more-panel{transition:opacity .01ms, visibility .01ms;transform:none}
  .mt-more-wrap.open .mt-more-panel{transform:none}
  .btn,.mem-topbar .mt-back,.life-cat,.mt-more-item,.mt-more-panel .dnav-item,
  .dnav-sub-item,.act-panel,.life-pane.on{transition:none;animation:none}
  .btn:active,.mem-topbar .mt-back:active,.life-cat:active,
  .mt-more-item:active,.mt-more-panel .dnav-item:active{transform:none}
  .life-pane.on{animation:none}
}
@media (prefers-reduced-transparency: reduce){
  .mem-topbar{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none}
  .mt-more-panel{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none}
}
@media (prefers-contrast: more){
  .mem-topbar{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none;
    border-bottom-color:var(--ink)}
  .mt-more-panel{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none;
    border:1.5px solid var(--ink)}
  .life-cat{border-color:var(--ink)}
  .sub-h{border-left-color:var(--ink-strong)}
  .sec-part{border-bottom-color:var(--ink)}
}
/* 深色模式：本站暂无深色主题，此处仅保证系统深色下顶栏/面板仍可读（不做全站 inversion） */
@media (prefers-color-scheme: dark){
  .mem-topbar{background:rgba(28,30,27,.78);border-bottom-color:rgba(255,255,255,.10)}
  .mem-topbar::before{background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent)}
  .mt-more-panel{background:rgba(38,40,37,.90);border-color:rgba(255,255,255,.12)}
}

/* --- 11. 顶栏布局稳健性：更多面板的文本不参与按钮度量 ---
   问题：.mt-more-panel 是 .mt-more-wrap 内的绝对定位子元素，
   其全部菜单文本仍作为 wrap 的文本子节点参与 flex 尺寸计算，
   把 .mt-title 挤到 68px（名字稍长即截断）。
   修：面板 absolute 定位脱离文档流 + wrap 尺寸由按钮决定 + 标题设保底宽度。 */
/* wrap 尺寸严格由内部按钮决定：面板改为「脱离 wrap 度量」的定位子元素 */
.mt-more-wrap{flex:0 0 auto;position:relative;display:inline-flex}
.mt-more-wrap > .mt-more-panel{position:absolute;top:calc(100% + 8px);right:0}
/* 标题保底 4 个字（label 已截断仍可辨识），并优雅省略。 */
.mem-topbar .mt-title{flex:1 1 auto;min-width:72px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 空间不足时（≤575px）按钮收紧内距，把宽度让给标题 */
@media (max-width:575px){
  .mem-topbar .mt-actions{gap:5px}
  .mem-topbar .mt-actions .btn{padding:7px 8px;font-size:12.5px;border-radius:10px}
  /* 390 档实测：「认领 + 留言 + 更多」同排时标题的 min-width:72px 兜底会把 mt-actions
     顶出视口右缘（scrollWidth 多 9~12px）。放行标题继续收缩（min-width:0 / flex-basis:0），
     由 ellipsis 消化宽度；实测标题仍有 ~72px，够辨识，且不再产生横向滚动。 */
  .mem-topbar .mt-title{min-width:0;flex:1 1 0}
  /* 窄屏 + 有认领按钮：三键（认领此档案 / 留言 / 更多）在 360/320px 下总量超出顶栏宽度，
     「更多」被挤出右缘（实测越界）。认领按钮收窄成「认领」二字，省下约 26px，
     360/320 档即可全部落回栏内。 */
  .mem-topbar.has-claim .claim-cta .claim-full{display:none}
  .mem-topbar.has-claim .claim-cta .claim-short{display:inline}
  .mem-topbar.has-claim .claim-cta{padding:7px 10px}
}

/* ============================================================================
   全站美化层（Apple HIG 对齐 · 2026-10-13）
   依据 apple-ui-design skill：HIG 静态规格 + Liquid Glass 材质 + Fluid Interfaces 动效。
   —— 全部为「追加覆盖层」，不改动上方既有规则，便于整体回退。
   范围：底部 Tab / 空态 / 卡片 / 按钮 / 表单 / 弹窗 / 首页 / 列表 / 页脚。
   ============================================================================ */

/* --- A1. 底部 Tab：材质层 + SVG 图标尺寸 + 选中态 --- */
.bottom-tab{
  background:rgba(252,251,247,.82);
  backdrop-filter:blur(20px) saturate(180%);
  -webkit-backdrop-filter:blur(20px) saturate(180%);
  border-top:1px solid rgba(3,46,126,.10);
  box-shadow:0 -1px 0 rgba(255,255,255,.7) inset, 0 -8px 28px rgba(3,46,126,.07)}
/* 亮顶边：光线打在材质上（材质层统一手法） */
.bottom-tab::before{content:'';position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.9),transparent);pointer-events:none}
.bt-item .bt-ico{display:grid;place-items:center;width:24px;height:24px;
  transition:transform .22s cubic-bezier(.34,1.3,.64,1)}
.bt-item .bt-ico svg{display:block}
.bt-item .bt-label{font-size:10.5px;letter-spacing:.3px;font-weight:500;margin-top:2px}
.bt-item.active .bt-label{font-weight:600}
.bt-item.active .bt-ico{transform:translateY(-1.5px) scale(1.1)}
/* 按下即反馈：不等松手（Fluid Interfaces），100ms ease-out */
.bt-item:active .bt-ico{transform:scale(.9)}
.bt-item:active{opacity:1;color:var(--green-2)}

/* --- A2. 空态：从「一行灰字」升级为「图标 + 主副文案」的呼吸感区块 --- */
.empty{
  padding:56px 24px;font-size:14.5px;line-height:1.7;
  background:linear-gradient(180deg,var(--card),var(--bg2));
  border:1px dashed var(--line);border-radius:var(--radius);
  display:flex;flex-direction:column;align-items:center;gap:6px}
/* 空态图标：柔和圆底 + 居中图形，避免大面积留白显得"坏掉了" */
.empty-ico{display:inline-grid;place-items:center;width:56px;height:56px;margin-bottom:6px;
  border-radius:50%;font-size:26px;line-height:1;
  background:radial-gradient(circle at 35% 30%,var(--green-tint),var(--green-soft));
  border:1px solid rgba(3,46,126,.10);
  box-shadow:0 6px 18px rgba(3,46,126,.08), 0 1px 0 rgba(255,255,255,.9) inset}
.empty-click{cursor:pointer;transition:transform .12s ease-out, border-color .2s var(--ease,ease), color .2s var(--ease,ease), background .2s var(--ease,ease), box-shadow .2s var(--ease,ease)}
.empty-click:hover{border-color:rgba(3,46,126,.45);color:var(--green-2);
  box-shadow:0 10px 26px rgba(3,46,126,.09);transform:translateY(-1px)}
.empty-click:hover .empty-ico{background:radial-gradient(circle at 35% 30%,#fff,var(--green-soft))}
.empty-click:active{transform:scale(.985)}

/* --- A3. 卡片：统一圆角与两层阴影（内容层不用模糊，只靠阴影分层） --- */
.card{border-radius:var(--radius);
  box-shadow:var(--shadow-sm);
  transition:box-shadow .24s var(--ease,ease), border-color .2s var(--ease,ease), transform .12s ease-out}
.card:hover{box-shadow:var(--shadow)}
/* 可点卡片：按下即反馈 */
.card[onclick]:active,.card.clickable:active{transform:scale(.99)}
/* 卡片标题与正文的层级差（字重 + 字号 + 颜色三者组合） */
.card h3,.card h4{letter-spacing:-.15px}

/* --- A4. 按钮：按压反馈 + 主按钮质感 --- */
.btn{transition:transform .1s ease-out, filter .18s var(--ease,ease),
  background .18s var(--ease,ease), color .18s var(--ease,ease),
  border-color .18s var(--ease,ease), box-shadow .18s var(--ease,ease)}
.btn:active{transform:scale(.965)}
.btn.primary{box-shadow:0 4px 14px rgba(10,60,160,.24), 0 1px 0 rgba(255,255,255,.22) inset}
.btn.primary:active{transform:scale(.965);filter:brightness(.97)}
.btn.ghost,.btn:not(.primary):not(.gold):not(.danger):not(.claim-cta):not(.cmt-toggle):not(.write-cta){background:rgba(255,255,255,.9);
  border:1px solid var(--line)}
.btn.ghost:hover,.btn:not(.primary):not(.gold):not(.danger):not(.claim-cta):not(.cmt-toggle):not(.write-cta):hover{border-color:rgba(3,46,126,.32);
  color:var(--green-2);background:#fff}
/* 命中区保底：不改变视觉尺寸，只补足可点范围（HIG 44px） */
.btn.sm{position:relative}
.btn.sm::after{content:'';position:absolute;inset:-6px -4px;pointer-events:auto}

/* --- A5. 表单：焦点态清晰化 + 统一圆角与过渡 --- */
input,textarea,select{
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.92);
  border:1px solid var(--line)}
input::placeholder,textarea::placeholder{color:var(--muted);opacity:.72}
input:focus,textarea:focus,select:focus{
  border-color:var(--green);
  box-shadow:0 0 0 3.5px rgba(3,46,126,.12)}
/* label 与控件的层级：label 用字重而非更大字号 */
.field>label,.field label{font-weight:600;font-size:13.5px;letter-spacing:.1px}

/* --- A6. 弹窗：材质 + 弹簧进出场 --- */
.modal-mask{background:rgba(42,45,40,.42);backdrop-filter:blur(6px) saturate(140%);
  -webkit-backdrop-filter:blur(6px) saturate(140%)}
.modal>.box,.modal .box{
  background:rgba(252,251,247,.94);
  backdrop-filter:blur(24px) saturate(180%);
  -webkit-backdrop-filter:blur(24px) saturate(180%);
  border-radius:20px;
  box-shadow:0 28px 70px rgba(3,46,126,.22), 0 4px 14px rgba(60,63,58,.08),
             0 1px 0 rgba(255,255,255,.9) inset;
  animation:modalSpring .34s cubic-bezier(.34,1.3,.64,1) both}
@keyframes modalSpring{
  from{opacity:0;transform:translateY(10px) scale(.965)}
  to{opacity:1;transform:translateY(0) scale(1)}}

/* --- A7. 页脚：低调收束，不与内容争抢 --- */
.foot,.footer{font-size:12.5px;line-height:1.9;color:var(--muted);letter-spacing:.1px}

/* --- A8. 分区标题：建立章节感（字距随字号变） --- */
.section-title{letter-spacing:-.2px;line-height:1.3}
.section-title small{font-size:13px;letter-spacing:.2px;font-weight:400;opacity:.8}

/* --- A9. 列表项：行高与分隔的呼吸感 --- */
.list-item,.feed-item{transition:background .18s var(--ease,ease)}
.list-item:hover,.feed-item:hover{background:var(--green-tint)}

/* --- A10. 徽标 / 标签：统一圆角与字距 --- */
.tag,.badge{border-radius:999px;font-weight:600;letter-spacing:.3px}

/* --- A11. 必备 media query（HIG 无障碍底线） --- */
@media (prefers-reduced-motion: reduce){
  .modal>.box,.modal .box{animation:none}
  .bt-item .bt-ico,.card,.btn,.empty-click,.list-item,.feed-item{transition:none}
  .btn:active,.card[onclick]:active,.card.clickable:active,
  .empty-click:active,.bt-item:active .bt-ico{transform:none}
}
@media (prefers-reduced-transparency: reduce){
  .bottom-tab{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none}
  .modal>.box,.modal .box{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none}
  .modal-mask{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(42,45,40,.55)}
}
@media (prefers-contrast: more){
  .bottom-tab{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none;
    border-top:1.5px solid var(--ink)}
  .card{border:1.5px solid var(--ink)}
  .btn{outline:1px solid transparent}
  .btn.ghost,.btn:not(.primary):not(.gold):not(.danger){border:1.5px solid var(--ink)}
  input,textarea,select{border:1.5px solid var(--ink)}
  .empty{border:1.5px dashed var(--ink)}
  .modal>.box,.modal .box{border:1.5px solid var(--ink)}
}
/* 深色模式：本站为浅色主题，仅保证系统深色下控件层仍可读，不做全站 inversion */
@media (prefers-color-scheme: dark){
  .bottom-tab{background:rgba(28,30,27,.82);border-top-color:rgba(255,255,255,.10)}
  .bottom-tab::before{background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent)}
  .modal>.box,.modal .box{background:rgba(38,40,37,.94);border-color:rgba(255,255,255,.12)}
}

/* --- A2b. 空态图标：统一线性 SVG（替代 emoji，消除跨端豆腐块） ---
   .empty 有 50+ 调用点，逐处改 JS 既易漏又难维护。这里用「父容器特征选择器」
   自动补图标：圆底渐变 + 线性图标作为第二背景层（单伪元素，零定位错位），
   未命中的空态一律用中性「空盒」图标兜底。 */
.empty::before{
  content:'';display:inline-grid;place-items:center;
  width:56px;height:56px;margin-bottom:8px;
  border-radius:50%;
  border:1px solid rgba(3,46,126,.10);
  box-shadow:0 6px 18px rgba(3,46,126,.08), 0 1px 0 rgba(255,255,255,.9) inset;
  background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M4%207l8-4%208%204-8%204-8-4ZM4%207v10l8%204%208-4V7M12%2011v10'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));
}
/* 已自带 .empty-ico 元素的空态：不重复注入（保留其自带 SVG） */
.empty:has(.empty-ico)::before{background:none;border:0;box-shadow:none;width:auto;height:auto;margin:0}
/* 紧凑型空态（列表内、抽屉内）保持轻量 */
.rec-list .empty::before,
.drawer .empty::before,
.modal .empty::before,
.mt-more-panel .empty::before,
.comment-list .empty::before{
  width:38px;height:38px;margin-bottom:4px;background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M4%207l8-4%208%204-8%204-8-4ZM4%207v10l8%204%208-4V7M12%2011v10'%2F%3E%3C%2Fsvg%3E") center/18px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));
}
.rec-list .empty{padding:28px 14px}
.comment-list .empty{padding:22px 12px;border-style:solid;background:var(--bg2)}

/* 按父容器语义给出更贴切的图标 */
.rel-list .empty::before,.mem-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M9.5%209h5l-.5%204h-4l-.5-4ZM10%2017a2%202%200%200%200%204%200v-3h-4v3ZM12%206c1.3%201.6%201.6%203%200%204-1.6-1-1.3-2.4%200-4ZM12%2013h.01'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.products-list .empty::before,.shop-list .empty::before,.pd-grid .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M3.5%209.5h17v10a1%201%200%200%201-1%201h-15a1%201%200%200%201-1-1v-10ZM3.5%2013h17M12%209.5v11M12%209.5s-1.5-4.5%201.7-4.5c1.6%200%202.3%201.2%202.3%202.3%200%201.2-1%202.2-2.5%202.2M12%209.5s1.5-4.5-1.7-4.5'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.fam-list .empty::before,.fam-body .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M9%208a3.2%203.2%200%201%201%206%200%203.2%203.2%200%200%201-6%200ZM3%2020c0-3.3%202.7-5.5%206-5.5s6%202.2%206%205.5M16.5%209.5a2.3%202.3%200%201%201%204.5.5%202.3%202.3%200%200%201-4.5-.5ZM15.5%2014.6c2.6.3%204.5%202.2%204.5%204.4'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.dream-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M20%2014.5A8%208%200%201%201%209.5%204%206.5%206.5%200%200%200%2020%2014.5Z'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.th-list .empty::before,.treehole-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M12%2021v-8M7.5%2013a4.5%204.5%200%201%201%209%200%204.5%204.5%200%200%201-9%200ZM12%203v4'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.sk-list .empty::before,.skills-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M9%2018h6M10%2021h4M12%203a6%206%200%200%200-3.5%2010.9c.5.4.5%201%20.5%201.6V17h6v-1.5c0-.6%200-1.2.5-1.6A6%206%200%200%200%2012%203Z'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.meta-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M12%204a7%207%200%200%201%200%2014%207%207%200%200%201%200-14ZM8%2018h8M9.5%2021h5'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.col-list .empty::before,.co-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M6%203h12a1%201%200%200%201%201%201v17l-7-4-7%204V4a1%201%200%200%201%201-1Z'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.ann-list .empty::before,.anni-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M4%206a1%201%200%200%201%201-1h14a1%201%200%200%201%201%201v14a1%201%200%200%201-1%201H5a1%201%200%200%201-1-1V6ZM4%2010h16M8%203v4M16%203v4'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.msg-list .empty::before,.notify-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M4%206h16a1%201%200%200%201%201%201v10a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V7a1%201%200%200%201%201-1ZM4%207l8%206%208-6'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.friend-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M4%2012l4%204%203-3M20%2012l-4%204-3-3M11%2013l2-2%202%202M5%209l2%202M19%209l-2%202'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.order-list .empty::before{background:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'%235a6b86'%20stroke-width%3D'1.7'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Cpath%20d%3D'M6%203h12v18l-3-2-3%202-3-2-3%202V3ZM9%208h6M9%2012h6'%2F%3E%3C%2Fsvg%3E") center/28px no-repeat, radial-gradient(circle at 35% 30%, var(--green-tint), var(--green-soft));}
.rec-list .empty::before,.drawer .empty::before,.modal .empty::before,.mt-more-panel .empty::before,.comment-list .empty::before{background-size:18px,cover}


/* --- A2c. 空态居中：不在网格里贴边显示，限宽居中更有"专属提示区"的感觉 ---
   2026-10-27：用户要求「所有空态卡片改宽一点」——原 max-width:560 在 .grid（minmax(248px,1fr)）
   里会被单列卡到 ~246px，现改为网格内通栏（1/-1）并把限宽放宽到 880，卡片明显变宽且仍居中。
   注意排除 .dm-nav-card.empty：那是导航卡的「空」修饰态，不能通栏。 */
.empty{width:100%;max-width:880px;margin-left:auto;margin-right:auto}
.empty:not(.dm-nav-card){grid-column:1/-1}

/* === 14. 全站统一线性图标（Ico）：替代各处 emoji 图标 === */
.ico-svg{display:inline-block;vertical-align:middle;flex:0 0 auto}
/* 侧栏图标：原本是 emoji，现换 SVG，需让 24px 图标在 20px 文字行里垂直居中 */
.s-emoji{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px}
.s-emoji .ico-svg{width:20px;height:20px}
.ex-emoji{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px}
.ex-emoji .ico-svg{width:22px;height:22px}
/* 行内小图标（.da-ico / .pb-ico / .mm-ico / .mt-ico 等）：尺寸收敛到 13–14 */
.da-ico,.pb-ico,.mm-ico,.tip-ico{display:inline-flex;align-items:center}
.da-ico .ico-svg,.pb-ico .ico-svg,.mm-ico .ico-svg,.tip-ico .ico-svg{width:13px;height:13px}

/* =============================================================
   13. 生平简介卡重排（B1–B4）
   问题：① 照片与简介同处一行，长文被压成窄栏，阅读宽度差；
        ② 移动端整卡竖排后照片独占一行、右侧大片留白；
        ③ 「全部展开」绝对定位在姓名上方，孤立悬空与简介脱节；
        ④ 姓名为给按钮让位写了 padding-right:190px 的 hack。
   重排：上区 = 照片 + 姓名/纪念语/生卒（始终同行，窄屏缩小照片）；
        下区 = 简介通栏（细虚线分隔）+ 展开按钮跟随简介尾部右对齐。
   ============================================================= */
/* B1. 容器改纵向两区；上区照片+身份信息同行 */
.mem-profile{flex-direction:column;align-items:stretch;gap:0}
.mem-profile-head{display:flex;gap:20px;align-items:flex-start;min-width:0}
.mem-profile-info{flex:1 1 auto;min-width:0;position:static}
/* B2. 姓名：删掉为绝对定位按钮留白的 padding-right hack；
   纪念语 / 生卒紧随其下，构成「身份区」 */
.mem-profile-name{padding-right:0;margin:2px 0 8px}
.mem-profile-dates{margin:0}
/* B3. 简介通栏：上缘细虚线分隔，阅读宽度上限 62em（约 34 字/行），
   正文字色从 muted 提到 ink——简介是正文不是辅助说明 */
.mem-profile-desc{margin:16px 0 0;padding-top:13px;border-top:1px dashed var(--line);
  font-size:14.5px;color:var(--ink);max-width:62em}
/* B4. 展开按钮回归正常流，右对齐跟在简介之后；收窄为文字级轻量样式 */
.mp-tools{position:static;z-index:auto;display:flex;justify-content:flex-end;margin:9px 0 0}
.mp-tool{background:transparent;border-color:var(--line-soft);color:var(--muted);
  box-shadow:none;padding:4px 11px}
.mp-tool:hover:not(:disabled){box-shadow:0 2px 8px rgba(3,46,126,.10)}
.mp-tool .mt-ico{transition:transform .24s cubic-bezier(.34,1.3,.64,1),color .15s}
.mp-tool:active:not(:disabled) .mt-ico{transform:scale(.85)}
/* 窄屏：照片缩为 96×128 与姓名同行（不再整卡竖排），间距收紧 */
@media (max-width:640px){
  .mem-profile{padding:16px}
  .mem-profile-head{gap:14px}
  .mem-profile-photo{width:96px;height:128px;border-radius:13px}
  .mem-profile-name{font-size:22px;margin:0 0 6px}
  .mem-profile-dates{font-size:13px}
  .mem-profile-desc{font-size:14px;margin-top:13px;padding-top:11px}
}
/* B4b. hidden 必须真正生效：.mp-tool 的 display:inline-flex 与 UA 的 [hidden] 同优先级
   且在级联中更靠后会把它覆盖掉，需显式补一条 */
.mp-tool[hidden]{display:none}

/* =====================================================================
   15. 好友与私聊面板 + 私聊窗（S1–S6）   2026-10-14
   设计目标：把「好友与私聊」从一个"表单弹窗"升级为一个"社交中心"。
   S1 面板骨架（标题区 / 分组标题）  S2 查找行  S3 列表行卡片
   S4 空态收敛  S5 私聊窗（头部 / 消息区 / 输入区）  S6 窄屏与无障碍
   设计依据：沿用站内 token（主色 #032E7E、米白底、圆角 18/13、shadow-sm）；
   点击目标一律 ≥44px（HIG）；次要文字用 --muted（对比度 ≥4.5:1，达 WCAG AA）。
   ===================================================================== */

/* ---------- S1. 面板骨架 ---------- */
/* 面板收窄到 520：这里装的是"人 + 短列表"，过宽会把每行拉散、动作按钮离名字太远 */
.modal-card:has(> .social-panel){width:min(520px,94vw)}
.social-panel{}
/* 标题区：图标徽章 + 标题 + 副标题（右侧留出 34px 给弹窗关闭按钮，避免压字） */
.sp-head{display:flex;align-items:center;gap:12px;padding-right:34px}
.sp-head-ico{width:40px;height:40px;flex:0 0 auto;border-radius:13px;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;
  box-shadow:0 6px 16px rgba(10,60,160,.26)}
.sp-head-ico svg{width:20px;height:20px}
.sp-head-tx{min-width:0}
.sp-head-tx h3{margin:0;font-size:19px;line-height:1.25;letter-spacing:.5px}
.sp-head-sub{font-size:12.5px;color:var(--muted);margin-top:3px;letter-spacing:.2px}

/* 分组标题：图标 + 标题 + 数量徽标 + 右侧延伸细线（用"线"代替空白，视觉上把分组收拢） */
.sp-sec{margin-top:18px}
.sp-sec-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;color:var(--green-2)}
.sp-sec-head .ico-svg{opacity:.9}
.sp-sec-title{font-size:13.5px;font-weight:600;color:var(--ink-strong);letter-spacing:.5px}
.sp-sec-count{min-width:20px;height:20px;padding:0 6px;border-radius:999px;display:inline-grid;place-items:center;
  background:var(--green-soft);color:var(--green-2);font-size:11.5px;font-weight:600;line-height:1}
.sp-sec-line{flex:1;height:1px;background:linear-gradient(90deg,var(--line) 60%,transparent)}

/* ---------- S2. 查找行 ---------- */
/* 查找输入框采用与站内 .search-pill / .top-search 一致的「容器 + 内联 SVG 图标 + 透明 input」模式：
   不使用 data-uri 背景图——input 默认 appearance:auto 会让 background-size/repeat/position 的 longhand
   被浏览器忽略，实测表现为放大镜被平铺（见 10-14 修复记录）。视觉全部落在 .sp-field 容器上，
   input 仅承载文字，彻底规避该兼容坑，也统一了站内实现。 */
.sp-search{display:flex;gap:10px;margin-top:16px}
.sp-field{position:relative;flex:1 1 auto;min-width:0;height:44px;display:flex;align-items:center;
  background-color:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);
  transition:border-color var(--t-fast,.16s) var(--ease,ease),
             box-shadow var(--t-fast,.16s) var(--ease,ease),
             background-color var(--t-fast,.16s) var(--ease,ease)}
.sp-field:focus-within{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft);background-color:#fff}
/* 放大镜图标：绝对定位在 left:13px/16px 尺寸，灰（--muted，对比度达 WCAG AA）；pointer-events:none 不挡输入 */
.sp-search-ico{position:absolute;left:13px;top:50%;transform:translateY(-50%);
  display:inline-flex;width:16px;height:16px;color:var(--muted);pointer-events:none}
.sp-search-ico svg{width:16px;height:16px;display:block}
/* 透明 input：border/background/outline 全部归零，避免全局 input 规则把输入框撑出容器两端。
   必须显式 appearance:none：input 默认 appearance:auto 在移动端/部分引擎会把背景渲染交给原生控件，
   导致我们设的 transparent 乃至 background-size 等 longhand 被忽略（放大镜平铺即此因），故关掉原生外观。 */
.sp-input{flex:1 1 auto;min-width:0;width:100%;height:100%;box-sizing:border-box;
  padding:0 12px 0 38px;border:0;outline:0;background:transparent;box-shadow:none;
  border-radius:0;-webkit-appearance:none;appearance:none;
  font-family:inherit;font-size:14px;line-height:1.5;color:var(--ink)}
.sp-input::placeholder{color:var(--muted);opacity:.85}
.sp-input::-webkit-search-cancel-button{-webkit-appearance:none;display:none}
.sp-search-btn{flex:0 0 auto;min-width:88px;height:44px;padding:0 18px}

/* ---------- S3. 列表行卡片 ---------- */
.sp-list{display:flex;flex-direction:column;gap:8px}
.sp-row{
  display:flex;align-items:center;gap:12px;width:100%;min-height:58px;padding:9px 12px;
  text-align:left;font-family:inherit;font-size:14px;color:var(--ink);
  border:1px solid var(--line);border-radius:14px;background:#fff;
  transition:transform var(--t-fast,.16s) var(--ease,ease),
             box-shadow var(--t-fast,.16s) var(--ease,ease),
             border-color var(--t-fast,.16s) var(--ease,ease),
             background-color var(--t-fast,.16s) var(--ease,ease);
}
button.sp-row{cursor:pointer}
.sp-row:hover{border-color:rgba(3,46,126,.38);background:var(--green-tint);
  transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.sp-row:active{transform:translateY(0)}
.sp-row:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
/* 好友行：可点击主体进入私聊 + 独立的删除好友按钮（互相删除） */
.friend-row{position:relative}
.friend-main{flex:1;display:flex;align-items:center;gap:12px;min-width:0;cursor:pointer}
.friend-del{flex:0 0 auto;width:34px;height:34px;margin-left:2px;border:none;background:transparent;
  border-radius:10px;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);
  cursor:pointer;transition:background-color var(--t-fast,.16s) var(--ease,ease),color var(--t-fast,.16s) var(--ease,ease)}
.friend-del:hover{background:rgba(220,38,38,.12);color:#dc2626}
.friend-del:active{transform:translateY(1px)}
/* 首字头像：无图时主色渐变 + 首字；有图时铺满圆形 */
.sp-ava{width:40px;height:40px;flex:0 0 auto;border-radius:50%;overflow:hidden;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;font-size:16px;font-weight:600}
.sp-ava img{width:100%;height:100%;object-fit:cover;display:block}
.sp-row-main{flex:1;min-width:0}
.sp-name{display:block;font-size:14.5px;font-weight:600;color:var(--ink-strong);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-sub{display:block;font-size:12px;color:var(--muted);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-row-act{display:flex;align-items:center;gap:4px;flex:0 0 auto}
.sp-chat-ico{display:inline-flex;color:var(--green-2);opacity:.85}
.sp-go{display:inline-flex;color:var(--muted);transition:transform var(--t-fast,.16s) var(--ease,ease),color var(--t-fast,.16s)}
.sp-row:hover .sp-go{color:var(--green-2);transform:translateX(2px)}

/* ---------- S4. 空态收敛 ---------- */
/* 面板内空态：虚线卡 + 限高内边距，避免像截图那样占掉半屏高度 */
.social-panel .empty{padding:22px 12px;font-size:13px;border:1px dashed var(--line);
  border-radius:14px;background:var(--bg2);max-width:none}

/* ---------- S5. 私聊窗 ---------- */
/* 聊天窗：比通用弹窗更宽更高（参考微信，给消息区与图片更多空间） */
.modal-card:has(> .cw-wrap){width:min(720px,96vw);padding:16px}
.cw-wrap{margin:-6px -6px 0}
.cw{display:flex;flex-direction:column;height:min(78vh,720px);border:1px solid var(--line);
  border-radius:16px;overflow:hidden;background:var(--bg2);box-shadow:var(--shadow-sm)}
/* 私聊内嵌视图（2026-10-25 用户要求「内嵌式」）：会话窗由 Chat.enterSession() 挂进
   #view（.cw-inline），不再走 modal 浮层；会话期间隐藏 hero 卡片与底部导航 */
.cw-inline{margin:10px auto 0;max-width:720px}
.cw-inline .cw-wrap{margin:0}
.cw-inline .cw{height:min(76vh,680px);min-height:420px}
.cw-inline .cw-head{padding-right:12px}
body.chat-session-on .chat-hero{display:none}
body.chat-nav-on.chat-session-on .content{padding-bottom:22px}
/* 头部：对方头像 + 名字 + 在线点；右侧依次是设置(锁)与返回好友列表
   右内边距预留 40px：弹窗关闭「×」绝对定位在右上角(right:16px)，
   若头部右内边距过小，返回按钮会与「×」贴在一起甚至重叠 */
.cw-head{display:flex;align-items:center;gap:10px;padding:10px 40px 10px 12px;background:#fff;border-bottom:1px solid var(--line)}
.cw-head .sp-ava{width:36px;height:36px;font-size:15px}
.cw-head-tx{flex:1;min-width:0}
.cw-head-name{font-size:14.5px;font-weight:600;color:var(--ink-strong);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cw-head-sub{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted);margin-top:2px}
.cw-dot{width:6px;height:6px;border-radius:50%;background:#3aa76d;box-shadow:0 0 0 3px rgba(58,167,109,.16)}
.cw-back{width:34px;height:34px;flex:0 0 auto;border:1px solid var(--line);border-radius:11px;background:#fff;
  color:var(--muted);display:grid;place-items:center;cursor:pointer;transition:.2s}
.cw-back svg{transform:rotate(180deg)}
.cw-back:hover{color:var(--green-2);border-color:rgba(3,46,126,.4);background:var(--green-tint)}
.cw-back:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
/* 消息区：自上而下由极浅主色渐变到米白，气泡"浮"得更清楚 */
.cw-msgs{flex:1;overflow:auto;padding:14px 14px 18px;display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--green-tint),var(--bg2) 62%)}
.cw-day{align-self:center;margin:8px 0 10px;padding:3px 10px;border-radius:999px;font-size:11.5px;
  color:var(--muted);letter-spacing:.3px;background:rgba(255,255,255,.86);border:1px solid var(--line-soft)}
.cw-line{display:flex;align-items:flex-end;gap:8px;max-width:100%;margin:3px 0}
.cw-line.me{flex-direction:row-reverse}
.cw-avax{width:28px;height:28px;flex:0 0 auto;border-radius:50%;overflow:hidden;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;font-size:12.5px;font-weight:600}
.cw-avax img{width:100%;height:100%;object-fit:cover;display:block}
/* 单聊里自己的头像也显示（与对方一致，左右气泡都有头像，基线由 flex 对齐保证） */
.cw-line.me .cw-avax{opacity:.96}
.cw-b{max-width:min(76%,420px);padding:9px 13px;border-radius:16px;font-size:14.5px;line-height:1.62;
  word-break:break-word;white-space:pre-wrap;box-shadow:0 1px 2px rgba(60,63,58,.06)}
.cw-b.them{background:#fff;border:1px solid var(--line);border-bottom-left-radius:5px}
.cw-b.me{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;
  border-bottom-right-radius:5px;box-shadow:0 4px 12px rgba(10,60,160,.22)}
/* 会话空态：垂直居中，不撑出滚动条 */
.cw .empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  padding:0 16px;margin:0;max-width:none;border:0;background:transparent;font-size:13px;line-height:1.7}
/* 输入区：[麦克风] [胶囊输入(内含焚毁徽标)] [＋ 更多] [发送] —— 统一柔和圆形 + 单一焦点环 */
.cw-input{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#fff;border-top:1px solid var(--line)}
.cw-field{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:8px;height:44px;
  padding:0 16px;border-radius:999px;background-color:#F3F5F4;border:1px solid transparent;
  transition:background-color .18s var(--ease,ease),border-color .18s var(--ease,ease),box-shadow .18s var(--ease,ease)}
.cw-field:hover{background-color:#EDF0EF}
.cw-field:focus-within{background-color:#fff;border-color:rgba(3,46,126,.26);box-shadow:0 0 0 3px rgba(3,46,126,.10)}
/* 关键：清掉全局 `input,textarea,select` 样式对聊天输入框的影响。
   否则输入框自带白底/边框/圆角，聚焦时再叠一层 3.5px 光环，与外层胶囊形成难看的「双框」。 */
.cw-field input,.cw-input input{
  flex:1 1 auto;min-width:0;width:100%;height:100%;padding:0;margin:0;
  border:0;border-radius:0;background:transparent;box-shadow:none;outline:0;
  font-size:14px;color:var(--ink-strong)}
.cw-field input:focus,.cw-input input:focus{border:0;background:transparent;box-shadow:none;outline:0}
.cw-field input::placeholder,.cw-input input::placeholder{color:var(--muted);opacity:.85}
/* 阅后即焚常驻小徽标：开启后让用户一眼知道当前处于焚毁状态，避免误发 */
.cw-burnchip{flex:0 0 auto;display:inline-flex;align-items:center;gap:2px;height:24px;padding:0 9px;border-radius:999px;
  font-size:11.5px;line-height:1;color:#c0392b;background:rgba(192,57,43,.10);border:1px solid rgba(192,57,43,.24);
  font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:2px}
.cw-burnchip b{font-weight:600}
/* 「＋」更多功能：展开/收起折叠面板（柔和圆形，与麦克风按钮一致） */
.cw-plus{flex:0 0 auto;width:42px;height:42px;border:0;border-radius:50%;background:#F3F5F4;
  color:var(--muted);display:grid;place-items:center;cursor:pointer;
  transition:background-color .18s var(--ease,ease),color .18s var(--ease,ease),transform .12s var(--ease,ease)}
.cw-plus svg{width:20px;height:20px;transition:transform .2s var(--ease,ease)}
.cw-plus:hover{background-color:var(--green-tint);color:var(--green-2)}
.cw-plus:active{transform:scale(.94)}
.cw-plus.open{color:#fff;background:linear-gradient(135deg,var(--green),var(--green-2));
  box-shadow:0 4px 12px rgba(10,60,160,.24)}
.cw-plus.open svg{transform:rotate(45deg)}
.cw-plus:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
/* 「+」展开面板：图片 / 语音 / 阅后即焚 折叠于此（参考微信的折叠功能区） */
.cw-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:14px 12px;
  background:var(--bg2);border-top:1px solid var(--line);animation:cwToolsIn .18s var(--ease,ease) both}
@keyframes cwToolsIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.cw-tool{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  height:74px;border:1px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;
  transition:border-color .18s,background .18s,transform .12s}
.cw-tool:hover{border-color:rgba(3,46,126,.4);background:var(--green-tint)}
.cw-tool:active{transform:scale(.97)}
.cw-tool:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
.cw-tool-ico{display:grid;place-items:center;font-size:22px;line-height:1;color:var(--green-2)}
.cw-tool-ico svg{width:22px;height:22px}
.cw-tool-tx{font-size:12px;color:var(--ink-strong)}
.cw-tool-sub{position:absolute;top:6px;right:8px;font-size:10.5px;font-weight:600;color:var(--muted);
  background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:1px 6px;line-height:1.5}
.cw-tool.on{border-color:rgba(192,57,43,.35);background:rgba(192,57,43,.06)}
.cw-tool.on .cw-tool-ico{color:#c0392b}
.cw-tool.on .cw-tool-sub{color:#c0392b;border-color:rgba(192,57,43,.28);background:#fff}
.cw-send{flex:0 0 auto;width:44px;height:44px;border:0;border-radius:50%;cursor:pointer;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;
  box-shadow:0 6px 16px rgba(10,60,160,.26);
  transition:transform var(--t-fast,.16s) var(--ease,ease),filter var(--t-fast,.16s) var(--ease,ease),box-shadow var(--t-fast,.16s) var(--ease,ease)}
.cw-send svg{width:19px;height:19px}
.cw-send:hover{filter:brightness(1.06);transform:translateY(-1px);box-shadow:0 8px 22px rgba(10,60,160,.32)}
.cw-send:active{transform:translateY(0) scale(.94)}
.cw-send:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}

/* 会话设置锁按钮（头部右上） */
/* 关键修复：下方 .cw-sheet/.cw-pending/.cw-recbar/.cw-banner 设了 display:flex，会盖过 [hidden] 默认隐藏，
   导致隐藏态元素仍占位甚至拦截点击（实测遮挡了 .cw-send）。统一用属性选择器强制 hidden 隐藏。 */
[hidden]{display:none !important}
.cw-gear{width:34px;height:34px;flex:0 0 auto;border:1px solid var(--line);border-radius:11px;background:#fff;
  color:var(--muted);display:grid;place-items:center;cursor:pointer;transition:.2s}
.cw-gear svg{width:17px;height:17px}
.cw-gear:hover{color:var(--green-2);border-color:rgba(3,46,126,.4);background:var(--green-tint)}
.cw-gear.on{color:#fff;background:linear-gradient(135deg,var(--green),var(--green-2));border-color:transparent;
  box-shadow:0 4px 12px rgba(10,60,160,.26)}
.cw-gear:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}

/* 会话横幅（私密/等待接受） */
.cw-banner{margin:8px 12px 0;padding:7px 12px;border-radius:12px;font-size:12.5px;line-height:1.5;text-align:center}
.cw-banner.secure{background:rgba(10,60,160,.08);color:var(--green-2);border:1px solid rgba(3,46,126,.18)}
.cw-banner.pending{background:rgba(214,158,46,.12);color:#9a7615;border:1px solid rgba(214,158,46,.32)}

/* 输入区图标按钮：语音（柔和圆形，与「＋」风格一致；去掉描边更干净） */
.cw-input .cw-ico-btn{width:42px;height:42px;flex:0 0 auto;border:0;border-radius:50%;
  background:#F3F5F4;color:var(--muted);display:grid;place-items:center;cursor:pointer;
  transition:background-color .18s var(--ease,ease),color .18s var(--ease,ease),transform .12s var(--ease,ease)}
.cw-input .cw-ico-btn svg{width:20px;height:20px}
.cw-input .cw-ico-btn:hover{color:var(--green-2);background:var(--green-tint)}
.cw-input .cw-ico-btn:active{transform:scale(.94)}
.cw-input .cw-ico-btn:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
.cw-input .cw-ico-btn.recording{color:#fff;background:linear-gradient(135deg,#e74c3c,#c0392b);border-color:transparent;
  box-shadow:0 4px 12px rgba(192,57,43,.32);animation:cwPulse 1.1s infinite}
.cw-input .cw-ico-btn.cw-burn{font-size:17px;line-height:1}
.cw-input .cw-ico-btn.cw-burn.on{color:#fff;background:linear-gradient(135deg,#e74c3c,#c0392b);border-color:transparent}
@keyframes cwPulse{0%,100%{transform:scale(1)}50%{transform:scale(.9)}}

/* 待发送图片缩略条 */
.cw-pending{display:flex;gap:8px;flex-wrap:wrap;padding:10px 12px 2px;background:#fff;border-top:1px solid var(--line)}
.cw-pending-item{position:relative;width:62px;height:62px;border-radius:12px;overflow:hidden;border:1px solid var(--line);
  background:var(--bg2)}
.cw-pending-item img{width:100%;height:100%;object-fit:cover;display:block}
.cw-pending-item .cw-pl-ld{position:absolute;left:0;right:0;bottom:0;font-size:10px;text-align:center;
  background:rgba(0,0,0,.45);color:#fff;padding:2px}
.cw-pending-x{position:absolute;top:2px;right:2px;width:18px;height:18px;border:0;border-radius:50%;background:rgba(0,0,0,.55);
  color:#fff;font-size:13px;line-height:1;cursor:pointer;display:grid;place-items:center}

/* 录音条 */
.cw-recbar{display:flex;align-items:center;gap:10px;padding:9px 12px;background:#fff;border-top:1px solid var(--line);
  font-size:13px}
.cw-rec-dot{width:9px;height:9px;border-radius:50%;background:#e74c3c;box-shadow:0 0 0 3px rgba(231,76,60,.18);
  animation:cwPulse 1.1s infinite}
.cw-rec-tx{color:var(--ink-strong);font-weight:500}
.cw-rec-time{font-variant-numeric:tabular-nums;color:var(--muted)}
.cw-rec-bar .cw-rec-btn,.cw-rec-btn{margin-left:auto;border:1px solid var(--line);background:#fff;color:var(--green-2);
  height:32px;padding:0 14px;border-radius:999px;cursor:pointer;font-size:13px;transition:.18s}
.cw-rec-btn.ghost{color:var(--muted)}
.cw-rec-btn.primary{background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;border-color:transparent}
.cw-rec-btn:hover{filter:brightness(1.04)}

/* 语音气泡（紧凑白胶囊：播放键 + 波形 + 时间 + 倍速，单行排布）
   注意：.cw-b 上的 white-space:pre-wrap 会被子元素继承，模板字符串里的换行+缩进空白
   会在 .vc-body 内生成额外行盒（曾把气泡从 ~66px 撑到 114px，并让播放键/倍速键错位）。
   故气泡内部复位为 white-space:normal，并把各控件尺寸整体收小一档。 */
.cw-b.voice{background:#fff;color:var(--ink-strong);border:1px solid var(--line);box-shadow:var(--shadow-sm);
  display:flex;flex-direction:column;align-items:stretch;gap:0;min-width:120px;padding:7px 11px;white-space:normal}
/* 播放行：播放键 + 波形 + 时间 + 倍速，保持原来的单行排布 */
.cw-b .vc-main{display:flex;align-items:center;gap:8px;white-space:normal}
.cw-line.me .cw-b.voice{background:#fff;color:var(--ink-strong)}
.cw-b .vc-play{width:27px;height:27px;flex:0 0 auto;border:0;border-radius:50%;cursor:pointer;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),var(--green-2));color:#fff;transition:.16s}
.cw-b .vc-play svg{width:13px;height:13px}
.cw-b .vc-play:hover{filter:brightness(1.06)}
.cw-b .vc-body{flex:1;min-width:0;white-space:normal}
.cw-b .vc-bars{display:flex;align-items:center;gap:1.5px;height:21px;cursor:pointer;touch-action:none}
.cw-b .vc-bar{flex:1;min-width:2px;background:rgba(3,46,126,.26);border-radius:1.5px;transition:background .12s}
.cw-b .vc-bar.on{background:linear-gradient(135deg,var(--green),var(--green-2))}
.cw-b .vc-time{font-size:10.5px;line-height:1.35;color:var(--muted);margin-top:1px;font-variant-numeric:tabular-nums}
.cw-b .vc-rate{flex:0 0 auto;height:22px;padding:0 8px;border:1px solid var(--line);border-radius:999px;background:#fff;
  color:var(--green-2);font-size:11px;cursor:pointer;transition:.16s}
.cw-b .vc-rate:hover{background:var(--green-tint)}
/* 转文字：按钮贴气泡右下，识别结果在虚线下展开（文本可长按复制） */
.cw-b .vc-tt{align-self:flex-end;margin:3px 0 0;padding:1px 0;border:0;background:none;font:inherit;
  font-size:11px;line-height:1.5;letter-spacing:.3px;color:var(--green-2);cursor:pointer;transition:color .16s}
.cw-b .vc-tt:hover{color:var(--green);text-decoration:underline}
.cw-b .vc-tt[data-busy="1"]{color:var(--muted);cursor:default;text-decoration:none}
.cw-b .vc-text{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);font-size:13px;line-height:1.62;
  color:var(--ink-strong);white-space:pre-wrap;word-break:break-word;max-height:190px;overflow-y:auto;
  -webkit-user-select:text;user-select:text;cursor:text}
.cw-b .vc-text[hidden]{display:none}

/* 图片气泡（微信式）：图片本身即气泡，外围不再包白框；点击进全屏查看器。
   width:fit-content + 图片 max-width:100%：小图不拉伸、大图封顶，且不会超出容器。 */
.cw-b.img{display:block;width:fit-content;max-width:min(62%,300px);padding:0;background:transparent;
  border:0;border-radius:12px;overflow:hidden;box-shadow:0 2px 10px rgba(42,45,40,.14)}
.cw-line.me .cw-b.img{background:transparent}
.cw-b.img .cw-img{display:block;width:auto;height:auto;max-width:100%;max-height:280px;border-radius:12px;cursor:zoom-in}
.cw-b.img .cw-img-ld{display:block;font-size:12px;color:var(--muted);padding:30px 40px;white-space:nowrap}

/* 私密 / 阅后即焚标识 */
.cw-line.secure .cw-b.them,.cw-line.secure .cw-b.me{box-shadow:0 0 0 1px rgba(10,60,160,.22)}
.cw-line.secure::after{content:''}  /* 私密消息行：气泡已加描边，行不加额外元素 */
.cw-burn{align-self:flex-start;font-size:10.5px;color:#c0392b;background:rgba(192,57,43,.08);
  border-radius:999px;padding:1px 8px;margin:3px 0 0 36px}
.cw-line.me .cw-burn{margin-left:0;margin-right:36px;align-self:flex-end}
/* 已焚毁占位 */
.cw-line.gone{justify-content:center}
.cw-gone{font-size:12px;color:var(--muted);background:rgba(0,0,0,.04);border:1px dashed var(--line);
  border-radius:10px;padding:6px 14px}
/* 撤回占位：仅发送方可见；接收方整行静默移除，无任何提示 */
.cw-line.gone.recall .cw-gone{border-style:solid;background:rgba(3,46,126,.05)}

/* 撤回入口 A：悬停浮现的快捷按钮（仅鼠标设备；触屏走长按菜单） */
.cw-line{position:relative}
.cw-recall-btn{display:none;flex:0 0 auto;align-self:center;margin:0 6px;height:26px;padding:0 10px;
  border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--muted);font-size:12px;
  line-height:1;cursor:pointer;white-space:nowrap;font-family:inherit}
@media (hover:hover) and (pointer:fine){
  .cw-line.me:hover .cw-recall-btn{display:inline-flex;align-items:center}
  .cw-recall-btn:hover{color:var(--green-2);border-color:rgba(3,46,126,.4);background:var(--green-tint)}
}
/* 撤回入口 B：右键 / 长按气泡弹出的操作菜单 */
.cw-menu{position:fixed;z-index:320;min-width:104px;padding:5px;border-radius:12px;background:#fff;
  border:1px solid var(--line);box-shadow:0 12px 30px rgba(42,45,40,.22);animation:fadeIn .12s ease}
.cw-menu-item{display:block;width:100%;padding:8px 14px;border:0;border-radius:8px;background:transparent;
  color:var(--ink-strong);font-size:13.5px;text-align:center;cursor:pointer;font-family:inherit}
.cw-menu-item:hover{background:var(--green-tint);color:var(--green-2)}

/* 微信式全屏图片查看器：黑底沉浸、点击/ESC 关闭、双指缩放、拖动、双击放大 */
.imgv{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.94);display:flex;align-items:center;
  justify-content:center;overflow:hidden;touch-action:none;animation:fadeIn .16s ease}
.imgv-img{max-width:100vw;max-height:100vh;display:block;user-select:none;-webkit-user-drag:none;
  transform-origin:center center;will-change:transform;cursor:zoom-out}
.imgv-img.zoomed{cursor:grab}
.imgv-img.zoomed:active{cursor:grabbing}
.imgv-x{position:absolute;top:14px;right:16px;width:38px;height:38px;border:0;border-radius:50%;
  background:rgba(255,255,255,.16);color:#fff;font-size:22px;line-height:1;cursor:pointer;display:grid;place-items:center}
.imgv-x:hover{background:rgba(255,255,255,.3)}
html.imgv-lock,html.imgv-lock body{overflow:hidden}

/* 会话设置浮层 */
.cw-sheet{position:absolute;left:0;right:0;bottom:0;top:0;background:rgba(255,255,255,.96);backdrop-filter:blur(4px);
  display:flex;flex-direction:column;z-index:5;animation:fadeIn .18s ease}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.cw-sheet-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line)}
.cw-sheet-head span{font-size:15px;font-weight:600;color:var(--ink-strong)}
.cw-sheet-x{width:30px;height:30px;border:0;border-radius:50%;background:var(--bg2);color:var(--muted);font-size:18px;
  cursor:pointer;display:grid;place-items:center}
.cw-sheet-body{padding:14px 16px;overflow:auto;display:flex;flex-direction:column;gap:14px}
.cw-opt{display:flex;align-items:center;justify-content:space-between;gap:12px}
.cw-opt.col{flex-direction:column;align-items:stretch;gap:8px}
.cw-opt-t{font-size:14px;font-weight:600;color:var(--ink-strong);display:flex;align-items:center;gap:6px}
.cw-opt-s{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.5}
/* iOS 风格开关 */
.sw{position:relative;width:44px;height:26px;flex:0 0 auto;cursor:pointer}
.sw input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.sw-knob{position:absolute;inset:0;background:#d7d9d4;border-radius:999px;transition:.2s}
.sw-knob::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;
  box-shadow:0 1px 3px rgba(0,0,0,.25);transition:.2s}
.sw input:checked + .sw-knob{background:linear-gradient(135deg,var(--green),var(--green-2))}
.sw input:checked + .sw-knob::after{transform:translateX(18px)}
.sw input:focus-visible + .sw-knob{outline:2px solid var(--green-2);outline-offset:2px}
/* 阅后即焚分段选择 */
.cw-seg{display:flex;gap:6px;background:var(--bg2);border-radius:12px;padding:4px}
.cw-seg button{flex:1;border:0;background:transparent;color:var(--muted);height:34px;border-radius:9px;cursor:pointer;
  font-size:13px;transition:.16s}
.cw-seg button.on{background:#fff;color:var(--green-2);font-weight:600;box-shadow:var(--shadow-sm)}
.cw-secinfo{font-size:12.5px;color:var(--green-2);background:rgba(10,60,160,.07);border-radius:10px;padding:8px 10px;line-height:1.6}
.cw-secinfo b{letter-spacing:1px}
.cw-pending-tip{font-size:12.5px;color:#9a7615;background:rgba(214,158,46,.12);border-radius:10px;padding:8px 10px;
  line-height:1.6;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.cw-end{height:42px;border:1px solid rgba(192,57,43,.4);background:#fff;color:#c0392b;border-radius:12px;cursor:pointer;
  font-size:13.5px;font-weight:600;transition:.16s}
.cw-end:hover{background:rgba(192,57,43,.06)}
.cw-note{font-size:11.5px;color:var(--muted);line-height:1.6}

/* ---------- S6. 窄屏与无障碍 ---------- */
@media (max-width:900px){
  /* 底部 Tab 会在视口底部压住弹窗，给社交面板单独留出让位（不影响其它弹窗） */
  .modal:has(> .modal-card > .social-panel),
  .modal:has(> .modal-card > .cw-wrap){padding-bottom:calc(14px + var(--tab-h,57px))}
}
@media (max-width:560px){
  .sp-head-ico{width:36px;height:36px;border-radius:12px}
  .sp-head-tx h3{font-size:18px}
  .sp-search{gap:8px}
  .sp-search-btn{min-width:76px;padding:0 14px}
  .sp-row{gap:10px;padding:9px 10px;min-height:56px}
  .sp-ava{width:38px;height:38px;font-size:15px}
  .sp-sec{margin-top:14px}
  .modal-card:has(> .cw-wrap){width:96vw;padding:12px}
  .cw-wrap{margin:-4px -2px 0}
  .cw{height:min(76vh,600px)}
  .cw-b{max-width:82%;font-size:14px}
  .cw-input{padding:9px 10px;gap:7px}
  .cw-input .cw-ico-btn{width:38px;height:38px}
  .cw-plus{width:38px;height:38px}
  .cw-field{height:40px;padding:0 14px}
  .cw-send{width:40px;height:40px}
  .cw-b.voice{min-width:104px;gap:0;padding:6px 10px}
  .cw-b .vc-main{gap:7px}
  .cw-b .vc-bars{height:19px}
  .cw-b .vc-play{width:25px;height:25px}
  .cw-b .vc-rate{height:21px;padding:0 7px}
  .cw-b .vc-text{font-size:12.5px;max-height:160px}
  .cw-b.img{max-width:min(70%,240px)}
  .cw-b.img .cw-img{max-height:240px}
  .cw-tools{gap:8px;padding:12px 10px}
  .cw-tool{height:68px}
  .cw-gear,.cw-back{width:32px;height:32px}
  .cw-pending-item{width:54px;height:54px}
}
/* 无 hover 能力的触屏：用":active 底色"替代 hover 反馈，避免"按了没反应"的错觉 */
@media (hover:none){
  .sp-row:active{background:var(--green-tint);border-color:rgba(3,46,126,.38)}
  .cw-back:active{background:var(--green-tint)}
}
/* 高对比度偏好：给行卡片和气泡补实边，保证弱视用户能分辨边界 */
@media (prefers-contrast:more){
  .sp-row,.cw-b.them,.cw-day{border-color:var(--ink)}
  .cw-send{box-shadow:none;border:1.5px solid var(--ink-strong)}
}

/* ===== 5.al+ 纪念文章 / 短篇随笔 —— Glassmorphism × Soft UI =====
   透明层级：半透白玻璃 + backdrop blur + 白描边高光；柔和光影：环境光斑 +
   亮顶内高光 + 大扩散低透明投影；留白：内边距与纵向节奏整体拉开。 */
/* 环境光斑：卡片后面的两团柔光（蓝调 + 暖调），让玻璃卡「透」出层次 */
.article-col{position:relative}
.article-col::before{content:"";position:absolute;z-index:0;pointer-events:none;
  inset:-48px 0 auto;height:340px;
  background:
    radial-gradient(320px 200px at 18% 12%, rgba(3,46,126,.055), transparent 68%),
    radial-gradient(300px 190px at 85% 55%, rgba(216,150,60,.05), transparent 70%);
  filter:blur(2px)}
.article-col>*{position:relative;z-index:1}
/* 玻璃卡片本体 */
.article-col .article-item{
  background:linear-gradient(160deg, rgba(255,255,255,.66), rgba(255,255,255,.44));
  -webkit-backdrop-filter:blur(18px) saturate(1.5);
  backdrop-filter:blur(18px) saturate(1.5);
  border:1px solid rgba(255,255,255,.72);
  border-radius:22px;
  box-shadow:
    0 1px 0 rgba(255,255,255,.9) inset,          /* 顶部亮内高光 */
    0 -18px 30px -22px rgba(3,46,126,.06) inset, /* 底部环境反光 */
    0 10px 22px -8px rgba(31,45,90,.10),          /* 近影 */
    0 26px 48px -18px rgba(31,45,90,.12);         /* 远影柔扩散 */
  padding:28px 30px 20px;
  transition:box-shadow .35s ease, transform .35s ease}
.article-col .article-item:hover{transform:translateY(-2px);
  box-shadow:0 1px 0 rgba(255,255,255,.9) inset,
    0 -18px 30px -22px rgba(3,46,126,.06) inset,
    0 14px 26px -8px rgba(31,45,90,.12),
    0 32px 56px -18px rgba(31,45,90,.14)}
.article-col .article-item.toc-target{border-color:rgba(3,46,126,.35)}
/* 标题 / meta：留白拉开 + meta 图标淡底 chip 化 */
.article-col .article-item .article-title{margin:0 0 16px}
.article-col .article-item .article-meta{margin-bottom:20px;gap:8px 12px}
.article-col .article-meta .am-item{background:rgba(255,255,255,.5);
  border:1px solid rgba(255,255,255,.7);border-radius:999px;padding:3px 11px;
  box-shadow:0 2px 6px -2px rgba(31,45,90,.08)}
.article-col .article-meta .am-item svg{opacity:.6}
.article-col .article-meta .am-dot{background:rgba(31,45,90,.18)}
.article-col .article-item .article-body{margin-bottom:24px}
/* 操作行：渐变淡线 + 更大呼吸 */
.article-col .item-tools{margin-top:20px;padding-top:16px;
  border-top:1px solid transparent;
  background:linear-gradient(90deg, transparent, rgba(233,228,216,.9) 18%, rgba(233,228,216,.9) 82%, transparent) top/100% 1px no-repeat}
/* 文字链 chip 化（Soft UI 微浮雕） */
.article-col .art-link{padding:6px 13px;border-radius:11px;
  background:linear-gradient(145deg, rgba(255,255,255,.9), rgba(255,255,255,.55));
  box-shadow:0 1px 0 rgba(255,255,255,.8) inset, 0 2px 6px -2px rgba(31,45,90,.10)}
.article-col .art-link:hover{background:var(--green-soft)}
.article-col .art-link.danger:hover{background:#FBEEEC}
/* 参与缅怀：玻璃描边 + 柔影 */
.article-col .item-tools .cmt-toggle{background:rgba(255,255,255,.6);
  border:1px solid rgba(3,46,126,.22);border-radius:999px;padding:0 16px;height:34px;
  box-shadow:0 1px 0 rgba(255,255,255,.85) inset, 0 3px 8px -3px rgba(3,46,126,.14)}
.article-col .item-tools .cmt-toggle:hover{border-color:var(--green);background:rgba(236,241,250,.85)}
/* 评论区 / 空态 */
.article-col .cmt-box .meta{letter-spacing:2px;opacity:.55}
.article-col .cmt-box{font-size:12.5px}
/* 工具条玻璃化（与卡片同语言） */
.article-col .sel-bar, .sub-h + .sel-bar{
  background:rgba(255,255,255,.5);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  backdrop-filter:blur(14px) saturate(1.4);
  border-color:rgba(255,255,255,.75);border-radius:15px;
  box-shadow:0 1px 0 rgba(255,255,255,.85) inset, 0 6px 16px -8px rgba(31,45,90,.10)}
/* 窄屏：玻璃内边距收敛，光斑缩距 */
/* 5.au 随笔编辑器与上方随笔卡之间留出呼吸（红线处缝隙） */
.article-col + .essay-editor{margin-top:26px}
/* 随笔序号徽标 */
.article-col .article-item .art-seq{display:inline-flex;align-items:center;justify-content:center;
  min-width:22px;height:22px;padding:0 7px;margin-left:9px;border-radius:999px;
  background:rgba(3,46,126,.08);border:1px solid rgba(3,46,126,.12);
  color:var(--green);font-size:12.5px;font-weight:600;font-family:var(--font-sans);
  vertical-align:middle;line-height:1;box-shadow:0 1px 0 rgba(255,255,255,.7) inset}
@media (max-width:575px){
  .article-col{gap:20px}
  .article-col + .essay-editor{margin-top:20px}
  .article-col .article-item{padding:22px 18px 16px;border-radius:18px}
  .article-col::before{inset:-40px 0 auto;height:280px}
  .article-col .item-tools .cmt-toggle-wrap{margin-left:auto}
}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  /* 降级：无 blur 能力时提高底色不透明度，保证可读性 */
  .article-col .article-item{background:rgba(255,255,255,.92)}
  .article-col .sel-bar, .sub-h + .sel-bar{background:rgba(255,255,255,.92)}
}

/* 5.an 文章区标题行布局：写文章主操作上提至标题右侧，工具条只留 目录/全选/删除 */
.sub-h .sec-tools{margin-left:auto}
.sub-h .sec-tools .btn.sm.write-cta{background:var(--green);color:#fff;border-color:transparent;
  box-shadow:0 3px 10px -3px rgba(3,46,126,.35)}
.sub-h .sec-tools .btn.sm.write-cta:hover{filter:brightness(1.08)}
/* 工具条与标题行距收紧；删除键与相邻键同款胶囊（透明底 + hover 淡红） */
.sub-h + .sel-bar{margin-top:-6px}
.sel-bar .btn.sm.danger{background:transparent;border:1px solid transparent}
.sel-bar .btn.sm.danger:not(:disabled):hover{background:#FBEEEC;border-color:transparent}
/* 工具条内所有非删除按钮统一去描边（2026-10-25 用户要求：纪念文章「目录/全选」、
   短篇随笔「全选」等）。胶囊本身已是容器，内部按钮再带白色方框观感割裂；
   用 #view 提权压过主题里 .btn 的 7 层 :not() 描边规则；只改颜色不改宽度，尺寸不抖 */
#view .sel-bar .btn.sm:not(.danger){border-color:transparent}
#view .sel-bar .btn.sm:not(.danger):hover{border-color:transparent}
@media (max-width:575px){
  .sub-h .sec-tools .btn.sm.write-cta{height:30px;padding:0 10px;font-size:12.5px}
}
.sub-h:has(.sec-tools){display:flex;align-items:center;justify-content:space-between}
/* 影像 · 声音 · 文档：标题一行 + 四个操作一行（2026-10-25 用户要求，样式参考截图——
   白色胶囊工具条、图标+文字、删除前竖线分隔，红字）。窄屏标题与工具条各占一行。
   用 #sec_media 提升特异性，避免影响其他区块标题（纪念文章的写文章按钮等）。 */
.sub-h#sec_media{flex-wrap:wrap;row-gap:8px}
.sub-h#sec_media .sub-h-tx{white-space:nowrap}
.sub-h#sec_media .sec-tools{margin-left:auto}
.sub-h#sec_media .sel-bar{gap:2px;padding:3px;border-radius:999px;background:#fff;
  border:1px solid var(--line);box-shadow:0 1px 0 rgba(255,255,255,.85) inset, 0 6px 16px -10px rgba(31,45,90,.12)}
.sub-h#sec_media .sel-bar .btn.sm{height:32px;padding:0 10px;font-size:12.5px;border-radius:999px;gap:4px}
/* 添加媒体 / 上传文件 / 全选 去掉描边（2026-10-25 用户要求），与「删除」一样只留文字+图标；
   主题块给非主色按钮加的 1px 描边会让胶囊内出现三个小方框，观感割裂。 */
.sub-h#sec_media .sel-bar .btn.sm:not(.danger){border-color:transparent}
.sub-h#sec_media .sel-bar .btn.sm:not(.danger):hover{border-color:transparent}
.sub-h#sec_media .sel-bar .btn.sm.danger{margin-left:6px;position:relative}
.sub-h#sec_media .sel-bar .btn.sm.danger::before{content:'';position:absolute;left:-6px;top:7px;bottom:7px;
  width:1px;background:var(--line)}
@media (max-width:640px){
  .sub-h#sec_media .sec-tools{flex:1 1 100%;margin-left:0}
  .sub-h#sec_media .sel-bar{display:flex;flex-wrap:nowrap;width:100%}
  .sub-h#sec_media .sel-bar .btn.sm{flex:1;min-width:0;height:30px;padding:0 4px;font-size:11.5px}
  .sub-h#sec_media .sel-bar .btn.sm svg{width:13px;height:13px}
}

/* 5.ao 文章评论区重排版：meta 行只留 人/时间，编辑/删除移到正文下方右对齐（art-link 玻璃 chip） */
.cmt-list .comment{border-top:1px solid transparent;
  background:linear-gradient(90deg, transparent, rgba(233,228,216,.55) 15%, rgba(233,228,216,.55) 85%, transparent) top/100% 1px no-repeat;
  padding:14px 2px}
.cmt-list .comment:first-of-type{background:none;border-top:0}
.cmt-list .comment-meta{gap:8px}
.cmt-list .comment-meta .who{font-size:13.5px}
.cmt-list .comment-body{margin-top:6px;font-size:14px;line-height:1.8}
.cmt-row-tools{display:flex;gap:4px;justify-content:flex-end;margin-top:8px}
.cmt-row-tools .art-link{padding:4px 11px;font-size:12px}

/* 5.av 影像工具条（图片/视频/文档）手机端重排版：
   原窄屏下按钮逐个左对齐换行、宽窄参差、「更多 ›」孤零一行。现改为
   ①「图片/视频/文档」标签独占一行；
   ②工具按钮收敛为等宽两列网格，主操作（上传）整行醒目；
   ③「下载图片」与「更多 ›」配对填满末行，视频/文档区的「更多」整行居中；
   ④手机端隐藏分页圆点（图片墙可直接滑动翻页），避免圆点挤占按钮阵列。
   桌面端（>575px）布局完全不变。 */
@media (max-width:575px){
  .media-mediabar,.media-mediobar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:8px;align-items:center;justify-content:stretch}
  /* 拆掉中间包裹层，让标签、按钮、分页项都参与同一网格 */
  .media-mediabar>.mb-left,.media-mediobar>.mb-left,
  .media-mediabar>.media-pagebar,.media-mediobar>.media-pagebar,
  .mb-tools{display:contents}
  .media-label{grid-column:1/-1}
  .mb-btn{width:100%;height:34px;justify-content:center;padding:0 10px;font-size:13px}
  .mb-btn.up{grid-column:1/-1}
  .media-dots{display:none}
  .media-more{width:100%;height:34px;justify-content:center;margin:0;padding:0 10px;font-size:13px}
  /* 视频/文档区无「下载」按钮配对，「更多」整行居中 */
  .media-mediobar .media-more{grid-column:1/-1}
  /* 手机端隐藏「删除」的悬停提示层（.tip-box）：触屏无 hover 提示无意义，
     且它在隐藏态仍占位（visibility 而非 display），会把详情页在 320px 下
     撑出约 10px 横向滚动（真机表现为整页可左右晃动）。桌面端保留该提示。 */
  .tip-box{display:none}
}

/* ============ 梦境页 · 健康咨询 ============ */
.dm-head-actions{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media(max-width:560px){.dm-head-actions .btn{padding:7px 12px;font-size:13px}}
/* 手机端「+ 写梦境」靠右：三个咨询入口占满首行后它会换到第二行，
   margin-left:auto 把它推到行尾，右手单手更顺手（同 .mx-write 的处理）。 */
.dm-head-actions .dm-write{margin-left:auto}

.health-wrap{max-width:760px;margin:0 auto}
.health-sub{color:var(--muted);font-size:13.5px;margin:2px 0 12px;line-height:1.6}
.health-banner{background:linear-gradient(0deg,var(--gold-tint,rgba(196,162,71,.12)),rgba(196,162,71,.12));
  border:1px solid rgba(196,162,71,.45);color:#7a5e1c;border-radius:var(--radius-sm);
  padding:10px 14px;font-size:13px;line-height:1.6;margin-bottom:16px}
.health-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow-xs,0 1px 3px rgba(0,0,0,.05))}
.health-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.health-row label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);flex:1;min-width:90px}
.health-row input,.health-row select{padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font:inherit;background:var(--bg2);color:var(--ink)}
.health-row input:focus,.health-row select:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.health-input{width:100%;min-height:120px;resize:vertical;padding:12px 14px;border:1px solid var(--line);
  border-radius:var(--radius-sm);font:inherit;background:var(--bg2);color:var(--ink);line-height:1.6}
.health-input:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.health-form-actions{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.health-form-actions .btn.primary{min-width:120px}

/* 结果卡片 */
.health-result{margin-top:20px;display:flex;flex-direction:column;gap:14px}
.health-summary{font-size:14.5px;line-height:1.7;color:var(--ink-strong);font-weight:500}
.health-block{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.health-block h5{margin:0 0 10px;font-size:14px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif)}
.health-block h5 small{font-weight:400;color:var(--muted);font-size:12px;font-family:var(--font-sans)}
.health-block ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:7px}
.health-block li{font-size:13.5px;line-height:1.6;color:var(--ink)}
.health-empty{list-style:none;margin-left:-18px;color:var(--muted);font-style:italic}

/* 初步印象条目 + 证据等级徽标 */
.health-imp{list-style:none;padding-left:0 !important;gap:9px !important}
.health-imp li{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.health-imp-name{font-weight:600;color:var(--ink-strong)}
.health-imp-note{color:var(--muted);font-size:12px}
.lv{flex:0 0 auto;font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;letter-spacing:.5px}
.lv-A{background:rgba(46,125,87,.14);color:#2e7d57;border:1px solid rgba(46,125,87,.4)}
.lv-B{background:rgba(56,103,214,.14);color:#3867d6;border:1px solid rgba(56,103,214,.4)}
.lv-C{background:rgba(120,120,120,.14);color:#6b6b6b;border:1px solid rgba(120,120,120,.4)}

/* 转诊建议（urgent 高亮） */
.health-block.urgent{border-color:rgba(200,40,40,.5);background:rgba(200,40,40,.05)}
.health-referral{margin:0;font-size:13.5px;line-height:1.7;color:var(--ink-strong)}
.health-result.urgent .health-referral{color:#b3261e;font-weight:600}

/* 紧急警示 */
.health-redflags{background:rgba(200,40,40,.08);border:1px solid rgba(200,40,40,.5);border-radius:var(--radius);
  padding:12px 16px}
.health-redflags b{color:#b3261e;display:block;margin-bottom:6px;font-size:14px}
.health-redflags p{margin:4px 0 0;font-size:13.5px;line-height:1.6;color:#9a221c}

.health-disclaimer{font-size:12px;line-height:1.7;color:var(--muted);background:var(--bg2);
  border:1px dashed var(--line);border-radius:var(--radius-sm);padding:10px 14px}

/* 历史记录弹窗 */
.health-rec-list{display:flex;flex-direction:column;gap:8px;margin-top:12px;max-height:60vh;overflow:auto}
.health-rec-item{display:flex;justify-content:space-between;gap:12px;align-items:center;text-align:left;
  border:1px solid var(--line);background:var(--card);border-radius:var(--radius-sm);padding:11px 14px;
  font:inherit;cursor:pointer;transition:.16s var(--ease,ease)}
.health-rec-item:hover{border-color:var(--green);background:var(--green-tint)}
.health-rec-t{font-size:13.5px;color:var(--ink-strong);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.health-rec-m{font-size:12px;color:var(--muted);flex:0 0 auto}

@media(max-width:560px){
  .health-form{padding:14px}
  .health-row label{flex-basis:100%}
  .health-form-actions .btn.primary{width:100%}
}

/* ============ 梦境页 · 心理咨询 ============ */
.counsel-wrap{max-width:760px;margin:0 auto}
.counsel-sub{color:var(--muted);font-size:13.5px;margin:2px 0 12px;line-height:1.6}
.counsel-banner{background:linear-gradient(0deg,rgba(196,162,71,.12),rgba(196,162,71,.12));
  border:1px solid rgba(196,162,71,.45);color:#7a5e1c;border-radius:var(--radius-sm);
  padding:10px 14px;font-size:13px;line-height:1.6;margin-bottom:14px}
.counsel-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.counsel-tab{border:1px solid var(--line);background:var(--card);color:var(--muted);
  border-radius:99px;padding:8px 16px;font:inherit;cursor:pointer;transition:.16s var(--ease,ease)}
.counsel-tab:hover{border-color:var(--green)}
.counsel-tab.active{background:var(--green);color:#fff;border-color:var(--green)}
.cs-panel{display:block}
.cs-panel[hidden]{display:none}

/* 结构化探索表单 */
.cs-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;
  box-shadow:var(--shadow-xs,0 1px 3px rgba(0,0,0,.05));display:flex;flex-direction:column;gap:14px}
.cs-field{display:flex;flex-direction:column;gap:6px}
.cs-field>span{font-size:12.5px;color:var(--muted)}
.cs-field>span small{opacity:.8}
.cs-form textarea{width:100%;min-height:76px;resize:vertical;padding:11px 13px;border:1px solid var(--line);
  border-radius:var(--radius-sm);font:inherit;background:var(--bg2);color:var(--ink);line-height:1.6}
.cs-form textarea:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.cs-emo-chips{display:flex;flex-wrap:wrap;gap:7px}
.cs-chip{border:1px solid var(--line);background:var(--bg2);color:var(--ink);border-radius:99px;
  padding:6px 14px;font:inherit;font-size:13px;cursor:pointer;transition:.16s var(--ease,ease)}
.cs-chip:hover{border-color:var(--green)}
.cs-chip.on{background:var(--green);color:#fff;border-color:var(--green)}
.cs-form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:2px}
.cs-form-actions .btn.primary{min-width:120px}

/* 结果：认知扭曲列表 */
.cs-dist{list-style:none;padding-left:0;display:flex;flex-direction:column;gap:10px}
.cs-dist li{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border:1px solid var(--line);
  border-left:3px solid var(--green);border-radius:var(--radius-sm);background:var(--bg2)}
.cs-dist-name{font-weight:700;color:var(--ink-strong);font-size:13.5px}
.cs-dist-desc{font-size:12.5px;color:var(--muted);line-height:1.55}
.cs-dist-hint{font-size:12.5px;color:var(--green);line-height:1.55}
.cs-emo-tag{font-size:12px;color:var(--muted);font-weight:400}
.cs-ref,.cs-q{display:flex;flex-direction:column;gap:7px}
.cs-crisis{margin-top:14px}

@media(max-width:560px){
  .cs-form{padding:14px}
  .cs-form-actions .btn.primary{width:100%}
  .counsel-tab{flex:1;text-align:center}
  /* 生活攻略 tab 较多，移动端改为横向滚动，避免挤压成竖排文字 */
  .nu-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px;scrollbar-width:none}
  .nu-tabs::-webkit-scrollbar{display:none}
  .nu-tabs .counsel-tab{flex:0 0 auto;white-space:nowrap}
}

/* ============ 营养餐板块 ============ */
.nu-wrap{max-width:840px;margin:0 auto}
.nu-banner{background:linear-gradient(0deg,rgba(196,162,71,.12),rgba(196,162,71,.12));
  border:1px solid rgba(196,162,71,.45);color:#7a5e1c;border-radius:var(--radius-sm);
  padding:10px 14px;font-size:13px;line-height:1.6;margin-bottom:14px}
.nu-tabs{margin-top:2px}
/* 分享攻略：工具条 + 分享面板 */
.nu-tools{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}
.nu-tools-tip{font-size:12.5px;color:var(--muted);line-height:1.4}
.nu-share-btn{flex:0 0 auto;border:1px solid rgba(3,46,126,.25);background:var(--green-soft);color:var(--green);
  border-radius:999px;padding:7px 15px;font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:.16s}
.nu-share-btn:hover{background:var(--green);color:#fff;border-color:var(--green)}
.nu-share-btn:active{transform:scale(.97)}
.nu-sh{display:flex;flex-direction:column;gap:10px}
.nu-sh-frame{max-height:54vh;overflow:auto;border-radius:14px;background:var(--bg);
  border:1px solid var(--line);padding:8px;display:flex;justify-content:center;overscroll-behavior:contain}
.nu-sh-img{width:100%;max-width:360px;border-radius:10px;display:block}
.nu-sh-tip{font-size:12.5px;color:var(--muted);line-height:1.55;text-align:center}
.nu-sh-acts{display:flex;gap:8px;flex-wrap:wrap}
.nu-sh-acts .btn{flex:1;min-width:92px;justify-content:center}
.nu-sh-link{font-size:12px;color:var(--muted);word-break:break-all}
.nu-share-inline{display:flex;flex-direction:column;align-items:center;gap:7px;margin:20px 0 4px}
.nu-share-inline-tip{font-size:12px;color:var(--muted)}
@media (max-width:600px){
  .nu-tools-tip{font-size:12px}
  .nu-share-btn{padding:6px 13px;font-size:12.5px}
  .nu-sh-frame{max-height:48vh}
}
.nu-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.nu-row label{flex:1;min-width:96px;display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--muted)}
.nu-row label select,.nu-row label input{padding:9px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font:inherit;background:var(--bg2);color:var(--ink)}
.nu-row label select:focus,.nu-row label input:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.nu-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.nu-field>span{font-size:12.5px;color:var(--muted)}
.nu-field>span small{opacity:.8}
.nu-field textarea{width:100%;min-height:84px;resize:vertical;padding:11px 13px;border:1px solid var(--line);
  border-radius:var(--radius-sm);font:inherit;background:var(--bg2);color:var(--ink);line-height:1.6}
.nu-field textarea:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.nu-pref{margin:0}
.nu-login-tip{font-size:12.5px;color:var(--muted);align-self:center}
.nu-loading{text-align:center;color:var(--muted);font-size:14px;padding:28px 0}

.nu-result{margin-top:18px;display:flex;flex-direction:column;gap:14px}
.nu-profile{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.nu-pf-item{display:flex;flex-direction:column;gap:3px;text-align:center}
.nu-pf-item span{font-size:12px;color:var(--muted)}
.nu-pf-item b{font-size:19px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif)}
.nu-pf-item b.hl{color:var(--gold)}
.nu-note{font-size:13px;color:#9a6a1e;background:rgba(196,162,71,.12);border:1px solid rgba(196,162,71,.4);
  border-radius:var(--radius-sm);padding:9px 13px;line-height:1.6}
.nu-daytotal{font-size:14.5px;color:var(--ink-strong);font-weight:500;line-height:1.6}
.nu-daytotal b{color:var(--gold);font-size:16px}

/* 宏量供能条 */
.nu-macro{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:11px}
.nu-macro-row{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.nu-macro-row span{flex:0 0 42px}
.nu-macro-row b{flex:0 0 48px;text-align:right;color:var(--ink-strong);font-weight:600}
.nu-bar{flex:1;height:9px;background:var(--bg2);border-radius:999px;overflow:hidden;border:1px solid var(--line)}
.nu-bar i{display:block;height:100%;background:#3E8E5A;border-radius:999px}
.nu-bar.fat i{background:#C8922E}
.nu-bar.carb i{background:#3867D6}

/* 餐次卡 + 食物表 */
.nu-meal{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;overflow:hidden}
.nu-meal-head{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--ink-strong);
  font-family:var(--font-serif);font-size:15px;margin-bottom:9px}
.nu-meal-head span{font-size:13px;color:var(--gold);font-family:var(--font-sans);font-weight:600}
.nu-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.nu-food{width:100%;border-collapse:collapse;font-size:12.5px;min-width:440px}
.nu-food th,.nu-food td{padding:7px 8px;text-align:left;border-bottom:1px solid var(--line);color:var(--ink);white-space:nowrap}
.nu-food th{color:var(--muted);font-weight:600;background:var(--bg2)}
.nu-food td.nu-method{color:var(--muted);white-space:normal}
.nu-cat{display:inline-block;margin-left:5px;font-size:11px;color:var(--muted);background:var(--bg2);
  border:1px solid var(--line);border-radius:6px;padding:0 5px;vertical-align:middle}

@media(max-width:560px){
  .nu-profile{grid-template-columns:repeat(2,1fr);gap:12px 10px}
  .nu-row label{flex-basis:100%}
  .nu-meal-head{font-size:14px}
}

/* ============ 梦境页 · 心理分析 ============ */
.psy-wrap{max-width:760px;margin:0 auto}
.psy-sub{color:var(--muted);font-size:13.5px;margin:2px 0 12px;line-height:1.6}
.psy-banner{background:linear-gradient(0deg,rgba(196,162,71,.12),rgba(196,162,71,.12));
  border:1px solid rgba(196,162,71,.45);color:#7a5e1c;border-radius:var(--radius-sm);
  padding:10px 14px;font-size:13px;line-height:1.6;margin-bottom:14px}
.psy-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow-xs,0 1px 3px rgba(0,0,0,.05))}
.psy-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.psy-field>span{font-size:12.5px;color:var(--muted)}
.psy-field>span small{opacity:.8}
.psy-input{width:100%;min-height:96px;resize:vertical;padding:11px 13px;border:1px solid var(--line);
  border-radius:var(--radius-sm);font:inherit;background:var(--bg2);color:var(--ink);line-height:1.6}
.psy-input:focus{outline:2px solid var(--green-soft);border-color:var(--green)}
.psy-form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:2px}
.psy-form-actions .btn.primary{min-width:120px}

/* 情绪气候条 */
.psy-climate{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);padding:11px 14px}
.psy-climate-l{font-size:13px;color:var(--muted);font-weight:600}
.psy-valence{flex:0 0 auto;font-size:12.5px;font-weight:700;padding:2px 11px;border-radius:999px}
.psy-valence.val-neg{background:rgba(120,120,120,.14);color:#6b6b6b;border:1px solid rgba(120,120,120,.4)}
.psy-valence.val-pos{background:rgba(46,125,87,.14);color:#2e7d57;border:1px solid rgba(46,125,87,.4)}
.psy-valence.val-mid{background:rgba(56,103,214,.14);color:#3867d6;border:1px solid rgba(56,103,214,.4)}
.psy-valence.val-mix{background:rgba(196,162,71,.16);color:#9a6a1e;border:1px solid rgba(196,162,71,.45)}
.psy-chips{display:flex;flex-wrap:wrap;gap:6px}
.psy-chip{font-size:12px;color:var(--ink);background:var(--bg2);border:1px solid var(--line);
  border-radius:99px;padding:3px 10px}
.psy-chip-theme{background:rgba(196,162,71,.14);border-color:rgba(196,162,71,.45);color:#7a5e1c;font-weight:600}
.psy-chip-muted{color:var(--muted);font-style:italic}
.psy-themes{display:flex;flex-wrap:wrap;gap:8px}

/* 梦象多流派解读 */
.psy-syms{display:flex;flex-direction:column;gap:10px}
.psy-sym{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px}
.psy-sym-h{font-weight:700;color:var(--ink-strong);font-size:14px;margin-bottom:7px;font-family:var(--font-serif)}
.psy-sym-row{display:flex;gap:9px;margin-top:6px;align-items:baseline}
.psy-school{flex:0 0 64px;font-size:12.5px;font-weight:700;color:var(--gold);text-align:right}
.psy-school-txt{font-size:13px;line-height:1.6;color:var(--ink)}

/* 私董会综合 */
.psy-board{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.psy-board-item{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px}
.psy-board-name{font-weight:700;color:var(--ink-strong);font-size:13.5px;margin-bottom:5px;font-family:var(--font-serif)}
.psy-board-txt{font-size:12.5px;line-height:1.6;color:var(--ink)}

@media(max-width:560px){
  .psy-form{padding:14px}
  .psy-form-actions .btn.primary{width:100%}
  .psy-board{grid-template-columns:1fr}
  .psy-school{flex-basis:58px}
}

/* ===== 玄学故事 · 八字看事业 ===== */
.mx-career-tip{font-size:13px;color:#8a7d63;background:#fbf7ee;border:1px solid #ece3d2;padding:10px 12px;border-radius:10px;margin:10px 0 14px;line-height:1.6}
.mx-career-form .field{margin-bottom:12px}
.mx-career-form label{display:block;font-size:13px;color:#6b6052;margin-bottom:5px}
.mx-career-form input,.mx-career-form select{width:100%;padding:9px 10px;border:1px solid #e3d9c7;border-radius:9px;font-size:14px;background:#fff;box-sizing:border-box}
.cz-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cz-row select{width:auto;min-width:64px}
.cz-mi{width:72px!important}
.cz-actions{display:flex;gap:10px;margin-top:6px}
.mx-career-hint{font-size:13px;color:#8a7d63;margin-top:16px}
.mx-career-hist{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border:1px solid #ece3d2;border-radius:10px;background:#fff;margin-top:8px;cursor:pointer}
.mx-career-hist:hover{background:#fbf7ee}
.mx-ch-text{font-size:13.5px;color:#3a3326}
.mx-career-hist small{color:#a99c84;font-size:12px;white-space:nowrap}
.cz-report{margin-top:18px}
.cz-summary{background:linear-gradient(180deg,#fbf7ee,#fff);border:1px solid #ece3d2;border-radius:14px;padding:16px;margin-bottom:14px}
.cz-summary h4,.cz-block h4,.cz-cred h4{font-size:15px;color:#a9852f;margin:0 0 10px;font-weight:600}
.cz-pillars{display:flex;gap:10px;justify-content:center;margin-bottom:14px}
.cz-pillar{flex:1;text-align:center;background:#fff;border:1px solid #e9dcc2;border-radius:10px;padding:10px 4px}
.cz-gz{font-size:20px;font-weight:700;color:#7a5e1e;letter-spacing:1px}
.cz-pn{font-size:12px;color:#a99c84;margin-top:4px}
.cz-summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;font-size:13px;color:#4a4133}
.cz-summary-grid .cz-full{grid-column:1/-1;line-height:1.6}
.cz-summary-grid b{color:#8a7d63;font-weight:600;margin-right:4px}
.cz-block{background:#fff;border:1px solid #ece3d2;border-radius:14px;padding:14px 16px;margin-bottom:14px}
.cz-pats{display:grid;gap:10px}
.cz-pat{background:#fbf7ee;border:1px solid #ece3d2;border-radius:10px;padding:10px 12px}
.cz-pat.cz-warn{border-color:#e6c98a;background:#fff8ec}
.cz-pat-h{font-size:14px;font-weight:600;color:#3a3326;margin-bottom:5px}
.cz-lv{font-size:11px;color:#fff;background:#a9852f;border-radius:6px;padding:1px 7px;margin-left:6px;vertical-align:middle}
.cz-pat.cz-warn .cz-lv{background:#c08a2e}
.cz-pat-d{font-size:13px;color:#4a4133;line-height:1.6}
.cz-pat-s{font-size:12.5px;color:#6b6052;margin-top:5px;line-height:1.6}
.cz-ind p,.cz-wealth p{font-size:13px;color:#4a4133;line-height:1.7;margin:4px 0}
.cz-ind b,.cz-wealth b{color:#8a7d63}
.cz-dayun-note{font-size:12px;color:#8a7d63;margin-bottom:8px}
.cz-dayun{display:grid;gap:7px}
.cz-dy{display:flex;align-items:center;gap:10px;background:#fbf7ee;border:1px solid #ece3d2;border-radius:9px;padding:8px 10px;font-size:13px}
.cz-dy.cz-star{border-color:#bfcf9a;background:#f4f8ea}
.cz-dy.cz-warn2{border-color:#e6c98a;background:#fff8ec}
.cz-dy-mark{font-size:16px;font-weight:700;width:18px;text-align:center}
.cz-dy.cz-star .cz-dy-mark{color:#6f8a2e}
.cz-dy.cz-warn2 .cz-dy-mark{color:#c08a2e}
.cz-dy-yun{font-weight:600;color:#3a3326}
.cz-dy-age{color:#a99c84;font-size:12px}
.cz-dy-note{margin-left:auto;color:#6b6052;text-align:right}
.cz-cred{background:#fbf7ee;border:1px dashed #d8c8a6;border-radius:14px;padding:14px 16px;margin-bottom:12px}
.cz-cred p{font-size:12.5px;color:#6b6052;line-height:1.7;margin:4px 0}
.cz-cred b{color:#8a7d63}
.cz-disc{font-size:12px;color:#a99c84;line-height:1.7;margin:10px 0 0}
@media(max-width:560px){
  .cz-summary-grid{grid-template-columns:1fr}
  .cz-pillars{gap:6px}
  .cz-gz{font-size:17px}
  .cz-dy{flex-wrap:wrap}
  .cz-dy-note{margin-left:0;width:100%;text-align:left}
}

/* ============ 树洞 · 头部标语徽章 & 按钮右对齐（2026-10-17） ============ */
/* 标语改为胶囊徽章；「陪我聊聊 / 匿名发布」收小并右对齐到顶栏「注册」同一条右缘 */
.th-head{flex-wrap:nowrap}
.th-badge{display:inline-flex;align-items:center;padding:3px 11px;border-radius:999px;
  background:var(--green-soft);color:var(--green-2);border:1px solid rgba(3,46,126,.12);
  font-family:var(--font-sans);font-weight:400;font-size:12px;letter-spacing:.2px;
  line-height:1.45;white-space:nowrap}
.th-head .dm-head-actions{flex-shrink:0;margin-left:auto}
/* 空态（正方体图形处）追加「匿名发布」按钮 */
.th-empty{padding:40px 16px}
.th-empty p{margin:0}
.th-empty-btn{margin-top:12px}
@media(max-width:560px){
  .th-head{flex-wrap:wrap;row-gap:8px}
  .th-head .dm-head-actions{flex-basis:100%;justify-content:flex-end;margin-left:0}
  .th-head .dm-head-actions .btn{padding:6px 11px;font-size:12.5px}
  .th-badge{font-size:11.5px;padding:2px 9px}
}

/* ===== 营养餐 · 健康自测（与配餐/搭配逻辑独立）===== */
.nu-check-form{display:flex;flex-direction:column;gap:14px}
.nu-check-q{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}
.nu-check-qt{font-size:14px;font-weight:600;color:var(--ink-strong);margin-bottom:9px}
.nu-chips{display:flex;flex-wrap:wrap;gap:8px}
.nu-chips .cs-chip{padding:7px 13px;font-size:13px;margin:0}
.nu-check-note{font-size:12.5px;line-height:1.7;color:var(--muted);background:var(--bg2);border-radius:var(--radius);padding:10px 13px}
/* 得分 */
.nu-check-score{display:flex;align-items:center;gap:14px;background:linear-gradient(0deg,var(--green-soft),var(--green-tint));border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px}
.nu-score-num{font-size:40px;font-weight:800;color:var(--green-2);line-height:1;font-family:var(--font-serif)}
.nu-score-num span{font-size:15px;font-weight:600;color:var(--muted);margin-left:3px}
.nu-score-meta{display:flex;flex-direction:column;gap:3px}
.nu-score-level{font-size:17px;font-weight:700;color:var(--ink-strong)}
.nu-score-sub{font-size:12.5px;color:var(--muted)}
/* 维度 */
.nu-check-dims{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.nu-dim{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-radius:12px;border:1px solid var(--line);background:var(--card)}
.nu-dim-name{font-size:13.5px;color:var(--ink)}
.nu-dim-grade{font-size:12.5px;font-weight:700;padding:1px 9px;border-radius:99px}
.nu-dim.ok{border-color:rgba(46,160,107,.4);background:rgba(46,160,107,.08)}
.nu-dim.ok .nu-dim-grade{color:#1f7a4d;background:rgba(46,160,107,.16)}
.nu-dim.mid{border-color:rgba(192,138,46,.4);background:rgba(192,138,46,.08)}
.nu-dim.mid .nu-dim-grade{color:#9a6b15;background:rgba(192,138,46,.16)}
.nu-dim.low{border-color:rgba(192,80,77,.4);background:rgba(192,80,77,.07)}
.nu-dim.low .nu-dim-grade{color:#a23b38;background:rgba(192,80,77,.14)}
/* 微调整动作卡 */
.nu-action{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;display:flex;flex-direction:column;gap:9px}
.nu-action-focus{font-size:14.5px;font-weight:700;color:var(--green-2)}
.nu-action-reason{font-size:13px;line-height:1.6;color:var(--ink)}
.nu-action-tiers{display:flex;flex-direction:column;gap:7px}
.nu-tier{display:flex;gap:9px;align-items:flex-start;font-size:13px;line-height:1.55}
.nu-tier-t{flex:0 0 52px;text-align:center;font-size:12px;font-weight:700;color:#fff;border-radius:7px;padding:2px 0;margin-top:1px}
.nu-tier:nth-child(1) .nu-tier-t{background:#7a8aa8}
.nu-tier:nth-child(2) .nu-tier-t{background:var(--green)}
.nu-tier:nth-child(3) .nu-tier-t{background:var(--green-2)}
.nu-tier span:last-child{color:var(--ink)}
.nu-check-summary{font-size:13.5px;line-height:1.7;color:var(--ink-strong);background:var(--bg2);border-left:3px solid var(--green);border-radius:0 var(--radius) var(--radius) 0;padding:11px 14px}
@media(max-width:560px){
  .nu-check-dims{grid-template-columns:repeat(2,1fr)}
  .nu-score-num{font-size:34px}
}

/* ============ 禅修花园 · Zen Garden（2026-10-18） ============ */
/* 设计原则：Ma（间）——最大留白；动效全部 ≥600ms ease-in-out，缓慢而克制；
   色彩取自自然材质：石 #e8e2d8 / 苔 #7d8b6e / 竹 #c4a961 / 墨 #2d2d2d；
   不用装饰性边框，仅以极细分隔线划分区域。 */
.zg{max-width:680px;margin:0 auto;padding:4px 20px 88px;color:#2d2d2d}
.zg-head{text-align:center;padding:40px 0 6px}
.zg-head h2{margin:0;font-family:var(--font-serif);font-size:24px;font-weight:600;
  letter-spacing:.38em;margin-right:-.38em;color:#2d2d2d}
.zg-sub{margin:14px 0 0;font-size:12px;letter-spacing:.5em;margin-right:-.5em;color:rgba(45,45,45,.42)}

/* —— 枯山水庭园 —— */
.zg-sand{margin:52px auto 0;max-width:520px}
.zg-sand svg{display:block;width:100%;height:auto}
.zg-rake path{fill:none;stroke:rgba(45,45,45,.10);stroke-width:1.1}
.zg-rake{animation:zgDrift 26s ease-in-out infinite alternate}
@keyframes zgDrift{from{transform:translateX(0)}to{transform:translateX(9px)}}
.zg-stone{fill:#2d2d2d;opacity:.85}
.zg-stone-2{opacity:.66}
.zg-stone-3{opacity:.74}
.zg-moss{fill:none;stroke:#7d8b6e;stroke-width:2;stroke-linecap:round;opacity:.5}
.zg-ring ellipse{fill:none;stroke:rgba(45,45,45,.11);stroke-width:1}
.zg-ring{transform-box:fill-box;transform-origin:center;animation:zgSway 18s ease-in-out infinite}
@keyframes zgSway{0%,100%{transform:rotate(0deg)}50%{transform:rotate(5deg)}}
.zg-sweep{opacity:.55;animation:zgSweep 26s ease-in-out infinite alternate}
@keyframes zgSweep{from{transform:translateX(-110px)}to{transform:translateX(110px)}}

/* —— 分隔线：仅此一种线条 —— */
.zg-divider{width:64%;height:1px;margin:64px auto;background:rgba(45,45,45,.10)}

/* —— 每日一语：淡入淡出 —— */
.zg-quote{text-align:center;padding:0 22px;min-height:150px;
  opacity:0;transition:opacity 900ms ease-in-out}
.zg-quote.in{opacity:1}
.zg-quote-t{margin:0;font-family:var(--font-serif);font-size:19px;line-height:2.1;
  letter-spacing:.05em;color:#2d2d2d}
.zg-quote-a{margin:20px 0 0;font-size:12px;letter-spacing:.28em;margin-right:-.28em;color:rgba(45,45,45,.42)}
.zg-quote-next{margin-top:30px;padding:6px 4px;border:0;background:none;cursor:pointer;
  font-family:var(--font-sans);font-size:12.5px;letter-spacing:.32em;margin-right:-.32em;
  color:#7d8b6e;transition:color 600ms ease-in-out}
.zg-quote-next:hover{color:#5c6a4e}

/* —— 呼吸练习：圆环 + 计时 —— */
.zg-breath{text-align:center}
.zg-orb-wrap{position:relative;width:240px;height:240px;margin:40px auto 0}
.zg-ring{position:absolute;inset:0;width:240px;height:240px}
.zg-ring circle{fill:none;stroke-linecap:round}
.zg-ring-bg{stroke:rgba(45,45,45,.09);stroke-width:2}
.zg-ring-fg{stroke:#7d8b6e;stroke-width:2.5;stroke-dasharray:678.6;stroke-dashoffset:678.6;
  transform:rotate(-90deg);transform-box:view-box;transform-origin:center;
  animation:zgBreathRing 12s ease-in-out infinite;animation-play-state:paused}
.zg-breath.on .zg-ring-fg{animation-play-state:running}
@keyframes zgBreathRing{
  0%{stroke-dashoffset:678.6}
  33.33%{stroke-dashoffset:0}
  50%{stroke-dashoffset:0}
  100%{stroke-dashoffset:678.6}}
.zg-orb{position:absolute;inset:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 38% 34%,rgba(125,139,110,.32),rgba(196,169,97,.18) 62%,rgba(232,226,216,.06));
  transform:scale(.62);
  animation:zgBreathOrb 12s ease-in-out infinite;animation-play-state:paused}
.zg-breath.on .zg-orb{animation-play-state:running}
@keyframes zgBreathOrb{
  0%{transform:scale(.62)}
  33.33%{transform:scale(1)}
  50%{transform:scale(1)}
  100%{transform:scale(.62)}}
.zg-orb-t{font-family:var(--font-serif);font-size:15px;letter-spacing:.3em;margin-right:-.3em;
  color:rgba(45,45,45,.5);transition:opacity 600ms ease-in-out}
.zg-phase{margin:34px 0 0;font-family:var(--font-serif);font-size:15px;letter-spacing:.4em;margin-right:-.4em;
  color:rgba(45,45,45,.62);transition:opacity 600ms ease-in-out}
.zg-count{margin:12px 0 0;font-size:13px;letter-spacing:.28em;margin-right:-.28em;
  color:rgba(45,45,45,.36);font-variant-numeric:tabular-nums}
.zg-durs{display:flex;justify-content:center;gap:12px;margin:34px 0 0}
.zg-dur{padding:8px 20px;border-radius:999px;border:0;cursor:pointer;font-family:var(--font-sans);
  font-size:13px;letter-spacing:.08em;color:rgba(45,45,45,.55);background:rgba(232,226,216,.55);
  transition:background 600ms ease-in-out,color 600ms ease-in-out}
.zg-dur:hover{background:rgba(232,226,216,.95)}
.zg-dur.on{background:rgba(125,139,110,.24);color:#4d5a41}
.zg-start{margin-top:30px;padding:12px 46px;border-radius:999px;border:0;cursor:pointer;
  font-family:var(--font-sans);font-size:14px;letter-spacing:.34em;margin-right:-.34em;
  color:#f7f4ec;background:#7d8b6e;
  transition:background 600ms ease-in-out}
.zg-start:hover{background:#6c7a5e}
.zg-start.on{background:rgba(45,45,45,.78)}
.zg-tip{margin:26px 0 0;font-size:12px;letter-spacing:.18em;margin-right:-.18em;color:rgba(45,45,45,.3)}

/* —— 环境声：极简图标钮 —— */
.zg-sound{text-align:center}
.zg-sound-t{margin:0 0 30px;font-size:12px;letter-spacing:.5em;margin-right:-.5em;color:rgba(45,45,45,.38)}
.zg-btns{display:flex;justify-content:center;gap:36px}
.zg-snd{width:58px;height:58px;border-radius:50%;border:0;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:rgba(45,45,45,.5);background:rgba(232,226,216,.5);
  transition:background 600ms ease-in-out,color 600ms ease-in-out}
.zg-snd svg{width:20px;height:20px}
.zg-snd span{font-size:10px;letter-spacing:.06em}
.zg-snd:hover{background:rgba(232,226,216,.95)}
.zg-snd.on{background:rgba(125,139,110,.26);color:#4d5a41}

@media(max-width:560px){
  .zg{padding:2px 14px 64px}
  .zg-head{padding:26px 0 4px}
  .zg-head h2{font-size:20px}
  .zg-sand{margin:34px auto 0}
  .zg-divider{margin:46px auto}
  .zg-btns{gap:20px}
  .zg-snd{width:52px;height:52px}
  .zg-orb-wrap{width:208px;height:208px}
  .zg-ring{width:208px;height:208px}
}
/* 减弱动态偏好：庭园缓动与呼吸动画静止，仅保留淡入淡出 */
@media(prefers-reduced-motion:reduce){
  .zg-rake,.zg-ring,.zg-sweep{animation:none}
}

/* ============ 你问我答 · Ask（2026-10-18） ============ */
.ask-wrap{max-width:820px;margin:0 auto}
.ask-banner{background:var(--green-tint);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 14px;font-size:12.5px;line-height:1.75;color:var(--muted);margin-bottom:16px}
.ask-banner b{color:var(--ink-strong)}
.ask-form{padding:16px}
.ask-style-row,.ask-samples,.ask-follow{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}
.ask-lbl{font-size:12.5px;color:var(--muted);flex:0 0 auto}
.ask-styles{display:flex;flex-wrap:wrap;gap:8px}
.ask-chip{padding:7px 14px;border-radius:999px;border:1px solid var(--line);background:var(--bg2);
  color:var(--ink);font-size:13px;cursor:pointer;font-family:inherit;
  display:flex;flex-direction:column;align-items:flex-start;gap:2px;
  transition:background var(--t) var(--ease),border-color var(--t) var(--ease),color var(--t) var(--ease)}
.ask-chip em{font-style:normal;font-size:11px;color:var(--muted)}
.ask-chip.on{border-color:rgba(3,46,126,.45);background:var(--green-soft);color:var(--green-2)}
.ask-chip.on em{color:var(--green)}
.ask-sample{padding:6px 12px;border-radius:999px;border:1px dashed var(--line);background:none;
  color:var(--muted);font-size:12.5px;cursor:pointer;font-family:inherit;
  transition:background var(--t) var(--ease),border-color var(--t) var(--ease),color var(--t) var(--ease)}
.ask-sample:hover{border-color:var(--green);color:var(--green-2);background:var(--green-soft)}
.ask-actions{margin-top:16px;display:flex;gap:10px}

/* —— 回答 —— */
.ask-answer{margin-top:18px;display:flex;flex-direction:column;gap:14px}
.ask-risk{border-radius:var(--radius);padding:14px 16px}
.ask-risk.warn{background:#FFF8EC;border:1px solid #EFD9AE}
.ask-risk.urgent{background:#FDECEC;border:1px solid #F0B9B9}
.ask-risk-h{font-size:13px;font-weight:700;color:#8A6420;margin-bottom:6px}
.ask-risk.urgent .ask-risk-h{color:#B23A36}
.ask-risk-i{margin-top:8px}
.ask-risk-i b{font-size:13px;color:var(--ink-strong)}
.ask-risk-i p{margin:4px 0 0;font-size:13px;line-height:1.8;color:#6B4C1E}
.ask-risk.urgent .ask-risk-i p{color:#8C3230}
.ask-tags{display:flex;gap:8px;flex-wrap:wrap}
.ask-tag{font-size:12px;padding:3px 10px;border-radius:999px;background:var(--green-soft);color:var(--green-2)}
.ask-headline{font-family:var(--font-serif);font-size:19px;line-height:1.85;color:var(--ink-strong);
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.ask-clarity{font-size:12.5px;line-height:1.75;color:var(--muted);background:var(--bg2);
  border-left:3px solid var(--green);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:10px 13px}
.ask-block{display:flex;flex-direction:column;gap:10px}
.ask-h3{font-size:14.5px;font-weight:700;color:var(--ink-strong);margin:0}
.ask-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:13px 15px}
.ask-card h4{font-size:13.5px;font-weight:700;color:var(--green-2);margin:0 0 6px}
.ask-card p{margin:0;font-size:13px;line-height:1.8;color:var(--ink)}
.ask-steps{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.ask-step-col{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:13px 15px}
.ask-step-col h4{font-size:13.5px;font-weight:700;margin:0 0 8px;color:var(--ink-strong)}
.ask-step-col ol{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.ask-step-col li{font-size:13px;line-height:1.75;color:var(--ink);display:flex;gap:8px}
.ask-n{flex:0 0 18px;height:18px;border-radius:50%;background:var(--green-soft);color:var(--green-2);
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:3px}
.ask-script{background:var(--bg2);border:1px dashed var(--line);border-radius:var(--radius-sm);
  padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.ask-script-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ask-scene{font-size:12.5px;color:var(--ink-strong)}
.ask-tone{font-size:11px;padding:1px 8px;border-radius:999px;background:var(--green-soft);color:var(--green-2)}
.ask-say{font-family:var(--font-serif);font-size:14px;line-height:1.85;color:var(--ink-strong)}
.ask-script .btn{align-self:flex-start}
.ask-caveats{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px}
.ask-caveats li{font-size:13px;line-height:1.75;color:var(--ink)}
.ask-disclaim{font-size:12px;line-height:1.7;color:var(--muted)}
.ask-answer-actions{display:flex;gap:8px}

/* —— 提问记录 —— */
.ask-hist{margin-top:22px}
.ask-hist-n{font-weight:400;color:var(--muted);font-size:12.5px}
.ask-hist-i{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;margin-top:10px}
.ask-hist-h{cursor:pointer;display:flex;flex-direction:column;gap:4px}
.ask-hist-q{font-size:13.5px;color:var(--ink-strong);line-height:1.6}
.ask-hist-m{font-size:12px;color:var(--muted)}
.ask-hist-d{margin-top:10px;padding-top:10px;border-top:1px solid var(--line-soft)}
.ask-hist-ops{display:flex;gap:8px;margin-top:10px}
.ask-hist-empty{margin-top:16px;font-size:12.5px;color:var(--muted);text-align:center;padding:14px}
@media(max-width:560px){
  .ask-steps{grid-template-columns:1fr}
  .ask-form{padding:13px}
  .ask-headline{font-size:17px;padding:14px 15px}
}

/* —— 聊天区引导卡（好友面板本体为弹窗，见 .sp-* / .cw-*） —— */
.chat-hero{max-width:520px;margin:10px auto;text-align:center;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);padding:38px 30px 30px}
.chat-hero-ico{width:72px;height:72px;margin:0 auto 14px;border-radius:50%;background:var(--green-soft);
  color:var(--green-2);display:flex;align-items:center;justify-content:center}
.chat-hero h2{font-family:var(--font-serif);margin:0 0 6px;color:var(--ink-strong)}
.chat-hero-sub{margin:0 0 14px;color:var(--muted);font-size:14px}
.chat-feats{display:flex;flex-direction:column;gap:0;text-align:left;margin-bottom:6px}
.chat-feat{display:flex;gap:10px;align-items:center;width:calc(100% + 20px);margin:0 -10px;
  padding:8px 10px;background:none;border:0;border-radius:12px;font:inherit;color:inherit;
  text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:background .18s ease,transform .18s ease}
.chat-feat+.chat-feat{border-top:1px solid var(--line-soft)}
.chat-feat:hover{background:var(--green-tint)}
.chat-feat:active{transform:scale(.995);background:var(--green-soft)}
.chat-feat:focus-visible{outline:2px solid var(--green-2);outline-offset:2px}
.chat-feat-ico{flex:0 0 28px;height:28px;border-radius:50%;background:var(--bg2);color:var(--green-2);
  display:flex;align-items:center;justify-content:center;transition:background .18s ease,color .18s ease}
.chat-feat:hover .chat-feat-ico{background:var(--green-soft)}
.chat-feat-tx{flex:1 1 auto;min-width:0}
.chat-feat b{display:block;font-size:13px;color:var(--ink-strong);font-weight:600}
.chat-feat small{display:block;font-size:11.5px;color:var(--muted);margin-top:1px;line-height:1.5}
.chat-feat-arrow{flex:0 0 auto;margin-left:auto;display:flex;color:var(--muted);opacity:.45;
  transition:opacity .18s ease,transform .18s ease}
.chat-feat:hover .chat-feat-arrow{opacity:.95;transform:translateX(3px)}
/* 内联面板容器：四个 tab 面板的外层。原为「好友面板」独自内联时设计，带上边线与外边距；
   2026-10-24e 起功能介绍也成为其中一个 tab 面板，边线会横在介绍页顶部，故只保留左对齐。 */
.chat-inline{text-align:left}
.chat-inline .sp-search{margin-top:0}
/* tab 面板切换（底部固定导航驱动）。
   注意：此类名勿与智能客服浮窗 .chat-panel / #chatPanel 撞名——那套是 position:fixed 的浮窗样式
   （见上方「智能客服浮窗」段），一旦复用类名，fixed/height/width 会泄漏到tab 面板上，
   表现为面板变成横跨屏幕的悬浮大盒子、盖住 Hero 与功能卡（2026-10-24 事故）。 */
.chat-tabpanel{display:none}
.chat-tabpanel.on{display:block}
.sp-chat-time{font-size:11.5px;color:var(--muted);flex:0 0 auto;white-space:nowrap}
/* 聊天区底部固定导航：激活期间隐藏全局 bottom-tab（见 chat.js dispose 恢复），桌面/移动一致显示 */
.chat-nav{position:fixed;left:0;right:0;bottom:0;z-index:60;display:flex;height:var(--tab-h);
  padding-bottom:env(safe-area-inset-bottom,0px);
  background:rgba(255,255,255,.96);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);
  border-top:1px solid var(--line);box-shadow:0 -4px 18px rgba(3,46,126,.08)}
.chat-nav-item{position:relative;flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;border:0;background:transparent;color:var(--muted);cursor:pointer;font-family:inherit;padding:6px 0;min-height:0;
  transition:color .2s ease;-webkit-tap-highlight-color:transparent}
.chat-nav-item.on{color:var(--green-2)}
.chat-nav-item:active{opacity:.7}
.chat-nav-item:focus-visible{outline:2px solid var(--green-2);outline-offset:-3px}
.chat-nav-ico{display:flex}
.chat-nav-label{font-size:11.5px;line-height:1.2;letter-spacing:.3px}
.chat-nav-badge{position:absolute;top:2px;left:calc(50% + 9px);min-width:16px;height:16px;padding:0 4px;
  border-radius:999px;background:#E5484D;color:#fff;font-size:10px;font-weight:600;line-height:16px;text-align:center}
/* 固定导航占位：避免页面最后一行内容被吞掉；顶部内边距归零——
   用户要求聊天区卡片与顶栏间距为 10px（.chat-hero 的 margin-top 即最终间距） */
body.chat-nav-on .content{padding-top:0;padding-bottom:calc(var(--tab-h) + 22px)}
.chat-open-btn{min-width:200px}
.chat-hero-tip{margin:12px 0 0;font-size:12.5px;color:var(--muted)}
@media(max-width:560px){
  .chat-hero{margin:10px 0;padding:30px 20px 24px}
}

/* —— 小学课纲面板（数据：Marble Skill Taxonomy） —— */
.cl-panel{position:fixed;inset:0;z-index:120;background:var(--card);display:flex;flex-direction:column;
  opacity:0;transform:translateY(14px);transition:opacity .3s ease,transform .3s ease}
.cl-panel.on{opacity:1;transform:none}
.cl-head{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.cl-ico-btn{width:34px;height:34px;border:1px solid var(--line);border-radius:50%;background:var(--card);
  color:var(--muted);cursor:pointer;display:grid;place-items:center;font-size:20px;line-height:1;
  transition:color .2s,border-color .2s;flex:0 0 auto}
.cl-ico-btn:hover{color:var(--green-2);border-color:var(--green-2)}
.cl-back-ico svg{display:block;transform:scaleX(-1)}
.cl-head-tx{display:flex;flex-direction:column;min-width:0}
.cl-head-tx h3{font-family:var(--font-serif);font-size:17px;margin:0;color:var(--ink-strong);line-height:1.3}
.cl-crumb{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:52vw}
/* 关闭按钮统一靠最右（2026-11-02 用户要求：技能分享下的面板关闭按钮移到右侧） */
.cl-close{margin-left:auto}
.cl-search{flex:1;min-width:210px;display:flex;align-items:center;gap:8px;background:var(--bg2);
  border:1px solid var(--line);border-radius:999px;padding:7px 14px;color:var(--muted)}
.cl-search:focus-within{border-color:var(--green-2)}
.cl-search input{flex:1;min-width:0;border:0;background:transparent;outline:none;font-size:13.5px;color:var(--ink);font-family:inherit}
.cl-body{flex:1;overflow-y:auto;padding:22px 20px 40px;max-width:880px;width:100%;margin:0 auto}

.cl-stats{display:flex;flex-wrap:wrap;gap:10px}
.cl-stat{flex:1;min-width:96px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  padding:12px 8px;text-align:center}
.cl-stat b{display:block;font-family:var(--font-serif);font-size:19px;color:var(--green-2)}
.cl-stat span{font-size:12px;color:var(--muted)}
.cl-intro{font-size:13.5px;line-height:1.9;color:var(--muted);margin:16px 2px 4px}
.cl-progress{margin:14px 2px 0;display:flex;flex-direction:column;gap:7px}
.cl-progress-bar{height:7px;border-radius:999px;background:var(--line-soft);overflow:hidden}
.cl-progress-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--green),var(--green-2));transition:width .4s ease}
.cl-progress span{font-size:12.5px;color:var(--muted)}

.cl-subjects{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;margin-top:16px}
.cl-subject{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:13px 14px;cursor:pointer;text-align:left;font-family:inherit;
  transition:border-color .2s,box-shadow .2s}
.cl-subject:hover{border-color:var(--green-2);box-shadow:var(--shadow-sm)}
.cl-subject-ico{flex:0 0 42px;height:42px;border-radius:50%;background:var(--green-soft);display:grid;place-items:center;font-size:21px}
.cl-subject-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.cl-subject-tx b{font-size:14.5px;color:var(--ink-strong)}
.cl-subject-tx small{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cl-subject-tx em{font-style:normal;font-size:12px;color:var(--green-2)}
.cl-subject-go{color:var(--muted);flex:0 0 auto}
.cl-credit{margin:22px 2px 0;font-size:12px;line-height:1.8;color:var(--muted)}

.cl-domain-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.cl-domain-head h4{font-family:var(--font-serif);font-size:17px;margin:0;color:var(--ink-strong)}
.cl-domain-en{font-size:12px;color:var(--muted)}
.cl-domain-done{font-size:12px;color:var(--green-2);background:var(--green-soft);border-radius:999px;padding:2px 10px}
.cl-sec-t{font-size:13px;font-weight:600;color:var(--ink-strong);margin:20px 0 10px;letter-spacing:.5px}
.cl-summaries{display:flex;flex-direction:column;gap:8px}
.cl-summary{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:12px 14px}
.cl-sum-age{display:inline-block;font-size:11.5px;color:var(--green-2);background:var(--green-soft);
  border-radius:999px;padding:1px 9px;margin-bottom:6px}
.cl-summary p{margin:0;font-size:13px;line-height:1.85;color:var(--ink)}

.cl-topics{display:flex;flex-direction:column;gap:8px}
.cl-topic{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:11px 14px;cursor:pointer;text-align:left;font-family:inherit;
  transition:border-color .2s,box-shadow .2s}
.cl-topic:hover{border-color:var(--green-2);box-shadow:var(--shadow-sm)}
.cl-topic-name{flex:1;min-width:180px;font-size:14px;color:var(--ink-strong)}
.cl-zh{display:block;font-size:12.5px;font-style:normal;color:var(--muted);line-height:1.7;margin-top:3px}
.cl-topic-name .cl-zh,.cl-rel-name .cl-zh{display:block;margin-top:2px}
.cl-desc .cl-zh,.cl-ask .cl-zh,.cl-summary .cl-zh,.cl-rel-why .cl-zh{display:block;margin-top:6px}
.cl-summary p.cl-zh{margin:6px 0 0}
.cl-evidence li .cl-zh{margin-top:2px}
.cl-topic-detail h4 .cl-zh{display:block;font-size:13px;font-weight:600;margin-top:2px}
.cl-tick{font-style:normal;font-size:12px;color:var(--green-2);margin-left:8px}
.cl-chips{display:flex;gap:6px;flex-wrap:wrap}
.cl-chip{font-size:11.5px;color:var(--muted);background:var(--bg2);border:1px solid var(--line-soft);
  border-radius:999px;padding:2px 9px;white-space:nowrap}
.cl-chip.link{color:var(--green-2);cursor:pointer;font-family:inherit}
.cl-chip.link:hover{border-color:var(--green-2)}

.cl-topic-detail h4{font-family:var(--font-serif);font-size:18px;margin:0 0 10px;color:var(--ink-strong);line-height:1.4}
.cl-topic-detail .cl-chips{margin-bottom:4px}
.cl-desc{font-size:14px;line-height:1.9;margin:0;color:var(--ink)}
.cl-evidence{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:7px}
.cl-evidence li{font-size:13.5px;line-height:1.8;color:var(--ink)}
.cl-ask{margin:0;background:var(--bg2);border-left:3px solid var(--green-2);border-radius:0 var(--radius-sm) var(--radius-sm) 0;
  padding:11px 15px;font-family:var(--font-serif);font-size:13.5px;line-height:1.85;color:var(--ink)}
.cl-rels{display:flex;flex-direction:column;gap:8px}
.cl-rel{display:flex;flex-direction:column;gap:5px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:11px 14px;cursor:pointer;text-align:left;font-family:inherit;transition:border-color .2s}
.cl-rel:hover{border-color:var(--green-2)}
.cl-rel-name{font-size:14px;color:var(--ink-strong)}
.cl-rel-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.cl-rel-why{font-size:12.5px;color:var(--muted);line-height:1.7}
.cl-badge{font-size:11px;border-radius:999px;padding:2px 9px;white-space:nowrap}
.cl-badge.hard{color:#8A4B12;background:#FBF0E0;border:1px solid #EBD9BC}
.cl-badge.soft{color:var(--green-2);background:var(--green-soft);border:1px solid #D5E0F2}
.cl-none{font-size:13px;color:var(--muted);margin:0}
.cl-master-btn{margin-top:22px;min-width:180px}
@media(max-width:560px){
  .cl-head{padding:10px 12px;gap:8px}
  .cl-search{order:3;flex-basis:100%}
  .cl-crumb{max-width:60vw}
  .cl-body{padding:16px 14px 36px}
  .cl-subjects{grid-template-columns:1fr}
  .cl-topic-name{min-width:0}
}

/* —— 知识点库面板（数据：mmlong818/k12-knowledge-points） —— */
.k12-panel{--k12:#8A6D1B;--k12-soft:#FBF3DF;--k12-line:#EBD9BC;
  position:fixed;inset:0;z-index:120;background:var(--card);display:flex;flex-direction:column;
  opacity:0;transform:translateY(14px);transition:opacity .3s ease,transform .3s ease}
.k12-panel.on{opacity:1;transform:none}
.k12-head{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.k12-ico-btn{width:34px;height:34px;border:1px solid var(--line);border-radius:50%;background:var(--card);
  color:var(--muted);cursor:pointer;display:grid;place-items:center;flex:0 0 auto;font-size:17px;line-height:1;
  transition:color .2s,border-color .2s}
.k12-ico-btn:hover{color:var(--k12);border-color:var(--k12-line)}
/* 返回「‹」字太小（2026-10-25 用户要求加大）：数学知识库 / 电子课本用的是文本 ‹，
   继承父级 17px 显得很小；放大到 26px 加粗，SVG 箭头版（固定 18px）不受影响 */
.k12-back-ico{display:block;font-size:26px;line-height:1;font-weight:700;margin-top:-2px}
.k12-back-ico svg{display:block;transform:scaleX(-1)}
.k12-head-tx{display:flex;flex-direction:column;min-width:0}
.k12-head-tx h3{font-family:var(--font-serif);font-size:17px;margin:0;color:var(--ink-strong);line-height:1.3}
.k12-crumb{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:52vw}
/* 关闭按钮统一靠最右（2026-11-02 用户要求：技能分享下的面板关闭按钮移到右侧） */
.k12-close{margin-left:auto}
.k12-search{flex:1;min-width:210px;display:flex;align-items:center;gap:8px;background:var(--bg2);
  border:1px solid var(--line);border-radius:999px;padding:7px 14px}
.k12-search:focus-within{border-color:var(--k12-line)}
.k12-search input{flex:1;min-width:0;border:0;background:transparent;outline:none;font-size:13.5px;color:var(--ink);font-family:inherit}
.k12-search-ico{color:var(--muted);display:grid;place-items:center;flex:0 0 auto}
.k12-body{flex:1;overflow-y:auto;padding:22px 20px 40px;max-width:880px;width:100%;margin:0 auto}
.k12-stats{display:flex;flex-wrap:wrap;gap:10px}
.k12-stat{flex:1;min-width:96px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);
  padding:12px 14px;text-align:center}
.k12-stat b{display:block;font-family:var(--font-serif);font-size:19px;color:var(--k12)}
.k12-stat span{font-size:12px;color:var(--muted)}
.k12-intro{font-size:13.5px;line-height:1.9;color:var(--muted);margin:16px 2px 4px}
.k12-note{font-size:12.5px;line-height:1.8;color:#8A6D1B;background:var(--k12-soft);
  border:1px solid var(--k12-line);border-radius:var(--radius-sm);padding:9px 13px;margin:14px 2px 0}
.k12-note b{color:#6E5713}
.k12-credit{margin:22px 2px 0;font-size:12px;line-height:1.8;color:var(--muted)}
.k12-credit a{color:var(--k12)}
.k12-band{margin-top:22px}
.k12-band-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.k12-band-ico{font-size:20px}
.k12-band-head b{font-family:var(--font-serif);font-size:16px;color:var(--ink-strong)}
.k12-band-meta{font-size:12px;color:var(--muted)}
.k12-subjects{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;margin-top:12px}
.k12-subject{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:12px 14px;cursor:pointer;text-align:left;font-family:inherit;
  transition:border-color .2s,box-shadow .2s}
.k12-subject:hover{border-color:var(--k12-line);box-shadow:var(--shadow-sm)}
.k12-subject-ico{flex:0 0 42px;height:42px;border-radius:50%;background:var(--k12-soft);display:grid;place-items:center;font-size:21px}
.k12-subject-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.k12-subject-tx b{font-size:14.5px;color:var(--ink-strong)}
.k12-subject-tx em{font-style:normal;font-size:12px;color:var(--k12)}
.k12-subject-go{color:var(--muted);flex:0 0 auto}
.k12-subj-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.k12-subj-head h4{font-family:var(--font-serif);font-size:17px;margin:0;color:var(--ink-strong)}
.k12-subj-meta{font-size:12.5px;color:var(--muted)}
.k12-chips{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0 4px}
.k12-chips[role="tablist"]{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin;padding-bottom:6px}
.k12-chips[role="tablist"] .k12-chip{flex:0 0 auto}
.k12-chip{font-size:11.5px;color:var(--muted);background:var(--bg2);border:1px solid var(--line-soft);
  border-radius:999px;padding:3px 11px;white-space:nowrap;font-family:inherit}
.k12-chip.on{color:var(--k12);border-color:var(--k12-line);background:var(--k12-soft);font-weight:600}
.k12-chip.link{color:var(--k12);cursor:pointer}
.k12-chip.link:hover{border-color:var(--k12-line)}
.k12-topics{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.k12-topic{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:11px 14px;cursor:pointer;text-align:left;font-family:inherit;
  transition:border-color .2s,box-shadow .2s}
.k12-topic:hover{border-color:var(--k12-line);box-shadow:var(--shadow-sm)}
.k12-topic-name{flex:1;min-width:180px;font-size:14px;color:var(--ink-strong)}
.k12-tick{font-style:normal;font-size:12px;color:var(--k12);margin-left:8px}
.k12-more-wrap{display:flex;justify-content:center;margin-top:14px}
.k12-detail h4{font-family:var(--font-serif);font-size:18px;margin:0 0 10px;color:var(--ink-strong);line-height:1.4}
.k12-detail .k12-chips{margin-bottom:4px}
.k12-aliases{font-size:13px;color:var(--muted);margin:0;line-height:1.8}
.k12-objectives{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:7px}
.k12-objectives li{font-size:13.5px;line-height:1.8;color:var(--ink)}
.k12-mis{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:7px}
.k12-mis li{font-size:13.5px;line-height:1.8;color:var(--ink)}
.k12-rels{display:flex;flex-direction:column;gap:8px}
.k12-rel{display:flex;flex-direction:column;gap:5px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:11px 14px;cursor:pointer;text-align:left;font-family:inherit;
  transition:border-color .2s}
.k12-rel:hover{border-color:var(--k12-line)}
.k12-rel-name{font-size:14px;color:var(--ink-strong)}
.k12-rel-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.k12-rel-why{font-size:12.5px;color:var(--muted);line-height:1.7}
.k12-sec-t{font-size:13px;font-weight:600;color:var(--ink-strong);margin:20px 0 10px;letter-spacing:.5px}
.k12-none{font-size:13px;color:var(--muted);margin:0}
.k12-master-btn{margin-top:22px;min-width:180px}
/* —— 知识点库：知识点讲解 / 做练习题 —— */
.k12-study-btns{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}
.k12-study-btns .btn{min-width:132px}
.k12-ex-src{font-style:normal;font-size:11px;color:var(--k12);background:var(--k12-soft);border:1px solid var(--k12-line);
  border-radius:99px;padding:1px 8px;margin-left:8px;vertical-align:1px;font-weight:400}
.k12-ex-p{font-size:13.5px;line-height:1.9;color:var(--ink);margin:0}
.k12-ex-list{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:7px}
.k12-ex-list li{font-size:13.5px;line-height:1.8;color:var(--ink)}
.k12-quiz-progress{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;color:var(--muted)}
.k12-quiz-bar{height:5px;background:var(--bg2);border-radius:99px;margin:8px 0 16px;overflow:hidden}
.k12-quiz-bar i{display:block;height:100%;background:var(--k12);border-radius:99px;transition:width .25s}
.k12-quiz-stem{font-size:15px;font-weight:600;color:var(--ink-strong);line-height:1.8;margin:0 0 14px}
.k12-quiz-opts{display:flex;flex-direction:column;gap:10px}
.k12-quiz-opt{display:flex;align-items:flex-start;gap:11px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:12px 14px;cursor:pointer;text-align:left;font-family:inherit;
  font-size:13.5px;line-height:1.7;color:var(--ink);transition:border-color .2s,background .2s}
.k12-quiz-opt:hover:not(:disabled){border-color:var(--k12-line)}
.k12-quiz-opt.sel{border-color:var(--k12);background:var(--k12-soft)}
.k12-quiz-opt:disabled{cursor:default}
.k12-quiz-opt.ok{border-color:#2E7D4F;background:#F0F8F2}
.k12-quiz-opt.bad{border-color:#B23B3B;background:#FBF0F0}
.k12-quiz-letter{flex:0 0 22px;height:22px;border-radius:50%;background:var(--bg2);border:1px solid var(--line-soft);
  display:grid;place-items:center;font-size:12px;font-weight:600;color:var(--muted);font-style:normal}
.k12-quiz-opt.sel .k12-quiz-letter{background:var(--k12);border-color:var(--k12);color:#fff}
.k12-quiz-opt.ok .k12-quiz-letter{background:#2E7D4F;border-color:#2E7D4F;color:#fff}
.k12-quiz-opt.bad .k12-quiz-letter{background:#B23B3B;border-color:#B23B3B;color:#fff}
.k12-quiz-opt span{flex:1;min-width:0}
.k12-quiz-mark{font-style:normal;font-weight:700}
.k12-quiz-opt.ok .k12-quiz-mark{color:#2E7D4F}
.k12-quiz-opt.bad .k12-quiz-mark{color:#B23B3B}
.k12-quiz-fb{border-radius:var(--radius-sm);padding:12px 14px;margin-top:16px;font-size:13px;line-height:1.8;border:1px solid}
.k12-quiz-fb.ok{background:#F0F8F2;border-color:#BFDCC8;color:#215E3C}
.k12-quiz-fb.bad{background:#FBF0F0;border-color:#E8C4C4;color:#8A2F2F}
.k12-quiz-fb b{display:block;margin-bottom:4px}
.k12-quiz-fb p{margin:0}
.k12-quiz-right{margin-top:4px;font-weight:600}
.k12-quiz-result{text-align:center;padding:16px 0 4px}
.k12-quiz-score-big b{font-family:var(--font-serif);font-size:38px;color:var(--k12)}
.k12-quiz-score-big span{font-size:14px;color:var(--muted);margin-left:6px}
.k12-quiz-praise{font-size:13.5px;color:var(--muted);margin:6px 0 0}
.k12-quiz-wrongs{display:flex;flex-direction:column;gap:10px}
.k12-quiz-wrong{background:var(--card);border:1px solid var(--line);border-left:3px solid #B23B3B;
  border-radius:var(--radius-sm);padding:12px 14px}
.k12-quiz-wstem{font-size:13.5px;font-weight:600;color:var(--ink-strong);line-height:1.7;margin:0 0 6px}
.k12-quiz-wrow{font-size:12.5px;line-height:1.7;margin:0}
.k12-quiz-wrow.bad{color:#B23B3B}
.k12-quiz-wrow.ok{color:#2E7D4F}
.k12-quiz-wex{font-size:12.5px;color:var(--muted);line-height:1.7;margin:6px 0 0}
.k12-quiz-sc-tip{font-size:12.5px;color:var(--muted);margin:0 0 10px}
.k12-quiz-checks{display:flex;flex-direction:column;gap:8px}
.k12-quiz-check{display:flex;align-items:flex-start;gap:10px;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:10px 13px;cursor:pointer;font-size:13.5px;line-height:1.7;color:var(--ink)}
.k12-quiz-check input{margin-top:4px;accent-color:var(--k12);flex:0 0 auto}
@media(max-width:560px){
  .k12-head{padding:10px 12px;gap:8px}
  .k12-search{order:3;flex-basis:100%}
  .k12-crumb{max-width:60vw}
  .k12-body{padding:16px 14px 36px}
  .k12-subjects{grid-template-columns:1fr}
  .k12-topic-name{min-width:0}
  .k12-study-btns .btn{flex:1;min-width:0}
  .k12-quiz-score-big b{font-size:32px}
  .mp-input-row{flex-wrap:wrap}
  .mp-input-row .btn{flex:1;min-width:0}
}
/* —— 大模型生成角标 —— */
.ask-engine{display:flex;align-items:center;gap:6px;font-size:12.5px;color:#7a5cc0;
  background:linear-gradient(90deg,rgba(122,92,192,.10),rgba(122,92,192,.03));
  border:1px solid rgba(122,92,192,.22);border-radius:10px;padding:8px 12px;margin:2px 0 14px}
.ask-engine::before{content:"AI";font-weight:700;font-size:11px;background:#7a5cc0;color:#fff;
  border-radius:5px;padding:1px 6px;letter-spacing:.5px}

/* ============ 数学专项练习 · MathPractice（复用知识点库视觉） ============ */
.mp-stem{font-size:15px} /* 主体样式复用 .k12-quiz-stem */
.mp-answer{background:var(--k12-soft);border:1px solid var(--k12-line);border-radius:var(--radius-sm);padding:12px 14px;margin:6px 0 4px}
.mp-answer .k12-sec-t{margin-top:0;color:#6E5713}
.mp-answer-val{font-size:16px;font-weight:700;color:#9a6b12;line-height:1.7;margin:2px 0 0;white-space:pre-wrap;word-break:break-word}
.mp-think{background:var(--bg2);border:1px dashed var(--line);border-radius:var(--radius-sm);padding:14px 16px;margin:8px 0}
.mp-think p{margin:0;color:var(--muted);font-size:14px;line-height:1.8}
/* 数学专项：写下答案 + 对答案 */
.mp-answer-box{background:var(--k12-soft);border:1px solid var(--k12-line);border-radius:var(--radius-sm);padding:14px 16px;margin:6px 0 4px}
.mp-answer-box .k12-sec-t{margin-top:0;color:#6E5713}
.mp-input-row{display:flex;gap:10px;align-items:stretch}
.mp-answer-in{flex:1;min-width:0;width:auto;padding:11px 13px;border-radius:var(--radius-sm);border:1px solid var(--k12-line);
  background:#fff;font-family:inherit;font-size:15px;color:var(--ink);line-height:1.5}
.mp-answer-in:focus{outline:none;border-color:var(--k12)}
.mp-answer-in::placeholder{color:var(--muted)}
.mp-input-row .btn{flex:0 0 auto;min-width:96px}
.mp-check-fb{border-radius:var(--radius-sm);padding:11px 13px;margin-top:12px;font-size:13px;line-height:1.8;border:1px solid}
.mp-check-fb.ok{background:#F0F8F2;border-color:#BFDCC8;color:#215E3C;font-weight:600}
.mp-check-fb.bad{background:#FBF0F0;border-color:#E8C4C4;color:#8A2F2F;font-weight:600}
.mp-check-fb:not(.ok):not(.bad){background:var(--bg2);border-color:var(--line);color:var(--muted)}
/* ============ 物理专项练习 · PhysicsPractice（复用知识点库 / 数学专项视觉） ============ */
.pp-opts{display:flex;flex-direction:column;gap:9px;margin:14px 0 4px}
.pp-opt{display:flex;align-items:center;gap:10px;text-align:left;background:var(--card);border:1.5px solid var(--line);
  border-radius:var(--radius-sm);padding:12px 15px;cursor:pointer;font-size:14.5px;line-height:1.7;color:var(--ink);
  font-family:inherit;transition:border-color .15s,background .15s,transform .05s}
.pp-opt:hover{border-color:var(--k12-line);box-shadow:var(--shadow-sm)}
.pp-opt:active{transform:translateY(1px)}
.pp-opt:focus-visible{outline:2px solid var(--k12);outline-offset:2px}
.pp-opt:disabled{cursor:default;box-shadow:none}
.pp-opt.correct{border-color:#BFDCC8;background:#F0F8F2;color:#215E3C;font-weight:600}
.pp-opt.wrong{border-color:#E8C4C4;background:#FBF0F0;color:#8A2F2F;font-weight:600}
.pp-opt.dim{opacity:.55}
.pp-analysis{font-size:13.5px;line-height:1.9;color:var(--ink);background:var(--bg2);
  border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:12px 14px;margin:0}
@media(max-width:560px){
  .pp-opts{gap:8px}
  .pp-opt{padding:11px 13px;font-size:14px}
}

/* ===== 月子餐（nutrition 第 4 tab） ===== */
.ppd-wrap{--gold:#C4A247;display:flex;flex-direction:column;gap:14px}
.ppd-intro{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.ppd-intro-t{font-size:18px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);margin-bottom:6px}
.ppd-intro-s{font-size:13px;color:var(--muted);line-height:1.7}
.ppd-intro-src{margin-top:4px;font-size:12.5px}
.ppd-intro-src a{color:var(--green)}
.ppd-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.ppd-periods{display:flex;flex-direction:column;gap:10px}
.ppd-period{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--green);border-radius:var(--radius);padding:12px 14px}
.ppd-period-detox{border-left-color:#3E8E5A}
.ppd-period-repair{border-left-color:#3867D6}
.ppd-period-nourish{border-left-color:#C8922E}
.ppd-period-adjust{border-left-color:#B0563F}
.ppd-period-delivery{border-left-color:#8a6d4b}
.ppd-period-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ppd-period-icon{font-size:22px}
.ppd-period-meta{flex:1;min-width:120px}
.ppd-period-meta b{display:block;font-size:15px;color:var(--ink-strong)}
.ppd-period-meta small{font-size:12px;color:var(--muted)}
.ppd-period-goal{font-size:12px;color:var(--gold);background:rgba(196,162,71,.12);border:1px solid rgba(196,162,71,.4);border-radius:999px;padding:3px 10px;white-space:nowrap}
.ppd-period-tips{margin:8px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:4px}
.ppd-period-tips li{font-size:12.5px;color:var(--muted);line-height:1.6}
.ppd-picker{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.ppd-picker-t{font-size:14px;font-weight:600;color:var(--ink-strong);margin-bottom:10px}
.ppd-pick-group{margin-bottom:10px}
.ppd-pick-label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}
.ppd-pick-row{display:flex;gap:8px;flex-wrap:wrap}
.ppd-day-chip{border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:7px 12px;display:flex;flex-direction:column;align-items:flex-start;gap:2px;cursor:pointer;transition:border-color .15s}
.ppd-day-chip:hover{border-color:var(--green)}
.ppd-day-chip b{font-size:13px;color:var(--ink-strong);font-weight:600}
.ppd-day-chip small{font-size:11px;color:var(--muted)}
.ppd-day-chip i{font-size:10.5px;color:var(--gold);font-style:normal}
.ppd-detail{margin-top:14px;display:flex;flex-direction:column;gap:12px}
.ppd-detail-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.ppd-detail-title{font-size:17px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ppd-badge{font-size:12px;color:var(--green);background:var(--green-soft);border:1px solid var(--green);border-radius:999px;padding:2px 10px;font-family:var(--font-sans);font-weight:500}
.ppd-cycle-note{font-size:12.5px;color:#9a6a1e;background:rgba(196,162,71,.12);border:1px solid rgba(196,162,71,.4);border-radius:var(--radius-sm);padding:8px 12px;line-height:1.6}
.ppd-macro{margin:0}
.ppd-meals{display:flex;flex-direction:column;gap:12px}
.ppd-meal{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}
.ppd-meal-empty .ppd-meal-note{margin-top:4px}
.ppd-meal-head{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--ink-strong);font-size:14.5px;margin-bottom:6px}
.ppd-meal-head span{font-size:13px;color:var(--gold);font-family:var(--font-sans);font-weight:600}
.ppd-meal-note{font-size:12.5px;color:var(--muted);line-height:1.7;background:var(--bg2);border-radius:var(--radius-sm);padding:8px 10px}
.ppd-dish{border-top:1px dashed var(--line);padding:9px 0}
.ppd-dish:first-of-type{border-top:none}
.ppd-dish-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ppd-dish-name{font-size:14px;font-weight:600;color:var(--ink-strong)}
.ppd-dish-kcal{font-size:12px;color:var(--gold);font-weight:600}
.ppd-dish-kcal small{color:var(--muted);font-weight:400;margin-left:4px}
.ppd-conf{font-size:10.5px;border-radius:999px;padding:1px 8px;border:1px solid var(--line);color:var(--muted)}
.ppd-conf-curated{color:#3E8E5A;border-color:#3E8E5A}
.ppd-conf-estimated{color:#3867D6;border-color:#3867D6}
.ppd-conf-inferred{color:#B0563F;border-color:#B0563F}
.ppd-ings{display:flex;gap:6px;flex-wrap:wrap;margin-top:5px}
.ppd-ing{font-size:11.5px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:2px 9px}
.ppd-ing small{color:var(--gold);margin-left:3px}
.ppd-desc{margin-top:5px}
.ppd-desc summary{font-size:12px;color:var(--green);cursor:pointer;user-select:none}
.ppd-desc p{font-size:12.5px;color:var(--muted);line-height:1.75;margin:6px 0 0;white-space:pre-line}
.ppd-alt{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.ppd-alt-body{width:100%;display:flex;flex-direction:column;gap:6px}
.ppd-alt-meal{display:flex;gap:8px;font-size:12.5px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px;line-height:1.6}
.ppd-alt-meal b{color:var(--ink-strong);white-space:nowrap}
/* —— 按天 / 按周 切换 —— */
.ppd-viewswitch{display:flex;gap:8px;flex-wrap:wrap}
.ppd-vs{border:1px solid var(--line);background:var(--card);color:var(--muted);border-radius:999px;padding:7px 16px;font-size:13px;cursor:pointer;font-family:inherit;transition:.18s}
.ppd-vs:hover{border-color:var(--gold);color:var(--ink-strong)}
.ppd-vs.active{background:rgba(196,162,71,.14);border-color:#C4A247;color:#8A6B1F;font-weight:600}
/* —— 周餐单 —— */
.ppd-weeks{display:flex;flex-direction:column;gap:12px}
.ppd-wk-head{display:flex;flex-direction:column;gap:4px}
.ppd-wk-title{font-size:15px;font-weight:700;color:var(--ink-strong)}
.ppd-wk-sub{font-size:12.5px;color:var(--muted);line-height:1.7}
.ppd-wk-sub a{color:var(--green)}
.ppd-wk-chips{display:flex;gap:8px;flex-wrap:wrap}
.ppd-wk-chip{display:flex;flex-direction:column;align-items:center;gap:1px;min-width:86px;border:1px solid var(--line);background:var(--card);border-radius:var(--radius-sm);padding:7px 12px;font-size:13px;color:var(--ink-strong);cursor:pointer;font-family:inherit;transition:.18s}
.ppd-wk-chip small{font-size:11px;color:var(--muted);white-space:nowrap}
.ppd-wk-chip:hover{border-color:var(--gold)}
.ppd-wk-chip.active{background:rgba(196,162,71,.14);border-color:#C4A247;color:#8A6B1F}
.ppd-wk-chip.active small{color:#A5822F}
.ppd-wk-intro{font-size:12.8px;color:var(--muted);line-height:1.85;background:var(--bg2);border-left:3px solid var(--gold);border-radius:var(--radius-sm);padding:10px 12px}
.ppd-wk-days{display:flex;flex-direction:column;gap:10px}
.ppd-wk-day{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}
.ppd-wk-day-h{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.ppd-wk-day-h b{font-size:13.5px;color:var(--ink-strong)}
.ppd-wk-day-h small{font-size:11.5px;color:var(--muted)}
.ppd-wk-slots{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px}
.ppd-wk-slot{border-top:1px dashed var(--line);padding-top:6px}
.ppd-wk-lb{font-size:11.5px;color:var(--gold);font-weight:600}
.ppd-wk-opt{display:flex;align-items:flex-start;gap:5px;margin-top:3px;flex-wrap:wrap}
.ppd-wk-opt i{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:3px;padding:0 4px;line-height:15px;flex:none}
.ppd-wk-dish{font-size:12.2px;color:var(--ink);line-height:1.6}
.ppd-wk-dish+.ppd-wk-dish::before{content:'、';color:var(--muted)}
.ppd-wk-foot{font-size:11.5px;color:var(--muted);line-height:1.7}
/* —— 日记日详情 —— */
.ppd-day-intro{font-size:13px;color:var(--ink);line-height:1.85;background:var(--bg2);border-radius:var(--radius-sm);padding:10px 12px}
.ppd-day-src{font-size:12px;color:var(--muted)}
.ppd-day-src a{color:var(--green)}
.ppd-day-note{font-size:12px;color:var(--muted);line-height:1.75;border-left:2px solid var(--line);padding-left:9px}
.ppd-desc-body{white-space:pre-line}
@media (max-width:560px){
  .ppd-stats{grid-template-columns:repeat(2,1fr)}
  .ppd-period-goal{width:100%;text-align:center}
  .ppd-detail-head{flex-direction:column;align-items:flex-start}
  .ppd-wk-slots{grid-template-columns:1fr}
  .ppd-wk-chip{min-width:0;flex:1}
}

/* ===== 宝宝辅食（生活攻略第 5 tab，.bf-*）===== */
.bf-wrap{display:flex;flex-direction:column;gap:14px}
.bf-intro{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.bf-intro-t{font-size:18px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);margin-bottom:6px}
.bf-intro-s{font-size:13px;color:var(--muted);line-height:1.7}
.bf-intro-src{margin-top:6px;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.bf-src-link{color:var(--green);font-size:12.5px}
.bf-src-lang{font-size:11px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:1px 8px}
.bf-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.bf-periods{display:flex;flex-direction:column;gap:10px}
.bf-stage{background:var(--card);border:1px solid var(--line);border-left:4px solid #7BAFD4;border-radius:var(--radius);padding:12px 14px}
.bf-stage-early{border-left-color:#6FA8DC}
.bf-stage-middle{border-left-color:#3E8E5A}
.bf-stage-late{border-left-color:#C8922E}
.bf-stage-complete{border-left-color:#B0563F}
.bf-stage-jp{border-left-color:#7B6BB0}
.bf-stage-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.bf-stage-icon{font-size:22px}
.bf-stage-meta{flex:1;min-width:120px}
.bf-stage-meta b{display:block;font-size:15px;color:var(--ink-strong)}
.bf-stage-meta small{font-size:12px;color:var(--muted)}
.bf-stage-goal{font-size:12px;color:#8A6B1F;background:rgba(196,162,71,.12);border:1px solid rgba(196,162,71,.4);border-radius:999px;padding:3px 10px}
.bf-stage-tips{margin:8px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:4px}
.bf-stage-tips li{font-size:12.5px;color:var(--muted);line-height:1.6}
.bf-picker{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.bf-picker-t{font-size:14px;font-weight:600;color:var(--ink-strong)}
.bf-chips{display:flex;flex-wrap:wrap;gap:6px}
.bf-chip{border:1px solid var(--line);background:var(--bg2);color:var(--ink);border-radius:999px;padding:6px 13px;font-size:12.5px;cursor:pointer;transition:all .15s}
.bf-chip:hover{border-color:var(--green)}
.bf-chip.active{background:rgba(196,162,71,.14);border-color:#C4A247;color:#8A6B1F;font-weight:600}
.bf-search input{width:100%;border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:9px 12px;font-size:13px;color:var(--ink);outline:none}
.bf-search input:focus{border-color:var(--green)}
.bf-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.bf-card{border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:10px 12px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;cursor:pointer;text-align:left;transition:border-color .15s,transform .15s}
.bf-card:hover{border-color:var(--green);transform:translateY(-1px)}
.bf-card-t{font-size:13.5px;font-weight:600;color:var(--ink-strong);line-height:1.4}
.bf-card-m{font-size:11.5px;color:var(--muted)}
.bf-card-m i{font-style:normal;color:#8A6B1F}
.bf-card-i{font-size:11.5px;color:var(--muted);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bf-card-a{font-size:11px;color:#B0563F}
.bf-pager{display:flex;align-items:center;justify-content:center;gap:12px;font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.bf-detail{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:12px}
.bf-detail-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.bf-detail-title{font-size:17px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif)}
.bf-badge{font-size:12px;background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:2px 10px;font-family:var(--font-sans);font-weight:500;margin-left:6px}
.bf-badge.bf-stage-early{color:#3C7BBF;border-color:#6FA8DC}
.bf-badge.bf-stage-middle{color:#2F7145;border-color:#3E8E5A}
.bf-badge.bf-stage-late{color:#8A6B1F;border-color:#C8922E}
.bf-badge.bf-stage-complete{color:#8E4432;border-color:#B0563F}
.bf-badge.bf-stage-jp{color:#5F5290;border-color:#7B6BB0}
.bf-meta{display:flex;flex-wrap:wrap;gap:8px}
.bf-meta span{font-size:12px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:5px 10px}
.bf-meta b{color:var(--ink);font-weight:600}
.bf-summary{font-size:13px;color:var(--ink);line-height:1.85;background:var(--bg2);border-radius:var(--radius-sm);padding:10px 12px}
.bf-alert{font-size:12.5px;color:#8E4432;background:rgba(176,86,63,.08);border:1px solid rgba(176,86,63,.35);border-radius:var(--radius-sm);padding:9px 12px;line-height:1.7}
.bf-tags{display:flex;flex-wrap:wrap;gap:6px}
.bf-tag{font-size:11.5px;color:var(--green);background:var(--green-soft);border:1px solid var(--green);border-radius:999px;padding:2px 10px}
.bf-sec h6{font-size:13px;color:var(--ink-strong);margin:0 0 7px;font-weight:600}
.bf-ings{display:flex;flex-wrap:wrap;gap:6px}
.bf-ing{font-size:11.5px;color:var(--muted);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:3px 10px}
.bf-ing small{color:var(--muted);opacity:.75;margin-left:3px}
.bf-tips{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:5px}
.bf-tips li{font-size:12.5px;color:var(--muted);line-height:1.7}
.bf-orig{font-size:11.5px;color:var(--muted);border-top:1px dashed var(--line);padding-top:9px;line-height:1.7;word-break:break-all}
@media (max-width:860px){.bf-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){
  .bf-stats{grid-template-columns:repeat(2,1fr)}
  .bf-grid{grid-template-columns:1fr}
  .bf-stage-goal{width:100%;text-align:center}
  .bf-detail-head{flex-direction:column;align-items:flex-start}
  .bf-chip{flex:1;min-width:0;text-align:center}
}
.bf-src-sep{color:var(--line);margin:0 2px}

/* ===== 宝宝辅食 · 添加指南（WS/T 678—2020 重排版） ===== */
.bf-viewswitch{display:flex;gap:8px;background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:4px;width:max-content;max-width:100%}
.bf-vs{border:none;background:transparent;color:var(--muted);border-radius:999px;padding:7px 18px;font-size:13px;cursor:pointer;transition:all .15s;white-space:nowrap}
.bf-vs:hover{color:var(--ink)}
.bf-vs.active{background:var(--card);color:var(--ink-strong);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.08)}
.bfg-wrap{display:flex;flex-direction:column;gap:14px}
.bfg-hero{position:relative;background:linear-gradient(135deg,#FDFBF4 0%,#F7F1E3 100%);border:1px solid #E4D7B8;border-radius:var(--radius);padding:22px 24px 18px;overflow:hidden}
.bfg-hero::after{content:'';position:absolute;right:-30px;top:-30px;width:150px;height:150px;border-radius:50%;background:radial-gradient(circle,rgba(196,162,71,.16),transparent 70%)}
.bfg-hero-badge{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.06em;color:#8A6B1F;background:rgba(196,162,71,.16);border:1px solid #C4A247;border-radius:999px;padding:3px 14px}
.bfg-hero-t{font-size:24px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);margin:12px 0 4px;letter-spacing:.02em}
.bfg-hero-en{font-size:12.5px;color:var(--muted);font-style:italic;letter-spacing:.02em}
.bfg-hero-meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 0 10px;font-size:12px;color:var(--muted)}
.bfg-hero-meta span{position:relative;padding-left:12px}
.bfg-hero-meta span::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:5px;height:5px;border-radius:50%;background:#C4A247}
.bfg-hero-scope{font-size:13px;color:var(--ink);line-height:1.9;background:rgba(255,255,255,.72);border:1px solid #EDE3C8;border-radius:var(--radius-sm);padding:10px 14px}
.bfg-hero-scope b{color:#8A6B1F;margin-right:8px}
.bfg-sec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.bfg-sec-t{font-size:15.5px;font-weight:700;color:var(--ink-strong);font-family:var(--font-serif);margin:0 0 12px;display:flex;align-items:center;gap:9px}
.bfg-sec-no{font-size:11px;font-weight:700;color:#8A6B1F;background:rgba(196,162,71,.14);border:1px solid #E0CF9C;border-radius:6px;padding:2px 8px;letter-spacing:.04em;flex:none}
.bfg-terms{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.bfg-term{border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:12px 14px}
.bfg-term b{font-size:14px;color:var(--ink-strong)}
.bfg-term i{font-size:11px;color:var(--muted);font-style:normal;margin-left:7px}
.bfg-term p{font-size:12.5px;color:var(--ink);line-height:1.75;margin:7px 0 0}
.bfg-principles{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}
.bfg-principle{display:flex;gap:11px;border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:12px 14px}
.bfg-principle-icon{font-size:19px;line-height:1.4;flex:none}
.bfg-principle-no{font-size:11px;font-weight:700;color:#8A6B1F;background:rgba(196,162,71,.14);border-radius:6px;padding:2px 7px;height:max-content;flex:none;margin-top:2px}
.bfg-principle-b{min-width:0}
.bfg-principle-b b{font-size:13.5px;color:var(--ink-strong)}
.bfg-principle-b p{font-size:12.5px;color:var(--muted);line-height:1.8;margin:5px 0 0}
.bfg-stages{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.bfg-stage{border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);overflow:hidden;display:flex;flex-direction:column}
.bfg-stage-head{display:flex;align-items:center;gap:8px;padding:10px 14px;background:linear-gradient(135deg,rgba(196,162,71,.13),rgba(196,162,71,.05));border-bottom:1px solid #EDE3C8}
.bfg-stage-head b{font-size:14px;color:var(--ink-strong);font-family:var(--font-serif)}
.bfg-stage-icon{font-size:17px}
.bfg-stage-rows{display:flex;flex-direction:column;flex:1}
.bfg-stage-row{display:flex;gap:10px;padding:9px 14px;border-bottom:1px dashed var(--line);font-size:12.5px;line-height:1.75}
.bfg-stage-row:last-child{border-bottom:none}
.bfg-stage-k{flex:none;width:64px;color:#8A6B1F;font-weight:600}
.bfg-stage-v{color:var(--ink);min-width:0}
.bfg-stage-row-tex{background:rgba(47,113,69,.06)}
.bfg-stage-row-tex .bfg-stage-k{color:#2F7145}
.bfg-note{font-size:12px;color:var(--muted);margin-top:9px}
.bfg-prep{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}
.bfg-prep-item{display:flex;gap:11px;border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:12px 14px}
.bfg-prep-no{font-size:11px;font-weight:700;color:#8A6B1F;background:rgba(196,162,71,.14);border-radius:6px;padding:2px 7px;height:max-content;flex:none;margin-top:2px}
.bfg-prep-item b{font-size:13.5px;color:var(--ink-strong)}
.bfg-prep-item p{font-size:12.5px;color:var(--muted);line-height:1.8;margin:5px 0 0}
.bfg-food-intro{font-size:13px;color:var(--ink);line-height:1.9;margin-bottom:11px}
.bfg-foods{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.bfg-food{position:relative;border:1px solid var(--line);background:var(--bg2);border-radius:var(--radius-sm);padding:11px 12px 11px 40px}
.bfg-food-no{position:absolute;left:11px;top:12px;width:20px;height:20px;border-radius:50%;background:var(--green);color:#fff;font-size:11.5px;font-weight:700;display:flex;align-items:center;justify-content:center}
.bfg-food b{font-size:13px;color:var(--ink-strong);line-height:1.5}
.bfg-food-note{font-size:10.5px;color:#8E4432;background:rgba(176,86,63,.09);border-radius:4px;padding:1px 6px;margin-left:6px;font-style:normal;white-space:nowrap}
.bfg-food p{font-size:11.5px;color:var(--muted);line-height:1.7;margin:6px 0 0}
.bfg-alert{margin-top:11px}
.bfg-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius-sm);margin-bottom:10px;-webkit-overflow-scrolling:touch}
.bfg-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:560px;background:var(--bg2)}
.bfg-table caption{font-size:13px;font-weight:700;color:var(--ink-strong);text-align:left;padding:10px 12px;background:linear-gradient(135deg,rgba(196,162,71,.13),rgba(196,162,71,.05));border-bottom:1px solid #EDE3C8}
.bfg-table th,.bfg-table td{border:1px solid var(--line);padding:7px 10px;text-align:left;line-height:1.6;vertical-align:top}
.bfg-table thead th{background:var(--card);color:var(--ink-strong);font-weight:600;white-space:nowrap}
.bfg-table tbody th{background:var(--card);color:var(--ink);font-weight:600;white-space:nowrap}
.bfg-table tbody tr:nth-child(even) td{background:var(--card)}
.bfg-table-amount{min-width:760px}
.bfg-table-amount td{min-width:150px}
.bfg-table-notes{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:3px}
.bfg-table-notes li{font-size:11.5px;color:var(--muted);line-height:1.7}
@media (max-width:860px){
  .bfg-terms{grid-template-columns:1fr}
  .bfg-stages{grid-template-columns:1fr}
  .bfg-principles{grid-template-columns:1fr}
  .bfg-prep{grid-template-columns:1fr}
  .bfg-foods{grid-template-columns:repeat(2,1fr)}
  .bfg-hero-t{font-size:20px}
}
@media (max-width:560px){
  .bfg-foods{grid-template-columns:1fr}
  .bfg-viewswitch{width:100%}
  .bfg-vs{flex:1;text-align:center;padding:7px 8px}
  .bfg-hero{padding:16px 16px 14px}
  .bfg-sec{padding:13px 14px}
  .bfg-stage-k{width:58px}
}

/* ===== 中国居民平衡膳食宝塔（2022）：挂在「按食材搭配」下方 ===== */
.nu-pagoda{margin-top:22px;padding-top:20px;border-top:1px dashed var(--line)}
.pgd-head{background:linear-gradient(140deg,var(--bg2),var(--card));border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;margin-bottom:14px}
.pgd-head-badge{display:inline-block;font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:2px 10px;margin-bottom:8px;letter-spacing:.04em}
.pgd-head-t{font-family:var(--font-serif);font-size:19px;font-weight:700;color:var(--ink-strong);line-height:1.35}
.pgd-head-s{font-size:11.5px;color:var(--muted);letter-spacing:.02em;margin-top:3px}
.pgd-head-intro{font-size:13px;color:var(--ink);line-height:1.75;margin-top:9px;padding-left:11px;border-left:3px solid var(--line)}
/* 塔身 */
.pgd-tower{display:flex;flex-direction:column;align-items:center;margin:4px 0 0}
.pgd-tower::before{content:"";width:0;height:0;border-left:15px solid transparent;border-right:15px solid transparent;border-bottom:9px solid #C98A3E;margin-bottom:-1px}
.pgd-layer{width:var(--w,100%);max-width:100%;background:var(--card);border:1px solid var(--line);border-top:2px solid var(--c);border-radius:12px;padding:9px 12px 10px;position:relative;overflow:hidden;transition:transform .18s,box-shadow .18s}
.pgd-layer+.pgd-layer{margin-top:-1px}
.pgd-layer::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--c)}
.pgd-layer:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm);z-index:2}
.pgd-layer-head{display:flex;align-items:center;gap:7px;padding-left:5px}
.pgd-lv{font-size:10px;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:0 4px;line-height:15px;white-space:nowrap}
.pgd-name{font-size:13.5px;font-weight:700;color:var(--ink-strong)}
.pgd-layer-items{display:flex;flex-wrap:nowrap;gap:14px;padding-left:5px;margin-top:6px}
.pgd-item{flex:1 1 0;min-width:0}
.pgd-item+.pgd-item{padding-left:14px;border-left:1px dashed var(--line-soft)}
.pgd-item-t{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.pgd-item-n{font-size:12.5px;color:var(--ink)}
.pgd-item-a{font-family:var(--font-serif);font-size:15.5px;font-weight:700;color:var(--ink-strong);white-space:nowrap}
.pgd-item-a small{font-size:10.5px;font-weight:400;color:var(--muted);margin-left:2px}
.pgd-item-h{font-size:11px;color:var(--muted);line-height:1.5;margin-top:1px}
.pgd-layer-sub{font-size:11px;color:var(--muted);line-height:1.6;padding:6px 0 0 5px;margin-top:6px;border-top:1px dashed var(--line-soft)}
/* 塔基：饮水与运动 */
.pgd-base{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.pgd-base-item{display:flex;align-items:center;gap:10px;background:var(--green-tint);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 13px}
.pgd-base-i{font-size:19px;line-height:1}
.pgd-base-item b{font-size:12.5px;color:var(--ink-strong);white-space:nowrap}
.pgd-base-item em{font-family:var(--font-serif);font-size:16px;font-weight:700;font-style:normal;color:var(--ink-strong);white-space:nowrap}
.pgd-base-item em small{font-size:10.5px;font-weight:400;color:var(--muted);margin-left:2px}
.pgd-base-h{font-size:11px;color:var(--muted);line-height:1.5}
/* 区块 */
.pgd-sec{margin-top:16px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}
.pgd-sec-t{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);margin-bottom:10px}
/* 逐层怎么吃 */
.pgd-lts{display:flex;flex-direction:column;gap:9px}
.pgd-lt{border-left:3px solid var(--c);padding:1px 0 1px 11px}
.pgd-lt-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 9px}
.pgd-lt-n{font-size:13px;font-weight:700;color:var(--ink-strong)}
.pgd-lt-role{font-size:11px;color:var(--muted)}
.pgd-lt-d{font-size:12.5px;color:var(--ink);line-height:1.7;margin-top:3px}
/* 八准则 */
.pgd-prs{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.pgd-pr{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 12px}
.pgd-pr-h{display:flex;align-items:center;gap:7px}
.pgd-pr-n{width:19px;height:19px;flex:0 0 19px;border-radius:50%;background:var(--green-soft);color:var(--green);font-size:11px;line-height:19px;text-align:center;font-weight:700}
.pgd-pr-t{font-size:12.5px;font-weight:700;color:var(--ink-strong);line-height:1.4}
.pgd-pr-d{font-size:11.5px;color:var(--ink);line-height:1.65;margin-top:5px}
/* 能量档位表 */
.pgd-table-note{font-size:11.5px;color:var(--muted);line-height:1.65;margin:-3px 0 9px}
.pgd-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2)}
.pgd-table{width:100%;border-collapse:collapse;font-size:12px;min-width:520px}
.pgd-table th,.pgd-table td{border-bottom:1px solid var(--line-soft);border-right:1px solid var(--line-soft);padding:7px 9px;text-align:center;white-space:nowrap}
.pgd-table thead th{background:var(--card);color:var(--ink-strong);font-weight:600;font-size:11.5px}
.pgd-table thead th:first-child,.pgd-table tbody th{text-align:left;position:sticky;left:0;background:var(--card);z-index:1}
.pgd-table tbody th{font-weight:600;color:var(--ink);font-size:11.5px}
.pgd-table tbody tr.sub th{font-weight:400;color:var(--muted);padding-left:20px}
.pgd-table tbody tr.sub td{color:var(--muted);background:var(--bg2)}
.pgd-table tbody tr:last-child th,.pgd-table tbody tr:last-child td{border-bottom:0}
.pgd-table-unit{font-size:11px;color:var(--muted);margin-top:7px}
/* 用法 */
.pgd-tips{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:7px}
.pgd-tips li{font-size:12.5px;color:var(--ink);line-height:1.7}
@media (max-width:860px){
  .pgd-prs{grid-template-columns:1fr}
  .pgd-base{grid-template-columns:1fr}
}
@media (max-width:560px){
  .pgd-layer{width:100%!important}
  .pgd-layer-items{flex-wrap:wrap;gap:6px 12px}
  .pgd-item{flex:1 1 100%}
  .pgd-item+.pgd-item{padding-left:0;border-left:0;padding-top:6px;border-top:1px dashed var(--line-soft)}
  .pgd-head{padding:14px 14px 13px}
  .pgd-head-t{font-size:17px}
  .pgd-sec{padding:13px 13px}
  .pgd-name{font-size:13px}
}

/* ===== 家居清洁攻略（生活攻略第 6 个 tab） ===== */
.cl-wrap{display:flex;flex-direction:column;gap:16px}
.cl-head{background:linear-gradient(140deg,var(--bg2),var(--card));border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.cl-head-badge{display:inline-block;font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:2px 10px;margin-bottom:8px;letter-spacing:.04em}
.cl-head-t{font-family:var(--font-serif);font-size:19px;font-weight:700;color:var(--ink-strong);line-height:1.35}
.cl-head-intro{font-size:13px;color:var(--ink);line-height:1.75;margin-top:9px;padding-left:11px;border-left:3px solid var(--line)}
.cl-head-note{font-size:11.5px;color:var(--muted);margin-top:7px}
.cl-sec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}
.cl-sec-t{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);margin-bottom:11px}
/* 清洁剂按场景卡片 */
.cl-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.cl-card{display:flex;gap:11px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:11px 12px;align-items:flex-start}
.cl-card-ic{font-size:22px;line-height:1.2;flex:0 0 auto;width:30px;text-align:center}
.cl-card-b{min-width:0;flex:1}
.cl-card-scene{font-size:13px;font-weight:700;color:var(--ink-strong);line-height:1.4}
.cl-card-act{font-size:11.5px;color:var(--muted);line-height:1.55;margin:2px 0 4px}
.cl-card-prod{font-size:12.5px;color:var(--ink);line-height:1.6}
.cl-brand{display:inline-flex;align-items:center;gap:5px;margin-top:6px;font-size:11px;color:var(--ink);background:var(--green-tint);border:1px solid var(--line);border-radius:999px;padding:2px 9px}
.cl-brand-k{color:var(--muted)}
/* 带品牌工具网格 */
.cl-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.cl-tool{display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 8px}
.cl-tool-n{font-size:12.5px;color:var(--ink);line-height:1.4}
.cl-tool-b{font-size:11px;color:var(--green);font-weight:600;background:var(--green-tint);border-radius:999px;padding:1px 8px;white-space:nowrap}
/* 常备小工具标签云 */
.cl-basics{display:flex;flex-wrap:wrap;gap:8px}
.cl-basic{font-size:12px;color:var(--ink);background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:4px 11px}
/* 原则 */
.cl-tips{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:7px}
.cl-tips li{font-size:12.5px;color:var(--ink);line-height:1.7}
@media (max-width:860px){
  .cl-grid{grid-template-columns:1fr}
  .cl-tools{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .cl-head{padding:14px 14px 13px}
  .cl-head-t{font-size:17px}
  .cl-sec{padding:13px 13px}
  .cl-tools{grid-template-columns:repeat(2,1fr);gap:8px}
  .cl-tool-n{font-size:12px}
}

/* ===== 减脂食谱（生活攻略第 7 个 tab） ===== */
.fl-tip{font-size:12.5px;color:var(--ink);background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 11px;line-height:1.7}
.fl-warn{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 11px;margin-top:2px}
.fl-warn-t{font-size:12px;color:var(--ink-strong);font-weight:600;margin-bottom:7px}
.fl-wrap{display:flex;flex-direction:column;gap:16px}
.fl-head{background:linear-gradient(140deg,var(--bg2),var(--card));border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.fl-head-badge{display:inline-block;font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:2px 10px;margin-bottom:8px;letter-spacing:.04em}
.fl-head-t{font-family:var(--font-serif);font-size:19px;font-weight:700;color:var(--ink-strong);line-height:1.35}
.fl-head-meta{font-size:12px;color:var(--muted);margin-top:7px;line-height:1.65}
/* 热量卡片 */
.fl-kcal{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}
.fl-kcal-main{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px dashed var(--line-soft);margin-bottom:12px}
.fl-kcal-num{font-family:var(--font-serif);font-size:32px;font-weight:700;color:var(--green);line-height:1.1}
.fl-kcal-num span{font-size:12px;color:var(--muted);font-weight:400;margin-left:5px}
.fl-kcal-sub{font-size:12px;color:var(--ink);background:var(--green-tint);border-radius:999px;padding:3px 10px}
.fl-kcal-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.fl-kc{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:8px 9px;text-align:center}
.fl-kc span{display:block;font-size:11px;color:var(--muted);margin-bottom:3px}
.fl-kc b{font-size:15px;color:var(--ink-strong)}
.fl-kc.hl{background:var(--green-tint)}
.fl-kc.hl b{color:var(--green)}
.fl-macro{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-top:11px}
.fl-macro-i{display:flex;align-items:center;justify-content:space-between;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:8px 11px}
.fl-macro-i span{font-size:12px;color:var(--muted)}
.fl-macro-i b{font-size:14px;color:var(--ink-strong)}
.fl-pace{font-size:12px;color:var(--ink);margin-top:11px;padding-top:10px;border-top:1px dashed var(--line-soft);line-height:1.7}
/* 区块 */
.fl-sec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}
.fl-sec-t{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);margin-bottom:11px}
.fl-sec-t small{font-size:11px;color:var(--muted);font-weight:400}
/* 一周计划 */
.fl-days{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:11px}
.fl-day{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:11px 12px}
.fl-day-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px;padding-bottom:7px;border-bottom:1px dashed var(--line)}
.fl-day-n{font-size:13px;font-weight:700;color:var(--ink-strong)}
.fl-day-t{font-size:11px;color:var(--muted)}
.fl-meals{display:flex;flex-direction:column;gap:8px}
.fl-meal{background:var(--card);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 10px}
.fl-meal-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}
.fl-meal-slot{font-size:12px;font-weight:700;color:var(--ink-strong)}
.fl-meal-slot.add{color:var(--muted);font-weight:400}
.fl-meal-k{font-size:11px;color:var(--muted);white-space:nowrap}
.fl-meal-f{font-size:12.5px;color:var(--ink);line-height:1.6}
.fl-meal-m{font-size:11.5px;color:var(--muted);line-height:1.6;margin-top:3px}
.fl-note{font-style:normal;color:var(--green)}
/* 采购清单 */
.fl-g{display:flex;flex-direction:column;gap:9px}
.fl-g-item{display:grid;grid-template-columns:74px 1fr;gap:10px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 11px;align-items:start}
.fl-g-cat{font-size:12px;font-weight:700;color:var(--ink-strong);background:var(--green-tint);border-radius:999px;padding:2px 8px;text-align:center}
.fl-g-items{font-size:12.5px;color:var(--ink);line-height:1.7}
.fl-budget-tip{font-size:12px;color:var(--ink);margin-top:10px;line-height:1.7}
/* 食堂 / 外卖 */
.fl-canteen{display:flex;flex-direction:column;gap:8px}
.fl-stall{display:grid;grid-template-columns:78px 1fr;gap:10px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 11px;align-items:start}
.fl-stall-n{font-size:12px;font-weight:700;color:var(--ink-strong)}
.fl-stall-t{font-size:12.5px;color:var(--ink);line-height:1.65}
.fl-ct-line{font-size:12.5px;color:var(--ink);line-height:1.7;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 11px}
.fl-ct-line b{display:inline-block;min-width:62px;color:var(--ink-strong)}
.fl-ct-line.warn b{color:var(--green)}
/* 执行要点 */
.fl-tips{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:7px}
.fl-tips li{font-size:12.5px;color:var(--ink);line-height:1.7}
/* 健康红线拒绝态 */
.fl-blocked{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px 18px;text-align:center}
.fl-blocked-ic{font-size:34px;line-height:1}
.fl-blocked-t{font-family:var(--font-serif);font-size:17px;font-weight:700;color:var(--ink-strong);margin-top:8px}
.fl-blocked-r{font-size:13px;color:var(--ink);line-height:1.8;margin-top:9px;padding:10px 12px;background:var(--bg2);border-radius:var(--radius-sm);text-align:left}
.fl-blocked-note{font-size:12px;color:var(--muted);line-height:1.7;margin-top:9px}
@media (max-width:860px){
  .fl-days{grid-template-columns:1fr}
  .fl-kcal-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .fl-head{padding:14px 14px 13px}
  .fl-head-t{font-size:17px}
  .fl-sec{padding:13px 13px}
  .fl-kcal{padding:13px 13px}
  .fl-kcal-num{font-size:27px}
  .fl-macro{grid-template-columns:1fr}
  .fl-g-item{grid-template-columns:1fr;gap:5px}
  .fl-g-cat{justify-self:start}
  .fl-stall{grid-template-columns:1fr;gap:4px}
  .fl-ct-line b{min-width:0;margin-right:6px}
}
/* ===== 四格配餐法 · 权威参考（v325） ===== */
.fl-ref-wrap{margin-top:16px}
.fl-ref-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.fl-ref-det>summary{cursor:pointer;list-style:none;padding:13px 15px;font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);background:var(--bg2);border-bottom:1px solid var(--line-soft)}
.fl-ref-det>summary::-webkit-details-marker{display:none}
.fl-ref-det>summary small{font-size:11px;color:var(--muted);font-weight:400}
.fl-ref-det[open]>summary{border-bottom:1px solid var(--line)}
.fl-ref-method{padding:14px 15px 4px}
.fl-ref-method-t{font-size:13px;font-weight:700;color:var(--green);margin-bottom:6px}
.fl-ref-method p{font-size:13px;color:var(--ink);line-height:1.8;margin:0 0 12px}
.fl-ref-grids{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:9px;margin-bottom:11px}
.fl-ref-grid{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:9px 11px;display:flex;flex-direction:column;gap:3px}
.fl-ref-grid-k{display:inline-block;width:22px;height:22px;line-height:22px;text-align:center;background:var(--green);color:#fff;border-radius:6px;font-size:12px;font-weight:700;margin-bottom:2px}
.fl-ref-grid-n{font-size:12.5px;font-weight:700;color:var(--ink-strong)}
.fl-ref-grid-d{font-size:11.5px;color:var(--muted);line-height:1.65}
.fl-ref-notes{margin:0;padding-left:17px;display:flex;flex-direction:column;gap:6px}
.fl-ref-notes li{font-size:12.5px;color:var(--ink);line-height:1.7}
.fl-ref-sec{padding:13px 15px;border-top:1px solid var(--line-soft)}
.fl-ref-sec-t{font-size:13px;font-weight:700;color:var(--ink-strong);margin-bottom:10px}
.fl-ref-names{display:flex;flex-wrap:wrap;gap:7px}
.fl-ref-name-sec{margin-bottom:12px}
.fl-ref-name-sec:last-child{margin-bottom:0}
.fl-ref-name-t{font-size:12px;font-weight:700;color:var(--green);margin-bottom:8px}
.fl-ref-name{display:inline-block;background:var(--bg2);border:1px solid var(--line-soft);border-radius:999px;padding:5px 11px;font-size:12.5px;color:var(--ink);line-height:1.5}
.fl-ref-ings{display:flex;flex-direction:column;gap:8px}
.fl-ref-ing{display:grid;grid-template-columns:78px 1fr;gap:10px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:8px 10px;align-items:start}
.fl-ref-ing-c{font-size:12px;font-weight:700;color:var(--ink-strong);background:var(--green-tint);border-radius:999px;padding:2px 8px;text-align:center;justify-self:start}
.fl-ref-ing-i{font-size:12.5px;color:var(--ink);line-height:1.7}
.fl-ref-source{background:var(--bg2);border-top:1px solid var(--line);padding:13px 15px}
.fl-ref-source-t{font-size:12px;font-weight:700;color:var(--ink-strong);margin-bottom:6px}
.fl-ref-source-b{font-size:12.5px;color:var(--ink);line-height:1.7}
.fl-ref-source-note{font-size:11px;color:var(--muted);line-height:1.7;margin-top:7px}
@media (max-width:560px){
  .fl-ref-name{font-size:12px;padding:5px 9px}
  .fl-ref-ing{grid-template-columns:1fr;gap:4px}
  .fl-ref-ing-c{justify-self:start}
}

/* ===== 收纳攻略 .st-* ===== */
.st-wrap{margin-top:16px}
.st-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.st-det>summary{cursor:pointer;list-style:none;padding:13px 15px;font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);background:var(--bg2);border-bottom:1px solid var(--line-soft)}
.st-det>summary::-webkit-details-marker{display:none}
.st-det>summary small{font-size:11px;color:var(--muted);font-weight:400}
.st-det[open]>summary{border-bottom:1px solid var(--line)}
.st-body{padding:14px 15px 4px}
.st-intro{font-size:13px;color:var(--ink);line-height:1.85;margin:0 0 14px;padding:11px 13px;background:var(--bg2);border-left:3px solid var(--green);border-radius:var(--radius-sm)}
.st-sec{padding:13px 0;border-top:1px solid var(--line-soft)}
.st-sec:first-of-type{border-top:none}
.st-sec-head{display:flex;gap:11px;align-items:flex-start;margin-bottom:12px}
.st-sec-no{flex:0 0 auto;width:30px;height:30px;line-height:30px;text-align:center;background:var(--green);color:#fff;border-radius:8px;font-size:12px;font-weight:700;margin-top:1px}
.st-sec-t{font-size:14px;font-weight:700;color:var(--ink-strong)}
.st-sec-sub{font-size:12px;color:var(--muted);line-height:1.65;margin-top:3px}
.st-groups{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.st-group{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 11px}
.st-group-t{font-size:12.5px;font-weight:700;color:var(--green);margin-bottom:6px}
.st-group-desc{font-size:11.5px;color:var(--muted);line-height:1.6;margin-bottom:7px}
.st-items{margin:0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.st-items li{font-size:12.5px;color:var(--ink);line-height:1.65}
.st-items li b{color:var(--ink-strong);font-weight:700;margin-right:5px}
.st-items li span{color:var(--muted)}
.st-source{background:var(--bg2);border-top:1px solid var(--line);padding:13px 15px;margin-top:13px}
.st-source-t{font-size:12px;font-weight:700;color:var(--ink-strong);margin-bottom:6px}
.st-source-b{font-size:12.5px;color:var(--ink);line-height:1.7}
.st-source-note{font-size:11px;color:var(--muted);line-height:1.7;margin-top:7px}
@media (max-width:560px){
  .st-groups{grid-template-columns:1fr}
  .st-intro{font-size:12.5px}
}

/* ===== 生活指南（四份开源指南精选）===== */
.lg-wrap{margin-top:16px}
.lg-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.lg-card+.lg-card{margin-top:12px}
.lg-card>.lg-intro{font-size:13px;color:var(--ink);line-height:1.85;padding:12px 14px}
.lg-det>summary{cursor:pointer;list-style:none;padding:13px 15px;font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);background:var(--bg2);border-bottom:1px solid var(--line-soft)}
.lg-det>summary::-webkit-details-marker{display:none}
.lg-det>summary small{font-size:11px;color:var(--muted);font-weight:400;margin-left:6px}
.lg-det[open]>summary{border-bottom:1px solid var(--line)}
.lg-body{padding:14px 15px 4px}
.lg-desc{font-size:12.5px;color:var(--ink);line-height:1.8;margin:0 0 12px;padding:10px 12px;background:var(--bg2);border-left:3px solid var(--green);border-radius:var(--radius-sm)}
.lg-secs{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.lg-sec{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px 11px}
.lg-sec-t{font-size:12.5px;font-weight:700;color:var(--green);margin-bottom:7px}
.lg-items{margin:0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:7px}
.lg-items li{font-size:12px;color:var(--ink);line-height:1.7}
.lg-items li b{color:var(--ink-strong);font-weight:700;margin-right:5px}
.lg-items li span{display:block;color:var(--muted);margin-top:2px}
.lg-grade{display:inline-block;font-style:normal;font-size:10px;font-weight:700;padding:1px 6px;border-radius:20px;margin-right:5px;vertical-align:1px}
.lg-grade-A{background:#e8f5e9;color:#2e7d32}
.lg-grade-B{background:#fff8e1;color:#b26a00}
.lg-grade-C{background:#fce4ec;color:#b3375f}
.lg-linkonly{padding:2px 0 4px}
.lg-linkonly-note{font-size:12px;color:var(--muted);line-height:1.8;margin-bottom:10px}
.lg-linkonly-links{display:flex;flex-wrap:wrap;gap:8px}
.lg-ext{display:inline-block;padding:9px 14px;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);font-size:12.5px;font-weight:600;color:var(--green);text-decoration:none}
.lg-ext:hover{border-color:var(--green)}
.lg-source{border-top:1px solid var(--line);padding:13px 15px;margin-top:13px}
.lg-source-t{font-size:12px;font-weight:700;color:var(--ink-strong);margin-bottom:6px}
.lg-source-links{display:flex;flex-wrap:wrap;gap:8px;font-size:12.5px}
.lg-source-links a{color:var(--green);text-decoration:none;font-weight:600}
.lg-source-links a:hover{text-decoration:underline}
.lg-source-links i{color:var(--muted);font-style:normal}
.lg-source-note{font-size:11px;color:var(--muted);line-height:1.7;margin-top:7px}
@media (max-width:560px){
  .lg-secs{grid-template-columns:1fr}
}

/* ===== AI 导师（DeepTutor 能力导览，全屏浮层）===== */
.tu-panel{position:fixed;inset:0;z-index:1200;display:flex;flex-direction:column;background:var(--bg);opacity:0;transform:translateY(12px);transition:opacity .22s ease,transform .22s ease}
.tu-panel.on{opacity:1;transform:none}
.tu-head{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--card);border-bottom:1px solid var(--line);flex:0 0 auto}
.tu-head-tx{display:flex;flex-direction:column;min-width:0}
.tu-head-tx h3{margin:0;font-family:var(--font-serif);font-size:17px;color:var(--ink-strong)}
.tu-crumb{font-size:11.5px;color:var(--muted);margin-top:2px}
.tu-ico-btn{margin-left:auto;width:34px;height:34px;border:none;border-radius:50%;background:var(--bg2);color:var(--ink);font-size:18px;cursor:pointer;line-height:1}
.tu-ico-btn:hover{background:var(--line)}
.tu-body{flex:1;overflow-y:auto;padding:16px;-webkit-overflow-scrolling:touch}
.tu-wrap{max-width:1080px;margin:0 auto}
.tu-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.tu-card+.tu-sec-t{margin-top:20px}
.tu-hero{padding:18px 18px 16px}
.tu-hero-t{font-family:var(--font-serif);font-size:19px;font-weight:700;color:var(--ink-strong)}
.tu-hero-o{font-size:12px;color:var(--muted);margin-top:4px}
.tu-intro{font-size:13px;color:var(--ink);line-height:1.9;margin:12px 0 0}
.tu-hero-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:13px}
.tu-hero-links a{padding:8px 14px;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);font-size:12.5px;font-weight:600;color:var(--green);text-decoration:none}
.tu-hero-links a:hover{border-color:var(--green)}
.tu-sec-t{font-family:var(--font-serif);font-size:15px;font-weight:700;color:var(--ink-strong);margin:20px 0 12px}
.tu-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.tu-cap{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px}
.tu-cap-h{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.tu-cap-ico{font-size:17px}
.tu-cap-n{font-size:13.5px;font-weight:700;color:var(--ink-strong)}
.tu-cap p{margin:0;font-size:12px;color:var(--muted);line-height:1.75}
.tu-whys{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.tu-why{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px}
.tu-why-t{font-size:13.5px;font-weight:700;color:var(--green);margin-bottom:6px}
.tu-why p{margin:0;font-size:12px;color:var(--ink);line-height:1.8}
.tu-setups{display:flex;flex-direction:column;gap:10px}
.tu-setup{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px}
.tu-setup-t{font-size:13.5px;font-weight:700;color:var(--ink-strong)}
.tu-setup-d{font-size:12px;color:var(--muted);line-height:1.7;margin:4px 0 8px}
.tu-cmd{margin:0;padding:10px 12px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);overflow-x:auto;font-size:11.5px;line-height:1.6;color:var(--ink);white-space:pre-wrap;word-break:break-all}
.tu-source{border-top:1px solid var(--line);padding:14px 16px;margin-top:20px}
.tu-source-t{font-size:12px;font-weight:700;color:var(--ink-strong);margin-bottom:6px}
.tu-source-b{font-size:12.5px;color:var(--ink);line-height:1.7}
.tu-source-note{font-size:11px;color:var(--muted);line-height:1.7;margin-top:7px}
.tu-dt-bar{display:flex;align-items:center;gap:10px;margin:10px 14px 0;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,#eef3ff,#e7f7ee);border:1px solid rgba(3,46,126,.16);color:var(--ink);text-decoration:none;cursor:pointer;transition:.15s}
.tu-dt-bar:hover{filter:brightness(1.03);box-shadow:0 4px 14px rgba(3,46,126,.12)}
.tu-dt-ico{font-size:18px;flex:0 0 auto;line-height:1}
.tu-dt-tx{flex:1;min-width:0;font-size:13px;line-height:1.5}
.tu-dt-tx b{color:var(--ink-strong)}
.tu-dt-go{flex:0 0 auto;font-size:13px;font-weight:600;color:#032E7E;white-space:nowrap}
@media (max-width:640px){
  .tu-caps{grid-template-columns:1fr}
  .tu-whys{grid-template-columns:1fr}
  .tu-body{padding:12px}
}

/* ===== AI 导师 · 12 项能力工作区 ===== */
.tu-caps-bar{display:flex;gap:6px;padding:8px 14px;background:var(--card);border-bottom:1px solid var(--line);overflow-x:auto;flex:0 0 auto;-webkit-overflow-scrolling:touch}
.tu-caps-bar::-webkit-scrollbar{height:0}
.tu-cap-btn{flex:0 0 auto;padding:7px 12px;border:1px solid var(--line);border-radius:20px;background:var(--bg2);color:var(--ink);font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.tu-cap-btn.on{background:var(--green);border-color:var(--green);color:#fff}
.tu-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px;max-width:1080px;margin:0 auto 14px}
.tu-form label{display:block;font-size:12.5px;font-weight:700;color:var(--ink-strong);margin-bottom:7px}
.tu-input{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2);color:var(--ink);font-size:13px;font-family:inherit}
.tu-form textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg2);color:var(--ink);font-size:13px;font-family:inherit;line-height:1.7;resize:vertical}
.tu-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:9px}
.tu-row .tu-input{width:auto;flex:0 0 auto;min-width:110px}
.tu-quick{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px;font-size:11.5px;color:var(--muted)}
.tu-hint{font-size:11px;color:var(--muted);margin-top:7px}
.tu-nl{margin-top:10px;border:1px dashed var(--line);border-radius:var(--radius-sm);padding:8px 11px;background:var(--bg2)}
.tu-nl summary{font-size:12px;color:var(--muted);cursor:pointer;user-select:none}
.tu-nl[open] summary{margin-bottom:8px;color:var(--ink)}
.tu-nl .tu-hint{margin-top:6px}
.tu-out{max-width:1080px;margin:0 auto}
.tu-res{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.tu-res-t{font-family:var(--font-serif);font-size:14px;font-weight:700;color:var(--ink-strong);margin:14px 0 8px}
.tu-res-t:first-child{margin-top:0}
.tu-src{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:20px;font-size:10.5px;font-weight:400;font-family:var(--font-sans);color:var(--muted);background:var(--bg2);border:1px solid var(--line-soft);vertical-align:middle;transform:translateY(-1px)}
.tu-src-ai{color:var(--green);background:var(--green-soft);border-color:#c7dbfe}
.tu-res-bare{padding:10px 16px;margin-top:8px}
.tu-md{font-size:13px;line-height:1.9;color:var(--ink)}
.tu-answer{font-family:var(--font-serif);font-size:20px;font-weight:700;color:var(--green);padding:10px 0 4px}
.tu-steps{display:flex;flex-direction:column;gap:8px}
.tu-step{display:flex;gap:9px;align-items:flex-start;font-size:12.5px;color:var(--ink);line-height:1.75}
.tu-step i{flex:0 0 auto;min-width:20px;height:20px;line-height:20px;text-align:center;background:var(--bg2);border:1px solid var(--line-soft);border-radius:6px;font-size:11px;font-style:normal;color:var(--muted);font-weight:700}
.tu-step span{flex:1;min-width:0}
.tu-note{font-size:11.5px;color:var(--muted);line-height:1.7;margin-top:10px;padding:9px 11px;background:var(--bg2);border-radius:var(--radius-sm)}
.tu-err{padding:14px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:var(--red);font-size:12.5px}
.tu-fu{margin-top:12px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.tu-fu-t{font-size:11.5px;color:var(--muted);margin-right:2px}
.tu-kpis{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.tu-kpi{flex:1;min-width:88px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:10px;text-align:center}
.tu-kpi b{display:block;font-size:19px;color:var(--green);line-height:1.3}
.tu-kpi span{font-size:11px;color:var(--muted)}
.tu-tags{display:flex;flex-wrap:wrap;gap:6px}
.tu-tag{background:var(--bg2);border:1px solid var(--line-soft);border-radius:20px;padding:3px 10px;font-size:12px;color:var(--ink)}
.tu-tag i{font-style:normal;color:var(--muted);font-size:10.5px;margin-left:3px}
.tu-q-item{display:flex;gap:10px;padding:11px 0;border-top:1px solid var(--line-soft)}
.tu-q-item:first-of-type{border-top:none}
.tu-q-no{flex:0 0 auto;width:26px;height:26px;line-height:26px;text-align:center;background:var(--bg2);border-radius:8px;font-size:12px;font-weight:700;color:var(--muted)}
.tu-q-item.ok .tu-q-no{background:#e8f5e9;color:#2e7d32}
.tu-q-item.bad .tu-q-no{background:#fce4ec;color:#b3375f}
.tu-q-body{flex:1;min-width:0}
.tu-q-q{font-size:13px;color:var(--ink-strong);line-height:1.7;margin-bottom:5px}
.tu-q-meta{font-size:11.5px;color:var(--muted);margin-bottom:7px}
.tu-tpl{margin-top:8px}
.tu-tpl summary{cursor:pointer;font-size:12px;color:var(--green);font-weight:600}
.tu-tpl pre{margin:8px 0 0;padding:10px 12px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);font-size:11.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.tu-lesson{padding:11px 0;border-top:1px solid var(--line-soft)}
.tu-lesson:first-of-type{border-top:none}
.tu-lesson-t{font-size:13px;font-weight:700;color:var(--ink-strong);margin-bottom:6px}
/* 高中数学：文档知识点（章节+考点两级），仅展示知识点与自查 */
.tu-lesson-doc .tu-req{font-size:11.5px;color:var(--muted);line-height:1.7;margin:2px 0 8px;padding:7px 10px;background:var(--bg2);border-left:3px solid var(--green);border-radius:var(--radius-sm)}
.tu-lesson-doc .tu-req b{color:var(--ink-strong)}
.tu-kp-t{font-size:11.5px;font-weight:700;color:var(--muted);margin:9px 0 5px}
.tu-kp{margin:0;padding-left:18px;list-style:decimal}
.tu-kp li{font-size:12px;color:var(--ink);line-height:1.65;padding:2px 0}
.tu-kp li::marker{color:var(--green);font-weight:700}
.tu-lesson-doc .tu-kp{max-height:340px;overflow:auto}
.tu-drill{font-size:12px;color:var(--ink);line-height:1.7;padding:6px 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tu-drill-tag{flex:0 0 auto;font-size:10px;font-weight:700;color:var(--muted);background:var(--bg2);border:1px solid var(--line-soft);border-radius:10px;padding:1px 7px;line-height:1.6}
.tu-q{margin:8px 0;padding:9px 11px;background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm)}
.tu-qs{font-size:12.5px;color:var(--ink-strong);line-height:1.7;margin-bottom:7px}
.tu-qos{display:flex;flex-direction:column;gap:6px}
.tu-qo{display:block;text-align:left;width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card);color:var(--ink);font-size:12.5px;line-height:1.6;cursor:pointer;font-family:inherit}
.tu-qo:hover{border-color:var(--green)}
.tu-qo.ok{border-color:#2e7d32;background:#e8f5e9;color:#1b5e20}
.tu-qo.bad{border-color:#b3375f;background:#fce4ec;color:#8e2350}
.tu-qex{display:none;margin-left:6px;font-size:11.5px;color:var(--muted)}
.tu-q.done .tu-qex{display:inline}
.tu-qblock{margin-top:4px}
.tu-sck-t{font-size:11.5px;font-weight:700;color:var(--muted);margin:11px 0 6px}
.tu-sck{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:var(--ink);line-height:1.6;padding:3px 0;cursor:pointer}
.tu-sck input{margin-top:2px;flex:0 0 auto}
.tu-drill-tag.ok{color:#1b5e20;background:#e8f5e9;border-color:#2e7d32}
.tu-drill-family{flex:0 0 auto;font-size:10px;font-weight:700;color:var(--green);background:var(--bg2);border:1px solid var(--line-soft);border-radius:10px;padding:1px 7px;line-height:1.6}
.tu-drill-diff{flex:0 0 auto;font-size:10px;color:var(--muted);border:1px solid var(--line-soft);border-radius:10px;padding:1px 7px;line-height:1.6}
.tu-exam-tag{display:inline-flex;align-items:center;gap:5px;margin-left:7px;font-weight:400;font-size:10.5px;vertical-align:middle}
.tu-exam-tag em{font-style:normal;color:var(--muted);background:var(--bg2);border:1px solid var(--line-soft);border-radius:10px;padding:1px 7px}
.tu-exam-tag i{font-style:normal;color:#e6a700}
.tu-cmp{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.tu-cmp-col{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:11px}
.tu-cmp-t{font-size:11.5px;font-weight:700;color:var(--muted);margin-bottom:6px}
.tu-cmp-b{font-size:12.5px;color:var(--ink);line-height:1.8}
.tu-chart{background:var(--bg2);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:8px;overflow-x:auto}
.tu-chart svg{width:100%;height:auto;display:block}
.tu-axis{stroke:var(--line);stroke-width:1}
.tu-ring{fill:none;stroke:var(--line);stroke-width:1}
.tu-curve{fill:none;stroke:var(--green);stroke-width:2;stroke-linejoin:round}
.tu-ray{stroke:var(--red);stroke-width:2}
.tu-dot{fill:var(--green)}
.tu-dot-in{fill:var(--green);opacity:.75}
.tu-dot-out{fill:var(--muted);opacity:.5}
.tu-bar{fill:var(--green);opacity:.85}
.tu-ax-t{font-size:11px;fill:var(--muted)}
.tu-ax-v{font-size:10.5px;fill:var(--ink);text-anchor:middle}
@media (max-width:640px){
  .tu-cmp{grid-template-columns:1fr}
  .tu-form{padding:11px 12px}
  .tu-res{padding:12px 13px}
}
/* 课程学习-上海中考数学模拟卷（内嵌交互区块） */
.tu-mock{margin-top:18px;border-top:2px dashed var(--line);padding-top:16px}
.tu-mock-head{margin-bottom:6px}
.tu-mock-title{font-size:17px;font-weight:700;color:var(--ink)}
.tu-mock-meta{font-size:12px;color:var(--muted);margin-top:2px}
.tu-mock-tip{background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-size:12px;padding:8px 12px;border-radius:8px;margin:10px 0}
.tu-mock-bar{text-align:right;margin-bottom:6px}
.tu-mock-sec{margin:14px 0}
.tu-mock-sec-t{font-weight:700;font-size:15px;color:var(--ink);margin-bottom:8px}
.tu-mock-q{margin:0 0 12px;padding-bottom:10px;border-bottom:1px dashed var(--line-soft)}
.tu-mock-qt{margin-bottom:4px;font-size:14px;line-height:1.7}
.tu-mock-opts{display:flex;flex-wrap:wrap;gap:6px 16px;margin:5px 0}
.tu-mock-opt{font-size:14px;color:var(--ink);cursor:pointer;padding:3px 11px;border-radius:7px;border:1px solid var(--line, #e5e7eb);background:#fff;transition:.15s}
.tu-mock-opt:hover{background:#eff6ff;border-color:#bfdbfe}
.tu-mock-opt.sel{background:#eff6ff;border-color:#1d4ed8;box-shadow:0 0 0 2px #dbeafe}
.tu-mock-opt.ok{background:#dcfce7;color:#166534;border-color:#86efac;font-weight:600}
.tu-mock-opt.bad{background:#fee2e2;color:#991b1b;border-color:#fca5a5;text-decoration:line-through}
.tu-mock-q.done .tu-mock-opt{pointer-events:none}
.tu-mock-score-tag{font-size:11px;color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:20px;padding:0 7px;margin-left:6px;font-weight:600}
.tu-mock-fill{display:flex;gap:8px;align-items:center;margin:6px 0;flex-wrap:wrap}
.tu-mock-inp{flex:1 1 220px;min-width:160px;font-size:14px;padding:5px 10px;border:1px solid var(--line,#e5e7eb);border-radius:7px;background:#fff;color:var(--ink)}
.tu-mock-inp:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 2px #dbeafe}
.tu-mock-inp.ok{border-color:#22c55e;background:#f0fdf4}
.tu-mock-inp.bad{border-color:#ef4444;background:#fef2f2}
.tu-mock-check{font-size:13px;color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe;border-radius:7px;padding:5px 14px;cursor:pointer;user-select:none;white-space:nowrap}
.tu-mock-check:hover{background:#dbeafe}
.tu-mock-solve{margin:6px 0}
.tu-mock-ta{width:100%;min-height:70px;font-size:14px;line-height:1.7;padding:8px 10px;border:1px solid var(--line,#e5e7eb);border-radius:7px;background:#fff;color:var(--ink);resize:vertical;font-family:inherit}
.tu-mock-ta:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 2px #dbeafe}
.tu-mock-solv-bar{display:flex;gap:10px;align-items:center;margin-top:6px;flex-wrap:wrap}
.tu-mock-self{display:inline-flex;gap:6px;align-items:center}
.tu-mock-self-btn{font-size:12px;color:#475569;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:7px;padding:4px 11px;cursor:pointer}
.tu-mock-self-btn.on{background:#22c55e;color:#fff;border-color:#16a34a}
.tu-mock-q.wrong .tu-mock-qt{color:#991b1b}
.tu-mock-q.right .tu-mock-qt{color:#166534}
.tu-mock-score{margin:14px 0;padding:14px 16px;background:linear-gradient(135deg,#eff6ff,#f0fdf4);border:1px solid #bfdbfe;border-radius:12px}
.tu-mock-score-t{font-weight:700;font-size:16px;color:#1e3a8a;margin-bottom:10px}
.tu-mock-score-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.tu-mock-score-grid>div{background:#fff;border:1px solid #e5e7eb;border-radius:9px;padding:10px;text-align:center}
.tu-mock-score-grid b{display:block;font-size:24px;color:#1d4ed8;line-height:1.1}
.tu-mock-score-grid span{font-size:12px;color:var(--muted)}
.tu-mock-score-warn{margin-top:10px;font-size:13px;color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:8px;padding:7px 11px}
.tu-mock-score-wrong{margin-top:8px;font-size:13px;color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:7px 11px}
.tu-mock-score-note{margin-top:8px;font-size:12.5px;color:var(--muted);line-height:1.7}
@media (max-width:640px){
  .tu-mock-score-grid{grid-template-columns:repeat(2,1fr)}
  .tu-mock-opts{gap:6px 12px}
}
.tu-mock-ans{display:none;margin-top:7px;padding:9px 12px;background:var(--bg2,#f8fafc);border-left:3px solid #059669;border-radius:6px;font-size:13.5px;line-height:1.7;color:var(--ink)}
.tu-mock-ans.on{display:block}
.tu-mock-ans b{color:#059669}
.tu-mock-ref{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}
.tu-mock-ref-sec{margin-bottom:8px}
.tu-mock-ref-sec b{font-size:14px;color:var(--ink)}
.tu-mock-ref-sec div{font-size:13px;color:var(--muted);margin-top:3px;line-height:1.8}

/* 高中分层变式标签：A 基础 / B 提升 / C 拓展 */
.tu-drill-level{font-size:11px;font-weight:700;border-radius:20px;padding:1px 8px;margin-right:3px;white-space:nowrap}
.tu-drill-level.lv-A{background:#dcfce7;color:#166534;border:1px solid #86efac}
.tu-drill-level.lv-B{background:#dbeafe;color:#1e40af;border:1px solid #93c5fd}
.tu-drill-level.lv-C{background:#fae8ff;color:#86198f;border:1px solid #e9d5ff}
.tu-mock-hint{font-size:12px;color:var(--muted)}

/* 课程学习-数学：模拟卷已迁至「题库」，课程页保留直达入口卡 */
.tu-mock-entry{margin:16px 0 4px;border:1px dashed var(--line);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:8px;background:linear-gradient(180deg,#fdfaf3,#fff)}
.tu-mock-entry-t{font-weight:700;font-size:15px;color:var(--ink-strong);font-family:var(--font-serif)}
.tu-mock-entry-d{font-size:13px;color:var(--muted);line-height:1.7}
.tu-mock-entry-btns{display:flex;gap:8px;flex-wrap:wrap}

/* 题库（question-bank.js）：试卷列表 */
.qb-intro{font-size:13px;color:var(--muted);line-height:1.8;margin:0 0 14px}
.qb-papers{display:grid;gap:14px}
.qb-paper{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--card);display:flex;flex-direction:column;gap:8px}
.qb-paper-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.qb-paper-badge{font-size:12px;padding:2px 9px;border-radius:999px;background:#FBF3DF;color:#8A6D1B;border:1px solid #EBD9BC;font-weight:600}
.qb-paper-t{font-family:var(--font-serif);font-size:16px;color:var(--ink-strong);font-weight:700}
.qb-paper-meta{font-size:12.5px;color:var(--muted)}
.qb-paper-tip{font-size:13px;color:var(--muted);line-height:1.7}
.qb-paper-stats{font-size:12.5px;color:#8A6D1B}
.qb-paper-foot{display:flex;align-items:center;gap:10px;margin-top:4px;flex-wrap:wrap}
.qb-paper-prog{font-size:12px;color:var(--muted)}
.qb-paper-go{margin-left:auto}
@media (max-width:640px){
  .qb-paper-go{margin-left:0;width:100%}
}

/* 课程学习-高中数学「随机出题」面板（高考真题库 math-atlas） */
.tu-atlas{margin:14px 0 18px;border:1px solid var(--line);border-radius:12px;background:linear-gradient(180deg,#f8fafc,#fff);overflow:hidden}
.tu-atlas-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 14px;background:#eff6ff;border-bottom:1px solid #dbeafe}
.tu-atlas-h b{font-size:15px;color:#1e3a8a}
.tu-atlas-sub{font-size:12px;color:var(--muted);flex:1 1 auto;min-width:180px}
.tu-atlas-tabs{display:flex;gap:6px;flex-wrap:wrap;padding:8px 12px;background:#f1f5f9;border-bottom:1px solid var(--line)}
.tu-atlas-tab{font-size:12.5px;line-height:1.2;padding:6px 10px;border:1px solid var(--line);border-radius:20px;background:#fff;color:var(--ink);cursor:pointer;white-space:nowrap}
.tu-atlas-tab.on{background:#1e3a8a;border-color:#1e3a8a;color:#fff;font-weight:600}
.tu-atlas-paper-t{font-size:13.5px;font-weight:600;color:#1e3a8a;margin:2px 0 10px}
.tu-atlas-body{padding:12px 14px}
.tu-atlas-q{margin:0 0 14px;padding-bottom:12px;border-bottom:1px dashed var(--line-soft)}
.tu-atlas-q:last-child{margin-bottom:0;border-bottom:0;padding-bottom:0}
.tu-atlas-qh{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.tu-atlas-qh b{font-size:14.5px;color:var(--ink-strong)}
.tu-atlas-ty{font-size:11.5px;color:var(--muted);background:#f1f5f9;border:1px solid var(--line);border-radius:20px;padding:1px 8px}
.tu-atlas-stem{font-size:14px;line-height:1.85;color:var(--ink);margin-bottom:5px;word-break:break-word}
.tu-atlas-stem table{border-collapse:collapse;margin:6px 0;font-size:13px}
.tu-atlas-stem td,.tu-atlas-stem th{border:1px solid var(--line);padding:3px 8px;text-align:center}
.tu-atlas-img{max-width:100%;height:auto;border:1px solid var(--line);border-radius:8px;margin:6px 0;display:block}
.tu-atlas-kn{font-size:12px;color:#0369a1;background:#f0f9ff;border:1px solid #bae6fd;border-radius:6px;padding:3px 9px;margin:5px 0;display:inline-block}
.tu-atlas-opts{display:flex;flex-direction:column;gap:5px;margin:7px 0}
.tu-atlas-opt{display:flex;gap:8px;align-items:flex-start;text-align:left;font-size:14px;color:var(--ink);cursor:pointer;padding:6px 11px;border-radius:8px;border:1px solid var(--line,#e5e7eb);background:#fff;transition:.15s;line-height:1.7}
.tu-atlas-opt:hover{background:#eff6ff;border-color:#bfdbfe}
.tu-atlas-opt i{font-style:normal;font-weight:700;color:#1d4ed8;flex:0 0 auto}
.tu-atlas-opt.sel{background:#eff6ff;border-color:#1d4ed8;box-shadow:0 0 0 2px #dbeafe}
.tu-atlas-opt.ok{background:#dcfce7;color:#166534;border-color:#86efac;font-weight:600}
.tu-atlas-opt.bad{background:#fee2e2;color:#991b1b;border-color:#fca5a5;text-decoration:line-through}
.tu-atlas-q.done .tu-atlas-opt{pointer-events:none}
.tu-atlas-row{display:flex;gap:8px;align-items:center;margin:7px 0;flex-wrap:wrap}
.tu-atlas-inp{flex:1 1 220px;min-width:150px;font-size:14px;padding:6px 10px;border:1px solid var(--line,#e5e7eb);border-radius:8px;background:#fff;color:var(--ink)}
.tu-atlas-inp:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 2px #dbeafe}
.tu-atlas-inp.ok{border-color:#22c55e;background:#f0fdf4}
.tu-atlas-inp.bad{border-color:#ef4444;background:#fef2f2}
.tu-atlas-res{display:none;margin:8px 0;font-size:13px}
.tu-atlas-res.on{display:block}
.tu-atlas-res.ok{color:#166534}
.tu-atlas-res.bad{color:#991b1b}
.tu-atlas-res span{margin-left:8px;color:var(--muted)}
.tu-atlas-sol{display:none;margin-top:9px;padding:10px 12px;background:var(--bg2,#f8fafc);border-left:3px solid #059669;border-radius:7px;font-size:13.5px;line-height:1.8;color:var(--ink)}
.tu-atlas-sol.on{display:block}
.tu-atlas-sol-t{font-size:12.5px;font-weight:700;color:#059669;margin:4px 0 2px}
.tu-atlas-sol-t:first-child{margin-top:0}
.tu-atlas-ans{font-weight:600;word-break:break-word;white-space:pre-wrap}
.tu-atlas-score{font-size:12px;color:var(--muted);background:#fff;border:1px solid var(--line);border-radius:20px;padding:2px 10px;white-space:nowrap}
.tu-atlas-score b{color:#166534}
.tu-atlas-score i{font-style:normal;color:#991b1b}
.tu-atlas-exp{white-space:pre-wrap;word-break:break-word}
.tu-atlas-exp table{border-collapse:collapse;margin:6px 0;font-size:13px}
.tu-atlas-exp td{border:1px solid var(--line);padding:3px 8px}

/* 高中数学知识库（MathBook 笔记）：复用 K12 面板外壳，以下为内容区样式 */
.mb-intro{background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:10px 13px;margin-bottom:12px;display:flex;flex-direction:column;gap:3px}
.mb-intro b{font-size:14.5px;color:var(--ink)}
.mb-intro span{font-size:12px;color:var(--muted);line-height:1.6}
.tb-credit{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:-6px 0 12px;padding:0 2px;font-size:11.5px;color:var(--muted)}
.tb-credit a{color:#0369a1;text-decoration:none;border-bottom:1px dashed #93c5fd}
.tb-credit a:hover{color:#0284c7;border-bottom-style:solid}
.mb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:9px}
.mb-card{display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:left;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;transition:.15s}
.mb-card:hover{border-color:#93c5fd;background:#eff6ff;transform:translateY(-1px)}
.mb-card b{font-size:14px;color:var(--ink)}
.mb-card span{font-size:11.5px;color:var(--muted)}
.mb-card i{font-style:normal;font-size:10.5px;color:#0369a1;background:#f0f9ff;border:1px solid #bae6fd;border-radius:20px;padding:0 7px}
.mb-topic-h{display:flex;align-items:baseline;gap:9px;margin-bottom:10px;padding-bottom:7px;border-bottom:1px solid var(--line)}
.mb-topic-h b{font-size:16px;color:var(--ink)}
.mb-topic-h span{font-size:12px;color:var(--muted)}
.mb-secs{display:flex;flex-direction:column;gap:7px}
.mb-sec{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.mb-sec-t{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:9px 12px;border:0;background:#f8fafc;cursor:pointer;font-size:14px;color:var(--ink)}
.mb-sec-t:hover{background:#eff6ff}
.mb-sec-t.on{background:#eff6ff;border-bottom:1px solid var(--line)}
.mb-sec-t i{font-style:normal;font-size:11.5px;color:#1d4ed8;background:#dbeafe;border-radius:20px;min-width:19px;text-align:center;padding:0 5px;flex:0 0 auto}
.mb-sec-t.sub i{background:#f1f5f9;color:var(--muted)}
.mb-sec-t span{flex:1 1 auto}
.mb-sec-t em{font-style:normal;color:var(--muted);font-size:11px;transition:.15s}
.mb-sec-t.on em{transform:rotate(180deg)}
.mb-sec-b{padding:11px 14px;font-size:14px;line-height:1.9;color:var(--ink);word-break:break-word;overflow-x:auto}
.mb-sec-b p{margin:0 0 8px}
.mb-sec-b ul,.mb-sec-b ol{margin:0 0 8px;padding-left:22px}
.mb-sec-b li{margin-bottom:4px}
.mb-sec-b table{border-collapse:collapse;margin:8px 0;font-size:13px;display:block;overflow-x:auto;max-width:100%}
.mb-sec-b td,.mb-sec-b th{border:1px solid var(--line);padding:4px 9px;text-align:center}
.mb-sec-b th{background:#f8fafc}
.mb-sec-b strong{color:var(--ink-strong)}
.mb-sec-b .katex-display{margin:10px 0;overflow-x:auto;overflow-y:hidden}
.mb-hits{display:flex;flex-direction:column;gap:7px}
.mb-hit{display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:left;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;transition:.15s}
.mb-hit:hover{border-color:#93c5fd;background:#eff6ff}
.mb-hit b{font-size:14px;color:var(--ink)}
.mb-hit-src{font-size:11px;color:#0369a1;background:#f0f9ff;border:1px solid #bae6fd;border-radius:20px;padding:0 7px}
.mb-hit-sn{font-size:12px;color:var(--muted);line-height:1.6}
@media (max-width:640px){.mb-grid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr))}}

/* 数学知识库：学段切换（初中 / 高中） */
.mb-bands{display:flex;gap:4px;background:#f1f5f9;border:1px solid var(--line);border-radius:20px;padding:2px}
.mb-band{border:0;background:transparent;color:var(--muted);font-size:12.5px;padding:3px 13px;border-radius:18px;cursor:pointer;transition:.15s}
.mb-band:hover{color:var(--ink)}
.mb-band.on{background:#fff;color:#1d4ed8;font-weight:700;box-shadow:0 1px 2px rgba(0,0,0,.08)}

/* 电子课本：书目列表 / 阅读器 / 笔记 */
.tb-books{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}
.tb-books.tb-books-1col{grid-template-columns:1fr}
.tb-book{display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;padding:9px 13px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;transition:.15s}
.tb-book:hover{border-color:#93c5fd;background:#eff6ff}
.tb-book b{font-size:13px;line-height:1.4;color:var(--ink)}
.tb-book span{font-size:11.5px;color:var(--muted)}
.tb-book-loc{color:#0369a1}
.tb-read{display:flex;flex-direction:column;gap:8px;height:100%}
.tb-read-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding-bottom:7px;border-bottom:1px solid var(--line)}
.tb-read-bar b{font-size:14.5px;color:var(--ink)}
.tb-read-bar span{font-size:11.5px;color:var(--muted)}
.tb-read-main{display:flex;gap:10px;flex:1 1 auto;min-height:0}
.tb-pdf{flex:1 1 62%;display:flex;flex-direction:column;min-width:0}
.tb-pdf iframe{flex:1 1 auto;width:100%;min-height:520px;border:1px solid var(--line);border-radius:10px;background:#f8fafc}
.tb-pdf-tip{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}
.tb-note{flex:1 1 38%;display:flex;flex-direction:column;gap:6px;min-width:240px;border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:#fffcf3}
.tb-note-h{font-size:13px;font-weight:700;color:#92400e;display:flex;gap:7px;align-items:baseline;flex-wrap:wrap}
.tb-note-h span{font-weight:400;font-size:11px;color:var(--muted)}
.tb-note textarea{flex:1 1 auto;min-height:260px;resize:vertical;font-size:13px;line-height:1.75;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
.tb-note textarea:focus{outline:none;border-color:#d97706;box-shadow:0 0 0 2px #fef3c7}
.tb-note-bar{display:flex;gap:7px}
@media (max-width:820px){.tb-read-main{flex-direction:column}.tb-pdf iframe{min-height:420px}}
.mb-card.up{border-color:#fdba74;background:#fffbeb}
.mb-card.up:hover{border-color:#f59e0b;background:#fef3c7}
.tb-local{font-size:11px;color:#166534;background:#dcfce7;border:1px solid #86efac;border-radius:20px;padding:0 7px}

/* 电子课本-上传课本 */
.tb-upload{border:1px dashed #fdba74;background:#fffbeb;border-radius:10px;padding:10px 12px;margin-bottom:11px}
.tb-upload-t{font-size:13px;font-weight:700;color:#92400e;margin-bottom:7px}
.tb-upload-row{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:6px}
.tb-upload-row input[type=text]{flex:1 1 170px;min-width:140px;font-size:13px;padding:5px 9px;border:1px solid var(--line);border-radius:7px;background:#fff}
.tb-upload-row input[type=file]{flex:1 1 100%;font-size:12.5px;padding:4px 0}
.tb-upload-tip{font-size:11.5px;color:var(--muted);line-height:1.6}
.tb-upload-off{border-style:solid;border-color:var(--line);background:#f8fafc;color:var(--muted);font-size:13px}
.tb-book-wrap{display:flex;gap:7px;align-items:stretch}
.tb-book-wrap .tb-book{flex:1 1 auto}
.tb-del{flex:0 0 auto;border:1px solid #fecaca;background:#fef2f2;color:#991b1b;font-size:12px;border-radius:9px;padding:0 11px;cursor:pointer;transition:.15s}
.tb-del:hover{background:#fee2e2;border-color:#fca5a5}

/* ===== 技能分享：毛玻璃原生按钮（.btn gold / .btn ghost）===== */
/* 分享单独大按钮在上，下方 4 列正方形网格；仅覆盖尺寸，保留 .btn 毛玻璃/渐变外观 */
.section-title .sk-share-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:12px;line-height:1.2;margin:0 0 0 auto;flex:0 0 auto;white-space:nowrap}
.empty .sk-share-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:12px;line-height:1.2;margin:0 0 14px}
/* 技能分享空态：取消全站 .empty 的 560px 限宽，铺满整行，与上方内容区同宽 */
.empty.sk-empty{max-width:none;width:100%;margin-left:0;margin-right:0}
/* 分享按钮移到原图标位置（顶部）：隐藏 .empty 自动注入的圆形图标，避免占位 */
.empty.sk-empty::before{display:none}
.empty.sk-empty .empty-t{margin:0}
/* 技能分享 8 个入口图标：固定 28×28 小方块（2026-10-24 用户要求，从 168×168 缩小）。
   28px 方块内放不下文字标签，标签移到图标下方（.sk-cell 纵向排布）；
   列宽 auto-fit minmax(76px,1fr)——桌面 8 个一行、窄屏自动折行，标签（最长「数学知识库」约 53px）不溢出。 */
.sk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:14px 8px;margin:4px 0 14px;justify-items:center}
.sk-cell{display:flex;flex-direction:column;align-items:center;gap:5px}
.sk-grid .sk-sq{width:28px;height:28px;padding:0;border-radius:8px;display:flex;align-items:center;justify-content:center}
.sk-grid .sk-sq .sk-ico{font-size:22px;line-height:1}
.sk-grid .sk-tx{font-size:10.5px;line-height:1.2;text-align:center;color:var(--muted);white-space:nowrap}

/* 题库：真题公式图片（docx 内嵌 PNG，重新排版后内联） */
img.qf{display:inline-block;vertical-align:middle;max-height:1.8em;margin:0 1px}
.tu-mock-opt img.qf,.tu-atlas-opt img.qf{max-height:1.5em}
.tu-mock-ans img.qf,.tu-mock-ref img.qf,.tu-atlas-ans img.qf,.tu-atlas-exp img.qf{max-height:2.6em;margin:2px 2px}

/* 电子课本：PDF.js 自绘阅读区（替代 iframe，兼容 Safari / Firefox / 手机浏览器） */
.tb-pdf-bar{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:7px 9px;
  border:1px solid var(--line);border-bottom:0;border-radius:10px 10px 0 0;background:#f8fafc}
.tb-pgbtn{font-family:inherit;font-size:12px;padding:4px 10px;border:1px solid var(--line);
  border-radius:8px;background:#fff;color:var(--ink);cursor:pointer}
.tb-pgbtn:hover{border-color:#93c5fd;background:#eff6ff}
.tb-pgbtn:disabled{opacity:.45;cursor:not-allowed}
.tb-page{font-size:12px;color:var(--muted);min-width:58px;text-align:center}
.tb-pdf-sep{width:1px;height:16px;background:var(--line);margin:0 2px}
.tb-pdf-canvas{flex:1 1 auto;min-height:520px;max-height:72vh;overflow:auto;position:relative;
  background:#eef0f3;border:1px solid var(--line);border-radius:0 0 10px 10px;padding:14px;
  display:flex;justify-content:center;align-items:flex-start}
.tb-pdf-canvas canvas{background:#fff;border-radius:2px;box-shadow:0 2px 14px rgba(0,0,0,.14)}
.tb-pdf-msg{position:absolute;left:50%;top:38%;transform:translate(-50%,-50%);
  font-size:12.5px;color:var(--muted);line-height:1.7;text-align:center;
  background:#fff;padding:12px 16px;border-radius:10px;box-shadow:0 2px 10px rgba(0,0,0,.08);max-width:80%}

/* 电子课本：移动端翻页（箭头按钮 + 点两侧 + 左右滑动） */
.tb-pdf{position:relative}
.tb-tap{display:none;position:absolute;top:52%;transform:translateY(-50%);z-index:4;
  width:42px;height:42px;padding:0;border:0;border-radius:50%;
  background:rgba(23,26,30,.46);color:#fff;font-size:24px;line-height:42px;text-align:center;
  cursor:pointer;-webkit-tap-highlight-color:transparent}
.tb-tap:active{background:rgba(23,26,30,.7)}
.tb-tap-prev{left:10px}
.tb-tap-next{right:10px}
.tb-tap-hint{display:none;position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:4;
  font-size:11.5px;color:#fff;background:rgba(23,26,30,.6);padding:5px 12px;border-radius:99px;
  transition:opacity .5s;pointer-events:none;white-space:nowrap}
@media (max-width:900px){
  .tb-tap{display:block}
  .tb-tap-hint{display:block}
}

/* 电子课本：笔记区可折叠（默认收起，给 PDF 更多空间） */
.tb-note-h{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent}
.tb-note-h:focus-visible{outline:2px solid #d97706;outline-offset:2px}
.tb-note-ar{display:inline-block;width:14px;color:#b45309}
.tb-note-tg{margin-left:auto;font-size:11px;color:#0369a1}
.tb-note.folded{flex:0 0 auto;align-self:flex-start;min-width:0;padding:7px 12px}
.tb-note.folded .tb-note-body{display:none}

/* 电子课本：短页面（封面等）不再顶在顶部留一大块灰底
   - 桌面端：页面在阅读区内垂直居中（短页上下留白均分，长页仍从顶部开始）
   - 手机端：阅读区高度贴合页面，不强行拉满，避免下方出现灰块 */
.tb-pdf-canvas{background:#f4f6f8}
.tb-pdf-canvas canvas{margin:auto}
@media (max-width:900px){
  .tb-pdf-canvas{flex:0 0 auto;min-height:0}
}

/* 电子课本：阅读控件改为底部悬浮胶囊，不占课文展示区 */
.tb-pdf-bar{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);z-index:6;
  display:flex;align-items:center;gap:2px;padding:5px 7px;border:0;border-radius:99px;
  background:rgba(255,255,255,.94);box-shadow:0 3px 16px rgba(0,0,0,.18);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  flex-wrap:nowrap;max-width:calc(100% - 16px)}
.tb-pdf-bar .tb-pgbtn{width:34px;height:34px;padding:0;border:0;border-radius:50%;
  background:transparent;color:var(--ink);font-size:17px;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.tb-pdf-bar .tb-pgbtn:hover{background:#eef2f7}
.tb-pdf-bar .tb-pgbtn:active{background:#e2e8f0}
.tb-pdf-bar .tb-pgbtn:disabled{opacity:.32}
.tb-pdf-bar .tb-page{font-size:12.5px;color:var(--ink);min-width:58px;text-align:center;
  font-variant-numeric:tabular-nums;letter-spacing:.2px}
.tb-pdf-bar .tb-pdf-sep{width:1px;height:18px;background:var(--line);margin:0 3px}
.tb-pdf-bar .tb-page-jump{cursor:pointer;border-radius:10px;transition:background .15s;-webkit-tap-highlight-color:transparent}
.tb-pdf-bar .tb-page-jump:hover{background:#eef2f7}
.tb-pdf-bar .tb-page.tb-jump{min-width:0;padding:0 2px}
.tb-jump-inp{width:3.4em;border:1px solid #93c5fd;border-radius:10px;font-size:12.5px;
  text-align:center;padding:4px 2px;font-family:inherit;color:var(--ink);background:#fff;outline:none}
@media (max-width:900px){
  .tb-pdf-bar{bottom:8px;padding:4px 6px;gap:0}
  .tb-pdf-bar .tb-pgbtn{width:32px;height:32px;font-size:16px}
  .tb-pdf-bar .tb-page{min-width:52px;font-size:12px}
}

/* 电子课本：手机端页面铺满，去掉四周内边距与灰边 */
@media (max-width:900px){
  .tb-pdf-canvas{padding:0;border:0;border-radius:0;background:#fff}
  .tb-pdf-canvas canvas{margin:0;border-radius:0;box-shadow:none}
}

/* 电子课本：阅读视图真正铺满（去掉面板左右内边距，标题栏与笔记保持留白） */
@media (max-width:900px){
  .k12-body.tb-reading{padding-left:0;padding-right:0}
  .k12-body.tb-reading .tb-read-bar{padding-left:14px;padding-right:14px}
  .k12-body.tb-reading .tb-note{margin-left:14px;margin-right:14px}
}

/* 电子课本：全屏阅读（原生 fullscreen 与 CSS 降级两种形态） */
.tb-pdf.tb-fs{position:fixed;inset:0;z-index:99999;background:#fff;border-radius:0;
  max-width:none;display:flex;flex-direction:column;padding:0}
/* safe center：空间够时垂直居中（不贴顶），长页溢出时自动回退顶对齐，不裁掉页首 */
.tb-pdf.tb-fs .tb-pdf-canvas{flex:1 1 auto;min-height:0;max-height:none;align-items:safe center}
.tb-pdf:fullscreen{background:#fff;display:flex;flex-direction:column;padding:0}
.tb-pdf:fullscreen .tb-pdf-canvas{flex:1 1 auto;min-height:0;max-height:none;align-items:safe center}
.tb-pdf:-webkit-full-screen{background:#fff;display:flex;flex-direction:column;padding:0}
.tb-pdf:-webkit-full-screen .tb-pdf-canvas{flex:1 1 auto;min-height:0;max-height:none;align-items:safe center}

/* ============ 在线阅读区 ============ */
.rd-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:4px 0 14px}
.rd-head{padding:0 2px}
/* #rd_tabs 是 .rd-head（flex）的子项，必须显式占满整行，否则会按内容宽度收缩成窄条 */
.rd-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%;flex:1 1 100%}
.rd-card{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-height:64px;max-width:none;margin:0;padding:11px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:.15s}
.rd-card:hover{border-color:#cfc8b8}
.rd-card.active{border-color:#3a6ea5;box-shadow:0 0 0 2px rgba(58,110,165,.28);background:#eef4fa}
.rd-card-label{font-size:15px;font-weight:600;line-height:1.3}
.rd-card-cnt{font-size:12px;line-height:1.45;color:var(--muted)}
.rd-card-ext{background:#fbfaf6;border-style:dashed}
.rd-card-ext:hover{border-color:#b9b09a}
.rd-card-tag{margin-top:2px;font-size:11px;color:#a07a2a;font-weight:500}
.rd-search{margin-left:auto;flex:1 1 200px;max-width:320px;min-width:160px}
.rd-search-inp{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:14px;outline:none}
.rd-search-inp:focus{border-color:#3a6ea5}
.rd-sub{font-size:13px;color:var(--muted);margin:14px 2px 8px;font-weight:600}
.rd-sub-note{font-weight:400;line-height:1.6}
.rd-block-title{font-size:15px;font-weight:700;margin:16px 2px 6px}
.rd-cat{margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.rd-cat-name{font-size:14px;font-weight:700;margin-bottom:8px;color:var(--text)}
.rd-chips{display:flex;flex-wrap:wrap;gap:8px}
.rd-chip{display:inline-block;padding:5px 11px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;color:#3a6ea5;background:#f7f9fb;text-decoration:none;transition:.15s}
.rd-chip:hover{border-color:#3a6ea5;background:#eef3f8}
.rd-empty{padding:40px 20px;text-align:center;color:var(--muted)}
.rd-empty-ico{font-size:42px;margin-bottom:10px}
.rd-empty p{margin:6px 0;line-height:1.6}
.rd-empty-sub{font-size:13px;opacity:.85}
.rd-empty code{background:rgba(0,0,0,.05);padding:2px 6px;border-radius:6px;font-size:12px}
.rd-empty-link{display:inline-block;margin-top:10px;color:#3a6ea5;font-weight:600;text-decoration:none}
.rd-empty-link:hover{text-decoration:underline}

/* 阅读器覆盖层 */
/* 第三方站点聚合：声明 + 工具条 + 内嵌 iframe */
.rd-note{margin:2px 0 12px;padding:11px 14px;border:1px solid #e6c98a;background:#fff8e8;border-radius:12px;font-size:12.5px;line-height:1.7;color:#7a5a16}
.rd-tools{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.rd-tool-btn{padding:7px 14px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--text);font-size:13px;cursor:pointer;transition:.15s}
.rd-tool-btn:hover{border-color:#3a6ea5;color:#3a6ea5}
.rd-frame-wrap{position:relative;height:calc(100dvh - 360px);min-height:420px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff}
.rd-frame{display:block;width:100%;height:100%;border:0}
.rd-frame-tip{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);padding:6px 14px;border-radius:999px;background:rgba(0,0,0,.66);color:#fff;font-size:12.5px;line-height:1.5;pointer-events:none;white-space:nowrap;z-index:2}
@media (max-width:640px){
  .rd-grid{grid-template-columns:1fr 1fr;gap:8px}
  .rd-card{min-height:58px;padding:9px 11px}
  .rd-card-label{font-size:14px}
  .rd-card-cnt{font-size:11px}
  .rd-frame-wrap{height:calc(100dvh - 330px);min-height:340px}
}

/* ===== 管理员：大模型调用统计 ===== */
.admin-llmstats{padding:4px 0 8px}
.llm-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin-bottom:12px}
.llm-stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;text-align:center}
.llm-num{font-size:22px;font-weight:700;color:#2b2b2b;line-height:1.2;word-break:break-all}
.llm-cap{font-size:12px;color:var(--muted);margin-top:4px}
.llm-prov-wrap{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px;font-size:13px;color:var(--muted)}
.llm-prov-label{font-weight:600;color:#2b2b2b}
.llm-prov{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:12.5px;color:var(--muted)}
.llm-prov b{color:#2b2b2b;font-weight:700}
.llm-meta{font-size:12.5px;color:var(--muted);line-height:1.6;margin-bottom:10px}
.llm-actions{display:flex;gap:8px}
.llm-baidu{font-size:13px;font-weight:600;padding:8px 12px;border-radius:10px;margin-bottom:8px;line-height:1.5}
.llm-baidu.on{color:#15803d;background:rgba(22,163,74,.1);border:1px solid rgba(22,163,74,.25)}
.llm-baidu.off{color:#b91c1c;background:rgba(220,38,38,.08);border:1px solid rgba(220,38,38,.25)}
.muted{color:var(--muted)}

/* ===== 讨论区（论坛） ===== */
.fm-head{display:flex;justify-content:flex-end}
.fm-tabs{display:flex;gap:8px;margin:0 0 12px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-bottom:2px}
.fm-tabs::-webkit-scrollbar{display:none}
.fm-tab{flex:0 0 auto;border:1px solid var(--line);background:var(--card);color:var(--muted);border-radius:999px;padding:6px 14px;font-size:13.5px;cursor:pointer;transition:.15s;white-space:nowrap}
.fm-tab:hover{border-color:#032E7E;color:#032E7E}
.fm-tab.active{background:#032E7E;border-color:#032E7E;color:#fff}
.fm-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.fm-sort{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden}
.fm-sort-btn{border:0;background:var(--card);color:var(--muted);padding:6px 16px;font-size:13.5px;cursor:pointer}
.fm-sort-btn.active{background:#032E7E;color:#fff}
.fm-search{flex:1;min-width:140px;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:14px;background:var(--card);color:#1f2937}
.fm-list{display:grid;gap:12px}
.fm-card{cursor:pointer;transition:.15s}
.fm-card:hover{box-shadow:0 4px 16px rgba(3,46,126,.1);transform:translateY(-1px)}
.fm-card-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.fm-cat{font-size:12px;color:#032E7E;background:rgba(3,46,126,.08);border:1px solid rgba(3,46,126,.18);border-radius:999px;padding:2px 9px;white-space:nowrap}
.fm-title{font-size:16px;font-weight:700;margin:0;line-height:1.4;color:#1f2937}
.fm-card-meta{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:13px;margin-bottom:8px}
.fm-author{font-weight:600;color:#374151}
.fm-card-stats{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12.5px;flex-wrap:wrap}
.fm-card-stats svg{vertical-align:-2px;opacity:.7}
.fm-last{margin-left:auto}
.fm-own{margin-left:auto;display:flex;gap:6px}
.fm-own .btn{margin:0}
.fm-empty{text-align:center;padding:40px 0}
.fm-detail-title{font-size:22px;font-weight:800;margin:4px 0 12px;line-height:1.35;color:#1f2937}
.fm-detail-meta{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:13px;margin-bottom:10px;flex-wrap:wrap}
.fm-detail-meta .fm-author{font-weight:600;color:#374151}
.fm-views{margin-left:auto}
.fm-detail-actions{display:flex;gap:8px;margin-bottom:12px}
.fm-like-row{margin:14px 0}
.fm-reply-head{margin:18px 0 10px;font-size:16px;color:#1f2937}
.fm-replies{display:grid;gap:14px}
.fm-reply{margin:0}
.fm-reply .floor{font-size:12px;color:var(--muted);background:rgba(3,46,126,.06);border-radius:6px;padding:1px 7px;margin-left:4px}
.fm-reply-to{display:inline-block;font-size:12.5px;color:#032E7E;background:rgba(3,46,126,.07);border-radius:6px;padding:2px 8px;margin:4px 0}
.fm-reply-acts{display:flex;align-items:center;gap:14px;margin-top:6px}
.link-btn{border:0;background:transparent;color:var(--muted);font-size:13px;cursor:pointer;padding:2px 0;display:inline-flex;align-items:center;gap:3px}
.link-btn:hover{color:#032E7E}
.link-btn.liked{color:#e11d48}
.link-btn.danger:hover{color:#dc2626}
.at{color:#032E7E;font-weight:600}
.fm-reply-box{margin-top:18px;border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--card)}
.fm-reply-to-chip{font-size:13px;color:#032E7E;background:rgba(3,46,126,.08);border-radius:8px;padding:6px 10px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.fm-chip-x{border:0;background:transparent;color:var(--muted);font-size:16px;cursor:pointer;line-height:1;padding:0 4px}
.fm-reply-ta{width:100%;min-height:72px;border:1px solid var(--line);border-radius:10px;padding:10px;font-size:14px;font-family:inherit;resize:vertical;background:#fff;color:#1f2937;box-sizing:border-box}
.fm-reply-foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px;gap:10px;flex-wrap:wrap}
.fm-reply-tip{font-size:12px;color:var(--muted)}
.fm-login-hint{margin-top:16px;text-align:center;color:var(--muted)}
.wz-extra-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-top:1px dashed var(--line);margin-top:6px}
.wz-extra-label{font-size:14px;color:var(--muted);white-space:nowrap}
.wz-cat-sel{border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:14px;background:var(--card);color:#1f2937;min-width:160px}

/* ===== 情绪发泄区（微博式信息流）===== */
.vt-head h2{margin:0 0 2px;font-size:20px;font-family:var(--font-serif);letter-spacing:.5px;color:var(--ink-strong)}
.vt-head small{color:var(--muted);font-size:13px}
.vt-compose{padding:14px 16px;margin-bottom:14px}
.vt-compose-top{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.vt-me{font-size:14px;font-weight:600;color:var(--ink)}
.vt-login-hint{font-size:13px;color:var(--muted);margin-bottom:8px}
.vt-login-hint a{color:#032E7E;font-weight:600}
.vt-text{width:100%;min-height:92px;max-height:340px;border:1px solid var(--line);border-radius:12px;padding:11px 13px;font-size:15px;line-height:1.7;font-family:inherit;color:#1f2937;background:#fff;box-sizing:border-box;resize:vertical;outline:none}
.vt-text:focus{border-color:var(--green-2)}
.vt-imgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:8px;margin-top:10px}
.vt-img-prev{position:relative;aspect-ratio:1/1;border-radius:10px;overflow:hidden;background:var(--bg2)}
.vt-img-prev img{width:100%;height:100%;object-fit:cover;display:block}
.vt-img-x{position:absolute;top:3px;right:3px;width:20px;height:20px;border:0;border-radius:50%;background:rgba(20,24,32,.62);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.vt-img-x:hover{background:rgba(220,38,38,.9)}
.vt-compose-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;flex-wrap:wrap}
.vt-moods{display:flex;flex-wrap:wrap;gap:6px}
.vt-mood{border:1px solid var(--line);background:var(--card);color:var(--muted);font-size:12.5px;padding:4px 10px;border-radius:999px;cursor:pointer;transition:.15s}
.vt-mood:hover{border-color:var(--green-2);color:var(--ink)}
.vt-mood.on{background:var(--green-tint);border-color:var(--green-2);color:var(--green-2);font-weight:600}
.vt-actions{display:flex;align-items:center;gap:10px}
.vt-attach{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--muted);cursor:pointer;padding:6px 10px;border-radius:10px;border:1px dashed var(--line)}
.vt-attach:hover{color:var(--green-2);border-color:var(--green-2)}
.vt-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.vt-mood-filter{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;flex:1;min-width:0}
.vt-mood-tab{border:0;background:var(--bg2);color:var(--muted);font-size:13px;padding:6px 13px;border-radius:999px;cursor:pointer;white-space:nowrap}
.vt-mood-tab.active{background:var(--green-2);color:#fff}
.vt-search{flex:0 0 220px;max-width:100%;border:1px solid var(--line);border-radius:10px;padding:7px 12px;font-size:13px;background:var(--card);color:#1f2937}
.vt-list{display:flex;flex-direction:column;gap:14px}
.vt-card{padding:14px 16px}
.vt-card-head{display:flex;align-items:center;gap:10px}
.vt-card-head .cmt-av{flex:0 0 auto}
.vt-card-meta{display:flex;flex-direction:column;line-height:1.25}
.vt-author{font-size:14.5px;font-weight:600;color:var(--ink)}
.vt-time{font-size:12px;color:var(--muted)}
.vt-tag{margin-left:auto;font-size:12px;color:var(--green-2);background:var(--green-tint);border-radius:999px;padding:2px 10px;order:3}
.vt-del{margin-left:8px;order:4;border:0;background:transparent;color:var(--muted);cursor:pointer;padding:4px;border-radius:8px}
.vt-del:hover{color:#dc2626;background:rgba(220,38,38,.08)}
.vt-content{white-space:pre-wrap;word-break:break-word;font-size:15px;line-height:1.75;color:#26241f;margin:10px 0 0}
.vt-expand{color:#032E7E;font-weight:600;cursor:pointer;margin-left:4px}
.vt-grid{display:grid;gap:6px;margin-top:10px}
.vt-grid.g1{grid-template-columns:minmax(0,360px)}
.vt-grid.g2{grid-template-columns:repeat(2,1fr)}
.vt-grid.g3{grid-template-columns:repeat(3,1fr)}
.vt-img{aspect-ratio:1/1;overflow:hidden;border-radius:10px;background:var(--bg2)}
.vt-grid.g1 .vt-img{aspect-ratio:4/3}
.vt-img img{width:100%;height:100%;object-fit:cover;display:block;cursor:zoom-in}
.vt-actions-row{display:flex;align-items:center;gap:10px;margin-top:12px}
.vt-act{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);background:var(--card);color:var(--muted);font-size:13px;padding:6px 13px;border-radius:999px;cursor:pointer;transition:.15s}
.vt-act:hover{border-color:var(--green-2);color:var(--ink)}
.vt-act.on{color:#e11d48;border-color:#f3a3b4;background:rgba(225,29,72,.07)}
.vt-comments{border-top:1px solid var(--line-soft);margin-top:12px;padding-top:12px;display:flex;flex-direction:column;gap:10px}
.vt-cmt{display:flex;gap:8px;align-items:flex-start}
.vt-cmt .cmt-av{flex:0 0 auto}
.vt-cmt-body{flex:1;min-width:0}
.vt-cmt-name{font-size:13px;font-weight:600;color:var(--ink)}
.vt-cmt-time{font-size:11.5px;color:var(--muted);margin-left:6px}
.vt-cmt-text{font-size:13.5px;line-height:1.6;color:#33312c;white-space:pre-wrap;word-break:break-word;margin-top:2px}
.vt-cmt-del{border:0;background:transparent;color:var(--muted);cursor:pointer;padding:2px 4px;border-radius:6px}
.vt-cmt-del:hover{color:#dc2626}
.vt-cmt-empty{font-size:13px;color:var(--muted);text-align:center;padding:4px 0}
.vt-cmt-compose{display:flex;align-items:center;gap:8px;margin-top:2px}
.vt-cmt-input{flex:1;min-width:0;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:13.5px;background:#fff;color:#1f2937;outline:none}
.vt-cmt-input:focus{border-color:var(--green-2)}
.vt-cmt-login{font-size:13px;color:var(--muted);text-align:center}
.vt-cmt-login a{color:#032E7E;font-weight:600}
.vt-more-wrap{display:flex;justify-content:center;margin:16px 0 4px}
.vt-loading,.vt-empty{text-align:center;color:var(--muted);font-size:13px;padding:18px}
.vt-empty{padding:30px}
@media (max-width:600px){
  .vt-compose{padding:12px}
  .vt-card{padding:12px 13px}
  .vt-search{flex:1 1 100%}
  .vt-grid.g3{grid-template-columns:repeat(3,1fr)}
  .vt-tag{order:0;margin-left:0}
  .vt-del{order:0;margin-left:auto}
}

/* ===== 公园放松区 park ===== */
.pk-wrap{max-width:960px;margin:0 auto;display:flex;flex-direction:column;gap:18px}
.pk-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}
.pk-head h2{margin:0 0 2px;font-size:22px;font-family:var(--font-serif);letter-spacing:.5px;color:var(--ink-strong)}
.pk-head small{color:var(--muted);font-size:13px}

.pk-stage{padding:14px;position:relative}
.pk-canvas{width:100%;height:560px;border-radius:12px;overflow:hidden;background:linear-gradient(180deg,#bfe6ff 0%,#dff3ff 60%,#cdeecb 100%);position:relative}
.pk-canvas canvas{display:block;width:100%!important;height:100%!important}
.pk-controls{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;flex-wrap:wrap}
.pk-ctl-hint{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted)}
.pk-fallback{margin-top:10px;font-size:13px;color:#8a6d3b;background:#fff7e6;border:1px solid #f0e0b8;border-radius:10px;padding:10px 12px}

.pk-legend{padding:14px 18px}
.pk-legend-title{display:inline-flex;align-items:center;gap:7px;font-size:15px;font-weight:600;color:var(--ink-strong);margin-bottom:10px}
.pk-legend-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,1fr);gap:9px 18px}
.pk-legend-list li{display:flex;align-items:center;gap:9px;font-size:14px;color:var(--ink)}
.dot{width:12px;height:12px;border-radius:50%;flex:0 0 auto;box-shadow:0 0 0 1px rgba(0,0,0,.06)}
.dot-ginkgo{background:#f3cf3a}
.dot-plane{background:#3f9b46}
.dot-lawn{background:#7cc35a}
.dot-garden{background:#ff5d8f}
.dot-fountain{background:#5fb6e6}
.dot-grove{background:#2f8a3c}

@media (max-width:600px){
  .pk-canvas{height:420px}
  .pk-legend-list{grid-template-columns:1fr}
}

/* 公园 / 家居 tab 切换 */
.pk-tabs{display:flex;gap:10px;margin-bottom:4px}
.pk-tab{flex:0 0 auto;padding:9px 18px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--ink);font-size:14px;font-weight:600;cursor:pointer;transition:.15s}
.pk-tab:hover{border-color:var(--green-2)}
.pk-tab.on{background:linear-gradient(135deg,#3fa66a,#2f8a5a);border-color:transparent;color:#fff;box-shadow:0 4px 12px rgba(47,138,90,.25)}
.pk-view[hidden]{display:none}
.pk-view{position:relative}

/* 源仓库嵌入容器：必须有明确高度，否则 iframe 的 height:100% 会塌陷成默认 150px */
.pk-frame{position:relative;height:560px;border-radius:12px;overflow:hidden;background:#1b1b1b}
.pk-frame iframe{position:absolute;left:0;top:0;width:100%;height:100%;border:0;display:block;background:#1b1b1b}
#pk_forest_view{height:620px;border-radius:12px;overflow:hidden;background:#cfe8da}
#pk_forest_view iframe{position:absolute;left:0;top:0;width:100%;height:100%;border:0;display:block}
@media (max-width:600px){
  .pk-frame{height:560px}
  #pk_forest_view{height:520px}
}

/* ===== 设计家居 game ===== */
.hd{display:flex;flex-direction:column;gap:14px}
.hd-cats{display:flex;gap:8px;flex-wrap:wrap}
.hd-cat{padding:8px 16px;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:14px;font-weight:600;color:var(--ink);cursor:pointer;transition:.15s}
.hd-cat.on{background:linear-gradient(135deg,#3fa66a,#2f8a5a);border-color:transparent;color:#fff}
.hd-body{display:grid;grid-template-columns:200px 1fr 240px;gap:14px;align-items:start}
.hd-list{padding:12px;display:flex;flex-direction:column;gap:8px;max-height:560px;overflow:auto}
.hd-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fff;cursor:pointer;font-size:14px;font-weight:600;color:var(--ink);transition:.12s}
.hd-item:hover{border-color:var(--green-2);background:rgba(63,166,106,.06);transform:translateY(-1px)}
.hd-ico{font-size:20px;line-height:1}
.hd-stage{position:relative;display:flex;flex-direction:column;gap:8px}
.hd-canvas{width:100%;height:560px;border-radius:12px;overflow:hidden;background:linear-gradient(180deg,#eef3f8,#dfe8f0);position:relative}
.hd-canvas canvas{display:block;width:100%!important;height:100%!important}
.hd-tip{font-size:12.5px;color:var(--muted);text-align:center}
.hd-panel{padding:14px 16px}
.hd-panel-title{font-size:15px;font-weight:700;color:var(--ink-strong);margin-bottom:12px}
.hd-empty{font-size:13px;color:var(--muted);line-height:1.6}
.hd-pname{font-size:16px;font-weight:700;color:var(--ink-strong);margin-bottom:12px}
.hd-row{display:flex;align-items:center;gap:10px;margin-bottom:14px;font-size:13px;color:var(--ink)}
.hd-row label{flex:0 0 auto;width:34px;color:var(--muted)}
.hd-row input[type=range]{flex:1 1 auto;accent-color:#3fa66a}
.hd-val{width:42px;text-align:right;color:var(--muted)}
.hd-btn{padding:6px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;cursor:pointer;font-size:13px;color:var(--ink)}
.hd-btn:hover{border-color:var(--green-2)}
.hd-swatches{display:flex;gap:6px;flex-wrap:wrap}
.hd-sw{width:22px;height:22px;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.12)}
.hd-sw:hover{transform:scale(1.1)}
.hd-del{width:100%;padding:10px;border:1px solid #f0c0c0;border-radius:10px;background:#fff5f5;color:#c0392b;font-weight:600;cursor:pointer;font-size:14px}
.hd-del:hover{background:#ffecec}

/* ===== 森林秘境 ===== */
.fo{display:flex;flex-direction:column;gap:14px}
.fo-bar{display:flex;align-items:center;justify-content:space-between;gap:12px}
.fo-stat{font-size:13.5px;font-weight:600;color:var(--muted)}
.fo-stage{position:relative;display:flex;flex-direction:column;gap:8px}
.fo-canvas{width:100%;height:600px;border-radius:12px;overflow:hidden;background:linear-gradient(180deg,#e6f2ea 0%,#cfe8da 60%,#bcdcc8 100%);position:relative}
.fo-canvas canvas{display:block;width:100%!important;height:100%!important}
.fo-tip{font-size:12.5px;color:var(--muted);text-align:center}
@media (max-width:600px){.fo-canvas{height:440px}}

@media (max-width:860px){
  .hd-body{grid-template-columns:1fr}
  .hd-list{flex-direction:row;flex-wrap:wrap;max-height:none}
  .hd-item{flex:1 1 calc(33.33% - 8px);justify-content:center}
  .hd-canvas{height:440px}
}

/* ===== 天灾人祸祈福 · 重大事件铭记 ===== */
.ds-hint{margin:14px 0 18px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-sm);background:linear-gradient(180deg,#fff,#faf7f2)}
.ds-hint-h{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;color:var(--ink-strong);flex-wrap:wrap}
.ds-hint-ico{font-size:17px}
.ds-hint-sub{font-size:12.5px;font-weight:400;color:var(--muted);margin-left:2px}
.ds-hint-list{margin-top:12px;display:grid;grid-template-columns:repeat(2,1fr);gap:10px 16px}
.ds-ev{display:flex;gap:10px;padding:9px 11px;border-radius:10px;background:var(--card);border:1px solid var(--line)}
.ds-ev-d{flex:0 0 auto;font-size:12px;font-weight:700;color:var(--green);width:84px;line-height:1.45;padding-top:1px}
.ds-ev-b{min-width:0}
.ds-ev-t{font-size:13.5px;font-weight:600;color:var(--ink-strong)}
.ds-ev-x{font-size:12px;color:var(--ink);line-height:1.5;margin-top:2px}
@media (max-width:600px){.ds-hint-list{grid-template-columns:1fr}}

/* ===== 编辑杂志风 · 生活手记（撰写攻略） ===== */
.ed-mag{background:#F9F8F6;color:#1C1C1C;font-family:var(--font-sans);
  padding:18px 16px 28px;box-sizing:border-box;max-width:760px;margin:0 auto;
  -webkit-font-smoothing:antialiased}
.ed-mag *{box-sizing:border-box}
.ed-mast{padding:8px 0 0}
.ed-eyebrow{font-family:var(--font-sans);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:rgba(28,28,28,.4);font-weight:600}
.ed-title{font-family:var(--font-serif);font-weight:400;letter-spacing:-.02em;
  font-size:38px;line-height:1.05;margin:10px 0 8px;color:#1C1C1C}
.ed-sub{font-family:var(--font-sans);font-style:italic;color:rgba(28,28,28,.6);
  font-size:14px;line-height:1.7;max-width:34em;margin:0}
.ed-rule{border-top:1px solid rgba(28,28,28,.1);margin:16px 0 0}
.ed-subnav{display:flex;gap:22px;border-bottom:1px solid rgba(28,28,28,.1);margin:0 0 18px}
.ed-sub{background:none;border:none;cursor:pointer;font-family:var(--font-sans);
  font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:rgba(28,28,28,.4);
  padding:12px 0;position:relative;transition:color .3s}
.ed-sub:hover{color:rgba(28,28,28,.9)}
.ed-sub.active{color:#1C1C1C}
.ed-sub.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:#1C1C1C}
.ed-cats{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px}
.ed-cat{background:none;border:1px solid rgba(28,28,28,.15);border-radius:0;cursor:pointer;
  font-family:var(--font-sans);font-size:12px;letter-spacing:.05em;color:rgba(28,28,28,.6);
  padding:6px 12px;transition:all .3s}
.ed-cat:hover{border-color:rgba(28,28,28,.5);color:#1C1C1C}
.ed-cat.active{background:#1C1C1C;color:#F9F8F6;border-color:#1C1C1C}
.ed-list{display:block}
.ed-feature{display:block;text-decoration:none;color:inherit;cursor:pointer;
  border-bottom:1px solid rgba(28,28,28,.1);padding:18px 0;transition:background .4s}
.ed-feature:hover{background:rgba(28,28,28,.02)}
.ed-feature-title{font-family:var(--font-serif);font-weight:400;letter-spacing:-.01em;
  font-size:26px;line-height:1.15;margin:8px 0;color:#1C1C1C;transition:font-style .4s}
.ed-feature:hover .ed-feature-title{font-style:italic}
.ed-feature-ex{font-family:var(--font-sans);font-size:14px;line-height:1.7;
  color:rgba(28,28,28,.6);margin:0 0 10px;max-width:40em}
.ed-card{display:block;text-decoration:none;color:inherit;cursor:pointer;
  border-bottom:1px solid rgba(28,28,28,.1);padding:16px 0;transition:background .4s}
.ed-card:hover{background:rgba(28,28,28,.02)}
.ed-card-title{font-family:var(--font-serif);font-weight:400;letter-spacing:-.01em;
  font-size:19px;line-height:1.2;margin:6px 0;color:#1C1C1C;transition:font-style .4s}
.ed-card:hover .ed-card-title{font-style:italic}
.ed-card-ex{font-family:var(--font-sans);font-size:13px;line-height:1.6;color:rgba(28,28,28,.6);
  margin:0 0 8px;max-width:42em;display:-webkit-box;-webkit-line-clamp:2;
  -webkit-box-orient:vertical;overflow:hidden}
.ed-meta{font-family:var(--font-sans);font-size:11px;letter-spacing:.08em;color:rgba(28,28,28,.4)}
.ed-write{padding-top:4px}
.ed-field{position:relative;margin:22px 0}
.ed-field input,.ed-field textarea{width:100%;background:transparent;border:none;
  border-bottom:1px solid rgba(28,28,28,.2);font-family:var(--font-serif);
  font-size:20px;color:#1C1C1C;padding:8px 0 6px;outline:none;transition:border-color .3s;resize:vertical}
.ed-field textarea{min-height:140px;line-height:1.7;font-size:16px;font-family:var(--font-sans)}
.ed-field input:focus,.ed-field textarea:focus{border-bottom-color:#1C1C1C}
.ed-field label{position:absolute;left:0;top:10px;font-family:var(--font-sans);
  font-size:16px;color:rgba(28,28,28,.4);pointer-events:none;transition:all .3s;letter-spacing:.02em}
.ed-field input:focus+label,.ed-field input:not(:placeholder-shown)+label,
.ed-field textarea:focus+label,.ed-field textarea:not(:placeholder-shown)+label{
  top:-14px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:rgba(28,28,28,.55)}
.ed-cat-row{margin:22px 0}
.ed-cat-row .ed-eyebrow{display:block;margin-bottom:10px}
.ed-actions{display:flex;align-items:center;justify-content:space-between;margin-top:26px;gap:12px}
.ed-count{font-family:var(--font-sans);font-size:11px;letter-spacing:.1em;color:rgba(28,28,28,.4)}
.ed-btn{background:#1C1C1C;color:#F9F8F6;border:none;border-radius:0;cursor:pointer;
  font-family:var(--font-sans);font-size:12px;letter-spacing:.2em;text-transform:uppercase;
  padding:13px 26px;transition:opacity .3s}
.ed-btn:hover{opacity:.88}
.ed-btn:disabled{opacity:.5;cursor:default}
.ed-btn-ghost{background:none;color:#1C1C1C;border:1px solid rgba(28,28,28,.3);padding:10px 20px}
.ed-btn-ghost:hover{border-color:#1C1C1C;opacity:1}
.ed-article{padding-top:4px}
.ed-back{background:none;border:none;cursor:pointer;font-family:var(--font-sans);
  font-size:12px;letter-spacing:.1em;color:rgba(28,28,28,.5);padding:0;margin:0 0 16px;transition:color .3s}
.ed-back:hover{color:#1C1C1C}
.ed-art-title{font-family:var(--font-serif);font-weight:400;letter-spacing:-.02em;
  font-size:30px;line-height:1.12;margin:8px 0 10px;color:#1C1C1C}
.ed-art-meta{font-family:var(--font-sans);font-size:12px;letter-spacing:.06em;
  color:rgba(28,28,28,.4);margin-bottom:18px;border-bottom:1px solid rgba(28,28,28,.1);padding-bottom:14px}
.ed-art-body p{font-family:var(--font-sans);font-size:15px;line-height:1.85;
  color:rgba(28,28,28,.85);margin:0 0 14px;max-width:46em}
.ed-art-foot{margin-top:24px;padding-top:18px;border-top:1px solid rgba(28,28,28,.1)}
.ed-loading,.ed-empty{font-family:var(--font-sans);font-size:13px;line-height:1.7;
  color:rgba(28,28,28,.5);padding:24px 0;text-align:center}
.ed-empty .ed-back{display:inline-block;margin-top:10px}
.ed-login{padding:24px 0;text-align:center}
.ed-write-title{font-family:var(--font-serif);font-weight:400;font-size:24px;margin:10px 0 8px;color:#1C1C1C}
.ed-pager{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:24px;
  padding-top:18px;border-top:1px solid rgba(28,28,28,.1)}
.ed-pg{background:none;border:none;cursor:pointer;font-family:var(--font-sans);
  font-size:12px;letter-spacing:.1em;color:rgba(28,28,28,.7);padding:6px 4px;transition:color .3s}
.ed-pg:hover:not(:disabled){color:#1C1C1C}
.ed-pg:disabled{color:rgba(28,28,28,.2);cursor:default}
.ed-pg-num{font-family:var(--font-sans);font-size:12px;color:rgba(28,28,28,.4);letter-spacing:.1em}
@media (max-width:600px){.ed-title{font-size:32px}.ed-feature-title{font-size:22px}.ed-art-title{font-size:26px}}
@media (prefers-reduced-motion:reduce){
  .ed-sub,.ed-cat,.ed-feature,.ed-card,.ed-field input,.ed-field textarea,.ed-btn,.ed-back,.ed-pg{transition:none}
  .ed-feature-title,.ed-card-title{transition:none}}

/* ============ 日期选择器（生辰 / 忌日 · 两种录入方式并存） ============ */
/* 输入框可直接手输（键盘方式），右侧日历图标点开月历（日历方式）。
   图标做成真按钮 .dp-ico 以便接收点击，避免伪元素无法绑事件的局限。 */
.dp-wrap{position:relative;display:flex;align-items:center}
.dp-wrap input{flex:1;min-width:0;padding-right:40px;cursor:text}
.dp-wrap .dp-ico{flex:0 0 auto;position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:30px;height:30px;display:grid;place-items:center;padding:0;border:0;border-radius:9px;
  background:none;color:var(--muted);cursor:pointer;transition:background .18s,color .18s}
.dp-wrap .dp-ico:hover{background:var(--green-tint);color:var(--green)}
.dp-wrap .dp-ico:active{background:var(--green-soft)}
.dp-wrap .dp-ico svg{width:17px;height:17px;display:block}

.dp-layer{position:fixed;inset:0;z-index:220;display:grid;place-items:center;padding:16px}
.dp-mask{position:absolute;inset:0;background:rgba(42,45,40,.38);backdrop-filter:blur(3px);
  animation:fadeIn .18s ease both}
.dp-panel{position:relative;width:min(340px,92vw);background:var(--card);border:1px solid var(--line);
  border-radius:20px;padding:14px 14px 8px;box-shadow:0 20px 56px rgba(42,45,40,.24);
  animation:fadeUp .2s ease both}
.dp-head{display:flex;align-items:center;gap:6px;margin-bottom:10px}
.dp-arrow{width:32px;height:32px;flex:0 0 auto;display:grid;place-items:center;padding:0;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);
  font-size:17px;line-height:1;cursor:pointer;transition:.2s}
.dp-arrow:hover{border-color:var(--green);color:var(--green);background:var(--green-tint)}
.dp-jump{flex:1;display:flex;align-items:center;justify-content:center;gap:2px;
  font-size:14px;color:var(--ink-strong)}
.dp-jump span{font-size:13px;color:var(--muted);margin-right:4px}
.dp-jump select{width:auto;max-width:96px;padding:5px 6px;border-radius:9px;background:#fff;
  font-size:14px;font-weight:600;color:var(--ink-strong);text-align:center;text-align-last:center}
.dp-jump .dp-m{max-width:64px}
.dp-week{display:grid;grid-template-columns:repeat(7,1fr);margin:0 1px 2px;
  font-size:11.5px;color:var(--muted);text-align:center}
.dp-week span{padding:4px 0;letter-spacing:.5px}
.dp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.dp-day{position:relative;height:38px;padding:0;border:0;border-radius:11px;background:none;
  font:inherit;font-size:13.5px;color:var(--ink);cursor:pointer;transition:background .16s,color .16s}
.dp-day:hover{background:var(--green-tint);color:var(--green)}
.dp-day.is-dim{color:#C6C2B7}
.dp-day.is-today{color:var(--green);font-weight:700}
.dp-day.is-today::after{content:'';position:absolute;left:50%;bottom:5px;width:3px;height:3px;
  margin-left:-1.5px;border-radius:50%;background:var(--green)}
.dp-day.is-sel,.dp-day.is-sel:hover{background:var(--green);color:#fff;font-weight:600}
.dp-day.is-sel::after{background:#fff}
.dp-foot{display:flex;align-items:center;gap:4px;margin-top:8px;padding-top:6px;
  border-top:1px solid var(--line-soft)}
.dp-sp{flex:1}
.dp-quick{border:0;background:none;padding:7px 8px;border-radius:8px;cursor:pointer;
  font:inherit;font-size:13px;color:var(--green)}
.dp-quick:hover{background:var(--green-tint)}
.dp-quick.muted{color:var(--muted)}
@media(max-width:560px){
  .dp-panel{width:min(336px,94vw);padding:12px 12px 6px}
  .dp-day{height:40px;font-size:14px}
}
@media(prefers-reduced-motion:reduce){
  .dp-mask,.dp-panel{animation:none}
  .dp-day,.dp-arrow{transition:none}
}
