/* ===============================
   EasyNotes — Global Styles
   Modern Note-Taking App Theme
   =============================== */

/* ---------- CSS Custom Properties ---------- */
/* 取值来自 Figma「GoFasting社媒&官网 / 官网建设」EasyNotes 桌面稿 (3623:1931) */
:root {
  /* ===== 品牌色 ===== */
  --color-primary: #149EFE;        /* 主蓝：链接、激活态、强调 */
  --color-primary-dark: #087CCB;   /* 主蓝深：hover、区块标签 */
  --color-primary-light: #DAEBFF;  /* 主蓝浅：浅底块 */
  --color-primary-pale: #CCE4FF;   /* 主蓝更浅：描边、分隔 */
  --color-cta-blue: #48B0FD;       /* 底部 CTA 横幅 */

  /* ===== 页面底色 ===== */
  --color-white: #FFFFFF;
  --color-cream: #FFFCF5;          /* 全站主背景（暖白） */
  --color-cream-warm: #FFFAF2;     /* Use Cases 区 */
  --color-cream-yellow: #FFFBE7;   /* Hero / 各页 page-hero */
  --color-cream-pers: #FFFDF6;     /* Personalization 卡片底（buglist 8/31 第 3 条） */

  /* ===== 文字色 ===== */
  --color-navy: #0B1630;           /* 区块大标题 */
  --color-navy-deep: #041E54;      /* 评价、数据标题 */
  --color-ink: #141414;            /* 正文 */
  --color-slate: #526074;          /* 次要正文 */
  --color-mute: #6B7080;           /* 弱化文字 */
  --color-star: #FFB800;           /* 评分星标 */

  /* ===== 灰阶 ===== */
  --color-gray-50: #F9FAFB;
  --color-gray-100: #F3F4F6;
  --color-gray-200: #E5E7EB;
  --color-gray-300: #D1D5DB;
  --color-gray-400: #9CA3AF;
  --color-gray-500: #6B7280;
  --color-gray-600: #4B5563;
  --color-gray-700: #374151;
  --color-gray-800: #1F2937;
  --color-gray-900: #111827;

  /* ===== 语义别名 ===== */
  --color-heading: var(--color-navy);
  --color-text: var(--color-slate);
  --color-border: #E7EDF4;

  /* ===== 字体 ===== */
  /* 中日韩字族：Inter 与系统西文字体没有 CJK 字形，不声明就落到各系统默认回退字体
     （Windows 上常是宋体），与西文标题字重割裂。按 <html lang> 分别指定（见下方
     :root:lang() 覆盖），避免日文页被简中字体接管、出现中式字形。 */
  --font-cjk: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Noto Sans SC';
  --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, var(--font-cjk), sans-serif;
  --font-display: 'Plus Jakarta Sans', var(--font-primary);
  --font-script: 'Pacifico', 'Meie Script', cursive;

  /* ===== 字号阶梯 =====
     Figma 标注是 px，这里就是 px，取用处直接写 var(--fs-<px>)，中间不做换算。
     规则见「设计还原度复盘与规范.md」R1/R2：CSS 里不允许出现裸的字号数值。
     17 / 21 / 34 三档不在常规阶梯上，是历史随手值，待设计确认后并档。 */
  --fs-10: 10px;
  --fs-11: 11px;
  --fs-12: 12px;
  --fs-14: 14px;
  --fs-15: 15px;
  --fs-16: 16px;
  --fs-17: 17px;   /* 非标准档，待并入 16 或 18 */
  --fs-18: 18px;
  --fs-20: 20px;
  --fs-21: 21px;   /* 非标准档，待并入 20 或 22 */
  --fs-22: 22px;
  --fs-24: 24px;
  --fs-26: 26px;
  --fs-28: 28px;
  --fs-30: 30px;
  --fs-32: 32px;
  --fs-34: 34px;   /* 非标准档，待并入 32 或 36 */
  --fs-36: 36px;
  --fs-40: 40px;
  --fs-42: 42px;
  --fs-56: 56px;
  --fs-60: 60px;

  /* ===== 语义别名（会在断点内整体下调，正文与标题优先用这组） ===== */
  --fs-hero: 60px;
  --fs-h2: 42px;
  --fs-h3: 38px;
  --fs-h4: 22px;
  --fs-lead: 19px;
  --fs-body: 16px;
  --fs-md: 18px;
  --fs-sm: 14px;
  --fs-label: 12px;

  /* ===== 布局 ===== */
  --nav-h: 72px;              /* 固定导航高度（≤768 断点内降为 56px，改这里要连着首屏契约一起看） */
  --section-padding: 72px 0;  /* buglist 2026-08-25：板块间距拉开，留足呼吸感 */
  --container-max: 1200px;
  --container-padding: 0 24px;
  --container-padding-nav: 0 32px;

  /* ===== 阴影 ===== */
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
  --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
  --shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1);
  --shadow-xl: 0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1);
  --shadow-card: 0 4px 20px rgba(11,22,48,0.06);

  /* ===== 圆角 ===== */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 16px;
  --radius-xl: 24px;
  --radius-2xl: 32px;
  --radius-full: 9999px;

  /* ===== 过渡 ===== */
  --transition-fast: 150ms ease;
  --transition-base: 250ms ease;
  --transition-slow: 350ms ease;
}

:root:lang(zh-TW) {
  --font-cjk: 'PingFang TC', 'Hiragino Sans CNS', 'Microsoft JhengHei', 'Noto Sans CJK TC', 'Noto Sans TC';
}

:root:lang(ja) {
  --font-cjk: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'Noto Sans JP';
}

:root:lang(ko) {
  --font-cjk: 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans CJK KR', 'Noto Sans KR';
}

/* 断行：韩文默认按音节折行，「홈/화면」会在词中间断开；日文用 strict 禁止
   拗音、长音符等小字符出现在行首。 */
:lang(ko) { word-break: keep-all; }
:lang(ja) { line-break: strict; }

/* ---------- Reset & Base ---------- */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  font-family: var(--font-primary);
  color: var(--color-ink);
  background-color: var(--color-cream);
  line-height: 1.6;
  overflow-x: hidden;
  animation: pageFadeIn 0.3s ease-out;
}

@keyframes pageFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* 键盘焦点：浅底圆角自定义按钮上浏览器默认焦点环几乎看不见，全站统一一个可见焦点态。
   只在 :focus-visible 出现，鼠标点击不会触发。 */
:focus-visible {
  outline: 2px solid var(--color-primary-dark);
  outline-offset: 2px;
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

a {
  text-decoration: none;
  color: inherit;
  transition: color var(--transition-fast);
}

ul, ol {
  list-style: none;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

button {
  cursor: pointer;
  border: none;
  background: none;
  font-family: inherit;
}

/* ---------- Utility Classes ---------- */
.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: var(--container-padding);
}

.section-label {
  display: inline-block;
  font-family: var(--font-display);
  font-size: var(--fs-label);
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-primary-dark);
  margin-bottom: 10px;
}

.section-title {
  font-family: var(--font-display);
  font-size: var(--fs-h2);
  font-weight: 700;
  line-height: 1.18;
  color: var(--color-navy);
  margin-bottom: 14px;
  text-wrap: balance;
}

.section-subtitle {
  font-size: var(--fs-body);
  color: var(--color-ink);
  /* buglist 第 10 条：标题组与下方内容容器同宽。副标题限宽比卡片窄太多时，
     换行位置会让标题组看着"缩了一圈"，放宽到接近内容宽度。 */
  max-width: 760px;
  line-height: 1.7;
  text-wrap: pretty;
}

/* 居中的区块标题组（首页多数区块用这个） */
.section-head {
  text-align: center;
  margin-bottom: 56px;
}

.section-head .section-subtitle {
  margin-left: auto;
  margin-right: auto;
}

.text-center {
  text-align: center;
}

.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 14px 28px;
  font-size: var(--fs-15);
  font-weight: 600;
  border-radius: var(--radius-full);
  transition: all var(--transition-base);
  white-space: nowrap;
}

.btn-primary {
  background: var(--color-primary);
  color: var(--color-white);
}

.btn-primary:hover {
  background: var(--color-primary-dark);
  transform: translateY(-1px);
  box-shadow: var(--shadow-lg);
}

.btn-outline {
  border: 2px solid var(--color-gray-200);
  color: var(--color-gray-700);
  background: var(--color-white);
}

.btn-outline:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

.btn-dark {
  background: var(--color-navy);
  color: var(--color-white);
}

.btn-dark:hover {
  background: #1B2A4E;
  transform: translateY(-1px);
  box-shadow: var(--shadow-lg);
}

.btn-sm {
  height: 40px;              /* 与 .lang-btn 等高 */
  padding: 0 20px;
  font-size: var(--fs-14);
  border-radius: var(--radius-sm);
}

.btn-icon {
  width: 20px;
  height: 20px;
}

/* ---------- Store Badges ---------- */
.store-badges {
  display: inline-grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  gap: 12px;
}

.store-badge {
  --badge-width: 176px;
  display: block;
  width: var(--badge-width);
  max-width: 100%;
  border-radius: 8px;
  overflow: hidden;
  transition: transform var(--transition-base), filter var(--transition-base);
  cursor: pointer;
}

.store-badge:hover {
  transform: translateY(-2px);
  filter: drop-shadow(0 8px 12px rgba(11, 22, 48, 0.18));
}

.store-badge img {
  display: block;
  width: 100%;
  height: auto;
}

/* ---------- Store Download Group ---------- */
.store-download-group {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  margin-top: 0;
  width: 100%;
  flex-wrap: nowrap;
}

.store-download-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  white-space: nowrap;
  flex-shrink: 0;
}

.store-download-col .store-badge {
  width: min(100%, 180px);
}


/* ===================================
   1. NAVBAR
   =================================== */
/* 导航默认就是实底毛玻璃（buglist 2026-08-25 第 1/22 条：默认态 = 原「下滑后」态，
   不再透明融入 hero）。.scrolled 类仍由 JS 维护，样式与默认一致。 */
.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  background-color: var(--nav-scrolled-bg, rgba(255, 253, 246, 0.82));
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--color-border);
  box-shadow: 0 2px 12px rgba(11, 22, 48, 0.05);
}

/* 不支持 backdrop-filter 时退回不透明底，避免文字压在正文上看不清 */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .navbar { background-color: var(--nav-solid-bg, var(--color-cream)); }
}

/* 移动端菜单展开时导航栏必须是实底，否则会透出被遮住的正文 */
body.nav-open .navbar {
  background-color: var(--nav-solid-bg, var(--color-cream));
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.navbar .container {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 32px;
  height: var(--nav-h);
  /* 1280px content rail plus the existing 32px padding on each side. */
  max-width: 1344px;
  padding: var(--container-padding-nav);
}

/* ---------- 品牌 ---------- */
.nav-brand {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
  justify-self: start;
}

.nav-brand-icon {
  width: 36px;
  height: 36px;
  border-radius: 9px;
}

.nav-brand-word {
  width: auto;
  height: 25px;
  /* 光学对齐补偿（buglist 第 2/23 条）：盒模型上 icon 与词标已严格居中，
     但词标含「y」的下伸部，字形主体（cap 区间）视觉重心比盒中心高约 10%，
     看起来偏上。下移 2px 让两者视觉居中（25px 词标实测偏差约 2.5px）。 */
  transform: translateY(2px);
}

/* ---------- 主导航 ---------- */
.nav-links {
  display: flex;
  align-items: center;
  gap: 34px;
  justify-self: center;
}

.nav-links a {
  font-size: var(--fs-16);
  font-weight: 500;
  color: var(--color-ink);
  white-space: nowrap;
}

.nav-links a:hover,
.nav-links a.active {
  color: var(--color-primary);
}

.nav-right {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
  justify-self: end;
}

/* ---------- 语言选择 ---------- */
/* buglist 8/31 第 6 条：语言切换只在首页提供，其余页面隐藏。
   2026-09-03 上线审查建议全站显示，产品决定维持只在首页；
   非首页的语言目录版仍可通过 hreflang / 首页入口到达。 */
body:not(.home-page) .lang-selector {
  display: none;
}

.lang-selector {
  position: relative;
}

.lang-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-width: 68px;
  height: 40px;              /* 与 .btn-sm(Download) 等高，见 buglist 第 3 条 */
  padding: 0 12px;
  font-size: var(--fs-14);
  font-weight: 500;
  font-family: inherit;
  color: var(--color-primary);
  background: var(--color-white);
  border: 1px solid var(--color-primary);
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background var(--transition-fast), color var(--transition-fast);
}

.lang-globe {
  width: 17px;
  height: 17px;
  flex: 0 0 17px;
}

.lang-btn:hover {
  background: var(--color-primary);
  color: var(--color-white);
}

.lang-dropdown {
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  min-width: 168px;
  padding: 6px;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: all var(--transition-fast);
  max-height: 60vh;
  overflow-y: auto;
}

.lang-dropdown.open {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.lang-dropdown a,
.lang-dropdown button {
  display: block;
  width: 100%;
  padding: 9px 12px;
  font-size: var(--fs-14);
  font-family: inherit;
  text-align: left;
  color: var(--color-slate);
  background: transparent;
  border: 0;
  border-radius: var(--radius-sm);
  cursor: pointer;
}

.lang-dropdown a:hover,
.lang-dropdown button:hover {
  background: var(--color-primary-light);
  color: var(--color-primary-dark);
}

.lang-dropdown a.active,
.lang-dropdown button.active {
  color: var(--color-primary);
  font-weight: 600;
}

/* ---------- 导航下载按钮 + 商店浮层 ---------- */
.nav-cta-wrapper {
  position: relative;
}

.nav-cta-wrapper > button.btn {
  border: 0;
  font-family: inherit;
  cursor: pointer;
}

/* 导航 Download 弹窗：屏幕居中模态 + 蒙层（对齐 GoFasting 官网），
   桌面两列「二维码 + 商店徽章」，窄屏隐藏二维码只留徽章。
   注意：弹窗与蒙层由 components.js 挪到 body 下（navbar 的 backdrop-filter
   会劫持 fixed 定位的包含块），不要再把它们放回 .nav-cta-wrapper。 */
.store-modal-mask {
  position: fixed;
  inset: 0;
  background: rgba(11, 22, 48, 0.45);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--transition-fast);
  z-index: 1190;
}

.store-modal-mask.show {
  opacity: 1;
  visibility: visible;
}

.nav-store-dropdown {
  position: fixed;
  top: 50%;
  left: 50%;
  display: flex;
  /* 标题独占一行（flex-basis:100%），两列被挤到下一行 */
  flex-wrap: wrap;
  gap: 16px;
  width: min(45vw, 600px);
  min-width: 520px;
  padding: 24px;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: 22px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
  opacity: 0;
  visibility: hidden;
  transform: translate(-50%, -48%) scale(0.98);
  transition: opacity var(--transition-fast), transform var(--transition-fast);
  z-index: 1200;
}

.store-dropdown-title {
  flex: 0 0 100%;
  font-family: var(--font-display);
  font-size: var(--fs-18);
  font-weight: 700;
  line-height: 1.3;
  color: var(--color-ink);
  text-align: center;
}

.nav-store-dropdown.show {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, -50%) scale(1);
}

.store-download-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  flex: 1 1 0;
  min-width: 0;
}

.download-qr {
  width: 100%;
  max-width: 178px;
  aspect-ratio: 1;
  padding: 8px;
  border: 1px solid rgba(16, 24, 40, 0.08);
  border-radius: 16px;
  background: var(--color-white);
  object-fit: contain;
}

.nav-store-dropdown .store-badge {
  width: min(100%, 180px);
  min-width: 0;
}

/* 窄屏放不下两列二维码：竖排小弹窗，只留徽章 */
@media (max-width: 900px) {
  .nav-store-dropdown {
    flex-direction: column;
    width: min(calc(100vw - 32px), 360px);
    min-width: 0;
    padding: 18px;
  }

  .download-qr { display: none; }
}

/* ---------- 移动菜单按钮 ---------- */
.mobile-menu-btn {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  padding: 8px;
  background: none;
  border: none;
  cursor: pointer;
}

.mobile-menu-btn span {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--color-primary);
  border-radius: 2px;
  transition: transform var(--transition-base), opacity var(--transition-base);
}

.mobile-menu-btn.active span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}

.mobile-menu-btn.active span:nth-child(2) {
  opacity: 0;
}

.mobile-menu-btn.active span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

.mobile-nav {
  position: fixed;
  top: var(--nav-h);
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 999;
  display: none;
  flex-direction: column;
  gap: 4px;
  padding: 24px max(24px, env(safe-area-inset-right)) 40px max(24px, env(safe-area-inset-left));
  background: var(--color-cream);
  overflow-y: auto;
}

.mobile-nav.open {
  display: flex;
}

.mobile-nav > a {
  padding: 14px 4px;
  font-size: var(--fs-18);
  font-weight: 500;
  color: var(--color-navy);
  border-bottom: 1px solid var(--color-border);
}

.mobile-nav .mobile-nav-badges {
  margin-top: 24px;
  grid-auto-flow: row;       /* 纵向堆叠，两枚等宽 */
  gap: 12px;
  width: 100%;
}

.mobile-nav .mobile-store-badge {
  --badge-width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 55px;
  padding: 12px 24px;
  background: #020407;
}

.mobile-nav .mobile-store-badge-icon {
  flex: 0 0 30px;
  width: 30px;
  height: 30px;
  object-fit: contain;
}

.mobile-store-badge-text {
  display: flex;
  flex-direction: column;
  color: var(--color-white);
  text-align: left;
}

.mobile-store-badge-text small {
  font-size: 12px;
  font-weight: 400;
  line-height: 1.2;
}

.mobile-store-badge-text strong {
  font-size: 14px;
  font-weight: 700;
  line-height: 1.2;
}

/* ===================================
   8. FOOTER
   =================================== */
.footer {
  background: var(--color-cream);
  padding: 72px 0 32px;
}

.footer .container {
  max-width: 1160px;
}

@media (min-width: 1441px) {
  .navbar .container {
    max-width: 1344px;
    padding-left: 32px;
    padding-right: 32px;
  }

  .footer .container {
    max-width: 1680px;
    padding-left: 48px;
    padding-right: 48px;
  }
}

.footer-grid {
  display: grid;
  grid-template-columns: 1.6fr 1fr 1fr;
  gap: 48px;
  padding-bottom: 40px;
}

.footer-brand .nav-brand {
  margin-bottom: 14px;
}

.footer-brand p {
  font-size: var(--fs-body);   /* buglist 第 21 条：14 → 16 */
  color: var(--color-ink);
  margin-bottom: 20px;
}

.footer-social {
  display: flex;
  gap: 16px;
}

.footer-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  color: var(--color-navy);
  transition: color var(--transition-fast), transform var(--transition-fast);
}

.footer-social a:hover {
  color: var(--color-primary);
  transform: translateY(-2px);
}

.footer-social svg {
  width: 20px;
  height: 20px;
}

.footer-col .footer-col-title {
  font-family: var(--font-display);
  font-size: var(--fs-body);   /* buglist 第 21 条：14 → 16 */
  font-weight: 600;
  color: var(--color-navy);
  margin-bottom: 14px;
}

.footer-links li + li {
  margin-top: 9px;
}

.footer-links a {
  font-size: var(--fs-sm);     /* buglist 第 21 条：12 → 14 */
  color: var(--color-mute);
}

.footer-links a:hover {
  color: var(--color-primary);
}

.footer-bottom {
  padding-top: 22px;
  border-top: 1px solid var(--color-border);
  text-align: center;
}

.footer-bottom p {
  font-size: var(--fs-label);  /* buglist 第 21 条：最底部 12 */
  line-height: 1.8;
  color: var(--color-mute);
}
/* ===================================
   RESPONSIVE - Shared
   =================================== */
@media (max-width: 1180px) {
  .navbar .container { gap: 22px; }
  .nav-links { gap: 24px; }
  .nav-links a { font-size: var(--fs-15); }
}

@media (max-width: 1024px) {
  :root {
    --fs-hero: 46px;
    --fs-h2: 34px;
    --fs-h3: 30px;
    --section-padding: 56px 0;
  }

  .navbar .container {
    gap: 14px;
    padding-left: max(20px, env(safe-area-inset-left));
    padding-right: max(20px, env(safe-area-inset-right));
  }

  .nav-links { gap: 18px; }

  .footer-grid {
    grid-template-columns: 1fr 1fr;
    gap: 36px;
  }
}

@media (max-width: 920px) {
  .navbar .container {
    display: flex;
    padding-left: max(18px, env(safe-area-inset-left));
    padding-right: max(18px, env(safe-area-inset-right));
  }

  .nav-links { display: none; }
  .mobile-menu-btn { display: flex; }
  /* 主导航隐藏后，语言/菜单块靠右 */
  .nav-right { margin-left: auto; }
}

@media (max-width: 768px) {
  :root {
    --fs-hero: 36px;   /* buglist 第 25 条：移动端大标题 36 */
    --fs-h2: 26px;
    --fs-h3: 24px;
    --fs-h4: 19px;
    --fs-lead: 16px;
    --fs-md: 16px;
    --section-padding: 56px 0;
  }

  :root { --nav-h: 56px; }   /* buglist 第 27 条：移动端首屏 Header 56px */

  .navbar .container {
    gap: 10px;
    padding-left: max(16px, env(safe-area-inset-left));
    padding-right: max(16px, env(safe-area-inset-right));
  }

  .store-badge { --badge-width: 156px; }

  .page-hero .store-badges {
    width: min(100%, 324px);
    grid-auto-columns: minmax(0, 1fr);
  }

  .page-hero .store-badge { --badge-width: 100%; }

  .nav-brand-icon { width: 32px; height: 32px; }
  .nav-brand-word { height: 22px; }

  .lang-btn {
    min-width: 62px;
    height: 34px;
    padding: 0 8px;
    color: var(--color-primary);
    border-color: var(--color-primary);
  }

  .lang-globe {
    width: 16px;
    height: 16px;
    flex-basis: 16px;
  }

  .mobile-menu-btn {
    width: 34px;
    height: 34px;
    padding: 6px;
  }

  .mobile-menu-btn span { width: 20px; }

  .nav-cta-wrapper { display: none; }

  .mobile-nav .store-badges { gap: 12px; }

  .footer {
    padding: 48px 0 28px;
  }

  /* 移动端页脚整体居中 */
  .footer-grid {
    grid-template-columns: 1fr;
    gap: 30px;
    justify-items: center;
    text-align: center;
  }

  .footer-brand .nav-brand { justify-content: center; }
  .footer-social { justify-content: center; }
}

@media (max-width: 480px) {
  .store-badge { --badge-width: 148px; }
}

/* ===============================================================
   8. CTA — 通栏蓝底横幅
   =============================================================== */
.cta-section {
  position: relative;
  /* 底纹只有纯色：左簇仍用从 cta-banner-full 裁出的 cta-art-left（底色与
     --color-cta-blue 完全一致，看不出边界）；右侧换用设计给的分件
     cta-notebook（8/28 反馈第 3 条），透明底、笔记本本体出血到画布底边，
     所以贴底摆。 */
  background-color: var(--color-cta-blue);
  background-image: url('../assets/images/cta/cta-art-left.webp?v=cb7caa2bf3ae'),
                    url('../assets/images/cta/cta-notebook.webp?v=5fd2f5bba635');
  background-position: left center, right 24px bottom;
  background-size: auto 84%, auto 82%;
  background-repeat: no-repeat;
  /* 对参考稿：带子压扁，文案上下各留 48px 就够，不要再撑到 400 */
  min-height: 300px;
  /* min-height 撑高时文案仍要留在带子正中 */
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 48px 0;
  overflow: hidden;
}

.cta-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 30px;
  text-align: center;
}

.cta-inner h2 {
  font-family: var(--font-display);
  font-size: var(--fs-56);
  font-weight: 800;
  line-height: 1.15;
  color: var(--color-white);
  text-shadow: 0 2px 12px rgba(4, 30, 84, 0.18);
}

@media (max-width: 1024px) {
  .cta-inner h2 { font-size: var(--fs-40); }
}

@media (max-width: 768px) {
  /* 窄屏横幅同样作底、文案压在其上（与桌面一套处理）。
     实测这张图的插画分布：左簇 0~17.8%、空白中段 17.8~60.8%、右簇 60.8~100%。
     整宽平铺时中段只有 43%×100vw≈161px，托不住文案；放大到 155% 后中段
     = 43%×155% ≈ 66vw（375px 时约 250px），横移 20% 让中段正对屏幕中线，
     两侧各露出约 63px 插画。标题宽度按这条 66vw 收。
     按钮保持左右并排（不堆叠），两枚并排比中段略宽，边缘会轻搭到插画留白处。 */
  /* 窄屏：两簇再缩一档并各自吃掉一点出血（左簇左移、右簇右移），
     中段才留得出放标题与按钮的宽度；带高同步压到 220。
     配比仍是 0.914，改一个要连着改另一个。 */
  /* Figma 移动稿这一条带是 390×170（node 3623-3696），比例 2.29:1。
     高度跟着视口走，390 宽时正好 170。两簇按稿子的位置摆：
     左簇略低于中线，右簇贴带子底边（不是垂直居中——稿子里笔记本是沉在右下角的）。 */
  .cta-section {
    /* 8/29 反馈：上下间距收一档，带高对齐 Figma 移动稿的 390×170。
       min-height 直接写稿子的比例 170/390 = 43.6vw：390 宽时正好 170，
       375 宽时 163.5。内容高度也要压到这条线以内才不会把带子顶高——
       18×2(padding) + 24(标题) + 14(gap) + 40×2+10(按钮) = 164，刚好贴住。 */
    padding: 18px 0;
    min-height: clamp(155px, 43.6vw, 200px);
    /* 手机端换用设计给的元素分件（cta-checklist / cta-notebook），
       不再用从横幅裁出来的 cta-art-*：分件是原始切图，缩到 90px 高也不糊。
       两张分件的纯底色区域已抠成透明、底色一律由 background-color 画，
       所以无论怎么缩放都不会露出接缝（有损重编码会把底色打偏 11~15，
       这正是之前左件周围那块矩形的成因，别再改回不透明底）。
       左件右侧自带约 1/3 空白，正好当成与文案的间距，不用再补 padding。
       右件的笔记本本来就出血到画布底边，贴底摆才接得上。 */
    background-image: url('../assets/images/cta/cta-checklist.webp?v=8eac6f3f3bc8'),
                      url('../assets/images/cta/cta-notebook.webp?v=5fd2f5bba635');
    /* ⚠️ 两张切图里除了主体，还有铺满整幅的星点与虚线装饰，主体只占切图高的
       80.8%（左）/ 89.3%（右）。background-size 缩的是整张切图，所以百分比
       要按主体反推：想让主体占带高 X%，就写 X / 0.808（或 /0.893）。
       稿子量出来主体是 60%（左）与 47%（右）→ 74% 与 53%。
       8/29 反馈：按钮加宽到 196px 后带宽只剩中段，两簇必须让位——右件
       （笔记本，切图宽高比 1.602，主体只占切图宽的 11.7%~94.7%）按 38% 带高
       算，主体左缘落在 x≈293，卡在按钮右缘 285.5 之外；左件（0.788）67%。
       ⚠️ 这两个数是「带高压到 164 后仍保持插画原尺寸」反推的（52%×210/164≈67、
       30%×210/164≈38），改 min-height / padding 就要连着重算。
       纵向都靠下：左件主体底边距带底约 9px，右件贴底出血。 */
    background-size: auto 67%, auto 38%;
    background-position: left -10px bottom -6px, right -6px bottom -2px;
  }

  /* 手机稿使用紧凑的两行标题，不能沿用桌面横幅字号。 */
  .cta-inner h2 {
    font-size: var(--fs-20);
    line-height: 1.2;
    max-width: min(72vw, 240px);
  }

  .cta-inner { gap: 14px; }

  /* 8/28 反馈第 6 条：两枚下载按钮加大、居中、上下堆叠——只在手机端，
     PC 端维持并排（.store-badges 默认的 grid-auto-flow: column）。 */
  .cta-badges {
    grid-auto-flow: row;
    justify-items: center;
    gap: 10px;
  }

  /* 8/29 反馈：变大的是「按钮本身」，不是徽章里的 logo 与文字。
     徽章切图本身就是「纯黑圆角 + 约 4px 浅灰描边」，所以给 <a> 铺同色黑底
     再加内边距，等于把按钮撑大而画面元素维持原尺寸；描边用 clip-path 切掉，
     切掉后露出的那一圈正好是同色黑底，看不出接缝。
     宽度按手机中段留白定：左右两簇插画各占约 60/90px，190px 居中不压到它们。 */
  /* 8/29 反馈：按钮要更长、更矮。关键是把「黑底宽度」与「徽章画面宽度」解耦——
     基类 .store-badge img 是 width:100%，一加宽画面就跟着变高，所以这里把画面
     钉死在 114px（高度只由它决定：114×175/588 ≈ 34px），黑底另由 --badge-width
     加宽、纵向内边距压到 3px，得到 196×40 的扁长按钮。
     「App Store」字高约 10.7px，仍明显小于 20px 标题的字高（约 14.4px）。 */
  .cta-badges .store-badge {
    --badge-width: min(196px, 56vw);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 3px 12px;
    background: #000;
    border-radius: 8px;
    overflow: hidden;
  }

  /* 切图自带约 4px 浅灰描边、圆角约 10px。百分比 inset 是分轴解算的
     （纵向按 175、横向按 588），所以要分轴写；两轴都必须切掉 ≥ 圆角半径，
     否则直边切掉了、四个角的圆弧还留在黑底里，看着像四个角标。
     10/175≈5.7%、10/588≈1.7% → 取 6.5% / 2%。文字带在 y 35~147，切完不伤字。 */
  .cta-badges .store-badge img {
    width: 114px;
    clip-path: inset(6.5% 2%);
  }

  .cta-inner { position: relative; z-index: 1; }
}

@media (min-width: 360px) and (max-width: 768px) {
  .cta-inner h2 {
    max-width: 100%;
    white-space: nowrap;
  }
}

/* 320 这档中段更窄，按钮与两簇插画按同一套比例再各收一档，才互不遮挡 */
@media (max-width: 360px) {
  .cta-section { background-size: auto 50%, auto 24%; }

  .cta-badges .store-badge {
    --badge-width: min(170px, 54vw);
    padding: 3px 10px;
  }

  .cta-badges .store-badge img { width: 104px; }
}

/* ---------- 问答折叠图标（首页 FAQ 与帮助中心共用） ---------- */
.faq-chevron {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  color: #071B3D;
  transition: transform var(--transition-base);
}

/* ---------- Scroll Animations ---------- */
.fade-up {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-up.visible {
  opacity: 1;
  transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
  .fade-up {
    opacity: 1;
    transform: none;
    transition: none;
  }
  html { scroll-behavior: auto; }
}

/* ---------- Cookie 同意横幅（js/consent.js） ----------
   只有分析 Cookie，两档选择即可；z-index 高于导航（1000）与 Download 弹层（1200）。 */
.cookie-banner {
  position: fixed;
  left: 16px;
  right: 16px;
  bottom: 16px;
  z-index: 1300;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 14px 24px;
  max-width: 960px;
  margin: 0 auto;
  padding: 16px 20px;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-xl);
  font-size: var(--fs-14);
  color: var(--color-slate);
}

.cookie-banner p {
  flex: 1 1 320px;
  margin: 0;
  line-height: 1.5;
}

.cookie-banner a {
  color: var(--color-primary);
  text-decoration: underline;
  white-space: nowrap;
}

.cookie-actions {
  display: flex;
  flex: 0 0 auto;
  gap: 10px;
}

.cookie-actions .btn {
  height: 40px;
  padding: 0 18px;
  font-size: var(--fs-14);
  border-radius: var(--radius-sm);
}

/* 页脚里「Cookie 设置」是按钮不是链接，外观对齐同列的 <a> */
.footer-link-btn {
  padding: 0;
  font: inherit;
  font-size: var(--fs-sm);
  color: var(--color-mute);
  background: none;
  border: 0;
  cursor: pointer;
}

.footer-link-btn:hover {
  color: var(--color-primary);
}

@media (max-width: 768px) {
  .cookie-banner {
    left: 12px;
    right: 12px;
    bottom: 12px;
    padding: 14px 16px;
  }

  .cookie-actions {
    width: 100%;
  }

  .cookie-actions .btn {
    flex: 1;
  }
}
