/* ==========================================================================
   收藏库 v3.0 · 移动端适配（第一阶段：①②③④⑤⑦⑨）
   --------------------------------------------------------------------------
   所有规则收在 ≤768px 断点内，与 PC 样式（components.css / page.css）隔离；
   移动端为 ≤768 的默认体验，不用 URL 参数开关（PRD §3 D2）。
   颜色/圆角/间距一律引用 tokens.css；尺寸按视口公式计算，见 App._syncMobileMetrics。
   ========================================================================== */

/* PC 端不显示移动专属壳体 */
.ck-fab,
.ck-anchor,
.ck-anchor-mask { display: none; }

@media (max-width: 768px) {

  /* 设计基准占位（393×852）；JS 启动时按实际视口重写这组变量（360 宽自动等比缩小）
     v3.0.1：Safari 内容区本身已从状态栏下方开始，设计稿的 59pt 状态栏不再叠加，
     仅保留真正的安全区（刘海屏 PWA / 全屏时 env 才有值）。 */
  :root {
    --mcols: 4;
    --m-card-w: 86px;
    --m-card-h: 136px;
    --m-scale: .632;
    --m-pitch: 148px;
    --m-safe-top: env(safe-area-inset-top, 0px);
    --m-topbar-h: calc(var(--m-safe-top) + 76px);   /* 安全区 + 导航行 60 + 底部 16 */
    --ease-tab: cubic-bezier(.25, .1, .25, 1);      /* 一级 tab 挤压过渡：标准缓入缓出，避免前段突进 */
  }

  html, body {
    width: 100%;
    max-width: 100%;
    height: 100%;
    overflow-x: hidden;                        /* v3.0.1：禁止页面横向滚动 */
    overscroll-behavior-x: none;               /* v3.0.1：iOS 边缘横滑不带动页面 */
  }
  html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }   /* 禁止横屏/大字号时对文字自动放大 */
  body {
    overflow: hidden;                          /* 滚动只发生在 #contentScroll 内 */
    background: var(--c-surface);              /* 移动端页面底色：近白（设计稿 393 帧底色） */
    touch-action: pan-y pinch-zoom;            /* v3.0.1：只允许纵向滑动，禁掉左右划动 */
  }

  /* iOS Safari：输入控件字号 <16px 时，聚焦会自动放大页面（约 1.14 倍）且退出后不还原，
     导致页面宽高看起来「不适配窗口」。移动端输入控件统一 16px（v3.0.1）。 */
  .lock-input,
  .ck-input,
  .pg-search__input {
    font-size: 16px;
    line-height: 1.25;
  }

  /* ---------- 应用外壳：固定顶栏 + 全屏内容区（宽高严格跟随视口） ---------- */
  .ck-app {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    min-height: 0;
    height: 100vh;
    height: 100dvh;
    padding: 0;
    overflow: hidden;
  }
  .lock-card {
    width: calc(100vw - 32px);                 /* 393 帧：左右各 16.5，卡宽收口 360 */
    max-width: 360px;
    padding-left: 48px;                        /* 与 PC 同一内容栅格：输入/按钮 264 宽 */
    padding-right: 48px;
  }

  /* ---------- ① 一级导航（76 导航行 + 16 淡出；不再叠加设计稿 59 状态栏） ---------- */
  .ck-topbar {
    position: fixed;
    left: 0; right: 0; top: 0;
    z-index: 40;
    width: 100%;
    max-width: 100%;
    height: var(--m-topbar-h);
    padding: var(--m-safe-top) 12px 0;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    background: var(--c-bg);
  }
  .ck-topbar::after {                          /* 导航行底部 16：近白矩形 + 上方两角 r16（Figma 13:1555） */
    content: "";
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 16px;
    background: var(--c-surface);
    border-radius: 16px 16px 0 0;
    pointer-events: none;
  }
  .ck-topbar__tabs {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    width: 100%;
    min-width: 0;
    height: 60px;
    overflow: hidden;
  }
  .ck-topbar__actions { display: none; }       /* PC 六个图标入口移至 FAB / v3.1 */

  .ck-toptab {                                 /* 未激活 56×60 / 激活 90×60，图标 36↔48 */
    display: flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 60px;
    flex: 0 1 56px;                            /* 360 及以下按比例收窄，避免 6 项合计超宽 */
    min-width: 0;
    /* v3.2 验收修改：flex 项主轴尺寸由 flex-basis 决定，只过渡 width 时选中态仍会瞬跳；
       同时过渡 flex-basis，56↔90 的占位宽度才真正逐帧变化。
       缓动由 --ease-modal-in（10% 时间已走 35%，前段过急）改为标准缓入缓出，
       时长 240ms，挤压/回缩的重心落到中段，观感更连续。 */
    transition: flex-basis .24s var(--ease-tab), width .24s var(--ease-tab);
  }
  .ck-toptab.is-active { width: 90px; flex-basis: 90px; }
  .ck-toptab__active {                         /* 共用 PC 选中底衬切图，按设计稿槽位 90×56 拉伸（比例误差 <1.5%） */
    left: calc(50% - 45px);
    top: 4px;
    width: 90px;
    height: 56px;
    /* v3.2 第 8 项：移动端改 180ms 淡入淡出（旧 tab 同时淡出，形成交叉淡化），不走 PC 的 clip-path 展开 */
    clip-path: none;
    opacity: 0;
    transition: opacity .18s ease;
  }
  .ck-toptab.is-active .ck-toptab__active { opacity: 1; }
  .ck-toptab__icon {
    position: static;
    /* v3.2 验收修改：两种状态都顶对齐，未激活用 translateY(12px) 还原居中；
       之前 align-self 从 center 瞬切 flex-start 会让 36px 图标先上跳 12px 再放大。
       36→48 与 12→0 同时过渡时底边恒定在 48px，图标是「向上长高」而不是顶边跳、底边追。 */
    align-self: flex-start;
    width: 36px;
    height: 36px;
    transform: translateY(12px);
    transform-origin: 50% 100%;
    transition: width .24s var(--ease-tab),
                height .24s var(--ease-tab),
                transform .24s var(--ease-tab);
  }
  .ck-toptab.is-active .ck-toptab__icon {
    position: static;
    left: auto; top: auto;
    align-self: flex-start;                    /* 设计稿：激活图标 48×48 顶对齐（非居中） */
    width: 48px;
    height: 48px;
    transform: translateY(0);
  }
  .ck-toptab__label { display: none; }         /* 移动端仅图标 */

  /* 骨架屏卡位跟随移动端尺寸（v2.7 骨架结构不变，只换槽位） */
  .pg-sk-card { width: var(--m-card-w); height: var(--m-card-h); }
  .pg-sk-card > span { left: 0; top: 0; width: 100%; height: 100%; }

  /* ---------- 内容区 ---------- */
  .ck-stage {
    flex: 1;
    min-height: 0;
    width: 100%;
    max-width: 100%;
    display: flex;
    flex-direction: column;
    gap: 0;
    padding: var(--m-topbar-h) 12px 0;
    background: transparent;
    border: 0;
    border-radius: 0;
  }
  .ck-sidenav { display: none; }               /* 移动端以顶栏 + FAB 锚点面板替代侧栏 */
  .ck-main { flex: 1; min-width: 0; width: 100%; min-height: 0; height: auto; display: flex; flex-direction: column; gap: 0; }
  .ck-filterbar { display: none; }             /* 筛选面板属 v3.1；v3.0 只保留浏览闭环 */
  .ck-scroll {
    flex: 1;
    min-height: 0;
    width: 100%;
    max-width: 100%;
    overflow-y: auto;
    overflow-x: hidden;                       /* v3.0.4：仅设 overflow-y:auto 时 overflow-x 计算为 auto，
                                                 iOS 会在圆角裁剪的滚动容器内仍可横向拖动/回弹 */
    overscroll-behavior-x: none;              /* 同上：禁掉容器内横向 overscroll */
    touch-action: pan-y pinch-zoom;           /* 只允许纵向拖动与双指缩放 */
    gap: 16px;
    padding: 8px 0 84px;                      /* 顶部 8 避让；底部留白，避免 FAB / 顶栏遮住末卡 */
    border-radius: 6px;
    -webkit-overflow-scrolling: touch;
  }

  /* ---------- ③ 卡片列表（4 / 3 列，尺寸随视口计算） ---------- */
  .ck-cat-title { padding: 0 4px; }
  .ck-seriesblock { gap: 16px; padding-bottom: 8px; }   /* 系列头→网格 16；块底 8 + 滚动区 gap 16 = 24 */
  .ck-series { padding: 0 4px; }                /* 小类标题行左右各 4（右侧为 +添加 按钮预留） */
  .ck-series__add { display: inline-flex; align-items: center; height: 16px; }   /* v3.1 恢复「+ 添加」（D6 解除） */

  .ck-grid {
    grid-template-columns: repeat(var(--mcols), var(--m-card-w));
    column-gap: 3px;
    row-gap: 12px;
    grid-auto-rows: var(--m-card-h);
    padding: 8px 8px 12px;                     /* 底部 6 层板 + 6 空气（设计稿网格框高 8+444） */
    border-radius: 8px;
    background: var(--c-bg);
  }
  /* 层架：节距＝卡片高＋12；每行卡片底部落板，末行底板完整（PRD §2.3 D4） */
  .ck-grid:not(.is-empty)::after {
    left: 8px; right: 8px; top: 8px; bottom: 0;
    background-image:
      linear-gradient(to bottom,
        transparent 0 var(--m-card-h),
        var(--c-surface) var(--m-card-h) calc(var(--m-card-h) + 6px),
        transparent calc(var(--m-card-h) + 6px) var(--m-pitch)),
      linear-gradient(to bottom,
        transparent 0 var(--m-card-h),
        var(--c-white) var(--m-card-h) calc(var(--m-card-h) + 6px),
        transparent calc(var(--m-card-h) + 6px) var(--m-pitch));
    background-size:
      calc(100% - 2px) var(--m-pitch),
      100% var(--m-pitch);
    background-position: 1px 0, 0 0;
    background-repeat: repeat-y;
    filter: drop-shadow(0 2px 2px var(--c-hover));
  }

  /* 卡片整体等比缩放（卡面/覆层/标签/阴影共用同一素材，不重切） */
  .ck-ticket { transform: scale(var(--m-scale)); transform-origin: 0 0; }
  .ck-ticket.is-pressing:not(.dragging) { transform: scale(calc(var(--m-scale) * .96)); }
  .ck-ticket.dragging { transform: scale(calc(var(--m-scale) * .96)); }
  .ck-ticket.is-rebound:not(.dragging) { transition: transform 280ms var(--ease-spring); }

  /* ⑨ 大卡片触控：按住拖动倾斜，松手 180ms 回弹（参数见 Form._initTouchTilt） */
  .ck-bigcard { touch-action: none; }
  .ck-bigcard.is-resetting,
  .ck-bigcard.is-resetting .ck-bigcard__poster,
  .ck-bigcard.is-resetting .ck-bigcard__overlay,
  .ck-bigcard.is-resetting .ck-bigcard__sheen::before {
    transition: transform 180ms var(--ease-modal-out);
  }

  /* ---------- ② 悬浮按钮（57 宽；收起 57×57 / 展开 pad8 + 40 格） ---------- */
  .ck-fab {
    position: fixed;
    right: 16px;
    bottom: 36px;                                /* v3.0.7：不再叠加底部安全区，36pt 已足够 */
    z-index: 60;
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 57px;
    padding: 0;
    background: var(--c-surface);
    border-radius: 16px;
    box-shadow: var(--shadow-pop);
    transition: padding .18s var(--ease-modal-in);
  }
  .ck-fab.is-open { padding: 8px; }             /* 展开态四周内间距（含底部，v3.0.1 验收意见 3） */
  .ck-fab__menu {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: 41px;
    max-height: 0;
    opacity: 0;
    overflow: hidden;
    transition: max-height .18s var(--ease-modal-in), opacity .18s ease;
  }
  .ck-fab.is-open .ck-fab__menu { max-height: 300px; opacity: 1; margin-bottom: 8px; }   /* v3.2 复核：6 钮 40 + 6 间隙 8 + 1px 分隔 = 289，300 足够 */
  /* v3.2：分割线移至中部（版本信息与分类管理之间），1px / 宽 24 居中 / 浅背景令牌 */
  .ck-fab__divider {
    flex: none;
    align-self: center;
    width: 24px;
    height: 0;
    border-top: 1px solid var(--c-bg);
  }
  .ck-fab__btn,
  .ck-fab__toggle {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--c-subtitle);
    -webkit-tap-highlight-color: transparent;  /* v3.1 验收修改：与按钮组件一致，去掉 UA 点击蒙层 */
    transition: background-color .12s ease, color .12s ease, transform .24s var(--ease-spring);
  }
  .ck-fab__btn {
    width: 41px;
    height: 40px;
    flex: none;
    border-radius: 12px;
    background: var(--c-bg);
  }
  .ck-fab__btn .ck-icon { width: 16px; height: 16px; }
  .ck-fab__toggle {
    width: 57px;
    height: 57px;
    border-radius: 16px;
    transition: width .18s var(--ease-modal-in), height .18s var(--ease-modal-in),
                background-color .12s ease, border-radius .18s ease,
                color .12s ease, transform .24s var(--ease-spring);
  }
  .ck-fab.is-open .ck-fab__toggle {            /* 收起按钮用近白底，与其余中按钮区分 */
    width: 41px; height: 41px;
    border-radius: 12px;
    background: var(--c-surface);
  }
  /* v3.1 验收修改：FAB 菜单项补按钮组件点击态——点击色 + 缩至 .94 回弹 */
  .ck-fab .ck-fab__btn:active, .ck-fab .ck-fab__btn.is-press {
    background: var(--c-stroke);
    color: var(--c-subtitle);
    transform: scale(.94);
    transition: background-color .1s ease, color .1s ease, transform .08s ease-out;
  }
  /* v3.2 第 7 项：展开/收起主按钮单独补按压反馈（scale .98 / 100ms），菜单项不动
     v3.2 验收修改：主按钮本身就是白底圆钮，按下再铺一层 --c-stroke 会读成整块灰蒙层；
     只保留缩小反馈，底色/字色沿用各自状态（收起态透明、展开态近白） */
  .ck-fab .ck-fab__toggle:active, .ck-fab .ck-fab__toggle.is-press {
    transform: scale(.98);
    transition: transform .1s ease-out;
  }
  .ck-fab__toggle .ck-icon {
    width: 16px;                               /* 收起/展开同尺寸（Figma 中按钮 icon 16） */
    height: 16px;
    transform: rotate(180deg);                 /* 收起态 ▲ */
    transition: transform .18s var(--ease-modal-in);
  }
  .ck-fab.is-open .ck-fab__toggle .ck-icon { transform: rotate(0deg); }   /* 展开态 ▼ */

  /* ---------- ④ 锚点定位导航（非模态、不锁滚动；顶 60 / 底 36） ---------- */
  .ck-anchor-mask {                            /* v3.0.1：锚点面板蒙层，层级高于 FAB（60） */
    display: block;
    position: fixed;
    inset: 0;
    z-index: 64;
    background: var(--c-mask);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .18s ease, visibility 0s linear .18s;
  }
  .ck-anchor-mask.is-open {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transition: opacity .18s ease;
  }
  .ck-anchor {
    position: fixed;
    left: 16px;
    top: 60px;
    z-index: 65;                              /* 高于蒙层（64），蒙层覆盖 FAB 与内容 */
    display: flex;
    flex-direction: column;
    width: 160px;
    max-height: calc(100dvh - 60px - 36px);     /* 高度随内容，超出内部滚动（T1：顶 60 / 底 36） */
    padding: 16px 14px;                         /* 横向 14 使定位行满 132 宽 */
    background: var(--c-bg);
    border-radius: 12px;
    box-shadow: var(--shadow-pop);
    opacity: 0;
    visibility: hidden;
    /* v3.0.5：与半弹窗拉起同节奏，从左侧边缘整体滑出/收回（left 16 + 自身宽度） */
    transform: translateX(calc(-100% - 16px));
    transition: opacity .18s ease, transform .18s var(--ease-modal-out), visibility 0s linear .18s;
  }
  .ck-anchor.is-open {
    opacity: 1;
    visibility: visible;
    transform: none;
    transition: opacity .18s ease, transform .18s var(--ease-modal-in), visibility 0s;
  }
  .ck-anchor__body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 16px;
    -webkit-overflow-scrolling: touch;
  }
  .ck-anchor__group { display: flex; flex-direction: column; gap: 4px; }
  .ck-anchor__title {
    font: var(--fw-semibold) var(--fs-14)/var(--lh-14) var(--font);
    color: var(--c-title);
  }
  .ck-anchor__row {
    position: relative;
    display: flex;
    align-items: center;
    width: 100%;
    height: 32px;
    padding: 8px 16px;
    border-radius: 6px;
    font: var(--fw-regular) var(--fs-14)/var(--lh-14) var(--font);
    color: var(--c-subtitle);
    text-align: left;
  }
  .ck-anchor__row.is-active { color: var(--c-title); }
  .ck-anchor__row.is-active::after {
    content: "";
    position: absolute;
    left: 0; top: 8px;                         /* 设计稿：选中竖线贴行左缘（Figma 13:1628） */
    width: 4px; height: 16px;
    border-radius: 3px;
    background: var(--c-text);
  }
  .ck-anchor__row:active { background: var(--c-hover); }
  .ck-anchor__empty {
    font: var(--fw-regular) var(--fs-13)/var(--lh-13) var(--font);
    color: var(--c-muted);
  }

  /* ---------- ⑤ 移动端通用半弹窗 ---------- */
  .ck-overlay--sheet { align-items: flex-end; justify-content: center; }
  /* v3.1：三张稿统一 16 上/左右内边距 + 16 模块间距，底部 0（30 安全距由页脚承担）
     筛选 398＝16+280+16+86；标签/分类 732＝16+34+16+564+16+86；编辑 542＝48+392+16+86 */
  .ck-sheet {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 16px;
    width: 100%;
    max-height: calc(100dvh - 60px);
    padding: 16px 16px 0;
    background: var(--c-surface);
    border-radius: 12px 12px 0 0;
    animation: ck-sheet-in 180ms var(--ease-modal-in) both;
  }
  .ck-overlay.is-closing .ck-sheet { animation: ck-sheet-out 180ms var(--ease-modal-out) both; }
  @keyframes ck-sheet-in  { from { transform: translateY(100%); } }
  @keyframes ck-sheet-out { to   { transform: translateY(100%); } }
  .ck-sheet__title {
    flex: none;
    margin: 0;
    padding: 8px 0;
    font: var(--fw-semibold) var(--fs-18)/var(--lh-18) var(--font);
    color: var(--c-title);
  }
  .ck-sheet__body { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
  .ck-sheet__footer {
    flex: none;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 16px;
    padding-top: 8px;
    padding-bottom: 30px;                      /* 不叠加安全区（用户 2026-11-09 确认，30 已够用） */
  }
  .ck-sheet__footer .ck-btn { min-width: 0; }
  /* ⑦ 大按钮档：48 高 / r16 / icon18 / 字 16；按钮等分 361 内容宽（393 下各 172.5），随视口收窄 */
  .ck-sheet__footer .ck-btn--lg {
    flex: 1 1 0;
    font: var(--fw-regular) var(--fs-16)/var(--lh-16) var(--font);
  }
  .ck-sheet__footer .ck-btn--lg:only-child { flex: none; }
  .ck-sheet .dlg-ver__body { width: auto; max-height: none; }
  .ck-sheet--ver { padding-bottom: 0; }         /* v3.0.1：版本面板无底部按钮，列表延伸到底（Figma 13:1743） */

  /* ==========================================================================
     v3.1 ⑥ 小弹窗通用规格（移动端，Figma 13:1890/1935/1950/1958）
     360 / r20 / pad24 / 标题 18-600 / 模块间距 24 / 内容区 312 / 输入 14
     按钮：中按钮等分；无删除位 150+150，有删除位 40 + 124 + 124（间距 12）
     PC 端布局不变（以下规则收在移动断点内）
     ========================================================================== */
  .ck-dialog--mini {
    width: min(360px, calc(100vw - 24px));
    gap: 24px;
    padding: 24px;
  }
  .ck-dialog--mini .ck-dialog__slot { gap: 12px; }
  /* 稿内输入 14/16（覆盖全局 16px 防缩放规则；按设计稿还原） */
  .ck-dialog--mini .ck-dialog__hint { line-height: 16px; }
  /* 二次确认正文：按稿 3A 14/400 lh16 正文色（PC 不变） */
  .ck-dialog--mini .ck-dialog__desc { color: var(--c-text); line-height: 16px; }
  .ck-dialog--mini .ck-dialog__footer { justify-content: center; gap: 12px; }
  .ck-dialog--mini .ck-dialog__footer .ck-btn { flex: 1 1 0; min-width: 0; }
  /* 删除位 40×40：需与上一行 .ck-dialog__footer .ck-btn（0,3,0）同特异性并后置，否则被等分规则覆盖 */
  .ck-dialog--mini .ck-dialog__footer .ck-dialog__del { flex: 0 0 40px; min-width: 40px; width: 40px; padding: 0; }

  /* ==========================================================================
     v3.1 ⑩⑪ 管理半弹窗（标签管理 / 分类管理）
     ========================================================================== */
  /* 稿高 732＝视口 852−120；按稿固定高度（732＝16+34+16+564+16+86），矮屏内容区滚动 */
  .ck-sheet--mg { height: calc(100dvh - 120px); max-height: calc(100dvh - 120px); }
  .dlg-mg-flow { display: flex; flex-direction: column; }
  /* v3.1：列表内容超出半弹窗高度时整体滚动，各分组不可被 flex 压缩（否则「+ 添加分类」被压成 16 高） */
  .dlg-mg-flow > * { flex: none; }
  #mgTagBody { gap: 16px; padding: 0; }
  #mgTagBody .dlg-mg-group { gap: 12px; }
  #mgCatBody { gap: 12px; padding: 0; }   /* 稿内中类组与「+ 添加分类」间距均 12 */
  #mgCatBody .dlg-mg-group { gap: 12px; }

  /* 组头：标签管理＝24 图标 + 16/600/24；分类管理＝32 行（无底色 + 三角 + 编辑位） */
  .dlg-mg-flow .dlg-mg-head--sheet { height: 24px; padding: 0; gap: 6px; }
  .dlg-mg-flow .dlg-mg-head--sheet .dlg-mg-mid {
    font: var(--fw-semibold) var(--fs-16)/24px var(--font);
    color: var(--c-subtitle);
    min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .dlg-mg-flow .dlg-mg-head--sheet .dlg-mg-caticon { width: 24px; height: 24px; }

  #mgCatBody .dlg-mg-head--sheet {
    height: 32px;
    padding: 0 4px;
    gap: 6px;
    border-radius: var(--r-md);
    background: none;
    cursor: pointer;
  }
  /* v3.1 验收修改：中类名称行（展开/折叠）均不加背景色 */
  #mgCatBody .dlg-mg-head--sheet .dlg-mg-arrow { width: 16px; height: 16px; color: var(--c-subtitle); flex: none; }
  #mgCatBody .dlg-mg-head--sheet .dlg-mg-mid { flex: 1; min-width: 0; color: var(--c-subtitle); }
  .dlg-mg-edit {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px; height: 24px;
    padding: 0;
    border: 0;
    background: none;
    color: var(--c-subtitle);
    cursor: pointer;
  }
  .dlg-mg-edit .ck-icon { width: 16px; height: 16px; }

  /* 子类行 40/r12；系列名 14/400 标题色 + 计数；行距 4 */
  #mgCatBody .dlg-mg-subs { gap: 4px; }
  #mgCatBody .dlg-mg-sub--sheet { height: 40px; padding: 0 12px; border-radius: var(--r-lg); }
  #mgCatBody .dlg-mg-sub--sheet .ck-tagrow__name { color: var(--c-title); }
  #mgCatBody .dlg-mg-sub--sheet .ck-tagrow__count { font-size: var(--fs-14); line-height: var(--lh-14); }
  #mgCatBody .dlg-mg-add--sheet { height: 40px; padding: 0 12px; border-radius: var(--r-lg); background: none; }
  /* + 添加分类：97×32 浅底 r8 / 13-400 副标色 */
  .dlg-mg-addmid-sheet {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 97px;
    height: 32px;
    padding: 0;
    border: 0;
    border-radius: var(--r-md);
    background: var(--c-bg);
    font: var(--fw-regular) var(--fs-13)/var(--lh-13) var(--font);
    color: var(--c-subtitle);
    cursor: pointer;
  }
  /* .dlg-mg-addmid-sheet:active → 通用按下反馈（不引入 hover） */

  /* 标签格：两列 179 宽 / 40 高 / r12 / 近白底；列距 3 行距 4 */
  #mgTagBody .dlg-mg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 3px; row-gap: 4px; }
  #mgTagBody .dlg-mg-grid .ck-tagrow { height: 40px; padding: 0 12px; cursor: pointer; }
  #mgTagBody .dlg-mg-grid .ck-tagrow__name { color: var(--c-title); }

  /* ==========================================================================
     v3.1 ⑬ 卡片编辑半弹窗（上下结构：大卡预览 + 纵向表单）
     ========================================================================== */
  /* 542＝48 上距 + 392 表单（6 块 × 24 间距）+ 16 + 86 页脚；标题不显示（Figma 13:1764） */
  .ck-sheet--editm { padding-top: 48px; }
  .ck-editm { position: relative; }
  /* 大卡 272×432 按 .65 缩放到 176.8×280.8，绝对定位在表单上方：
     卡底越过半弹窗顶 30，与首个输入框留 18 */
  /* --es：预览缩放，默认 .65（393×852 稿）；矮屏由 JS 按可用高度下调，避免卡顶出界 */
  .ck-editm__preview {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 18px);
    display: flex;
    align-items: flex-end;
    justify-content: center;
    width: calc(272px * var(--es, .65));
    height: calc(432px * var(--es, .65));
    transform: translateX(-50%);
    z-index: 1;
  }
  /* v3.1 验收修改：预览卡顺时针 4°（与设计稿卡片倾角一致） */
  .ck-editm__scaler { flex: none; width: 272px; height: 432px; transform: scale(var(--es, .65)) rotate(4deg); transform-origin: 50% 100%; }
  .ck-editm .ck-bigcard { touch-action: none; }
  .ck-editm .ck-bigcard__poster-window { cursor: pointer; }
  .ck-editm .ck-editform { width: 100%; gap: 24px; }
  .ck-editm .ck-editform__name-wrap,
  .ck-editm .ck-editform__cat-wrap,
  .ck-editm .ck-editform__name,
  .ck-editm .ck-editform__cat,
  .ck-editm .ck-editform__notes { width: 100%; }
  /* v3.1 验收修改：输入框统一 16px（占位与已输入一致，避免 iOS 聚焦放大；下拉选项仍为 14） */
  /* 分类触发按钮：40/r12 浅底 / 14-400 副标色 / 左 12 右 16 / 三角 16 */
  .ck-editm .ck-editform__cat { background: var(--c-bg); color: var(--c-subtitle); padding: 0 16px 0 12px; gap: 8px; }
  .ck-editm .ck-editform__cat > span {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-align: left;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .ck-editm .ck-editform__status,
  .ck-editm .ck-editform__grade { width: 100%; justify-content: space-between; }
  .ck-editm .ck-editform__status .ck-seg-btn { flex: 1 1 0; min-width: 0; padding: 0; }
  .ck-editm .ck-editform__grade .ck-seg-btn { flex: 1 1 0; width: auto; min-width: 0; padding: 0 4px; }
  .ck-editm .ck-seg-grade-img { width: 100%; max-width: 60px; height: auto; max-height: 30px; }
  /* 标签 GRID：一行 3 个 115×32；内容居中；未选虚线 1px 描边色，选中深底 */
  .ck-editm .dlg-tag-chips {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px;
  }
  .ck-editm .dlg-tag-chips .ck-btn {
    width: 100%;
    min-width: 0;
    justify-content: center;
    gap: 6px;
    padding: 0 8px;
    border: 1px dashed var(--c-stroke);
    box-shadow: none;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
  .ck-editm .dlg-tag-chips .ck-btn > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  .ck-editm .dlg-tag-chips .ck-btn--primary { border-color: var(--c-title); }
  .ck-editm .dlg-tag-chips .ck-chip-icon { width: 14px; height: 14px; }
  /* 名称搜索浮层：输入框下 16 / 361×422 / pad12 gap12 / r12 / 弹出投影；分组标题 12-400；结果行 72 */
  .ck-editm .dlg-search-pop {
    top: calc(100% + 16px);
    max-height: 422px;
    padding: 12px;
    gap: 12px;
    border-radius: var(--r-lg);
    box-shadow: var(--shadow-pop);
  }
  .ck-editm .dlg-search-group { gap: 4px; }
  .ck-editm .dlg-search-group + .dlg-search-group {
    margin-top: 0;
    padding-top: 12px;
    border-top: 1px dashed var(--c-stroke);
  }
  .ck-editm .dlg-search-group-title {
    padding: 0 4px;
    font: var(--fw-regular) var(--fs-12)/14px var(--font);
    color: var(--c-muted);
  }
  .ck-editm .dlg-search-item { min-height: 72px; padding: 4px; gap: 8px; border-radius: var(--r-md); }
  .ck-editm .dlg-search-item:active { background: var(--c-bg); }
  .ck-editm .dlg-search-thumb { width: 48px; height: 64px; border-radius: 4px; }
  .ck-editm .dlg-search-info { gap: 4px; }
  .ck-editm .dlg-search-name { font: var(--fw-semibold) var(--fs-14)/16px var(--font); color: var(--c-title); }
  .ck-editm .dlg-search-year { font: var(--fw-regular) var(--fs-12)/14px var(--font); color: var(--c-text); }
  /* 底部：删除 48 icon-only + 取消/确定 等分（编辑态 140.5，新增态 172.5，间距 16） */
  .ck-sheet--editm .ck-editm__footer { justify-content: center; gap: 16px; }
  .ck-sheet--editm .ck-editm__del { flex: 0 0 48px; width: 48px; min-width: 48px; padding: 0; }

  /* ==========================================================================
     v3.1 ⑫ 筛选半弹窗（高度跟随内容；蒙层可关闭）
     ========================================================================== */
  .ck-sheet--filtersheet { padding-bottom: 0; }
  /* 398 稿：16 +（8 + 40×3 + 24×3 + 72 + 8）+ 16 + 86 */
  .ck-filtersheet {
    flex: 0 1 auto;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 24px;
    padding: 8px 0;
    -webkit-overflow-scrolling: touch;
  }
  .ck-filtersheet__search { width: 100%; }
  .ck-filtersheet__seg { width: 100%; justify-content: space-between; }
  .ck-filtersheet__seg .ck-seg-btn { flex: 1 1 0; min-width: 0; padding: 0; }
  /* 评分槽：与状态同规格 40 高浅底 r12 / pad4 gap4，5 个 67×32 切图按钮 */
  .ck-filtersheet__grades {
    display: flex;
    align-items: center;
    gap: 4px;
    height: 40px;
    padding: 4px;
    border-radius: var(--r-lg);
    background: var(--c-bg);
  }
  .ck-filter-grade {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 0;
    min-width: 0;
    height: 32px;
    padding: 0 4px;
    border: 0;
    border-radius: var(--r-md);
    background: var(--c-bg);
    cursor: pointer;
  }
  .ck-filter-grade img { width: 100%; max-width: 60px; height: auto; max-height: 30px; object-fit: contain; }
  .ck-filter-grade.is-active { background: var(--c-title); }
  .ck-filtersheet__tags {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px;
  }
  .ck-filter-tag {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-width: 0;
    height: 32px;
    padding: 0 8px;
    border: 1px dashed var(--c-stroke);
    border-radius: var(--r-md);
    background: transparent;
    color: var(--c-subtitle);
    font: var(--fw-regular) var(--fs-13)/var(--lh-13) var(--font);
    cursor: pointer;
    overflow: hidden;
  }
  .ck-filter-tag > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .ck-filter-tag__icon { width: 14px; height: 14px; flex: none; object-fit: contain; }
  .ck-filter-tag.is-active {
    background: var(--c-title);
    border-color: var(--c-title);
    color: var(--c-surface);
  }
  .ck-sheet--filtersheet .ck-sheet__footer { justify-content: center; gap: 16px; }

  /* 减少动态：拉起/收起、FAB、锚点面板全部瞬时切换 */
  @media (prefers-reduced-motion: reduce) {
    .ck-sheet,
    .ck-overlay.is-closing .ck-sheet { animation: none; }
    .ck-fab,
    .ck-fab__menu,
    .ck-fab__toggle,
    .ck-fab__toggle .ck-icon,
    /* v3.0.6：.is-open 与 .is-open 的 transition 声明（0,2,0）优先于基础选择器（0,1,0），
       必须原样点名，否则减少动态下锚点面板仍会滑 180ms */
    .ck-anchor,
    .ck-anchor.is-open,
    .ck-anchor-mask,
    .ck-anchor-mask.is-open { transition: none; }
    .ck-toptab, .ck-toptab__icon { transition: none; }
    /* v3.2 第 8 项：reduce 下 tab 底衬瞬时切换。状态选择器（0,3,0）权重高于基础选择器，
       必须连同 .is-active 原样点名，否则 180ms 淡入仍生效 */
    .ck-toptab__active,
    .ck-toptab.is-active .ck-toptab__active { transition: none; }
    /* v3.2 第 7 项：FAB 收起键按压不引入过渡（瞬时反馈） */
    .ck-fab .ck-fab__toggle:active,
    .ck-fab .ck-fab__toggle.is-press { transition: none; }
  }
}

/* 窄屏但使用鼠标（如缩窄的桌面窗口）：hover 上浮需叠加基准缩放，避免丢失卡片尺寸 */
@media (max-width: 768px) and (hover: hover) and (pointer: fine) {
  .ck-ticket:hover { transform: scale(var(--m-scale)) translateY(-6px); }
  .ck-ticket:hover.is-pressing:not(.dragging) { transform: scale(calc(var(--m-scale) * .96)) translateY(-6px); }
}
@media (max-width: 768px) and (prefers-reduced-motion: reduce) {
  .ck-ticket.is-pressing:not(.dragging),
  .ck-ticket.is-rebound:not(.dragging) { transform: scale(var(--m-scale)); }
  .ck-ticket:hover.is-pressing:not(.dragging) { transform: scale(var(--m-scale)) translateY(-6px); }
}
