/* ===== Pala 官网 · 零依赖静态站 · 设计系统 ===== */
:root {
  /* 墨色（暖灰米，与产品端 css/base.css 文字族同温同源） */
  --ink: #37352f;
  --ink-2: #5d5b56;
  --ink-3: #73726e;
  --ink-4: #a09e98;         /* 只用于装饰或大字号：压在 --bg-2 上仅约 2.5:1，落到 13px 正文一定不过 AA */
  /* 底色 */
  --bg: #ffffff;
  --bg-2: #f7f7f5;
  --bg-3: #f1f1ef;
  --bg-dark: #14151b;       /* 营销深色断点带专用；产品暗色主题是另一套，属各自的暗区，不对齐 */
  --line: #e9e9e7;
  --line-soft: #f0efeb;
  /* 语义色 */
  --done: #12855a;
  --done-ink: #0f7a53;     /* 同理：绿色作小字号文字时用，在 #e4f2ec 上过 AA */
  --spec: #b45309;
  --map: #737680;
  /* 品牌橙：吉祥物同色，只做渐变字 / 光晕 / 深色区装饰，不作交互色 */
  --brand: #dd7010;
  --brand-2: #ffa04a;
  /* 交互强调色：与产品端 css/base.css --accent 同值（跨端一致性修复 2026-09-03） */
  --accent: #2383e2;
  --accent-ink: #0b6bcb;   /* accent 作小字号文字时用：白底约 5.2:1、accent-soft 上约 4.5:1，过 AA */
  --accent-solid: #2383e2; /* 主按钮实心蓝 = 产品端 .btn-primary；白字 3.83:1 未达 AA，与产品端现状一致，若加深须两端同改 */
  --accent-solid-h: #0077d4; /* = 产品端 --accent-hover */
  --accent-soft: #e9f3fc;  /* ≈ 产品端 accent-soft：10% 蓝压白 */
  --accent-line: #c8e0f8;
  --teal: #0f8474;
  --teal-2: #35b39c;
  --teal-soft: #e6f4f1;
  --violet: #6b5b9e;
  --violet-soft: #efeaf7;
  --blue: #2f6b9a;
  --blue-soft: #e8f0f7;
  /* 圆角阶梯 */
  --r-sm: 8px;
  --r-md: 12px;
  --r-lg: 14px;
  --r-xl: 26px;
  --radius: 12px;
  /* 阴影阶梯：柔性分层，替代 1px 硬描边 */
  --sh-1: 0 1px 2px rgba(18, 22, 40, 0.04), 0 2px 6px rgba(18, 22, 40, 0.04);
  --sh-2: 0 2px 6px rgba(18, 22, 40, 0.04), 0 10px 26px rgba(18, 22, 40, 0.07);
  --sh-3: 0 4px 10px rgba(18, 22, 40, 0.05), 0 20px 48px rgba(18, 22, 40, 0.10);
  --sh-4: 0 10px 24px rgba(18, 22, 40, 0.08), 0 36px 80px rgba(18, 22, 40, 0.14);
  --sh-accent: 0 2px 8px rgba(221, 112, 16, 0.10), 0 18px 44px rgba(221, 112, 16, 0.20);
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --maxw: 1160px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 100px; }
body {
  margin: 0;
  font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  color: var(--ink);
  background: var(--bg);
  line-height: 1.72;
  -webkit-font-smoothing: antialiased;
}
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 28px; }
img { max-width: 100%; height: auto; }
h1, h2, h3, h4 { line-height: 1.2; margin: 0; letter-spacing: -0.022em; }
h1 { font-size: clamp(38px, 6.6vw, 74px); font-weight: 800; letter-spacing: -0.035em; line-height: 1.12; }
h2 { font-size: clamp(28px, 4.4vw, 50px); font-weight: 800; letter-spacing: -0.03em; }
h3 { font-size: 21px; font-weight: 650; }
section { position: relative; padding: 108px 0; }

/* 眉标：品牌色胶囊，替代「短横 + 全大写」 */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 20px;
  padding: 5px 15px 5px 11px;
  border-radius: 999px;
  border: 1px solid var(--accent-line);
  background: var(--accent-soft);
  font-size: 13px;
  font-weight: 650;
  letter-spacing: 0.02em;
  color: var(--accent-ink);
  text-transform: none;
}
.eyebrow::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
  flex: none;
}
.sec-sub { color: var(--ink-3); font-size: clamp(15.5px, 1.5vw, 18px); margin: 18px 0 0; }

/* 标题高亮词：渐变字 + 细底纹（品牌橙装饰，不作交互色） */
.sq {
  position: relative;
  background: linear-gradient(100deg, var(--brand), #f0912f);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.sq::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -0.13em;
  height: 0.09em;
  border-radius: 999px;
  background: linear-gradient(100deg, var(--brand), rgba(240, 145, 47, 0.12));
}
.privacy .sq { background: linear-gradient(100deg, #8fdfcd, #d5efe8); -webkit-background-clip: text; background-clip: text; color: transparent; }
.privacy .sq::after { background: linear-gradient(100deg, #35b39c, rgba(53, 179, 156, 0.14)); }

/* ===== 按钮 =====
   扁平实心 + 品牌色描边两档：去渐变、去投影、去位移，hover 只换底色。
   圆角 6px 与产品端 .btn 一致。 */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  border: 1.5px solid transparent;
  border-radius: 6px;
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.5;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  transition: background 0.16s var(--ease), border-color 0.16s var(--ease), color 0.16s var(--ease);
}
/* 主：实心品牌色 */
.btn-accent { background: var(--accent-solid); color: #fff; }
.btn-accent:hover { background: var(--accent-solid-h); }
/* 次：白底 + 描边 + 同色字，与主按钮同一支蓝 */
.btn-light { background: #fff; border-color: var(--accent-solid); color: var(--accent-solid); }
.btn-light:hover { background: var(--accent-soft); border-color: var(--accent-solid-h); color: var(--accent-solid-h); }
/* 深色实心：导航这类不该抢主 CTA 戏的位置 */
.btn-dark { background: var(--ink); color: #fff; }
.btn-dark:hover { background: #4a4844; }
/* 中性描边：弹层关闭这类收尾动作 */
.btn-quiet { background: #fff; border-color: var(--line); color: var(--ink-2); }
.btn-quiet:hover { background: var(--bg-2); border-color: #d9d9d7; }
.btn-sm { padding: 8px 18px; font-size: 14px; }
.btn-lg { padding: 15px 34px; font-size: 16px; }
.btn-block { width: 100%; padding: 13px 0; margin-top: auto; }
.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* ===== 导航（悬浮胶囊） ===== */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  padding: 14px 0;
  transition: padding 0.25s var(--ease);
}
.nav.scrolled { padding: 8px 0; }
.nav-inner {
  max-width: calc(var(--maxw) - 40px);
  width: calc(100% - 40px);
  margin: 0 auto;
  padding: 0 10px 0 16px;
  height: 58px;
  display: flex;
  align-items: center;
  gap: 26px;
  border-radius: 999px;
  border: 1px solid transparent;
  transition: background 0.25s var(--ease), border-color 0.25s var(--ease), box-shadow 0.25s var(--ease);
}
.nav.scrolled .nav-inner {
  background: rgba(255, 255, 255, 0.78);
  backdrop-filter: saturate(180%) blur(18px);
  -webkit-backdrop-filter: saturate(180%) blur(18px);
  border-color: rgba(231, 233, 238, 0.9);
  box-shadow: var(--sh-2);
}
.logo { display: flex; align-items: center; gap: 10px; text-decoration: none; color: var(--ink); }
.logo-mark {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  object-fit: cover;
  display: block;
  box-shadow: var(--sh-1);
}
.logo-name { font-size: 17.5px; font-weight: 750; letter-spacing: -0.02em; }
.nav-links { display: flex; gap: 2px; margin-right: auto; }
.nav-links a {
  position: relative;
  padding: 7px 13px;
  border-radius: 999px;
  color: var(--ink-2);
  text-decoration: none;
  font-size: 14.5px;
  font-weight: 500;
  transition: color 0.15s ease, background 0.15s ease;
}
.nav-links a:hover { color: var(--ink); background: var(--bg-3); }
.nav-login {
  padding: 9px 15px;
  border-radius: 8px;
  color: var(--ink-2);
  text-decoration: none;
  font-size: 14.5px;
  font-weight: 600;
  white-space: nowrap;
  flex: none;
  transition: color 0.15s ease, background 0.15s ease;
}
.nav-login:hover { color: var(--ink); background: var(--bg-3); }
.nav-login:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ===== 首屏 ===== */
.hero {
  position: relative;
  overflow: hidden;
  padding: 64px 0 104px;
  text-align: center;
  background:
    radial-gradient(680px 380px at 10% -8%, #fff2e2, transparent 66%),
    radial-gradient(720px 420px at 90% -2%, #e9f5f2, transparent 66%),
    radial-gradient(620px 360px at 50% 42%, #f0ecfa, transparent 72%),
    var(--bg);
}
/* 顶部细网格，给首屏一点结构感 */
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(rgba(22, 23, 29, 0.032) 1px, transparent 1px) 0 0 / 100% 34px,
    linear-gradient(90deg, rgba(22, 23, 29, 0.032) 1px, transparent 1px) 0 0 / 34px 100%;
  -webkit-mask-image: radial-gradient(760px 420px at 50% 0%, #000, transparent 72%);
  mask-image: radial-gradient(760px 420px at 50% 0%, #000, transparent 72%);
  pointer-events: none;
}
.hero-word {
  position: absolute;
  top: -18px;
  right: max(-24px, calc(50% - 700px));
  font-size: clamp(140px, 19vw, 250px);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.02em;
  color: transparent;
  -webkit-text-stroke: 2px rgba(22, 23, 29, 0.038);
  pointer-events: none;
  user-select: none;
}
.hero-inner { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; }
.hl {
  position: relative;
  background: linear-gradient(100deg, var(--brand) 0%, #f0912f 55%, var(--teal) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  padding: 0 2px;
}
.badge {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin: 0 0 26px;
  padding: 6px 17px;
  border: 1px solid var(--accent-line);
  border-radius: 999px;
  font-size: 14px;
  font-weight: 550;
  color: var(--accent-ink);
  background: rgba(255, 250, 243, 0.9);
  box-shadow: var(--sh-1);
}
.badge .pulse {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--accent);
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(35, 131, 226, 0.35); }
  50% { box-shadow: 0 0 0 7px rgba(35, 131, 226, 0); }
}
.hero .sub {
  max-width: 38em;
  margin: 24px 0 38px;
  font-size: clamp(16px, 2.2vw, 19.5px);
  color: var(--ink-3);
}
.hero-cta { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }

/* 首屏信任微标：替代原「本地优先」徽标。第二条是「你只管教」的必要配平，
   与人审门禁同屏出现，不许单独摘掉（见 docs/宣传文案体系-2026-08-23.md §三）。 */
.hero-trust {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: 8px 10px; margin: 20px 0 0;
}
.hero-trust span {
  font-size: 12.5px; line-height: 1.6; color: var(--ink-3);
  background: var(--bg-2); border: 1px solid var(--line);
  padding: 4px 12px; border-radius: 100px; white-space: nowrap;
}

/* 首屏浮动卡片 */
.hero-stage { position: relative; margin-top: 72px; width: min(1000px, 100%); }
.float-card {
  position: absolute;
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 8px;
  background: rgba(255, 255, 255, 0.94);
  backdrop-filter: blur(8px);
  border: 1px solid var(--line-soft);
  border-radius: 999px;
  padding: 9px 17px;
  font-size: 13px;
  color: var(--ink-2);
  box-shadow: var(--sh-3);
  animation: floaty 5s ease-in-out infinite;
}
.float-card b { color: var(--ink); font-weight: 650; }
.f1 { top: -22px; left: -28px; }
.f2 { top: 36%; right: -40px; animation-delay: 1.2s; }
.f3 { bottom: -18px; left: 8%; animation-delay: 2.4s; }
@keyframes floaty {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

/* 产品界面卡组（翻页切换动效） */
.deck { position: relative; aspect-ratio: var(--ui-ar, 1280 / 800); text-align: left; }
.screen {
  position: absolute;
  inset: 0;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-4);
  overflow: hidden;
  transition: transform 0.65s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.65s ease;
  will-change: transform, opacity;
}
.screen.pos-0 { z-index: 3; transform: none; opacity: 1; }
.screen.pos-1 { z-index: 2; transform: translateY(18px) scale(0.96); opacity: 0.85; }
.screen.pos-2 { z-index: 1; transform: translateY(36px) scale(0.92); opacity: 0.6; }
.screen.exit { z-index: 4; transform: translateY(-70px) scale(1.02) rotate(-1.5deg); opacity: 0; }
.screen.no-anim { transition: none; }

/* ===== 痛点（左标题 / 右卡片，打破居中三连格） ===== */
.pains {
  background:
    radial-gradient(720px 420px at 8% 0%, #fff5e9, transparent 62%),
    radial-gradient(680px 420px at 96% 100%, #ecf5f3, transparent 62%),
    var(--bg-2);
}
.pains-inner { display: grid; gap: 40px; grid-template-columns: 1fr; }
.pains-head h2 { margin: 0; }
.pains-head .sec-sub { max-width: 24em; }
.pain-grid { display: grid; gap: 16px; grid-template-columns: 1fr; }
.pain-grid blockquote {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  padding: 28px 30px;
  /* 卡片内容从「两行短标语」改成「三行场景叙述」后，原先 650 字重 + 近黑色
     会糊成一整块黑；场景要像轻声说出来的观察，不是标语。故降重量、软颜色、
     放宽行距，并去掉为大号粗体设计的负字距。 */
  font-size: clamp(16px, 1.8vw, 18.5px);
  font-weight: 400;
  line-height: 1.9;
  letter-spacing: 0;
  color: var(--ink-2);
  box-shadow: var(--sh-2);
  transition: transform 0.28s var(--ease), box-shadow 0.28s var(--ease);
}
.pain-grid blockquote::after {
  content: "";
  position: absolute;
  right: -48px;
  bottom: -62px;
  width: 168px;
  height: 168px;
  border-radius: 50%;
  background: radial-gradient(circle at 34% 34%, rgba(221, 112, 16, 0.09), transparent 68%);
  pointer-events: none;
}
.pain-grid blockquote:nth-child(2)::after { background: radial-gradient(circle at 34% 34%, rgba(15, 132, 116, 0.09), transparent 68%); }
.pain-grid blockquote:nth-child(3)::after { background: radial-gradient(circle at 34% 34%, rgba(107, 91, 158, 0.09), transparent 68%); }
.pain-grid blockquote:hover { transform: translateY(-4px); box-shadow: var(--sh-3); }

/* ===== 核心能力 ===== */
.caps h2 { margin-bottom: 12px; }
.caps .sec-sub { margin-bottom: 72px; max-width: 40em; }
.cap-row {
  position: relative;
  display: grid;
  gap: 40px;
  align-items: center;
  margin-bottom: 96px;
}
/* 背景幽灵序号 */
.cap-row::before {
  content: attr(data-num);
  position: absolute;
  top: -50px;
  left: -14px;
  z-index: -1;
  font-size: 168px;
  font-weight: 800;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: transparent;
  -webkit-text-stroke: 1.5px #e5e7ee;
  pointer-events: none;
  user-select: none;
}
.cap-row.flip::before { left: auto; right: -14px; }
.cap-row:nth-of-type(2)::before { -webkit-text-stroke-color: #d9ebe6; }
.cap-row:nth-of-type(3)::before { -webkit-text-stroke-color: #e3ddf1; }
.cap-row:nth-of-type(4)::before { -webkit-text-stroke-color: #d9e5f0; }
.cap-row:last-child { margin-bottom: 0; }
.cap-num {
  display: inline-block;
  margin-right: 12px;
  font-size: 13px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--accent-ink);
  background: var(--accent-soft);
  border-radius: 7px;
  padding: 3px 9px;
  vertical-align: 4px;
}
.cap-row:nth-of-type(2) .cap-num { color: var(--teal); background: var(--teal-soft); }
.cap-row:nth-of-type(3) .cap-num { color: var(--violet); background: var(--violet-soft); }
.cap-row:nth-of-type(4) .cap-num { color: var(--blue); background: var(--blue-soft); }
.cap-text p { color: var(--ink-3); font-size: 16.5px; margin: 14px 0 0; max-width: 32em; }
/* 配图外框：内容是「产品界面复刻」层的裁切形态 */
.cap-visual {
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  background: #fff;
  box-shadow: var(--sh-3);
  overflow: hidden;
  aspect-ratio: var(--ui-ar, 700 / 470);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cap-visual:hover {
  transform: translateY(-5px);
  box-shadow: var(--sh-4);
}
/* ===== 中部 CTA（深色断点） ===== */
.cta-band {
  position: relative;
  overflow: hidden;
  color: #fff;
  text-align: center;
  background:
    radial-gradient(760px 400px at 20% 0%, rgba(221, 112, 16, 0.30), transparent 62%),
    radial-gradient(700px 420px at 84% 100%, rgba(53, 179, 156, 0.22), transparent 64%),
    radial-gradient(rgba(255, 255, 255, 0.10) 1.1px, transparent 1.1px) 0 0 / 26px 26px,
    linear-gradient(158deg, #1d1f28, var(--bg-dark) 62%);
}
.cta-ghost {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: clamp(110px, 20vw, 250px);
  font-weight: 800;
  letter-spacing: 0.06em;
  white-space: nowrap;
  color: transparent;
  -webkit-text-stroke: 1.5px rgba(255, 255, 255, 0.09);
  pointer-events: none;
  user-select: none;
}
.cta-band-inner { position: relative; z-index: 1; }
.serif-accent {
  font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif;
  font-style: italic;
  font-weight: 600;
  background: linear-gradient(100deg, #ffc98a, var(--brand-2));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  padding: 0 3px;
}
.cta-band h2 { margin-bottom: 32px; font-size: clamp(30px, 5vw, 54px); }
.cta-band .btn-dark { background: #fff; color: var(--ink); }
.cta-band .btn-dark:hover { background: #eceef2; }

/* ===== 社会证明 ===== */
.proof h2 { margin-bottom: 44px; }
.proof-grid { display: grid; gap: 18px; grid-template-columns: 1fr; }
.proof-card {
  position: relative;
  display: flex;
  flex-direction: column;
  margin: 0;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  padding: 30px 28px 26px;
  background: #fff;
  box-shadow: var(--sh-2);
  transition: transform 0.28s var(--ease), box-shadow 0.28s var(--ease);
}
.proof-card:hover { transform: translateY(-5px); box-shadow: var(--sh-3); }
.proof-card::before {
  content: "";
  display: block;
  width: 30px;
  height: 22px;
  margin-bottom: 16px;
  background: var(--brand);
  opacity: 0.85;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 22'%3E%3Cpath d='M0 22V11.5C0 4.6 4.3.4 11 0v4.6C7.4 5.2 5.6 7.2 5.6 10.4H11V22H0Zm19 0V11.5C19 4.6 23.3.4 30 0v4.6c-3.6.6-5.4 2.6-5.4 5.8H30V22H19Z'/%3E%3C/svg%3E") no-repeat center / contain;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 22'%3E%3Cpath d='M0 22V11.5C0 4.6 4.3.4 11 0v4.6C7.4 5.2 5.6 7.2 5.6 10.4H11V22H0Zm19 0V11.5C19 4.6 23.3.4 30 0v4.6c-3.6.6-5.4 2.6-5.4 5.8H30V22H19Z'/%3E%3C/svg%3E") no-repeat center / contain;
}
.proof-card:nth-child(2)::before { background: var(--teal); }
.proof-card:nth-child(3)::before { background: var(--violet); }
.proof-card p { margin: 0 0 18px; font-size: 15.5px; color: var(--ink-2); }
.proof-card cite {
  margin-top: auto;
  padding-top: 16px;
  border-top: 1px solid var(--line-soft);
  font-style: normal;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink-3);
}
.proof-stat {
  margin: 40px 0 0;
  padding: 22px 28px;
  border-radius: var(--r-lg);
  background: linear-gradient(120deg, var(--accent-soft), #fffaf3 60%, var(--teal-soft));
  border: 1px solid var(--line-soft);
  font-size: clamp(18px, 2.6vw, 25px);
  font-weight: 700;
  letter-spacing: -0.02em;
  text-align: center;
}
.proof-stat b {
  font-size: 1.35em;
  background: linear-gradient(100deg, var(--brand), #f0912f);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.proof-src { margin: 12px 0 0; text-align: center; font-size: 12.5px; font-weight: 400; color: var(--ink-3); letter-spacing: 0; }

/* ===== 关于我们 ===== */
.about { background: var(--bg-2); }
.about-inner {
  max-width: 860px;
  margin: 0 auto;
  padding: 46px 44px;
  border-radius: var(--r-xl);
  background: #fff;
  border: 1px solid var(--line-soft);
  box-shadow: var(--sh-2);
  text-align: center;
}
.about-inner .eyebrow { margin-bottom: 18px; }
.about h2 { margin-bottom: 18px; }
.about p:last-child { color: var(--ink-3); font-size: 16.5px; margin: 0; }

.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; flex: none; }
.dot.done { background: var(--done); }
.dot.spec { background: var(--spec); }
.chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--line);
  background: #fff;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13.5px;
  color: var(--ink-2);
  transition: color 0.18s ease, border-color 0.18s ease, transform 0.15s var(--ease), box-shadow 0.15s var(--ease);
}
.chip:hover {
  transform: translateY(-2px);
  color: var(--ink);
  border-color: var(--accent-line);
  box-shadow: var(--sh-2);
}
/* 功能状态分级（官网审计 107）：默认=已上线；虚线=建设中；灰扁=已规划 */
.chip-spec { border-style: dashed; color: var(--ink-3); background: var(--bg); }
.chip-map { border-color: transparent; background: var(--bg-2); color: var(--ink-3); box-shadow: none; }
.chip-map:hover { border-color: transparent; box-shadow: none; }

/* ===== 为什么不直接用 ChatGPT（对比表，2026-09-08 顶替原功能全景段） ===== */
.compare { background: var(--bg-2); }
.compare h2 { margin-bottom: 28px; }
.compare-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.compare-table {
  width: 100%; min-width: 640px;
  border-collapse: separate; border-spacing: 0;
  background: var(--bg); border: 1px solid var(--line); border-radius: var(--r-lg);
  box-shadow: var(--sh-1); overflow: hidden; font-size: 15px;
}
.compare-table th, .compare-table td {
  padding: 16px 18px; text-align: left; vertical-align: top;
  border-bottom: 1px solid var(--line-soft); color: var(--ink-2); line-height: 1.55;
}
.compare-table thead th { font-size: 13.5px; font-weight: 600; color: var(--ink-3); background: var(--bg-3); }
.compare-table tbody th { width: 22%; font-weight: 650; color: var(--ink); }
.compare-table tbody tr:last-child th, .compare-table tbody tr:last-child td { border-bottom: 0; }
.compare-table .is-pala { background: var(--accent-soft); color: var(--ink); }
.compare-table thead th.is-pala { color: var(--accent-ink); }
.compare-note { margin: 22px 0 0; font-size: 17px; font-weight: 650; color: var(--ink); }

/* ===== 滚动渐显 ===== */
.reveal { opacity: 0; transform: translateY(16px); transition: opacity 0.55s ease, transform 0.55s ease; }
.reveal.in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .float-card, .badge .pulse { animation: none; }
  html { scroll-behavior: auto; }
}

/* ===== 数据安全（深色区 + 不对称 bento） ===== */
.privacy {
  overflow: hidden;
  color: rgba(255, 255, 255, 0.92);
  background:
    radial-gradient(700px 420px at 12% 6%, rgba(15, 132, 116, 0.30), transparent 62%),
    radial-gradient(620px 400px at 90% 96%, rgba(221, 112, 16, 0.20), transparent 64%),
    linear-gradient(168deg, #1b1d26, var(--bg-dark) 66%);
}
.privacy-inner { text-align: center; }
.privacy .eyebrow {
  color: #ffd0a0;
  border-color: rgba(255, 208, 160, 0.28);
  background: rgba(255, 208, 160, 0.10);
}
.privacy h2 { margin-bottom: 14px; color: #fff; }
.privacy-sub { color: rgba(255, 255, 255, 0.62); max-width: 36em; margin: 0 auto 54px; font-size: 17px; }
.privacy-grid {
  display: grid;
  gap: 16px;
  grid-template-columns: 1fr;
  text-align: left;
  counter-reset: priv;
}
.privacy-item {
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: var(--r-lg);
  padding: 26px 28px;
  background: rgba(255, 255, 255, 0.045);
  backdrop-filter: blur(6px);
  transition: transform 0.28s var(--ease), background 0.28s var(--ease), border-color 0.28s var(--ease);
}
.privacy-item:hover {
  transform: translateY(-4px);
  background: rgba(255, 255, 255, 0.075);
  border-color: rgba(53, 179, 156, 0.38);
}
.privacy-item h4 {
  font-size: 16.5px;
  margin: 0 0 10px;
  color: #fff;
  display: flex;
  align-items: center;
  gap: 11px;
}
.privacy-item h4::before {
  counter-increment: priv;
  content: counter(priv, decimal-leading-zero);
  font-size: 12px;
  font-weight: 750;
  color: #7fd8c6;
  background: rgba(53, 179, 156, 0.16);
  border: 1px solid rgba(53, 179, 156, 0.24);
  border-radius: 8px;
  padding: 2px 9px;
  font-variant-numeric: tabular-nums;
}
.privacy-item p { margin: 0; font-size: 14.5px; color: rgba(255, 255, 255, 0.6); }

/* ===== FAQ（卡片式折叠） ===== */
.faq-inner { max-width: 820px; }
.faq h2 { margin-bottom: 40px; }
.faq details {
  border: 1px solid var(--line-soft);
  border-radius: var(--r-md);
  background: #fff;
  box-shadow: var(--sh-1);
  padding: 4px 24px;
  margin-bottom: 12px;
  transition: box-shadow 0.22s var(--ease), border-color 0.22s var(--ease);
}
.faq details:hover { box-shadow: var(--sh-2); }
.faq details[open] { border-color: var(--accent-line); box-shadow: var(--sh-2); }
.faq summary {
  cursor: pointer;
  padding: 18px 0;
  font-size: 16.5px;
  font-weight: 650;
  letter-spacing: -0.015em;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
  content: "";
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--bg-3);
  position: relative;
  transition: transform 0.22s var(--ease), background 0.22s var(--ease);
  background-image:
    linear-gradient(var(--ink-2), var(--ink-2)),
    linear-gradient(var(--ink-2), var(--ink-2));
  background-size: 11px 1.6px, 1.6px 11px;
  background-position: center, center;
  background-repeat: no-repeat;
}
.faq details[open] summary::after { transform: rotate(135deg); background-color: var(--accent-soft); }
.faq details p { color: var(--ink-3); margin: 0 0 20px; max-width: 46em; font-size: 15px; }

/* ===== 收尾 CTA ===== */
.final {
  overflow: hidden;
  text-align: center;
  background:
    radial-gradient(640px 320px at 16% 0%, var(--accent-soft), transparent 66%),
    radial-gradient(640px 320px at 86% 100%, var(--teal-soft), transparent 66%),
    var(--bg-2);
}
.final h2 { font-size: clamp(28px, 4.8vw, 52px); }
.final-inner p { color: var(--ink-3); margin: 16px 0 32px; font-size: 17px; }

/* ===== 页脚 ===== */
.footer {
  padding: 40px 0;
  color: rgba(255, 255, 255, 0.55);
  background: var(--bg-dark);
}
.footer-inner { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.footer-brand { display: flex; align-items: center; gap: 10px; color: #fff; }
.footer-note { margin: 0 0 0 auto; font-size: 13.5px; color: rgba(255, 255, 255, 0.5); }
.footer-note a { color: rgba(255, 255, 255, 0.78); text-decoration: none; border-bottom: 1px solid rgba(255, 255, 255, 0.2); padding: 8px 3px; }
.footer-note a:hover { color: #fff; border-bottom-color: rgba(255, 255, 255, 0.6); }

/* ===== 预约弹层 ===== */
dialog#reserve-dialog {
  border: 1px solid var(--line-soft);
  border-radius: var(--r-xl);
  padding: 36px 40px;
  /* 移动审计：320px 视口（老 SE）下原 340 固定上限溢出约 20px，加视口兜底 */
  max-width: min(340px, calc(100vw - 32px));
  text-align: center;
  box-shadow: 0 24px 80px rgba(0, 0, 0, 0.18);
}
dialog#reserve-dialog::backdrop { background: rgba(15, 15, 15, 0.4); }
dialog#reserve-dialog h3 { margin-bottom: 10px; }
dialog#reserve-dialog p { color: var(--ink-3); font-size: 15px; margin: 0 0 8px; }
dialog#reserve-dialog .qr { width: 200px; height: 200px; margin: 18px auto 26px; display: block; border-radius: 12px; background: #f4f5f8; }
dialog#reserve-dialog .qr-fallback { font-size: 14px; line-height: 1.8; color: var(--ink-3); margin: 18px 0 26px; }
dialog#reserve-dialog .qr-fallback a { color: var(--accent-ink); }
dialog#reserve-dialog .btn { padding: 10px 28px; }

/* ===== 定价 ===== */
.pricing {
  overflow: hidden;
  background:
    radial-gradient(760px 420px at 88% 4%, #fff4e8, transparent 62%),
    radial-gradient(700px 420px at 6% 92%, #ecf5f3, transparent 62%),
    var(--bg-2);
}
.pricing h2 { margin-bottom: 16px; }
.pricing-sub { color: var(--ink-3); max-width: 48em; margin: 0 0 34px; font-size: 16px; }
.pricing-sub b { color: var(--ink-2); font-weight: 650; }

.price-grid { display: grid; gap: 18px; grid-template-columns: 1fr; align-items: stretch; }
.price-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-xl);
  background: #fff;
  padding: 32px 28px 30px;
  box-shadow: var(--sh-2);
  transition: transform 0.28s var(--ease), box-shadow 0.28s var(--ease);
}
.price-card:hover { transform: translateY(-5px); box-shadow: var(--sh-3); }

/* 主推档：深色 + 品牌光晕 */
.price-card.featured {
  border-color: transparent;
  color: rgba(255, 255, 255, 0.9);
  background:
    radial-gradient(520px 300px at 84% -8%, rgba(221, 112, 16, 0.34), transparent 64%),
    radial-gradient(460px 300px at 6% 104%, rgba(53, 179, 156, 0.20), transparent 64%),
    linear-gradient(166deg, #22242e, var(--bg-dark) 64%);
  box-shadow: var(--sh-accent);
}
.price-card.featured:hover { box-shadow: 0 4px 12px rgba(221, 112, 16, 0.14), 0 28px 64px rgba(221, 112, 16, 0.26); }
.price-tag {
  position: absolute;
  top: -13px;
  left: 28px;
  background: linear-gradient(180deg, var(--brand-2), var(--brand));
  color: #fff;
  border-radius: 999px;
  padding: 4px 15px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.01em;
  box-shadow: 0 6px 18px rgba(221, 112, 16, 0.4);
}
.price-head h3 { font-size: 20px; letter-spacing: -0.025em; }
.price-card.featured .price-head h3 { color: #fff; }
.price-who { margin: 9px 0 0; font-size: 14px; color: var(--ink-3); min-height: 3em; }
.price-card.featured .price-who { color: rgba(255, 255, 255, 0.58); }

.price-plan { margin-top: 22px; }
.price-plan[hidden] { display: none; }
.price-num { margin: 0; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.price-num b {
  font-size: 46px;
  font-weight: 800;
  letter-spacing: -0.045em;
  font-variant-numeric: tabular-nums;
  line-height: 1.05;
}
.price-card.featured .price-num b { color: #fff; }
.price-num span { font-size: 14.5px; color: var(--ink-3); }
.price-card.featured .price-num span { color: rgba(255, 255, 255, 0.55); }
.price-alt { margin: 8px 0 0; font-size: 13.5px; color: var(--ink-3); min-height: 2.7em; }
.price-alt b { color: var(--accent-ink); font-weight: 700; }
.price-alt.muted { color: var(--map); font-size: 13px; min-height: 0; }
.price-card.featured .price-alt { color: rgba(255, 255, 255, 0.55); }
.price-card.featured .price-alt b { color: var(--brand-2); }

.price-credit {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 4px 8px;
  margin: 18px 0 0;
  padding: 14px 16px;
  border-radius: var(--r-md);
  background: var(--bg-2);
  border: 1px solid var(--line-soft);
  font-size: 14px;
  color: var(--ink-2);
}
.price-credit b {
  font-size: 24px;
  font-weight: 750;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.03em;
  color: var(--accent);
}
.price-credit em { font-style: normal; font-weight: 400; font-size: 12.5px; color: var(--ink-3); flex-basis: 100%; }
.price-card.featured .price-credit {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.1);
  color: rgba(255, 255, 255, 0.82);
}
.price-card.featured .price-credit b { color: var(--brand-2); }
.price-card.featured .price-credit em { color: rgba(255, 255, 255, 0.45); }

.price-list { list-style: none; margin: 22px 0 28px; padding: 0; display: grid; gap: 11px; }
.price-list li { position: relative; padding-left: 27px; font-size: 14.5px; color: var(--ink-2); }
.price-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 4px;
  width: 17px;
  height: 17px;
  border-radius: 50%;
  background: var(--teal-soft);
}
.price-list li::after {
  content: "";
  position: absolute;
  left: 5px;
  top: 9px;
  width: 7px;
  height: 4px;
  border-left: 1.8px solid var(--teal);
  border-bottom: 1.8px solid var(--teal);
  transform: rotate(-45deg);
}
.price-card.featured .price-list li { color: rgba(255, 255, 255, 0.78); }
.price-card.featured .price-list li::before { background: rgba(53, 179, 156, 0.18); }
.price-card.featured .price-list li::after { border-color: #7fd8c6; }
.price-list li.cat {
  padding-left: 0;
  margin-top: 7px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--ink-3);
}
.price-list li.cat:first-child { margin-top: 0; }
.price-list li.cat::before,
.price-list li.cat::after { display: none; }
.price-card.featured .price-list li.cat { color: #7fd8c6; }
.price-list .soon {
  font-style: normal;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--spec);
  background: var(--accent-soft);
  border-radius: 999px;
  padding: 1px 8px;
  margin-left: 4px;
  white-space: nowrap;
}
.price-card.featured .btn-light { background: #fff; border-color: #fff; color: var(--ink); }
.price-card.featured .btn-light:hover { background: #eceef2; border-color: #eceef2; }

/* 积分说明 */
.credit-panel {
  margin: 28px 0 0;
  padding: 30px 32px;
  border-radius: var(--r-xl);
  background: #fff;
  border: 1px solid var(--line-soft);
  box-shadow: var(--sh-1);
}
.credit-title { font-size: 18px; margin-bottom: 20px; letter-spacing: -0.02em; }
.credit-grid { display: grid; gap: 14px; grid-template-columns: 1fr; }
.credit-item {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 16px 18px;
  border-radius: var(--r-md);
  background: var(--bg-2);
  border: 1px solid var(--line-soft);
}
.credit-item b {
  flex: none;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--accent-ink);
  background: var(--accent-soft);
  border-radius: 999px;
  padding: 3px 12px;
}
.credit-item span { font-size: 14px; color: var(--ink-2); }
.credit-item.free b { color: var(--done-ink); background: #e4f2ec; }
.credit-boost { margin: 20px 0 0; font-size: 14px; color: var(--ink-3); }
.credit-boost b { color: var(--ink-2); font-weight: 650; }
.price-note { margin: 26px 0 0; font-size: 13.5px; color: var(--ink-3); max-width: 56em; }

/* ===== 响应式 ===== */
@media (min-width: 720px) {
  .cap-row { grid-template-columns: 1fr 1fr; }
  .cap-row.flip .cap-text { order: 2; }
  .privacy-grid { grid-template-columns: 1fr 1fr; }
  /* 原有 `.privacy-item:last-child { grid-column: 1/-1 }` 是给 4 张卡补孤儿行的，
     数据段改成 6 张后 2 列 / 3 列都能整除，该规则会把末张顶成独占行，故删除。 */
  .proof-grid { grid-template-columns: repeat(2, 1fr); }
  .credit-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 900px) {
  .pains-inner { grid-template-columns: 0.92fr 1.08fr; gap: 56px; align-items: start; }
  .pains-head { position: sticky; top: 108px; }
  .price-grid { grid-template-columns: repeat(3, 1fr); gap: 22px; align-items: stretch; }
  .price-card.featured { transform: scale(1.045); z-index: 2; }
  .price-card.featured:hover { transform: scale(1.045) translateY(-5px); }
  .privacy-grid { grid-template-columns: repeat(3, 1fr); }
  /* 同上：末张跨 3 列是 4 卡时代的补丁，6 卡整除后删除。 */
}
@media (max-width: 899px) {
  .price-card.featured { margin-top: 8px; }
  /* 视觉QA-005：720–899 档导航链接曾被挤成逐字竖排（iPad 竖屏 768 必现）——折叠断点从 719 提到 899。
     官网审计 102：整排 display:none 等于移动端没有任何导航入口（本站无汉堡菜单）。
     改为两行布局：首行 logo + CTA，次行链接横滚条，可滑动、触控热区 ≥42px。 */
  .nav { padding: 8px 0; }
  .nav-inner { flex-wrap: wrap; gap: 2px 12px; height: auto; min-height: 54px; border-radius: 20px; padding: 6px 10px 6px 16px; }
  .nav [data-reserve] { margin-left: auto; }
  .nav-links { order: 3; width: 100%; margin-right: 0; overflow-x: auto; scrollbar-width: none; }
  .nav-links::-webkit-scrollbar { display: none; }
  .nav-links a { white-space: nowrap; font-size: 13.5px; padding: 9px 11px; }
  .btn-sm { padding: 12px 18px; }   /* 触控目标补到 45px，桌面端仍是 39px */
  .nav-login { margin-left: auto; padding: 10px; font-size: 14px; }   /* 触控目标 44px */
}
@media (max-width: 719px) {
  /* 导航两档规则已全部并入上方 899 块（原此处的 display:none 副本已删，避免盖住新布局） */
  .float-card { display: none; }
  .hero-word { display: none; }
  .cap-row::before { font-size: 76px; top: -26px; left: -4px; }
  .cap-row.flip::before { right: -4px; }
  .cap-row { margin-bottom: 72px; }
  .cta-ghost { font-size: 88px; }
  .hero { background: radial-gradient(460px 280px at 50% -6%, #fff2e2, transparent 70%), var(--bg); }
  .hero::before { display: none; }
  .about-inner { padding: 32px 22px; }
  .credit-panel { padding: 24px 20px; }
  .price-card { padding: 28px 22px 26px; }
  .footer-note { margin-left: 0; }
  section { padding: 68px 0; }
  .wrap { padding: 0 20px; }
  .cycle-tabs { display: flex; width: 100%; }
  .cycle-tab { flex: 1; justify-content: center; padding: 10px 8px; font-size: 13.5px; }
  .cycle-save { display: none; }
}

/* ===== 付费周期页签 ===== */
.cycle-bar { margin: 0 0 30px; }
.cycle-tabs {
  display: inline-flex;
  gap: 4px;
  padding: 5px;
  border: 1px solid var(--line-soft);
  border-radius: 999px;
  background: #fff;
  box-shadow: var(--sh-1);
}
.cycle-tab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 0;
  background: transparent;
  border-radius: 999px;
  padding: 10px 22px;
  font: inherit;
  font-size: 14.5px;
  font-weight: 650;
  color: var(--ink-3);
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.2s var(--ease), color 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.cycle-tab:hover { color: var(--ink); background: var(--bg-2); }
.cycle-tab.is-on {
  background: linear-gradient(180deg, #2c2e39, var(--ink));
  color: #fff;
  box-shadow: var(--sh-2);
}
.cycle-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.cycle-save {
  font-style: normal;
  font-size: 12px;
  font-weight: 700;
  color: var(--done-ink);
  background: #e4f2ec;
  border-radius: 999px;
  padding: 1px 9px;
}
.cycle-tab.is-on .cycle-save { color: #ffd7ae; background: rgba(255, 160, 74, 0.2); }
.cycle-note { margin: 16px 0 0; font-size: 13.5px; color: var(--ink-3); max-width: 54em; }
.cycle-note b { color: var(--ink-2); font-weight: 650; }


/* ===== 产品界面复刻 =====
   首屏卡组里的三块「界面示意」不是自由发挥的插画，而是按 1:1 复刻真实产品：
   变量取自 css/base.css 的 :root，组件规则逐条对齐 css/app.css（.sidebar /
   .topbar / .view-page / .teach-card / .lib-table / .cal-grid ...；窗口标签栏
   产品端已停用（js/chrome-tabbar.js TABBAR_ENABLED=false），此处同步摘除）。
   整块以 1280×680 的真实像素排版，再由 main.js 按卡组宽度整体缩放，
   等价于一张等比缩小的产品截图。改产品 UI 时这一段要同步改。 */
.ui-app {
  /* —— css/base.css :root 浅色主题，逐值照抄 —— */
  --a-bg: #ffffff;
  --a-sidebar: #f7f7f5;
  --a-hover: #efefed;
  --a-active: #e9e9e7;
  --a-secondary: #f7f7f5;
  --a-tertiary: #f1f1ef;
  --a-text: #37352f;
  --a-text-2: #73726e;
  --a-text-3: #9b9a97;
  --a-border: #e9e9e7;
  --a-border-strong: #d9d9d7;
  --a-accent: #2383e2;
  --a-danger: #eb5757;
  --a-avatar: #d9730d;
  --a-tag-gray: #e3e2e0;   --a-tag-gray-t: #787774;
  --a-tag-blue: #d3e5ef;   --a-tag-blue-t: #337ea9;
  --a-tag-green: #dbeddb;  --a-tag-green-t: #448361;
  --a-tag-orange: #fadec9; --a-tag-orange-t: #d9730d;
  --a-tag-red: #ffe2dd;    --a-tag-red-t: #d44c47;
  --a-tag-yellow: #fdecc8; --a-tag-yellow-t: #cb912f;

  width: 1280px;
  height: 800px;
  flex: none;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--a-bg);
  color: var(--a-text);
  font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica,
    "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol",
    "Inter", "Source Han Sans SC", "Noto Sans CJK SC", "PingFang SC", "Microsoft YaHei";
  font-size: 14px;
  line-height: normal;
  letter-spacing: normal;
  text-align: left;
  transform: scale(var(--ui-scale, 1));
  transform-origin: 0 0;
}
.ui-app *, .ui-app *::before, .ui-app *::after { box-sizing: border-box; }
.ui-ic { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }

/* —— 外壳（.app-shell / .sidebar / .main-area） —— */
.ui-shell { display: flex; flex: 1; min-height: 0; overflow: hidden; }
.ui-sidebar {
  width: 248px; min-width: 248px;
  background: var(--a-sidebar);
  display: flex; flex-direction: column;
}
.ui-sidebar-top { padding: 8px 8px 4px; }
.ui-ws { display: flex; align-items: center; gap: 8px; height: 34px; padding: 6px 8px; border-radius: 6px; }
.ui-ws-avatar {
  width: 22px; height: 22px; border-radius: 4px; flex-shrink: 0;
  background: var(--a-avatar); color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 600;
}
.ui-ws-name { font-size: 14px; font-weight: 500; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-ws-caret { color: var(--a-text-3); display: inline-flex; }
.ui-quick-row { display: flex; align-items: center; gap: 2px; padding: 2px 0 0; }
.ui-quick-btn {
  position: relative; height: 28px; min-width: 28px; padding: 0 6px;
  border-radius: 6px; gap: 5px;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--a-text-2);
}
.ui-quick-btn.active { background: var(--a-active); color: var(--a-text); padding: 0 9px 0 7px; }
.ui-quick-label { font-size: 14px; font-weight: 500; white-space: nowrap; }
.ui-quick-search { margin-left: auto; }
.ui-quick-badge {
  position: absolute; top: -1px; right: -1px;
  min-width: 15px; height: 15px; padding: 0 4px; border-radius: 8px;
  background: var(--a-danger); color: #fff;
  font-size: 10px; line-height: 15px; text-align: center; font-weight: 600;
}
.ui-sidebar-scroll { flex: 1; overflow: hidden; padding-bottom: 8px; }
.ui-side-section { padding: 14px 8px 2px; }
.ui-side-section-title {
  display: flex; align-items: center; padding: 2px 8px;
  font-size: 12px; font-weight: 600; color: var(--a-text-3);
}
.ui-side-hint { padding: 8px 10px 2px; font-size: 12px; font-weight: 500; color: var(--a-text-2); }
.ui-tree-row {
  display: flex; align-items: center; gap: 4px;
  padding: 2px 6px 2px 4px; min-height: 28px; border-radius: 6px;
  font-size: 14px; color: var(--a-text-2);
}
.ui-tree-row.active { background: var(--a-active); color: var(--a-text); font-weight: 500; }
.ui-tree-toggle {
  width: 20px; height: 20px; flex-shrink: 0; visibility: hidden;
  display: inline-flex; align-items: center; justify-content: center;
}
.ui-tree-icon { width: 20px; text-align: center; flex-shrink: 0; font-size: 15px; }
.ui-tree-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-sidebar-bottom { padding: 4px 8px 8px; }
.ui-side-item {
  display: flex; align-items: center; gap: 8px; width: 100%;
  padding: 4px 8px; min-height: 28px; border-radius: 6px;
  font-size: 14px; color: var(--a-text-2);
}
.ui-side-item.active { background: var(--a-active); color: var(--a-text); font-weight: 500; }
.ui-newpage {
  display: flex; align-items: center; gap: 8px; height: 32px;
  margin-top: 6px; padding: 0 10px;
  border: 1px solid var(--a-border-strong); border-radius: 8px;
  background: var(--a-bg); color: var(--a-text); font-size: 14px; font-weight: 500;
}
.ui-np-label { flex: 1; }
.ui-np-kbd { font-size: 11px; color: var(--a-text-3); }

/* —— 顶栏（.topbar / .breadcrumb / .crumb） —— */
.ui-main { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.ui-topbar { height: 45px; min-height: 45px; display: flex; align-items: center; gap: 4px; padding: 0 12px; font-size: 14px; }
.ui-breadcrumb { display: flex; align-items: center; gap: 2px; flex: 1; min-width: 0; overflow: hidden; }
.ui-crumb {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 7px; border-radius: 5px; max-width: 200px;
  color: var(--a-text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ui-crumb.current { color: var(--a-text); font-weight: 500; }
.ui-crumb-sep { color: var(--a-text-3); font-size: 12px; flex-shrink: 0; }
.ui-content { flex: 1; min-height: 0; overflow: hidden; position: relative; }

/* —— 通用按钮（css/base.css .btn） —— */
.ui-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 0 12px; height: 32px; border: 1px solid transparent; border-radius: 6px;
  font-family: inherit; font-size: 14px; font-weight: 500; white-space: nowrap;
}
.ui-btn-primary { background: var(--a-accent); color: #fff; }
.ui-btn-default { background: var(--a-bg); border-color: var(--a-border-strong); color: var(--a-text); }
.ui-hint { font-size: 12px; color: var(--a-text-3); }

/* —— 页面编辑器（.page-body / .page-icon / .page-title-input / .teach-card） —— */
.ui-page-body { max-width: 760px; margin: 0 auto; padding: 0 56px; }
.ui-page-icon-wrap { position: relative; height: 82px; }
.ui-page-icon { position: absolute; bottom: -8px; left: -4px; font-size: 78px; line-height: 1; border-radius: 8px; padding: 2px 6px; }
.ui-page-head-space { height: 12px; }
.ui-page-title { font-size: 40px; font-weight: 700; line-height: 1.2; letter-spacing: -0.5px; padding: 4px 0 8px; }
.ui-classroom-entry { display: flex; align-items: center; gap: 10px; margin: 4px 0 12px; }
.ui-blocks { display: flex; flex-direction: column; }
.ui-teach-card { border: 1px solid var(--a-border); border-radius: 8px; padding: 10px 14px; margin: 4px 0; background: var(--a-secondary); }
.ui-teach-head { display: flex; align-items: center; gap: 8px; }
.ui-teach-icon { font-size: 16px; }
.ui-teach-title { font-weight: 600; font-size: 14px; }
.ui-teach-tag { font-size: 11px; color: var(--a-text-2); background: var(--a-tertiary); padding: 1px 6px; border-radius: 4px; }
.ui-teach-gate {
  margin-left: auto; padding: 1px 7px; border-radius: 4px;
  font-size: 11px; font-weight: 600; line-height: 1.5; border: 1px solid transparent;
}
.ui-teach-gate.gate-pass { background: var(--a-tag-green); color: var(--a-tag-green-t); }
.ui-teach-gate.gate-fail { background: var(--a-tag-red); color: var(--a-tag-red-t); }
.ui-teach-gate.gate-unverifiable {
  color: var(--a-tag-gray-t); border-color: var(--a-border-strong);
  background: repeating-linear-gradient(135deg, var(--a-tag-gray), var(--a-tag-gray) 4px, transparent 4px, transparent 8px);
}
.ui-teach-body { margin-top: 8px; display: flex; flex-direction: column; gap: 8px; }
.ui-teach-item { border-top: 1px dashed var(--a-border); padding-top: 8px; }
.ui-teach-item-title { font-size: 13px; font-weight: 600; color: var(--a-text-2); display: flex; gap: 6px; align-items: center; margin-bottom: 4px; }
.ui-teach-field { display: flex; gap: 8px; font-size: 14px; line-height: 1.6; }
.ui-teach-field-label { flex-shrink: 0; min-width: 56px; padding-top: 2px; color: var(--a-text-3); font-size: 12px; }
.ui-teach-field-value { flex: 1; min-width: 0; word-break: break-word; }
/* 视觉图解真图（css/app.css 的 .diagram-* 一族，逐值照抄） */
.ui-teach-diagram { flex: 1; min-width: 0; }
.ui-app .diagram-svg { display: block; width: 100%; max-width: 640px; height: auto; }
.ui-app .diagram-axis { stroke: var(--a-text-2); stroke-width: 1.2; }
.ui-app .diagram-tick-label { fill: var(--a-text-3); font-size: 11px; }
.ui-app .diagram-arrowhead { fill: var(--a-text-2); }
.ui-app .diagram-grid { stroke: var(--a-border); stroke-width: 1; }
.ui-app .diagram-frame { fill: none; stroke: var(--a-border-strong); stroke-width: 1; }
.ui-app .diagram-curve { fill: none; stroke-width: 2; }
.ui-app .diagram-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 6px; }
.ui-app .diagram-legend-item { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--a-text-2); }
.ui-app .diagram-legend-swatch { width: 14px; height: 3px; border-radius: 2px; display: inline-block; }

/* —— 视图页（.view-page / .view-head / .settings-row / .lib-table） —— */
.ui-view-page { max-width: 900px; margin: 0 auto; padding: 48px 48px 120px; }
.ui-view-page-wide { max-width: 1080px; }
.ui-view-head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-bottom: 26px; }
.ui-view-title { font-size: 26px; font-weight: 700; letter-spacing: -0.3px; }
.ui-view-title.sm { font-size: 15px; margin: 18px 0 4px; }
.ui-view-desc { width: 100%; font-size: 14px; color: var(--a-text-3); margin-top: -8px; }
.ui-mla { margin-left: auto; }
.ui-view-head .ui-btn + .ui-btn { margin-left: 8px; }
.ui-settings-row { display: flex; align-items: center; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--a-border); }
.ui-sr-label { flex: 1; }
.ui-sr-value { font-size: 14px; color: var(--a-text-2); }
.ui-lib-table { min-width: 0; }
.ui-lib-tr { display: flex; align-items: center; border-bottom: 1px solid var(--a-border); font-size: 14px; }
.ui-lib-th { font-size: 12px; color: var(--a-text-3); border-bottom-color: var(--a-border-strong); }
.ui-lib-td { display: flex; align-items: center; gap: 6px; padding: 9px 10px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-lib-td.c-name { flex: 2.4; }
.ui-lib-td.c-user { flex: 1.1; color: var(--a-text-2); }
.ui-lib-td.c-src { flex: 1.3; color: var(--a-text-2); }
.ui-lib-td.c-date { flex: 1; color: var(--a-text-2); }
.ui-lib-row-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-mastery-insufficient { opacity: 0.55; }

/* —— 日历（.cal-*） —— */
.ui-cal-head { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }
.ui-cal-nav { display: flex; gap: 6px; margin-left: auto; }
.ui-cal-grid {
  display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 1px;
  background: var(--a-border); border: 1px solid var(--a-border);
  border-radius: 8px; overflow: hidden;
}
.ui-cal-weekday { background: var(--a-secondary); padding: 6px 8px; font-size: 12px; color: var(--a-text-3); text-align: center; }
.ui-cal-cell { background: var(--a-bg); min-height: 96px; padding: 5px 6px; display: flex; flex-direction: column; gap: 3px; }
.ui-cal-cell.ui-cal-blank { background: var(--a-secondary); }
.ui-cal-day { font-size: 12px; color: var(--a-text-2); font-weight: 500; }
.ui-cal-today .ui-cal-day {
  width: 20px; height: 20px; border-radius: 50%;
  background: var(--a-danger); color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
}
.ui-cal-entry { font-size: 11px; line-height: 1.4; padding: 2px 5px; border-radius: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-cal-course { background: var(--a-tag-blue); color: var(--a-tag-blue-t); }
.ui-cal-exam { background: var(--a-tag-orange); color: var(--a-tag-orange-t); }
.ui-cal-ddl { background: var(--a-tag-red); color: var(--a-tag-red-t); }
.ui-cal-busy { background: var(--a-tag-yellow); color: var(--a-tag-yellow-t); }

/* —— 裁切形态：核心能力四张配图只取主区（顶栏 + 内容），仍是同一套产品组件 —— */
.ui-app.ui-crop { width: 700px; height: 470px; }
.ui-crop .ui-content { display: block; }

/* —— 个人知识库 / 资料入库（.kb-import-row / .meet-item） —— */
.ui-kb-import-row { display: flex; align-items: center; gap: 10px; margin: 4px 0 12px; flex-wrap: wrap; }
.ui-kb-import-hint { font-size: 12px; color: #787774; }
.ui-kb-sec { margin: 18px 0 6px; font-weight: 600; }
.ui-btn-ghost { border: 0; background: none; padding: 0; font: inherit; color: var(--a-text); white-space: nowrap; }
.ui-ghost-row { display: flex; gap: 6px; flex-shrink: 0; }
.ui-meet-list { display: flex; flex-direction: column; gap: 4px; }
.ui-meet-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border-radius: 8px;
  border: 1px solid var(--a-border); background: var(--a-bg);
}
.ui-meet-icon { font-size: 20px; flex-shrink: 0; }
.ui-meet-main { flex: 1; min-width: 0; }
.ui-meet-title { font-size: 14px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-meet-sub { font-size: 12px; color: var(--a-text-3); margin-top: 2px; }

/* —— Pala AI 对话 / 备课台（.chat-* / .prep-* / .nv-dropdown） —— */
.ui-chat-view {
  max-width: 720px; margin: 0 auto; padding: 0 24px 80px; min-height: 100%;
  display: flex; flex-direction: column; justify-content: center;
}
.ui-chat-hero { text-align: center; margin-bottom: 26px; }
.ui-chat-logo {
  width: 54px; height: 54px; margin: 0 auto 18px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--a-bg); color: var(--a-text);
  box-shadow: 0 0 0 1px var(--a-border), 0 2px 8px rgba(15, 15, 15, 0.08);
}
.ui-chat-title { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; margin: 0; }
.ui-prep-panel {
  border: 1px solid var(--a-border); border-radius: 10px;
  background: var(--a-secondary); padding: 12px 14px; margin-bottom: 18px; text-align: left;
}
.ui-prep-title { font-size: 14px; font-weight: 600; margin-bottom: 10px; }
.ui-prep-form { display: flex; gap: 8px; flex-wrap: wrap; }
.ui-nv-dropdown {
  display: inline-flex; align-items: center; gap: 4px; max-width: 100%;
  border: 1px solid var(--a-border); border-radius: 7px;
  background: var(--a-secondary); color: var(--a-text); font: inherit;
}
.ui-prep-select { flex: 1; min-width: 140px; height: 32px; padding: 0 9px; background: var(--a-bg); font-size: 13px; }
.ui-dd-label { flex: 1; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-dd-caret { display: inline-flex; align-items: center; color: var(--a-text-3); flex-shrink: 0; }
.ui-chat-composer {
  border: 1px solid var(--a-accent); border-radius: 12px; background: var(--a-bg); overflow: hidden;
  box-shadow: 0 0 0 3px rgba(35, 131, 226, 0.1), 0 2px 10px rgba(15, 15, 15, 0.06);
}
.ui-chat-notice {
  display: flex; align-items: center; gap: 6px; padding: 7px 14px;
  font-size: 12px; background: rgba(35, 131, 226, 0.1); color: var(--a-text-2);
}
.ui-chat-notice-ic { color: var(--a-accent); flex-shrink: 0; }
.ui-chat-notice-link { color: var(--a-accent); font-weight: 500; flex-shrink: 0; }
.ui-chat-input { min-height: 46px; padding: 14px 14px 4px; font-size: 15px; line-height: 1.6; color: var(--a-text); }
.ui-chat-bar { display: flex; align-items: center; gap: 6px; padding: 6px 10px 8px; }
.ui-chat-bar-left { display: flex; align-items: center; gap: 6px; }
.ui-chat-bar-btn { width: 26px; height: 26px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; color: var(--a-text-3); }
.ui-chat-thinking { font-size: 12px; color: var(--a-text-3); }
.ui-chat-send {
  margin-left: auto; width: 26px; height: 26px; border-radius: 50%; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--a-tertiary); color: var(--a-text-3);
}
.ui-chat-quick { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px; margin-top: 18px; }
.ui-chat-quick-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 10px; border-radius: 6px; font-size: 13px; color: var(--a-text-2);
}

/* 窄屏取景：不把 1280 宽的界面整体缩到看不清，改成「窗口更窄 + 侧边栏收起」——
   这是产品本身就有的状态（css/app.css 的 .sidebar.collapsed），比一味缩放更忠实也更可读。
   本块必须排在上面的 .ui-app 基础规则之后才能生效。 */
@media (max-width: 1023px) and (min-width: 720px) {
  .deck { --ui-ar: 1040 / 700; }
  .ui-app { width: 1040px; height: 700px; }
  .float-card.f2 { right: -8px; }   /* 该档画布变窄，-40px 会压到卡组内容（官网审计 005） */
}
@media (max-width: 719px) {
  .deck { --ui-ar: 560 / 440; }
  .ui-app { width: 560px; height: 440px; }
  .ui-sidebar { margin-left: -248px; }
  .cap-visual { --ui-ar: 480 / 340; }
  .ui-app.ui-crop { width: 480px; height: 340px; }
  /* 窄屏取景：480×340 画布从头排时，可见区只剩大标题（v-teach）或空格子（v-cal），
     卖点进不了画。注意 .ui-crop 自身 overflow:hidden 定高，负边距挪不动内容——
     必须 translate 内层容器把卡片/日程顶上来；底部露白与画框同色，不可见。 */
  .v-teach .ui-crop .ui-page-body { transform: translateY(-290px); }
  .v-cal .ui-crop .ui-view-page { transform: translateY(-60px); }
  .v-cal .ui-cal-cell { min-height: 64px; }
}
