
/* ============================================================================
   style.css —— 阶段3 真实 UI 样式
   由 miniprogram/app.acss + pages/index/index.acss 合并转译:
     · page{} → html,body{}
     · Nrpx → calc(N * var(--rpx)),--rpx 按屏宽缩放(750rpx=屏宽)
     · 1rpx → 1px(边框,视觉等价)
   变量(--txt/--glass-rgb/--me-bg...)定义在 .app / .app.dark,主题靠根节点 class 切。
   ============================================================================ */
:root {
  --shell-ui-build:"63.4.12";
  /* 小程序 750rpx = 屏宽 → 1rpx = 屏宽/750。用 vw 让其随屏宽自适应(iPhone 各机型通用)。
     × 1.1 整体放大系数:真机实测纯 100vw/750 偏小(PWA Safari 视觉基准比小程序略小),
     放大 10% 更舒适。要再调只动这一个数。 */
  /* 恢复 V61.5.9 的手机设计基准：所有既有组件继续按 750rpx 随容器等比适配。 */
  --rpx: calc(100vw / 750 * 1.1);
  /* 圆角体系(4 档 + 全圆),归并散落魔法数字,统一苹果美学阶梯:
     sm=小按钮/tag 12rpx · md=卡片内小块 16rpx · lg=卡片 20rpx · xl=弹窗/大卡片 28rpx · pill=全圆 */
  --r-sm: calc(12 * var(--rpx));
  --r-md: calc(16 * var(--rpx));
  --r-lg: calc(20 * var(--rpx));
  --r-xl: calc(28 * var(--rpx));
  --r-pill: calc(999 * var(--rpx));
  /* 全站正文只使用这 7 档字号。它们映射既有 750rpx 数值，不改变页面比例。 */
  --type-caption: calc(20 * var(--rpx));
  --type-footnote: calc(22 * var(--rpx));
  --type-secondary: calc(24 * var(--rpx));
  --type-body: calc(26 * var(--rpx));
  --type-action: calc(28 * var(--rpx));
  --type-title: calc(34 * var(--rpx));
  --type-display: calc(40 * var(--rpx));
}
/* 占满视口,安全区内边距;手机自用不限宽 */
/* overscroll-behavior:none —— iOS standalone PWA 长页面通病根治:
   下拉到顶/上拉到底时的橡皮筋回弹会【链式滚动】传导到 fixed 的 .app/body,
   间歇性把整个视口卡住(用户报"记忆页等长页下拉概率卡死")。在文档根禁止 overscroll 链。 */
html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden;
  overscroll-behavior: none;
  -webkit-tap-highlight-color: transparent; }
* { box-sizing: border-box; -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; }
/* 输入框全局复位:杜绝 iOS 深色模式下原生 input 默认白底/内阴影泄漏(搜索框白底问题根治) */
input, textarea { -webkit-appearance: none; appearance: none; background-color: transparent; color: var(--txt); border: none; outline: none; font-family: inherit; -webkit-user-select: text; user-select: text; }
input::placeholder, textarea::placeholder { color: var(--sub); opacity: 1; }
input, textarea { -webkit-user-select: text; user-select: text; }
/* 运行时根节点 .app:fixed 占满(替代 100vh 在 iOS Safari 的歧义) */
/* 不在 .app 设 padding-bottom:env(safe-area):否则把内容区上推,footer 下方留一条 safe-area 空白。
   底部安全区由 footer 自己的 padding-bottom 承担(含 safe-area),背景填到屏幕真正底边。 */
.app { position: fixed; inset: 0; padding-top: env(safe-area-inset-top); }

/* T10 离线感知:灵动岛式悬浮胶囊(顶部居中,琥珀呼吸点+短文案)。
   深色半透玻璃(不用 backdrop-filter,省电),深浅色主题下都可读;有网即消失。 */
.offline-bar {
  position: fixed; z-index: 9999;
  top: calc(env(safe-area-inset-top) + calc(174 * var(--rpx)));
  left: 50%; transform: translateX(-50%);
  display: inline-flex; align-items: center; gap: calc(10 * var(--rpx));
  padding: calc(9 * var(--rpx)) calc(20 * var(--rpx));
  border-radius: 999px;
  background: rgba(28,28,30,.78);
  border: 1px solid rgba(255,255,255,.14);
  box-shadow: 0 calc(6 * var(--rpx)) calc(20 * var(--rpx)) rgba(0,0,0,.22);
  color: rgba(255,255,255,.92);
  font-size: var(--type-footnote); font-weight: 500; letter-spacing: .02em;
  white-space: nowrap;
  animation: offlineIn .5s cubic-bezier(.34,1.56,.64,1) backwards;
}
/* 琥珀呼吸点:离线状态的"心跳",弱提示不抢眼 */
.offline-bar::before {
  content: ''; flex: none;
  width: calc(12 * var(--rpx)); height: calc(12 * var(--rpx)); border-radius: 50%;
  background: #ffb340;
  box-shadow: 0 0 calc(10 * var(--rpx)) rgba(255,159,10,.85);
  animation: offlineDot 2.2s ease-in-out infinite;
}
@keyframes offlineIn {
  from { opacity: 0; transform: translate(-50%, calc(-18 * var(--rpx))); }
  to   { opacity: 1; transform: translate(-50%, 0); }
}
@keyframes offlineDot {
  0%, 100% { opacity: .5; transform: scale(.82); }
  50%      { opacity: 1;  transform: scale(1); }
}

html, body {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;
}

/* 浅色(默认) */
.app {
  --bg: #f2f2f7;
  --bg-elev: #ffffff;
  --fill: rgba(120,120,128,.10);
  --bar: rgba(255,255,255,.9);
  --txt: #1c1c1e;
  --fg: #1c1c1e;              /* 主标题色(同 --txt):牌局/知识区用此名,此前漏定义→深色下继承默认黑字不可见 */
  --sub: #8e8e93;
  --muted: #aeaeb2;           /* 三级弱化文字(比 --sub 更浅):箭头/注释/小标签 */
  --line: rgba(60,60,67,.14);
  --accent: #007aff;
  --me-bg: #007aff;
  --ai-bg: #e9e9eb;
  --warn: #ff9500;
  --danger: #ff3b30;
  /* 全站交互规格：弹层与动作按钮只从这里取尺寸，避免页面各自长一套。 */
  --dialog-w: min(calc(620 * var(--rpx)), calc(100vw - 32px));
  --dialog-radius: var(--r-xl);
  --dialog-pad: calc(32 * var(--rpx));
  --dialog-title-size: var(--type-title);
  --dialog-body-size: var(--type-secondary);
  --dialog-action-size: var(--type-action);
  --dialog-action-h: calc(88 * var(--rpx));
  --btn-h: calc(88 * var(--rpx));
  --btn-sm-h: calc(64 * var(--rpx));
  --btn-radius: var(--r-md);
  --btn-font: var(--type-action);
  --glass-rgb: 255,255,255;
  --glass-a: .72;
  --glass-edge: rgba(255,255,255,.6);
  --glass-hi: rgba(255,255,255,.45);
  --glass-pill: rgba(255,255,255,.7);
  background: var(--bg);
}

/* 深色 */
.app.dark {
  --bg: #000000;
  --bg-elev: #1c1c1e;
  --fill: rgba(120,120,128,.22);
  --bar: rgba(28,28,30,.9);
  --txt: #ffffff;
  --fg: #ffffff;              /* 主标题色(同 --txt) */
  --sub: #8e8e93;
  --muted: #636366;           /* 三级弱化文字:比 --sub 更深,深色背景下不抢戏 */
  --line: rgba(84,84,88,.3);
  --accent: #0a84ff;
  --me-bg: #0a84ff;
  --ai-bg: #2c2c2e;
  --warn: #ff9f0a;
  --danger: #ff453a;
  --glass-rgb: 30,30,34;
  --glass-a: .72;
  --glass-edge: rgba(255,255,255,.14);
  --glass-hi: rgba(255,255,255,.1);
  --glass-pill: rgba(120,120,128,.36);
}


/* ============ index.acss ============ */

.app { display: flex; flex-direction: column; }  /* fixed+inset 见头部;此处只留 flex 布局,去掉 100vh/relative 避免覆盖 fixed */

/* 顶栏参加主布局，内容区从它下方开始；不再依赖每个页面手算顶部占位。 */
.topbar { position: relative; flex: 0 0 auto; width: 100%; z-index: 20; }

.header {
  text-align: center;
  padding-bottom: calc(8 * var(--rpx)); /* 标题与下方 tab 间留点呼吸(原 20rpx 在 PWA 下偏高,收窄) */
  position: relative; z-index: 10;
}
/* 导航条:行内 min-height=capHeight(系统胶囊高),flex 居中保持与右上胶囊几何中心一致;
   PWA 无胶囊故 padding 收窄,标题栏不再过高 */
.nav-row { position: relative; display: flex; align-items: center; justify-content: center; padding: calc(4 * var(--rpx)) 0; }
.title { font-size: var(--type-title); font-weight: 600; color: var(--txt); line-height: 1.25; }

/* 悬浮胶囊质感(实色半透明,无 backdrop-filter,省电不发热) */
/* --glass-a 由滑块控制背景实色透明度,滑动立刻可见 */
.glass {
  background: rgba(var(--glass-rgb), var(--glass-a));
  border: 1px solid var(--glass-edge);
  box-shadow: 0 calc(6 * var(--rpx)) calc(24 * var(--rpx)) rgba(0,0,0,.1), inset 0 1px 0 var(--glass-hi);
}
/* 标题栏始终不透明:滑块的 --glass-a 只控制下方导航栏(tabbar),标题栏背景钉成实色(跟随主题深浅) */
.header.glass { background: var(--bg-elev); border: none; box-shadow: none; }

.tabbar {
  display: flex; margin: calc(8 * var(--rpx)) calc(32 * var(--rpx)) calc(4 * var(--rpx)); border-radius: var(--r-pill); padding: calc(5 * var(--rpx));
  position: relative; z-index: 9; overflow: hidden;
  /* 正常流,占位不压内容;扁圆胶囊(Apple Music 式),全圆角 */
}
/* 玻璃上的流光高光 */
.tabbar::before {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 50%;
  background: linear-gradient(180deg, var(--glass-hi), transparent);
  pointer-events: none;
}
.tab {
  flex: 1; display: flex; flex-direction: row; align-items: center; justify-content: center; gap: calc(8 * var(--rpx));
  padding: calc(12 * var(--rpx)) 0; font-size: var(--type-secondary); color: var(--sub); border-radius: var(--r-pill); font-weight: 500;
  position: relative; z-index: 1; transition: color .25s;
}
.tab.on {
  color: var(--accent);
  background: var(--glass-pill);
  box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.12), inset 0 1px 0 rgba(255,255,255,.5);
}
.tab.on .tab-ic { background: var(--accent); }

/* 🔥 flex 子项要能滚动必须 min-height:0:否则 flex 默认 min-height:auto 让 .log 被内容撑高、
   overflow 失效 → chat/trips 都"无法下拉"(内容溢出不滚)。这是滚动失效的根因。
   overflow-y:auto 显式声明(不只靠运行时 el.style)。
   -webkit-overflow-scrolling:touch:.log 用独立合成层滚动,弹层(fixed pop-mask)mount/unmount
   引发的 viewport reflow 不会重置其 scrollTop(否则关弹窗先归0再被多帧写回=肉眼闪动)。 */
.log { flex: 1; min-height: 0; width: 100%; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; padding: calc(24 * var(--rpx)); box-sizing: border-box; }
.log-game { padding-left: 0 !important; padding-right: 0 !important; padding-bottom: 0 !important; display: flex; flex-direction: column; }

.bubble {
  max-width: 85%; align-self: flex-start;
  padding: calc(18 * var(--rpx)) calc(26 * var(--rpx)); border-radius: calc(36 * var(--rpx));
  /* 中号与页面常规正文同为 28rpx；模板会按用户选择覆盖为 26/28/32rpx。 */
  font-size: var(--type-action); line-height: 1.6;
  -webkit-text-size-adjust: none; text-size-adjust: none;
  /* bubble 是 flex item(ai-col / bubble-wrap 都是 flex):靠 flex 内容自适应 + max-width:85% 限宽,
     不用 fit-content。word-break:normal(keep-all 会让中英边界断致"一字+英文就截断")。
     overflow-wrap:break-word 仅超长单词断。 */
  /* #bug2 长文本不分段:回复里的 \n 段落分隔原来被 white-space:normal 折叠成空格,糊成一坨。
     改 pre-wrap 保留换行(token 里的空白/换行原样渲染),长行仍自动折行。 */
  overflow-wrap: break-word; word-break: normal; white-space: pre-wrap;
  /* #15 关掉 iOS 原生长按弹"拷贝/选择"气泡(放大镜),让我们自己的 longtap→copyMsg 接管 */
  -webkit-touch-callout: none; -webkit-user-select: none; user-select: none;
}
.me .bubble, .bubble.me { align-self: flex-end; }
.me-row { display: flex; justify-content: flex-end; margin-bottom: calc(24 * var(--rpx)); width: 100%; }
.me { background: var(--me-bg); color: #fff; border-bottom-right-radius: calc(10 * var(--rpx)); }
.ai-row { display: flex; align-items: flex-start; margin-bottom: calc(24 * var(--rpx)); width: 100%; }
.ai-avatar {
  width: calc(64 * var(--rpx)); height: calc(64 * var(--rpx)); border-radius: 50%; flex: none; margin-right: calc(14 * var(--rpx));
  margin-top: calc(34 * var(--rpx)); background: #fff; box-shadow: 0 calc(2 * var(--rpx)) calc(6 * var(--rpx)) rgba(0,0,0,.12);
}
/* flex:1 撑开占满头像右侧空间,否则 ai-col 宽度坍缩成内容最小宽,
   导致 bubble 的 max-width:85% 基准过窄→短句也换行。 */
.ai-col { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; flex: 1; }
.ai-name { font-size: var(--type-footnote); color: var(--sub); margin: 0 0 calc(6 * var(--rpx)) calc(8 * var(--rpx)); }
.ai { background: var(--ai-bg); color: var(--txt); border-bottom-left-radius: calc(10 * var(--rpx)); }
.typing { color: var(--sub); letter-spacing: calc(6 * var(--rpx)); }

/* 纠错卡片(整卡靠右,与用户气泡同侧) */
.corr {
  /* 宽度跟会话气泡走:自适应内容、上限 85%、靠右(与用户气泡同侧) */
  max-width: 85%; width: -webkit-fit-content; width: fit-content;
  margin: 0 0 calc(24 * var(--rpx)) auto;
  background: rgba(255,149,0,.12); border: 1px solid rgba(255,149,0,.35);
  border-radius: var(--r-lg); padding: calc(18 * var(--rpx)) calc(24 * var(--rpx)); box-sizing: border-box;
}
.corr-head { display: flex; align-items: center; gap: calc(8 * var(--rpx)); font-size: var(--type-secondary); color: #ff9500; font-weight: 600; }
.corr-head-ic {
  width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); flex: none; background: #ff9500;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z'/%3E%3C/svg%3E");
}
.corr-fix { font-size: calc(30 * var(--rpx)); color: var(--txt); font-weight: 600; margin-top: calc(6 * var(--rpx)); line-height: 1.5; }
.corr-note { font-size: var(--type-secondary); color: #ff9500; margin-top: calc(8 * var(--rpx)); line-height: 1.4; }
.corr-native { display: flex; align-items: flex-start; gap: calc(8 * var(--rpx)); font-size: var(--type-body); color: var(--txt); margin-top: calc(10 * var(--rpx)); line-height: 1.5; opacity: .9; padding: calc(4 * var(--rpx)) calc(6 * var(--rpx)); border-radius: calc(10 * var(--rpx)); }
.corr-native-txt { flex: 1; }
.corr-native.speaking { box-shadow: 0 0 0 calc(2 * var(--rpx)) var(--warn); opacity: 1; }
.corr-native-ic {
  width: calc(28 * var(--rpx)); height: calc(28 * var(--rpx)); flex: none; margin-top: calc(4 * var(--rpx)); background: var(--txt); opacity: .55;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z'/%3E%3C/svg%3E");
}

.footer {
  display: flex; gap: calc(16 * var(--rpx)); padding: calc(10 * var(--rpx)) calc(24 * var(--rpx));
  padding-bottom: calc(calc(20 * var(--rpx)) + env(safe-area-inset-bottom));
  background: var(--bar); border-top: 1px solid rgba(60,60,67,.14);
}
.typed {
  flex: 1; min-width: 0; padding: calc(18 * var(--rpx)) calc(26 * var(--rpx)); border-radius: var(--r-xl); font-size: var(--type-action);
  background: var(--bg-elev); color: var(--txt); border: 0.5px solid var(--line);
}
.send-btn {
  flex: none; white-space: nowrap; padding: calc(18 * var(--rpx)) calc(30 * var(--rpx)); border-radius: var(--r-xl); background: var(--accent-fill, var(--accent));
  color: #fff; font-size: var(--type-action); font-weight: 600; display: flex; align-items: center; justify-content: center;
}
.send-btn.disabled { opacity: .5; }

.pop-mask {
  position: fixed; left: 0; top: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,.3); display: flex; align-items: center; justify-content: center; z-index: 100;
  padding: 16px; box-sizing: border-box; animation: popMaskIn .25s ease both;
}
@keyframes popMaskIn { from { opacity: 0; } to { opacity: 1; } }
.pop {
  width: var(--dialog-w); max-height: min(88dvh, 860px); overflow-y: auto; box-sizing: border-box;
  background: var(--bg-elev); border-radius: var(--dialog-radius); padding: var(--dialog-pad);
  box-shadow: 0 calc(20 * var(--rpx)) calc(60 * var(--rpx)) rgba(0,0,0,.25);
  animation: popIn .3s cubic-bezier(.32,.72,0,1) both;
}
@keyframes popIn { from { opacity: 0; transform: scale(.92); } to { opacity: 1; transform: scale(1); } }
.pop-word { font-size: var(--type-display); font-weight: 600; color: var(--accent); display: flex; flex-direction: column; align-items: flex-start; }
/* 词 + 音标 同一行,音标紧贴词右侧 */
.pop-word-main { display: flex; align-items: baseline; flex-wrap: wrap; }
.pop-ph { font-size: var(--type-body); color: var(--sub); font-weight: 400; margin-left: calc(14 * var(--rpx)); font-family: -apple-system, "Times New Roman", serif; }
.pop-pos { font-size: calc(23 * var(--rpx)); color: var(--sub); font-weight: 400; margin-top: calc(6 * var(--rpx)); }
/* 详情弹层第2行:词性 + 注释 同行 */
.pop-pm { margin-top: calc(6 * var(--rpx)); display: flex; align-items: baseline; flex-wrap: wrap; }
.pop-pm .pop-pos { margin-top: 0; }
.pop-brief-inline { font-size: calc(27 * var(--rpx)); color: var(--txt); font-weight: 600; margin-left: calc(12 * var(--rpx)); }
.pop-mean { font-size: calc(30 * var(--rpx)); color: var(--txt); margin-top: calc(16 * var(--rpx)); line-height: 1.5; }
/* 核心义(精简) */
.pop-brief { font-size: calc(30 * var(--rpx)); color: var(--txt); font-weight: 600; margin-top: calc(18 * var(--rpx)); line-height: 1.5; }
/* 例句:英文 + 翻译两行,目标词标粗 */
.pop-eg { margin-top: calc(18 * var(--rpx)); padding: calc(18 * var(--rpx)) calc(20 * var(--rpx)); background: rgba(120,120,128,.10); border-radius: var(--r-md); }
.pop-eg-en { font-size: var(--type-action); color: var(--txt); line-height: 1.55; }
.pop-eg-zh { font-size: var(--type-body); color: var(--sub); line-height: 1.55; margin-top: calc(8 * var(--rpx)); }
.eg-b { font-weight: 700; color: var(--accent); }
.pop-save {
  margin-top: calc(28 * var(--rpx)); background: #ff9500; color: #fff; text-align: center;
  padding: calc(20 * var(--rpx)); border-radius: var(--r-md); font-size: var(--type-action); font-weight: 600;
}

/* 空状态:苹果风——大留白 + 灰色插画圆 + 标题/副标题层级。.empty-ic 放 SVG 插画(可选) */
.empty { color: var(--sub); font-size: var(--type-action); line-height: 1.6; text-align: center;
  padding: calc(80 * var(--rpx)) calc(48 * var(--rpx)); display: flex; flex-direction: column; align-items: center; gap: calc(20 * var(--rpx)); }
.empty-ic { width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); opacity: .35; margin-bottom: calc(4 * var(--rpx)); }
.empty-ic svg { width: 100%; height: 100%; }
.empty-title { font-size: calc(30 * var(--rpx)); font-weight: 600; color: var(--txt); }
.empty-sub { font-size: calc(25 * var(--rpx)); color: var(--sub); max-width: calc(520 * var(--rpx)); }
.vgroup-title { font-size: var(--type-body); color: var(--sub); font-weight: 600; margin: calc(20 * var(--rpx)) calc(8 * var(--rpx)) calc(12 * var(--rpx)); }
.vitem {
  background: var(--bg-elev); border-radius: var(--r-lg); padding: calc(24 * var(--rpx)) calc(28 * var(--rpx)); margin-bottom: calc(18 * var(--rpx));
  box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.05);
}
.vdel { color: var(--danger); background: rgba(255,59,48,.09); border-radius: var(--r-sm); padding: calc(7 * var(--rpx)) calc(11 * var(--rpx)); font-size: var(--type-footnote); }
.vword { font-size: var(--type-title); font-weight: 600; color: var(--txt); }
.vmean { font-size: var(--type-body); color: var(--sub); margin-top: calc(8 * var(--rpx)); }
.vsent { font-size: var(--type-secondary); color: var(--sub); margin-top: calc(10 * var(--rpx)); font-style: italic; opacity: .8; }
.mem-head { font-size: var(--type-secondary); color: var(--sub); margin-bottom: calc(16 * var(--rpx)); line-height: 1.5; }
.mem-fact { font-size: calc(30 * var(--rpx)); color: var(--txt); line-height: 1.5; }
/* 行程回忆手账卡:左主题色竖条 + 右下角风光 svg 水印(与行程页 trip-hero 同款 wm-* 图案)。
   水印放右下底角小尺寸,与顶部按钮(mem-acts float:right)垂直错开 → 不挡点击(该环境 pointer-events:none 不生效)。scene 色写死。 */
.vitem.mem-trip { position: relative; overflow: hidden; border-left: calc(6 * var(--rpx)) solid #5b7cfa; }
/* 每个 scene 的左条色 + 水印色(写死,不用 --scene-c 变量,该环境不生效) */
.mem-trip.scene-nature    { border-left-color: #34a853; }
.mem-trip.scene-nature    .mem-trip-wm { background: #34a853; }
.mem-trip.scene-city      { border-left-color: #5b7cfa; }
.mem-trip.scene-city      .mem-trip-wm { background: #5b7cfa; }
.mem-trip.scene-island    { border-left-color: #1aa3c4; }
.mem-trip.scene-island    .mem-trip-wm { background: #1aa3c4; }
.mem-trip.scene-heritage  { border-left-color: #b07a2f; }
.mem-trip.scene-heritage  .mem-trip-wm { background: #b07a2f; }
.mem-trip.scene-themepark { border-left-color: #e8568a; }
.mem-trip.scene-themepark .mem-trip-wm { background: #e8568a; }
.mem-trip.scene-food      { border-left-color: #f0883e; }
.mem-trip.scene-food      .mem-trip-wm { background: #f0883e; }
/* 水印图层:右下底角,小尺寸避开顶部按钮。background 提供颜色,wm-* 提供 mask 图案 */
.mem-trip-wm { position: absolute; right: calc(8 * var(--rpx)); bottom: calc(6 * var(--rpx)); width: calc(88 * var(--rpx)); height: calc(88 * var(--rpx)); background: #5b7cfa; opacity: .16; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; pointer-events: none; }

/* 标题点击区 */
.title-tap { display: inline-flex; align-items: center; gap: calc(6 * var(--rpx)); }

/* #18 会话记录入口:nav-row 居中标题不动,按钮绝对定位在右侧 */
.hist-entry { position: absolute; right: calc(20 * var(--rpx)); top: 50%; transform: translateY(-50%); width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); display: flex; align-items: center; justify-content: center; border-radius: 50%; }
.hist-entry:active { background: rgba(127,127,127,.16); }
.hist-ic { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); background: var(--txt); opacity: .82;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.7 9.7 0 0 0-6.7 2.8L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.7 9.7 0 0 0-6.7 2.8L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E"); }
/* Enny 右上角:切换模型入口(滑块/调节 icon) */
.model-ic { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); background: var(--txt); opacity: .82;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='21' x2='4' y2='14'/%3E%3Cline x1='4' y1='10' x2='4' y2='3'/%3E%3Cline x1='12' y1='21' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12' y2='3'/%3E%3Cline x1='20' y1='21' x2='20' y2='16'/%3E%3Cline x1='20' y1='12' x2='20' y2='3'/%3E%3Cline x1='1' y1='14' x2='7' y2='14'/%3E%3Cline x1='9' y1='8' x2='15' y2='8'/%3E%3Cline x1='17' y1='16' x2='23' y2='16'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='21' x2='4' y2='14'/%3E%3Cline x1='4' y1='10' x2='4' y2='3'/%3E%3Cline x1='12' y1='21' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12' y2='3'/%3E%3Cline x1='20' y1='21' x2='20' y2='16'/%3E%3Cline x1='20' y1='12' x2='20' y2='3'/%3E%3Cline x1='1' y1='14' x2='7' y2='14'/%3E%3Cline x1='9' y1='8' x2='15' y2='8'/%3E%3Cline x1='17' y1='16' x2='23' y2='16'/%3E%3C/svg%3E"); }

/* #18 会话记录抽屉 */
.chat-hist { position: relative; width: calc(620 * var(--rpx)); max-height: 80vh; display: flex; flex-direction: column; background: var(--bg-elev); border-radius: var(--r-xl); padding: calc(28 * var(--rpx)) calc(28 * var(--rpx)) calc(20 * var(--rpx)); box-shadow: 0 calc(24 * var(--rpx)) calc(70 * var(--rpx)) rgba(0,0,0,.3); }
.chat-hist-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: calc(18 * var(--rpx)); }
.chat-hist-title { font-size: var(--type-title); font-weight: 600; color: var(--txt); }
.chat-hist-new { display: inline-flex; align-items: center; gap: calc(6 * var(--rpx)); font-size: var(--type-body); color: #fff; background: var(--accent-fill, var(--accent)); padding: calc(10 * var(--rpx)) calc(22 * var(--rpx)); border-radius: var(--r-lg); }
.chat-hist-new:active { opacity: .85; }
.chat-hist-new-plus { font-size: calc(32 * var(--rpx)); line-height: 1; margin-top: calc(-2 * var(--rpx)); }
.chat-hist-empty { color: var(--sub); font-size: var(--type-body); text-align: center; padding: calc(60 * var(--rpx)) calc(20 * var(--rpx)); line-height: 1.5; }
.chat-hist-list { overflow-y: auto; overscroll-behavior: contain; }
.chat-hist-item { display: flex; align-items: center; gap: calc(12 * var(--rpx)); padding: calc(20 * var(--rpx)) calc(20 * var(--rpx)); border-radius: var(--r-lg); margin-bottom: calc(12 * var(--rpx)); background: var(--bg); }
.chat-hist-item.on { background: color-mix(in srgb, var(--accent) 14%, var(--bg)); box-shadow: inset 0 0 0 calc(2 * var(--rpx)) color-mix(in srgb, var(--accent) 40%, transparent); }
.chat-hist-item:active { opacity: .9; }
.chat-hist-meta { flex: 1; min-width: 0; }
.chat-hist-name { font-size: calc(29 * var(--rpx)); color: var(--txt); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-hist-sub { font-size: calc(23 * var(--rpx)); color: var(--sub); margin-top: calc(4 * var(--rpx)); }
.chat-hist-now { color: var(--accent); }
.chat-hist-del { flex: 0 0 auto; width: calc(52 * var(--rpx)); height: calc(52 * var(--rpx)); display: flex; align-items: center; justify-content: center; border-radius: 50%; color: var(--sub); font-size: var(--type-action); }
.chat-hist-del:active { background: rgba(255,59,48,.16); color: #ff3b30; }

/* 即将清理(7天内到 30 天大限)分区:历史页底部单列提醒 */
.hist-expire-sec { margin-top: calc(28 * var(--rpx)); padding-top: calc(24 * var(--rpx)); border-top: 0.5px solid var(--line); }
.hist-expire-head { display: flex; align-items: center; gap: calc(10 * var(--rpx)); font-size: calc(25 * var(--rpx)); font-weight: 600; color: var(--warn); margin-bottom: calc(8 * var(--rpx)); }
.hist-expire-ic { width: calc(14 * var(--rpx)); height: calc(14 * var(--rpx)); border-radius: 50%; background: var(--warn); flex: 0 0 auto; }
.hist-expire-tip { font-size: var(--type-footnote); color: var(--sub); line-height: 1.5; margin-bottom: calc(16 * var(--rpx)); }
.chat-hist-item.expiring { background: color-mix(in srgb, var(--warn) 9%, var(--bg)); }
.hist-expire-badge { color: var(--warn); font-weight: 600; }

/* 设置面板 */
.settings {
  position: relative;
  width: calc(600 * var(--rpx)); max-height: 84vh; overflow-y: auto; overscroll-behavior: contain; background: var(--bg-elev); border-radius: var(--r-xl); padding: calc(30 * var(--rpx)) calc(32 * var(--rpx)) calc(32 * var(--rpx));
  box-shadow: 0 calc(24 * var(--rpx)) calc(70 * var(--rpx)) rgba(0,0,0,.3);
}
/* 设置页顶部:logo 居中 + 版本号在下方 */
.settings-header { display: flex; flex-direction: column; align-items: center; padding: calc(8 * var(--rpx)) 0 calc(12 * var(--rpx)); }
.settings-logo { width: calc(120 * var(--rpx)); height: calc(120 * var(--rpx)); border-radius: 50%;
  box-shadow: 0 calc(6 * var(--rpx)) calc(20 * var(--rpx)) rgba(167,139,202,.25), 0 0 0 calc(3 * var(--rpx)) rgba(167,139,202,.1); }
/* 版本号:logo 正下方小字 */
.app-ver { margin-top: calc(8 * var(--rpx)); font-size: var(--type-caption); color: var(--sub); opacity: .6; font-variant-numeric: tabular-nums; }
/* 【诊断 V56.8】细线定位标尺:fixed 顶满屏宽,半透明彩色刻度,接受状态栏文字压在上面。定位完删 */
.set-avatar {
  width: calc(110 * var(--rpx)); height: calc(110 * var(--rpx)); border-radius: 50%; display: block; margin: 0 auto;
  background: #fff; box-shadow: 0 calc(4 * var(--rpx)) calc(16 * var(--rpx)) rgba(0,0,0,.15);
}
.set-title { font-size: calc(36 * var(--rpx)); font-weight: 700; color: var(--txt); text-align: center; margin-top: calc(10 * var(--rpx)); transition: color .2s; }
/* 当前 chat provider 提示色：ZenMux 黄，OpenAI 绿。 */
.set-title.alt { color: var(--warn); }
.set-title.openai { color: #10a37f; }
.set-sub { font-size: var(--type-secondary); color: var(--sub); text-align: center; margin-top: calc(4 * var(--rpx)); }
/* 共享记忆入口:设置页顶部居中胶囊,点开「关于你」管理弹层 */
.shared-entry { display: flex; width: fit-content; align-items: center; gap: calc(8 * var(--rpx)); margin: calc(18 * var(--rpx)) auto calc(2 * var(--rpx)); padding: calc(10 * var(--rpx)) calc(24 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-pill); font-size: calc(23 * var(--rpx)); color: var(--accent); font-weight: 600; }
.shared-entry-ic { width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: var(--accent); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; -webkit-mask-repeat: no-repeat; }
/* 共享记忆管理弹层 */
.shared-mgr { width: calc(620 * var(--rpx)); max-height: 76vh; display: flex; flex-direction: column; background: var(--bg-elev); border-radius: var(--r-xl); padding: calc(36 * var(--rpx)) calc(32 * var(--rpx)) calc(32 * var(--rpx)); box-shadow: 0 calc(24 * var(--rpx)) calc(70 * var(--rpx)) rgba(0,0,0,.3); }
.shared-mgr-head { display: flex; align-items: center; gap: calc(10 * var(--rpx)); }
.shared-mgr-ic { width: calc(30 * var(--rpx)); height: calc(30 * var(--rpx)); background: var(--accent); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; -webkit-mask-repeat: no-repeat; }
.shared-mgr-title { font-size: calc(32 * var(--rpx)); font-weight: 700; color: var(--txt); }
.shared-mgr-sub { font-size: var(--type-footnote); color: var(--sub); margin: calc(8 * var(--rpx)) 0 calc(18 * var(--rpx)); line-height: 1.4; }
.shared-mgr-list { flex: 1; min-height: calc(120 * var(--rpx)); overscroll-behavior: contain; }
.shared-mgr-empty { color: var(--sub); font-size: var(--type-body); text-align: center; padding: calc(50 * var(--rpx)) calc(20 * var(--rpx)); }
.shared-mgr-item { display: flex; align-items: flex-start; justify-content: space-between; gap: calc(16 * var(--rpx)); padding: calc(18 * var(--rpx)) calc(4 * var(--rpx)); border-bottom: 1px solid var(--line); }
.shared-mgr-item-t { flex: 1; font-size: calc(27 * var(--rpx)); color: var(--txt); line-height: 1.45; }
.shared-mgr-item-acts { display: flex; gap: calc(22 * var(--rpx)); flex-shrink: 0; padding-top: calc(2 * var(--rpx)); }
.shared-mgr-btns { display: flex; gap: calc(16 * var(--rpx)); margin-top: calc(24 * var(--rpx)); }
.shared-mgr-btns .mem-edit-btn.disabled { opacity: .4; }
/* 一行三短语:功能提示,SVG 图标 + 短文案,横向均分 */
.set-tips { display: flex; justify-content: space-between; gap: calc(8 * var(--rpx)); margin: calc(16 * var(--rpx)) 0 calc(4 * var(--rpx)); }
.set-tip { flex: 1; display: flex; flex-direction: column; align-items: center; gap: calc(8 * var(--rpx)); font-size: calc(21 * var(--rpx)); color: var(--sub); text-align: center; }
.tip-ic {
  width: calc(30 * var(--rpx)); height: calc(30 * var(--rpx)); background: var(--accent);
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}
.ic-tap { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 11V6a2 2 0 0 1 4 0v5'/%3E%3Cpath d='M13 9a2 2 0 0 1 4 0v3'/%3E%3Cpath d='M17 11a2 2 0 0 1 4 0v3a7 7 0 0 1-7 7h-2a7 7 0 0 1-6-3.5l-2.5-4a2 2 0 0 1 3.4-2L9 14'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 11V6a2 2 0 0 1 4 0v5'/%3E%3Cpath d='M13 9a2 2 0 0 1 4 0v3'/%3E%3Cpath d='M17 11a2 2 0 0 1 4 0v3a7 7 0 0 1-7 7h-2a7 7 0 0 1-6-3.5l-2.5-4a2 2 0 0 1 3.4-2L9 14'/%3E%3C/svg%3E"); }
.ic-card { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='M7 9h10M7 13h6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='M7 9h10M7 13h6'/%3E%3C/svg%3E"); }
.ic-mem { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 8a4 4 0 0 0-4 4c0 1.5.8 2.8 2 3.5V18h4v-2.5c1.2-.7 2-2 2-3.5a4 4 0 0 0-4-4z'/%3E%3Cpath d='M12 2v2M4 6l1.5 1.5M20 6l-1.5 1.5M2 13h2M20 13h2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 8a4 4 0 0 0-4 4c0 1.5.8 2.8 2 3.5V18h4v-2.5c1.2-.7 2-2 2-3.5a4 4 0 0 0-4-4z'/%3E%3Cpath d='M12 2v2M4 6l1.5 1.5M20 6l-1.5 1.5M2 13h2M20 13h2'/%3E%3C/svg%3E"); }

/* 学习数据面板:统计数字 + 本周柱状图 */
.stat-panel { margin: calc(12 * var(--rpx)) 0 calc(4 * var(--rpx)); background: var(--bg); border-radius: var(--r-lg); padding: calc(18 * var(--rpx)) calc(24 * var(--rpx)); }
.stat-nums { display: flex; }
.stat-cell { flex: 1; display: flex; flex-direction: column; align-items: center; gap: calc(4 * var(--rpx)); }
.stat-num { font-size: var(--type-display); font-weight: 700; color: var(--accent); line-height: 1; }
.stat-cap { font-size: var(--type-caption); color: var(--sub); }
.stat-week { display: flex; align-items: flex-end; gap: calc(10 * var(--rpx)); margin-top: calc(20 * var(--rpx)); height: calc(88 * var(--rpx)); }
.wk-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: calc(8 * var(--rpx)); height: 100%; }
.wk-track { flex: 1; width: 100%; display: flex; align-items: flex-end; }
.wk-fill { width: 100%; min-height: calc(4 * var(--rpx)); border-radius: calc(6 * var(--rpx)); background: rgba(120,120,128,.3); transition: height .3s; }
.wk-fill.today { background: var(--accent); }
.wk-label { font-size: calc(19 * var(--rpx)); color: var(--sub); }
.wk-label.today { color: var(--accent); font-weight: 700; }
.set-label { font-size: calc(23 * var(--rpx)); color: var(--sub); font-weight: 600; margin: calc(18 * var(--rpx)) 0 calc(9 * var(--rpx)) calc(4 * var(--rpx)); }
/* 通用设置分隔:细线 + 居中小标题,区隔上半(角色专属)与下半(三姐妹通用) */
.set-divider { display: flex; align-items: center; gap: calc(16 * var(--rpx)); margin: calc(22 * var(--rpx)) calc(2 * var(--rpx)) calc(4 * var(--rpx)); }
.set-divider::before, .set-divider::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.set-divider-t { font-size: calc(21 * var(--rpx)); color: var(--sub); font-weight: 600; letter-spacing: 1px; }

/* 分段控件(主题/字号通用) */
.seg { display: flex; gap: calc(10 * var(--rpx)); background: var(--bg); border-radius: var(--r-md); padding: calc(6 * var(--rpx)); }
/* 字号(2/3)+ 外观(1/3)同一行:外观改单按钮轮询 浅→深→自动 */
/* 外观区两列:顶部对齐让「字号」「外观」标题齐平;两列拉伸等高,内部 column 布局让
   字号 seg 与外观 theme-btn 撑满同一控件高度区 → 方块与左边字号等高。 */
.set-row2 { display: flex; gap: calc(18 * var(--rpx)); align-items: stretch; }
.set-col-font { flex: 2; min-width: 0; display: flex; flex-direction: column; }
.set-col-theme { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.set-col .set-label { margin: calc(18 * var(--rpx)) 0 calc(9 * var(--rpx)) calc(4 * var(--rpx)); }
.set-col .seg { flex: 1; }                 /* 字号 seg 撑满列剩余高 */
.set-col-theme .theme-btn { flex: 1; }     /* 外观方块撑满列剩余高,与左侧 seg 等高 */
.theme-btn { display: flex; align-items: center; justify-content: center; gap: calc(10 * var(--rpx)); background: var(--bg); border-radius: var(--r-md); padding: 0 0; color: var(--accent); font-size: var(--type-secondary); font-weight: 600; }
.theme-btn .seg-ic { width: calc(34 * var(--rpx)); height: calc(34 * var(--rpx)); background: var(--accent); }
.seg-item {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: calc(6 * var(--rpx));
  padding: calc(13 * var(--rpx)) 0; border-radius: var(--r-sm); color: var(--sub); font-size: var(--type-secondary); font-weight: 500;
}
.seg-item.on { background: var(--bg-elev); color: var(--accent); font-weight: 600; box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.12); }
.seg-item.on .seg-ic { background: var(--accent); }
.seg-ic {
  width: calc(38 * var(--rpx)); height: calc(38 * var(--rpx)); background: var(--sub);
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}
.fz-s { font-size: var(--type-secondary); } .fz-m { font-size: calc(32 * var(--rpx)); } .fz-l { font-size: calc(42 * var(--rpx)); }
.ic-sun {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E");
}
.ic-moon {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z'/%3E%3C/svg%3E");
}
.ic-auto {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 3a9 9 0 0 0 0 18z' fill='black'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 3a9 9 0 0 0 0 18z' fill='black'/%3E%3C/svg%3E");
}

/* 录音按钮 */
.footer-wrap {
  background: var(--bar); border-top: 1px solid var(--line);
  position: relative; /* #12 新消息浮标的定位锚点 */
  /* 背景延伸到屏幕最底(safe-area 内填充由内部 footer 的 padding 承担),不在此留白 */
}
/* #12 「↓ 新消息」浮标:悬在输入区上方居中,点了滚到底 */
.newmsg-pill {
  position: absolute; left: 50%; top: calc(-22 * var(--rpx)); transform: translate(-50%, -100%);
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-secondary); font-weight: 600;
  padding: calc(12 * var(--rpx)) calc(26 * var(--rpx)); border-radius: 999px;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .28); white-space: nowrap; z-index: 30;
  animation: newmsgIn .24s ease;
}
@keyframes newmsgIn { from { opacity: 0; transform: translate(-50%, -80%); } to { opacity: 1; transform: translate(-50%, -100%); } }
.mic-btn {
  margin: calc(10 * var(--rpx)) calc(24 * var(--rpx)) 0; padding: calc(18 * var(--rpx)); border-radius: var(--r-xl);
  background: var(--accent-fill, var(--accent)); color: #fff; text-align: center;
  font-size: calc(30 * var(--rpx)); font-weight: 600;
}
.mic-btn.rec { background: var(--danger); }
/* footer 自己的底部 padding 含 safe-area,背景(继承 footer-wrap 的 --bar)填满到屏幕底,盖住那条空白 */
.footer-wrap .footer { background: transparent; border-top: none; padding-top: calc(8 * var(--rpx)); padding-bottom: calc(calc(10 * var(--rpx)) + env(safe-area-inset-bottom)); }

/* Tab 图标(SVG mask,随 active 变色) */
.tab-ic {
  width: calc(34 * var(--rpx)); height: calc(34 * var(--rpx)); background: var(--sub);
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}
.tab-chat {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z'/%3E%3C/svg%3E");
}
.tab-words {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/%3E%3C/svg%3E");
}
.tab-kb {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='9' y1='18' x2='15' y2='18'/%3E%3Cline x1='10' y1='22' x2='14' y2='22'/%3E%3Cpath d='M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='9' y1='18' x2='15' y2='18'/%3E%3Cline x1='10' y1='22' x2='14' y2='22'/%3E%3Cpath d='M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14'/%3E%3C/svg%3E");
}
.tab-mem {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5a3 3 0 0 0-3 3 3 3 0 0 0-3 3 2.5 2.5 0 0 0 0 5 3 3 0 0 0 3 2.5 3 3 0 0 0 6 0 3 3 0 0 0 3-2.5 2.5 2.5 0 0 0 0-5 3 3 0 0 0-3-3 3 3 0 0 0-3-3z'/%3E%3Cpath d='M12 5v16'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5a3 3 0 0 0-3 3 3 3 0 0 0-3 3 2.5 2.5 0 0 0 0 5 3 3 0 0 0 3 2.5 3 3 0 0 0 6 0 3 3 0 0 0 3-2.5 2.5 2.5 0 0 0 0-5 3 3 0 0 0-3-3 3 3 0 0 0-3-3z'/%3E%3Cpath d='M12 5v16'/%3E%3C/svg%3E");
}
/* Kenny 游戏 tab 图标(一手扇开的两张牌+黑桃,泛指扑克;与德扑单牌图标区分) */
.tab-game {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9.5' y='2.5' width='10.5' height='15' rx='2'/%3E%3Crect x='4' y='6.5' width='10.5' height='15' rx='2'/%3E%3Cpath d='M9.25 10.5c-1.4 1.7-2.7 2.7-2.7 4.1a2.7 2.7 0 005.4 0c0-1.4-1.3-2.4-2.7-4.1z' fill='black' stroke='none'/%3E%3Cpath d='M9.25 16.3v1.7M7.7 18h3.1'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9.5' y='2.5' width='10.5' height='15' rx='2'/%3E%3Crect x='4' y='6.5' width='10.5' height='15' rx='2'/%3E%3Cpath d='M9.25 10.5c-1.4 1.7-2.7 2.7-2.7 4.1a2.7 2.7 0 005.4 0c0-1.4-1.3-2.4-2.7-4.1z' fill='black' stroke='none'/%3E%3Cpath d='M9.25 16.3v1.7M7.7 18h3.1'/%3E%3C/svg%3E");
}
/* Enny History tab 图标(时钟带回旋箭头,与顶栏 hist-ic 同款) */
.tab-history {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.7 9.7 0 0 0-6.7 2.8L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.7 9.7 0 0 0-6.7 2.8L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
}
/* Enny 会话历史页:顶部「新会话」按钮(全宽) */
.hist-page-new { display: flex; align-items: center; justify-content: center; gap: calc(8 * var(--rpx)); font-size: var(--type-action); color: #fff; background: var(--accent-fill, var(--accent)); padding: calc(20 * var(--rpx)); border-radius: var(--r-lg); margin-bottom: calc(20 * var(--rpx)); }
.hist-page-new:active { opacity: .85; }
/* 音色横排选择(设置页通用区) */
.voice-seg { display:flex; align-items:center; gap:calc(12 * var(--rpx)); width:100%; min-height:44px; white-space:nowrap; overflow-x:auto; overflow-y:hidden!important; }
.voice-item { flex:0 0 auto; display:flex; align-items:center; justify-content:center; min-height:44px; padding: calc(10 * var(--rpx)) calc(24 * var(--rpx)); margin:0; border-radius: var(--r-lg); background: var(--bg); color: var(--sub); font-size: calc(25 * var(--rpx)); border: calc(2 * var(--rpx)) solid transparent; }
.voice-item.on { background: color-mix(in srgb, var(--accent) 14%, var(--bg)); color: var(--accent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); font-weight: 600; }
.voice-item:active { opacity: .7; }

/* ============ 群聊「27 ennys」============ */
/* 右上角群聊入口 → 移到【左上角】(用户要求);圆形按钮 */
.grp-entry { position: absolute; left: calc(20 * var(--rpx)); top: 50%; transform: translateY(-50%); width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); display: flex; align-items: center; justify-content: center; border-radius: 50%; }
.grp-entry:active { background: rgba(127,127,127,.16); }
.grp-ic { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); background: var(--txt); opacity: .82;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'/%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'/%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E"); }
/* 群聊态:左上返回箭头 */
.grp-back { position: absolute; left: calc(16 * var(--rpx)); top: 50%; transform: translateY(-50%); width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); display: flex; align-items: center; justify-content: center; border-radius: 50%; }
.grp-back:active { background: rgba(127,127,127,.16); }
.grp-back-ic { font-size: calc(48 * var(--rpx)); color: var(--txt); line-height: 1; margin-top: calc(-4 * var(--rpx)); }
/* sisters tab 图标(两个人) */
.tab-sisters {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'/%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'/%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
}
/* 群聊气泡:姐妹名旁的模型角标 */
.grp-badge { display: inline-block; margin-left: calc(10 * var(--rpx)); font-size: calc(19 * var(--rpx)); color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); padding: calc(2 * var(--rpx)) calc(12 * var(--rpx)); border-radius: var(--r-lg); font-weight: 500; vertical-align: middle; }
/* sisters 页:分区卡 */
.grp-sec { background: var(--bg-elev); border-radius: var(--r-lg); padding: calc(20 * var(--rpx)); margin-bottom: calc(18 * var(--rpx)); }
.grp-sec-t { font-size: calc(27 * var(--rpx)); font-weight: 600; color: var(--txt); margin-bottom: calc(6 * var(--rpx)); }
.grp-sec-hint { font-size: var(--type-footnote); color: var(--sub); margin-bottom: calc(16 * var(--rpx)); }
.grp-sec-row { display: flex; align-items: center; justify-content: space-between; }
.grp-sec-row:active { opacity: .7; }
.grp-sec-label { font-size: calc(27 * var(--rpx)); color: var(--txt); }
.grp-sec-val { font-size: var(--type-body); color: var(--accent); }
/* sisters 成员行 */
.grp-sis { display: flex; align-items: center; gap: calc(14 * var(--rpx)); padding: calc(12 * var(--rpx)) 0; opacity: .5; }
.grp-sis.on { opacity: 1; }
.grp-sis-av { width: calc(72 * var(--rpx)); height: calc(72 * var(--rpx)); border-radius: 50%; flex: 0 0 auto; border: calc(3 * var(--rpx)) solid transparent; }
.grp-sis.on .grp-sis-av { border-color: var(--accent); }
.grp-sis-meta { flex: 1; min-width: 0; }
.grp-sis-name { font-size: var(--type-action); color: var(--txt); font-weight: 500; }
.grp-sis-model { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(2 * var(--rpx)); }
.grp-sis-model-btn { font-size: var(--type-footnote); color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); padding: calc(8 * var(--rpx)) calc(16 * var(--rpx)); border-radius: var(--r-md); flex: 0 0 auto; }
.grp-sis-model-btn:active { opacity: .7; }
.grp-sis-check { flex: 0 0 auto; width: calc(44 * var(--rpx)); height: calc(44 * var(--rpx)); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: var(--type-body); color: var(--sub); border: calc(2 * var(--rpx)) solid var(--line); }
.grp-sis-check.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }
.grp-exit-btn { text-align: center; font-size: calc(27 * var(--rpx)); color: #ff3b30; padding: calc(22 * var(--rpx)); margin-top: calc(8 * var(--rpx)); border-radius: var(--r-lg); background: var(--bg-elev); }
.grp-exit-btn:active { opacity: .7; }

.mem-add {
  border: 1px dashed var(--line); border-radius: var(--r-md); padding: calc(20 * var(--rpx));
  text-align: center; color: var(--accent); font-size: var(--type-action); font-weight: 500; margin-bottom: calc(16 * var(--rpx));
}
.mem-acts { float: right; display: flex; align-items: center; gap: calc(8 * var(--rpx)); margin-left: calc(12 * var(--rpx)); }
.vedit { color: var(--accent); background: color-mix(in srgb, var(--accent) 9%, transparent); border-radius: var(--r-sm); padding: calc(7 * var(--rpx)) calc(11 * var(--rpx)); font-size: var(--type-footnote); }

/* 录音按钮处理中状态:脉动 */
.mic-btn.busy { opacity: .85; }
.mic-btn.busy { animation: micpulse 1.1s ease-in-out infinite; }
@keyframes micpulse { 0%,100% { opacity: .65; } 50% { opacity: 1; } }

/* ===== 新增:重读/朗读/搜索/记忆总结/编辑弹层 ===== */

/* 一键刷新按钮:调 define 模型重查全部词 */
.vrefresh {
  flex: none; width: calc(60 * var(--rpx)); height: calc(60 * var(--rpx)); border-radius: 50%;
  background: var(--bg-elev); border: 0.5px solid var(--line);
  display: flex; align-items: center; justify-content: center;
}
.vrefresh-ic {
  width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); background: var(--accent);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='black' d='M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.73 10h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z'/></svg>") center/contain no-repeat;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='black' d='M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.73 10h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z'/></svg>") center/contain no-repeat;
}
.vrefresh.spinning .vrefresh-ic { animation: vspin 0.8s linear infinite; }
@keyframes vspin { from { transform: rotate(0); } to { transform: rotate(360deg); } }

/* 记忆总结卡 */

/* 喇叭图标(SVG mask) */
.say-ic {
  width: calc(30 * var(--rpx)); height: calc(30 * var(--rpx)); background: var(--sub); flex: none;
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 5 6 9H2v6h4l5 4V5z'/%3E%3Cpath d='M15.5 8.5a5 5 0 0 1 0 7M19 5a9 9 0 0 1 0 14'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 5 6 9H2v6h4l5 4V5z'/%3E%3Cpath d='M15.5 8.5a5 5 0 0 1 0 7M19 5a9 9 0 0 1 0 14'/%3E%3C/svg%3E");
}

/* 气泡下方的 Play 按钮 */
.say-btn {
  display: inline-flex; align-items: center; gap: calc(8 * var(--rpx));
  margin: calc(8 * var(--rpx)) 0 0 calc(8 * var(--rpx)); padding: calc(6 * var(--rpx)) calc(16 * var(--rpx)); border-radius: var(--r-lg);
  background: var(--bg-elev); border: 0.5px solid var(--line);
  color: var(--sub); font-size: var(--type-footnote); align-self: flex-start;
}
.say-btn .say-ic { width: calc(24 * var(--rpx)); height: calc(24 * var(--rpx)); }
/* flex:1 撑满 row 宽,否则 me-col 坍缩→bubble 被压成一字宽逐字换行(用户气泡"11"竖排根因)。
   align-items:flex-end 保持气泡靠右。 */
.me-col { display: flex; flex-direction: column; align-items: flex-end; min-width: 0; flex: 1; }
.say-btn-me { align-self: flex-end; margin-left: 0; margin-right: calc(8 * var(--rpx)); }
.say-btn-corr { margin-top: calc(12 * var(--rpx)); }

/* 我的气泡里可点的词:下划虚线提示可点 */
.bubble.me .wme { border-bottom: 1px dashed rgba(255,255,255,.5); }

/* 单词本:词 + 朗读 */
.vword-row { display: flex; align-items: center; gap: calc(14 * var(--rpx)); }
.vword { font-size: var(--type-title); font-weight: 600; color: var(--txt); }
.say-mini {
  display: inline-flex; align-items: center; justify-content: center;
  width: calc(48 * var(--rpx)); height: calc(48 * var(--rpx)); border-radius: 50%; background: var(--bg);
}
.say-mini .say-ic { background: var(--accent); }

/* ===== 新增:重读/朗读/搜索/记忆总结/编辑弹层 ===== */
.mem-summary {
  background: var(--bg-elev); border-radius: var(--r-lg); padding: calc(26 * var(--rpx)) calc(28 * var(--rpx));
  margin-bottom: calc(22 * var(--rpx)); box-shadow: 0 calc(2 * var(--rpx)) calc(10 * var(--rpx)) rgba(0,0,0,.06);
  border: 0.5px solid var(--line);
}
.mem-sum-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: calc(12 * var(--rpx)); }
.mem-sum-title { font-size: var(--type-secondary); color: var(--accent); font-weight: 700; letter-spacing: calc(.5 * var(--rpx)); }
.mem-sum-body { font-size: calc(30 * var(--rpx)); color: var(--txt); line-height: 1.7; }

.mem-notes-head {
  display: flex; justify-content: space-between; align-items: center;
  font-size: var(--type-secondary); color: var(--sub); font-weight: 600; margin: calc(8 * var(--rpx)) calc(8 * var(--rpx)) calc(14 * var(--rpx));
}
.mem-tidy { color: var(--accent); font-weight: 600; }

/* 记忆编辑弹层 */
.mem-edit {
  width: calc(620 * var(--rpx)); background: var(--bg-elev); border-radius: var(--r-xl); padding: calc(34 * var(--rpx));
  box-shadow: 0 calc(20 * var(--rpx)) calc(60 * var(--rpx)) rgba(0,0,0,.25);
}
.mem-edit-title { font-size: calc(32 * var(--rpx)); font-weight: 700; color: var(--txt); margin-bottom: calc(20 * var(--rpx)); }
.mem-edit-ta {
  width: 100%; box-sizing: border-box; height: calc(260 * var(--rpx)); padding: calc(22 * var(--rpx)) calc(24 * var(--rpx));
  border-radius: var(--r-md); font-size: calc(30 * var(--rpx)); line-height: 1.6;
  background: var(--bg); color: var(--txt); border: 0.5px solid var(--line);
}
.mem-edit-btns { display: flex; gap: calc(16 * var(--rpx)); margin-top: calc(24 * var(--rpx)); }
.mem-edit-btn { flex: 1; text-align: center; padding: calc(20 * var(--rpx)); border-radius: var(--r-md); font-size: calc(30 * var(--rpx)); font-weight: 600; }
.mem-edit-btn.cancel { background: var(--bg); color: var(--sub); }
.mem-edit-btn.save { background: var(--accent-fill, var(--accent)); color: #fff; }

/* 查词弹层喇叭 */
.pop-word-row { display: flex; justify-content: space-between; align-items: flex-start; }
.pop-say {
  display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: calc(64 * var(--rpx)); height: calc(64 * var(--rpx)); border-radius: 50%; background: var(--bg);
  transition: background .2s ease;
}
.pop-say .say-ic { background: var(--accent); width: calc(34 * var(--rpx)); height: calc(34 * var(--rpx)); }
/* 喇叭播放态:填充高亮 + 图标脉动 + 外圈呼吸 */
.pop-say.playing { background: var(--accent); animation: sayBreathe 1.4s ease-in-out infinite; }
.pop-say.playing .say-ic { background: #fff; animation: sayPulse 0.9s ease-in-out infinite; }
@keyframes sayPulse {
  0%   { transform: scale(1);    opacity: .75; }
  50%  { transform: scale(1.22); opacity: 1; }
  100% { transform: scale(1);    opacity: .75; }
}
@keyframes sayBreathe {
  0%,100% { box-shadow: 0 0 0 0 rgba(10,132,255,.40); }
  50%     { box-shadow: 0 0 0 calc(10 * var(--rpx)) rgba(10,132,255,0); }
}

/* 诊断开关 */
.diag-row { display: flex; justify-content: space-between; align-items: center; margin-top: calc(28 * var(--rpx)); padding: calc(8 * var(--rpx)) calc(4 * var(--rpx)); }
.diag-label { font-size: var(--type-body); color: var(--sub); }
.diag-switch { width: calc(84 * var(--rpx)); height: calc(48 * var(--rpx)); border-radius: var(--r-lg); background: var(--line); position: relative; transition: background .2s; }
.diag-switch.on { background: var(--accent); }
.diag-knob { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); border-radius: 50%; background: #fff; position: absolute; top: calc(4 * var(--rpx)); left: calc(4 * var(--rpx)); transition: left .2s; box-shadow: 0 calc(2 * var(--rpx)) calc(6 * var(--rpx)) rgba(0,0,0,.2); }
.diag-switch.on .diag-knob { left: calc(40 * var(--rpx)); }

/* 上划取消录音提示 */
.cancel-hint {
  position: fixed; left: 0; right: 0; bottom: calc(220 * var(--rpx)); text-align: center; z-index: 50;
  pointer-events: none;
}
.cancel-hint-inner {
  display: inline-block; padding: calc(16 * var(--rpx)) calc(32 * var(--rpx)); border-radius: var(--r-pill);
  background: rgba(0,0,0,.72); color: #fff; font-size: var(--type-body);
}
.cancel-hint.armed .cancel-hint-inner { background: var(--danger); }
.mic-btn.cancel-armed { background: var(--danger); }

/* ===== 单词本 v2:网格卡片 ===== */
/* 搜索框(带放大镜图标,修宽度展示全) */
.vsearch {
  position: relative; display: flex; align-items: center;
  margin: calc(6 * var(--rpx)) 0 calc(20 * var(--rpx)); padding: 0 calc(20 * var(--rpx));
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-xl);
}
.vsearch-ic {
  width: calc(30 * var(--rpx)); height: calc(30 * var(--rpx)); flex: none; margin-right: calc(12 * var(--rpx)); background: var(--sub);
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='M21 21l-4.35-4.35'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='M21 21l-4.35-4.35'/%3E%3C/svg%3E");
}
.vsearch-input {
  flex: 1; min-width: 0; height: calc(76 * var(--rpx)); padding: 0; font-size: calc(30 * var(--rpx));
  background: transparent; color: var(--txt); border: none;
}
.vsearch-clear { flex: none; color: var(--sub); font-size: calc(30 * var(--rpx)); padding: 0 calc(8 * var(--rpx)); }

/* 网格:一行 3 个 */
.vgrid { display: flex; flex-wrap: wrap; gap: calc(16 * var(--rpx)); }
.vcard {
  width: calc((100% - calc(32 * var(--rpx))) / 3); box-sizing: border-box;
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-md);
  padding: calc(18 * var(--rpx)) calc(14 * var(--rpx)); text-align: center; box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.05);
}
.vcard.on { border-color: var(--accent); }
/* 三行紧凑布局:① 单词 ② 音标 ③ 词性·注释 */
.vcard-word { font-size: calc(27 * var(--rpx)); font-weight: 600; color: var(--txt); word-break: break-word; line-height: 1.2; }
/* 第2行:音标独占一行 */
.vcard-ph { font-size: calc(19 * var(--rpx)); color: var(--sub); font-weight: 400; margin-top: calc(3 * var(--rpx)); line-height: 1.2; font-family: -apple-system, "Times New Roman", serif; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 第3行:词性 + 注释 合并一行,超出省略 */
.vcard-pm { margin-top: calc(5 * var(--rpx)); font-size: calc(19 * var(--rpx)); line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vcard-pos { color: var(--accent); font-style: italic; }
.vcard-mean { color: var(--sub); margin-left: calc(6 * var(--rpx)); }

/* 详情弹层例句 + 删除 */
.pop-sent { font-size: var(--type-body); color: var(--sub); margin-top: calc(14 * var(--rpx)); font-style: italic; line-height: 1.5; opacity: .85; }
.pop-del {
  display: flex; align-items: center; justify-content: center; gap: calc(10 * var(--rpx));
  margin-top: calc(28 * var(--rpx)); padding: calc(18 * var(--rpx)); border-radius: var(--r-md);
  background: rgba(255,59,48,.1); color: var(--danger); font-size: var(--type-action); font-weight: 600;
}
.trash-ic {
  width: calc(30 * var(--rpx)); height: calc(30 * var(--rpx)); background: var(--danger);
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M10 11v6M14 11v6'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M10 11v6M14 11v6'/%3E%3C/svg%3E");
}

/* ===== 导航玻璃透明度滑块 ===== */
.glass-slider { display: flex; align-items: center; gap: calc(16 * var(--rpx)); padding: calc(12 * var(--rpx)) calc(8 * var(--rpx)); }
/* 滑块:JS 把已填充比例写进 --pct(onGlassChange 里),轨道用渐变实现"进度条"(左侧高亮色/右侧灰)。
   拇指加大(44rpx)带阴影,好点好看。--pct 缺省 50%。 */
.gslider {
  flex: 1; height: calc(48 * var(--rpx)); -webkit-appearance: none; appearance: none; background: transparent;
  --pct: 50%;
}
.gslider::-webkit-slider-runnable-track {
  height: calc(12 * var(--rpx)); border-radius: calc(6 * var(--rpx));
  background: linear-gradient(to right, var(--accent) 0%, var(--accent) var(--pct), var(--line) var(--pct), var(--line) 100%);
}
.gslider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: calc(44 * var(--rpx)); height: calc(44 * var(--rpx)); border-radius: 50%;
  background: #fff; border: calc(2 * var(--rpx)) solid var(--accent);
  margin-top: calc(-16 * var(--rpx)); box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.25);
}
.gslider::-moz-range-track { height: calc(12 * var(--rpx)); border-radius: calc(6 * var(--rpx)); background: var(--line); }
.gslider::-moz-range-progress { height: calc(12 * var(--rpx)); border-radius: calc(6 * var(--rpx)); background: var(--accent); }
.gslider::-moz-range-thumb { width: calc(44 * var(--rpx)); height: calc(44 * var(--rpx)); border: calc(2 * var(--rpx)) solid var(--accent); border-radius: 50%; background: #fff; }
.glass-ic {
  width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); flex: none; border-radius: calc(8 * var(--rpx)); border: 0.5px solid var(--line);
}
.glass-ic-min { background: transparent; }
.glass-ic-max {
  background: rgba(150,150,160,.85);
}

/* ===== 设置区:开关行(接续提示等) ===== */
.set-row {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; margin-top: calc(28 * var(--rpx)); padding: calc(4 * var(--rpx)) 0;
}
.set-row-text { flex: 1; min-width: 0; text-align: left; }
.set-row-title { font-size: var(--type-action); color: var(--txt); font-weight: 600; }
.set-row-sub { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(4 * var(--rpx)); }
.switch {
  width: calc(88 * var(--rpx)); height: calc(52 * var(--rpx)); border-radius: var(--r-pill); flex: none; margin-left: calc(20 * var(--rpx));
  background: rgba(120,120,128,.32); transition: background .2s ease;
}
.switch.on { background: var(--accent); }
.switch-knob {
  width: calc(44 * var(--rpx)); height: calc(44 * var(--rpx)); border-radius: 50%; background: #fff; margin: calc(4 * var(--rpx));
  box-shadow: 0 calc(2 * var(--rpx)) calc(6 * var(--rpx)) rgba(0,0,0,.2); transition: transform .2s ease;
}
.switch.on .switch-knob { transform: translateX(calc(36 * var(--rpx))); }

/* ===== 记忆分级 UI ===== */
.mem-group-title { font-size: var(--type-secondary); color: var(--sub); font-weight: 700; margin: calc(24 * var(--rpx)) calc(8 * var(--rpx)) calc(14 * var(--rpx)); letter-spacing: calc(.5 * var(--rpx)); }
.mem-core-item { border-left: calc(4 * var(--rpx)) solid var(--accent); }
/* 共享身份层「关于你」:浅色卡片整体框起,视觉上与下方角色业务记忆分层 */
.mem-shared { background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-md); padding: calc(16 * var(--rpx)) calc(18 * var(--rpx)) calc(6 * var(--rpx)); margin: calc(6 * var(--rpx)) calc(2 * var(--rpx)) calc(22 * var(--rpx)); }
.mem-shared-head { display: flex; align-items: center; gap: calc(10 * var(--rpx)); font-size: var(--type-secondary); font-weight: 700; color: var(--accent); margin-bottom: calc(10 * var(--rpx)); letter-spacing: calc(.5 * var(--rpx)); }
.mem-shared-ic { width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: var(--accent); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.mem-shared-item { background: transparent; }
.mem-star { color: var(--sub); font-size: calc(30 * var(--rpx)); margin-right: calc(4 * var(--rpx)); }
.mem-star.on { color: var(--warn); }

/* ===== 记忆页:统计条 + AI整理 ===== */
.mem-bar { display: flex; align-items: center; justify-content: space-between; margin: calc(4 * var(--rpx)) calc(4 * var(--rpx)) calc(16 * var(--rpx)); }
.mem-bar-stat { display: flex; gap: calc(10 * var(--rpx)); }
.mem-chip { font-size: var(--type-footnote); color: var(--sub); background: var(--bg-elev); border: 0.5px solid var(--line); padding: calc(6 * var(--rpx)) calc(16 * var(--rpx)); border-radius: var(--r-pill); }
.mem-chip-core { color: var(--warn); border-color: rgba(255,149,0,.4); }
.mem-tidy-btn {
  display: flex; align-items: center; gap: calc(8 * var(--rpx)); padding: calc(10 * var(--rpx)) calc(22 * var(--rpx)); border-radius: var(--r-pill);
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-secondary); font-weight: 600;
}
.mem-tidy-btn.busy { opacity: .6; }
.tidy-ic {
  width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: #fff; flex: none;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 3v4M3 5h4M6 17v4M4 19h4M13 3l2.5 6.5L22 12l-6.5 2.5L13 21l-2.5-6.5L4 12l6.5-2.5z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 3v4M3 5h4M6 17v4M4 19h4M13 3l2.5 6.5L22 12l-6.5 2.5L13 21l-2.5-6.5L4 12l6.5-2.5z'/%3E%3C/svg%3E");
}

/* ===== 点气泡空白处播放(无按钮,不撑大气泡) ===== */
/* 播放中:气泡外持续跳动的发光环,作为"正在朗读"的明确状态反馈(用户要求:播放时一直在 + 跳动动画) */
.bubble.speaking, .corr-fix.speaking { position: relative; }
/* 用 ::after 做独立发光环,不挤占气泡布局;scale+opacity 双重脉动,播放期间 infinite 一直跳 */
.bubble.speaking::after, .corr-fix.speaking::after {
  content: ''; position: absolute; left: calc(-3 * var(--rpx)); top: calc(-3 * var(--rpx));
  right: calc(-3 * var(--rpx)); bottom: calc(-3 * var(--rpx));
  border: calc(3 * var(--rpx)) solid var(--accent); border-radius: inherit;
  pointer-events: none; animation: speakRing 1s ease-in-out infinite;
}
.bubble.ai.speaking::after { border-color: var(--accent); }
.bubble.me.speaking::after { border-color: #fff; }
.corr-fix.speaking::after { border-color: var(--warn); }
@keyframes speakRing {
  0%, 100% { transform: scale(1); opacity: .45; }
  50%      { transform: scale(1.035); opacity: 1; }
}
/* tab 切换入场动画:轻微横移/淡入(苹果克制感)。左右滑切 tab 时方向不同,点 tab 用淡入。
   动画过程 translateX 临时偏移,overflow-x:hidden 防露横向滚动条;结束回到 0 不留溢出。 */
.log.tab-sl { animation: tabSlideL .28s cubic-bezier(.32,.72,0,1); overflow-x: hidden; }
.log.tab-sr { animation: tabSlideR .28s cubic-bezier(.32,.72,0,1); overflow-x: hidden; }
.log.tab-fade { animation: tabFade .24s ease-out; }
@keyframes tabSlideL { from { transform: translateX(calc(40 * var(--rpx))); opacity: .3; } to { transform: translateX(0); opacity: 1; } }
@keyframes tabSlideR { from { transform: translateX(calc(-40 * var(--rpx))); opacity: .3; } to { transform: translateX(0); opacity: 1; } }
@keyframes tabFade { from { opacity: .4; } to { opacity: 1; } }
/* 缺信息追问气泡:琥珀色左条区隔,提示用户补充 */
.bubble.ai.need-info { border-left: calc(6 * var(--rpx)) solid #ff9f0a; background: rgba(255,159,10,.06); }
.need-info-tip { font-size: calc(21 * var(--rpx)); color: #d6820a; margin-top: calc(8 * var(--rpx)); margin-left: calc(4 * var(--rpx)); }
/* 内联 SVG 图标(替换原 emoji,与文字基线对齐) */
.tip-ic, .tr-ic { width: calc(28 * var(--rpx)); height: calc(28 * var(--rpx)); vertical-align: calc(-6 * var(--rpx)); display: inline-block; }

/* ===== 表达出彩:气泡金边纪念 + 一次性烟花 ===== */
/* 🔥 bubble-wrap 撑满 me-col 宽(width:100%):否则 me-col 的 align-items:flex-end 让 bubble-wrap
   收缩到内容宽,bubble 的 max-width:85% 锚在收缩父上→恶性收窄→"11"逐字竖排(图实锤)。
   撑满后 bubble 的 85% 相对正确宽度,气泡靠右用 margin-left:auto / text 内容左对齐。 */
.bubble-wrap { position: relative; width: 100%; display: flex; flex-direction: column; align-items: flex-end; }
/* V59 批次A 渲染隔离:单条变化不波及其他项的布局计算。只用 layout style(不含 paint)——bubble-wrap/vitem 内有长按菜单等弹出物,paint 会裁剪 */
.bubble-wrap, .pny-card, .trip-line, .vitem { contain: layout style; }
/* 动画层预提升合成层,减少切 tab/烟花时的重排 */
.log.tab-sl, .log.tab-sr { will-change: transform; }
.fireworks .fw { will-change: transform, opacity; }
/* 持久金边:这句被点过赞,留个淡金描边作纪念 */
.bubble.me.excellent { box-shadow: 0 0 0 calc(2 * var(--rpx)) rgba(255,200,40,.85), 0 calc(4 * var(--rpx)) calc(16 * var(--rpx)) rgba(255,180,0,.25); }

/* 烟花容器:覆盖在气泡上,不挡点击 */
.fireworks { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 5; }
.fireworks .fw {
  position: absolute; top: 50%; left: 50%; width: calc(10 * var(--rpx)); height: calc(10 * var(--rpx)); border-radius: 50%;
  opacity: 0; transform: translate(-50%, -50%);
  animation: fwBurst 1.1s ease-out forwards;
}
/* 8 个粒子向不同方向飞散,颜色交错(金/橙/粉) */
.fireworks .fw1 { background: #ffd23f; --dx:  calc(90 * var(--rpx)); --dy: -calc(70 * var(--rpx)); }
.fireworks .fw2 { background: #ff8e3c; --dx: -calc(90 * var(--rpx)); --dy: -calc(60 * var(--rpx)); animation-delay: .04s; }
.fireworks .fw3 { background: #ff5d8f; --dx: calc(110 * var(--rpx)); --dy:  calc(30 * var(--rpx)); animation-delay: .08s; }
.fireworks .fw4 { background: #ffd23f; --dx:-calc(110 * var(--rpx)); --dy:  calc(40 * var(--rpx)); animation-delay: .02s; }
.fireworks .fw5 { background: #4ecdc4; --dx:  calc(40 * var(--rpx)); --dy:-calc(100 * var(--rpx)); animation-delay: .10s; }
.fireworks .fw6 { background: #ff8e3c; --dx: -calc(40 * var(--rpx)); --dy: calc(90 * var(--rpx));  animation-delay: .06s; }
.fireworks .fw7 { background: #ff5d8f; --dx:  calc(70 * var(--rpx)); --dy: calc(80 * var(--rpx));  animation-delay: .12s; }
.fireworks .fw8 { background: #ffd23f; --dx: -calc(70 * var(--rpx)); --dy: calc(75 * var(--rpx));  animation-delay: .03s; }
@keyframes fwBurst {
  0%   { opacity: 1; transform: translate(-50%, -50%) scale(.4); }
  70%  { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) scale(1); }
}
/* 中心星星:弹一下淡出 */
.fireworks .fw-star {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%) scale(0);
  font-size: var(--type-display); opacity: 0; animation: fwStar 1.2s ease-out forwards;
}
@keyframes fwStar {
  0%   { opacity: 0; transform: translate(-50%,-50%) scale(0) rotate(-30deg); }
  35%  { opacity: 1; transform: translate(-50%,-50%) scale(1.3) rotate(10deg); }
  60%  { opacity: 1; transform: translate(-50%,-50%) scale(1) rotate(0deg); }
  100% { opacity: 0; transform: translate(-50%,-calc(90 * var(--rpx))) scale(.9); }
}

/* 纠错卡片:更地道说法(样式见上方 .corr-native) */

/* 智能接续提示 chips */
.quick-wrap { display: flex; flex-direction: column; align-items: flex-end; gap: calc(12 * var(--rpx)); margin: calc(4 * var(--rpx)) 0 calc(20 * var(--rpx)); }
.quick-chip {
  max-width: 80%; padding: calc(14 * var(--rpx)) calc(24 * var(--rpx)); border-radius: var(--r-xl);
  background: var(--bg-elev); border: 1px solid var(--accent);
  color: var(--accent); font-size: var(--type-body); line-height: 1.4;
  box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.05);
}

/* ===== 单词本 EN/粤 切换 ===== */
.vlang-seg { display: flex; gap: calc(8 * var(--rpx)); background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-pill); padding: calc(5 * var(--rpx)); margin: calc(4 * var(--rpx)) auto calc(18 * var(--rpx)); width: calc(240 * var(--rpx)); }
.vlang-item { flex: 1; text-align: center; padding: calc(12 * var(--rpx)) 0; border-radius: var(--r-pill); font-size: var(--type-body); font-weight: 600; color: var(--sub); transition: all .2s; }
.vlang-item.on { background: var(--accent-fill, var(--accent)); color: #fff; }

/* ============================================================ */
/* ===== Penny:资产页 ===== */
/* ============================================================ */

/* tab-assets 图标(钱包/卡片) */
.tab-assets {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='5' width='20' height='14' rx='2'/%3E%3Cpath d='M2 10h20'/%3E%3Ccircle cx='17' cy='14.5' r='1.3' fill='black' stroke='none'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='5' width='20' height='14' rx='2'/%3E%3Cpath d='M2 10h20'/%3E%3Ccircle cx='17' cy='14.5' r='1.3' fill='black' stroke='none'/%3E%3C/svg%3E");
}

/* 顶部 hero:净资产 */
.pny-hero { text-align: center; padding: calc(20 * var(--rpx)) 0 calc(28 * var(--rpx)); }
.pny-hero-cap { font-size: var(--type-secondary); color: var(--sub); letter-spacing: 1px; }
.net-tabs { display: inline-flex; gap: calc(4 * var(--rpx)); padding: calc(4 * var(--rpx)); background: var(--bg); border-radius: var(--r-pill); border: 0.5px solid var(--line); }
.net-tab { padding: calc(8 * var(--rpx)) calc(24 * var(--rpx)); font-size: var(--type-secondary); color: var(--sub); border-radius: var(--r-pill); }
.net-tab.on { background: var(--accent-fill, var(--accent)); color: #fff; font-weight: 600; }
.pny-hero-net { font-size: calc(72 * var(--rpx)); font-weight: 700; color: var(--txt); margin-top: calc(8 * var(--rpx)); letter-spacing: -1px; }
/* 金额行：数字居中 + 右侧眼睛开关(统管本页所有金额隐藏/显示,百分比不受控) */
.pny-hero-net-row { display: flex; align-items: center; justify-content: center; gap: calc(16 * var(--rpx)); }
.pny-eye { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); flex-shrink: 0; background: var(--sub); opacity: .65;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E"); }
.pny-eye.off {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24'/%3E%3Cline x1='1' y1='1' x2='23' y2='23'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24'/%3E%3Cline x1='1' y1='1' x2='23' y2='23'/%3E%3C/svg%3E"); }
.pny-hero-chg { display: inline-block; margin-top: calc(10 * var(--rpx)); font-size: var(--type-body); font-weight: 600; padding: calc(4 * var(--rpx)) calc(16 * var(--rpx)); border-radius: var(--r-pill); max-width: 90%; white-space: nowrap; }
.pny-hero-chg.up { color: var(--positive); background: rgba(52,199,89,.12); }
.pny-hero-chg.down { color: var(--danger); background: rgba(255,59,48,.12); }
.pny-hero-chg.flat { color: var(--sub); background: rgba(120,120,128,.12); }

/* 导航条行：口径切换居中,眼睛+增长开关靠右 */
.net-tabs-row { position: relative; display: flex; align-items: center; justify-content: center; }
.pny-toggles { position: absolute; right: calc(8 * var(--rpx)); top: 50%; transform: translateY(-50%); display: flex; align-items: center; gap: calc(18 * var(--rpx)); }
/* 增长量率显隐开关(百分号图标),off=置灰 */
.pny-grow { width: calc(38 * var(--rpx)); height: calc(38 * var(--rpx)); flex-shrink: 0; background: var(--sub); opacity: .65;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3Ccircle cx='6.5' cy='6.5' r='2.5'/%3E%3Ccircle cx='17.5' cy='17.5' r='2.5'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3Ccircle cx='6.5' cy='6.5' r='2.5'/%3E%3Ccircle cx='17.5' cy='17.5' r='2.5'/%3E%3C/svg%3E"); }
.pny-grow.off { opacity: .25; }

/* 卡片容器 */
.pny-card { background: var(--bg-elev); border-radius: var(--r-lg); padding: calc(24 * var(--rpx)); margin: 0 0 calc(20 * var(--rpx)); border: 0.5px solid var(--line); }
.pny-card-t { font-size: var(--type-action); font-weight: 600; color: var(--txt); margin-bottom: calc(16 * var(--rpx)); display: flex; align-items: center; justify-content: space-between; }
.pny-card-sub { font-size: var(--type-footnote); color: var(--sub); font-weight: 400; margin-left: calc(8 * var(--rpx)); }
/* 资产构成视角切换 tab */
.comp-seg { display: flex; background: var(--bg); border-radius: var(--r-pill); padding: calc(4 * var(--rpx)); }
.comp-seg-i { font-size: var(--type-footnote); font-weight: 500; color: var(--sub); padding: calc(8 * var(--rpx)) calc(22 * var(--rpx)); border-radius: var(--r-pill); transition: all .2s ease; }
.comp-seg-i.on { background: var(--bg-elev); color: var(--txt); box-shadow: 0 1px calc(4 * var(--rpx)) rgba(0,0,0,.1); }
/* 海外资产汇率系数输入 */
.pny-fx { display: flex; align-items: center; gap: calc(12 * var(--rpx)); margin-top: calc(14 * var(--rpx)); flex-wrap: wrap; }
.pny-fx-label { font-size: var(--type-secondary); color: var(--txt); font-weight: 600; }
.pny-fx-input { flex: 0 0 calc(200 * var(--rpx)); margin: 0; }
.pny-fx-hint { font-size: var(--type-caption); color: var(--sub); }

/* 三笔钱分布条 */
.bucket-bar { display: flex; height: calc(28 * var(--rpx)); border-radius: var(--r-pill); overflow: hidden; background: var(--bg); }
.bucket-seg { height: 100%; }
.bucket-legend { display: flex; gap: 0 calc(24 * var(--rpx)); margin-top: calc(18 * var(--rpx)); }
.bucket-leg { display: flex; align-items: center; gap: calc(8 * var(--rpx)); }
.bucket-dot { width: calc(16 * var(--rpx)); height: calc(16 * var(--rpx)); border-radius: 50%; flex-shrink: 0; }
.bucket-label { font-size: var(--type-secondary); color: var(--txt); font-weight: 600; }
.bucket-pct { font-size: var(--type-secondary); color: var(--txt); font-variant-numeric: tabular-nums; }
.bucket-slogan { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-top: calc(16 * var(--rpx)); line-height: 1.5; }
/* slogan 放标题右侧替代灰字:占满剩余宽度右对齐,标题「三笔钱」不被挤压 */
.bucket-slogan-inline { flex: 1; text-align: right; margin-left: calc(16 * var(--rpx)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* 金融小知识卡 */
.tip-card { background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-lg); padding: calc(22 * var(--rpx)) calc(24 * var(--rpx)); margin: 0 0 calc(20 * var(--rpx)); }
.tip-head { display: flex; align-items: center; gap: calc(10 * var(--rpx)); margin-bottom: calc(10 * var(--rpx)); }
.tip-tag { font-size: calc(19 * var(--rpx)); color: #fff; background: var(--accent-fill, var(--accent)); padding: calc(2 * var(--rpx)) calc(12 * var(--rpx)); border-radius: var(--r-pill); }
.tip-t { font-size: var(--type-body); font-weight: 600; color: var(--txt); flex: 1; }
.tip-next { font-size: calc(21 * var(--rpx)); color: var(--sub); }
.tip-d { font-size: var(--type-secondary); line-height: 1.6; color: var(--sub); }
.tip-more { font-size: var(--type-footnote); color: var(--accent); font-weight: 600; margin-top: calc(14 * var(--rpx)); }

/* 知识库 */
.kb-top { position: relative; margin-bottom: calc(16 * var(--rpx)); } /* relative:作 K币浮窗的定位锚点(浮窗 absolute 挂在切换行下方) */
.kb-seg { display: flex; gap: calc(8 * var(--rpx)); padding: calc(5 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-sm); }
.kb-seg-i { flex: 1; display: flex; align-items: center; justify-content: center; gap: calc(8 * var(--rpx)); padding: calc(14 * var(--rpx)) 0; font-size: calc(25 * var(--rpx)); color: var(--sub); border-radius: calc(10 * var(--rpx)); }
.kb-seg-i.on { background: var(--accent-fill, var(--accent)); color: #fff; font-weight: 600; }
.kb-seg-mem-ic { width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: currentColor; -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a7 7 0 0 0-7 7c0 2.4 1.2 4 2.5 5.5L9 16v3a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-3l1.5-1.5C17.8 13 19 11.4 19 9a7 7 0 0 0-7-7z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a7 7 0 0 0-7 7c0 2.4 1.2 4 2.5 5.5L9 16v3a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-3l1.5-1.5C17.8 13 19 11.4 19 9a7 7 0 0 0-7-7z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.kb-seg-kb-ic { width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: currentColor; -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 19.5A2.5 2.5 0 0 1 6.5 17H20'/%3E%3Cpath d='M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.kb-cats { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); padding: 0 calc(4 * var(--rpx)) calc(4 * var(--rpx)); }
.kb-search { display: flex; align-items: center; gap: calc(10 * var(--rpx)); background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-pill); padding: calc(8 * var(--rpx)) calc(20 * var(--rpx)); margin-bottom: calc(16 * var(--rpx)); }
.kb-search-input { flex: 1; font-size: var(--type-body); color: var(--txt); height: calc(56 * var(--rpx)); background: transparent; border: none; outline: none; -webkit-appearance: none; appearance: none; }
.kb-search-input::placeholder { color: var(--sub); }
/* 知识页顶部小知识横幅:三条横向轮播(swiper),点击跳条目 */
.kb-banner-wrap { margin-bottom: calc(16 * var(--rpx)); }
/* #9 自动轮播:viewport 裁切,track 横排 N 张各占 100%,靠 translateX 平移;dots 联动 kbBannerIdx */
.kb-banner-viewport { height: calc(116 * var(--rpx)); overflow: hidden; border-radius: var(--r-md); }
.kb-banner-track { display: flex; flex-direction: row; height: 100%; transition: transform .45s cubic-bezier(.4,0,.2,1); }
.kb-banner-track > * { flex: 0 0 100%; width: 100%; }
.kb-banner { display: flex; align-items: center; gap: calc(14 * var(--rpx)); height: 100%; box-sizing: border-box; background: linear-gradient(135deg, rgba(0,122,255,.1), rgba(88,86,214,.08)); border: 0.5px solid var(--line); border-radius: var(--r-md); padding: calc(18 * var(--rpx)) calc(22 * var(--rpx)); }
/* 灯泡 svg 图标替代「小知识」文字标签 */
.kb-banner-ic { flex-shrink: 0; width: calc(38 * var(--rpx)); height: calc(38 * var(--rpx)); background: var(--accent); -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7z'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; }
.kb-banner-body { flex: 1; min-width: 0; }
.kb-banner-t { font-size: var(--type-body); font-weight: 600; color: var(--txt); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-banner-d { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-top: calc(4 * var(--rpx)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kb-banner-dots { display: flex; flex-direction: row; justify-content: center; gap: calc(8 * var(--rpx)); margin-top: calc(10 * var(--rpx)); }
.kb-banner-dot { width: calc(10 * var(--rpx)); height: calc(10 * var(--rpx)); border-radius: 50%; background: rgba(120,120,128,.35); transition: width .2s; }
.kb-banner-dot.on { width: calc(20 * var(--rpx)); border-radius: calc(5 * var(--rpx)); background: var(--accent); }
.kb-search-clear { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); line-height: calc(40 * var(--rpx)); text-align: center; border-radius: 50%; background: rgba(120,120,128,.16); color: var(--sub); font-size: var(--type-footnote); }
.kb-noresult { text-align: center; padding: calc(60 * var(--rpx)) calc(30 * var(--rpx)); }
.kb-noresult-t { font-size: var(--type-action); color: var(--txt); font-weight: 600; }
.kb-noresult-sub { font-size: calc(23 * var(--rpx)); color: var(--sub); margin-top: calc(12 * var(--rpx)); line-height: 1.5; }
.kb-noresult-btn { display: inline-block; margin-top: calc(24 * var(--rpx)); padding: calc(14 * var(--rpx)) calc(36 * var(--rpx)); background: var(--accent-fill, var(--accent)); color: #fff; font-size: calc(25 * var(--rpx)); font-weight: 600; border-radius: var(--r-pill); }
.kb-chip { padding: calc(12 * var(--rpx)) calc(22 * var(--rpx)); border-radius: var(--r-pill); font-size: calc(23 * var(--rpx)); background: var(--bg-elev); border: 0.5px solid var(--line); color: var(--sub); transition: all .2s ease; }
.kb-chip.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }
.kb-item { background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-md); padding: calc(22 * var(--rpx)) calc(24 * var(--rpx)); margin-top: calc(16 * var(--rpx)); box-sizing: border-box; }
.kb-item-head { display: flex; align-items: center; }
.kb-item-t { flex: 1; font-size: var(--type-action); font-weight: 600; color: var(--txt); }
.kb-item-arrow { font-size: calc(32 * var(--rpx)); color: var(--sub); }
.kb-item-brief { font-size: calc(23 * var(--rpx)); color: var(--sub); line-height: 1.5; margin-top: calc(8 * var(--rpx)); }
.kb-foot { text-align: center; font-size: calc(21 * var(--rpx)); color: var(--sub); padding: calc(28 * var(--rpx)) 0 calc(12 * var(--rpx)); }
.pop.pop-kb { width: 84vw; max-width: calc(640 * var(--rpx)); padding: calc(30 * var(--rpx)) calc(28 * var(--rpx)) calc(24 * var(--rpx)); }
.kb-body { font-size: var(--type-body); line-height: 1.7; color: var(--txt); margin: calc(18 * var(--rpx)) 0 calc(8 * var(--rpx)); }
.pny-mini-empty { color: var(--sub); font-size: var(--type-secondary); text-align: center; padding: calc(30 * var(--rpx)) 0; }

/* canvas */
.pny-trend-wrap { position: relative; }
.pny-canvas-trend { width: 100%; height: 200px; }
/* 走势图时间筛选 segment */
.trend-seg { display: inline-flex; background: var(--bg); border-radius: var(--r-pill); padding: calc(4 * var(--rpx)); }
.trend-seg-i { font-size: var(--type-caption); color: var(--sub); padding: calc(8 * var(--rpx)) calc(16 * var(--rpx)); border-radius: var(--r-pill); transition: all .2s ease; }
.trend-seg-i.on { background: var(--bg-elev); color: var(--txt); box-shadow: 0 1px calc(4 * var(--rpx)) rgba(0,0,0,.1); }
/* 走势图账户筛选 chip 横滑条(仅总资产口径) */
.trend-acct-bar { white-space: nowrap; margin-top: calc(14 * var(--rpx)); overflow-x: auto; scrollbar-width: none; }
.trend-acct-bar::-webkit-scrollbar { display: none; }
.trend-acct-chip { display: inline-block; font-size: calc(21 * var(--rpx)); color: var(--sub); background: var(--bg); border: 0.5px solid var(--line); padding: calc(7 * var(--rpx)) calc(18 * var(--rpx)); border-radius: var(--r-pill); margin-right: calc(10 * var(--rpx)); }
.trend-acct-chip.on { color: #fff; background: var(--accent-fill, var(--accent)); border-color: var(--accent); }
/* 数据点点击浮窗 */
.trend-pop { position: absolute; box-sizing: border-box; min-width: calc(96 * var(--rpx)); max-width: calc(200 * var(--rpx)); transform: translateX(-50%); background: var(--txt); border-radius: calc(10 * var(--rpx)); padding: calc(8 * var(--rpx)) calc(14 * var(--rpx)); text-align: center; z-index: 5; pointer-events: none; }
.trend-pop-v { white-space: nowrap; }
.trend-pop-v { font-size: var(--type-footnote); font-weight: 700; color: var(--bg-elev); }
.trend-pop-g { font-size: calc(19 * var(--rpx)); font-weight: 600; white-space: nowrap; margin-top: calc(2 * var(--rpx)); }
.trend-pop-g.up { color: var(--positive); } .trend-pop-g.down { color: var(--danger); } .trend-pop-g.flat { color: var(--sub); }
.trend-pop-d { font-size: calc(18 * var(--rpx)); color: var(--sub); margin-top: calc(2 * var(--rpx)); }
.pny-comp { display: flex; align-items: center; gap: calc(20 * var(--rpx)); }
.pny-canvas-pie { width: 150px; height: 150px; flex-shrink: 0; }
.pny-legend { flex: 1; display: flex; flex-direction: column; gap: calc(12 * var(--rpx)); }
.pny-leg-row { display: flex; align-items: center; gap: calc(10 * var(--rpx)); font-size: var(--type-secondary); }
.pny-leg-dot { width: calc(16 * var(--rpx)); height: calc(16 * var(--rpx)); border-radius: calc(4 * var(--rpx)); flex-shrink: 0; }
/* label 不 flex:1(类型名短,占满显得列太宽),自然宽;val 用 margin-left:auto 推到右边 */
.pny-leg-label { color: var(--txt); flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pny-leg-val { color: var(--sub); flex-shrink: 0; margin-left: auto; }
.pny-leg-pct { color: var(--sub); font-variant-numeric: tabular-nums; }

/* 账户行 */
.pny-acc { display: flex; align-items: center; gap: calc(16 * var(--rpx)); padding: calc(18 * var(--rpx)) 0; border-bottom: 1px solid var(--line); }
.pny-acc:last-child { border-bottom: none; }
.pny-acc-dot { width: calc(14 * var(--rpx)); height: calc(14 * var(--rpx)); border-radius: 50%; flex-shrink: 0; }
.pny-acc-main { flex: 1; min-width: 0; }
.pny-acc-name { font-size: var(--type-action); color: var(--txt); font-weight: 500; }
.pny-acc-meta { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(4 * var(--rpx)); }
.pny-acc-amt { font-size: calc(30 * var(--rpx)); font-weight: 600; color: var(--txt); font-variant-numeric: tabular-nums; }
.pny-acc-amt.debt { color: var(--danger); }

/* 账户分组 + 3列卡片网格 */
.acc-group { margin-top: calc(18 * var(--rpx)); }
.acc-group:first-child { margin-top: calc(8 * var(--rpx)); }
.acc-group-t { display: flex; align-items: center; gap: calc(10 * var(--rpx)); font-size: var(--type-secondary); color: var(--sub); font-weight: 600; margin-bottom: calc(12 * var(--rpx)); }
.acc-group-dot { width: calc(14 * var(--rpx)); height: calc(14 * var(--rpx)); border-radius: 50%; flex-shrink: 0; }
.acc-grid { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); }
.acc-cell { position: relative; width: calc((100% - calc(12 * var(--rpx))) / 2); box-sizing: border-box; padding: calc(16 * var(--rpx)) calc(18 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-sm); }
.acc-cell-date { position: absolute; right: calc(14 * var(--rpx)); top: calc(12 * var(--rpx)); font-size: calc(19 * var(--rpx)); color: var(--sub); opacity: .7; }
.acc-cell-date.today { color: var(--positive); opacity: 1; font-weight: 600; }
.acc-cell-name { font-size: calc(23 * var(--rpx)); color: var(--txt); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-right: calc(70 * var(--rpx)); }
.acc-cell-amt { font-size: var(--type-body); font-weight: 600; color: var(--txt); margin-top: calc(8 * var(--rpx)); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acc-cell.debt .acc-cell-amt { color: var(--danger); }
/* 账户卡「较上次」量率小字:固定宽内 nowrap+省略,率极值已兜底(暴涨/平),不撑宽卡片 */
.acc-cell-chg { font-size: calc(18 * var(--rpx)); font-weight: 600; margin-top: calc(4 * var(--rpx)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.acc-cell-chg.up { color: var(--positive); } .acc-cell-chg.down { color: var(--danger); } .acc-cell-chg.flat { color: var(--sub); }

/* 操作区 */
.pny-actions { display: flex; gap: calc(16 * var(--rpx)); margin: calc(8 * var(--rpx)) 0 calc(30 * var(--rpx)); }
.pny-btn { flex: 1; min-height: var(--btn-h); padding: 0 calc(22 * var(--rpx)); display: flex; align-items: center; justify-content: center; text-align: center; border-radius: var(--btn-radius); font-size: var(--btn-font); font-weight: 600; background: var(--bg-elev); border: 0.5px solid var(--line); color: var(--txt); }
.pny-btn.primary { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }

/* ===== Penny 弹层(账户/录入/盘点)===== */
.pop-title { font-size: var(--dialog-title-size); line-height: 1.3; font-weight: 700; color: var(--txt); text-align: center; }
.pop-sub { font-size: var(--dialog-body-size); line-height: 1.5; color: var(--sub); text-align: center; margin-top: calc(6 * var(--rpx)); }
.pny-input { box-sizing: border-box; width: 100%; margin-top: calc(24 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-sm); padding: calc(22 * var(--rpx)); font-size: calc(30 * var(--rpx)); color: var(--txt); }
/* amt 数字输入:box-sizing+width:100% 防溢出右屏,text-align:center 数字居中(之前溢出+不居中) */
.pny-input.amt { width: 100%; box-sizing: border-box; font-size: calc(44 * var(--rpx)); font-weight: 700; text-align: center; font-variant-numeric: tabular-nums; }
/* 录入余额弹层·历史录入表格(四列:时间/金额/环比增量/增幅) */
.amt-recs { margin-top: calc(20 * var(--rpx)); border: 0.5px solid var(--line); border-radius: calc(14 * var(--rpx)); overflow: hidden; }
.amt-rec-head, .amt-rec-row { display: flex; align-items: center; }
.amt-rec-head { background: rgba(120,120,128,.10); padding: calc(12 * var(--rpx)) calc(6 * var(--rpx)); }
.amt-rec-body { max-height: calc(170 * var(--rpx)); -webkit-overflow-scrolling: touch; }
.amt-rec-row { padding: calc(13 * var(--rpx)) calc(6 * var(--rpx)); border-top: 0.5px solid var(--line); }
.arc-c { text-align: center; font-size: var(--type-footnote); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.amt-rec-head .arc-c { font-size: var(--type-caption); color: var(--sub); font-weight: 600; }
.arc-date { flex: 0 0 23%; color: var(--sub); }
.arc-amt { flex: 0 0 29%; color: var(--txt); font-weight: 600; }
.arc-d { flex: 0 0 26%; }
.arc-p { flex: 0 0 22%; }
.amt-rec-row .arc-d.up, .amt-rec-row .arc-p.up { color: var(--positive); }
.amt-rec-row .arc-d.down, .amt-rec-row .arc-p.down { color: var(--danger); }
.amt-rec-row .arc-d.flat, .amt-rec-row .arc-p.flat { color: var(--sub); }
.pny-type-grid { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); margin-top: calc(20 * var(--rpx)); }
.pny-type { padding: calc(14 * var(--rpx)) calc(26 * var(--rpx)); border-radius: var(--r-pill); font-size: var(--type-body); background: var(--bg); border: 0.5px solid var(--line); color: var(--sub); }
.pny-type.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }
.pny-type.debt.on { background: var(--danger); border-color: var(--danger); }
.pop-btns { display: flex; gap: calc(14 * var(--rpx)); margin-top: calc(28 * var(--rpx)); }
.pop-btn { flex: 1; min-height: var(--dialog-action-h); padding: 0 calc(18 * var(--rpx)); display: flex; align-items: center; justify-content: center; text-align: center; border-radius: var(--btn-radius); font-size: var(--dialog-action-size); font-weight: 600; }
.pop-btn.cancel { background: var(--bg); color: var(--sub); border: 0.5px solid var(--line); }
.pop-btn.save { background: var(--accent-fill, var(--accent)); color: #fff; }
.pop-btn.del { background: rgba(255,59,48,.12); color: var(--danger); }
.pop-btn.disabled { opacity: .35; }
.trip-edit-preview { width: calc(600 * var(--rpx)); }
.trip-edit-preview-list { max-height: calc(520 * var(--rpx)); margin-top: calc(24 * var(--rpx)); }
.trip-edit-preview-row { display: flex; align-items: flex-start; gap: calc(16 * var(--rpx)); padding: calc(18 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); border-radius: var(--r-md); background: var(--bg); border: 0.5px solid var(--line); }
.trip-edit-preview-badge { flex: none; min-width: calc(64 * var(--rpx)); padding: calc(5 * var(--rpx)) calc(10 * var(--rpx)); border-radius: var(--r-pill); text-align: center; color: var(--accent); background: rgba(91,124,250,.12); font-size: var(--type-caption); font-weight: 700; }
.trip-edit-preview-row.remove .trip-edit-preview-badge { color: var(--danger); background: rgba(255,59,48,.12); }
.trip-edit-preview-row.move .trip-edit-preview-badge { color: #af52de; background: rgba(175,82,222,.12); }
.trip-edit-preview-row.add .trip-edit-preview-badge { color: #248a3d; background: rgba(52,199,89,.13); }
.trip-edit-preview-main { flex: 1; min-width: 0; }
.trip-edit-preview-title { color: var(--txt); font-size: calc(27 * var(--rpx)); font-weight: 650; line-height: 1.35; }
.trip-edit-preview-detail { color: var(--sub); font-size: var(--type-footnote); line-height: 1.45; margin-top: calc(5 * var(--rpx)); overflow-wrap: anywhere; }
.trip-edit-preview-warn { margin-top: calc(16 * var(--rpx)); color: #b25000; background: rgba(255,149,0,.12); border-radius: var(--r-sm); padding: calc(12 * var(--rpx)) calc(16 * var(--rpx)); font-size: var(--type-footnote); line-height: 1.45; }
.trip-edit-preview-note { margin-top: calc(14 * var(--rpx)); color: var(--sub); text-align: center; font-size: calc(21 * var(--rpx)); }

/* ===== 设置面板:mode 切换图标 ===== */
.set-avatar-wrap { position: relative; width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); margin: 0 auto; }
.role-picker { display: flex; justify-content: center; gap: calc(28 * var(--rpx)); margin: calc(22 * var(--rpx)) 0 calc(4 * var(--rpx)); }
/* 设置页顶部角色切换:头像放大更醒目,作为面板第一区块 */
.role-picker.top { gap: calc(40 * var(--rpx)); margin: calc(2 * var(--rpx)) 0 calc(4 * var(--rpx)); }
.role-picker.top .role-opt-av { width: calc(84 * var(--rpx)); height: calc(84 * var(--rpx)); }
.role-picker.top .role-opt span { font-size: calc(23 * var(--rpx)); }
.role-opt { display: flex; flex-direction: column; align-items: center; gap: calc(8 * var(--rpx)); opacity: .5; }
.role-opt.on { opacity: 1; }
.role-opt-av { width: calc(72 * var(--rpx)); height: calc(72 * var(--rpx)); border-radius: 50%; border: calc(3 * var(--rpx)) solid transparent; }
.role-opt.on .role-opt-av { border-color: var(--accent); }
.role-opt span { font-size: calc(21 * var(--rpx)); color: var(--sub); }
.role-opt.on span { color: var(--accent); font-weight: 600; }
/* Kenny 头像:原图重心偏上,aspectFill 裁切后脸偏顶→往下挪一点 */
.set-switch { position: absolute; right: -calc(10 * var(--rpx)); bottom: -calc(6 * var(--rpx)); width: calc(44 * var(--rpx)); height: calc(44 * var(--rpx)); border-radius: 50%; background: var(--accent); display: flex; align-items: center; justify-content: center; box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.2); border: calc(3 * var(--rpx)) solid var(--bg-elev); }
.switch-ic { width: calc(24 * var(--rpx)); height: calc(24 * var(--rpx)); background: #fff;
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 1l4 4-4 4'/%3E%3Cpath d='M3 11V9a4 4 0 0 1 4-4h14'/%3E%3Cpath d='M7 23l-4-4 4-4'/%3E%3Cpath d='M21 13v2a4 4 0 0 1-4 4H3'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 1l4 4-4 4'/%3E%3Cpath d='M3 11V9a4 4 0 0 1 4-4h14'/%3E%3Cpath d='M7 23l-4-4 4-4'/%3E%3Cpath d='M21 13v2a4 4 0 0 1-4 4H3'/%3E%3C/svg%3E");
}

/* ===== Penny chat:发图 ===== */
.pny-cam { width: calc(64 * var(--rpx)); height: calc(64 * var(--rpx)); flex-shrink: 0; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--bg); border: 0.5px solid var(--line); margin-right: calc(12 * var(--rpx)); }
.cam-ic { width: calc(34 * var(--rpx)); height: calc(34 * var(--rpx)); background: var(--accent);
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z'/%3E%3Ccircle cx='12' cy='13' r='4'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z'/%3E%3Ccircle cx='12' cy='13' r='4'/%3E%3C/svg%3E");
}
.pny-img-strip { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); padding: calc(12 * var(--rpx)) calc(16 * var(--rpx)); align-items: center; }
.pny-img-item { position: relative; width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); }
.pny-img-thumb { width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); border-radius: var(--r-sm); }
/* 群聊/发图气泡里展示已发出的图(缩略,点开看大图) */
.bubble-img { flex-shrink: 0; max-width: calc(360 * var(--rpx)); max-height: calc(360 * var(--rpx)); width: auto; height: auto; border-radius: var(--r-md); margin-bottom: calc(8 * var(--rpx)); object-fit: cover; }
/* 全屏看大图 */
.img-viewer { position: fixed; inset: 0; z-index: 9999; background: rgba(0,0,0,.92); display: flex; align-items: center; justify-content: center; }
.img-viewer-img { max-width: 96vw; max-height: 92vh; width: auto; height: auto; }
/* 复制兜底浮层:自动复制被拒时,让用户系统原生长按复制(.copy-fb-text 必须放开全局 user-select:none) */
.copy-fb-mask { position: fixed; inset: 0; z-index: 9999; background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center; padding: calc(48 * var(--rpx)); }
/* ⭐ 用主题变量(--bg-elev/--txt),不能用未定义的 --card → 浅色下卡片不再恒黑、文字看得清 */
.copy-fb-card { width: 100%; max-width: calc(640 * var(--rpx)); background: var(--bg-elev); border-radius: var(--r-lg); padding: calc(36 * var(--rpx)); box-shadow: 0 calc(16 * var(--rpx)) calc(48 * var(--rpx)) rgba(0,0,0,.3); }
.copy-fb-tip { font-size: var(--type-body); color: var(--sub); margin-bottom: calc(20 * var(--rpx)); }
.copy-fb-text { font-size: calc(32 * var(--rpx)); line-height: 1.5; color: var(--txt); max-height: 50vh; overflow-y: auto; overscroll-behavior: contain; padding: calc(20 * var(--rpx)); background: var(--bg); border-radius: var(--r-md); -webkit-user-select: text; user-select: text; -webkit-touch-callout: default; white-space: pre-wrap; word-break: break-word; }
/* 底部按钮行:一键全部复制(主) + 关闭(次) */
.copy-fb-actions { display: flex; gap: calc(16 * var(--rpx)); margin-top: calc(24 * var(--rpx)); }
.copy-fb-all { flex: 1; text-align: center; padding: calc(18 * var(--rpx)); border-radius: var(--r-pill); background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-action); font-weight: 600; }
.copy-fb-all:active { opacity: .85; }
.copy-fb-close { flex: 0 0 auto; min-width: calc(160 * var(--rpx)); text-align: center; padding: calc(18 * var(--rpx)) calc(28 * var(--rpx)); border-radius: var(--r-pill); background: var(--bg); color: var(--txt); font-size: var(--type-action); font-weight: 600; }
.copy-fb-close:active { opacity: .85; }
.pny-img-x { position: absolute; top: -calc(8 * var(--rpx)); right: -calc(8 * var(--rpx)); width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); border-radius: 50%; background: rgba(0,0,0,.6); color: #fff; font-size: var(--type-caption); line-height: calc(32 * var(--rpx)); text-align: center; }
.pny-img-send { padding: calc(16 * var(--rpx)) calc(28 * var(--rpx)); border-radius: var(--r-pill); background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-body); font-weight: 600; }
.pny-img-send.busy { background: var(--sub); opacity: .8; }

/* 截图识别确认弹层(M1) */
.pop.pop-extract { width: 86vw; max-width: calc(720 * var(--rpx)); padding: calc(28 * var(--rpx)) calc(28 * var(--rpx)) calc(24 * var(--rpx)); }
/* 识图目标选择:新建行程 / 加到已有 */
.ext-target-seg { display: flex; gap: calc(10 * var(--rpx)); background: var(--bg); border-radius: var(--r-md); padding: calc(6 * var(--rpx)); margin-top: calc(16 * var(--rpx)); }
.ext-target { flex: 1; text-align: center; padding: calc(16 * var(--rpx)); border-radius: var(--r-sm); font-size: calc(25 * var(--rpx)); color: var(--sub); transition: all .2s ease; }
.ext-target.on { background: var(--bg-elev); color: var(--accent); font-weight: 600; box-shadow: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)) rgba(0,0,0,.12); }
.ext-dest-row { display: flex; align-items: center; gap: calc(14 * var(--rpx)); margin-top: calc(16 * var(--rpx)); }
.ext-dest-label { flex: 0 0 auto; font-size: calc(25 * var(--rpx)); color: var(--sub); }
.ext-dest-input { flex: 1; background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-sm); padding: calc(16 * var(--rpx)) calc(20 * var(--rpx)); font-size: var(--type-body); color: var(--txt); }
.ext-trip-pick { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); margin-top: calc(16 * var(--rpx)); }
.ext-trip-chip { padding: calc(12 * var(--rpx)) calc(24 * var(--rpx)); border-radius: var(--r-pill); font-size: var(--type-secondary); background: var(--bg); border: 0.5px solid var(--line); color: var(--sub); transition: all .2s ease; }
.ext-trip-chip.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); font-weight: 600; }
.ext-trip-empty { font-size: var(--type-secondary); color: var(--sub); padding: calc(12 * var(--rpx)) 0; }
.ext-list { max-height: 60vh; margin-top: calc(16 * var(--rpx)); overscroll-behavior: contain; }
.ext-row { padding: calc(18 * var(--rpx)) calc(18 * var(--rpx)) calc(16 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-md); margin-bottom: calc(14 * var(--rpx)); }
.ext-row.low { border-color: var(--warn); }
.ext-row.unmatched { border-color: var(--danger); border-style: dashed; }
.ext-row-head { display: flex; align-items: center; gap: calc(12 * var(--rpx)); }
.ext-name { flex: 1; font-size: var(--type-action); font-weight: 600; color: var(--txt); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ext-conf { font-size: var(--type-footnote); color: var(--warn); }
.ext-auto { font-size: calc(19 * var(--rpx)); color: #fff; background: var(--accent-fill, var(--accent)); padding: calc(2 * var(--rpx)) calc(10 * var(--rpx)); border-radius: var(--r-pill); }
.ext-x { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); line-height: calc(40 * var(--rpx)); text-align: center; border-radius: 50%; background: rgba(120,120,128,.16); color: var(--sub); font-size: var(--type-footnote); }
.ext-note { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(6 * var(--rpx)); line-height: 1.4; }
.ext-acct-pick { display: flex; flex-wrap: wrap; gap: calc(10 * var(--rpx)); margin-top: calc(12 * var(--rpx)); }
.ext-acct { padding: calc(12 * var(--rpx)) calc(18 * var(--rpx)); border-radius: var(--r-pill); font-size: var(--type-footnote); background: var(--bg-elev); border: 0.5px solid var(--line); color: var(--sub); transition: all .2s ease; }
.ext-acct.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }
.ext-fields { display: flex; gap: calc(12 * var(--rpx)); margin-top: calc(12 * var(--rpx)); }
.pny-input.ext-amt { flex: 1; margin-top: 0; font-size: calc(32 * var(--rpx)); font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; padding: calc(16 * var(--rpx)) calc(18 * var(--rpx)); }
.pny-input.ext-date { width: calc(220 * var(--rpx)); margin-top: 0; font-size: var(--type-secondary); text-align: center; padding: calc(16 * var(--rpx)) calc(12 * var(--rpx)); }

/* 未匹配行:新建账户区 */
.ext-new { margin-top: calc(12 * var(--rpx)); }
.ext-new-toggle { display: inline-flex; align-items: center; gap: calc(8 * var(--rpx)); font-size: calc(23 * var(--rpx)); color: var(--sub); padding: calc(6 * var(--rpx)) calc(4 * var(--rpx)); }
.ext-new-toggle.on { color: var(--accent); }
.ext-new-check { width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); line-height: calc(30 * var(--rpx)); text-align: center; border-radius: calc(8 * var(--rpx)); border: 0.5px solid var(--line); color: #fff; font-size: var(--type-footnote); }
.ext-new-toggle.on .ext-new-check { background: var(--accent); border-color: var(--accent); }
.pny-input.ext-new-name { margin-top: calc(10 * var(--rpx)); font-size: var(--type-body); padding: calc(14 * var(--rpx)) calc(18 * var(--rpx)); }
.ext-type-pick { display: flex; flex-wrap: wrap; gap: calc(10 * var(--rpx)); margin-top: calc(10 * var(--rpx)); }
.ext-type { padding: calc(8 * var(--rpx)) calc(18 * var(--rpx)); border-radius: var(--r-pill); font-size: var(--type-footnote); background: var(--bg-elev); border: 0.5px solid var(--line); color: var(--sub); }
.ext-type.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }

/* 模型选择弹层 */
.pop.pop-model { width: 86vw; max-width: calc(720 * var(--rpx)); padding: calc(28 * var(--rpx)) calc(24 * var(--rpx)) calc(24 * var(--rpx)); }
.model-list { max-height: 64vh; margin-top: calc(16 * var(--rpx)); padding: calc(2 * var(--rpx)) calc(4 * var(--rpx)); box-sizing: border-box; overscroll-behavior: contain; }
.model-brand { font-size: var(--type-footnote); color: var(--sub); font-weight: 600; margin: calc(18 * var(--rpx)) calc(4 * var(--rpx)) calc(8 * var(--rpx)); letter-spacing: calc(.5 * var(--rpx)); }
.model-row { display: flex; align-items: center; gap: calc(10 * var(--rpx)); padding: calc(16 * var(--rpx)) calc(16 * var(--rpx)); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-sm); margin-bottom: calc(10 * var(--rpx)); box-sizing: border-box; width: 100%; }
.model-row.on { border-color: var(--accent); background: var(--bg-elev); }
.model-main { flex: 1; min-width: 0; }
.model-name { font-size: var(--type-body); font-weight: 600; color: var(--txt); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.model-note { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-top: calc(4 * var(--rpx)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.model-price { flex-shrink: 0; max-width: calc(200 * var(--rpx)); text-align: right; font-size: calc(21 * var(--rpx)); font-weight: 600; white-space: nowrap; font-variant-numeric: tabular-nums; }
.model-price.tier-cheap { color: #30a46c; }
.model-price.tier-mid { color: #d97706; }
.model-price.tier-pricey { color: #e5484d; }
.model-badge { font-size: calc(18 * var(--rpx)); font-weight: 600; padding: calc(2 * var(--rpx)) calc(8 * var(--rpx)); border-radius: var(--r-pill); margin-left: calc(6 * var(--rpx)); vertical-align: middle; }
.model-badge.safe { color: #fff; background: var(--accent-fill, var(--accent)); }
.model-badge.def { color: var(--warn); border: 1px solid rgba(255,149,0,.5); }

/* Lenny 行程页 */
.pop-btn.danger { color: var(--danger); }
/* 行程分组导航:已确定/规划中 两段,组内小卡片横滑 */
.trip-groups { margin-bottom: calc(18 * var(--rpx)); }
.trip-grp-title { display: flex; align-items: center; font-size: var(--type-footnote); color: var(--sub); margin: calc(10 * var(--rpx)) calc(2 * var(--rpx)) calc(8 * var(--rpx)); font-weight: 600; }
.trip-grp-dot { width: calc(12 * var(--rpx)); height: calc(12 * var(--rpx)); border-radius: 50%; margin-right: calc(10 * var(--rpx)); }
.trip-grp-dot.confirmed { background: #34c759; }
.trip-grp-dot.planning { background: #ff9f0a; }
.trip-grp-n { margin-left: calc(10 * var(--rpx)); min-width: calc(28 * var(--rpx)); height: calc(28 * var(--rpx)); line-height: calc(28 * var(--rpx)); text-align: center; padding: 0 calc(8 * var(--rpx)); border-radius: var(--r-pill); background: var(--bg-elev); color: var(--sub); font-size: calc(18 * var(--rpx)); font-weight: 500; }
.trip-cardrow { white-space: nowrap; }
.trip-card { display: inline-block; vertical-align: top; min-width: calc(190 * var(--rpx)); max-width: calc(300 * var(--rpx)); padding: calc(16 * var(--rpx)) calc(22 * var(--rpx)); margin-right: calc(14 * var(--rpx)); border-radius: var(--r-md); background: var(--bg-elev); border: 0.5px solid var(--line); }
.trip-card.on { background: var(--accent); border-color: var(--accent); }
.trip-card.on .trip-card-dest { color: #fff; }
.trip-card.on .trip-card-meta { color: rgba(255,255,255,0.82); }
.trip-card-dest { font-size: var(--type-action); font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.trip-card-meta { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-top: calc(6 * var(--rpx)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.trip-hero { background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-lg); padding: calc(26 * var(--rpx)); margin-bottom: calc(20 * var(--rpx)); position: relative; overflow: hidden; }
/* 风光主题:左侧主题色竖条 + 右侧大水印 SVG(低透明度,隐隐透出) */
.trip-hero::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: calc(8 * var(--rpx)); background: var(--scene-c, var(--accent)); }
.trip-hero-wm { position: absolute; right: -calc(20 * var(--rpx)); bottom: -calc(30 * var(--rpx)); width: calc(240 * var(--rpx)); height: calc(240 * var(--rpx)); background: var(--scene-c, #5b7cfa); opacity: .08; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; pointer-events: none; }
.trip-hero-body { position: relative; z-index: 1; padding-bottom: calc(56 * var(--rpx)); }
.trip-hero-scene { display: inline-block; font-size: var(--type-caption); font-weight: 600; color: var(--scene-c, var(--accent)); background: var(--scene-bg, rgba(0,122,255,.1)); padding: calc(3 * var(--rpx)) calc(14 * var(--rpx)); border-radius: var(--r-pill); margin-bottom: calc(10 * var(--rpx)); }
/* 每个 scene 的主题色(注入 --scene-c / --scene-bg)+ 水印图标 */
.scene-nature    { --scene-c: #34a853; --scene-bg: rgba(52,168,83,.1); }
.scene-city      { --scene-c: #5b7cfa; --scene-bg: rgba(91,124,250,.1); }
.scene-island    { --scene-c: #1aa3c4; --scene-bg: rgba(26,163,196,.1); }
.scene-heritage  { --scene-c: #b07a2f; --scene-bg: rgba(176,122,47,.1); }
.scene-themepark { --scene-c: #e8568a; --scene-bg: rgba(232,86,138,.1); }
.scene-food      { --scene-c: #f0883e; --scene-bg: rgba(240,136,62,.1); }
.wm-nature { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Cpath d='M3 20h18L15 8l-3 5-2-3-7 10z'/%3E%3Cpath d='M12 13l3-5 3 5'/%3E%3Ccircle cx='6' cy='6' r='2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Cpath d='M3 20h18L15 8l-3 5-2-3-7 10z'/%3E%3Cpath d='M12 13l3-5 3 5'/%3E%3Ccircle cx='6' cy='6' r='2'/%3E%3C/svg%3E"); }
.wm-city { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Crect x='3' y='9' width='6' height='12'/%3E%3Crect x='10' y='4' width='5' height='17'/%3E%3Crect x='16' y='11' width='5' height='10'/%3E%3Cpath d='M5 12h2M5 15h2M12 7h1M12 11h1M18 14h1'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Crect x='3' y='9' width='6' height='12'/%3E%3Crect x='10' y='4' width='5' height='17'/%3E%3Crect x='16' y='11' width='5' height='10'/%3E%3Cpath d='M5 12h2M5 15h2M12 7h1M12 11h1M18 14h1'/%3E%3C/svg%3E"); }
.wm-island { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 20c2 0 2-1.5 4-1.5s2 1.5 4 1.5 2-1.5 4-1.5 2 1.5 4 1.5'/%3E%3Cpath d='M12 17V8M12 8c-3 0-5 1-6 3M12 8c3 0 5 1 6 3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 20c2 0 2-1.5 4-1.5s2 1.5 4 1.5 2-1.5 4-1.5 2 1.5 4 1.5'/%3E%3Cpath d='M12 17V8M12 8c-3 0-5 1-6 3M12 8c3 0 5 1 6 3'/%3E%3C/svg%3E"); }
.wm-heritage { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Cpath d='M4 21h16M5 21v-9M19 21v-9M5 12l7-5 7 5M9 21v-6h6v6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Cpath d='M4 21h16M5 21v-9M19 21v-9M5 12l7-5 7 5M9 21v-6h6v6'/%3E%3C/svg%3E"); }
.wm-themepark { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='8'/%3E%3Ccircle cx='12' cy='12' r='2'/%3E%3Cpath d='M12 4v4M12 16v4M4 12h4M16 12h4M6.3 6.3l2.8 2.8M14.9 14.9l2.8 2.8M17.7 6.3l-2.8 2.8M9.1 14.9l-2.8 2.8'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='8'/%3E%3Ccircle cx='12' cy='12' r='2'/%3E%3Cpath d='M12 4v4M12 16v4M4 12h4M16 12h4M6.3 6.3l2.8 2.8M14.9 14.9l2.8 2.8M17.7 6.3l-2.8 2.8M9.1 14.9l-2.8 2.8'/%3E%3C/svg%3E"); }
.wm-food { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3v8a2 2 0 0 0 4 0V3M8 11v10M16 3c-1.5 0-2.5 1.5-2.5 4s1 4 2.5 4v10'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3v8a2 2 0 0 0 4 0V3M8 11v10M16 3c-1.5 0-2.5 1.5-2.5 4s1 4 2.5 4v10'/%3E%3C/svg%3E"); }
.trip-hero-dest { font-size: var(--type-display); font-weight: 700; color: var(--txt); }
.trip-hero-meta { font-size: var(--type-secondary); color: var(--sub); margin-top: calc(8 * var(--rpx)); font-variant-numeric: tabular-nums; }
.trip-hero-phase { display: inline-block; margin-top: calc(12 * var(--rpx)); font-size: var(--type-secondary); font-weight: 600; padding: calc(4 * var(--rpx)) calc(18 * var(--rpx)); border-radius: var(--r-pill); }
.trip-hero-phase.before { color: var(--accent); background: rgba(0,122,255,.12); }
.trip-hero-phase.during { color: var(--positive); background: rgba(52,199,89,.14); }
.trip-hero-phase.after { color: var(--sub); background: rgba(120,120,128,.14); }
.trip-hero-cost { font-size: var(--type-secondary); color: var(--txt); margin-top: calc(12 * var(--rpx)); }
.trip-hero-edit { position: absolute; right: calc(26 * var(--rpx)); top: calc(26 * var(--rpx)); font-size: calc(23 * var(--rpx)); color: var(--accent); background: color-mix(in srgb, var(--accent) 11%, var(--bg-elev)); border: .5px solid color-mix(in srgb, var(--accent) 22%, transparent); border-radius: var(--r-pill); z-index: 3; padding: calc(8 * var(--rpx)) calc(14 * var(--rpx)); white-space: nowrap; }
.trip-hero-archive { position: absolute; right: calc(26 * var(--rpx)); bottom: calc(26 * var(--rpx)); font-size: calc(23 * var(--rpx)); color: var(--sub); background: color-mix(in srgb, var(--sub) 9%, var(--bg-elev)); border: .5px solid var(--line); border-radius: var(--r-pill); z-index: 3; padding: calc(8 * var(--rpx)) calc(14 * var(--rpx)); white-space: nowrap; }
/* 撤销上次改动:行程头左下角。去 emoji 改 SVG 图标(::before mask),与 .wm-* 同款写法;nowrap 防窄屏换行堆叠 */
.trip-hero-undo { position: absolute; left: calc(26 * var(--rpx)); bottom: calc(26 * var(--rpx)); font-size: var(--type-footnote); color: var(--accent); background: color-mix(in srgb, var(--accent) 11%, var(--bg-elev)); border: .5px solid color-mix(in srgb, var(--accent) 22%, transparent); border-radius: var(--r-pill); z-index: 3; padding: calc(8 * var(--rpx)) calc(12 * var(--rpx)); white-space: nowrap; display: inline-flex; align-items: center; gap: calc(5 * var(--rpx)); max-width: calc(220 * var(--rpx)); }
.trip-hero-undo::before { content: ''; flex: none; width: calc(22 * var(--rpx)); height: calc(22 * var(--rpx)); background: var(--accent); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7v6h6'/%3E%3Cpath d='M3 13a9 9 0 1 0 2.6-6.4L3 9'/%3E%3C/svg%3E") center/contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7v6h6'/%3E%3Cpath d='M3 13a9 9 0 1 0 2.6-6.4L3 9'/%3E%3C/svg%3E") center/contain no-repeat; }
/* 编辑弹层里的历史版本入口 */
.trip-hist-entry { font-size: var(--type-secondary); color: var(--accent); padding: calc(14 * var(--rpx)) 0 calc(4 * var(--rpx)); text-align: center; }
/* 历史版本弹层 */
.trip-hist-tip { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-bottom: calc(14 * var(--rpx)); line-height: 1.4; }
.trip-hist-list { max-height: 50vh; overflow-y: auto; overscroll-behavior: contain; }
.trip-hist-item { padding: calc(16 * var(--rpx)); border: 0.5px solid var(--line); border-radius: var(--r-sm); margin-bottom: calc(12 * var(--rpx)); }
.trip-hist-main { display: flex; align-items: center; justify-content: space-between; }
.trip-hist-label { font-size: var(--type-body); font-weight: 600; color: var(--txt); }
.trip-hist-when { font-size: calc(21 * var(--rpx)); color: var(--sub); }
.trip-hist-meta { font-size: calc(21 * var(--rpx)); color: var(--sub); margin-top: calc(6 * var(--rpx)); }
/* 追问气泡的选项 chip(点一下澄清) */
.ask-opts { display: flex; flex-wrap: wrap; gap: calc(12 * var(--rpx)); margin-top: calc(10 * var(--rpx)); }
.ask-opt { font-size: var(--type-secondary); color: var(--accent); background: rgba(10,132,255,.1); border: 1px solid var(--accent); border-radius: var(--r-pill); padding: calc(12 * var(--rpx)) calc(18 * var(--rpx)); transition: all .2s ease; }
.trip-day { margin-bottom: calc(22 * var(--rpx)); }
.trip-day.today { }
.trip-day-head { display: flex; align-items: center; gap: calc(12 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); }
.trip-day-no { font-size: calc(30 * var(--rpx)); font-weight: 700; color: var(--txt); }
.trip-day-date { font-size: calc(23 * var(--rpx)); color: var(--sub); }
.trip-day-today { font-size: calc(19 * var(--rpx)); color: #fff; background: #34c759; padding: calc(2 * var(--rpx)) calc(12 * var(--rpx)); border-radius: var(--r-pill); }
.trip-day-add { margin-left: auto; min-height: var(--btn-sm-h); padding: 0 calc(16 * var(--rpx)); display: flex; align-items: center; font-size: calc(23 * var(--rpx)); font-weight: 600; color: var(--accent); background: color-mix(in srgb, var(--accent) 9%, transparent); border-radius: var(--r-md); }
.trip-day-empty { font-size: calc(23 * var(--rpx)); color: var(--sub); padding: calc(8 * var(--rpx)) 0 calc(8 * var(--rpx)) calc(28 * var(--rpx)); }
.trip-line { display: flex; gap: calc(16 * var(--rpx)); position: relative; }
.trip-line::before { content: ''; position: absolute; left: calc(9 * var(--rpx)); top: 0; bottom: 0; width: calc(2 * var(--rpx)); background: var(--line); }
.trip-node { width: calc(36 * var(--rpx)); height: calc(36 * var(--rpx)); border-radius: 50%; flex-shrink: 0; margin-top: calc(16 * var(--rpx)); z-index: 1; border: calc(3 * var(--rpx)) solid var(--bg); display: flex; align-items: center; justify-content: center; box-shadow: 0 1px calc(4 * var(--rpx)) rgba(0,0,0,.12); }
/* 节点内嵌的白色类型图标(mask 单色,白色) */
.trip-node-ico { width: calc(22 * var(--rpx)); height: calc(22 * var(--rpx)); background: #fff; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; }
.tnico-spot { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 20h18M5 20l5-12 4 7 2-4 3 9'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 20h18M5 20l5-12 4 7 2-4 3 9'/%3E%3C/svg%3E"); }
.tnico-food { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3v8a2 2 0 0 0 4 0V3M8 11v10M16 3c-1.5 0-2.5 1.5-2.5 4s1 4 2.5 4v10'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3v8a2 2 0 0 0 4 0V3M8 11v10M16 3c-1.5 0-2.5 1.5-2.5 4s1 4 2.5 4v10'/%3E%3C/svg%3E"); }
.tnico-transit { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='3' width='14' height='14' rx='2'/%3E%3Cpath d='M5 11h14M9 17l-2 4M15 17l2 4'/%3E%3Ccircle cx='8.5' cy='14' r='.5'/%3E%3Ccircle cx='15.5' cy='14' r='.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='3' width='14' height='14' rx='2'/%3E%3Cpath d='M5 11h14M9 17l-2 4M15 17l2 4'/%3E%3Ccircle cx='8.5' cy='14' r='.5'/%3E%3Ccircle cx='15.5' cy='14' r='.5'/%3E%3C/svg%3E"); }
.tnico-hotel { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18V8M3 12h12a4 4 0 0 1 4 4v2M19 18v-2M7 11h.01'/%3E%3Cpath d='M7 11a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18V8M3 12h12a4 4 0 0 1 4 4v2M19 18v-2M7 11h.01'/%3E%3Cpath d='M7 11a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E"); }
.tnico-other { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 6-9 12-9 12s-9-6-9-12a9 9 0 0 1 18 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 6-9 12-9 12s-9-6-9-12a9 9 0 0 1 18 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E"); }
.trip-item { flex: 1; min-width: 0; background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-sm); padding: calc(16 * var(--rpx)) calc(18 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); }
.trip-item-top { display: flex; align-items: center; gap: calc(10 * var(--rpx)); }
.trip-item-time { font-size: var(--type-footnote); color: var(--sub); font-variant-numeric: tabular-nums; flex-shrink: 0; }
.trip-item-title { flex: 1; font-size: calc(27 * var(--rpx)); font-weight: 600; color: var(--txt); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 开发者模式 · 统一数据管理：云端容灾与本地迁移共用同一信息层级。 */
.data-manage-card { margin-top:calc(10 * var(--rpx)); padding:calc(20 * var(--rpx)); border-radius:var(--r-md); background:var(--fill); border:.5px solid var(--line); }
.data-manage-head { padding-bottom:calc(16 * var(--rpx)); }
.data-manage-section { padding:calc(17 * var(--rpx)) 0; border-top:.5px solid var(--line); }
.data-manage-section.local { padding-bottom:calc(12 * var(--rpx)); }
.data-manage-title-row { display:flex; align-items:center; justify-content:space-between; gap:calc(12 * var(--rpx)); }
.data-manage-title { color:var(--txt); font-size:calc(25 * var(--rpx)); font-weight:650; }
.data-manage-tag { flex:none; padding:calc(4 * var(--rpx)) calc(10 * var(--rpx)); border-radius:var(--r-pill); color:var(--accent); background:color-mix(in srgb,var(--accent) 11%,transparent); font-size:calc(18 * var(--rpx)); font-weight:650; }
.data-manage-tag.working { color:#9a6500; background:rgba(255,159,10,.13); }
.data-manage-tag.success { color:#248a3d; background:rgba(52,199,89,.13); }
.data-manage-tag.failed { color:#d70015; background:rgba(255,59,48,.12); }
.data-manage-tag.neutral { color:var(--sub); background:var(--bg-elev); }
.data-manage-desc { margin-top:calc(7 * var(--rpx)); color:var(--sub); font-size:calc(21 * var(--rpx)); line-height:1.5; }
.data-action-list { display:grid; gap:calc(10 * var(--rpx)); margin-top:calc(14 * var(--rpx)); }
.data-action-row { min-height:calc(88 * var(--rpx)); padding:calc(12 * var(--rpx)) calc(14 * var(--rpx)); box-sizing:border-box; border-radius:var(--r-sm); display:flex; align-items:center; gap:calc(13 * var(--rpx)); color:var(--txt); background:var(--bg-elev); border:.5px solid var(--line); box-shadow:0 1px calc(3 * var(--rpx)) rgba(0,0,0,.035); transition:transform .16s var(--ios-press),background .16s ease; }
.data-action-row:active { transform:scale(.985); background:color-mix(in srgb,var(--accent) 7%,var(--bg-elev)); }
.data-action-row.primary { color:#fff; background:var(--accent-fill, var(--accent)); border-color:transparent; box-shadow:0 calc(5 * var(--rpx)) calc(14 * var(--rpx)) color-mix(in srgb,var(--accent) 24%,transparent); }
.data-action-row.primary:active { background:color-mix(in srgb,var(--accent) 88%,#000); }
.data-action-row.disabled { opacity:.55; pointer-events:none; }
.data-action-ic { width:calc(54 * var(--rpx)); min-width:calc(54 * var(--rpx)); max-width:calc(54 * var(--rpx)); height:calc(54 * var(--rpx)); min-height:calc(54 * var(--rpx)); max-height:calc(54 * var(--rpx)); flex:0 0 calc(54 * var(--rpx)); overflow:hidden; border-radius:calc(14 * var(--rpx)); display:grid; place-items:center; color:var(--accent); background:color-mix(in srgb,var(--accent) 10%,transparent); }
.data-action-glyph { display:block; width:calc(30 * var(--rpx)); min-width:calc(30 * var(--rpx)); max-width:calc(30 * var(--rpx)); height:calc(30 * var(--rpx)); min-height:calc(30 * var(--rpx)); max-height:calc(30 * var(--rpx)); object-fit:contain; }
.data-action-row.primary .data-action-ic { color:#fff; background:rgba(255,255,255,.17); }
.data-action-copy { flex:1; min-width:0; }
.data-action-title { font-size: var(--type-secondary); line-height:1.25; font-weight:650; }
.data-action-sub { margin-top:calc(4 * var(--rpx)); color:var(--sub); font-size:calc(19 * var(--rpx)); line-height:1.35; }
.data-action-row.primary .data-action-sub { color:rgba(255,255,255,.78); }
.data-action-go { flex:none; color:var(--sub); font-size:calc(38 * var(--rpx)); font-weight:300; line-height:1; }
.data-action-row.primary .data-action-go { color:rgba(255,255,255,.9); }
.data-manage-note { padding-top:calc(12 * var(--rpx)); border-top:.5px solid var(--line); color:var(--sub); font-size:calc(19 * var(--rpx)); line-height:1.5; }
.backup-restore-sheet { width:calc(650 * var(--rpx)); max-width:calc(100vw - 40px); padding:calc(30 * var(--rpx)); border-radius:var(--r-lg); background:var(--bg-elev); box-shadow:0 18px 60px rgba(0,0,0,.2); }
.backup-restore-sub { margin:calc(12 * var(--rpx)) 0 calc(22 * var(--rpx)); color:var(--sub); font-size:calc(23 * var(--rpx)); line-height:1.55; }
.backup-restore-actions { display:flex; gap:calc(14 * var(--rpx)); margin-top:calc(22 * var(--rpx)); }
.backup-restore-actions .pny-btn { flex:1; }

/* V62 · 按需 AI 洞察：统一为安静的 iOS 信息卡，不抢主数据层级 */
.ai-insight-card { margin:calc(16 * var(--rpx)) 0; padding:calc(22 * var(--rpx)); border-radius:var(--r-lg); background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 9%,var(--bg-elev)),var(--bg-elev)); border:1px solid color-mix(in srgb,var(--accent) 16%,var(--line)); }
.ai-insight-head,.session-summary-row,.kenny-review-head { display:flex; align-items:center; justify-content:space-between; gap:calc(14 * var(--rpx)); }
.ai-insight-kicker { color:var(--accent); font-size:calc(18 * var(--rpx)); font-weight:700; letter-spacing:.08em; }
.ai-insight-title { margin-top:calc(3 * var(--rpx)); font-size: var(--type-action); font-weight:650; color:var(--txt); }
.insight-controls,.kenny-review-actions { flex:none; display:flex; align-items:center; justify-content:flex-end; gap:calc(8 * var(--rpx)); }
.insight-icon-btn { width:calc(58 * var(--rpx)); min-width:calc(58 * var(--rpx)); height:calc(58 * var(--rpx)); flex:0 0 calc(58 * var(--rpx)); display:grid; place-items:center; box-sizing:border-box; border-radius:50%; background:color-mix(in srgb,var(--accent) 11%,var(--bg-elev)); border:.5px solid color-mix(in srgb,var(--accent) 16%,var(--line)); }
.insight-icon-btn:active { transform:scale(.92); opacity:.7; }
.insight-icon-btn.disabled { opacity:.48; pointer-events:none; }
.insight-icon-btn.warm { background:rgba(255,159,10,.09); border-color:rgba(255,159,10,.16); }
.insight-control-svg { display:block; width:calc(25 * var(--rpx)); height:calc(25 * var(--rpx)); transition:transform .18s var(--ios-press); }
.insight-control-svg.down { transform:rotate(180deg); }
.insight-control-svg.spin { animation:jennyToastSpin .8s linear infinite; }
.ai-insight-text,.session-summary-text,.kenny-review-text { margin-top:calc(16 * var(--rpx)); color:var(--txt); font-size: var(--type-body); line-height:1.65; white-space:pre-wrap; }
.ai-insight-empty,.session-summary-empty { margin-top:calc(13 * var(--rpx)); color:var(--sub); font-size:calc(23 * var(--rpx)); line-height:1.5; }
.penny-summary-period { color:var(--sub); font-size:12px; line-height:1.5; margin-top:10px; }
.penny-summary-note { color:var(--sub); font-size:12px; line-height:1.6; margin-top:10px; overflow-wrap:anywhere; }
.penny-insight .ai-insight-text { overflow-wrap:anywhere; }
.session-summary-card { margin:0 0 calc(16 * var(--rpx)); padding:calc(18 * var(--rpx)); border-radius:var(--r-lg); background:var(--bg); border:1px solid var(--line); }
.session-summary-row > text { color:var(--txt); font-size: var(--type-body); font-weight:650; }
.kenny-review-card { margin:calc(18 * var(--rpx)) 0; padding:calc(20 * var(--rpx)); border-radius:var(--r-lg); text-align:left; background:color-mix(in srgb,#ff9f0a 9%,var(--bg-elev)); border:1px solid color-mix(in srgb,#ff9f0a 22%,var(--line)); }
.kenny-review-head > text:first-child { color:var(--txt); font-size:calc(25 * var(--rpx)); font-weight:700; }
.kenny-review-actions > text { color:#c87500; font-size: var(--type-caption); }
.trip-item-cost { font-size: calc(23 * var(--rpx)); color: var(--sub); flex-shrink: 0; }
.trip-item-transport { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(8 * var(--rpx)); }
.trip-item-note { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(6 * var(--rpx)); line-height: 1.4; }
.pny-input.trip-f { margin-top: calc(14 * var(--rpx)); }
.trip-f-row { display: flex; gap: calc(14 * var(--rpx)); }
/* half:min-width:0 让 flex:1 真正均分(否则 placeholder+padding 撑破宽度→日期溢出卡片);
   日期字号/padding 收一点,"出发 YYYY-MM-DD" 放得下 */
.pny-input.trip-f.half { flex: 1; min-width: 0; font-size: var(--type-body); padding: calc(18 * var(--rpx)) calc(16 * var(--rpx)); }
.trip-map { margin-top: calc(20 * var(--rpx)); }
.trip-map-img { width: 100%; border-radius: var(--r-md); margin: calc(12 * var(--rpx)) 0; border: 0.5px solid var(--line); }
.trip-map-acts { display: flex; gap: calc(14 * var(--rpx)); }
.trip-map-acts .pny-btn { flex: 1; }
.te-title { flex: 1; font-size: var(--type-action); font-weight: 600; color: var(--txt); }
.pny-input.te-f { flex: 1; margin-top: 0; font-size: var(--type-secondary); padding: calc(14 * var(--rpx)) calc(16 * var(--rpx)); }
.pny-input.te-f2 { margin-top: calc(12 * var(--rpx)); font-size: var(--type-secondary); padding: calc(14 * var(--rpx)) calc(16 * var(--rpx)); }
/* trips 点击式录音悬浮按钮 */
.trip-mic-hint { position: fixed; right: calc(34 * var(--rpx)); bottom: calc(344 * var(--rpx)); background: rgba(28,28,30,.82); color: #fff; font-size: calc(21 * var(--rpx)); font-weight: 550; padding: calc(8 * var(--rpx)) calc(14 * var(--rpx)); border-radius: var(--r-pill); z-index: 50; box-shadow: 0 5px 18px rgba(0,0,0,.18); }
.trip-mic { position: fixed; right: calc(36 * var(--rpx)); bottom: calc(230 * var(--rpx)); width: calc(104 * var(--rpx)); height: calc(104 * var(--rpx)); border-radius: 50%; background: var(--accent); box-shadow: 0 calc(6 * var(--rpx)) calc(20 * var(--rpx)) rgba(0,0,0,.25); display: flex; align-items: center; justify-content: center; z-index: 50; }
.trip-mic.rec { background: var(--danger); animation: tripmic-pulse 1.2s infinite; }
.trip-mic.busy { background: var(--sub); }
.trip-mic-ic { width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); background: #fff; -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='2' width='6' height='12' rx='3'/%3E%3Cpath d='M5 10a7 7 0 0 0 14 0M12 17v4'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='2' width='6' height='12' rx='3'/%3E%3Cpath d='M5 10a7 7 0 0 0 14 0M12 17v4'/%3E%3C/svg%3E"); -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; }
.trip-mic-t { color: #fff; font-size: var(--type-display); font-weight: 700; }
@keyframes tripmic-pulse { 0%,100% { box-shadow: 0 calc(6 * var(--rpx)) calc(20 * var(--rpx)) rgba(255,59,48,.4); } 50% { box-shadow: 0 calc(6 * var(--rpx)) calc(30 * var(--rpx)) rgba(255,59,48,.8); } }
.mem-trip-tidy { display: flex; align-items: center; justify-content: center; gap: calc(10 * var(--rpx)); padding: calc(20 * var(--rpx)); margin-bottom: calc(16 * var(--rpx)); background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-body); font-weight: 600; border-radius: var(--r-md); }
.mem-trip-tidy.disabled { background: var(--bg-elev); color: var(--sub); border: 0.5px solid var(--line); }
.mem-trip-tidy .tidy-ic { background: currentColor; }

/* ========== 数据迁移 UI(设置页) ========== */
.migrate-paste { width: 100%; box-sizing: border-box; height: calc(140 * var(--rpx)); margin-top: calc(8 * var(--rpx)); padding: calc(16 * var(--rpx)); border-radius: var(--r-sm); font-size: var(--type-secondary); background: var(--bg); color: var(--txt); border: 0.5px solid var(--line); }
.migrate-import-btn { white-space: nowrap; padding: calc(18 * var(--rpx)) calc(26 * var(--rpx)); border-radius: var(--r-sm); background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-body); font-weight: 600; text-align: center; }
.migrate-import-btn.full { margin-top: calc(12 * var(--rpx)); }
.migrate-export-btn { white-space: nowrap; padding: calc(18 * var(--rpx)) calc(26 * var(--rpx)); border-radius: var(--r-sm); background: var(--bg-elev); color: var(--accent); font-size: var(--type-body); font-weight: 600; text-align: center; border: 0.5px solid var(--accent); }
.migrate-export-btn.full { margin-top: calc(12 * var(--rpx)); }
.migrate-export-btn.clear-cache { background: transparent; color: var(--sub); border-color: var(--line); font-weight: 500; }
.dev-provider-row { margin-top: calc(12 * var(--rpx)); padding: calc(14 * var(--rpx)) calc(4 * var(--rpx)); }
.migrate-hint { font-size: var(--type-caption); color: var(--sub); margin-top: calc(10 * var(--rpx)); line-height: 1.5; }

/* ========== 启动盖板页 splash(完全退出后首启) ========== */
/* 高 z-index + 不透明卡片,盖住底层资产数字等隐私信息;遮罩比设置页更实(.55)避免透出 */
.splash-mask {
  position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 300;
  background: rgba(0,0,0,.55); -webkit-backdrop-filter: blur(calc(8 * var(--rpx))); backdrop-filter: blur(calc(8 * var(--rpx)));
  display: flex; align-items: center; justify-content: center; padding: calc(40 * var(--rpx));
}
.splash-card {
  position: relative; width: calc(600 * var(--rpx)); background: var(--bg-elev);
  border-radius: var(--r-xl); padding: calc(48 * var(--rpx)) calc(40 * var(--rpx)) calc(40 * var(--rpx));
  box-shadow: 0 calc(24 * var(--rpx)) calc(70 * var(--rpx)) rgba(0,0,0,.35);
  display: flex; flex-direction: column; align-items: center;
}
.splash-logo { width: calc(150 * var(--rpx)); height: calc(150 * var(--rpx)); border-radius: var(--r-xl); box-shadow: 0 calc(6 * var(--rpx)) calc(20 * var(--rpx)) rgba(0,0,0,.18); }
.splash-ver { margin-top: calc(14 * var(--rpx)); font-size: var(--type-footnote); color: var(--sub); opacity: .6; font-variant-numeric: tabular-nums; padding: calc(4 * var(--rpx)) calc(16 * var(--rpx)); }
.splash-about { margin: calc(20 * var(--rpx)) 0 calc(28 * var(--rpx)); text-align: center; }
.splash-line { font-size: var(--type-secondary); color: var(--sub); line-height: 1.7; white-space: nowrap; }
.splash-line.strong { font-size: calc(30 * var(--rpx)); font-weight: 700; color: var(--txt); margin-bottom: calc(8 * var(--rpx)); }
.splash-roles { display: flex; justify-content: center; gap: calc(44 * var(--rpx)); margin-bottom: calc(28 * var(--rpx)); }
.splash-roles .role-opt { opacity: 1; }
.splash-roles .role-opt-av { width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); }
.splash-roles .role-opt span { font-size: var(--type-secondary); margin-top: calc(4 * var(--rpx)); }
.splash-roles .role-opt:active { transform: scale(.94); }
/* 弱化:不再用实色大按钮抢镜,改成低调的描边文字入口(次于三姐妹选择器) */
.splash-group {
  display: flex; align-items: center; justify-content: center; gap: calc(10 * var(--rpx));
  padding: calc(12 * var(--rpx)) calc(28 * var(--rpx));
  border-radius: var(--r-pill); background: transparent; border: 0.5px solid var(--line); color: var(--sub);
  font-size: calc(23 * var(--rpx)); font-weight: 500;
}
.splash-group:active { background: rgba(127,127,127,.1); }
.splash-group-ic {
  width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: var(--sub);
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
  -webkit-mask-size: contain; -webkit-mask-repeat: no-repeat; mask-size: contain; mask-repeat: no-repeat;
}

/* ========== 盖板 PIN 登录态 ========== */
.splash-pin { display: flex; flex-direction: column; align-items: center; width: 100%; gap: calc(16 * var(--rpx)); margin-top: calc(8 * var(--rpx)); }
.pin-field {
  width: calc(360 * var(--rpx)); box-sizing: border-box; text-align: center;
  padding: calc(20 * var(--rpx)); border-radius: var(--r-md);
  background: var(--bg); border: 0.5px solid var(--line); color: var(--txt);
  font-size: calc(36 * var(--rpx)); letter-spacing: calc(8 * var(--rpx)); font-variant-numeric: tabular-nums;
}
.pin-err { font-size: var(--type-footnote); color: #e5484d; }
.pin-btn {
  width: calc(360 * var(--rpx)); box-sizing: border-box; text-align: center;
  padding: calc(20 * var(--rpx)); border-radius: var(--r-md);
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: calc(27 * var(--rpx)); font-weight: 600;
}
.pin-btn:active { opacity: .85; }
.pin-btn.busy { opacity: .6; }
.pin-hint { font-size: var(--type-caption); color: var(--sub); opacity: .7; }

/* ========== T7 气泡长按菜单(底部弹层) ========== */
.bmenu-mask {
  position: fixed; inset: 0; z-index: 9998;
  background: rgba(0,0,0,.35);
  display: flex; align-items: flex-end;
  animation: bmenu-fadein .2s ease;
}
.bmenu-sheet {
  width: 100%; background: var(--bg-elev);
  border-radius: var(--r-lg) var(--r-lg) 0 0;
  padding: calc(8 * var(--rpx)) 0 calc(20 * var(--rpx));
  padding-bottom: calc(20 * var(--rpx) + env(safe-area-inset-bottom));
  animation: bmenu-slideup .25s cubic-bezier(.32,.72,0,1);
}
.bmenu-item {
  padding: calc(28 * var(--rpx)) calc(40 * var(--rpx));
  text-align: center; font-size: calc(30 * var(--rpx)); color: var(--txt);
  border-bottom: 0.5px solid var(--line);
}
.bmenu-item:active { background: var(--bg); }
.bmenu-regen { color: var(--accent); font-weight: 600; }
.bmenu-cancel {
  margin-top: calc(12 * var(--rpx));
  padding: calc(28 * var(--rpx)) calc(40 * var(--rpx));
  text-align: center; font-size: calc(30 * var(--rpx)); color: var(--sub);
  background: var(--bg); border-radius: var(--r-md);
  margin-left: calc(20 * var(--rpx)); margin-right: calc(20 * var(--rpx));
}
.bmenu-cancel:active { opacity: .8; }
@keyframes bmenu-fadein { from { opacity: 0; } to { opacity: 1; } }
@keyframes bmenu-slideup { from { transform: translateY(100%); } to { transform: translateY(0); } }

/* ========== T7 选词复制弹层 ========== */
.bsel-mask {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(0,0,0,.4);
  display: flex; align-items: center; justify-content: center;
  animation: bmenu-fadein .2s ease;
}
.bsel-card {
  width: calc(620 * var(--rpx)); max-height: calc(900 * var(--rpx));
  background: var(--bg-elev); border-radius: var(--r-lg);
  padding: calc(32 * var(--rpx)); display: flex; flex-direction: column;
}
.bsel-text {
  flex: 1; overflow-y: auto; font-size: var(--type-action); line-height: 1.7;
  color: var(--txt); white-space: pre-wrap; word-break: break-word;
  -webkit-user-select: text; user-select: text;
  padding: calc(16 * var(--rpx)); background: var(--bg); border-radius: var(--r-sm);
  max-height: calc(600 * var(--rpx));
}
.bsel-tip { font-size: var(--type-footnote); color: var(--sub); margin-top: calc(16 * var(--rpx)); text-align: center; }
.bsel-close {
  margin-top: calc(20 * var(--rpx)); text-align: center;
  min-height: var(--btn-h); padding: 0 calc(20 * var(--rpx)); display: flex; align-items: center; justify-content: center;
  border: .5px solid var(--line); border-radius: var(--btn-radius); background: var(--bg); font-size: var(--btn-font); color: var(--accent); font-weight: 600;
}
.bsel-close:active { opacity: .7; }

/* ========== T5 行程增减天数 ========== */
.trip-day-del {
  font-size: var(--type-footnote); color: #e5484d; padding: calc(4 * var(--rpx)) calc(12 * var(--rpx));
  border: 0.5px solid #e5484d; border-radius: calc(8 * var(--rpx));
  transition: all .2s ease;
}
.trip-day-del:active { background: #e5484d; color: #fff; }
.trip-add-day {
  text-align: center; padding: calc(24 * var(--rpx)) 0;
  font-size: var(--type-action); color: var(--accent); font-weight: 600;
  border: calc(2 * var(--rpx)) dashed var(--accent); border-radius: var(--r-md);
  margin: calc(20 * var(--rpx)) calc(24 * var(--rpx));
  transition: all .2s ease;
}
.trip-add-day:active { background: var(--accent-fill, var(--accent)); color: #fff; }

/* ========== T11 录音波形/计时 ========== */
/* 录音中:输入区变为波形+计时条,覆盖在 mic-btn 上方 */
.rec-bar {
  display: flex; align-items: center; gap: calc(12 * var(--rpx));
  padding: calc(10 * var(--rpx)) calc(24 * var(--rpx));
  background: var(--bar); border-top: 0.5px solid var(--line);
}
.rec-timer {
  font-size: var(--type-body); color: var(--danger); font-weight: 600;
  font-variant-numeric: tabular-nums; flex: none; min-width: calc(80 * var(--rpx));
}
/* 波形:16 根竖条,高度由 JS 动态设 --h */
.rec-waves {
  flex: 1; display: flex; align-items: center; gap: calc(4 * var(--rpx)); height: calc(48 * var(--rpx));
}
.rec-wave-bar {
  flex: 1; background: var(--accent); border-radius: calc(3 * var(--rpx));
  height: var(--h, calc(6 * var(--rpx))); min-height: calc(4 * var(--rpx));
  transition: height .08s ease;
}
.rec-cancel-hint {
  font-size: var(--type-footnote); color: var(--sub); flex: none;
}

/* ========== T6 群聊 @某人 ========== */
/* @按钮:输入框左侧,小圆形 */
.grp-at-btn {
  flex: none; width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); border-radius: 50%;
  background: var(--bg); border: 0.5px solid var(--line);
  display: flex; align-items: center; justify-content: center;
  font-size: var(--type-action); color: var(--accent); font-weight: 700;
}
.grp-at-btn.on { background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent); }
/* @选人弹层:底部横滑头像 */
.grp-at-pick {
  display: flex; gap: calc(16 * var(--rpx)); padding: calc(16 * var(--rpx)) calc(24 * var(--rpx));
  overflow-x: auto; background: var(--bar); border-top: 0.5px solid var(--line);
}
.grp-at-opt {
  flex: none; display: flex; flex-direction: column; align-items: center; gap: calc(6 * var(--rpx));
  padding: calc(8 * var(--rpx)) calc(12 * var(--rpx)); border-radius: var(--r-md);
  transition: background .15s;
}
.grp-at-opt.on { background: color-mix(in srgb, var(--accent) 14%, transparent); }
.grp-at-opt-av {
  width: calc(72 * var(--rpx)); height: calc(72 * var(--rpx)); border-radius: 50%;
  border: calc(3 * var(--rpx)) solid transparent;
}
.grp-at-opt.on .grp-at-opt-av { border-color: var(--accent); }
.grp-at-opt-name { font-size: var(--type-caption); color: var(--sub); }
.grp-at-opt.on .grp-at-opt-name { color: var(--accent); font-weight: 600; }
/* 已选 @标记:输入框上方小 chip */
.grp-at-chip {
  display: inline-flex; align-items: center; gap: calc(6 * var(--rpx));
  padding: calc(4 * var(--rpx)) calc(14 * var(--rpx)); margin: calc(4 * var(--rpx)) calc(24 * var(--rpx));
  background: color-mix(in srgb, var(--accent) 14%, transparent); border-radius: var(--r-pill);
  font-size: var(--type-footnote); color: var(--accent); font-weight: 600;
}
.grp-at-chip-x { font-size: calc(18 * var(--rpx)); color: var(--sub); margin-left: calc(4 * var(--rpx)); }

/* ===== Kenny: 游戏 & 知识 tab (v2 compact) ===== */
/* 游戏中心独立命名空间，原牌桌样式不改。 */
.kgc-center { width:100%; max-width:720px; margin:0 auto; padding:16px 20px 40px; }
.kgc-heading { padding:4px 0 18px; }
.kgc-title { color:var(--txt); font-size:22px; line-height:1.25; font-weight:750; letter-spacing:-.04em; }
.kgc-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; align-items:stretch; }
.kgc-game { display:flex; flex-direction:column; min-width:0; padding:0; border-radius:18px; border:1px solid color-mix(in srgb,var(--txt) 9%,transparent); background:var(--bg-elev); color:var(--txt); cursor:pointer; transition:transform .15s; overflow:hidden; box-shadow:0 4px 16px rgba(0,0,0,.04); }
.kgc-game:active,.kgc-continue:active { transform:scale(.98); }
.kgc-game-art { position:relative; display:flex; flex:0 0 auto; width:100%; height:auto; aspect-ratio:16/10; align-items:center; justify-content:center; overflow:hidden; background:linear-gradient(135deg,color-mix(in srgb,#5e9c88 24%,var(--bg-elev)),color-mix(in srgb,#5e9c88 6%,var(--bg-elev))); }
.kgc-guandan .kgc-game-art { background:linear-gradient(135deg,color-mix(in srgb,#d69b75 24%,var(--bg-elev)),color-mix(in srgb,#d69b75 5%,var(--bg-elev))); }
.kgc-card { position:absolute; width:34%; max-width:58px; height:auto; aspect-ratio:5/7; border-radius:7px; box-shadow:0 6px 14px rgba(0,0,0,.12); }
.kgc-card.back { background:repeating-linear-gradient(45deg,#427660,#427660 3px,#598871 3px,#598871 4px); border:4px solid #fffdf7; transform:translateX(-14%) rotate(-17deg); }
.kgc-guandan .kgc-card.back { background:repeating-linear-gradient(45deg,#b67554,#b67554 3px,#ce9273 3px,#ce9273 4px); }
.kgc-card.front { display:flex; flex-direction:column; align-items:center; justify-content:center; background:#fffdf7; color:#294b3b; transform:translateX(14%) rotate(11deg); font:700 22px/1.05 Georgia,serif; }
.kgc-guandan .kgc-card.front { color:#b95e48; }
.kgc-game-copy { display:flex; flex:1; min-width:0; flex-direction:column; padding:12px 13px 11px; }
.kgc-game-tag { color:var(--sub); font-size:11px; line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.kgc-game-title { color:var(--txt); font-weight:700; font-size:16px; line-height:1.25; margin-top:5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.kgc-game-sub { color:var(--sub); font-size:12px; line-height:1.45; margin-top:5px; }
.kgc-game-link { display:flex; justify-content:space-between; align-items:center; min-height:32px; margin-top:10px; padding-top:9px; border-top:1px solid var(--line); color:var(--accent); font-size:13px; line-height:1; font-weight:650; }
.kgc-continue { display:flex; align-items:center; gap:calc(18 * var(--rpx)); padding:calc(23 * var(--rpx)); border-radius:var(--r-xl); border:1px solid color-mix(in srgb,#ba8b46 24%,var(--line)); background:color-mix(in srgb,#e8b85f 10%,var(--bg-elev)); margin-bottom:18px; cursor:pointer; }
.kgc-continue-copy { display:flex; flex-direction:column; gap:calc(8 * var(--rpx)); flex:1; }
.kgc-continue-label { font-size:calc(18 * var(--rpx)); color:var(--sub); }
.kgc-continue-title { font-size:calc(27 * var(--rpx)); font-weight:650; color:var(--txt); }
.kgc-continue-detail { font-size: var(--type-caption); color:var(--sub); line-height:1.5; }
.kgc-arrow { font-size:calc(38 * var(--rpx)); color:var(--txt); }
.kgc-card-area { display:flex; flex-direction:column; flex:1; min-height:0; width:100%; }
.kgc-back-row { display:flex; align-items:center; justify-content:space-between; padding:0 calc(24 * var(--rpx)) calc(12 * var(--rpx)); }
.kgc-back { display:flex; align-items:center; gap:calc(7 * var(--rpx)); color:var(--txt); font-size: var(--type-secondary); min-height:44px; cursor:pointer; }
.kgc-back > :first-child { font-size: var(--type-display); }
.kgc-back-caption { color:var(--sub); font-size: var(--type-caption); }
.kgc-table-status { color:var(--sub); font-size:calc(21 * var(--rpx)); text-align:center; margin-bottom:calc(12 * var(--rpx)); }
.kgc-game:focus-visible,.kgc-back:focus-visible,.kgc-continue:focus-visible { outline:2px solid var(--accent); outline-offset:3px; }
.kgc-arcade:active { transform:scale(.98); }
.kgc-arcade-art { background:linear-gradient(#19394b 0 52%,#294e58 52% 69%,#14252d 69%); }
.kgc-arcade-art:before { content:""; position:absolute; inset:52% 0 31%; background:repeating-linear-gradient(0deg,transparent 0 5px,#8fb3aa22 6px 7px); }
.kgc-arcade-moon { position:absolute; width:18%; aspect-ratio:1; border-radius:50%; background:#dbe4c7; right:13%; top:13%; box-shadow:0 0 18px #dbe4c76b; }
.kgc-arcade-crane { position:absolute; width:2px; height:52%; left:22%; top:15%; background:#496875; box-shadow:74px 20px 0 #496875; }
.kgc-arcade-crane:after { content:""; position:absolute; width:95px; height:2px; top:0; left:0; background:#496875; transform:skewY(-13deg); transform-origin:left; }
.kgc-arcade-hero { position:absolute; left:19%; bottom:13%; width:13%; height:37%; background:#8dd9b6; border-radius:6px 6px 3px 3px; box-shadow:10px 34px 0 -7px #c88c5b,-9px 34px 0 -7px #c88c5b; }
.kgc-arcade-hero:before { content:""; position:absolute; left:-10%; top:-22%; width:120%; height:35%; background:#d9d6b3; border-top:5px solid #74b99d; border-radius:50% 50% 20% 20%; }
.kgc-arcade-hero > :first-child { position:absolute; width:34px; height:6px; background:#29414a; right:-29px; top:45%; }
.kgc-arcade-hero > :last-child { position:absolute; width:16px; height:5px; background:#e7a065; left:-13px; top:47%; }
.kgc-arcade-bot { position:absolute; right:12%; bottom:13%; width:18%; height:34%; background:#93a1a4; border:4px solid #344d56; border-radius:5px; }
.kgc-arcade-bot:before { content:""; position:absolute; left:12%; top:15%; width:75%; height:5px; background:#e5a06b; }
.kgc-arcade-bot > :first-child { position:absolute; width:25px; height:6px; background:#344d56; left:-23px; top:53%; }
.kgc-arcade-shot { position:absolute; left:47%; bottom:39%; height:2px; width:16%; background:#ffec9d; box-shadow:0 0 6px #ffdc83; }
.strike-shell { position:fixed;inset:0;z-index:11000;display:flex;flex-direction:column;background:#101a24;color:#edf4f0; }
.strike-shell-bar { height:44px;padding:env(safe-area-inset-top) max(16px,env(safe-area-inset-right)) 0 max(16px,env(safe-area-inset-left));box-sizing:content-box;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;background:#0d1720;border-bottom:1px solid rgba(255,255,255,.08);font-size:12px;color:#93a7ad;}
.strike-shell-back{min-height:44px;display:flex;align-items:center;gap:7px;color:#f0f4ef;font-size:13px;cursor:pointer}.strike-shell-back> :first-child{font-size:24px}.strike-frame{border:0;width:100%;flex:1;min-height:0;background:#101a24}.strike-loading{position:absolute;inset:44px 0 0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:#101a24;color:#aebfc1;font-size:12px;letter-spacing:1px}.strike-loading .strike-spinner{width:25px;height:25px;border-radius:50%;border:2px solid #ffffff20;border-top-color:#9deac8;animation:strike-spin .7s linear infinite}@keyframes strike-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce) { .kgc-game { transition:none; } }
@media(prefers-reduced-motion:reduce){.strike-loading .strike-spinner{animation:none}}

/* K币悬浮窗:锚在德扑/掼蛋切换行右下方(kb-top relative + 此处 absolute),随内容滚动;
   收起/展开两态。收起=金币圆点,展开=黑金玻璃胶囊;历史向下弹出 */
.kcoin-float {
  position: absolute; top: calc(100% + calc(6 * var(--rpx))); right: calc(12 * var(--rpx));
  z-index: 900; display: flex; flex-direction: column; align-items: flex-end;
}
/* 收起态:金币圆点,轻呼吸光晕提示可点 */
.kcoin-float-dot {
  width: calc(80 * var(--rpx)); height: calc(80 * var(--rpx)); border-radius: 50%;
  background: radial-gradient(circle at 32% 28%, #FFE58A, #FFD700 45%, #E8940A);
  box-shadow: 0 6px 18px rgba(232,148,10,.45), inset 0 1px 2px rgba(255,255,255,.6), inset 0 -2px 4px rgba(123,79,0,.35);
  display: flex; align-items: center; justify-content: center;
  color: #7B4F00; font-size: var(--type-title); font-weight: 800;
  animation: kcoin-breath 2.4s ease-in-out infinite;
  transition: transform .15s;
}
.kcoin-float-dot:active { transform: scale(.9); animation: none; }
@keyframes kcoin-breath {
  0%, 100% { box-shadow: 0 6px 18px rgba(232,148,10,.45), inset 0 1px 2px rgba(255,255,255,.6), inset 0 -2px 4px rgba(123,79,0,.35); }
  50% { box-shadow: 0 6px 26px rgba(255,196,0,.72), inset 0 1px 2px rgba(255,255,255,.6), inset 0 -2px 4px rgba(123,79,0,.35); }
}
/* 展开态:黑金玻璃胶囊(余额 + 收益 + 侧栏操作) */
.kcoin-float-body {
  display: flex; align-items: stretch;
  background: rgba(22,24,29,.9); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border: 0.5px solid rgba(255,215,0,.3);
  border-radius: calc(22 * var(--rpx));
  box-shadow: 0 8px 28px rgba(0,0,0,.4);
  animation: kcoin-pop .18s ease-out;
}
@keyframes kcoin-pop { from { opacity: 0; transform: translateY(8px) scale(.95); } to { opacity: 1; transform: none; } }
.kcoin-float-main {
  display: flex; align-items: center; gap: calc(10 * var(--rpx));
  padding: calc(10 * var(--rpx)) calc(6 * var(--rpx)) calc(10 * var(--rpx)) calc(12 * var(--rpx));
}
.kcoin-float-ic {
  width: calc(40 * var(--rpx)); height: calc(40 * var(--rpx)); border-radius: 50%;
  background: radial-gradient(circle at 32% 28%, #FFE58A, #FFD700 45%, #E8940A); color: #7B4F00;
  font-size: var(--type-footnote); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 1px 2px rgba(255,255,255,.6), 0 2px 6px rgba(0,0,0,.35);
  flex-shrink: 0;
}
.kcoin-float-num { display: flex; flex-direction: column; align-items: flex-start; }
.kcoin-float-val { font-size: var(--type-body); font-weight: 700; color: #fff; line-height: 1.15; font-variant-numeric: tabular-nums; letter-spacing: .5px; }
.kcoin-float-pnl { font-size: calc(17 * var(--rpx)); font-weight: 600; line-height: 1.3; font-variant-numeric: tabular-nums; }
.kcoin-float-pnl.up { color: var(--positive); }
.kcoin-float-pnl.down { color: #ff453a; }
.kcoin-float-side {
  display: flex; flex-direction: column; justify-content: center; gap: calc(5 * var(--rpx));
  padding: calc(7 * var(--rpx)) calc(9 * var(--rpx)) calc(7 * var(--rpx)) calc(4 * var(--rpx));
  border-left: 0.5px solid rgba(255,255,255,.08);
}
.kcoin-float-hist, .kcoin-float-fold {
  font-size: calc(17 * var(--rpx)); color: rgba(255,255,255,.7); text-align: center;
  padding: calc(3 * var(--rpx)) calc(12 * var(--rpx));
  background: rgba(255,255,255,.09); border-radius: var(--r-pill);
  transition: background .15s, color .15s;
}
.kcoin-float-hist:active, .kcoin-float-fold:active { background: rgba(255,215,0,.25); color: #FFD700; }
/* K币历史弹出(浮窗已移至切换行下方,面板改为向下弹出,右对齐) */
.kh-pop {
  position: absolute; top: 100%; right: 0; margin-top: calc(10 * var(--rpx));
  width: calc(440 * var(--rpx)); max-height: calc(520 * var(--rpx)); overflow-y: auto;
  background: rgba(22,24,29,.94); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
  border: 0.5px solid rgba(255,215,0,.22);
  border-radius: calc(14 * var(--rpx)); padding: calc(12 * var(--rpx));
  box-shadow: 0 10px 34px rgba(0,0,0,.45);
  animation: kcoin-pop .18s ease-out;
}
.kh-pop-summary { text-align: center; font-size: var(--type-footnote); padding-bottom: calc(8 * var(--rpx)); border-bottom: 0.5px solid rgba(255,255,255,.1); margin-bottom: calc(6 * var(--rpx)); }
.kh-pop-summary .pos { color: var(--positive); font-weight: 700; }
.kh-pop-summary .neg { color: #ff3b30; font-weight: 700; }
.kh-pop-empty { text-align: center; color: rgba(255,255,255,.4); padding: calc(20 * var(--rpx)) 0; font-size: var(--type-footnote); }
.kh-pop-item { display: flex; align-items: center; gap: calc(8 * var(--rpx)); padding: calc(6 * var(--rpx)) 0; font-size: var(--type-caption); color: rgba(255,255,255,.7); border-bottom: 0.5px solid rgba(255,255,255,.06); }
.kh-pop-item:last-child { border-bottom: none; }
.kh-pop-date { color: rgba(255,255,255,.4); font-size: calc(18 * var(--rpx)); width: calc(160 * var(--rpx)); flex-shrink: 0; }
.kh-pop-type { width: calc(60 * var(--rpx)); }
.kh-pop-amt { font-weight: 600; }
.kh-pop-amt.pos { color: var(--positive); }
.kh-pop-amt.neg { color: #ff3b30; }
.kh-pop-hand { color: rgba(255,255,255,.4); font-size: calc(18 * var(--rpx)); }

/* K币编辑弹层 */
.kcoin-edit-pop {
  width: calc(560 * var(--rpx)); background: var(--bg-elev); border-radius: var(--r-xl);
  padding: calc(32 * var(--rpx)); box-shadow: 0 24px 70px rgba(0,0,0,.3);
}
.kcoin-edit-title { font-size: var(--type-title); font-weight: 700; color: var(--fg); text-align: center; }
.kcoin-edit-sub { font-size: var(--type-secondary); color: var(--sub); text-align: center; margin: calc(8 * var(--rpx)) 0 calc(20 * var(--rpx)); }
.kcoin-edit-input {
  width: 100%; padding: calc(16 * var(--rpx)) calc(20 * var(--rpx)); font-size: calc(36 * var(--rpx));
  font-weight: 700; text-align: center; border: 1.5px solid var(--line); border-radius: calc(12 * var(--rpx));
  background: var(--bg); color: var(--fg); margin-bottom: calc(24 * var(--rpx));
}
.kcoin-edit-btns { display: flex; gap: calc(12 * var(--rpx)); }
.kcoin-edit-btn {
  flex: 1; text-align: center; padding: calc(18 * var(--rpx)) 0;
  font-size: var(--type-action); font-weight: 600; border-radius: var(--r-pill);
}
.kcoin-edit-btn.cancel { border: 1.5px solid var(--line); color: var(--sub); }
.kcoin-edit-btn.confirm { background: var(--accent-fill, var(--accent)); color: #fff; }

/* 德扑区域 */
/* 游戏区:撑满整屏(log-game 为 flex 列 → holdem-area flex:1) */
/* ── 开局页入场动效 & 按钮流光(德扑/掼蛋共用)── */
@keyframes riseIn { from { opacity: 0; transform: translateY(calc(16 * var(--rpx))); } to { opacity: 1; transform: none; } }
@keyframes emblemPop { from { opacity: 0; transform: scale(.5); } to { opacity: 1; transform: scale(1); } }
@keyframes btnShine { from { left: -70%; } to { left: 130%; } }

.holdem-area { padding: 0 calc(12 * var(--rpx)); flex: 1; display: flex; flex-direction: column; }

/* 开始画面:flex 列 — 头部 / 盲注 / 开始按钮 / 速览卡(自然高度,不强撑);顶部绿呢氛围光 */
.holdem-start { flex: 1; display: flex; flex-direction: column; text-align: center; padding: calc(18 * var(--rpx)) calc(4 * var(--rpx)) calc(40 * var(--rpx)); background: radial-gradient(circle at 50% -8%, color-mix(in srgb, #1e8a46 13%, transparent), transparent 52%); }
.hs-head { padding: calc(10 * var(--rpx)) 0 calc(16 * var(--rpx)); animation: riseIn .5s ease backwards; }
.hs-emblem {
  width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); border-radius: 50%;
  margin: 0 auto calc(14 * var(--rpx)); display: flex; align-items: center; justify-content: center;
  background: linear-gradient(145deg, #1e8a46, #0d5c2c);
  box-shadow: 0 8px 24px rgba(13,92,44,.35), inset 0 1px 0 rgba(255,255,255,.28), inset 0 -3px 6px rgba(0,0,0,.22);
  animation: emblemPop .55s cubic-bezier(.34,1.56,.64,1) backwards;
}
.hs-emblem svg { width: calc(46 * var(--rpx)); height: calc(46 * var(--rpx)); color: #fff; }
.hs-overline { font-size: calc(19 * var(--rpx)); font-weight: 700; letter-spacing: calc(5 * var(--rpx)); color: #1fa25a; margin-bottom: calc(4 * var(--rpx)); }
.hs-title { font-size: calc(50 * var(--rpx)); font-weight: 800; color: var(--fg); letter-spacing: calc(3 * var(--rpx)); margin-bottom: calc(8 * var(--rpx)); }
.hs-sub { font-size: calc(23 * var(--rpx)); color: var(--sub); }

/* 盲注档位(按需求仅删「盲注」标题行,保留选项段) */
.hs-blind-seg { display: flex; gap: calc(8 * var(--rpx)); margin-bottom: calc(16 * var(--rpx)); animation: riseIn .5s ease .08s backwards; }
.hs-blind-opt {
  flex: 1; padding: calc(13 * var(--rpx)) 0; text-align: center;
  font-size: calc(25 * var(--rpx)); color: var(--sub);
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-pill);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .18s;
}
.hs-blind-opt:active { transform: scale(.95); }
.hs-blind-opt.on { color: var(--accent); font-weight: 700; border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--bg-elev)); box-shadow: 0 2px 10px color-mix(in srgb, var(--accent) 22%, transparent); }

/* 开始按钮(盲注选项之下、玩法速览卡之上,拇指友好)+ 一次性流光 */
.hs-btn {
  position: relative; overflow: hidden;
  display: block; width: 100%; padding: calc(22 * var(--rpx)) 0;
  font-size: calc(30 * var(--rpx)); font-weight: 700; color: #fff; letter-spacing: calc(2 * var(--rpx));
  background: linear-gradient(135deg, var(--accent-fill, var(--accent)), color-mix(in srgb, var(--accent-fill, var(--accent)) 72%, #000));
  border-radius: var(--r-pill);
  box-shadow: 0 6px 20px color-mix(in srgb, var(--accent) 42%, transparent), inset 0 1px 0 rgba(255,255,255,.2);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1); margin-bottom: calc(16 * var(--rpx));
  animation: riseIn .5s ease .16s backwards;
}
.hs-btn::after {
  content: ''; position: absolute; top: 0; left: -70%; width: 42%; height: 100%;
  background: linear-gradient(105deg, transparent, rgba(255,255,255,.38), transparent);
  transform: skewX(-20deg); animation: btnShine 1.1s ease .55s backwards; pointer-events: none;
}
.hs-btn:active { transform: scale(.96); }
/* 玩法速览(游戏页简化版规则;完整版在知识 tab)。自然高度,不强行撑满 */
.hs-brief {
  display: flex; flex-direction: column; text-align: left;
  padding: calc(22 * var(--rpx)) calc(20 * var(--rpx)); background: var(--bg-elev);
  border-radius: calc(18 * var(--rpx)); border: 0.5px solid var(--line);
  box-shadow: 0 4px 20px rgba(0,0,0,.06);
  animation: riseIn .5s ease .24s backwards;
}
.hs-brief-hd { display: flex; align-items: center; gap: calc(8 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); }
.hs-brief-hd text { font-size: var(--type-display); font-weight: 700; color: var(--fg); }
.hs-brief-line { font-size: var(--type-body); color: var(--sub); line-height: 1.55; margin-bottom: calc(16 * var(--rpx)); } /* 灰字描述:比标题(40rpx)小一档(用户要求) */
.hs-brief-steps { display: flex; align-items: center; justify-content: center; gap: calc(8 * var(--rpx)); margin-bottom: calc(16 * var(--rpx)); }
.hs-brief-step {
  display: flex; align-items: center; gap: calc(7 * var(--rpx));
  font-size: var(--type-body); font-weight: 600; color: var(--fg);
  padding: calc(8 * var(--rpx)) calc(14 * var(--rpx));
  background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-pill);
}
.hs-brief-step .n {
  width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); border-radius: 50%;
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-footnote); font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.hs-brief-arrow { color: var(--muted); font-size: var(--type-body); }
/* 牌例展示(可视化常见大牌) */
.hs-egs { display: flex; flex-direction: column; gap: calc(10 * var(--rpx)); padding: calc(2 * var(--rpx)) 0 calc(14 * var(--rpx)); }
.hs-eg {
  display: flex; align-items: center; justify-content: space-between; gap: calc(12 * var(--rpx));
  padding: calc(10 * var(--rpx)) calc(14 * var(--rpx));
  background: var(--bg); border: 0.5px solid var(--line); border-radius: calc(12 * var(--rpx));
}
.hs-eg-meta { flex-shrink: 0; display: flex; flex-direction: column; gap: calc(2 * var(--rpx)); text-align: left; }
.hs-eg-name { font-size: var(--type-action); font-weight: 700; color: var(--fg); }
.hs-eg-note { font-size: calc(23 * var(--rpx)); color: var(--muted); }
.hs-eg-cards { display: flex; gap: calc(5 * var(--rpx)); }
/* 牌例里的牌:比 xsm 略大,看得清花色点数 */
.hs-eg-cards .h-card { width: calc(58 * var(--rpx)); height: calc(80 * var(--rpx)); border-radius: calc(7 * var(--rpx)); }
.hs-eg-cards .h-card .h-card-r { font-size: calc(30 * var(--rpx)); }
.hs-eg-cards .h-card .h-card-s { font-size: calc(21 * var(--rpx)); }
.hs-brief-link { width: max-content; max-width: 100%; margin: 0 auto; text-align: center; font-size: calc(25 * var(--rpx)); font-weight: 600; color: var(--accent); padding: calc(11 * var(--rpx)) calc(18 * var(--rpx)); border: .5px solid color-mix(in srgb, var(--accent) 24%, transparent); border-radius: var(--r-pill); background: color-mix(in srgb, var(--accent) 8%, transparent); }

/* 知识 tab 规则页:每个 sec 独立成卡(覆盖游戏页时代的内联 margin-top) */
.kb-rules-wrap { padding: 0 calc(16 * var(--rpx)) calc(60 * var(--rpx)); }
.kb-rules-intro { font-size: calc(23 * var(--rpx)); color: var(--sub); line-height: 1.55; padding: calc(2 * var(--rpx)) calc(4 * var(--rpx)) calc(16 * var(--rpx)); }
.kb-rules .hs-rules-sec {
  margin: 0 0 calc(16 * var(--rpx)) !important; padding: calc(20 * var(--rpx));
  background: var(--bar); border: 0.5px solid var(--line); border-radius: calc(14 * var(--rpx));
}
/* 掼蛋规则页:炸弹大小序链条 + 结算行 + 备注 */
.kb-bomb-chain {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: calc(6 * var(--rpx)); padding: calc(12 * var(--rpx)) 0 calc(8 * var(--rpx));
}
.kb-bomb {
  padding: calc(6 * var(--rpx)) calc(14 * var(--rpx)); font-size: var(--type-footnote); font-weight: 700;
  color: var(--fg); background: var(--bg); border: 0.5px solid var(--line); border-radius: var(--r-pill);
}
.kb-bomb.hot { color: #fff; background: var(--accent-fill, var(--accent)); border-color: var(--accent); }
.kb-bomb-arr { font-size: var(--type-footnote); color: var(--muted); }
.kb-note { font-size: var(--type-footnote); color: var(--sub); line-height: 1.55; padding: calc(8 * var(--rpx)) calc(4 * var(--rpx)) 0; }
.kb-pay-row {
  display: flex; align-items: center; gap: calc(14 * var(--rpx));
  padding: calc(12 * var(--rpx)) calc(14 * var(--rpx)); margin-bottom: calc(8 * var(--rpx));
  background: var(--bg); border: 0.5px solid var(--line); border-radius: calc(12 * var(--rpx));
}
.kb-pay-place { font-size: var(--type-secondary); font-weight: 700; color: var(--fg); min-width: calc(72 * var(--rpx)); }
.kb-pay-desc { flex: 1; font-size: var(--type-caption); color: var(--sub); }
.kb-pay-v { font-size: var(--type-secondary); font-weight: 700; }
.kb-pay-v.pos { color: #16a34a; }
.kb-pay-v.neg { color: #dc2626; }
/* 规则分段 */
.hs-rules-sec { margin-bottom: calc(8 * var(--rpx)); }
.hs-rules-sec-hd {
  display: flex; align-items: center; gap: calc(8 * var(--rpx));
  margin-bottom: calc(12 * var(--rpx)); padding-bottom: calc(8 * var(--rpx));
  border-bottom: 0.5px solid var(--line);
}
.hs-sec-ic { width: calc(28 * var(--rpx)); height: calc(28 * var(--rpx)); color: var(--accent); flex-shrink: 0; }
.hs-rules-sec-hd text { font-size: var(--type-body); font-weight: 700; color: var(--fg); }

/* 牌型卡片 */
.hs-rule-card {
  display: flex; align-items: center; gap: calc(10 * var(--rpx));
  padding: calc(10 * var(--rpx)) calc(12 * var(--rpx)); margin-bottom: calc(8 * var(--rpx));
  background: var(--bg); border-radius: calc(10 * var(--rpx));
  border: 0.5px solid var(--line);
}
.hs-rc-rank {
  width: calc(36 * var(--rpx)); height: calc(36 * var(--rpx)); flex-shrink: 0;
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: var(--type-caption); font-weight: 700;
  border-radius: 50%; display: flex; align-items: center; justify-content: center;
}
.hs-rc-info { flex: 1; display: flex; flex-direction: column; gap: calc(2 * var(--rpx)); }
.hs-rc-name { font-size: var(--type-secondary); font-weight: 600; color: var(--fg); }
.hs-rc-desc { font-size: var(--type-caption); color: var(--sub); }
.hs-rc-eg { display: flex; gap: calc(4 * var(--rpx)); flex-wrap: wrap; }

/* 流程步骤 */
.hs-rule-step {
  display: flex; align-items: flex-start; gap: calc(12 * var(--rpx));
  padding: calc(10 * var(--rpx)) 0;
}
.hs-step-n {
  width: calc(32 * var(--rpx)); height: calc(32 * var(--rpx)); flex-shrink: 0;
  background: var(--accent-fill, var(--accent)); color: #fff; font-size: calc(18 * var(--rpx)); font-weight: 700;
  border-radius: 50%; display: flex; align-items: center; justify-content: center;
}
.hs-step-txt { flex: 1; display: flex; flex-direction: column; gap: calc(2 * var(--rpx)); }
.hs-step-title { font-size: var(--type-secondary); font-weight: 600; color: var(--fg); }
.hs-step-desc { font-size: var(--type-caption); color: var(--sub); }

/* 操作说明 */
.hs-rule-action {
  display: flex; align-items: center; gap: calc(12 * var(--rpx));
  padding: calc(10 * var(--rpx)) 0;
}
.hs-act-btn {
  padding: calc(6 * var(--rpx)) calc(16 * var(--rpx)); font-size: var(--type-caption);
  font-weight: 600; color: #fff; border-radius: var(--r-pill); flex-shrink: 0;
}
.hs-act-btn.fold { background: #ff3b30; }
.hs-act-btn.check { background: #8e8e93; }
.hs-act-btn.call { background: #34c759; }
.hs-act-btn.raise { background: #ff9500; }
.hs-act-desc { font-size: var(--type-footnote); color: var(--sub); }

/* 规则示例牌(超小) */
.h-card.xsm {
  width: calc(36 * var(--rpx)); height: calc(50 * var(--rpx));
  font-size: calc(14 * var(--rpx)); border-radius: calc(4 * var(--rpx));
}
.h-card.xsm .h-card-r { font-size: calc(14 * var(--rpx)); }
.h-card.xsm .h-card-s { font-size: calc(10 * var(--rpx)); }

/* 游戏切换图标:德扑=单张牌+黑桃 / 掼蛋=两副牌叠放+方块(都是扑克牌但样式区分) */
.kb-seg-holdem-ic {
  width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: currentColor;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5.5' y='2.5' width='13' height='19' rx='2'/%3E%3Cpath d='M12 6.5c-1.7 2-3.3 3.3-3.3 5a3.3 3.3 0 006.6 0c0-1.7-1.6-3-3.3-5z' fill='black' stroke='none'/%3E%3Cpath d='M12 14v3.5M9.8 17.5h4.4'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5.5' y='2.5' width='13' height='19' rx='2'/%3E%3Cpath d='M12 6.5c-1.7 2-3.3 3.3-3.3 5a3.3 3.3 0 006.6 0c0-1.7-1.6-3-3.3-5z' fill='black' stroke='none'/%3E%3Cpath d='M12 14v3.5M9.8 17.5h4.4'/%3E%3C/svg%3E");
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
}
.kb-seg-guandan-ic {
  width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); background: currentColor;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.5 3.5H17a2.5 2.5 0 012.5 2.5V18'/%3E%3Crect x='4.5' y='6' width='12.5' height='15.5' rx='2'/%3E%3Cpath d='M10.75 11l2.3 2.75-2.3 2.75-2.3-2.75z' fill='black' stroke='none'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.5 3.5H17a2.5 2.5 0 012.5 2.5V18'/%3E%3Crect x='4.5' y='6' width='12.5' height='15.5' rx='2'/%3E%3Cpath d='M10.75 11l2.3 2.75-2.3 2.75-2.3-2.75z' fill='black' stroke='none'/%3E%3C/svg%3E");
  -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
}

/* ===== 牌桌(compact) — 浅色桌面,flex 列撑满整屏 ===== */
.h-table {
  flex: 1; display: flex; flex-direction: column; min-height: 0;
  background: var(--bg-elev);
  border-radius: calc(20 * var(--rpx)); padding: calc(16 * var(--rpx));
  margin-bottom: calc(10 * var(--rpx));
  box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 2px 8px rgba(0,0,0,.04);
  border: 0.5px solid var(--line);
}

/* AI 对手(compact) */
.h-ais { display: flex; justify-content: space-around; margin-bottom: calc(12 * var(--rpx)); }
.h-ai {
  display: flex; flex-direction: column; align-items: center; gap: calc(4 * var(--rpx));
  min-width: calc(100 * var(--rpx));
  padding: calc(8 * var(--rpx)) calc(12 * var(--rpx)); border-radius: calc(14 * var(--rpx));
  background: var(--bg); border: 0.5px solid var(--line);
  box-shadow: 0 1px 4px rgba(0,0,0,.04);
  transition: all .3s cubic-bezier(.25,.46,.45,.94);
}
.h-ai.folded { opacity: .35; transform: scale(.96); }
/* SVG 头像 */
.h-ai-av.svg {
  width: calc(48 * var(--rpx)); height: calc(48 * var(--rpx)); border-radius: 50%;
  overflow: hidden; background: var(--bg); border: 0.5px solid var(--line);
}
.h-ai-svg { width: 100%; height: 100%; }
.h-ai-svg svg { width: 100%; height: 100%; display: block; }
.h-ai-name { font-size: var(--type-caption); color: var(--sub); font-weight: 600; }
.h-ai-cards { display: flex; gap: calc(2 * var(--rpx)); }
.h-cback {
  width: calc(24 * var(--rpx)); height: calc(34 * var(--rpx));
  background: linear-gradient(135deg, #b71c1c, #7b1fa2);
  border-radius: calc(4 * var(--rpx)); border: 1px solid rgba(255,255,255,.18);
  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 0 0 1.5px rgba(255,255,255,.12);
}
.h-cback.sm { width: calc(20 * var(--rpx)); height: calc(28 * var(--rpx)); }
.h-ai-act {
  font-size: calc(18 * var(--rpx)); padding: calc(3 * var(--rpx)) calc(12 * var(--rpx));
  border-radius: var(--r-pill); font-weight: 600; white-space: nowrap;
  box-shadow: 0 1px 4px rgba(0,0,0,.15); transition: transform .15s cubic-bezier(.34,1.56,.64,1);
}
.h-ai-act.fold { background: linear-gradient(135deg, #90a4ae, #78909c); color: #fff; }
.h-ai-act.check { background: linear-gradient(135deg, #64b5f6, #42a5f5); color: #fff; }
.h-ai-act.call { background: linear-gradient(135deg, #81c784, #66bb6a); color: #fff; }
.h-ai-act.raise { background: linear-gradient(135deg, #ffb74d, #ffa726); color: #fff; }

/* 底池 */
.h-pot {
  display: flex; align-items: center; justify-content: center; gap: calc(8 * var(--rpx));
  font-size: var(--type-action); color: var(--fg); font-weight: 800;
  font-variant-numeric: tabular-nums;
  margin-bottom: calc(10 * var(--rpx));
}
.h-pot-chip {
  width: calc(24 * var(--rpx)); height: calc(24 * var(--rpx)); border-radius: 50%;
  background: linear-gradient(135deg, #FFD700, #FF8C00);
  border: 2px dashed rgba(255,255,255,.55);
  box-shadow: 0 1px 3px rgba(0,0,0,.3), inset 0 1px 1px rgba(255,255,255,.4);
}

/* 扑克牌(compact) */
.h-comm {
  display: flex; justify-content: center; align-items: center; gap: calc(6 * var(--rpx));
  flex: 1; min-height: calc(110 * var(--rpx)); margin-bottom: calc(12 * var(--rpx));
}
.h-card {
  width: calc(56 * var(--rpx)); height: calc(80 * var(--rpx));
  border-radius: calc(7 * var(--rpx));
  background: linear-gradient(165deg, #ffffff 60%, #f5f5f7);
  border: 1px solid rgba(0,0,0,.06);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  box-shadow: 0 1px 3px rgba(0,0,0,.12), 0 3px 8px rgba(0,0,0,.06), inset 0 1px 0 rgba(255,255,255,.9);
  position: relative;
  animation: hCardIn .3s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes hCardIn { from { opacity: 0; transform: translateY(calc(10 * var(--rpx))) scale(.85); } to { opacity: 1; transform: none; } }
.h-card.ph { background: var(--bg); border: 1px dashed var(--line); box-shadow: none; animation: none; }
.h-card.sm { width: calc(42 * var(--rpx)); height: calc(58 * var(--rpx)); border-radius: calc(5 * var(--rpx)); }
.h-card.md { width: calc(78 * var(--rpx)); height: calc(110 * var(--rpx)); border-radius: calc(10 * var(--rpx)); box-shadow: 0 2px 6px rgba(0,0,0,.14), 0 6px 16px rgba(0,0,0,.08), inset 0 1px 0 rgba(255,255,255,.9); }
.h-card-r { font-size: var(--type-body); font-weight: 700; line-height: 1; }
.h-card-s { font-size: calc(18 * var(--rpx)); line-height: 1; margin-top: calc(1 * var(--rpx)); }
.h-card.sm .h-card-r { font-size: var(--type-caption); }
.h-card.sm .h-card-s { font-size: calc(14 * var(--rpx)); }
.h-card.md .h-card-r { font-size: var(--type-display); }
.h-card.md .h-card-s { font-size: var(--type-action); }
.h-card.red { color: #c62828; }
.h-card.black { color: #212121; }
/* 底牌(结算用):深色背景区分 */
/* 底牌(玩家口袋牌):与公共牌同白底(不加底色),仅以有色边框区分——
   边框走 --accent,深浅模式自动适配,无需 dark 覆盖;红黑字色继承 .h-card.red/.black */
.h-card.pocket { background: #fff; border: calc(2 * var(--rpx)) solid var(--accent); }

/* 玩家手牌 */
.h-player {
  display: flex; justify-content: center;
  padding: calc(12 * var(--rpx)) calc(10 * var(--rpx)); margin-bottom: calc(10 * var(--rpx));
  background: color-mix(in srgb, var(--bar) 82%, transparent);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border: 0.5px solid var(--line); border-radius: calc(16 * var(--rpx));
  box-shadow: 0 calc(-2 * var(--rpx)) calc(16 * var(--rpx)) rgba(0,0,0,.04);
}
.h-player-cards { display: flex; gap: calc(10 * var(--rpx)); }

/* 操作按钮(compact) */
.h-actions { display: flex; gap: calc(8 * var(--rpx)); }
.h-btn {
  flex: 1; text-align: center; padding: calc(15 * var(--rpx)) 0;
  font-size: var(--type-secondary); font-weight: 600; border-radius: calc(14 * var(--rpx));
  transition: all .18s cubic-bezier(.34,1.56,.64,1);
}
.h-btn:active { transform: scale(.94); }
.h-btn.fold { background: rgba(239,68,68,.15); color: #ef4444; border: 1.5px solid rgba(239,68,68,.3); }
.h-btn.check { background: rgba(59,130,246,.15); color: #3b82f6; border: 1.5px solid rgba(59,130,246,.3); }
.h-btn.call { background: rgba(34,197,94,.15); color: #22c55e; border: 1.5px solid rgba(34,197,94,.3); }
.h-btn.raise { background: rgba(249,115,22,.15); color: #f97316; border: 1.5px solid rgba(249,115,22,.3); }

/* ===== 加注面板:内联卡片(展开时主牌桌 flex 收缩让位,不再单开整页) ===== */
.h-raise-panel {
  display: flex; flex-direction: column;
  background: var(--bg-elev);
  border-radius: calc(18 * var(--rpx)); padding: calc(18 * var(--rpx)) calc(20 * var(--rpx)) calc(20 * var(--rpx));
  box-shadow: 0 4px 24px rgba(0,0,0,.08); border: 0.5px solid var(--line);
  animation: raiseRise .22s cubic-bezier(.32,.72,0,1);
}
@keyframes raiseRise { from { transform: translateY(calc(40 * var(--rpx))); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
.h-raise-hd { display: flex; align-items: center; justify-content: space-between; margin-bottom: calc(10 * var(--rpx)); }
.h-raise-title { font-size: calc(30 * var(--rpx)); font-weight: 700; color: var(--fg); }
.h-raise-close {
  width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--bg); border: 0.5px solid var(--line);
}
.h-raise-close svg { width: calc(26 * var(--rpx)); height: calc(26 * var(--rpx)); color: var(--sub); }
/* 快捷档位 */
.h-raise-quick { display: flex; gap: calc(10 * var(--rpx)); margin-bottom: calc(16 * var(--rpx)); }
.h-quick-btn {
  flex: 1; text-align: center; padding: calc(16 * var(--rpx)) 0;
  font-size: var(--type-secondary); font-weight: 700; color: var(--fg);
  background: var(--bg); border: 1px solid var(--line);
  border-radius: calc(14 * var(--rpx));
  transition: all .18s cubic-bezier(.34,1.56,.64,1); will-change: transform;
}
.h-quick-btn:active { transform: scale(.94); background: color-mix(in srgb, #f97316 12%, var(--bg)); border-color: #f97316; color: #f97316; }
/* 滑块行(大拇指,橙色进度) */
.h-raise-slider { display: flex; align-items: center; gap: calc(10 * var(--rpx)); margin-bottom: calc(18 * var(--rpx)); }
.h-slider-lbl { font-size: var(--type-caption); color: var(--muted); min-width: calc(64 * var(--rpx)); text-align: center; font-variant-numeric: tabular-nums; }
.h-raise-panel .gslider { height: calc(64 * var(--rpx)); }
.h-raise-panel .gslider::-webkit-slider-runnable-track {
  height: calc(14 * var(--rpx)); border-radius: calc(7 * var(--rpx));
  background: linear-gradient(to right, #f97316 0%, #f97316 var(--pct), var(--line) var(--pct), var(--line) 100%);
}
.h-raise-panel .gslider::-webkit-slider-thumb {
  width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); margin-top: calc(-21 * var(--rpx));
  border-color: #f97316; box-shadow: 0 3px 12px rgba(249,115,22,.4);
}
.h-raise-panel .gslider::-moz-range-track { height: calc(14 * var(--rpx)); border-radius: calc(7 * var(--rpx)); background: var(--line); }
.h-raise-panel .gslider::-moz-range-progress { height: calc(14 * var(--rpx)); border-radius: calc(7 * var(--rpx)); background: #f97316; }
.h-raise-panel .gslider::-moz-range-thumb { width: calc(56 * var(--rpx)); height: calc(56 * var(--rpx)); border: calc(2 * var(--rpx)) solid #f97316; border-radius: 50%; background: #fff; }
/* 确认 */
.h-raise-ok {
  text-align: center; padding: calc(22 * var(--rpx)) 0;
  font-size: calc(30 * var(--rpx)); font-weight: 700; color: #fff; letter-spacing: calc(1 * var(--rpx));
  background: linear-gradient(135deg, #f97316, #ea580c);
  border-radius: var(--r-pill);
  box-shadow: 0 6px 20px rgba(249,115,22,.4), inset 0 1px 0 rgba(255,255,255,.2);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1);
  will-change: transform;
}
.h-raise-ok:active { transform: scale(.94); }

/* ===== 结算面板 v2 ===== */
.h-result.v2 {
  padding: calc(24 * var(--rpx)) calc(16 * var(--rpx));
  background: var(--bg-elev); border-radius: calc(20 * var(--rpx));
  margin-bottom: calc(10 * var(--rpx));
  box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 2px 8px rgba(0,0,0,.04); border: 0.5px solid var(--line);
  animation: hResultIn .35s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes hResultIn { from { opacity: 0; transform: scale(.92) translateY(calc(12 * var(--rpx))); } to { opacity: 1; transform: none; } }
.h-result-badge {
  display: inline-block; padding: calc(8 * var(--rpx)) calc(28 * var(--rpx));
  border-radius: var(--r-pill); font-size: calc(30 * var(--rpx)); font-weight: 800; letter-spacing: calc(2 * var(--rpx));
  margin-bottom: calc(10 * var(--rpx));
}
/* 胜负徽章:半透明着色(与 .h-btn 惯用手法一致),深浅模式自适应——实心 #dcfce7 类马卡龙色在深色下刺眼 */
.h-result-badge.win { background: rgba(34,197,94,.15); color: #22c55e; border: 1px solid rgba(34,197,94,.35); }
.h-result-badge.lose { background: rgba(239,68,68,.15); color: #ef4444; border: 1px solid rgba(239,68,68,.35); }
/* 公共牌共享区 */
.h-result-comm {
  display: flex; align-items: center; gap: calc(8 * var(--rpx));
  padding: calc(10 * var(--rpx)) 0; margin-bottom: calc(10 * var(--rpx));
  border-bottom: 0.5px solid var(--line);
}
.h-result-comm-lbl { font-size: var(--type-caption); color: var(--muted); flex-shrink: 0; }
.h-result-comm-cards { display: flex; gap: calc(4 * var(--rpx)); flex-wrap: wrap; }
/* 每位玩家 */
.h-rh.v2 {
  padding: calc(10 * var(--rpx)) calc(12 * var(--rpx)); margin-bottom: calc(8 * var(--rpx));
  border-radius: calc(12 * var(--rpx)); background: var(--bar); border: 1px solid var(--line);
}
.h-rh.v2.player { border-color: var(--accent); }
.h-rh.v2.winner { background: color-mix(in srgb, #16a34a 8%, var(--bar)); border-color: #16a34a; border-width: 1.5px; box-shadow: 0 2px 12px rgba(22,163,74,.15); }
.h-rh-top { display: flex; align-items: center; gap: calc(10 * var(--rpx)); }
.h-rh-name { font-size: var(--type-secondary); font-weight: 700; color: var(--fg); }
.h-rh-rank {
  font-size: var(--type-caption); color: var(--sub);
  padding: calc(2 * var(--rpx)) calc(8 * var(--rpx)); background: var(--bg);
  border-radius: var(--r-pill); flex: 1;
}
.h-rh-chg { font-size: var(--type-footnote); font-weight: 700; }
.h-rh-chg.pos { color: #16a34a; }
.h-rh-chg.neg { color: #dc2626; }
.h-rh-pocket { display: flex; align-items: center; gap: calc(6 * var(--rpx)); margin-top: calc(6 * var(--rpx)); }
.h-rh-pocket-lbl { font-size: calc(18 * var(--rpx)); color: var(--muted); }
.h-rh-folded { font-size: var(--type-caption); color: var(--muted); margin-top: calc(4 * var(--rpx)); font-style: italic; }
/* 底池 */
.h-result-pot { text-align: center; font-size: var(--type-footnote); color: var(--sub); margin: calc(10 * var(--rpx)) 0; }
.h-result-btns { display: flex; gap: calc(10 * var(--rpx)); }
.h-result-btn {
  flex: 1; text-align: center; padding: calc(14 * var(--rpx)) 0;
  font-size: var(--type-body); font-weight: 600;
  border-radius: var(--r-pill); border: 1.5px solid var(--line); color: var(--sub);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1); will-change: transform;
}
.h-result-btn:active { transform: scale(.94); }
.h-result-btn.primary {
  background: var(--accent-fill, var(--accent)); color: #fff; border-color: var(--accent);
  box-shadow: 0 2px 8px color-mix(in srgb, var(--accent) 30%, transparent), inset 0 1px 0 rgba(255,255,255,.15);
}

/* ════════════════════════════════════════════════════════════
   掼蛋(P1:单局对战 · 个人名次结算)
   设计令牌全面对齐德扑:bg-elev 表面 / 0.5px 边 / 面板阴影 /
   渐变主按钮 / 12rpx 动作按钮圆角 / 34rpx 速览正文(同标题)
   ════════════════════════════════════════════════════════════ */
.gd-area { padding: 0 calc(12 * var(--rpx)); flex: 1; min-height: 0; display: flex; flex-direction: column; } /* min-height:0 关键:不撑长页面,牌桌恰好填满视口,记录区内部滚动 */

/* ── 开始画面(对齐 .holdem-start);顶部红调氛围光 ── */
.gd-start { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; display: flex; flex-direction: column; text-align: center; padding: calc(18 * var(--rpx)) calc(4 * var(--rpx)) calc(40 * var(--rpx)); background: radial-gradient(circle at 50% -8%, color-mix(in srgb, #d64545 11%, transparent), transparent 52%); }
.gd-head { padding: calc(10 * var(--rpx)) 0 calc(16 * var(--rpx)); animation: riseIn .5s ease backwards; }
.gd-emblem {
  width: calc(96 * var(--rpx)); height: calc(96 * var(--rpx)); border-radius: 50%;
  margin: 0 auto calc(14 * var(--rpx)); display: flex; align-items: center; justify-content: center;
  background: linear-gradient(145deg, #e05252, #a32020);
  box-shadow: 0 8px 24px rgba(163,32,32,.35), inset 0 1px 0 rgba(255,255,255,.28), inset 0 -3px 6px rgba(0,0,0,.22);
  animation: emblemPop .55s cubic-bezier(.34,1.56,.64,1) backwards;
}
.gd-emblem svg { width: calc(50 * var(--rpx)); height: calc(50 * var(--rpx)); color: #fff; }
.gd-overline { font-size: calc(19 * var(--rpx)); font-weight: 700; letter-spacing: calc(5 * var(--rpx)); color: #d64545; margin-bottom: calc(4 * var(--rpx)); }
.gd-title { font-size: calc(50 * var(--rpx)); font-weight: 800; color: var(--fg); letter-spacing: calc(3 * var(--rpx)); margin-bottom: calc(8 * var(--rpx)); }
.gd-sub { font-size: calc(23 * var(--rpx)); color: var(--sub); }
.gd-wild-note {
  display: flex; align-items: center; justify-content: center; gap: calc(12 * var(--rpx));
  padding: calc(14 * var(--rpx)); margin-bottom: calc(16 * var(--rpx));
  background: color-mix(in srgb, #f59e0b 8%, var(--bg-elev)); border: 0.5px solid color-mix(in srgb, #f59e0b 35%, transparent);
  border-radius: calc(14 * var(--rpx));
  animation: riseIn .5s ease .08s backwards;
}
.gd-wild-txt { font-size: calc(23 * var(--rpx)); color: var(--sub); line-height: 1.4; }
/* 开始按钮(对齐 .hs-btn:渐变 + 大阴影 + 字距;双行:主标题 + 本局打什么)+ 一次性流光 */
.gd-btn {
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: calc(6 * var(--rpx));
  width: 100%; padding: calc(22 * var(--rpx)) 0; margin-bottom: calc(16 * var(--rpx));
  text-align: center; color: #fff;
  background: linear-gradient(135deg, var(--accent-fill, var(--accent)), color-mix(in srgb, var(--accent-fill, var(--accent)) 68%, #000));
  border-radius: calc(18 * var(--rpx));
  box-shadow: 0 8px 24px color-mix(in srgb, var(--accent) 38%, transparent), inset 0 1px 0 rgba(255,255,255,.15);
  transition: transform .2s cubic-bezier(.34,1.56,.64,1), box-shadow .2s;
  animation: riseIn .5s ease .16s backwards;
}
.gd-btn::after {
  content: ''; position: absolute; top: 0; left: -70%; width: 42%; height: 100%;
  background: linear-gradient(105deg, transparent, rgba(255,255,255,.38), transparent);
  transform: skewX(-20deg); animation: btnShine 1.1s ease .55s backwards; pointer-events: none;
}
.gd-btn:active { transform: scale(.96); box-shadow: 0 3px 10px color-mix(in srgb, var(--accent) 25%, transparent); }
.gd-btn-t { font-size: calc(32 * var(--rpx)); font-weight: 700; letter-spacing: calc(2 * var(--rpx)); line-height: 1.2; }
.gd-btn-sub { font-size: var(--type-caption); font-weight: 500; letter-spacing: 0; opacity: .8; line-height: 1.3; }
/* 玩法速览(对齐 .hs-brief:bg-elev + 0.5px + 阴影)*/
.gd-brief {
  display: flex; flex-direction: column; text-align: left;
  padding: calc(22 * var(--rpx)) calc(20 * var(--rpx)); background: var(--bg-elev);
  border-radius: calc(18 * var(--rpx)); border: 0.5px solid var(--line);
  box-shadow: 0 4px 20px rgba(0,0,0,.06);
  animation: riseIn .5s ease .32s backwards;
}
.gd-brief-hd { display: flex; align-items: center; gap: calc(8 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); }
.gd-brief-hd text { font-size: var(--type-display); font-weight: 700; color: var(--fg); }
.gd-brief-line { font-size: var(--type-body); color: var(--sub); line-height: 1.55; margin-bottom: calc(16 * var(--rpx)); } /* 灰字描述:比标题(40rpx)小一档(用户要求) */
.gd-types { display: flex; flex-wrap: wrap; gap: calc(10 * var(--rpx)); margin-bottom: calc(14 * var(--rpx)); }
.gd-type {
  flex: 1 1 calc(30% - 10 * var(--rpx)); min-width: calc(28%);
  display: flex; flex-direction: column; align-items: center; gap: calc(2 * var(--rpx));
  padding: calc(12 * var(--rpx)) 0; background: var(--bg); border: 0.5px solid var(--line); border-radius: calc(12 * var(--rpx));
}
.gd-type-n { font-size: var(--type-body); font-weight: 700; color: var(--fg); }
.gd-type-d { font-size: var(--type-caption); color: var(--muted); }
.gd-bomb-order { font-size: var(--type-footnote); color: var(--sub); text-align: center; line-height: 1.5; padding: calc(10 * var(--rpx)); background: var(--bg); border-radius: calc(10 * var(--rpx)); margin-bottom: calc(12 * var(--rpx)); }
.gd-brief-link { width: max-content; max-width: 100%; margin: 0 auto; text-align: center; font-size: calc(25 * var(--rpx)); font-weight: 600; color: var(--accent); padding: calc(11 * var(--rpx)) calc(18 * var(--rpx)); border: .5px solid color-mix(in srgb, var(--accent) 24%, transparent); border-radius: var(--r-pill); background: color-mix(in srgb, var(--accent) 8%, transparent); }

/* 一轮记录卡(多局累计 · 持久化;开始画面顶部) */
.gd-session {
  text-align: left; padding: calc(18 * var(--rpx)) calc(18 * var(--rpx)) calc(14 * var(--rpx));
  margin-bottom: calc(16 * var(--rpx));
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: calc(16 * var(--rpx));
  box-shadow: 0 4px 20px rgba(0,0,0,.06);
  animation: riseIn .5s ease .16s backwards;
}
.gd-session-hd { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: calc(10 * var(--rpx)); }
.gd-session-t { font-size: var(--type-action); font-weight: 700; color: var(--fg); }
.gd-session-n { font-size: var(--type-footnote); color: var(--muted); }
.gd-session-lv { font-size: var(--type-footnote); font-weight: 600; color: var(--sub); margin-bottom: calc(8 * var(--rpx)); } /* 双方等级:你队 打X · 对方 打Y */
.gd-session-row {
  display: flex; align-items: center; gap: calc(12 * var(--rpx));
  padding: calc(9 * var(--rpx)) calc(12 * var(--rpx)); margin-bottom: calc(6 * var(--rpx));
  background: var(--bar); border: 0.5px solid var(--line); border-radius: calc(10 * var(--rpx));
}
.gd-session-row.me { border-color: var(--accent); }
.gd-session-name { font-size: var(--type-secondary); font-weight: 600; color: var(--fg); flex: 1; }
.gd-session-tops { font-size: var(--type-caption); color: var(--muted); }
.gd-session-total { font-size: var(--type-secondary); font-weight: 700; min-width: calc(90 * var(--rpx)); text-align: right; }
.gd-session-total.pos { color: #16a34a; }
.gd-session-total.neg { color: #dc2626; }
.gd-session-btns { display: flex; flex-direction: column; gap: calc(8 * var(--rpx)); margin-top: calc(12 * var(--rpx)); }
.gd-session-btns .gd-btn { margin-bottom: 0; padding: calc(16 * var(--rpx)) 0; }
.gd-session-end {
  padding: calc(10 * var(--rpx)) 0; text-align: center;
  font-size: var(--type-footnote); font-weight: 600; color: var(--muted);
}
.gd-session-end:active { transform: scale(.97); opacity: .7; }

/* ── 牌桌(对齐 .h-table:bg-elev  elevated 卡片)── */
.gd-table {
  flex: 1; display: flex; flex-direction: column; min-height: 0;
  background: var(--bg-elev); border-radius: calc(18 * var(--rpx)); padding: calc(16 * var(--rpx));
  margin-bottom: calc(10 * var(--rpx));
  box-shadow: 0 4px 24px rgba(0,0,0,.08); border: 0.5px solid var(--line);
}
.gd-ais { display: flex; justify-content: space-around; align-items: flex-start; margin-bottom: calc(12 * var(--rpx)); }
.gd-ai {
  display: flex; flex-direction: column; align-items: center; gap: calc(4 * var(--rpx));
  padding: calc(8 * var(--rpx)) calc(12 * var(--rpx)); border-radius: calc(14 * var(--rpx));
  min-width: calc(100 * var(--rpx));
  background: var(--bg-elev); border: 0.5px solid var(--line);
  box-shadow: 0 1px 4px rgba(0,0,0,.04);
  transition: all .3s cubic-bezier(.25,.46,.45,.94);
}
.gd-ai.turn { background: color-mix(in srgb, var(--accent) 10%, var(--bg-elev)); box-shadow: 0 0 0 1.5px var(--accent) inset, 0 2px 12px color-mix(in srgb, var(--accent) 12%, transparent); transform: scale(1.04); }
.gd-ai.done { opacity: .35; transform: scale(.96); }
/* AI 头像(对齐 .h-ai-av.svg:48rpx 圆 + bg + 0.5px 边)*/
.gd-ai-av { width: calc(48 * var(--rpx)); height: calc(48 * var(--rpx)); border-radius: 50%; overflow: hidden; background: var(--bg); border: 0.5px solid var(--line); }
.gd-ai-svg { width: 100%; height: 100%; }
.gd-ai-svg svg { width: 100%; height: 100%; display: block; }
.gd-ai-namerow { display: flex; align-items: center; gap: calc(5 * var(--rpx)); }
.gd-ai-name { font-size: var(--type-caption); color: var(--sub); font-weight: 600; }
.gd-ai-mate {
  font-size: calc(16 * var(--rpx)); font-weight: 700; line-height: 1;
  padding: calc(3 * var(--rpx)) calc(8 * var(--rpx)); border-radius: var(--r-pill);
  color: #16a34a; background: rgba(34,197,94,.14); border: 0.5px solid rgba(34,197,94,.4);
}
.gd-ai-cnt { font-size: var(--type-caption); color: var(--sub); }
.gd-ai-place {
  font-size: calc(18 * var(--rpx)); font-weight: 700; color: #fff; padding: calc(1 * var(--rpx)) calc(10 * var(--rpx));
  background: #16a34a; border-radius: var(--r-pill);
}
.gd-ai-act {
  font-size: calc(18 * var(--rpx)); font-weight: 600; padding: calc(2 * var(--rpx)) calc(10 * var(--rpx));
  border-radius: var(--r-pill); white-space: nowrap;
  background: color-mix(in srgb, var(--accent) 15%, transparent); color: var(--accent);
}
.gd-ai-act.pass { background: var(--bg); color: var(--muted); }

/* 中央:状态提示 + 出牌记录区(flex:1 吃掉手牌上方的空余高度,时间序,最新一行蓝框高亮) */
.gd-center { flex: 1; min-height: 0; display: flex; flex-direction: column; padding: calc(4 * var(--rpx)) 0 calc(10 * var(--rpx)); }
/* 本局打什么(级牌 + 逢人配)胶囊:常驻提示,不随出牌消息变化 */
.gd-level-chip {
  align-self: center; margin-bottom: calc(6 * var(--rpx));
  padding: calc(4 * var(--rpx)) calc(16 * var(--rpx));
  font-size: calc(18 * var(--rpx)); font-weight: 500; color: var(--sub);
  background: color-mix(in srgb, var(--bg-elev) 80%, transparent);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  border: 0.5px solid var(--line); border-radius: var(--r-pill);
  box-shadow: 0 1px 4px rgba(0,0,0,.04);
}
.gd-msg { font-size: var(--type-secondary); color: var(--sub); margin-bottom: calc(10 * var(--rpx)); text-align: center; }
.gd-log {
  flex: 1; min-height: calc(160 * var(--rpx)); overflow-y: auto; -webkit-overflow-scrolling: touch;
  display: flex; flex-direction: column; gap: calc(8 * var(--rpx));
  padding: calc(10 * var(--rpx)); background: var(--bg);
  border: 0.5px solid var(--line); border-radius: calc(14 * var(--rpx));
  box-shadow: inset 0 1px 3px rgba(0,0,0,.04);
}
.gd-log-empty { text-align: center; font-size: var(--type-footnote); color: var(--muted); padding: calc(60 * var(--rpx)) 0; }
.gd-log-item { display: flex; flex-direction: column; gap: calc(6 * var(--rpx)); animation: gdSlideIn .25s cubic-bezier(.25,.46,.45,.94) both; }
@keyframes gdSlideIn { from { opacity: 0; transform: translateY(calc(8 * var(--rpx))); } to { opacity: 1; transform: none; } }
.gd-log-sep { display: flex; align-items: center; gap: calc(12 * var(--rpx)); margin: calc(4 * var(--rpx)) 0; }
.gd-log-sep text { font-size: calc(18 * var(--rpx)); color: var(--muted); white-space: nowrap; }
.gd-log-sep::before, .gd-log-sep::after { content: ''; flex: 1; height: 0.5px; background: var(--line); }
.gd-log-row {
  padding: calc(8 * var(--rpx)) calc(10 * var(--rpx));
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: calc(10 * var(--rpx));
}
/* 最新一行:蓝框高亮(对齐德扑底牌 .h-card.pocket 的 accent 描边) */
.gd-log-row.latest {
  border: calc(2 * var(--rpx)) solid var(--accent);
  background: color-mix(in srgb, var(--accent) 6%, var(--bg-elev));
  box-shadow: 0 2px 10px color-mix(in srgb, var(--accent) 22%, transparent);
}
.gd-log-row.pass { display: flex; align-items: center; gap: calc(10 * var(--rpx)); padding: calc(6 * var(--rpx)) calc(10 * var(--rpx)); opacity: .8; }
.gd-log-head { display: flex; align-items: center; gap: calc(8 * var(--rpx)); margin-bottom: calc(5 * var(--rpx)); }
.gd-log-name { font-size: var(--type-caption); font-weight: 700; color: var(--fg); }
/* 玩家名=蓝底白字胶囊,与手牌区 .gd-hand-me 的「你」一致 */
.gd-log-name.me {
  color: #fff; background: var(--accent-fill, var(--accent));
  font-size: calc(18 * var(--rpx)); line-height: 1;
  padding: calc(4 * var(--rpx)) calc(10 * var(--rpx)); border-radius: var(--r-pill);
}
.gd-log-type { font-size: calc(18 * var(--rpx)); color: var(--sub); }
.gd-log-lead {
  font-size: calc(16 * var(--rpx)); font-weight: 600; line-height: 1;
  padding: calc(3 * var(--rpx)) calc(8 * var(--rpx)); border-radius: var(--r-pill);
  color: #f59e0b; border: 0.5px solid rgba(245,158,11,.45); background: rgba(245,158,11,.1);
}
.gd-log-pass { font-size: calc(18 * var(--rpx)); color: var(--muted); }
.gd-log-cards { display: flex; flex-wrap: wrap; gap: calc(4 * var(--rpx)); }

/* 玩家手牌(3 行平铺免滚动,一眼看清牌型;轮到你时绿框轻提示) */
.gd-hand-wrap {
  padding: calc(10 * var(--rpx)) calc(10 * var(--rpx)) calc(6 * var(--rpx));
  background: color-mix(in srgb, var(--bar) 82%, transparent);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border: 0.5px solid var(--line); border-radius: calc(16 * var(--rpx));
  box-shadow: 0 calc(-2 * var(--rpx)) calc(16 * var(--rpx)) rgba(0,0,0,.04);
  transition: box-shadow .25s cubic-bezier(.34,1.56,.64,1), border-color .25s;
}
/* 轮到玩家:绿框 + 淡绿底(轻量化提示,对齐 AI 的 .turn 高亮思路) */
.gd-hand-wrap.myturn {
  border-color: rgba(34,197,94,.55);
  background: color-mix(in srgb, #22c55e 6%, var(--bar));
  box-shadow: 0 0 0 1.5px #22c55e inset, 0 calc(-2 * var(--rpx)) calc(16 * var(--rpx)) rgba(34,197,94,.08);
}
.gd-hand-info { display: flex; align-items: center; gap: calc(12 * var(--rpx)); padding: 0 calc(2 * var(--rpx)) calc(8 * var(--rpx)); }
.gd-hand-me {
  font-size: calc(18 * var(--rpx)); font-weight: 700; line-height: 1; color: #fff;
  padding: calc(4 * var(--rpx)) calc(10 * var(--rpx)); border-radius: var(--r-pill); background: var(--accent-fill, var(--accent));
}
.gd-hand-cnt { font-size: var(--type-footnote); color: var(--sub); }
.gd-hand-sel { font-size: var(--type-footnote); font-weight: 600; color: var(--accent); }
.gd-hand-turn { margin-left: auto; font-size: var(--type-caption); font-weight: 700; color: #16a34a; }
.gd-hand-rows { display: flex; flex-direction: column; gap: calc(8 * var(--rpx)); padding-top: calc(8 * var(--rpx)); }
.gd-hand-row { display: grid; grid-template-columns: repeat(auto-fill, minmax(calc(56 * var(--rpx)), 1fr)); gap: calc(6 * var(--rpx)); }
.gd-card {
  position: relative; width: 100%; height: calc(80 * var(--rpx));
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: linear-gradient(165deg, #ffffff 60%, #f5f5f7); border: 1px solid rgba(0,0,0,.06); border-radius: calc(8 * var(--rpx));
  box-shadow: 0 1px 3px rgba(0,0,0,.12), 0 3px 8px rgba(0,0,0,.06), inset 0 1px 0 rgba(255,255,255,.9);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), border-color .15s, box-shadow .18s;
  will-change: transform;
}
.gd-card.red { color: #c62828; }
.gd-card.black { color: #1d1d1f; }
.gd-card-r { font-size: var(--type-body); font-weight: 700; line-height: 1; }
.gd-card-s { font-size: calc(18 * var(--rpx)); line-height: 1; margin-top: calc(2 * var(--rpx)); opacity: .85; }
.gd-card.sel {
  transform: translateY(calc(-10 * var(--rpx))) scale(1.03); border-color: var(--accent);
  background: linear-gradient(165deg, color-mix(in srgb, var(--accent) 5%, #fff) 60%, color-mix(in srgb, var(--accent) 10%, #f5f5f7));
  box-shadow: 0 6px 16px color-mix(in srgb, var(--accent) 35%, transparent), 0 2px 4px rgba(0,0,0,.1); z-index: 2;
}
.gd-card:active { transform: scale(.95); }
.gd-card.sel:active { transform: translateY(calc(-10 * var(--rpx))) scale(.97); }
.gd-card.wild { border-color: #f59e0b; box-shadow: 0 0 0 1px #f59e0b, 0 1px 4px rgba(0,0,0,.18); }
.gd-card.wild.sel { border-color: var(--accent); box-shadow: 0 0 0 1.5px #f59e0b, 0 4px 10px color-mix(in srgb, var(--accent) 40%, transparent); }

/* 操作按钮(苹果风:圆角胶囊 / 半透明着色 / 出牌=渐变主按钮 / 弹性按压)*/
.gd-actions { display: flex; flex-wrap: wrap; gap: calc(8 * var(--rpx)); padding: calc(12 * var(--rpx)) 0 calc(4 * var(--rpx)); }
.gd-act-btn {
  flex: 1 1 30%; text-align: center; padding: calc(15 * var(--rpx)) 0;
  font-size: var(--type-secondary); font-weight: 600; border-radius: calc(14 * var(--rpx));
  transition: all .18s cubic-bezier(.34,1.56,.64,1);
  background: var(--bg); color: var(--sub); border: 1.5px solid var(--line);
}
.gd-act-btn:active { transform: scale(.94); }
.gd-act-btn.hint { background: color-mix(in srgb, var(--accent) 15%, transparent); color: var(--accent); border-color: color-mix(in srgb, var(--accent) 30%, transparent); }
/* 问Kenny:AI 紫调,与提示/出牌区分(联网可用,离线点了会提示) */
.gd-act-btn.ask { background: rgba(139,92,246,.14); color: #8b5cf6; border-color: rgba(139,92,246,.32); }
/* 托管:开启后橙底白字(机器人代打,与绿色轮次提示/蓝色主按钮区分) */
.gd-act-btn.auto.on { background: #f59e0b; color: #fff; border-color: #f59e0b; box-shadow: 0 2px 10px rgba(245,158,11,.35); }
.gd-act-btn.pass { background: rgba(249,115,22,.15); color: #f97316; border-color: rgba(249,115,22,.3); }
.gd-act-btn.play {
  background: linear-gradient(135deg, var(--accent-fill, var(--accent)), color-mix(in srgb, var(--accent-fill, var(--accent)) 72%, #000));
  color: #fff; border-color: transparent;
  box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 40%, transparent);
}
.gd-act-btn.play.dis { opacity: .45; box-shadow: none; }

/* 结算面板(对齐 .h-result.v2:bg-elev 容器卡 + 阴影;徽章=小药丸)*/
.gd-result {
  flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: calc(24 * var(--rpx)) calc(16 * var(--rpx));
  background: var(--bg-elev); border-radius: calc(20 * var(--rpx));
  margin-bottom: calc(10 * var(--rpx));
  box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 2px 8px rgba(0,0,0,.04); border: 0.5px solid var(--line);
  text-align: center;
  animation: gdResultIn .35s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes gdResultIn { from { opacity: 0; transform: scale(.92) translateY(calc(12 * var(--rpx))); } to { opacity: 1; transform: none; } }
.gd-result-badge {
  display: inline-block; padding: calc(8 * var(--rpx)) calc(28 * var(--rpx));
  border-radius: var(--r-pill); font-size: calc(30 * var(--rpx)); font-weight: 800; letter-spacing: calc(2 * var(--rpx));
  margin-bottom: calc(8 * var(--rpx));
  background: rgba(142,142,147,.12); color: var(--sub); border: 1px solid var(--line);
}
.gd-result-badge.win { background: linear-gradient(135deg, #22c55e, #16a34a); color: #fff; border-color: transparent; box-shadow: 0 4px 16px rgba(34,197,94,.35); }
.gd-result-sub { font-size: var(--type-caption); color: var(--muted); margin-bottom: calc(16 * var(--rpx)); }
.gd-rrow {
  display: flex; align-items: center; gap: calc(14 * var(--rpx)); text-align: left;
  padding: calc(12 * var(--rpx)) calc(14 * var(--rpx)); margin-bottom: calc(8 * var(--rpx));
  background: var(--bar); border: 1px solid var(--line); border-radius: calc(12 * var(--rpx));
}
.gd-rrow.me { border-color: var(--accent); }
.gd-rrow-place { font-size: var(--type-secondary); font-weight: 700; color: var(--fg); min-width: calc(72 * var(--rpx)); }
.gd-rrow-name { font-size: var(--type-secondary); color: var(--sub); flex: 1; }
.gd-rrow-chg { font-size: var(--type-secondary); font-weight: 700; }
.gd-rrow-chg.pos { color: #16a34a; }
.gd-rrow-chg.neg { color: #dc2626; }
.gd-result-btns { display: flex; gap: calc(10 * var(--rpx)); margin-top: calc(18 * var(--rpx)); }
.gd-result-btn {
  flex: 1; text-align: center; padding: calc(15 * var(--rpx)) 0;
  font-size: var(--type-body); font-weight: 600; border-radius: calc(14 * var(--rpx));
  border: 1.5px solid var(--line); color: var(--sub); background: var(--bg);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1);
}
.gd-result-btn:active { transform: scale(.95); }
.gd-result-btn.primary { background: linear-gradient(135deg, var(--accent-fill, var(--accent)), color-mix(in srgb, var(--accent-fill, var(--accent)) 70%, #000)); color: #fff; border-color: transparent; box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 32%, transparent); }

/* 结算面板:本轮累计(多局战绩) */
.gd-acc { margin-top: calc(14 * var(--rpx)); padding-top: calc(12 * var(--rpx)); border-top: 0.5px solid var(--line); text-align: left; }
.gd-acc-hd { font-size: var(--type-footnote); font-weight: 700; color: var(--muted); text-align: center; margin-bottom: calc(10 * var(--rpx)); }
.gd-acc-row {
  display: flex; align-items: center; gap: calc(12 * var(--rpx));
  padding: calc(9 * var(--rpx)) calc(12 * var(--rpx)); margin-bottom: calc(6 * var(--rpx));
  background: var(--bar); border: 0.5px solid var(--line); border-radius: calc(10 * var(--rpx));
}
.gd-acc-row.me { border-color: var(--accent); }
.gd-acc-name { font-size: var(--type-secondary); font-weight: 600; color: var(--fg); flex: 1; }
.gd-acc-tops { font-size: var(--type-caption); color: var(--muted); }
.gd-acc-total { font-size: var(--type-secondary); font-weight: 700; min-width: calc(90 * var(--rpx)); text-align: right; }
.gd-acc-total.pos { color: #16a34a; }
.gd-acc-total.neg { color: #dc2626; }
/* 结算面板:本局升级结果(打过 A 时金色庆祝) */
.gd-lvlup {
  margin-top: calc(12 * var(--rpx)); padding: calc(12 * var(--rpx)) calc(14 * var(--rpx));
  font-size: var(--type-secondary); font-weight: 700; text-align: center; color: var(--accent);
  background: color-mix(in srgb, var(--accent) 8%, var(--bg-elev));
  border: 0.5px solid color-mix(in srgb, var(--accent) 30%, transparent); border-radius: calc(12 * var(--rpx));
}
.gd-lvlup.win { color: #b45309; background: color-mix(in srgb, #f59e0b 12%, var(--bg-elev)); border-color: rgba(245,158,11,.4); }

/* ── 进贡阶段 ── */
.gd-tribute {
  display: flex; flex-direction: column; align-items: center; gap: calc(12 * var(--rpx));
  padding: calc(20 * var(--rpx)) calc(14 * var(--rpx));
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: calc(16 * var(--rpx));
  margin-bottom: calc(8 * var(--rpx));
  box-shadow: 0 4px 16px rgba(0,0,0,.06);
  animation: gdResultIn .3s cubic-bezier(.34,1.56,.64,1) both;
}
.gd-tribute-hd { font-size: calc(30 * var(--rpx)); font-weight: 800; letter-spacing: calc(6 * var(--rpx)); color: var(--txt); }
.gd-tribute-pair {
  display: flex; align-items: center; gap: calc(8 * var(--rpx)); flex-wrap: wrap; justify-content: center;
}
.gd-tribute-txt { font-size: var(--type-secondary); color: var(--sub); font-weight: 600; }
.gd-tribute-ret { display: flex; align-items: center; gap: calc(4 * var(--rpx)); }
.gd-tribute-ret-t { font-size: var(--type-caption); color: var(--muted); }
.gd-tribute-kang { font-size: var(--type-body); font-weight: 700; color: #f59e0b; }
.gd-tribute-tip { font-size: var(--type-secondary); color: var(--accent); font-weight: 600; animation: gdPulse 1.2s infinite; }
.gd-tribute-wait { font-size: var(--type-footnote); color: var(--muted); }
@keyframes gdPulse { 0%,100% { opacity: 1; } 50% { opacity: .5; } }

/* ── AI 难度选择(德扑+掼蛋共用;4 档,窄屏可换行)── */
.gd-diff {
  display: flex; align-items: center; flex-wrap: wrap; gap: calc(10 * var(--rpx));
  margin: calc(14 * var(--rpx)) 0;
  animation: riseIn .5s ease .24s backwards;
}
.gd-diff-label { font-size: var(--type-footnote); color: var(--muted); font-weight: 600; }
.gd-diff-opts { display: flex; flex-wrap: wrap; gap: calc(8 * var(--rpx)); }
.gd-diff-opt {
  padding: calc(6 * var(--rpx)) calc(16 * var(--rpx));
  font-size: var(--type-footnote); font-weight: 600; color: var(--sub);
  background: var(--bg-elev); border: 0.5px solid var(--line); border-radius: var(--r-pill);
  transition: all .18s cubic-bezier(.34,1.56,.64,1);
}
.gd-diff-opt:active { transform: scale(.93); }
.gd-diff-opt.on {
  color: #fff; background: var(--accent-fill, var(--accent)); border-color: var(--accent);
  box-shadow: 0 2px 8px color-mix(in srgb, var(--accent) 30%, transparent);
}

/* V61.6 rollback · 保留无障碍与触控能力，不再覆盖任何组件尺寸或布局 */
:root { --ios-press: cubic-bezier(.2,.8,.2,1); }
html, body { background: #f2f2f7; -webkit-font-smoothing: antialiased; }
* { touch-action: manipulation; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}

/* V61.7 · Lenny 行程卡片分享：系统分享失去手势权限时，保留一个真正可保存的 iOS 预览闭环 */
.pny-btn.disabled { opacity: .56; pointer-events: none; }
.trip-share-mask { align-items: flex-end; padding: 10px 10px max(10px, env(safe-area-inset-bottom)); }
.trip-share-sheet {
  width: min(560px, 100%); max-height: min(92dvh, 920px); display: flex; flex-direction: column;
  overflow: hidden; color: var(--txt); background: color-mix(in srgb, var(--bg-elev) 96%, transparent);
  border: .5px solid color-mix(in srgb, var(--line) 72%, transparent); border-radius: 24px;
  box-shadow: 0 24px 80px rgba(0,0,0,.24); -webkit-backdrop-filter: blur(26px); backdrop-filter: blur(26px);
  animation: iosSheetIn .34s var(--ios-press);
}
.trip-share-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 18px 18px 13px; }
.trip-share-title { font-size: 19px; line-height: 1.25; font-weight: 720; letter-spacing: -.02em; }
.trip-share-sub { margin-top: 5px; color: var(--sub); font-size: 13px; line-height: 1.4; }
.trip-share-close {
  display: grid; place-items: center; flex: 0 0 32px; width: 32px; height: 32px; border-radius: 50%;
  color: var(--sub); background: var(--fill); font-size: 23px; line-height: 1;
}
.trip-share-stage { flex: 1; min-height: 220px; max-height: 62dvh; padding: 0 14px; box-sizing: border-box; }
.trip-share-img {
  display: block; width: 100%; height: auto; border-radius: 15px; box-shadow: 0 8px 30px rgba(0,0,0,.14);
  -webkit-touch-callout: default !important; -webkit-user-select: auto !important; user-select: auto !important;
}
.trip-share-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; padding: 13px 14px 14px; }
.trip-share-actions .pny-btn { margin: 0; min-width: 0; font-size: 14px; }
.trip-share-actions .pny-btn.primary { grid-column: 1 / -1; }
@keyframes iosSheetIn { from { opacity: 0; transform: translateY(20px) scale(.985); } to { opacity: 1; transform: none; } }

.dev-diag-card { margin: 10px 0 13px; padding: 14px; border-radius: 14px; background: var(--fill); }
.dev-diag-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.dev-diag-run { flex: 0 0 auto; min-height: 36px; display: grid; place-items: center; padding: 0 12px; border-radius: 10px; color: #fff; background: var(--accent-fill, var(--accent)); font-size: 13px; font-weight: 650; }
.dev-diag-run.busy { opacity: .55; pointer-events: none; }
.dev-diag-list { margin-top: 11px; padding-top: 8px; border-top: .5px solid var(--line); }
.dev-diag-row { display: grid; grid-template-columns: 9px 70px 1fr; align-items: center; gap: 8px; min-height: 30px; font-size: 13px; }
.dev-diag-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--sub); }
.dev-diag-dot.ok { background: #30d158; }.dev-diag-dot.fail { background: #ff453a; }.dev-diag-dot.run { background: #0a84ff; }
.dev-diag-name { color: var(--txt); font-weight: 650; }.dev-diag-detail { color: var(--sub); text-align: right; }

/* Lenny AI 行程导入：作为完整工具入口，不再悬挂一行裸文字。 */
.trip-ai-import-card {
  width: calc(100% - calc(48 * var(--rpx))); min-height: calc(112 * var(--rpx)); margin: calc(16 * var(--rpx)) calc(24 * var(--rpx)) 0;
  padding: calc(20 * var(--rpx)) calc(22 * var(--rpx)); display: flex; align-items: center; gap: calc(18 * var(--rpx));
  color: var(--txt); background: var(--bg-elev); border: .5px solid var(--line); border-radius: var(--r-lg);
  box-shadow: 0 calc(3 * var(--rpx)) calc(12 * var(--rpx)) rgba(0,0,0,.04);
}
.trip-ai-import-card:active { transform: scale(.99); background: color-mix(in srgb, var(--accent) 5%, var(--bg-elev)); }
.trip-ai-import-icon { flex: none; width: calc(64 * var(--rpx)); height: calc(64 * var(--rpx)); border-radius: var(--r-md); background: color-mix(in srgb, var(--accent) 13%, transparent); position: relative; }
.trip-ai-import-icon::before { content: ''; position: absolute; inset: calc(15 * var(--rpx)); background: var(--accent); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12M7 10l5 5 5-5'/%3E%3Cpath d='M5 20h14'/%3E%3C/svg%3E") center/contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12M7 10l5 5 5-5'/%3E%3Cpath d='M5 20h14'/%3E%3C/svg%3E") center/contain no-repeat; }
.trip-ai-import-copy { flex: 1; min-width: 0; }
.trip-ai-import-title { font-size: calc(27 * var(--rpx)); line-height: 1.3; font-weight: 650; }
.trip-ai-import-sub { margin-top: calc(5 * var(--rpx)); color: var(--sub); font-size: var(--type-footnote); line-height: 1.4; }
.trip-ai-import-chevron { flex: none; color: var(--muted); font-size: calc(38 * var(--rpx)); line-height: 1; }
.pop.ai-trip-import { width: var(--dialog-w); }
.ai-trip-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.ai-trip-head .pop-title { text-align: left; margin: 0; font-size: 20px; letter-spacing: -.02em; }
.ai-trip-head .pop-sub { text-align: left; margin-top: 5px; }
.ai-trip-step { display: grid; grid-template-columns: 28px 1fr; gap: 11px; margin-top: 17px; }
.ai-trip-step-no { width: 27px; height: 27px; display: grid; place-items: center; border-radius: 50%; color: #fff; background: var(--accent-fill, var(--accent)); font-size: 13px; font-weight: 750; }
.ai-trip-step-body { min-width: 0; }
.ai-trip-step-title { color: var(--txt); font-size: 16px; line-height: 1.3; font-weight: 680; }
.ai-trip-step-sub { margin-top: 4px; color: var(--sub); font-size: 13px; line-height: 1.5; }
.ai-trip-protocol { margin-top: 10px; padding: 9px 11px; display: flex; align-items: center; justify-content: space-between; gap: 10px; border-radius: 10px; background: color-mix(in srgb, var(--accent) 8%, transparent); color: var(--txt); font-size: 13px; }
.ai-trip-protocol-state { flex: none; color: var(--accent); font-weight: 650; }
.ai-trip-custom { width: 100%; height: 82px; margin-top: 10px; padding: 11px 12px; resize: none; border: .5px solid var(--line); border-radius: 11px; background: var(--bg); color: var(--txt); font: 14px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif; }
.ai-trip-custom:focus, .ai-trip-paste:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent); }
.ai-trip-copy { margin-top: 10px; min-height: 44px; padding: 0 14px; display: flex; align-items: center; justify-content: center; border-radius: 11px; color: #fff; background: var(--accent-fill, var(--accent)); font-size: 15px; font-weight: 650; }
.ai-trip-copy:active { opacity: .82; }
.ai-trip-paste {
  width: 100%; height: 132px; margin-top: 10px; padding: 12px 13px; box-sizing: border-box; resize: none;
  border: .5px solid var(--line); border-radius: 12px; outline: none; background: var(--bg); color: var(--txt);
  font: 14px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace; -webkit-user-select: text; user-select: text;
}
.ai-trip-error, .ai-trip-preview { margin-top: 15px; padding: 13px; border-radius: 13px; }
.ai-trip-error { color: #ff453a; background: color-mix(in srgb, #ff453a 9%, transparent); border: .5px solid color-mix(in srgb, #ff453a 25%, transparent); }
.ai-trip-result-title { font-size: 14px; font-weight: 700; }
.ai-trip-error-text { margin-top: 5px; font-size: 13px; line-height: 1.55; white-space: pre-line; }
.ai-trip-preview { background: var(--fill); border: .5px solid var(--line); }
.ai-trip-preview-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.ai-trip-preview-dest { color: var(--txt); font-size: 17px; font-weight: 720; }
.ai-trip-preview-meta { margin-top: 3px; color: var(--sub); font-size: 12px; line-height: 1.4; }
.ai-trip-valid { flex: 0 0 auto; padding: 5px 8px; border-radius: 999px; color: #248a3d; background: color-mix(in srgb, #30d158 14%, transparent); font-size: 11px; font-weight: 700; }
.ai-trip-days { max-height: 180px; margin-top: 10px; }
.ai-trip-dayline { display: grid; grid-template-columns: 54px 1fr auto; align-items: center; gap: 8px; min-height: 32px; border-top: .5px solid var(--line); font-size: 13px; }
.ai-trip-dayline:first-child { border-top: 0; }
.ai-trip-dayno { color: var(--accent); font-weight: 680; }.ai-trip-daysum { min-width: 0; color: var(--txt); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.ai-trip-daycount { color: var(--sub); }
.ai-trip-warnings { margin-top: 8px; padding-top: 7px; border-top: .5px solid var(--line); color: #b36b00; font-size: 12px; line-height: 1.5; }
.ai-trip-actions { margin-top: 16px; }

/* 统一中心弹层：保留内容差异，只统一容器、标题和操作区几何。 */
.mem-edit, .kcoin-edit-pop, .chat-hist, .shared-mgr, .settings, .backup-restore-sheet, .copy-fb-card {
  width: var(--dialog-w) !important; max-width: var(--dialog-w); max-height: min(88dvh, 860px); overflow-y: auto;
  box-sizing: border-box; border-radius: var(--dialog-radius); padding: var(--dialog-pad);
  background: var(--bg-elev); box-shadow: 0 calc(20 * var(--rpx)) calc(60 * var(--rpx)) rgba(0,0,0,.25);
}
.mem-edit-title, .kcoin-edit-title, .chat-hist-title, .shared-mgr-title {
  font-size: var(--dialog-title-size); line-height: 1.3; font-weight: 700; color: var(--txt); text-align: center;
}
.mem-edit-sub, .kcoin-edit-sub, .shared-mgr-sub { font-size: var(--dialog-body-size); line-height: 1.5; color: var(--sub); }
.mem-edit-btn, .kcoin-edit-btn { min-height: var(--dialog-action-h); padding: 0 calc(18 * var(--rpx)); display: flex; align-items: center; justify-content: center; border-radius: var(--btn-radius); font-size: var(--dialog-action-size); }

/* 拼图入口与另外三款游戏共用同一封面比例；插画与规则进入后再按需加载。 */
.kgc-puzzle:focus-visible { outline:2px solid var(--accent); outline-offset:3px; }
.kgc-puzzle-art { background:linear-gradient(135deg,#e6ebdb,#f3f0e5); }
/* 模板会把 view/text 转成 div/span，装饰使用类名匹配，不依赖原标签。 */
.kgc-puzzle-spark { position:absolute; left:17%; top:10%; font-size:42px; line-height:1; color:#52795a; transform:rotate(-15deg); }
.kgc-puzzle-piece { position:absolute; width:33%; height:auto; aspect-ratio:1; background:#d29c67; border:4px solid #fff7e9; border-radius:10px; transform:rotate(13deg); bottom:12%; left:18%; box-shadow:0 7px 14px #35513020; }
.kgc-puzzle-piece::before { content:""; position:absolute; width:34%; height:34%; border-radius:50%; background:inherit; border:inherit; top:-28%; left:27%; border-bottom:0; }
.kgc-puzzle-piece-front { z-index:1; }
.kgc-puzzle-piece-back { left:49%; bottom:34%; background:#789a83; transform:rotate(-8deg); }
.puzzle-shell{position:fixed;inset:0;z-index:11000;background:#f5f3ec;padding-top:env(safe-area-inset-top);display:flex;flex-direction:column}.puzzle-shell iframe{width:100%;flex:1;min-height:0;border:0;background:#f5f3ec}.puzzle-loading{position:absolute;inset:0;z-index:2;background:#f5f3ec;color:#385a50;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;font-size:14px}.puzzle-loading [role=button]{cursor:pointer;padding:12px 22px;border:1px solid #b8c7ba;border-radius:12px}

/* Dialogs fit the visual viewport, including the space left above an iOS keyboard. */
.pop-mask { top:var(--modal-top,0px); left:var(--modal-left,0px); right:auto; bottom:auto; width:var(--modal-width,100vw); height:var(--modal-height,100dvh); padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left)); }
.pop-mask > :first-child { min-width:0; max-width:100%; max-height:100%; }
.settings-mask > .settings { --accent:#007aff; width:var(--dialog-w)!important; max-width:100%; height:auto; max-height:min(86dvh,822px); min-height:0; display:flex; flex-direction:column; padding:0; overflow:hidden; border-radius:var(--dialog-radius); }
.app.dark .settings-mask > .settings { --accent:#0a84ff; }
.settings-toolbar { display:flex; justify-content:center; align-items:center; flex:0 0 auto; min-height:52px; padding:8px 16px 2px; border:0; background:var(--bg-elev); color:var(--txt); font-size:var(--type-title); font-weight:600; text-align:center; }
.settings-body { min-height:0; flex:0 1 auto; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; padding:14px 18px 20px; scroll-padding:14px; }
.settings-body > * { min-width:0; max-width:100%; }
.settings-body .role-picker { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:8px; }
.settings-body .role-opt { min-width:0; }
.settings-body .set-row-text { min-width:0; flex:1; }
.settings-body .set-row-sub { overflow-wrap:anywhere; }
.settings-body .switch { flex-shrink:0; width:52px; height:32px; margin-left:0; }
.settings-body .switch-knob { width:28px; height:28px; margin:2px; }
.settings-body .switch.on .switch-knob { transform:translateX(20px); }
.settings-body .seg-item,.settings-body .theme-btn { min-width:44px; min-height:48px; white-space:nowrap; font-size:var(--type-action); }
.settings-body .seg-item { padding:8px 0; }
.settings-body .set-row2 { display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1.15fr); gap:12px; align-items:stretch; }
.settings-body .set-col-font,.settings-body .set-col-theme { width:100%; min-width:0; }
.settings-body .seg { gap:6px; padding:4px; }
.settings-body .theme-btn { width:100%; gap:8px; overflow:hidden; }
.settings-body .theme-btn .seg-ic { width:18px; height:18px; }
.settings-body .fz-s { font-size:14px; }.settings-body .fz-m { font-size:18px; }.settings-body .fz-l { font-size:22px; }
.settings-body .settings-header { padding:2px 0 6px; }
.settings-body .settings-logo { width:calc(112 * var(--rpx)); height:calc(112 * var(--rpx)); box-shadow:none; }
.settings-body .role-picker { margin:8px 0; }
.settings-body .role-opt { min-height:72px; gap:7px; }
.settings-body .role-picker.top .role-opt-av { width:calc(84 * var(--rpx)); height:calc(84 * var(--rpx)); }
.settings-body .role-opt span,.settings-body .role-picker.top .role-opt span { font-size:var(--type-secondary); white-space:nowrap; }
.settings-body .app-ver,.settings-body .set-label,.settings-body .set-col .set-label { font-size:var(--type-secondary); }
.settings-body .set-label,.settings-body .set-col .set-label { margin:16px 0 8px; }
.settings-body .set-row { padding:14px 0; gap:12px; min-height:48px; }
.settings-body .set-row-title { font-size:var(--type-action); }.settings-body .set-row-sub { font-size:var(--type-secondary); line-height:1.5; }
.settings-body .set-title { font-size:var(--type-title); }.settings-body .set-sub { font-size:var(--type-action); }
.settings-body .set-divider { margin:20px 0 4px; gap:12px; }.settings-body .set-divider-t { font-size:var(--type-secondary); }
.settings-body .shared-entry { min-height:48px; padding:8px 14px; font-size:var(--type-action); white-space:nowrap; }
.settings-body .voice-seg { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:4px; min-height:0; padding:4px; overflow:visible!important; background:var(--bg); border-radius:var(--r-md); }
.settings-body .voice-item { width:100%; min-width:0; min-height:48px; padding:8px 2px; font-size:var(--type-action); border-radius:var(--r-sm); }
.settings-body .migrate-export-btn,.settings-body .dev-diag-run { min-height:48px; padding:12px; font-size:var(--type-action); white-space:nowrap; }
.settings-body .data-manage-card { padding:12px; margin-top:10px; }
.settings-body .data-manage-head { padding-bottom:12px; }.settings-body .data-manage-section { padding:14px 0; }
.settings-body .data-manage-title { font-size:var(--type-action); }.settings-body .data-manage-tag { font-size:var(--type-footnote); padding:3px 6px; }
.settings-body .data-manage-desc,.settings-body .data-manage-note { font-size:var(--type-secondary); }
.settings-body .data-action-list { gap:8px; margin-top:12px; }
.settings-body .data-action-row { min-height:56px; padding:10px; gap:10px; }
.settings-body .data-action-ic { width:28px; min-width:28px; max-width:28px; height:28px; min-height:28px; max-height:28px; flex:0 0 28px; border-radius:8px; }
.settings-body .data-action-glyph { width:18px; min-width:18px; max-width:18px; height:18px; min-height:18px; max-height:18px; }
.settings-body .data-action-title { font-size:var(--type-action); white-space:nowrap; }.settings-body .data-action-sub { font-size:var(--type-footnote); }
.settings-body .data-action-go { font-size:24px; }
.settings-body .dev-diag-head > :first-child { min-width:0; }
@media(max-width:600px) {
  .settings-mask { padding:max(12px,env(safe-area-inset-top)) 12px max(12px,env(safe-area-inset-bottom)); }
  .settings-mask > .settings { width:var(--dialog-w)!important; height:auto; max-width:100%; max-height:min(86dvh,822px,calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom))); border-radius:var(--dialog-radius); }
  .settings-toolbar { padding-inline:14px; }
  .settings-body { padding:14px 16px 18px; }
}
@media(max-width:360px) { .settings-body { padding-inline:14px; } }
.jenny-system-mask { top:var(--modal-top,0px)!important; left:var(--modal-left,0px)!important; right:auto!important; bottom:auto!important; width:var(--modal-width,100vw); height:var(--modal-height,100dvh); padding:12px; box-sizing:border-box; }
.jenny-system-mask .jenny-system-dialog { display:flex; flex-direction:column; max-height:100%; max-width:100%; }
.jenny-system-mask .jenny-system-body { min-height:0; overflow-y:auto; overscroll-behavior:contain; }
.jenny-system-mask .jenny-system-actions { flex-shrink:0; }
.jenny-system-mask .jenny-system-action { white-space:nowrap; color:#606069; font-size:14px; }
.jenny-system-mask .jenny-system-action.ok { color:#007aff; }
.jenny-system-mask .dark .jenny-system-action { color:#b3b3bc; }
.jenny-system-mask .dark .jenny-system-action.ok,.jenny-action-sheet.dark .jenny-action-item { color:#0a84ff; }

.trip-share-entry{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:calc(16 * var(--rpx)) 0 calc(26 * var(--rpx));padding:calc(22 * var(--rpx)) calc(26 * var(--rpx));border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));border-radius:var(--r-md);background:color-mix(in srgb,var(--accent) 5%,var(--bg-elev));font-size:calc(25 * var(--rpx));color:var(--accent);font-weight:600;cursor:pointer}.trip-share-entry> :last-child{font-size:calc(21 * var(--rpx));color:var(--sub);font-weight:400}.trip-share-entry.disabled{opacity:.55;pointer-events:none}.trip-share-entry:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* V62.11.2: scoped interaction fixes only.
   Do not override the application's established 750rpx mobile proportions. */
.title-control {
  min-height:max(44px,calc(64 * var(--rpx))); padding:0 calc(12 * var(--rpx));
  display:inline-flex; align-items:center; background:transparent; border:0;
}
.grp-entry,.grp-back,.hist-entry {
  width:max(44px,calc(56 * var(--rpx))); height:max(44px,calc(56 * var(--rpx)));
  min-width:44px; min-height:44px;
}
.tab { min-height:44px; }
.ui-icon-button,
.trip-share-close,
.h-raise-close {
  width:max(44px,calc(64 * var(--rpx))); height:max(44px,calc(64 * var(--rpx)));
  min-width:max(44px,calc(64 * var(--rpx))); min-height:max(44px,calc(64 * var(--rpx)));
  padding:0; display:grid; place-items:center; flex:0 0 auto;
  border:0; border-radius:50%; background:var(--fill); color:var(--sub);
  font-size:calc(36 * var(--rpx)); line-height:1;
}
.pny-img-x {
  width:max(44px,calc(64 * var(--rpx))); height:max(44px,calc(64 * var(--rpx)));
  min-width:max(44px,calc(64 * var(--rpx))); min-height:max(44px,calc(64 * var(--rpx)));
  display:grid; place-items:center; line-height:1;
}
.grp-sis {
  min-height:calc(104 * var(--rpx)); padding:calc(12 * var(--rpx)) 0;
  background:transparent; border:0;
}
.grp-sis.on { background:transparent; }
.grp-at-opt,.grp-at-opt.on { background:transparent; border:0; }
.app-ver,.splash-ver { background:transparent; border:0; }

/* Short landscape keeps the same compact dialog and gives its body a scroll area. */
@media(max-height:600px) {
  .settings-mask { padding:8px max(8px,env(safe-area-inset-right)) 8px max(8px,env(safe-area-inset-left)); }
  .settings-mask > .settings { height:auto; max-height:calc(100dvh - 16px); border-radius:var(--dialog-radius); }
}

/* V63 — restrained materials. Geometry remains owned by the established shell.
   No filter/transform on app, topbar or log: fixed dialogs keep viewport anchoring. */
.app {
  --sub: #636570;
  --muted: #70727d;
  --me-bg: #0067df;
  --ai-bg: #ffffff;
  --surface-edge: rgba(34, 48, 72, .085);
  --surface-shadow: 0 3px 14px rgba(28, 40, 65, .035);
  --control-fill: #0067df;
  --material: rgba(255,255,255,.96);
  --material-highlight: rgba(255,255,255,.9);
  --focus-ring: #005cc8;
}
.app.dark {
  --sub: #b1b1bc;
  --muted: #a0a0ad;
  --me-bg: #0067df;
  --ai-bg: #242428;
  --surface-edge: rgba(255,255,255,.10);
  --surface-shadow: 0 3px 14px rgba(0,0,0,.16);
  --control-fill: #0067df;
  --material: rgba(30,30,34,.97);
  --material-highlight: rgba(255,255,255,.10);
  --focus-ring: #91c4ff;
}
.header.glass { background: var(--bg); }
.title { font-weight: 650; letter-spacing: -.025em; }
.tabbar.glass {
  background: var(--material);
  border-color: var(--surface-edge);
  box-shadow: 0 4px 18px rgba(20,30,50,.06), inset 0 1px 0 var(--material-highlight);
}
.tabbar::before { background: linear-gradient(180deg,var(--material-highlight),transparent); }
.tab { color: var(--sub); transition: color .18s ease, background-color .18s ease; }
.tab.on {
  background: var(--bg-elev);
  font-weight: 650;
  box-shadow: 0 2px 6px rgba(20,30,50,.09), inset 0 0 0 .5px var(--surface-edge);
}
.bubble.ai { box-shadow: var(--surface-shadow), inset 0 0 0 .5px var(--surface-edge); }
.bubble.me { background: var(--me-bg); box-shadow: 0 3px 10px rgba(0,70,170,.12); }
.ai-name { color: var(--sub); font-weight: 550; }
.footer-wrap {
  background: var(--material);
  border-top-color: var(--surface-edge);
  box-shadow: 0 -4px 20px rgba(20,30,50,.025);
}
.typed { background: var(--bg-elev); border-color: var(--surface-edge); box-shadow: inset 0 1px 3px rgba(20,30,50,.025); }
.typed:focus { border-color: var(--accent); }
.send-btn { background: var(--control-fill); box-shadow: inset 0 1px 0 rgba(255,255,255,.16), 0 3px 8px rgba(0,70,170,.13); }
.pny-card, .kb-item, .mem-shared, .trip-item {
  border-color: var(--surface-edge);
  box-shadow: var(--surface-shadow);
}
.vcard, .mem-summary, .mem-trip { box-shadow: var(--surface-shadow); }
.trip-item { border-radius: var(--r-lg); }
.pny-card, .kb-item { border-radius: var(--r-xl); }
.pny-card-t, .kb-item-t { font-weight: 650; letter-spacing: -.015em; }
.pny-hero-net { font-weight: 650; letter-spacing: -.045em; font-variant-numeric: tabular-nums; }
.net-tabs { background: var(--fill); border-color: transparent; box-shadow: inset 0 1px 2px rgba(20,30,50,.035); }
.net-tab.on { background: var(--bg-elev); color: var(--txt); box-shadow: 0 2px 5px rgba(20,30,50,.09); }
.pop, .splash-card {
  box-shadow: 0 24px 80px rgba(0,0,0,.20), inset 0 0 0 .5px var(--surface-edge);
}
.pop-mask { background: rgba(12,18,30,.38); }
.settings-toolbar { letter-spacing: -.025em; }
.settings-body .seg, .settings-body .voice-seg { background: var(--fill); }
.settings-body .seg-item.on, .settings-body .voice-item.on {
  box-shadow: 0 2px 6px rgba(20,30,50,.09), inset 0 0 0 .5px var(--surface-edge);
}
.settings-body .set-label { color: var(--sub); font-weight: 550; }
.pin-field { background: var(--bg); border-color: var(--surface-edge); }
.pin-btn { background: var(--control-fill); }
/* Small colored text needs stronger contrast than large system-blue controls. */
.app .tab.on { color: #005ecb; }
.app .tab.on .tab-ic { background: #005ecb; }
.app.dark .tab.on { color: #80b8ff; }
.app.dark .tab.on .tab-ic { background: #80b8ff; }
.pny-hero-chg.up { color: var(--positive); background: var(--positive-fill); }
.app.dark .pny-hero-chg.up { color: var(--positive); background: var(--positive-fill); }
.vlang-item, .comp-seg-i, .kb-chip, .trend-seg-i, .ext-target, .ext-trip-chip, .ext-acct, .ask-opt {
  transition-property: color, background-color, border-color;
}
/* Brief feedback only on actions; no scale changes to scrollable lists or canvases. */
.send-btn, .pin-btn, .hist-entry, .grp-entry, .title-control { transition: opacity .15s ease; }
.send-btn:active, .pin-btn:active, .hist-entry:active, .grp-entry:active, .title-control:active { opacity: .7; }
.app :is(button, input, textarea, [role="button"], [tabindex]):focus-visible {
  outline: 2px solid var(--focus-ring); outline-offset: 3px;
}
/* Opaque by default. Only navigation gets optical blur, with no animated filters.
   Keep the user's existing glass slider; footer stays opaque to avoid nested blur. */
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .tabbar.glass {
    background: rgba(var(--glass-rgb), var(--glass-a));
    -webkit-backdrop-filter: blur(18px) saturate(125%);
    backdrop-filter: blur(18px) saturate(125%);
  }
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
  .tabbar.glass, .footer-wrap {
    background: var(--bg-elev);
    -webkit-backdrop-filter: none; backdrop-filter: none;
  }
  .tabbar::before { display: none; }
  .splash-mask { background: var(--bg); -webkit-backdrop-filter: none; backdrop-filter: none; }
  .trip-share-sheet { background: var(--bg-elev); -webkit-backdrop-filter: none; backdrop-filter: none; }
}
@media (prefers-contrast: more) {
  .app { --sub: #393b44; --muted: #494b54; --surface-edge: #70727d; }
  .app.dark { --sub: #ededf2; --muted: #d4d4df; --surface-edge: #a0a0ad; }
  .tab.on { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
}
@media (prefers-reduced-motion: reduce) {
  .app *, .app *::before, .app *::after {
    animation: none !important; transition: none !important; scroll-behavior: auto !important;
  }
}

/* V63.2: modal surfaces. Keep viewport positioning and each dialog's business layout intact. */
.app {
  --positive:#187541; --positive-fill:#e7f3eb;
  --negative:#bf302b; --negative-fill:#fbecea;
  --action-radius:14px; --action-font:clamp(14px,calc(28 * var(--rpx)),17px);
  --action-weight:600; --action-height:46px;
  --dialog-radius: 26px;
  --dialog-pad: clamp(18px, 5vw, 24px);
  --dialog-action-h: clamp(46px, calc(88 * var(--rpx)), 54px);
  --modal-canvas: #f4f5f8;
  --modal-card: #fff;
  --modal-edge: rgba(38,48,68,.08);
  --modal-shadow: 0 24px 72px rgba(15,23,42,.20), 0 4px 16px rgba(15,23,42,.06);
}
.app.dark {
  --positive:#79d9a0; --positive-fill:#163225;
  --negative:#ff9a90; --negative-fill:#3d2325;
  --modal-canvas: #1c1d22;
  --modal-card: #292a30;
  --modal-edge: rgba(255,255,255,.085);
  --modal-shadow: 0 24px 72px rgba(0,0,0,.5), 0 0 0 .5px rgba(255,255,255,.08);
}
.pop-mask, .copy-fb-mask, .bmenu-mask { background:rgba(14,20,32,.32); }
.pop, .mem-edit, .kcoin-edit-pop, .chat-hist, .shared-mgr, .backup-restore-sheet, .copy-fb-card, .bmenu-sheet, .trip-share-sheet {
  border-radius:var(--dialog-radius);
  border:.5px solid var(--modal-edge);
  background:var(--modal-card);
  box-shadow:var(--modal-shadow), inset 0 1px 0 var(--material-highlight);
  overscroll-behavior:contain;
}
.pop-title, .mem-edit-title, .kcoin-edit-title, .shared-mgr-title, .chat-hist-title { font-weight:650; letter-spacing:-.025em; line-height:1.4; }
.pop-sub, .mem-edit-sub, .kcoin-edit-sub { line-height:1.6; }
.pop-btns, .mem-edit-btns, .kcoin-edit-btns, .shared-mgr-btns { gap:10px; margin-top:22px; }
.pop-btn, .mem-edit-btn, .kcoin-edit-btn { min-height:var(--dialog-action-h); border-radius:14px; line-height:1.35; padding:10px 12px; }
.pop-btn.cancel, .mem-edit-btn.cancel, .kcoin-edit-btn.cancel { background:var(--fill); color:var(--txt); border:0; }
.pop-btn.save, .mem-edit-btn.save, .kcoin-edit-btn.save { background:var(--control-fill); color:#fff; box-shadow:inset 0 1px 0 rgba(255,255,255,.16); }
.pop-btn.danger, .pop-btn.del { background:color-mix(in srgb,var(--danger) 10%,var(--modal-card)); color:var(--danger); }
.pop .pny-input, .mem-edit .pny-input, .backup-restore-sheet .pny-input, .mem-edit-ta {
  border-radius:14px; background:var(--modal-canvas); border:1px solid transparent; box-shadow:none;
  min-height:46px; font-size:max(16px,var(--type-body)); line-height:1.5;
}
.pop input:focus, .pop textarea:focus, .mem-edit-ta:focus, .backup-restore-sheet .pny-input:focus { border-color:var(--accent); outline:2px solid color-mix(in srgb,var(--accent) 16%,transparent); outline-offset:1px; }
.pop .pny-type, .pop .trip-type { border-radius:10px; min-height:40px; display:flex; align-items:center; justify-content:center; }
.pop .model-row { border-radius:14px; margin-bottom:6px; }
.pop .model-row.on { background:color-mix(in srgb,var(--accent) 9%,var(--modal-card)); }
.pop-btn:active, .mem-edit-btn:active, .kcoin-edit-btn:active { opacity:.7; }
.bmenu-sheet { padding:8px; }
.bmenu-item, .bmenu-cancel { min-height:48px; border-radius:12px; }
.bmenu-cancel { background:var(--fill); }
.trip-share-close { min-width:44px; min-height:44px; flex-basis:44px; }
/* System dialogs live outside .app; explicitly supply both palettes. */
.jenny-system-mask .jenny-system-dialog { border-radius:24px; background:#fff; box-shadow:0 24px 72px rgba(15,23,42,.24); border:.5px solid rgba(38,48,68,.08); }
.jenny-system-mask .jenny-system-dialog.dark { background:#292a30; border-color:rgba(255,255,255,.09); }
.jenny-system-mask .jenny-system-body { padding:24px 22px 20px; }
.jenny-system-mask .jenny-system-actions { border:0; padding:0 12px 12px; gap:8px; }
.jenny-system-mask .jenny-system-action { min-height:46px; border:0; border-radius:13px; background:#f0f1f5; color:#343640; white-space:normal; text-align:center; }
.jenny-system-mask .dark .jenny-system-action { background:#393a42; color:#eeeef2; }
.jenny-system-mask .jenny-system-action.ok { background:#0067df; color:#fff; }
.jenny-system-mask .dark .jenny-system-action.ok { color:#fff; }
.jenny-action-mask .jenny-action-sheet { margin:0 10px max(10px,env(safe-area-inset-bottom)); border-radius:24px; padding:8px; }
.jenny-action-sheet .jenny-action-item { min-height:50px; border-radius:13px; }

@media (prefers-contrast:more) {
  .pop, .mem-edit, .shared-mgr, .settings-mask > .settings { border:1px solid var(--sub); }
}

.pop .pny-input.amt { font-size:max(24px,calc(44 * var(--rpx))); font-weight:650; }
.backup-restore-actions .pny-btn { min-height:46px; border-radius:14px; line-height:1.4; }
.backup-restore-actions .pny-btn.primary { background:var(--control-fill); color:#fff; }

/* Shared semantic change colors: total, account rows, chart tooltip and amount history. */
.pny-hero-chg.up, .trend-pop-g.up, .acc-cell-chg.up, .amt-rec-row .arc-d.up, .amt-rec-row .arc-p.up { color:var(--positive); }
.pny-hero-chg.down, .trend-pop-g.down, .acc-cell-chg.down, .amt-rec-row .arc-d.down, .amt-rec-row .arc-p.down { color:var(--negative); }
.pny-hero-chg.up, .app.dark .pny-hero-chg.up { background:var(--positive-fill); }
.pny-hero-chg.down { background:var(--negative-fill); }
/* One text-action spec; icon buttons and segmented choices have their own consistent geometry. */
.app :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.send-btn,.pin-btn,.mem-tidy-btn,.kb-noresult-btn,.migrate-export-btn,.dev-diag-run,.grp-exit-btn,.grp-sis-model-btn,.copy-fb-all,.copy-fb-close,.h-result-btn,.gd-result-btn,.h-quick-btn,.h-btn,.hs-act-btn,.gd-act-btn) {
  border-radius:var(--action-radius); font-size:var(--action-font); font-weight:var(--action-weight); line-height:1.35; letter-spacing:0;
}
.app :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.pin-btn,.mem-tidy-btn,.kb-noresult-btn,.migrate-export-btn,.dev-diag-run,.grp-exit-btn,.copy-fb-all,.copy-fb-close) { min-height:var(--action-height); }
.app :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.send-btn,.pin-btn,.mem-tidy-btn,.kb-noresult-btn,.migrate-export-btn,.dev-diag-run,.grp-exit-btn,.grp-sis-model-btn,.copy-fb-all,.copy-fb-close):active { opacity:.72; transform:none; }
.app :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.send-btn,.pin-btn,.mem-tidy-btn,.migrate-export-btn,.dev-diag-run).disabled { opacity:.42; cursor:default; }
.kcoin-edit-btn.confirm { background:var(--control-fill); color:#fff; }

.app :is(.hs-btn,.gd-btn) { border-radius:var(--action-radius); font-size:var(--action-font); letter-spacing:0; }
.app .gd-btn-t { font-size:var(--action-font); font-weight:600; letter-spacing:0; }

.jenny-system-action,.jenny-action-item { font-family:inherit; appearance:none; -webkit-appearance:none; cursor:pointer; }
.jenny-action-sheet .jenny-action-item { width:100%; background:transparent; border:0; border-top:.5px solid rgba(128,128,128,.24); }
.jenny-action-sheet .jenny-action-cancel { background:#f0f1f5; border:0; }
.jenny-system-action:focus-visible,.jenny-action-item:focus-visible { outline:2px solid #80b8ff; outline-offset:-3px; }

.app :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.mem-tidy-btn,.kb-noresult-btn,.migrate-export-btn,.dev-diag-run,.grp-exit-btn,.copy-fb-all,.copy-fb-close) {
  height:auto; min-height:var(--action-height); padding:12px 16px;
}

/* Keep the original settings content and proportions; enlarge only its container. */
.settings-mask > .settings { width:min(680px,100%)!important; max-height:min(92dvh,900px,100%); }

/* Wedding entry, below Kenny's four games. */
.kgc-wedding{display:flex;align-items:center;gap:15px;margin-top:20px;padding:22px 20px;border-radius:22px;background:var(--bg-elev);border:1px solid var(--surface-edge);cursor:pointer;color:var(--txt)}.kgc-wedding-symbol{font-size:32px;color:#a46e75}.kgc-wedding-copy{display:flex;flex:1;flex-direction:column;gap:4px;min-width:0}.kgc-wedding-title{font-size:18px;font-weight:600}.kgc-wedding-sub{font-size:12px;color:var(--sub)}.kgc-wedding:focus-visible{outline:3px solid #ac5659;outline-offset:3px}

/* V63.2.6: readable dark surfaces and separate text accents from filled controls. */
.app.dark { --accent:#80b8ff; --accent-fill:var(--control-fill); --danger:#ff9a90; }
.app.dark .settings-mask > .settings { --accent:#80b8ff; }
.app.dark .role-opt { opacity:1; }
.app.dark .app-ver { opacity:1; color:var(--sub); }
.app.dark .kgc-wedding-symbol { color:#e3a8b1; }
/* Filled controls use --accent-fill; text and icons use --accent. */
.app.dark :is(.trip-card.on,.set-switch,.ext-new-toggle.on .ext-new-check,.trip-mic) { background:var(--control-fill); }
.app.dark .data-action-row.primary .data-action-sub { color:#fff; }
.app.dark :is(.mic-btn.rec,.mic-btn.cancel-armed) { background:#b42318; color:#fff; }
.app.dark .hs-act-btn.fold { background:#a62722; color:#fff; }
.app.dark .hs-act-btn.check { background:#50505a; color:#fff; }
.app.dark .hs-act-btn.call { background:#176436; color:#fff; }
.app.dark .hs-act-btn.raise { background:#875006; color:#fff; }
.app.dark .jenny-action-cancel { background:var(--fill); color:var(--txt); }
.jenny-action-sheet.dark .jenny-action-cancel { background:#393a42; color:#eeeef2; }
.app.dark :is(.data-manage-tag.working,.trip-edit-preview-warn,.ai-trip-warnings) { color:#f4c078; }
.app.dark :is(.data-manage-tag.success,.ai-trip-valid,.trip-edit-preview-row.add .trip-edit-preview-badge) { color:var(--positive); }
.app.dark :is(.data-manage-tag.failed,.ai-trip-error) { color:var(--negative); }
.app.dark .trip-edit-preview-row.move .trip-edit-preview-badge { color:#dbb2f6; }

.app.dark { color:var(--txt); }
.app.dark .session-summary-row > span { color:var(--txt); }
.app.dark .pop-save { background:#176436; color:#fff; }
.app.dark :is(.switch.on,.diag-switch.on) { background:var(--control-fill); }
.app.dark input::placeholder,.app.dark textarea::placeholder { color:var(--sub); opacity:1; }

/* V63.2.7: pending/disabled controls remain readable; state is conveyed by label and fill. */
.app.dark {
  --disabled-fill:#35353d;
  --disabled-text:#c2c2cd;
  --control-pressed:#0056bb;
}
.app.dark :is(.data-action-row.disabled,.dev-diag-run.busy,.pop-btn.disabled,.mem-edit-btn.disabled,.kcoin-edit-btn.disabled,.pny-btn.disabled,.send-btn.disabled,.pin-btn.disabled,.pin-btn.busy,.mem-tidy-btn.disabled,.mem-tidy-btn.busy,.migrate-export-btn.disabled,.dev-diag-run.disabled,.pny-img-send.busy,.mic-btn.busy) {
  opacity:1; background:var(--disabled-fill); color:var(--disabled-text); box-shadow:none; cursor:default;
}
.app.dark .data-action-row.disabled :is(.data-action-title,.data-action-sub,.data-action-go) { color:var(--disabled-text); }
.app.dark :is(.trip-share-entry.disabled,.insight-icon-btn.disabled) { opacity:1; color:var(--disabled-text); background:var(--disabled-fill); }
.app.dark :is(.pop-btn,.mem-edit-btn,.kcoin-edit-btn,.pny-btn,.send-btn,.pin-btn,.mem-tidy-btn,.kb-noresult-btn,.migrate-export-btn,.dev-diag-run,.grp-exit-btn,.grp-sis-model-btn,.copy-fb-all,.copy-fb-close,.chat-hist-new,.hist-page-new,.ai-trip-copy,.voice-item,.grp-sec-row,.bmenu-cancel,.bsel-close,.gd-session-end):active { opacity:1; }
.app.dark .data-action-row.primary:active:not(.disabled) { background:var(--control-pressed); }
.app.dark .dev-diag-run:active:not(.busy) { background:var(--control-pressed); }
.app.dark .migrate-export-btn.clear-cache { color:var(--sub); border-color:#6c6c78; background:var(--bg-elev); }
.app.dark .migrate-export-btn.clear-cache:active { background:var(--fill); color:var(--txt); }
/* External SVGs use fixed blue strokes: lift the icon ink, without changing white shield/cloud icons. */
.app.dark .data-action-row:not(.primary) .data-action-glyph { filter:brightness(1.55) saturate(.72); }
.app.dark .dev-diag-dot.ok { background:var(--positive); }
.app.dark .dev-diag-dot.fail { background:var(--negative); }
.app.dark .dev-diag-dot.run { background:var(--accent); }
.app.dark .model-price.tier-cheap { color:var(--positive); }
.app.dark .model-price.tier-mid { color:#f4c078; }
.app.dark .model-price.tier-pricey { color:var(--negative); }

/* V63.2.8: infinite opacity animations must not dim instructions or pending labels. */
.app.dark .mic-btn.busy,.app.dark .gd-tribute-tip { animation:none; opacity:1; }

/* Offline access: use existing colours and keep the PIN explanation within narrow screens. */
.pin-hint { text-align: center; line-height: 1.6; opacity: 1; }
.offline-unlock { color: var(--txt); padding: 12px; text-decoration: underline; cursor: pointer; }
.offline-login { color: #fff; text-decoration: underline; padding: 8px; cursor: pointer; }
.offline-bar { max-width: calc(100vw - 24px); box-sizing: border-box; white-space: normal; }

/* In normal flow so the status never covers navigation or chat controls. */
.offline-bar { position: static; transform: none; align-self: center; flex: none; margin: 0 12px 8px; background: #303238; color: #fff; animation: none; }

.offline-settings { color: var(--txt); background: var(--fill); border-radius: 12px; padding: 12px; margin: 8px 0 16px; font-size: 14px; line-height: 1.5; text-align: center; cursor: pointer; }

/* Kenny 文娱: every module gets the same card footprint, including wedding. */
.leisure-heading { display:flex; align-items:center; justify-content:space-between; padding:8px 2px 18px; }
.leisure-heading-copy { display:flex; flex-direction:column; gap:9px; }
.leisure-eyebrow { color:var(--sub); font-size:10px; letter-spacing:1.5px; }
.leisure-title { color:var(--txt); font-size:30px; font-weight:650; letter-spacing:-1px; }
.leisure-mark { width:40px; height:40px; opacity:.7; }
.leisure-section { display:flex; flex-direction:column; gap:5px; margin:22px 2px 12px; color:var(--txt); font-size:17px; font-weight:600; }
.leisure-section-sub { color:var(--sub); font-size:11px; font-weight:400; }
.leisure-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.app .leisure-card { position:relative; display:flex; flex-direction:column; align-items:stretch; margin:0; padding:0; min-width:0; gap:0; border:1px solid var(--surface-edge); border-radius:18px; background:var(--bg-elev); color:var(--txt); overflow:hidden; cursor:pointer; }
.leisure-card:focus-visible { outline:3px solid var(--accent); outline-offset:2px; }
.leisure-art { height:90px; flex:none; position:relative; display:grid; place-items:center; overflow:hidden; background:var(--leisure-bg,#e7eee6); color:var(--leisure-ink,#35523d); }
.leisure-icon { display:block; width:48px; height:48px; position:relative; z-index:1; }
.leisure-orbit { position:absolute; width:110px; height:110px; right:-20px; top:12px; border:1px solid currentColor; border-radius:50%; opacity:.17; }
.leisure-orbit:after { content:''; position:absolute; inset:16px; border:1px solid currentColor; border-radius:50%; }
.leisure-oracle { --leisure-bg:#ede4d3; --leisure-ink:#77553b; }
.leisure-wedding { --leisure-bg:#f2e2e1; --leisure-ink:#975762; }
.leisure-board { --leisure-bg:#e5e9dc; --leisure-ink:#364b34; }
.leisure-tic { --leisure-bg:#e6e4f2; --leisure-ink:#625a91; }
.leisure-connect { --leisure-bg:#e0eaf2; --leisure-ink:#365f7b; }
.leisure-poker { --leisure-bg:#e4e7ec; --leisure-ink:#36455e; }
.leisure-cards { --leisure-bg:#f1e1db; --leisure-ink:#a45641; }
.leisure-puzzle { --leisure-bg:#e2eee8; --leisure-ink:#39735b; }
.leisure-arcade { --leisure-bg:#e0e6ed; --leisure-ink:#395372; }
.leisure-copy { display:flex; flex-direction:column; padding:14px; flex:1; }
.leisure-tag { font-size:10px; color:var(--sub); margin-bottom:6px; }
.leisure-name { font-size:18px; font-weight:650; color:var(--txt); line-height:1.4; }
.leisure-sub { font-size:10px; color:var(--sub); margin-top:6px; min-height:30px; line-height:1.5; }
.leisure-link { display:flex; justify-content:space-between; align-items:center; border-top:1px solid var(--surface-edge); margin-top:10px; padding-top:10px; color:var(--txt); font-size:12px; }
.app.dark .leisure-art { background:color-mix(in srgb,var(--leisure-ink) 30%,#202124); color:var(--leisure-bg); }
.leisure-shell { position:fixed; inset:0; z-index:10020; background:var(--bg); }
.leisure-shell iframe { width:100%; height:100%; border:0; display:block; }
.leisure-loading { position:absolute; inset:0; z-index:2; background:var(--bg); color:var(--txt); display:flex; flex-direction:column; justify-content:center; align-items:center; gap:18px; }
.leisure-loading [role=button] { padding:14px 22px; border-radius:12px; background:var(--fill); }


/* Vector UI icons retain the same geometry on every platform. */
.leisure-arrow { width:14px; height:14px; }
.ui-line-icon { display:inline-block; width:24px; height:24px; }
.fw-star .ui-line-icon { width:48px; height:48px; }
.app.dark .leisure-icon,.app.dark .leisure-mark,.app.dark .leisure-arrow,.app.dark .ui-line-icon { filter:brightness(0) invert(.82); }

/* One clipped portrait component for chat, role picker and group members. */
.portrait-frame { overflow:hidden; position:relative; display:block; }
.portrait-frame .portrait-image { display:block; width:100%; height:100%; object-fit:cover; object-position:center; transform:scale(var(--portrait-scale,1.06)); transform-origin:var(--portrait-origin,50% 50%); }
.portrait-image[src*="kenny"] { --portrait-scale:1.17; --portrait-origin:50% 58%; }
.portrait-image[src*="lenny"] { --portrait-scale:1.12; --portrait-origin:44% 50%; }
.portrait-image[src*="penny"] { --portrait-scale:1.08; }
.portrait-image[src*="/enny."] { --portrait-scale:1.02; }

/* Shared peer-action metrics. Destructive intent changes color, never geometry. */
:root { --ui-action-height:44px; --ui-action-radius:12px; --ui-action-font:15px; --ui-action-padding:12px; }
.ui-action,.app .trip-day-add,.app .trip-day-del {
  box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center;
  min-height:var(--ui-action-height); min-width:44px; padding:8px var(--ui-action-padding);
  border:1px solid transparent; border-radius:var(--ui-action-radius); font:600 var(--ui-action-font)/1.4 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; white-space:nowrap;
}
.app .trip-day-add,.app .trip-day-del { flex:0 0 72px; width:72px; margin-top:0; margin-bottom:0; }
.app .trip-day-add { background:color-mix(in srgb,var(--accent) 9%,transparent); color:var(--accent); }
.app .trip-day-del { background:color-mix(in srgb,#e5484d 9%,transparent); color:#e5484d; }
.app .trip-day-head { flex-wrap:wrap; }
.app :is(.pop-btns,.mem-edit-btns,.shared-mgr-btns,.backup-restore-actions,.copy-fb-actions,.kcoin-edit-btns,.trip-share-actions,.pny-actions) > :is(.pny-btn,.mem-edit-btn,.copy-fb-btn,.kcoin-edit-btn) {
  box-sizing:border-box; min-height:var(--ui-action-height); border-radius:var(--ui-action-radius); font-size:var(--ui-action-font); line-height:1.4; padding:10px 12px; display:flex; align-items:center; justify-content:center;
}

/* V63.4 shared shell: five roles, three pages, one reading and control scale.
   Board/chart geometry retains its existing rpx basis. */
.app {
  --type-caption:13px; --type-footnote:13px; --type-secondary:14px;
  --type-body:16px; --type-action:15px; --type-title:20px; --type-display:28px;
  --r-sm:10px; --r-md:12px; --r-lg:16px; --r-xl:20px;
  --action-height:48px; --action-radius:12px; --action-font:15px;
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
.app .header.glass { background:var(--bg); padding-bottom:4px; }
.app .nav-row { min-height:48px!important; max-width:860px; margin:auto; }
.app .title { font-size:19px; line-height:1.3; letter-spacing:-.3px; }
.app .tabbar { width:calc(100% - 32px); max-width:648px; margin:8px auto 10px; padding:4px; }
.app .tab { min-height:44px; padding:8px 4px; font-size:15px; gap:7px; }
.app .tab-ic { width:19px; height:19px; flex:none; }
.app > .log:not(.log-game) { width:min(100%,860px); margin-inline:auto; padding:16px 16px max(24px,env(safe-area-inset-bottom)); }
.app[data-page="chat"] > .log { max-width:800px; }
.app :is(.ai-row,.me-row) { margin-bottom:20px; }
.app .ai-avatar { width:36px; height:36px; margin:23px 10px 0 0; box-shadow:none; }
.app .ai-name { font-size:13px; line-height:18px; margin:0 0 5px 4px; }
.app .bubble { max-width:92%; padding:12px 15px; border-radius:18px; line-height:1.7; box-shadow:none; }
.app .bubble.ai { border-bottom-left-radius:6px; background:var(--bg-elev); }
.app .bubble.me { border-bottom-right-radius:6px; }
.app .me-col { min-width:0; max-width:88%; }
.app .corr { border-radius:16px; padding:14px 16px; margin-bottom:20px; }
.app :is(.corr-note,.corr-native-txt,.need-info-tip) { font-size:14px; line-height:1.65; }
.app .ask-opts { gap:8px; }
.app .ask-opt { min-height:44px; padding:10px 14px; border-radius:12px; font-size:14px; }
.app .footer-wrap { width:min(100%,800px); margin-inline:auto; padding:10px 16px 0; border-radius:20px 20px 0 0; box-shadow:none; }
.app .footer-wrap .footer { gap:8px; padding:8px 0 max(10px,env(safe-area-inset-bottom)); }
.app .typed { min-width:0; min-height:48px; border-radius:14px; padding:12px 14px; font-size:16px; background:var(--bg-elev); }
.app .send-btn { display:flex; align-items:center; justify-content:center; min-height:48px; min-width:60px; padding:10px 14px; }
.app .mic-btn { min-height:44px; padding:10px 16px; border-radius:12px; font-size:14px; line-height:1.5; }
.app .pny-cam { width:44px; height:48px; flex:0 0 44px; }
.app :is(.empty,.kb-noresult) { padding:48px 20px; font-size:16px; line-height:1.7; text-align:center; }
.app .empty-ic { width:48px; height:48px; margin:0 auto 16px; color:var(--sub); }
.app .empty-title { font-size:20px; font-weight:600; margin-bottom:8px; }
.app :is(.empty-sub,.kb-noresult-sub) { font-size:14px; line-height:1.7; max-width:320px; margin:0 auto; }
.app :is(.vsearch,.kb-search) { min-height:48px; padding:8px 14px; border:0; border-radius:14px; background:var(--bg-elev); margin-bottom:16px; }
.app :is(.vsearch-input,.kb-search-input) { font-size:16px; min-height:32px; }
.app :is(.vlang-seg,.kb-seg) { min-height:44px; padding:4px; border-radius:14px; }
.app :is(.vlang-item,.kb-seg-i) { min-height:40px; display:flex; align-items:center; justify-content:center; font-size:14px; padding:8px 12px; }
.app :is(.vgroup-title,.mem-group-title,.acc-group-t) { font-size:14px; font-weight:600; margin:20px 2px 10px; color:var(--sub); }
.app :is(.vgrid,.acc-grid) { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.app :is(.vcard,.acc-cell) { min-width:0; padding:16px; border-radius:16px; box-shadow:none; border:1px solid var(--surface-edge); }
.app .vcard-word { font-size:20px; line-height:1.4; overflow-wrap:anywhere; }
.app :is(.vcard-ph,.vcard-pos,.acc-cell-date) { font-size:13px; line-height:1.5; }
.app :is(.vcard-mean,.acc-cell-name) { font-size:14px; line-height:1.6; }
.app .acc-cell-amt { font-size:24px; line-height:1.4; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.app .acc-cell-chg { font-size:13px; line-height:1.5; }
.app :is(.pny-card,.pny-hero,.kb-item,.vitem,.chat-hist-item) { border-radius:18px; padding:18px; margin-bottom:14px; background:var(--bg-elev); border:1px solid var(--surface-edge); box-shadow:none; }
.app :is(.pny-card-t,.kb-item-t,.chat-hist-name) { font-size:17px; font-weight:600; line-height:1.5; }
.app :is(.pny-card-sub,.kb-item-brief,.chat-hist-sub,.kb-foot) { font-size:14px; line-height:1.65; }
.app .pny-hero-net { font-size:36px; line-height:1.25; letter-spacing:-1px; font-variant-numeric:tabular-nums; }
.app .pny-actions { gap:10px; padding:8px 0; }
.app .kb-cats { gap:8px; margin-bottom:16px; }
.app .kb-chip { min-height:40px; font-size:14px; padding:9px 13px; }
.app .kb-banner { padding:18px; border-radius:18px; }
.app .kb-banner-t { font-size:18px; line-height:1.45; }
.app .kb-banner-d { font-size:14px; line-height:1.6; }
.app :is(.mem-fact,.mem-trip-title) { font-size:16px; line-height:1.75; }
.app .mem-acts { display:flex; gap:4px; justify-content:flex-end; margin:0 0 8px; }
.app :is(.vedit,.vdel,.mem-star) { display:inline-flex; align-items:center; justify-content:center; min-width:44px; min-height:44px; padding:6px 10px; font-size:14px; border-radius:10px; }
.app :is(.mem-add,.mem-trip-tidy,.hist-page-new) { min-height:48px; padding:12px 16px; font-size:15px; border-radius:14px; }
.app .chat-hist-meta { min-width:0; }
.app .chat-hist-name { overflow-wrap:anywhere; }
.app .chat-hist-del { width:44px; height:44px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:16px; }
.app .trip-hero { border-radius:20px; padding:22px 20px; box-shadow:none; }
.app .trip-hero-dest { font-size:30px; line-height:1.3; }
.app :is(.trip-hero-meta,.trip-hero-cost,.trip-hero-phase) { font-size:14px; line-height:1.7; }
.app :is(.trip-hero-edit,.trip-hero-archive,.trip-hero-undo) { min-height:44px; padding:10px 12px; font-size:14px; border-radius:12px; }
.app .trip-day { margin-top:20px; }
.app .trip-day-head { gap:8px; padding:8px 0 12px; }
.app .trip-item { border-radius:16px; padding:16px; background:var(--bg-elev); box-shadow:none; }
.app :is(.trip-item-title,.trip-day-title) { font-size:17px; line-height:1.5; }
.app :is(.trip-item-note,.trip-item-time,.trip-day-empty) { font-size:14px; line-height:1.65; }
@media(max-width:360px) {
 .app :is(.vcard,.acc-cell,.pny-card,.vitem,.kb-item) { padding:14px; }
 .app .acc-cell-amt { font-size:21px; }
 .app .footer-wrap { padding-inline:12px; }
 .app .send-btn { min-width:52px; padding-inline:10px; }
}
@media(prefers-reduced-motion:reduce) {
 .app :is(.log,.bubble,.tab,.vcard,.trip-card) { animation:none!important; transition:none!important; }
}
/* Keep financial chart controls on their own row on narrow screens. */
.app .pny-card-t { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
.app .trend-seg { display:flex; flex:0 0 100%; width:100%; padding:4px; margin:0; border-radius:12px; }
.app .trend-seg-i { flex:1; min-height:40px; display:flex; align-items:center; justify-content:center; padding:8px; font-size:14px; white-space:nowrap; }
.app .ai-insight-card { padding:18px; border-radius:18px; box-shadow:none; }
.app .ai-insight-title { font-size:17px; line-height:1.5; }
.app .ai-insight-text { font-size:16px; line-height:1.75; }
.app :is(.penny-summary-period,.penny-summary-note) { font-size:13px; line-height:1.65; }
.app .insight-icon-btn { min-width:44px; min-height:44px; }
.app .trip-mic { right:max(16px,calc((100vw - 828px)/2)); bottom:calc(24px + env(safe-area-inset-bottom)); width:52px; height:52px; }
.app .trip-mic-hint { right:max(16px,calc((100vw - 828px)/2)); bottom:calc(84px + env(safe-area-inset-bottom)); font-size:13px; }
.app[data-page="trips"] > .log { padding-bottom:100px; }

/* Penny: a calm financial overview, with distinct summary, chart and account layers. */
.app .penny-dashboard { --pny-tint:#e9f1fd; --pny-edge:#d6e3f7; }
.app.dark .penny-dashboard { --pny-tint:#1d2a3d; --pny-edge:#304661; }
.app .penny-dashboard .pny-hero { position:relative; overflow:hidden; text-align:left; padding:22px; border:1px solid var(--pny-edge); border-radius:22px; background:linear-gradient(145deg,var(--bg-elev) 25%,var(--pny-tint)); }
.app .pny-overview-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px; }
.app .pny-overview-label { font-size:14px; font-weight:600; letter-spacing:.5px; color:var(--sub); }
.app .penny-dashboard .pny-toggles { position:static; transform:none; gap:4px; }
.app .penny-dashboard :is(.pny-eye,.pny-grow) { width:44px; height:44px; padding:10px; background-size:22px; -webkit-mask-size:22px; mask-size:22px; }
.app .penny-dashboard .net-tabs-row { justify-content:flex-start; }
.app .penny-dashboard .net-tabs { display:flex; width:100%; padding:4px; border:1px solid var(--surface-edge); border-radius:12px; background:var(--fill); gap:4px; }
.app .penny-dashboard .net-tab { display:flex; align-items:center; justify-content:center; flex:1; min-height:40px; padding:8px 4px; font-size:14px; border-radius:9px; white-space:nowrap; }
.app .penny-dashboard .net-tab.on { background:var(--bg-elev); color:var(--txt); box-shadow:0 1px 4px #0000000a; }
.app .pny-amount-unit { margin-top:24px; font-size:12px; letter-spacing:1px; color:var(--sub); }
.app .penny-dashboard .pny-hero-net { font-size:clamp(32px,8.5vw,44px); font-weight:650; letter-spacing:-1.5px; margin:8px 0 10px; overflow-wrap:anywhere; }
.app .penny-dashboard .pny-hero-chg { max-width:100%; margin:0; padding:6px 10px; font-size:13px; line-height:1.5; white-space:normal; border-radius:8px; }
.app .pny-overview-foot { display:flex; align-items:center; gap:7px; margin-top:22px; padding-top:14px; border-top:1px solid var(--pny-edge); font-size:12px; line-height:1.5; color:var(--sub); }
.app .pny-status-dot { width:5px; height:5px; border-radius:50%; background:var(--accent); flex:none; }
.app .penny-dashboard .pny-card { padding:20px; border-radius:20px; margin-bottom:16px; }
.app .penny-dashboard .pny-card-t { gap:12px; margin-bottom:18px; letter-spacing:-.2px; }
.app .penny-dashboard .trend-seg { flex:1 0 100%; }
.app .penny-dashboard .pny-trend-wrap { margin-top:8px; }
.app .penny-dashboard .penny-insight { border:1px solid var(--pny-edge); background:var(--bg-elev); padding:18px 20px; margin-bottom:16px; }
.app .penny-dashboard .ai-insight-title { display:flex; align-items:center; gap:8px; }
.app .penny-dashboard .ai-insight-title:before { content:''; width:4px; height:16px; background:var(--accent); border-radius:4px; }
.app .penny-dashboard .penny-summary-period { margin:12px 0; }
.app .penny-dashboard .penny-summary-note { margin-top:14px; padding-top:12px; border-top:1px solid var(--line); }
.app .penny-dashboard .pny-comp { display:flex; flex-wrap:wrap; justify-content:center; gap:20px; }
.app .penny-dashboard .pny-legend { min-width:180px; gap:0; }
.app .penny-dashboard .pny-leg-row { padding:10px 0; border-bottom:1px solid var(--line); font-size:14px; gap:8px; }
.app .penny-dashboard .pny-leg-row:last-child { border-bottom:0; }
.app .penny-dashboard .pny-leg-dot { width:7px; height:7px; border-radius:50%; }
.app .penny-dashboard .pny-leg-val { font-weight:600; color:var(--txt); font-variant-numeric:tabular-nums; }
.app .penny-dashboard .pny-leg-pct { font-size:12px; }
.app .penny-dashboard .bucket-bar { height:12px; border-radius:6px; overflow:hidden; }
.app .penny-dashboard .bucket-legend { display:flex; flex-wrap:wrap; gap:12px; padding-top:14px; }
.app .penny-dashboard .bucket-leg { font-size:13px; }
.app .penny-dashboard .acc-cell { background:var(--bg); border:0; padding:16px; border-radius:14px; }
.app .penny-dashboard .acc-cell-date { color:var(--sub); font-size:12px; margin-bottom:10px; }
.app .penny-dashboard .acc-cell-name { color:var(--sub); font-size:14px; }
.app .penny-dashboard .acc-cell-amt { font-size:24px; font-weight:650; letter-spacing:-.6px; margin:5px 0; }
.app .penny-dashboard .acc-cell-chg { font-size:12px; }
@media(min-width:680px) { .app .penny-dashboard .trend-seg { flex:0 0 auto; width:auto; margin-left:auto; } .app .penny-dashboard .trend-seg-i { min-width:72px; } }
@media(max-width:360px) { .app .penny-dashboard :is(.pny-hero,.pny-card,.penny-insight) { padding:16px; } .app .penny-dashboard .acc-cell { padding:12px; } .app .penny-dashboard .acc-cell-amt { font-size:21px; } }
.app .vitem { display:flex; flex-direction:column; }
.app .vitem .mem-fact { order:0; }
.app .vitem .mem-acts { float:none; order:1; margin:12px 0 0; padding-top:10px; border-top:1px solid var(--line); }
.app .memory-star-icon { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.5; }
.app .mem-star.on .memory-star-icon { fill:currentColor; }
/* Header icons and chat text must not scale up with desktop viewport width. */
.app { --chat-rpx:clamp(.54px,var(--rpx),.68px); }
.app .header.glass { padding-top:8px!important; }
.app :is(.grp-entry,.grp-back,.hist-entry) { width:44px; height:44px; min-width:44px; min-height:44px; }
.app :is(.grp-entry,.grp-back) { left:8px; }
.app .hist-entry { right:8px; }
.app :is(.grp-ic,.hist-ic,.model-ic) { width:24px; height:24px; }
.app .title-tap { min-height:44px; padding:6px 12px; }

/* Penny uses the same section reader and typography as Kenny rules. */
.app > .penny-knowledge { max-width:680px; }
.app .penny-knowledge :is(.kb-item,.kb-banner) { border:0; border-radius:18px; background:var(--bg-elev); padding:18px; box-shadow:none; }
.app .penny-knowledge :is(.kb-item-t,.kb-banner-t) { font-size:20px; font-weight:600; line-height:1.5; }
.app .penny-knowledge :is(.kb-item-brief,.kb-banner-d) { font-size:16px; line-height:1.75; margin-top:8px; }
.app .penny-knowledge .kb-chip { border-radius:12px; min-height:44px; }
.app .penny-reader-mask { background:var(--bg); padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom); }
.app .penny-reader-mask .pop-kb { width:min(100%,680px); max-width:680px; height:100%; max-height:100%; border:0; border-radius:0; background:var(--bg); padding:0 16px 24px; overflow-y:auto; box-shadow:none; }
.app .penny-reader-nav { position:sticky; top:0; display:grid; grid-template-columns:1fr auto 1fr; align-items:center; min-height:60px; background:var(--bg); z-index:1; }
.app .penny-reader-nav>div { display:flex; align-items:center; gap:4px; min-height:44px; font-size:15px; }
.app .penny-reader-nav>span { font-size:17px; font-weight:600; }
.app .penny-reader-mask .pop-title { text-align:left; font-size:26px; padding:20px 2px; }
.app .penny-reader-mask .kb-body { background:var(--bg-elev); padding:18px; border-radius:18px; font-size:16px; line-height:1.8; white-space:pre-wrap; max-height:none; }
.app .penny-chart-heading { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:4px 2px 10px; font-size:17px; font-weight:600; }
.app .penny-flip-button { display:flex; align-items:center; gap:6px; min-height:44px; padding:8px 12px; border-radius:12px; color:var(--accent); background:var(--bg-elev); font-size:14px; }
.app .penny-flip-button svg { width:18px; height:18px; }
.app .penny-flip-stage { perspective:1400px; margin-bottom:16px; }
.app .penny-flipper { display:grid; transform-style:preserve-3d; transition:transform .65s cubic-bezier(.2,.75,.2,1); }
.app .penny-flipper.flipped { transform:rotateY(180deg); }
.app .penny-dashboard .penny-face { grid-area:1/1; width:100%; margin:0; min-width:0; backface-visibility:hidden; -webkit-backface-visibility:hidden; }
.app .penny-back { transform:rotateY(180deg); }
.app .penny-face[aria-hidden="true"] { pointer-events:none; visibility:hidden; transition:visibility 0s .325s; }
.app .penny-face[aria-hidden="false"] { visibility:visible; transition:visibility 0s; }
.app .trend-stats { display:grid; grid-template-columns:1fr 1fr auto; gap:8px; padding:14px 0; border-top:1px solid var(--line); }
.app .trend-stats>div { display:flex; flex-direction:column; gap:6px; min-width:0; }
.app .trend-stats span:first-child { font-size:12px; color:var(--sub); }
.app .trend-stats span:last-child { font-size:16px; font-weight:600; overflow-wrap:anywhere; font-variant-numeric:tabular-nums; }
.app .trend-view-picker { display:flex; align-items:center; gap:4px; margin-bottom:8px; }
.app .trend-view-picker>div { padding:8px 12px; min-height:44px; display:flex; align-items:center; font-size:14px; border-radius:10px; }
.app .trend-view-picker .on { background:var(--fill); color:var(--accent); }
.app .trend-view-picker>span { margin-left:auto; font-size:12px; color:var(--sub); }
.app .penny-summary-source { font-size:13px; line-height:1.6; color:var(--sub); margin-top:6px; }
.app .penny-ask { min-height:48px; display:flex; align-items:center; justify-content:center; margin-top:16px; padding:10px 14px; background:var(--control-fill); color:#fff; border-radius:12px; font-size:15px; font-weight:600; }
@media(prefers-reduced-motion:reduce) { .app .penny-flipper,.app .penny-face { transition:none!important; } }

/* Brief, compositor-friendly feedback; no permanent animation layers. */
.app { --motion-quick:140ms; --motion-page:220ms; --motion-ease:cubic-bezier(.2,.7,.2,1); }
.app :is(.pny-btn,.penny-ask,.penny-flip-button,.leisure-card,.vcard,.kb-item,.trip-item,.hist-page-new,.send-btn) { transition:transform var(--motion-quick) var(--motion-ease),opacity var(--motion-quick) ease; }
.app :is(.pny-btn,.penny-ask,.penny-flip-button,.leisure-card,.vcard,.kb-item,.trip-item,.hist-page-new,.send-btn):active { transform:scale(.98); opacity:.82; }
.app :is(.log.tab-sl,.log.tab-sr,.log.tab-fade) { animation:pageReveal var(--motion-page) var(--motion-ease); will-change:auto; }
.app :is(.pop,.mem-edit,.trip-share-sheet,.penny-reader-mask .pop-kb) { animation:panelReveal 200ms var(--motion-ease); }
.app .vcard.on { animation:cardReveal 180ms ease-out; }
@keyframes pageReveal { from { opacity:.45; transform:translateY(6px); } to { opacity:1; transform:translateY(0); } }
@keyframes panelReveal { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes cardReveal { from { opacity:.75; } to { opacity:1; } }
@media(hover:hover) and (pointer:fine) { .app :is(.leisure-card,.vcard,.kb-item,.penny-flip-button):hover { transform:translateY(-2px); } }
@media(prefers-reduced-motion:reduce) {
 .app *, .app *::before, .app *::after { animation:none!important; transition:none!important; scroll-behavior:auto!important; }
 .app :is(.pny-btn,.penny-ask,.penny-flip-button,.leisure-card,.vcard,.kb-item,.trip-item,.hist-page-new,.send-btn):is(:hover,:active) { transform:none; }
}
.app .assistant-ball { position:fixed; right:max(18px,calc((100vw - 828px)/2)); bottom:calc(22px + env(safe-area-inset-bottom)); z-index:60; width:52px; height:52px; display:flex; align-items:center; justify-content:center; border-radius:50%; color:var(--accent); background:var(--bg-elev); border:1px solid var(--line); box-shadow:0 4px 16px #00000014; transition:transform 140ms ease,background 140ms ease; }
.app .assistant-ball.above-composer { bottom:calc(146px + env(safe-area-inset-bottom)); }
.app .assistant-ball svg { width:28px; height:28px; }
.app .assistant-ball:active { transform:scale(.93); }
.app .assistant-ball.recording { color:#fff; background:var(--danger); }
.app .assistant-result { width:min(560px,calc(100vw - 32px)); }
.app .assistant-result-text { font-size:16px; line-height:1.8; white-space:pre-wrap; max-height:55dvh; overflow-y:auto; }
.app .assistant-source { font-size:13px; line-height:1.6; color:var(--sub); margin-top:16px; }
.app > .log:not(.log-game) { padding-bottom:90px; }
.app[data-page="chat"] > .log { padding-bottom:24px; }
@media(prefers-reduced-motion:reduce) { .app .assistant-ball:active { transform:none; } }

/* Both chart faces are a single fixed-size object; only their contents scroll. */
.app .penny-flipper { height:auto; }
.app .penny-dashboard .penny-face { height:auto; min-height:480px; max-height:none; overflow:visible; }
.app .penny-dashboard .penny-face .pny-card-t { flex-wrap:nowrap; justify-content:space-between; gap:8px; min-height:44px; margin-bottom:14px; }
.app .penny-dashboard :is(.trend-seg,.comp-seg) { display:inline-flex; flex:0 0 auto; width:auto; height:44px; margin:0; padding:4px; gap:0; background:var(--fill); border:0; border-radius:22px; box-shadow:none; }
.app .penny-dashboard :is(.trend-seg-i,.comp-seg-i) { position:relative; flex:0 0 auto; display:flex; align-items:center; justify-content:center; min-width:46px; min-height:36px; height:36px; padding:6px 10px; border-radius:18px; font-size:13px; line-height:1.4; white-space:nowrap; color:var(--sub); transition:background 160ms ease,color 160ms ease; }
.app .penny-dashboard :is(.trend-seg-i,.comp-seg-i)::before { content:''; position:absolute; inset:-4px 0; }
.app .penny-dashboard :is(.trend-seg-i,.comp-seg-i).on { color:var(--txt); background:var(--bg-elev); box-shadow:0 1px 4px #00000010; }
.app .penny-face .pny-comp { align-content:start; }
.app .penny-flip-button { position:relative; width:44px; height:44px; min-height:44px; padding:0; flex:none; justify-content:center; background:transparent; border-radius:50%; }
.app .penny-flip-button::before { content:''; position:absolute; inset:5px; border:1px solid var(--line); border-radius:50%; background:var(--bg-elev); }
.app .penny-flip-button svg { position:relative; width:18px; height:18px; transition:transform .65s cubic-bezier(.2,.75,.2,1); }
.app .penny-flip-button.is-flipped svg { transform:rotate(180deg); }
@media(prefers-reduced-motion:reduce) { .app .penny-flip-button svg { transition:none; } }

/* Metric identity remains stable in every chart, theme and legend. */
.app .net-tab[data-mode="net"] { --metric-color:#007aff; }
.app .net-tab[data-mode="asset"] { --metric-color:#168a80; }
.app .net-tab[data-mode="debt"] { --metric-color:#c77818; }
.app .net-tab.on { color:var(--metric-color); }
.app .net-tab::before { content:""; display:inline-block; width:5px; height:5px; border-radius:50%; margin-right:5px; background:var(--metric-color); vertical-align:middle; }
.app .penny-metric-legend { display:flex; gap:14px; align-items:center; min-height:24px; font-size:11px; color:var(--sub); }
.app .penny-metric-legend>div { display:flex; align-items:center; gap:5px; }
.app .penny-metric-dot { display:inline-block; width:6px; height:6px; border-radius:50%; flex-shrink:0; }
.app .penny-chart-note { margin-top:4px; font-size:11px; line-height:1.5; color:var(--sub); }
.app .penny-pop-row { display:flex; gap:6px; align-items:center; white-space:nowrap; font-size:11px; color:var(--bg); line-height:1.8; }
.app .penny-pop-row>span:last-child { margin-left:auto; font-variant-numeric:tabular-nums; }
.app .trend-pop:has(.penny-pop-row) { width:188px; max-width:100%; padding:8px 10px; }
.app .trend-view-picker { gap:2px; }
.app .trend-view-picker>div { padding:8px 10px; font-size:13px; }

.app .penny-hero-metric { display:flex; gap:6px; align-items:center; }
.app .penny-hero-secondary { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:20px; }
.app .penny-hero-secondary>div { display:flex; flex-direction:column; gap:6px; min-width:0; }
.app .penny-hero-secondary>div>span:first-child { display:flex; align-items:center; gap:6px; font-size:12px; color:var(--sub); }
.app .penny-hero-secondary>div>span:nth-child(2) { font-size:20px; font-weight:600; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.app .penny-chart-metric-tabs { margin:0 0 12px; }
.app .penny-chart-metric-tabs .net-tabs { width:100%; }
.app .penny-chart-metric-tabs .net-tab { font-size:12px; min-height:40px; display:flex; align-items:center; justify-content:center; }

.app .penny-share-entry { margin:16px 0; }
.app .penny-share-options { display:flex; gap:6px; padding:0 14px 12px; flex-wrap:wrap; }
.app .penny-share-options>div { min-height:44px; padding:0 12px; display:flex; align-items:center; border-radius:12px; background:var(--fill); font-size:13px; color:var(--sub); }
.app .penny-share-options .on { color:var(--accent); background:color-mix(in srgb,var(--accent) 12%,var(--bg-elev)); box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 28%,transparent); }

/* Grid owns card width. Legacy half-width and positioned date must not narrow content. */
.app .penny-dashboard .acc-cell { width:100%; min-height:136px; display:flex; flex-direction:column; gap:5px; }
.app .penny-dashboard .acc-cell-date { position:static; margin:0; opacity:1; }
.app .penny-dashboard .acc-cell-name { padding-right:0; white-space:normal; overflow:visible; overflow-wrap:anywhere; }
.app .penny-dashboard .acc-cell-amt,.app .penny-dashboard .acc-cell-chg { white-space:normal; overflow:visible; text-overflow:clip; overflow-wrap:anywhere; }
.app .penny-dashboard .acc-cell-amt { font-size:21px; letter-spacing:-.3px; margin:3px 0; }
.app .penny-secondary-change { font-size:12px; line-height:1.6; overflow-wrap:anywhere; }
.app .penny-secondary-change>span { display:inline; margin-left:4px; white-space:nowrap; color:var(--sub); font-size:11px; }
.app .penny-secondary-change.up { color:var(--positive); }
.app .penny-secondary-change.down { color:var(--negative); }
.app .penny-secondary-change.flat { color:var(--sub); }
@media(max-width:360px) { .app .penny-dashboard .acc-grid { grid-template-columns:minmax(0,1fr); } }

.app .penny-back { display:flex; flex-direction:column; }
.app .penny-back .pny-comp { flex:1; flex-direction:column; flex-wrap:nowrap; justify-content:center; align-items:center; align-content:center; gap:24px; padding:12px 0; }
.app .penny-back .pny-canvas-pie { width:210px; height:210px; flex:none; }
.app .penny-back .pny-legend { width:100%; max-width:480px; min-width:0; flex:none; }
.app .penny-back .pny-leg-row { display:grid; grid-template-columns:7px minmax(0,1fr) auto auto; gap:8px; }
.app .penny-back .pny-leg-label { white-space:normal; overflow-wrap:anywhere; }
.app .penny-back .pny-leg-val { font-size:13px; overflow-wrap:anywhere; }
.app .penny-front .trend-acct-bar { display:flex; flex-wrap:wrap; gap:6px; white-space:normal; overflow:visible; }
.app .penny-front .trend-acct-chip { max-width:100%; white-space:normal; overflow-wrap:anywhere; margin:0; }

.app .penny-dashboard .acc-cell-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; min-width:0; }
.app .penny-dashboard .acc-cell-head .acc-cell-name { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--txt); }
.app .penny-dashboard .acc-cell-head .acc-cell-date { flex:none; white-space:nowrap; }
.app .penny-dashboard .acc-cell-date.today { color:var(--positive); font-weight:650; opacity:1; }
.app .penny-dashboard .acc-cell { min-height:112px; }
