/* ============================================================================
   theme-neumorph.css — 米贴新拟态主题层（Neumorphism / Soft UI）
   1.2.763

   【独立层设计】全部规则以 body.neo 为前缀，不改动 style.20260722.css 一行。
   摘掉 index.html 里的这一条 <link> 即完全恢复，无需 git 回滚。

   【语义约定】凸起 = 可点击　·　凹陷 = 可输入 / 容器
   这与 Neumorphism 惯例一致，也是这套风格唯一能让用户「猜到怎么点」的线索。

   【可访问性补救】新拟态的原生对比度通常只有 1.1~1.3:1，远低于 WCAG 1.4.11
   要求的 3:1，键盘焦点会彻底不可见。因此本层所有焦点态都额外叠一道 accent
   描边环（--neo-ring），用品牌色把「焦点在哪」重新标出来。

   【底板前提】新拟态要求元素与底板同色。因此启用本主题时会隐藏壁纸层
   （#bg 透明度归零，只改视觉、不改用户的壁纸设置），底板改用 --neo-bg 纯色。
   ========================================================================== */

body.neo {
  /* 下面这套默认值 = 「灰蓝色系 × 标准档」的参考组，也是没有 JS 时的兜底。
     实际运行时由 applyNeoTheme() 按「色系 × 阴影深浅」把 --neo-bg / --neo-lo / --neo-hi /
     --neo-t1..t3 / --neo-k 七个值写成 body 的 inline 变量覆盖（见 app.js 的 neoTokens()）。
     色系只提供一个底色，明暗两极与文字色都由它派生 —— 这是新拟态「同色」前提的必然要求。 */
  --neo-bg: #E4E8EE;
  --neo-hi: #FFFFFF;
  --neo-t1: #2D405C;
  --neo-t2: #576F94;
  --neo-t3: #8799B5;

  /* 下面两个变量是「阴影深浅」档位的唯一入口（v1.2.713）：
       --neo-lo  暗侧色    —— 决定对比强度（深/浅）
       --neo-k   几何系数  —— 决定投影偏移与模糊半径（体积感按比例缩放）
     值由 applyNeoTheme() 按档位写成 body 的 inline 变量；这里只给默认值（= 标准档）。

     ❗刻意不用 body[data-neo-depth="deep"] 这类属性选择器：
       属性选择器会多出一档特异性 (0,3,1)，而文件下方 @media(max-width:720px) 里的
       移动端收窄规则是 body.neo (0,2,1) —— 档位规则写在后面就会反压过去，
       结果是「小屏阴影不再收窄」。走 inline 变量则完全绕开级联优先级：
       CSS 只管用这两个变量算阴影，档位只管给变量赋值，两者不争优先级。 */
  --neo-lo: #BCC3CE;
  --neo-k: 1;

  --neo-sh-sm: calc(3px * var(--neo-k)) calc(3px * var(--neo-k)) calc(7px * var(--neo-k)) var(--neo-lo), calc(-3px * var(--neo-k)) calc(-3px * var(--neo-k)) calc(7px * var(--neo-k)) var(--neo-hi);
  --neo-sh: calc(6px * var(--neo-k)) calc(6px * var(--neo-k)) calc(12px * var(--neo-k)) var(--neo-lo), calc(-6px * var(--neo-k)) calc(-6px * var(--neo-k)) calc(12px * var(--neo-k)) var(--neo-hi);
  --neo-sh-lg: calc(10px * var(--neo-k)) calc(10px * var(--neo-k)) calc(20px * var(--neo-k)) var(--neo-lo), calc(-10px * var(--neo-k)) calc(-10px * var(--neo-k)) calc(20px * var(--neo-k)) var(--neo-hi);
  --neo-in-sm: inset calc(3px * var(--neo-k)) calc(3px * var(--neo-k)) calc(6px * var(--neo-k)) var(--neo-lo), inset calc(-3px * var(--neo-k)) calc(-3px * var(--neo-k)) calc(6px * var(--neo-k)) var(--neo-hi);
  --neo-in: inset calc(5px * var(--neo-k)) calc(5px * var(--neo-k)) calc(10px * var(--neo-k)) var(--neo-lo), inset calc(-5px * var(--neo-k)) calc(-5px * var(--neo-k)) calc(10px * var(--neo-k)) var(--neo-hi);
  --neo-in-lg: inset calc(8px * var(--neo-k)) calc(8px * var(--neo-k)) calc(16px * var(--neo-k)) var(--neo-lo), inset calc(-8px * var(--neo-k)) calc(-8px * var(--neo-k)) calc(16px * var(--neo-k)) var(--neo-hi);

  --neo-r-sm: 10px;
  --neo-r: 14px;
  --neo-r-lg: 22px;

  --neo-ring: 0 0 0 1.5px color-mix(in srgb, var(--accent, #5ec95c) 38%, transparent);
}

/* ---------------------------------------------------------------- 浮动挂件卡片（小工具/小组件）
   表层统一由 style.20260722.css 的 --icfx-wz-* 变量驱动；新拟态下只把变量重指向 --neo-* 色板，
   不逐个挂件枚举 —— 今后新增挂件只要沿用 .wcard 表层就自动跟随新拟态（约定见记忆）。
   同色新拟态不需要描边/玻璃，故 line 透明、shadow 用凸起。 */
body.neo {
  --icfx-wz-bg: var(--neo-bg);
  --icfx-wz-line: transparent;
  --icfx-wz-shadow: var(--neo-sh);
}
body.neo .wcard { color: var(--neo-t1); }
body.neo .wcard:hover { box-shadow: var(--neo-sh-lg); }
body.neo .wcard:active { box-shadow: var(--neo-in); }

/* 🧰 小工具面板容器（跟随新拟态色板） */
body.neo #wzPanel {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
}

/* ---------------------------------------------------------------- 底板 */
body.neo {
  background: var(--neo-bg) !important;
  color: var(--neo-t1);
}
body.neo #bg {
  opacity: 0 !important;
}
body.neo #bg-blur {
  opacity: 0 !important;
}
body.neo #gridFade,
body.neo .grid-fade {
  display: none !important;
}
body.neo .scroll-hint {
  color: var(--neo-t3);
}

/* v1.2.741：主题颜色面板的 TAB 在「新拟态」下的观感（凹陷槽 + 凸起选中态） */
body.neo .theme-tabs { background: var(--neo-bg); box-shadow: var(--neo-in); }
body.neo #panel-theme .theme-tabs { --tt-backdrop: var(--neo-bg); }   /* v1.2.763：吸顶垫底跟随色板 */
body.neo .theme-tab { color: var(--neo-t3); }
body.neo .theme-tab.on { background: var(--neo-bg); color: var(--neo-t1);
  box-shadow: 3px 3px 7px var(--neo-lo), -3px -3px 7px var(--neo-hi); }
body.neo .theme-tabs-hint { color: var(--neo-t3); }
body.neo .theme-warn { background: var(--neo-bg); border: none; color: var(--neo-t3); box-shadow: var(--neo-in); }
/* v1.2.741：「动态背景」已归经典专属 —— 新拟态底板是纯色，粒子会破坏「干净一块」的观感，一并隐藏 */
body.neo #dynamicBg,
body.neo #dynWall { display: none !important; }

/* ---------------------------------------------------------------- 时钟区（凸起面板） */
body.neo .clock-wrap {
  background: var(--neo-bg);
  border: 0;
  border-radius: var(--neo-r-lg);
  box-shadow: var(--neo-sh);
  padding: 16px 30px 14px;
}
body.neo #clock {
  color: var(--neo-t1);
  text-shadow: none;
}
body.neo #date {
  color: var(--neo-t2);
  text-shadow: none;
}
body.neo .date-lun,
body.neo #lunarFest {
  color: var(--neo-t3);
  text-shadow: none;
}
body.neo .date-lun.is-fest,
body.neo #lunarFest {
  color: #C2410C;
}
body.neo .clock-wrap:focus-visible {
  box-shadow: var(--neo-sh), var(--neo-ring);
  outline: none;
}

/* ---------------------------------------------------------------- 搜索框（凹陷：可输入） */
body.neo .search input {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-in);
  color: var(--neo-t1);
}
body.neo .search input::placeholder {
  color: var(--neo-t3);
}
body.neo .search input:focus {
  border-color: transparent;
  box-shadow: var(--neo-in), var(--neo-ring);
}
body.neo .search.focused input {
  padding-left: 46px;
}
body.neo .engine-btn {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
}
body.neo .engine-btn:hover {
  box-shadow: var(--neo-sh-sm), var(--neo-ring);
}
body.neo .cmd-trigger {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .engine-dropdown {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
  border-radius: var(--neo-r);
}
body.neo .engine-list button:hover {
  background: var(--neo-bg);
  box-shadow: var(--neo-in-sm);
}

/* ---------------------------------------------------------------- 瓦片（凸起：可点击）
   ❗真实 DOM 是 .tile > .tile-icon（图标位）+ .tile-title（名称）。
     .tile-img 只是图标位「里面」那张 <img>（自带白底圆角方块），.tile-name 根本不存在。
     所以凸起面必须做在 .tile-icon 上 —— 打在 .tile-img 上等于给 favicon 图片本身描边，
     既看不见底座、又会在图片边缘糊出一圈脏影。 */
body.neo .tile-icon {
  background: var(--neo-bg);
  border-radius: calc(var(--tile-size) * 0.22);
  box-shadow: var(--neo-sh);
  /* 让底座在图标四周露出一圈。用 max() 而不是直接覆盖：
     设置里「图标外观 → 图标大小」也会往 --icfx-sp-pad 写内缩，取较大者才不会把用户的选择压掉。 */
  padding: max(calc(var(--tile-size) * 0.15), calc(var(--tile-size) * var(--icfx-sp-pad, 0)));
}
/* v1.2.724：新拟态下图标底座必须是正方形。
   .tile-icon 自 v1.2.600 起是「吃满瓦片可用空间」的矩形容器（width:100% + flex:1，高被标题行占掉一截），
   经典模式底色透明看不出形状；新拟态给它上了底色 + 双向阴影，矩形就露馅了（明显宽 > 高）。
   收正方式：宽改 auto、aspect-ratio:1 —— 高仍由 flex:1 撑满（瓦片高 - 标题行 - gap），宽 = 高；
   .tile 是 align-items:center 的纵向 flex，方块自动水平居中。
   ❗添加瓦片的图标位是固定 40px 小槽（.tile-add .tile-icon height:40px），不参与收正；
     2x1 / 2x2 / 4x2 等矩形瓦片本就是矩形布局，保持铺满不收。 */
body.neo .tile[data-size="1x1"]:not(.tile-add) .tile-icon {
  width: auto;
  aspect-ratio: 1;
  max-width: 100%;
}
/* 图标方块自身收回圆角，与底座同心（同心底座：内圆角 ≈ 外圆角 − 内边距） */
body.neo .tile-img,
body.neo .tile-ticon {
  border-radius: calc(var(--tile-size) * 0.075);
}
body.neo .tile:hover .tile-icon {
  box-shadow: var(--neo-sh-lg);
}
body.neo .tile:active .tile-icon,
body.neo .tile.is-active .tile-icon {
  box-shadow: var(--neo-in);
}
body.neo .tile:focus-visible .tile-icon,
body.neo .tile-icon:focus-visible {
  box-shadow: var(--neo-sh), var(--neo-ring);
  outline: none;
}
body.neo .tile-title {
  color: var(--neo-t2);
  text-shadow: none;
}
/* 文件夹瓦片：内部那「一坨」子图标底换成同色系浅底，与凸起底座分层 */
body.neo .tile-cat.tile-has-kids .cat-icon.has-kids {
  background: color-mix(in srgb, var(--neo-lo) 40%, transparent);
}
/* 添加瓦片：空槽应读作「凹陷待填」，与其余凸起瓦片形成对照。
   原样式是 rgba(255,255,255,.4) 白虚线框 —— 在浅色底板上几乎不可见。
   注意捷径页本身有一层 #overlay rgba(0,0,0,.18) 压暗，底被压到 ≈rgb(187,190,195)，
   所以虚线不能用 --neo-lo（188,195,206）—— 与压暗后的底几乎同色，等于没有。
   必须用更深的 --neo-t3 才在「压暗后的底」上也立得住。 */
body.neo .tile-add {
  background: color-mix(in srgb, var(--neo-lo) 30%, transparent);
  border-color: color-mix(in srgb, var(--neo-t3) 62%, transparent);
  color: var(--neo-t3);
}
body.neo .tile-add:hover {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-in);
  color: var(--neo-t2);
}
body.neo .tile-add .tile-icon {
  background: transparent;
  box-shadow: none;
  color: inherit;
}
/* v1.2.721：文件夹弹层内的瓦片不再扁平 —— 与捷径主页网格统一「图标即按钮」（凸起 + 悬停/按下凹下）。
   外层 .folder-pop 是凸起浮层，里层图标仍各自有凸起卡面 + 悬停凹下，多层软 UI 是标准新拟态观感（用户要求所有图标统一）。
   具体阴影继承上方 body.neo .tile-icon / :hover / :active 通用规则，无需在此重复。 */

/* ---------------------------------------------------------------- 文件夹弹层（凸起浮层） */
/* v1.2.725：凸起面只打在「面板」上，容器必须保持透明。
   ❗.folder-pop / .wz-fpop 都是 position:fixed inset:0 的全屏容器（42% 黑遮罩 -bg 是其子元素）。
   v1.2.712 把 background: var(--neo-bg) 误打在容器上 → 打开文件夹整个视口被涂成实心浅灰，
   弹层背后的捷径页/瓦片全被盖死（用户反馈「看不到下面」）。
   容器透明 → 背后内容正常透出，只留遮罩压暗，与经典模式行为一致。 */
body.neo .folder-pop,
body.neo .wz-fpop {
  background: transparent;
}
body.neo .folder-pop-panel,
body.neo .wz-fpop-panel {
  background: var(--neo-bg);
  border-color: transparent;
  border-radius: var(--neo-r-lg);
  box-shadow: var(--neo-sh-lg);
}
/* v1.2.726：新拟态下遮罩减淡（.42 → .20）。
   页面底板与卡片同为 --neo-bg 浅色（只靠双向阴影分层），被 42% 黑一压，
   弹层背后的卡片阴影几乎归零，看上去仍是「一片灰、啥都没有」（用户再反馈「看不到下面」）。
   减到 .20 保留聚焦感，背后卡片的阴影与文字能透出来。 */
body.neo .folder-pop-bg,
body.neo .wz-fpop-bg {
  background: rgba(0, 0, 0, 0.2);
}
body.neo .folder-pop-title,
body.neo .folder-pop-name {
  color: var(--neo-t2);
}

/* ---------------------------------------------------------------- 挂件区 */
body.neo .wz-clock,
body.neo .wz-fold,
body.neo .wz-folder {
  background: var(--neo-bg);
  border-color: transparent;
  border-radius: var(--neo-r);
  box-shadow: var(--neo-sh);
}
body.neo .wz-fpop-head {
  border-bottom-color: color-mix(in srgb, var(--neo-lo) 60%, transparent);
}
body.neo .wz-fpop-btn {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
}
/* v1.2.726：挂件文件夹弹层的条目图标 → 与捷径页一致的「图标即按钮」。
   .wz-fpop-ic 原本是 44px 平面小方块（白/黑半透明底），没有新拟态体积；
   现在凸起卡面（--neo-bg + 双向阴影）+ 悬停/按下凹下，与 body.neo .tile-icon 同一套语言。
   内层 img / b 收进 4px 内缩、圆角相应收小；b 是 inset:0 的绝对定位文字层，同步改 inset:4px。 */
body.neo .wz-fpop-ic {
  background: var(--neo-bg);
  box-shadow: var(--neo-sh);
  padding: 4px;
}
body.neo .wz-fpop-ic img { border-radius: 20%; }
body.neo .wz-fpop-ic b { inset: 4px; border-radius: 20%; }
body.neo .wz-fpop-c:hover .wz-fpop-ic,
body.neo .wz-fpop-c:active .wz-fpop-ic {
  box-shadow: var(--neo-in);
}
body.neo .wz-clock-time {
  color: var(--neo-t1);
}
body.neo .wz-clock-date,
body.neo .wz-clock-lun {
  color: var(--neo-t2);
}

/* ---------------------------------------------------------------- 底部托盘 Dock（凸起） */
body.neo .wz-dock-wrap,
body.neo .wz-dock {
  background: var(--neo-bg);
  border-color: transparent;
  border-radius: var(--neo-r-lg);
  box-shadow: var(--neo-sh);
}
body.neo .wz-dock-trigger {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .dock-icon {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
}
body.neo .dock-icon:hover {
  box-shadow: var(--neo-sh);
}
body.neo .dock-icon:active {
  box-shadow: var(--neo-in-sm);
}

/* ---------------------------------------------------------------- 左下角备案 / 提示条 */
body.neo #tip,
body.neo #tip .tip-text,
body.neo #tip .tip-icp {
  color: var(--neo-t3);
  text-shadow: none;
}
body.neo #tip a,
body.neo #tip .tip-icp {
  color: var(--neo-t2);
  border-bottom-color: color-mix(in srgb, var(--neo-lo) 70%, transparent);
}
body.neo #tip a:hover {
  color: var(--accent, #5ec95c);
}

/* ---------------------------------------------------------------- 捷径页「收起 ↑」 */
body.neo .overlay-close {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .overlay-close:hover {
  box-shadow: var(--neo-sh);
  color: var(--neo-t1);
}
/* 备注：右下角 .salary-fab（红心 💰 薪跳入口）刻意不改 —— 它是带品牌色语义的功能入口，
   在新拟态里把状态色/品牌色一并「同色化」会直接抹掉它的可识别性。 */

/* ---------------------------------------------------------------- 通用弹层遮罩
   ❗.modal 本身是「全屏遮罩」而不是卡片（style.20260722.css: position:fixed;inset:0;
     background:rgba(0,0,0,.55)）。这里若照搬凸起卡片的三件套（不透明底色 + 投影），
     整块视口会被刷成实心浅灰 —— 遮罩的「压暗后面」语义消失，弹层失去层级感，
     而且 inset:0 的固定元素上画投影纯属浪费。故只保留一层同为 --neo-bg 色系的
     半透明薄纱：既不跳出新拟态的色域，又能维持「后面被压住」的视觉。 */
/*   ❗另注：#settingsPanel 自身在 style.20260722.css:1668 被显式改成 background:transparent
     （设置面板有意不压暗背景），ID 选择器优先级高于本层，故设置面板保持透明 —— 这是预期行为。 */
body.neo .modal {
  background: color-mix(in srgb, var(--neo-lo) 68%, transparent);
  box-shadow: none;
  backdrop-filter: none;
}

/* 弹层内的卡片：.modal 是 flex 居中的全屏遮罩，其直接子元素即内容卡。
   用「直接子元素」而不是逐个枚举类名 —— 弹层卡片类名分散在多处（.add-card / .auth-card /
   .cmd-card / .nt-card / .settings-card …），且部分弹层由 app.js 动态创建，枚举必漏。
   :not(button) 用来放过绝对定位的关闭键，避免把圆形关闭键拉成大方块。 */
body.neo .modal > *:not(button) {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
}
body.neo .dialog-close {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .dialog-close:hover {
  box-shadow: var(--neo-sh-sm), var(--neo-ring);
}

/* ---------------------------------------------------------------- 快捷键提示 / Toast */
body.neo .toast,
body.neo #toast {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh);
  color: var(--neo-t1);
}

/* ---------------------------------------------------------------- 深色模式下也保持同色底板
   新拟态本身是浅色系语言（靠亮/暗双向阴影塑造体积），深色底会失去层次，
   所以 body.neo 一律使用 --neo-bg 浅底板，不随 dark/light 切换。 */
body.neo.dark,
body.neo.light {
  background: var(--neo-bg) !important;
}

/* ---------------------------------------------------------------- 移动端：阴影收窄，避免小屏发糊 */
@media (max-width: 720px) {
  body.neo {
    /* 小屏收窄同样乘 --neo-k：否则深档在手机上会「先被收窄、又被档位放回去」，档位形同虚设 */
    --neo-sh-sm: calc(2px * var(--neo-k)) calc(2px * var(--neo-k)) calc(5px * var(--neo-k)) var(--neo-lo), calc(-2px * var(--neo-k)) calc(-2px * var(--neo-k)) calc(5px * var(--neo-k)) var(--neo-hi);
    --neo-sh: calc(4px * var(--neo-k)) calc(4px * var(--neo-k)) calc(9px * var(--neo-k)) var(--neo-lo), calc(-4px * var(--neo-k)) calc(-4px * var(--neo-k)) calc(9px * var(--neo-k)) var(--neo-hi);
    --neo-sh-lg: calc(6px * var(--neo-k)) calc(6px * var(--neo-k)) calc(13px * var(--neo-k)) var(--neo-lo), calc(-6px * var(--neo-k)) calc(-6px * var(--neo-k)) calc(13px * var(--neo-k)) var(--neo-hi);
    --neo-in: inset calc(3px * var(--neo-k)) calc(3px * var(--neo-k)) calc(7px * var(--neo-k)) var(--neo-lo), inset calc(-3px * var(--neo-k)) calc(-3px * var(--neo-k)) calc(7px * var(--neo-k)) var(--neo-hi);
  }
  body.neo .clock-wrap {
    padding: 12px 20px 10px;
  }
}

/* ---------------------------------------------------------------- 降低动态效果偏好 */
@media (prefers-reduced-motion: reduce) {
  body.neo .tile-img,
  body.neo .clock-wrap,
  body.neo .search input {
    transition: none !important;
  }
}

/* ==========================================================================
   动态背景层必须在底板纯色化时一并关掉
   壁纸 #bg 透明度归零后，动态背景还有两个 canvas 在跑 —— #dynamicBg（绿色粒子）
   和 #dynWall（动态壁纸）。它们在浅灰底板上会变成一片杂乱光点，直接破坏同色底。
   ========================================================================== */
body.neo #dynamicBg,
body.neo #dynWall {
  display: none !important;
}

/* ---------------------------------------------------------------- 左上角快捷触发（凸起） */
body.neo .ls-trigger {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .ls-trigger:hover {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh);
}

/* ---------------------------------------------------------------- 右上角工具栏（凸起 + 凹陷面板） */
body.neo .tb-toggle {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .tb-toggle:hover {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh);
}
body.neo .tb-toggle-bars,
body.neo .tb-toggle-bars::before,
body.neo .tb-toggle-bars::after {
  background: transparent;
  color: var(--neo-t2);
}
body.neo .tb-panel,
body.neo .tb-right {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
  border-radius: var(--neo-r);
}
body.neo .tb-btn {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-sm);
  color: var(--neo-t2);
}
body.neo .tb-btn:hover {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh);
  color: var(--neo-t1);
}
body.neo .tb-ico,
body.neo .tb-user-item {
  color: var(--neo-t2);
}
body.neo .tb-user-item:hover {
  background: var(--neo-bg);
  box-shadow: var(--neo-in-sm);
  color: var(--neo-t1);
}
body.neo .tb-user-menu {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
}

/* ---------------------------------------------------------------- 搜索框聚焦：先加深凹陷，再叠淡环
   放在文件末尾重声明一次即可压过前面的 :focus 规则（同特异性、后声明者胜）。 */
body.neo .search input:focus,
body.neo .search input:focus-visible {
  border-color: transparent;
  box-shadow: var(--neo-in-lg), var(--neo-ring);
}

/* ---------------------------------------------------------------- 设置面板（凹陷底 + 凸起卡片） */
body.neo .settings-card,
body.neo .settings-view {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-sh-lg);
  border-radius: var(--neo-r-lg);
}
body.neo .settings-nav {
  background: var(--neo-bg);
  border-right-color: color-mix(in srgb, var(--neo-lo) 45%, transparent);
}
body.neo .set-row {
  border-bottom-color: color-mix(in srgb, var(--neo-lo) 42%, transparent);
}
body.neo .set-row-label,
body.neo .set-section-title {
  color: var(--neo-t1);
}
body.neo .set-row-desc {
  color: var(--neo-t3);
}
body.neo .set-select {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-in-sm);
  color: var(--neo-t1);
}
body.neo .set-select:focus {
  box-shadow: var(--neo-in-sm), var(--neo-ring);
}
/* 开关：轨道凹陷（关）/ 轨道填充 accent（开）
   ❗原实现的开状态是 .set-switch:checked（伪类），不是 .on 类 —— 之前的 .set-switch.on
     永远匹配不到，等于把「开/关」的颜色信号一起抹掉：轨道恒为同色底，只剩旋钮挪了 20px。
     新拟态「同色」的例外正是状态色，故开状态保留 accent 填充，只把阴影换成本层的软阴影。 */
body.neo .set-switch {
  background: var(--neo-bg);
  border-color: transparent;
  box-shadow: var(--neo-in-sm);
}
body.neo .set-switch:checked {
  background: var(--accent, #5ec95c);
  box-shadow: var(--neo-in-sm);
}
body.neo .set-switch::after {
  background: var(--neo-hi);
  box-shadow: var(--neo-sh-sm);
}
/* ===== v1.2.717：小工具浮层（文件传输/笔记/待办/热榜/微信/Studio/改名/确认）跟随新拟态 ===== */
/* 这些浮层原本消费 --ovl-* 玻璃变量；新拟态要求「元素与底板同色」，故在 body.neo 下把共享变量
   整体重指向 --neo-* 色板 —— 内部所有卡面/输入/按钮/芯片自动统一为软拟态同色底；再单独补投影。
   ❗只改 body.neo 作用域内的变量与投影，不触碰 style.20260722.css 一行（与主题层纪律一致）。 */
body.neo .ft-modal,
body.neo .ft-confirm-modal,
body.neo .ft-rename-modal,
body.neo .notes-modal,
body.neo .td-modal,
body.neo .nt-modal,
body.neo .studio-modal,
body.neo .hot-modal,
body.neo .wx-modal {
  /* v1.2.720：文件夹遮罩增强对比。旧值 68%+transparent 只是同色系微暗，面板(--ovl-panel=--neo-bg)
     与压暗后的底几乎同色 → 新拟态下打开文件夹「看不出外面」。改混 45% 黑，让底明显压暗、
     面板（亮色调）清晰浮起，既能看见被压暗的页面，又不破坏 Soft UI 的柔和调性。 */
  --ovl-mask: color-mix(in srgb, var(--neo-lo) 75%, rgba(0,0,0,.45));
  --ovl-panel: var(--neo-bg);
  --ovl-border: transparent;
  --ovl-shadow: var(--neo-sh-lg);
  --text: var(--neo-t1);
  --text-dim: var(--neo-t2);
  --text-muted: var(--neo-t3);
  --tool-sep: color-mix(in srgb, var(--neo-lo) 45%, transparent);
  --tool-hover: var(--neo-bg);
  --tool-hover-strong: var(--neo-bg);
  --tool-active-bg: color-mix(in srgb, var(--accent, #5ec95c) 16%, transparent);
  --tool-active-text: var(--accent, #5ec95c);
  --input-bg: var(--neo-bg);
  --input-border: color-mix(in srgb, var(--neo-lo) 52%, transparent);
  --chip-bg: var(--neo-bg);
  --chip-border: color-mix(in srgb, var(--neo-lo) 50%, transparent);
  --panel-border: color-mix(in srgb, var(--neo-lo) 45%, transparent);
}
/* 卡面已由 --ovl-shadow 重指向 --neo-sh-lg → 自动凸起；这里给内部「可点」元素补小凸起、给输入/容器补凹陷。 */
body.neo .ft-modal .ft-btn,
body.neo .ft-modal .ft-close,
body.neo .ft-modal .ft-icon-btn,
body.neo .ft-modal .ft-tab,
body.neo .ft-modal .ft-filepick,
body.neo .ft-modal .ft-peer,
body.neo .notes-modal .notes-btn,
body.neo .notes-modal .notes-close,
body.neo .td-modal .td-nav-btn,
body.neo .hot-modal .hot-btn,
body.neo .hot-modal .hot-tab,
body.neo .hot-modal .hot-src,
body.neo .hot-modal .hot-add,
body.neo .hot-modal .hot-mg-item,
body.neo .wx-modal .wx-btn,
body.neo .wx-modal .wx-day { box-shadow: var(--neo-sh-sm); }
body.neo .ft-modal .ft-input,
body.neo .ft-modal .ft-rename-input,
body.neo .ft-modal .ft-item,
body.neo .ft-modal .ft-peer,
body.neo .hot-modal .hot-mg-input,
body.neo .hot-modal .hot-mg-custom,
body.neo .wx-modal .wx-tip,
body.neo .wx-modal .wx-metric,
body.neo .wx-modal .wx-sec { box-shadow: var(--neo-in); }
/* 硬编码深色遮罩/底色改走新拟态薄纱（原 rgba(0,0,0,.62) 在浅底上太重） */
body.neo .nt-modal { background: color-mix(in srgb, var(--neo-lo) 68%, transparent); }
body.neo .ft-rename-backdrop { background: color-mix(in srgb, var(--neo-lo) 68%, transparent); }
/* 待办浮层内嵌的硬编码深色小卡（#1a202e）改回同色底 */
body.neo .td-modal [style*="background:#1a202e"],
body.neo .td-modal [style*="background: #1a202e"] { background: var(--neo-bg) !important; }

/* v1.2.751：引导卡在「新拟态」下 —— 选项卡与预览也要跟着变，否则卡里卡外风格割裂 */
body.neo .onboard-opt { background: var(--neo-bg); border: none; color: var(--neo-t1);
  box-shadow: 4px 4px 10px var(--neo-lo), -4px -4px 10px var(--neo-hi); }
body.neo .onboard-opt:hover { border: none; transform: translateY(-2px); }
body.neo .onboard-opt.on { box-shadow: inset 4px 4px 10px var(--neo-lo), inset -4px -4px 10px var(--neo-hi); }
body.neo .onboard-name { color: var(--neo-t1); }
body.neo .onboard-sub, body.neo .onboard-desc, body.neo .onboard-tip { color: var(--neo-t3); }
body.neo .onboard-card h2 { color: var(--neo-t1); }
body.neo .onboard-pv-neo { background: var(--neo-bg); }
body.neo .onboard-pv-neo::after { box-shadow: 3px 3px 7px var(--neo-lo), -3px -3px 7px var(--neo-hi); }
body.neo .onboard-start { box-shadow: 5px 5px 12px var(--neo-lo), -5px -5px 12px var(--neo-hi); }

/* ---------------------------------------------------------------- v1.2.760 图标底色一体弹窗 + 色系深色预览
   弹窗跟随新拟态色板（同色凸起卡）；色系色块预览的深色变体由 app.js applyNeoTheme 直接改 --sw，
   这里只补深色下圆形色块的描边（L=22 的深色块贴同明度底板，黑描边会隐形）。 */
body.neo #icoBgcPop {
  background: var(--neo-bg); border-color: transparent;
  box-shadow: var(--neo-sh-lg); border-radius: var(--neo-r);
}
body.neo #icoBgcPop .ico-bgc-hex { color: var(--neo-t2); }
body.neo #icoBgcPop .ico-bgc-sw,
body.neo #icoBgcPop .ico-bgc-chip { border-color: color-mix(in srgb, var(--neo-lo) 55%, transparent); }
body.neo #icoBgcPop .ico-bgc-hue::-webkit-slider-thumb {
  background: var(--neo-hi); border-color: transparent; box-shadow: var(--neo-sh-sm);
}
body.neo .ntsw { border-color: color-mix(in srgb, var(--neo-t3) 40%, transparent); }
