/*!
 * jj-chat.css —— 捷界™传播 官网「情境问答」对话窗口样式
 * 作用范围：仅作用于 .jjc-* 命名空间，不触碰 site 既有样式
 * 断点：PC（>1100px）／PAD（640–1100px）／手机（≤640px）三套独立规则
 * 配色：沿用站点既有标准色 —— 深海军蓝 #2F4A70、暖金 #c9a227、白 #FFFFFF
 */

/* 2026-10-10 主人：反常规——由右下角改为左侧竖标（避开十几年俗套的右下弹窗）
   左边缘有手势返回区，故留出安全内缩；手机/PAD 内缩更大。 */
.jjc-root {
  --jjc-ink: #2F4A70;
  --jjc-red: #A52F4F;        /* 侯锷站标准红（2026-10-10 主人定） */
  --jjc-red-deep: #8A2740;   /* 标准红的按下态 */
  --jjc-ink-deep: #24395a;
  --jjc-gold: #c9a227;
  --jjc-gold-soft: #e3cf9c;
  --jjc-paper: #fbfaf7;
  --jjc-line: rgba(47, 74, 112, .16);
  --jjc-text: #2c3e50;
  --jjc-muted: #6b7b8c;
  position: fixed;
  left: 20px;               /* 反常规：左侧 */
  /* 竖标纵向位置：只需改这一个数即可微调（50% 正中、60% 偏下） */
  top: var(--jjc-top, 66%);
  right: auto;
  bottom: auto;
  z-index: 9000;
  /* 注意：此处**不可**加 transform —— 带 transform 的元素会成为 position:fixed
     后代的包含块，会把手机档的全宽抽屉面板压进本容器内。垂直居中偏移放在
     .jjc-launcher 自身完成。 */
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
}

/* ============ 唤起按钮 ============ */
.jjc-launcher {
  /* 2026-10-10 主人：左侧竖标形态——竖向书写，占地更小，也更不像传统弹窗 */
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 9px;
  padding: 20px 10px 18px;   /* 拉高：纵向内边距 13/11 → 20/18 */
  /* 2026-10-10 主人：底色改用侯锷站标准红 #A52F4F，去边框 */
  border: 0;
  border-radius: 0 22px 22px 0;
  background: var(--jjc-red, #A52F4F);
  color: #FFFFFF;
  font-size: 15px;
  letter-spacing: .04em;
  cursor: pointer;
  box-shadow: 0 10px 26px rgba(165, 47, 79, .34), 0 1px 0 rgba(255, 255, 255, .14) inset;
  transition: transform .28s cubic-bezier(.22, .8, .3, 1), box-shadow .28s ease,
              background .2s ease, opacity .2s ease;
}
.jjc-launcher:hover { background: var(--jjc-red-deep, #8A2740); transform: translateY(-2px); box-shadow: 0 16px 32px rgba(165, 47, 79, .42), 0 1px 0 rgba(255, 255, 255, .18) inset; }
.jjc-launcher:active { transform: translateY(0); }
.jjc-launcher:focus-visible { outline: 2px solid var(--jjc-red, #A52F4F); outline-offset: 3px; }
/* 2026-10-10 主人：图标大小以胶囊容纳为宜、自适应（随字号走，且不压扁） */
.jjc-launcher-icon { height: 1.7em; width: auto; max-height: 36px; flex: 0 0 auto; display: block; object-fit: contain; }
/* 竖向书写（竖标）
   2026-10-10 主人：文案含"AI"时，须确保 A 与 I 不断行、紧密在一起——
   white-space:nowrap 使整体不可断，letter-spacing 收到 .08em 让拉丁字母贴近。 */
/* 竖向书写（竖标）—— 2026-10-10 主人定
   结构：.jjc-launcher-txt 纵向堆叠
         ├ .jjc-launcher-mark → "AI"，**水平**小字（拉丁字母自然紧贴，绝不会断开）
         └ .jjc-launcher-text → 主体名（如"捷界"），竖排
   注：这两条规则此前因替换未匹配而遗漏，导致"捷"与"界"排布错乱。 */
/* 竖标排布 —— 2026-10-10 主人明确要的样子：
       AI
       捷
       界
   即"AI"一行，主体名一字一行，共三行纵排。
   注：此前用 writing-mode: vertical-rl，但该模式是"列从左往右"，
       会把 AI 块与主体名块并排成两列（视觉上成「AI 捷 / 界」），故弃用，
       改用 flex-direction: column 逐字一行。 */
.jjc-root.is-open .jjc-launcher { opacity: 0; pointer-events: none; transform: scale(.9); }

/* ============ 对话面板 ============ */
.jjc-panel {
  position: fixed;
  /* 2026-10-10：面板锚定**视口**（fixed + 同时锚 top/bottom），
     与竖标容器位置解耦，展开后高低与原来右侧时一致 */
  left: 20px;
  right: auto;
  top: calc(var(--nav-h, 58px) + 1px);
  bottom: 0;   /* 2026-10-10 主人：PC 版下沿与屏幕下沿齐（上沿不动） */
  width: 400px;
  /* 2026-10-10 主人：上边框贴到导航条底部 —— 高度改为"视口 − 导航条 − 底部留白"；
     取消 620px 封顶，否则大屏贴合不了。--nav-h 由 style.css 提供（PC 58 / PAD 42 / 手机 37）。 */
  height: auto;   /* 高度由 top/bottom 决定 */
  display: flex;
  flex-direction: column;
  background: var(--jjc-paper);
  border: 1px solid var(--jjc-line);
  border-radius: 16px;
  box-shadow: 0 26px 60px rgba(36, 57, 90, .26);
  overflow: hidden;
  opacity: 0;
  transform: translateY(14px) scale(.98);
  transform-origin: left bottom;
  pointer-events: none;
  transition: opacity .26s ease, transform .3s cubic-bezier(.22, .8, .3, 1);
}
.jjc-root.is-open .jjc-panel { opacity: 1; transform: none; pointer-events: auto; }

/* --- 头部 --- */
.jjc-head {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 46px 14px 16px;
  background: linear-gradient(135deg, #2F4A70 0%, #24395a 100%);
  color: #FFFFFF;
  flex: 0 0 auto;
}
/* 2026-10-10 主人：左上角图标与胶囊图标统一——等比自适应，不再固定方框压扁 */
.jjc-head-mark { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; }
/* 2026-10-10 主人：图标以胶囊/标题栏容纳为宜 —— 调大一档，与标题字高协调 */
.jjc-head-mark img { height: 34px; width: auto; max-width: 46px; min-width: 24px; display: block; object-fit: contain; }
.jjc-head-mark { min-width: 34px; }
/* 2026-10-10 主人：标题与副标题上下两行（此前父级非块容器，未真正换行） */
.jjc-head-txt { min-width: 0; display: flex; flex-direction: column; justify-content: center; }
/* 2026-10-10 主人：大字后即断行，且与下一行小字间距紧凑 */
.jjc-head-title { display: block; font-size: 15.5px; font-weight: 600; letter-spacing: .06em; line-height: 1.15; }
.jjc-head-sub { display: block; margin-top: 1px; font-size: 11.5px; color: rgba(255, 255, 255, .68); letter-spacing: .02em; line-height: 1.25; }
.jjc-close {
  position: absolute; top: 12px; right: 12px;
  width: 30px; height: 30px; border: 0; border-radius: 8px;
  background: rgba(255, 255, 255, .1); color: #FFFFFF;
  font-size: 17px; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background .2s ease;
}
.jjc-close:hover { background: rgba(255, 255, 255, .22); }
.jjc-close:focus-visible { outline: 2px solid var(--jjc-gold); outline-offset: 2px; }

/* --- 消息区 --- */
.jjc-body {
  flex: 1 1 auto;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 18px 16px 8px;
  scroll-behavior: smooth;
}
.jjc-body::-webkit-scrollbar { width: 6px; }
.jjc-body::-webkit-scrollbar-thumb { background: rgba(47, 74, 112, .2); border-radius: 3px; }

.jjc-msg { display: flex; gap: 10px; margin-bottom: 16px; animation: jjc-in .34s cubic-bezier(.22, .8, .3, 1) both; }
@keyframes jjc-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.jjc-msg-user { flex-direction: row-reverse; }
.jjc-avatar {
  flex: 0 0 30px; width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; letter-spacing: 0;
}
.jjc-msg-bot .jjc-avatar { background: rgba(201, 162, 39, .16); border: 1px solid rgba(201, 162, 39, .5); }
/* 2026-10-10 主人：侯锷站角色图标为两字（"侯锷"）。
   30px 圆内径 28px；两字 12px×2=24px 可放下，此处再收紧字距与字号以留呼吸感。 */
.jjc-avatar[data-two] { font-size: 10.5px; letter-spacing: -0.04em; white-space: nowrap; text-indent: -0.02em; }

.jjc-msg-user .jjc-avatar { background: rgba(47, 74, 112, .08); border: 1px solid var(--jjc-line); color: var(--jjc-muted); }
/* 2026-10-10 主人：字号 -2、行距紧凑 */
.jjc-bubble {
  max-width: 300px;
  padding: 10px 13px;
  border-radius: 12px;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--jjc-text);
  word-break: break-word;
}
.jjc-msg-bot .jjc-bubble { background: #fff; border: 1px solid var(--jjc-line); border-top-left-radius: 4px; }
.jjc-msg-user .jjc-bubble {
  background: linear-gradient(135deg, #2F4A70, #24395a);
  color: #FFFFFF; border-top-right-radius: 4px;
}
.jjc-msg-error .jjc-bubble { background: #fdf3f0; border-color: rgba(190, 90, 60, .35); color: #8d3f26; }

/* 气泡内排版 */
.jjc-bubble p { margin: 0 0 .55em; }
.jjc-bubble p:last-child { margin-bottom: 0; }
.jjc-bubble strong { color: var(--jjc-ink); font-weight: 600; }
/* 2026-10-10 主人：答案小标题改为相对值，随正文缩放 */
.jjc-bubble h4 {
  margin: .85em 0 .35em; font-size: 1.06em; font-weight: 600; color: var(--jjc-ink);
  padding-left: 9px; border-left: 3px solid var(--jjc-gold); line-height: 1.45;
}
.jjc-bubble h4:first-child { margin-top: 0; }
.jjc-bubble ul { margin: .3em 0 .7em; padding-left: 1.1em; }
.jjc-bubble li { margin: .22em 0; }
.jjc-bubble a { color: #2F4A70; text-decoration: underline; text-underline-offset: 3px; }
.jjc-bubble code {
  padding: 1px 5px; border-radius: 4px; background: rgba(47, 74, 112, .07);
  font-family: ui-monospace, Consolas, monospace; font-size: 12.5px;
}
/* 2026-10-10 主人：答案文字小 2 号——表内字号改为相对值，随正文缩放 */
.jjc-bubble table { width: 100%; border-collapse: collapse; margin: .5em 0; font-size: 0.94em; }
.jjc-bubble th, .jjc-bubble td { padding: 6px 7px; border: 1px solid var(--jjc-line); text-align: left; vertical-align: top; }
.jjc-bubble th { background: rgba(47, 74, 112, .05); font-weight: 600; color: var(--jjc-ink); }

/* 打字光标 */
.jjc-caret {
  display: inline-block; width: 7px; height: 15px; margin-left: 2px;
  vertical-align: -2px; background: var(--jjc-gold);
  animation: jjc-blink 1s steps(1) infinite;
}
@keyframes jjc-blink { 0%, 50% { opacity: 1; } 50.01%, 100% { opacity: 0; } }

/* 思考中三点 */
.jjc-typing { display: flex; align-items: center; gap: 5px; height: 18px; }
.jjc-typing i { width: 6px; height: 6px; border-radius: 50%; background: var(--jjc-gold); animation: jjc-dot 1.25s ease-in-out infinite; }
.jjc-typing i:nth-child(2) { animation-delay: .18s; }
.jjc-typing i:nth-child(3) { animation-delay: .36s; }
@keyframes jjc-dot { 0%, 60%, 100% { opacity: .28; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-4px); } }

/* --- 建议追问 --- */
.jjc-follow { margin: -6px 0 16px 40px; display: flex; flex-direction: column; gap: 8px; }
.jjc-follow-label { font-size: 11.0px;; color: var(--jjc-muted); letter-spacing: .06em; }
/* 2026-10-10 主人：预置问题气泡文字小 1 号（13 → 12） */
.jjc-chip {
  text-align: left;
  padding: 8px 12px;
  border: 1px solid rgba(201, 162, 39, .5);
  border-radius: 9px;
  background: #fff;
  color: var(--jjc-ink);
  font-size: 12px;
  line-height: 1.55;
  cursor: pointer;
  transition: background .2s ease, border-color .2s ease, transform .2s ease;
}
.jjc-chip::after { content: "→"; float: right; color: var(--jjc-gold); margin-left: 8px; }
.jjc-chip:hover { background: rgba(201, 162, 39, .1); border-color: var(--jjc-gold); transform: translateX(2px); }
.jjc-chip:focus-visible { outline: 2px solid var(--jjc-gold); outline-offset: 2px; }

/* --- 反馈条（仅当模型自评"没答好"时出现）--- */
.jjc-fb {
  margin: -6px 0 16px 40px;
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  font-size: 12px; color: var(--jjc-muted);
}
.jjc-fb-lbl { letter-spacing: .02em; }
.jjc-fb-btn {
  padding: 4px 11px;
  border: 1px solid var(--jjc-line);
  border-radius: 999px;
  background: #fff;
  color: var(--jjc-muted);
  font-size: 12px;
  line-height: 1.6;
  cursor: pointer;
  font-family: inherit;
  transition: border-color .2s ease, color .2s ease, background .2s ease;
}
.jjc-fb-btn:hover:not(:disabled) {
  border-color: rgba(165, 47, 79, .5);
  color: #A52F4F;
  background: rgba(165, 47, 79, .05);
}
.jjc-fb-btn:focus-visible { outline: 2px solid var(--jjc-gold); outline-offset: 2px; }
.jjc-fb-btn:disabled { cursor: default; }
.jjc-fb.is-done { color: #5A7699; }
.jjc-fb-btn.is-done {
  border-color: rgba(90, 118, 153, .35);
  color: #5A7699;
  background: rgba(90, 118, 153, .06);
}

/* --- 输入区 --- */
/* 2026-10-10 主人：底部说明小字号、单行不折行 */
.jjc-foot { flex: 0 0 auto; border-top: 1px solid var(--jjc-line); background: #fff; padding: 10px 12px 9px; font-size: 10.5px; }
.jjc-form { display: flex; align-items: flex-end; gap: 8px; }
/* 2026-10-10 主人：输入框字号 -2、灰更淡、保持两行 */
/* 2026-10-10 主人：输入框保持两行显示 */
.jjc-input {
  flex: 1 1 auto;
  min-height: 52px; max-height: 108px;
  padding: 10px 12px;
  border: 1px solid var(--jjc-line);
  border-radius: 10px;
  background: var(--jjc-paper);
  color: var(--jjc-text);
  font-size: 12.5px; line-height: 1.55;
  font-family: inherit;
  resize: none;
  transition: border-color .2s ease, box-shadow .2s ease;
}
.jjc-input:focus { outline: 0; border-color: var(--jjc-gold); box-shadow: 0 0 0 3px rgba(201, 162, 39, .16); }
.jjc-input::placeholder { color: rgba(120, 134, 150, .55); }
.jjc-send {
  flex: 0 0 auto;
  width: 40px; height: 40px;
  border: 0; border-radius: 10px;
  background: linear-gradient(135deg, #2F4A70, #24395a);
  color: #FFFFFF; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: opacity .2s ease, transform .2s ease;
}
.jjc-send:hover:not(:disabled) { transform: translateY(-1px); }
.jjc-send:disabled { opacity: .4; cursor: not-allowed; }
/* 2026-10-10 主人：底部说明单行不折行，超长省略 */
.jjc-foot-note { margin-top: 6px; font-size: 10px; color: var(--jjc-muted); text-align: center; line-height: 1.5; padding: 0 4px; }
.jjc-foot-note b { color: var(--jjc-ink); font-weight: 600; }

/* ============ PAD（640–1100px）============ */
@media (max-width: 1100px) {
  .jjc-root { left: 14px; }   /* 2026-10-10：左侧安全内缩，避开边缘手势返回区 */
  .jjc-panel {
    position: fixed; left: 14px; right: auto;
    top: calc(var(--nav-h, 42px) + 1px);
    bottom: 20px;
    width: 372px; height: auto;
  }
  /* 2026-10-10 主人：PAD 档同步字号与行距 */
  .jjc-bubble { max-width: 272px; font-size: 12.5px; line-height: 1.6; }
}

/* ============ 手机（≤640px）============ */
@media (max-width: 640px) {
  .jjc-root { left: 12px; }   /* 2026-10-10：手机档左侧安全内缩 */
  .jjc-launcher { padding: 10px 17px 10px 13px; font-size: 14px; }
  .jjc-launcher-icon { max-height: 28px; }
  .jjc-panel {
    position: fixed;
    left: 0; right: 0; bottom: 0; top: auto;
    width: 100%;
    height: 86vh;
    max-height: none;
    border-radius: 16px 16px 0 0;
    border-bottom: 0;
    transform: translateY(100%);
    transform-origin: center bottom;
  }
  .jjc-root.is-open .jjc-panel { transform: none; }
  /* 2026-10-10 主人：正文小 2 号（原 14.5 → 12.5）、行距紧凑 —— 此条此前覆盖了主规则 */
  /* 2026-10-10 主人：手机版答案正文再小 1 号（12.5 → 11.5），行距同步略收 */
  /* 2026-10-10 主人：手机答案文字再小 1 号（11.5 → 10.5） */
  .jjc-bubble { max-width: none; flex: 1 1 auto; font-size: 10.5px; line-height: 1.55; }
  .jjc-msg-bot .jjc-bubble { max-width: calc(100% - 42px); }
  .jjc-follow { margin-left: 0; }
  .jjc-fb { margin-left: 0; }
  .jjc-head { padding: 13px 46px 13px 14px; }
  .jjc-foot { padding: 9px 10px calc(9px + env(safe-area-inset-bottom, 0px)); }
}

/* ============ 独立页全屏模式（/ask.html 用；URL 加 ?jjc=full） ============ */
.jjc-root.jjc-full {
  position: static;
  display: block;
  right: auto;
  bottom: auto;
  padding: 24px 18px 40px;
}
.jjc-root.jjc-full .jjc-launcher { display: none !important; }
.jjc-root.jjc-full .jjc-panel {
  position: static;
  width: min(880px, 100%);
  height: min(72vh, 780px);
  margin: 0 auto;
  opacity: 1;
  transform: none;
  pointer-events: auto;
}
@media (max-width: 640px) {
  .jjc-root.jjc-full { padding: 0; }
  .jjc-root.jjc-full .jjc-panel {
    width: 100%;
    height: calc(100vh - 250px);
    min-height: 420px;
    border-radius: 14px 14px 0 0;
    border-bottom: 0;
    transform: none;
  }
}

/* ============ 无障碍：尊重"减少动态效果" ============ */
@media (prefers-reduced-motion: reduce) {
  .jjc-root *, .jjc-root *::before, .jjc-root *::after {
    animation-duration: .001ms !important;
    transition-duration: .001ms !important;
  }
}

/* ==========================================================================
   2026-10-10 主人要求：给「问捷界」胶囊加动态效果，引人注意
   分寸：入场抓眼 → 一次性光环 → 其后轻微呼吸；不持续闪烁
   无障碍：prefers-reduced-motion 下全部静止
   ========================================================================== */

/* ① 关键帧 */
/* 注意：入场**不得**从 opacity:0 开始——挂件 1.2 秒的"被拦截检测"会把
   opacity=0 误判为被广告插件隐藏，从而自动插入行内兜底入口（2026-10-10 实测踩坑）。
   故改为"从可见滑入"：始终可见，仅位移与轻微缩放。 */
@keyframes jjc-enter {
  0%   { opacity: 1; transform: translateY(calc(-50% + 26px)) scale(.86); }
  62%  { opacity: 1; transform: translateY(calc(-50% - 4px)) scale(1.04); }
  100% { opacity: 1; transform: translateY(-50%) scale(1); }
}
@keyframes jjc-breath {
  0%, 100% { opacity: .93; transform: translateY(-50%); }
  50%      { opacity: 1;   transform: translateY(calc(-50% - 2px)); }
}
@keyframes jjc-ring {
  0%   { opacity: .55; transform: scale(.92); }
  70%  { opacity: 0;   transform: scale(1.42); }
  100% { opacity: 0;   transform: scale(1.42); }
}

/* ② 入场 + 呼吸（叠加在既有 transition 之上，不冲突） */
.jjc-launcher {
  /* 垂直居中由胶囊自身完成（根容器不能带 transform，见上） */
  transform: translateY(-50%);
  animation: jjc-enter .58s cubic-bezier(.22, 1.2, .36, 1) 0s both,
             jjc-breath 4.6s ease-in-out 1.2s infinite;
  will-change: transform, opacity;
}

/* ③ 一次性光环：两圈错开扩出，入场后停止（最高调的一下） */
.jjc-launcher::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 2px solid rgba(201, 162, 39, .78);
  pointer-events: none;
  opacity: 0;
  animation: jjc-ring 2.2s cubic-bezier(.2, .7, .3, 1) 2s 2;
}

/* ④ 悬停/按下：即时反馈（覆盖呼吸，避免两套动画打架） */
.jjc-launcher:hover {
  animation: none;
  opacity: 1;
  transform: translateY(-50%);
}
.jjc-launcher:active {
  animation: none;
  opacity: 1;
}

/* ⑤ 无障碍：尊重系统"减弱动态效果" */
@media (prefers-reduced-motion: reduce) {
  .jjc-launcher { animation: none !important; opacity: 1; }
  .jjc-launcher::after { animation: none !important; content: none; }
}

/* ==========================================================================
   2026-10-10 主人：让钥匙图标动起来
   形制：钥匙轻微"转动一下"（像被拧动开锁）+ 白色高光扫过；
         每 7 秒触发一轮，其余时间静止——引注意但不干扰阅读。
   为何不用 GIF：GIF 仅单色全透明、体积大、红线在红底上易生白边；
         CSS 动效为真 alpha、零体积、随胶囊缩放且可随时调参。
   兼容：不支持 animateTransform 时静态显示，不影响使用。
   ========================================================================== */

/* 钥匙转动：以匙头为轴，先左后右再回正 —— 像"拧一下钥匙" */
@keyframes jjc-keyturn {
  0%, 58%  { transform: rotate(0deg); }
  64%      { transform: rotate(-13deg); }
  70%      { transform: rotate(11deg); }
  76%      { transform: rotate(-7deg); }
  82%      { transform: rotate(4deg); }
  88%, 100%{ transform: rotate(0deg); }
}
/* 高光扫过：白色柔光一闪，随即隐去 */
@keyframes jjc-keyglow {
  0%, 58%  { filter: none; }
  70%      { filter: drop-shadow(0 0 4px rgba(255, 255, 255, .95)) drop-shadow(0 0 9px rgba(255, 255, 255, .5)); }
  88%, 100%{ filter: none; }
}

.jjc-launcher-icon {
  transform-origin: 50% 55%;
  animation: jjc-keyturn 7s cubic-bezier(.36,.07,.19,.97) 1.2s infinite,
             jjc-keyglow 7s ease-in-out 1.2s infinite;
  will-change: transform, filter;
}

/* 面板左上角的小图标：从简，只做极轻的呼吸式高光，避免阅读时被牵走注意力 */
.jjc-head-mark img {
  animation: jjc-keyglow 7s ease-in-out 1.2s infinite;
  will-change: filter;
}

/* 无障碍：系统"减弱动态效果"时全部静止 */
@media (prefers-reduced-motion: reduce) {
  .jjc-launcher-icon,
  .jjc-head-mark img {
    animation: none !important;
    transform: none !important;
    filter: none !important;
  }
}

/* 竖标文字 —— 2026-10-10 主人指定样式：
       AI
       捷
       界
   实现方式刻意用**最朴素的块级堆叠**（不依赖 flex / writing-mode / 变换），
   由浏览器基本块级流决定排布，任何环境都不会走样。
   注：曾试过 writing-mode: vertical-rl（该模式为"列从左往右"，会并排成两列）
       与 flex-direction: column（实测未生效），均弃用。 */
.jjc-launcher-txt { display: block; text-align: center; line-height: 1; }
.jjc-launcher-mark,
.jjc-launcher-text {
  display: block;            /* 各占一行 */
  white-space: nowrap;
  word-break: keep-all;
  overflow-wrap: normal;
  line-height: 1.18;
}
.jjc-launcher-mark { font-weight: 700; font-size: 15px; letter-spacing: .02em; }
.jjc-launcher-text i { display: block; font-style: normal; font-size: 17px;
  letter-spacing: .04em; line-height: 1.14; }
.jjc-launcher-text { font-size: 17px; }
.jjc-launcher > img { display: block; margin: 0 auto; }
