/* ============================================================
   neu-skin.css —— 新拟态（Neumorphism）全站皮肤层
   ------------------------------------------------------------
   风格真源：/www/wwwroot/test 设计系统（Neumorphism Mobile）
   迁移日期：2026-09-09

   设计原则（来自 test 站设计语言）：
   1. 单色冷灰画布（#E0E5EC），所有层次由「双向柔和阴影」表达：
      凸起 = 暗侧右下 + 亮侧左上；凹陷 = 反向 inset；禁用硬描边；
   2. 主色 #6C63FF（渐变 #7B73FF→#5A50E8 用于主操作/品牌块）；
   3. 圆角语言：大卡 24px / 子件 14-16px / chip 药丸；
   4. 列表语言：连续行不拆卡 —— 整块列表是一张凸起石板，
      行间用极浅分隔线，行 :active 整体压凹；
   5. 输入框一律凹陷槽（inset 底 #D1D9E6）；
   6. 本文件只做「覆盖」，不改布局几何（宽高/flex/定位归源文件管）。

   加载方式：templates/base.html 与 auth.html 以独立 <link> 挂在全部
   bundle 之后（级联必胜）。聊天窗(chatview.js)/用户主页(profileview.js)/
   输入条(input-bar.js)/chips(chip-renderer.js) 的样式是 JS 运行时注入
   head 末尾的 <style>（晚于本 link），对它们的覆盖必须 !important。

   token 真源 = runtime/shared/mobile-shell.css :root；下方声明是
   auth.html 独立页兜底（它不加载 mobile-shell.css），值须同步。
   黑夜模式：token 暗值块同样双副本（mobile-shell.css :root[data-theme=
   "dark"] 为真源 + 本文件兜底副本，check_theme_single_source 强制逐
   token 一致）；组件级 dark 补裁只允许出现在本文件尾部「黑夜模式组件级
   补裁」区——业务 CSS 与 JS 一律不写 dark 分支，配色收敛靠 token。
   ============================================================ */

:root {
    /* 主色:紫色已移除,统一褐色(暖棕)系。选中态用凹陷表达,不用颜色。 */
    --primary: #5C4033;
    --primary-2: #3E2A20;
    /* 文字层:褐色填充(暖棕调),由深到浅四级 */
    --text-1: #5C4033;
    --text-2: #7A5C47;
    --text-3: #9C7E68;
    --text-muted: #B5987F;
    --border: #DCE3EC;
    --border-soft: #E4EAF1;
    --neu-bg: #E0E5EC;
    --neu-inset: #D1D9E6;
    --neu-sh-dark: rgba(163, 177, 198, .7);
    --neu-sh-light: rgba(255, 255, 255, .85);
    --neu-raise: 9px 9px 18px var(--neu-sh-dark), -9px -9px 18px var(--neu-sh-light);
    --neu-raise-sm: 5px 5px 10px var(--neu-sh-dark), -5px -5px 10px var(--neu-sh-light);
    --neu-raise-xs: 3px 3px 7px var(--neu-sh-dark), -3px -3px 7px var(--neu-sh-light);
    --neu-press: inset 5px 5px 12px var(--neu-sh-dark), inset -5px -5px 12px var(--neu-sh-light);
    --neu-press-sm: inset 3px 3px 6px var(--neu-sh-dark), inset -3px -3px 6px var(--neu-sh-light);
    --neu-press-xs: inset 2px 2px 4px var(--neu-sh-dark), inset -2px -2px 4px var(--neu-sh-light);
    /* 浮窗阴影兜底（auth 独立页;真源 = mobile-shell.css :root,值须同步） */
    --neu-pop-shadow: 0 8px 24px rgba(100, 112, 130, .35), 0 2px 6px rgba(100, 112, 130, .2);
    --neu-radius-card: 24px;
    --neu-radius-sub: 16px;
    --neu-radius-pill: 999px;
    /* 主操作按钮:不再用紫色渐变,改用同色凸起块(靠阴影区分,文字深色) */
    --neu-accent-grad: var(--neu-bg);
    /* 弹层统一底色:纯色冷灰,浑然一体(渐变会造成上下色差,用户明确不要) */
    --neu-overlay-bg: var(--neu-bg);
    /* 弹层遮罩统一色(pv-overlay 等) */
    --neu-mask: rgba(15, 23, 42, .35);
    /* 弹层边框唯一真源(宽度/样式/颜色合一):只用于分隔线;
       浮卡外框一律 none(拟态以阴影表达,不用描边)。设计界面直接引用,不再各自设 */
    --neu-line: 1px solid rgba(198, 207, 220, .45);
    /* 布局 token 兜底副本（真源 = mobile-shell.css :root，值须同步；2026-09-21
       亮值双副本对账补齐——auth 独立页不消费布局量，仅为副本集合对齐） */
    --canvas-w: 100%;
    --tab-h: 54px;
    /* ---- 主题扩展 token（兜底副本；真源 = mobile-shell.css :root，值须同步。
       neu-skin.css 挂载面 = 全部页面尾置 + auth.html 独立页直引，token 声明
       两处副本的原因同上方 :root 浅色兜底。 ---- */
    --danger: #E53E3E;
    --danger-tint: rgba(197, 48, 48, .08);
    --ok: #38A169;
    --ok-tint: rgba(56, 161, 105, .25);
    --primary-tint: rgba(92, 64, 51, .1);
    --tint-soak: rgba(92, 64, 51, .25);
    --tint-edge: rgba(92, 64, 51, .42);
    --tint-focus: rgba(92, 64, 51, .38);
    --hairline: rgba(163, 177, 198, .4);
    --stripe: rgba(163, 177, 198, .18);
    --pin-wash: rgba(209, 217, 230, .4);
    --canvas-hi: rgba(255, 255, 255, .55);
    --canvas-lo: rgba(163, 177, 198, .38);
    /* 浮动层(顶部头栏 / 底部 Tab 栏)统一底色:不透明冷灰,与画布同色靠阴影分层。
       曾用半透明+毛玻璃,但这些层常驻在屏且内容从其下滚动穿过,backdrop-filter
       每帧重 blur 是滚动掉帧大户,2026-09-09 改回不透明;
       防挡由滚动容器的顶/底透明垫片承担。 */
    --neu-float-bg: var(--neu-bg);
}

/* ============================================================
   黑夜模式 token 重定义（auth.html 独立页兜底副本）
   ------------------------------------------------------------
   真源 = runtime/shared/mobile-shell.css 的 :root[data-theme="dark"]，
   本块逐值同步（auth.html 不加载 mobile-shell.css，只直引本文件）。
   选择器 :root[data-theme="dark"]（特异性 0,2,0）恒压过上方 :root 浅色
   兜底，与加载顺序无关。暗色 = 中性深灰（参考主流 App 黑夜模式的提亮
   层次，2026-09-21 用户反馈「#111 太黑看不清层次」）。
   check_theme_single_source 强制两侧逐 token 一致。
   ============================================================ */
:root[data-theme="dark"] {
    color-scheme: dark;
    --primary: #C89E6E;
    --primary-2: #E2C29B;
    --text-1: #F2F2F2;
    --text-2: #C9C9C9;
    --text-3: #999999;
    --text-muted: #6E6E6E;
    --border: #3A3A3A;
    --border-soft: #303030;
    --neu-bg: #1A1A1A;
    --neu-inset: #131313;
    --neu-sh-dark: rgba(0, 0, 0, .55);
    --neu-sh-light: rgba(255, 255, 255, .07);
    --neu-raise: 9px 9px 18px var(--neu-sh-dark), -9px -9px 18px var(--neu-sh-light);
    --neu-raise-sm: 5px 5px 10px var(--neu-sh-dark), -5px -5px 10px var(--neu-sh-light);
    --neu-raise-xs: 3px 3px 7px var(--neu-sh-dark), -3px -3px 7px var(--neu-sh-light);
    --neu-press: inset 5px 5px 12px var(--neu-sh-dark), inset -5px -5px 12px var(--neu-sh-light);
    --neu-press-sm: inset 3px 3px 6px var(--neu-sh-dark), inset -3px -3px 6px var(--neu-sh-light);
    --neu-press-xs: inset 2px 2px 4px var(--neu-sh-dark), inset -2px -2px 4px var(--neu-sh-light);
    --neu-pop-shadow: 0 8px 24px rgba(0, 0, 0, .55), 0 2px 6px rgba(0, 0, 0, .4);
    --neu-accent-grad: var(--neu-bg);
    --neu-overlay-bg: var(--neu-bg);
    --neu-mask: rgba(0, 0, 0, .55);
    --neu-line: 1px solid rgba(255, 255, 255, .12);
    --neu-float-bg: var(--neu-bg);
    --danger: #F0715F;
    --danger-tint: rgba(240, 113, 95, .16);
    --ok: #6FBF8E;
    --ok-tint: rgba(111, 191, 142, .3);
    --primary-tint: rgba(200, 158, 110, .16);
    --tint-soak: rgba(200, 158, 110, .32);
    --tint-edge: rgba(200, 158, 110, .55);
    --tint-focus: rgba(200, 158, 110, .5);
    --hairline: rgba(255, 255, 255, .12);
    --stripe: rgba(255, 255, 255, .06);
    --pin-wash: rgba(255, 255, 255, .07);
    --canvas-hi: rgba(255, 255, 255, .05);
    --canvas-lo: rgba(0, 0, 0, .4);
}

/* ============================================================
   弹层标准(框架级唯一真源 —— 所有弹层在此收编,新增弹层只准挂这里)
   ============================================================
   分层(自下而上):
     L0 画布      body / .app-canvas          首页渐变,非弹层
     L1 全屏弹层  .pv-overlay                纯色底 = --neu-overlay-bg
     L3 弹出菜单  .item-menu-popup / .gfp-admin-popup  小浮卡

   铁律:
     1. L1 底色只有 --neu-overlay-bg 一处真源;纯色,禁渐变(渐变=上下色差)。
     2. 弹层内「结构件」(head/scroll/body/header/actions)一律透明;
        只有「卡片类」(.item-card/.gfp-head 等)允许有底色——
        卡片独立凸起,底部浑然一体。
     3. 遮罩统一 --neu-mask。
     4. 边框唯一真源 --neu-line:只准作分隔线(head 下缘 / actions 上缘);
        浮卡(L3)外框一律 none。宽度/颜色不再单设。
   ============================================================ */

/* ---- L1 全屏弹层:纯色底 ----
   例外:pv-float 浮窗会话(作品工坊 AI 会话等)外壳必须透明
   (chatview 注入 .pv-overlay.pv-float{background:transparent;pointer-events:none},
   不透明的只有右下角小面板)——若被本条白底盖住,整屏会挡死背后正开着的弹层。 */
.pv-overlay:not(.pv-float) { background: var(--neu-overlay-bg) !important; }

/* ---- L1 结构件强制透明(防拼接色块;含内容层 .gct 聊天窗 / .gfp 个人主页 /
   .giv 作品详情 / .skv-body 技能查看正文 / .msg-friend-* 通讯录弹层)。
   白带根源档案:.pv-head 原为 #f7fafc 不透明白底(弹层顶部白带),
   .giv 原为 #f7fafc 整层(详情页白底),.skv-body 原为蓝白渐变(技能页白底),
   .panel-scope 原为 #f7fafc 整层(用户/角色/新用户管理与系统代理服务配置窗
   白底石板——弹层与整页宿主共用的管理面板包裹层,2026-09-20 归档)。 ---- */
.pv-head, .pv-scroll, .pv-body, .panel-scope,
.gct, .gfp, .giv, .skv-body,
.msg-friend-wrap, .msg-friend-list {
    background: transparent !important;
}

/* ---- 分隔线:唯一允许出现的边框,统一 --neu-line ---- */
.pv-head { border-bottom: var(--neu-line) !important; }

/* ---- 遮罩统一 ---- */
/* lf-panel* 死选择器全仓零引用，2026-10-08 整族删除 */

/* ---- L3 弹出菜单(小浮卡) ----
   结构差异:.item-menu-popup > .item-admin-actions > button
            .gfp-admin-popup > button */
.item-menu-popup,
.gfp-admin-popup {
    background: var(--neu-bg) !important;
    border: none !important;
    border-radius: var(--neu-radius-sub) !important;
    /* 浮起菜单:只用深色阴影(右下),去掉白色高光,避免周围泛白 */
    box-shadow: var(--neu-pop-shadow) !important;
    padding: 8px !important;
    min-width: 120px !important;
}
.item-admin-actions { gap: 6px; padding: 0 !important; display: flex; flex-direction: column; }

/* 菜单项按钮 */
.item-admin-actions button,
.gfp-admin-popup button {
    background: var(--neu-bg) !important;
    color: var(--text-1) !important;
    border: none !important;
    border-radius: 10px !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 600 !important;
    text-align: center !important;
    padding: 10px 14px !important;
    transition: box-shadow .15s ease;
}
.item-admin-actions button:hover,
.gfp-admin-popup button:hover { background: var(--neu-bg) !important; }
.item-admin-actions button:active,
.gfp-admin-popup button:active { box-shadow: var(--neu-press-xs) !important; }
.item-admin-actions button.btn-danger,
.gfp-admin-popup button.danger { color: var(--danger) !important; }

/* ============================================================
   元件标准(卡片/按钮/输入槽/chip —— 同类元件唯一真源)
   ============================================================
   用法:设计新界面时不要再写 box-shadow/border-radius/background 数值,
   把元件的类名挂进下方对应标准组即可;新元件类型 = 先在这里立项。
   布局几何(padding/margin/字号)不归本区管,留在各视图章节。
   ============================================================ */

/* ---- 卡片标准 · 大卡(页面级独立石板) ----
   收编:.card(我的/通用) / .gfp-head(主页资料卡) / .set-card(设置窗分区卡)。
   (曾挂 .itemview-card/.iv-card/.item-detail-card —— 全是 ddr0 移植时
   凭想象写的死引用,详情页真实类名是 .giv-*,2026-09-09 清出) */
.card,
.gfp-head,
.set-card {
    background: var(--neu-bg) !important;
    border: none !important;
    border-radius: var(--neu-radius-card) !important;
    box-shadow: var(--neu-raise) !important;
}

/* ---- 卡片标准 · 列表卡(列表里的行级卡) ----
   收编:.item-card(作品卡/会话卡/管理卡共用,itemcard.js 模板)。
   裸壳规则按唯一真源闸(check_itemcard_css_single_source.py)落在
   static/css/itemcard.css 尾部「新拟态皮肤段」,此处不再重定义;
   派生/作用域覆盖(.items-grid 前缀、伪类、后代)仍归本皮肤层。 */

/* ---- 按钮标准 · 主操作(同色凸起块,靠阴影区分;无彩色) ----
   收编:.link-btn / .community-publish-btn / .msg-add-btn / 登录注册按钮 */
.link-btn,
.community-publish-btn,
.msg-add-btn,
.auth-card button,
.auth-fallback a {
    background: var(--neu-accent-grad) !important;
    color: var(--text-1) !important;
    border: none !important;
    border-radius: var(--neu-radius-sub) !important;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light);
    font-weight: 700;
    transition: filter .18s ease, box-shadow .18s ease, transform .18s ease;
}
.link-btn:hover,
.community-publish-btn:hover,
.msg-add-btn:hover,
.auth-card button:hover,
.auth-fallback a:hover {
    background: var(--neu-accent-grad) !important;
    filter: brightness(1.07);
}
.link-btn:active,
.community-publish-btn:active,
.msg-add-btn:active,
.auth-card button:active,
.auth-fallback a:active {
    transform: scale(.97);
    box-shadow: var(--neu-press-sm);
}

/* ---- 按钮标准 · 普通凸起(neu 底 + 微凸;按压 = 凹陷) ----
   弹层内按钮归「弹层标准 L3」管,不重复收编 */
.neu-btn {
    background: var(--neu-bg) !important;
    color: var(--text-1) !important;
    border: none !important;
    border-radius: 10px !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 600;
    transition: box-shadow .15s ease;
}
.neu-btn:active { box-shadow: var(--neu-press-xs) !important; }

/* ---- 输入槽标准(凹陷) ----
   全站输入件共用这一套槽配方：搜索框（含浮动搜索 .ps-input，排版档见下方
   「搜索框标准形」）与表单输入件同形；排除聊天输入条(.cib-input，独立配方) */
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not(.cib-input),
select,
textarea {
    background: var(--neu-inset) !important;
    border: none !important;
    border-radius: var(--neu-radius-sub) !important;
    box-shadow: var(--neu-press-sm) !important;
    color: var(--text-1);
    caret-color: var(--primary);
    transition: box-shadow .18s ease;
}
input:not([type="checkbox"]):not([type="radio"]):focus,
select:focus,
textarea:focus {
    outline: none;
    box-shadow: var(--neu-press), 0 0 0 2.5px var(--tint-focus) !important;
}
input::placeholder, textarea::placeholder { color: var(--text-muted); }
select { appearance: none; -webkit-appearance: none; }

/* ---- 搜索框标准形（唯一真源）----
   站内每个搜索框 = 上面那条输入槽（凹陷槽，配方只此一份）+ 本节统一排版档
   （0 14px 内边距 / 16px 字号 / --text-3 提示文字；高度由 mobile-shell 的
   input min-height:44px 统一）。盒子恒由输入件自绘一次，容器只做布局：
   浮动搜索壳(.ps-panel)、好友搜索外壳(.msg-friend-search)、代理选号壳
   (.pxv-search)、列表搜索行(.wlw-search) 都不得再套一层槽——历史双槽是
   「外壳画一层凹陷 + 内层 input 被上条槽规则又画一层」，浮层里那层还带焦点
   环，读起来就是框里套框（2026-09-21 用户裁定：统一成浏览记录那种单层盒子）。 */
.ps-input,
.msg-friend-search-input,
.wlw-search-input,
.pxv-search input {
    padding: 0 14px !important;
    font-size: 16px !important;
}
.ps-input::placeholder,
.msg-friend-search-input::placeholder,
.wlw-search-input::placeholder,
.pxv-search input::placeholder { color: var(--text-3) !important; }

/* ---- chip 标准(药丸小标签,chip-renderer.js 注入 .giv-chip) ---- */
.giv-chip {
    background: transparent !important;
    color: var(--text-2) !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 600 !important;
}
.giv-chip.giv-script-link { color: var(--primary) !important; }
.giv-chip.giv-script-link:active { color: var(--primary-2) !important; }
.item-card .giv-chip { box-shadow: 2px 2px 5px var(--neu-sh-dark), -2px -2px 5px var(--neu-sh-light) !important; }

/* ============================================================
   0. 全局基础
   ============================================================ */

/* 首页 body 底色:冷灰 + 对角双氛围光渐变(与弹层 --neu-overlay-bg 同源但尺度略异,
   区分首页与弹层);!important 压过 mobile-shell.css html,body 的同源底色声明
   (shell-head 三份页面级 body{background} 死值副本 2026-10-08 收敛删除)。
   不用 background-attachment:fixed——iOS 上它把滚动打回整页逐帧重绘路径;
   App Shell 内滚时 body 本身不动,渐变本来就静止,无需 fixed。 */
body {
    background:
        radial-gradient(1100px 560px at 15% -8%, var(--canvas-hi), transparent 62%),
        radial-gradient(900px 520px at 108% 108%, var(--canvas-lo), transparent 60%),
        var(--neu-bg) !important;
    color: var(--text-1) !important;
}

/* 链接与强调色统一到 accent */
a { color: var(--primary); }
a:hover { color: var(--primary-2); }

/* 滚动条拟态化（PC 预览可见） */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
    background: var(--neu-inset);
    border-radius: var(--neu-radius-pill);
    box-shadow: var(--neu-press-xs);
}

/* focus 环统一 accent（源文件多处写 #4a90d9） */
:focus-visible {
    outline: 3px solid var(--primary);
    outline-offset: 2px;
    border-radius: 8px;
}

/* ============================================================
   1. 通用卡片 / 按钮 / 输入
   ============================================================ */

/* 「我的」等页的 .card 皮肤 → 元件标准「大卡」组;此处只留布局 padding */
.card { padding: 16px 14px; }

/* app-shell.css 的 .app-shell .app-view-my .card(0-3-0)特异性补丁:
   皮肤由标准组承担,这里只保留布局覆盖 */
.app-shell .app-view-my .card { padding: 16px 14px; }
.app-shell .app-view-my .empty { color: var(--text-3); }

/* 页面主标题：居中,字重 800,色阶 text-1 */
h1 {
    text-align: center;
    color: var(--text-1);
    font-weight: 800;
    letter-spacing: -0.01em;
}

/* 主按钮族 / 输入槽 → 已收编进文件顶部「元件标准」区 */

/* 危险按钮家族保持红系,只统一圆角语言 */
.fav-delete-x { border-radius: 12px; }

/* ============================================================
   2. 「我的」视图(my.css)
   ============================================================ */

/* 副标题与说明文字色阶 */
h2 { color: var(--text-1); font-weight: 700; }
h2 .count, .acc-title, .fav-title-text { color: var(--text-2); }
.empty, .login-tip { color: var(--text-3); }
.login-tip a { color: var(--primary); }

/* 账号卡 / 收藏卡标题行 */
.acc-title, .fav-title {
    font-weight: 700;
    letter-spacing: .02em;
}

/* 图标格（头像 / 收藏封面 / 功能入口）：手机桌面图标语言 ——
   凸起圆角方块,按压压凹;封面底从蓝灰渐变换拟态凸起 */
.acc-cover,
.fav-cover {
    background: var(--neu-bg) !important;
    border-radius: 18px !important;
    box-shadow: var(--neu-raise-sm);
    border: none;
    transition: box-shadow .18s ease, transform .18s ease;
    overflow: hidden;
}
.acc-cover:active,
.fav-cover:active {
    transform: scale(.95);
    box-shadow: var(--neu-press-sm);
}
.fav-icon.fav-dragging .fav-cover {
    box-shadow: var(--neu-raise);
    transform: scale(1.04);
}


/* 名称行 */
.acc-name, .fav-name { color: var(--text-2); font-weight: 600; }

/* 「更多」按钮 */
.fav-edit-btn {
    background: var(--neu-bg);
    color: var(--primary);
    border: none;
    border-radius: 12px;
    box-shadow: var(--neu-raise-xs);
    font-weight: 700;
    padding: 4px 14px;
    min-height: 34px;
}
.fav-edit-btn:hover { color: var(--primary-2); }
.fav-edit-btn:active { box-shadow: var(--neu-press-xs); background: var(--neu-inset); }

/* 退出账号通栏：凹陷槽里的红字条 */
.logout-bar {
    background: var(--neu-bg) !important;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-press-sm);
    border: none;
    font-weight: 700;
}
.logout-bar:hover { background: var(--neu-bg); filter: none; }
.logout-bar:active { box-shadow: var(--neu-press); }

/* 骨架屏：占位改凹陷槽 + 呼吸微光 */
.fav-icon.skeleton .sk-cover,
.fav-icon.skeleton .sk-line {
    background: var(--neu-inset);
    border-radius: 14px;
    box-shadow: var(--neu-press-xs);
    animation: neuBreath 1.6s ease-in-out infinite;
}
@keyframes neuBreath {
    0%, 100% { opacity: .55; }
    50% { opacity: 1; }
}

/* 收藏删除角标 X：红块凸起 */
.fav-delete-x {
    box-shadow: var(--neu-raise-xs);
    border: 2px solid var(--neu-bg);
}

/* 设置窗 / emoji 选择器（「我的」页浮层承载） */
.settings-window { background: transparent; }
/* 设置窗分区卡已挂「大卡」标准组（上方收编,白卡残余在此覆盖）;
   卡头图标位 = 凸起石板上的凹陷小槽 */
.set-card-ico {
    background: var(--neu-inset) !important;
    border: none;
    box-shadow: var(--neu-press-xs);
}
.emoji-picker-cell {
    background: var(--neu-bg);
    border-radius: 10px;
    box-shadow: var(--neu-raise-xs);
}
.emoji-picker-cell:hover { background: var(--neu-bg); filter: none; }
.emoji-picker-cell:active { box-shadow: var(--neu-press-xs); }

/* 表单行标签（2026-10-08 表单族归一只剩 mcpm-*；.mcpx-form-row label .req
   死规则随删——build 的 label 角标是纯文本星号，从无 .req span） */
.mcpm-form-row label { color: var(--text-2); }

/* MCP 树/面板的旧白底面板 → 凹陷槽 */
.mcpx-tree, .mcpx-detail, .pxv-search input {
    background: var(--neu-inset) !important;
    border: none !important;
    box-shadow: var(--neu-press-sm) !important;
    border-radius: var(--neu-radius-sub) !important;
}
.mcpx-branch:hover { background: var(--primary-tint); }
.mcpx-children { border-left: 1.5px solid var(--hairline); }

/* 「我的上架 / 浏览记录」空态与搜索框对齐：.wlw-search 与 .wlw-grid
   水平 padding 都是 12px，宽度天然一致；把空态做成凹陷药丸，与上方
   搜索输入框视觉对齐(同宽、同圆角语言)。空态本体 = 哨兵
   StatusTpl.empty（.lf-status-section，listview 不再插 .empty，
   2026-10-08 双空态合并锚）。 */
.wlw-grid { padding: 12px !important; }
.wlw-grid .lf-status-section {
    width: 100%;
    box-sizing: border-box;
    margin: 0 auto;
    padding: 20px 16px;
    background: var(--neu-inset);
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-press-sm);
    color: var(--text-3);
    text-align: center;
}

/* ============================================================
   3. 作品卡片 / 社区列表(itemcard.css + items.css + app-shell.css)
   ============================================================ */

/* 社区作品列表:容器透明,每个 .item-card 独立凸起卡+间距(与消息列表一致)。
   水平 padding=0,卡片贴边(与「我的」页 .card 边距口径一致);
   底部「已加载完毕」文字直接落在画布上,不带卡片底色。
   注意:不加 overflow:hidden —— 三点菜单 popup 要溢出卡片边缘向下展开。 */
.items-grid {
    background: transparent !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 10px 0 !important;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
/* .item-card 皮肤本体与按压交互动效 → static/css/itemcard.css 尾部
   「新拟态皮肤段」(裸壳规则唯一真源闸);此处只留网格派生覆盖。 */
.items-grid .item-card:first-child { border-radius: var(--neu-radius-sub) !important; }

/* 列表卡档位统一(2026-10-12 用户裁定「统一心智模型和风格」):
   2026-09-20 曾把堆叠列表卡降为单侧暗影(去掉白高光半边)治缝隙白晕——但
   单侧影观感与其余凸起石板割裂(用户 2026-10-12 反馈「作品卡片好像也
   没有阴影」)。统一回归全拟物双影,档位降一档 = --neu-raise-xs(offset 3 +
   blur 7,作用半径 ≈10px 与列表 10px 间距自洽,白高光不再泼缝,09-20 的
   缝隙白晕问题不复现);独立大卡仍走 --neu-raise,浮窗族仍走
   --neu-pop-shadow——凸起量随密度分档,同一心智模型(石板浮在画布上),
   非两套风格。消息会话列表(.msg-list-wrap)与社区列表同为 10px 间距
   凸起卡堆叠,同灶同修。闸=check_card_skin_single_source.py(档位棘轮)。 */
.items-grid .item-card,
.msg-list-wrap .item-card {
    box-shadow: var(--neu-raise-xs) !important;
}
/* 按压凹陷保留:上一条的普通态特异性更高且同样匹配 :active 时刻,
   不显式写回会压掉 itemcard.css 皮肤段的按压反馈 */
.items-grid .item-card:active,
.msg-list-wrap .item-card:active {
    box-shadow: var(--neu-press-sm) !important;
}

/* 列表底部"已加载完毕"：纯文字,无底色卡片（.inf-scroll-loading/.inf-scroll-error
   类已随 2026-09-21 双加载收敛删除产出者，2026-10-07 清死选择器；哨兵跨整行
   规则在 itemcard.css） */
.items-grid .inf-scroll-end,
.msg-list-wrap .inf-scroll-end {
    background: transparent !important;
    box-shadow: none !important;
    color: var(--text-muted) !important;
    padding: 16px 0 8px !important;
}

/* 封面框:蓝描边→拟态凸起画框 */
.item-cover-wrap {
    border: none;
    border-radius: 14px;
    box-shadow: var(--neu-raise-xs);
    background: var(--neu-bg);
}
.item-cover-wrap img { border-radius: 14px; }
.item-cover-wrap.no-image-placeholder {
    background: var(--neu-inset);
    box-shadow: var(--neu-press-xs);
    border: none;
}

/* 卡片标题/摘要色阶 */
.item-name { color: var(--text-1); font-weight: 700; }
.item-card-footer { color: var(--text-3); }

/* 角标药丸化（底色透明度统一在 itemcard.css .card-badge 体系，0.3 半透明） */
.card-badge { border-radius: var(--neu-radius-pill); }
.card-badge-pending { background: color-mix(in srgb, var(--primary) 30%, transparent); }

/* 浮动搜索壳(PullSearch .ps-panel):只做布局,槽由 .ps-input 自绘(搜索框标准形) */
.ps-panel {
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border: none !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 0 !important;
}
/* 取消键:浮层无底,压在列表内容上也要读得清 → 独立凸起小块(同普通次级按钮) */
.ps-cancel {
    flex: none;
    height: 36px !important;
    padding: 0 12px !important;
    border: none !important;
    border-radius: 10px !important;
    background: var(--neu-bg) !important;
    box-shadow: var(--neu-raise-xs) !important;
    color: var(--text-1) !important;
}
.ps-cancel:active { box-shadow: var(--neu-press-xs) !important; color: var(--text-2) !important; }

/* 发布按钮:紫色渐变凸起 */
.community-publish-btn {
    background: var(--neu-accent-grad) !important;
    color: #fff !important;
    border: none !important;
    border-radius: var(--neu-radius-sub) !important;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light) !important;
    font-weight: 700;
}
.community-publish-btn:hover { background: var(--neu-accent-grad) !important; filter: brightness(1.07); }
.community-publish-btn:active { transform: scale(.97); }
/* 发布按钮内部(+号 + 文字)强制褐色,覆盖 items.css 的 #fff */
.community-publish-btn,
.community-publish-btn *,
.community-publish-btn svg,
.community-publish-btn svg * {
    color: var(--text-1) !important;
    fill: var(--text-1) !important;
}

/* 搜索按钮:凸起圆钮,图标褐色（原第 7 节第二份定义并入此处：border/radius/active
   生效值保留，background/color/box-shadow 以本块 !important 为准，2026-10-08 合并） */
.community-search-btn {
    background: var(--neu-accent-grad) !important;
    color: var(--text-1) !important;
    border: none;
    border-radius: 12px;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light) !important;
}
.community-search-btn:active { box-shadow: var(--neu-press-xs); }
.community-search-btn svg,
.community-search-btn svg * {
    fill: none !important;
    stroke: var(--text-1) !important;
}
.community-search-btn:hover { filter: brightness(1.07); }

/* 社区 feed 导航(频道 tabs):容器透明,每个 option 凸起药丸 */
.community-feed-nav { background: transparent !important; }
.community-feed-option {
    background: var(--neu-bg) !important;
    color: var(--text-2) !important;
    border: none !important;
    border-radius: var(--neu-radius-pill) !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 600 !important;
    transition: box-shadow .16s ease, color .16s ease;
}
.community-feed-option:hover { background: var(--neu-bg) !important; }
.community-feed-option.is-active {
    background: var(--neu-inset) !important;
    color: var(--primary) !important;
    box-shadow: var(--neu-press-xs) !important;
    font-weight: 700 !important;
}

/* 分区下拉菜单:去白边框/白底,容器为透明(选项各自凸起);浮窗阴影同 L3 深色柔影 */
.community-zone-menu {
    background: var(--neu-bg) !important;
    border: none !important;
    border-radius: var(--neu-radius-sub) !important;
    box-shadow: var(--neu-pop-shadow) !important;
    padding: 8px !important;
    gap: 6px !important;
}
/* 分区选项:独立凸起按钮,无白边框 */
.community-zone-option {
    background: var(--neu-bg) !important;
    color: var(--text-1) !important;
    border: none !important;
    border-radius: 12px !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 600 !important;
    text-align: center !important;
    transition: box-shadow .15s ease;
}
.community-zone-option:hover { background: var(--neu-bg) !important; }
.community-zone-option:active { box-shadow: var(--neu-press-xs) !important; }
.community-zone-option.is-current {
    background: var(--neu-inset) !important;
    color: var(--primary) !important;
    box-shadow: var(--neu-press-xs) !important;
    font-weight: 700 !important;
}

/* ============================================================
   4. 消息视图(messages.css)
   ============================================================ */

/* .msg-header 皮肤已并入「浮动层」区(--neu-float-bg);此处只留文字色 */
.msg-header h1 { color: var(--text-1); font-weight: 800; }

/* 会话列表:独立凸起卡片 + 间距。水平 padding=12px,卡片与边缘留合理间隙
   (与「我的」页 .container 横向 padding 对齐)。 */
.msg-list-wrap {
    background: transparent !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 10px 12px !important;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
/* 卡片壳按压/阴影由 itemcard.css 新拟态皮肤段统一承载（.item-card 全族含
   会话卡）。曾有 .item-card.conv-card 按压副本：同特异性、级联在 itemcard.css
   之后，⋮ 菜单打开时把 .menu-open 的 transform:none 压回 scale(.99)，会话卡
   菜单先被下一张卡盖住再浮上来（2026-09-10 统一按压进真源，副本删除）。
   死类 .msg-item / .conversation-card 随之退役。 */

/* 加载完毕提示已统一在第 3 节定义 */

/* 会话头像底槽 */
.conv-avatar {
    border-radius: 16px;
    box-shadow: var(--neu-raise-xs);
}

/* 会话操作菜单 */
.msg-action-btn {
    background: var(--neu-bg);
    border: none;
    border-radius: 12px;
    box-shadow: var(--neu-raise-xs);
    color: var(--text-2);
    font-weight: 600;
}
/* .msg-action-btn:hover 与 messages.css 逐字相同，皮肤层副本 2026-10-08 删除；
   :active 是真覆盖（box-shadow 按压，messages.css 只改 background），保留 */
.msg-action-btn:active { box-shadow: var(--neu-press-xs); }

/* 空状态 */
.msg-empty-icon {
    color: var(--text-muted);
    background: var(--neu-inset);
    border-radius: 24px;
    box-shadow: var(--neu-press-sm);
    display: inline-grid;
    place-items: center;
}

/* ============================================================
   5. 登录/注册(auth.css)
   ============================================================ */

.auth-card {
    background: var(--neu-bg) !important;
    border-radius: var(--neu-radius-card) !important;
    box-shadow: var(--neu-raise) !important;
    padding: 34px 28px !important;
}
.auth-card h1 { font-weight: 800; letter-spacing: -.01em; }
.auth-card label { color: var(--text-2); font-weight: 600; }
.auth-card input {
    background: var(--neu-inset);
    border: none;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-press-sm);
}
.auth-card input:focus { border-color: transparent; }
.auth-card button:disabled { background: var(--neu-inset); color: var(--text-muted); filter: none; }
.auth-msg { color: var(--danger); }
.auth-captcha { color: var(--text-3); }
.auth-fallback {
    background: var(--neu-inset);
    border: none;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-press-xs);
    color: var(--text-2);
}
.auth-switch { color: var(--text-3); }
.auth-switch a { color: var(--primary); font-weight: 700; }
.auth-home a { color: var(--text-muted); }

/* ============================================================
   6. 弹窗族细部(PlainView / 下拉组件)
   ============================================================ */

/* confirm 对话框按钮 */
/* confirm 浮窗同 L2:普通深色柔影,边缘不发光(2026-09-20 用户裁定) */
.ms-confirm { border-radius: var(--neu-radius-card); box-shadow: var(--neu-pop-shadow); }
.ms-confirm-actions button {
    background: var(--neu-bg);
    border: none;
    box-shadow: var(--neu-raise-xs);
    border-radius: 14px;
}
.ms-confirm-actions button.ms-confirm-ok {
    background: var(--neu-accent-grad);
    color: #fff;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light);
}

/* toast:深色改拟态深岩 */
.ms-toast {
    background: rgba(92, 64, 51, .95);
    border-radius: 14px;
    box-shadow: var(--neu-raise-sm);
}
.ms-toast.success { background: rgba(90, 161, 105, .96); }
.ms-toast.error { background: rgba(229, 62, 62, .96); }
.ms-toast.info { background: rgba(92, 64, 51, .96); }

/* PlainView 顶栏(runtime/content/plainview.css)
   真实容器 = .pv-head(sticky 吸顶 + 背景),.pv-titlebar 是可视标题栏。
   顶栏作为独立浮层(不透明底 + 底部分隔阴影)与底部内容区分层。
   不加毛玻璃:吸顶栏在滚动路径上,backdrop-filter 每帧重 blur。
   整页铬件 .pc-head(shared/page-chrome.css,用户管理等整页直连的 ‹/标题/×
   吸顶栏)同规格收编——源文件同为 #f7fafc 白底,不收编即整页顶部白带。 */
.pv-head, .pc-head {
    background: var(--neu-float-bg) !important;
    border-bottom: none !important;
    box-shadow: 0 1px 0 var(--hairline),
                0 2px 10px rgba(163, 177, 198, .2) !important;
}
.pv-close { color: var(--text-2); }
.pv-close:active { background: var(--neu-inset); }

/* 浮动搜索框(pullsearch.css)：不再单独拟态化——盒子走上面的「搜索框标准形」
   （外壳透明 + .ps-input 凹陷槽），取消键走普通次级按钮（凸起）。 */

/* ============================================================
   7. App Shell 视图骨架(app-shell.css)
   ============================================================ */

/* App Shell 视图骨架(app-shell.css):所有视图透明,横滑衔接无色差 */
.app-view,
.app-view-community,
.app-view-messages,
.app-view-my {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
}
.app-shell .app-view > .container { background: transparent; }

/* 画布透明,用 body 的 fixed 渐变(横滑切视图时渐变不偏移,衔接连续) */
.app-canvas, .app-root {
    background: transparent !important;
}

/* ============================================================
   8. 作品详情(itemview.css,.giv 族全量收编)
   ------------------------------------------------------------
   详情页本体 = L1 全屏弹层(.giv 透明已并入顶部 L1 名单,底色归
   --neu-overlay-bg 冷灰)。本节管内容面:白/蓝白面板 → 凸起卡或
   凹陷槽,蓝系强调色 → 褐色 --primary 族,markdown 排版对齐聊天窗
   .gct-md 同款(技能查看器 .skv-md 同一套,合并写)。
   深色件按既定决策保留:评论区输入胶囊(.giv-compose-pill 深色毛玻璃,
   与 PullSearch 同决策)、语义色(点赞红/收藏金/评分琥珀/当前版本绿)。
   (本节原 .iv-cover/.iv-actions/.iv-tags 系为死引用,已按真实类名重写。)
   ============================================================ */

/* ---- 顶图区 ---- */
.giv-img { background: var(--neu-inset); color: var(--text-muted); }
.giv-img.giv-emoji, .giv-img.pending { color: var(--text-3); }

/* ---- 顶栏操作钮(点赞/收藏/分享/导航)与计数 ---- */
/* .giv-bact:hover 与 itemview.css 逐字相同，皮肤层副本 2026-10-08 删除 */
.giv-bact { color: var(--text-2); }
.giv-bact .giv-count { color: var(--text-muted); }

/* ---- 标题区 / 正文基础文字 ---- */
.giv { color: var(--text-1); }
.giv-id-badge, .giv-ctime { color: var(--text-muted); }
.giv-ctime-btn { color: var(--primary); }
/* :active 逐字副本(itemview.css) 2026-10-08 删 */
.giv-forked-from { color: var(--primary); }
.giv-forked-from:active { color: var(--primary-2); }
.giv-desc { color: var(--text-1); }
.giv-desc-placeholder { color: var(--text-muted); }

/* ---- 「导航」浮层(.giv-outline,AppWindows 层) ---- */
.giv-outline-item { color: var(--text-1); }
.giv-outline-item[data-level="3"], .giv-outline-item[data-level="4"] { color: var(--text-2); }
.giv-outline-sep { background: var(--hairline); }
/* 阅读位置当前章节:浅蓝高亮 → 凹陷 + 褐色标记条(选中=压凹的语言) */
.giv-outline-item.cur { background: var(--neu-inset); color: var(--primary); }
.giv-outline-item.cur::before { background: var(--primary); }

/* ---- 文内目录块(.giv-mdtoc):浅蓝圆角卡 → 凹陷槽 ---- */
.giv-mdtoc {
    background: var(--neu-inset);
    border: none;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-press-sm);
}
.giv-mdtoc-title { color: var(--text-2); }
.giv-mdtoc .giv-mdtoc-item { color: var(--text-1); }

/* ---- markdown 排版(.giv-desc 正文 + .skv-md 技能查看器,同一套):
   蓝调阅读主题 → 拟态中性色;数值口径 = 聊天窗 .gct-md(第 10 节) ---- */
.skv-md { color: var(--text-1); }
.giv-desc ::selection, .skv-md ::selection { background: var(--tint-soak); }
.giv-desc h1, .giv-desc h2, .giv-desc h3, .giv-desc h4, .giv-desc h5, .giv-desc h6,
.skv-md h1, .skv-md h2, .skv-md h3, .skv-md h4, .skv-md h5, .skv-md h6 { color: var(--text-1); }
.giv-desc h3, .skv-md h3 { color: var(--primary); }
.giv-desc h5, .skv-md h5 { color: var(--text-2); }
.giv-desc h6, .skv-md h6 { color: var(--text-3); }
.giv-desc h1, .skv-md h1 {
    border-image: linear-gradient(90deg, var(--primary), var(--primary-tint)) 1;
}
.giv-desc h2::before, .skv-md h2::before {
    background: linear-gradient(180deg, var(--primary), var(--primary-2));
}
.giv-desc li::marker, .skv-md li::marker { color: var(--primary); }
.giv-desc li input[type="checkbox"], .skv-md li input[type="checkbox"] { accent-color: var(--primary); }
.giv-desc code, .skv-md code { background: var(--primary-tint); color: var(--primary-2); }
.giv-desc pre, .skv-md pre { background: var(--stripe); box-shadow: none; }
.giv-desc pre code, .skv-md pre code { color: var(--text-1); }
.giv-desc th, .giv-desc td, .skv-md th, .skv-md td { border-bottom-color: var(--hairline); }
.giv-desc th, .skv-md th { background: var(--stripe); color: var(--text-2); }
.giv-desc tbody tr:nth-child(even) td, .skv-md tbody tr:nth-child(even) td { background: var(--stripe); }
.giv-desc blockquote, .skv-md blockquote {
    background: var(--stripe);
    border-left-color: var(--tint-edge);
    color: var(--text-2);
}
.giv-desc a, .skv-md a { color: var(--primary); border-bottom-color: var(--tint-edge); }
.giv-desc a:hover, .skv-md a:hover { color: var(--primary-2); border-bottom-color: var(--primary-2); }
.giv-desc hr, .skv-md hr {
    background: linear-gradient(90deg, transparent, var(--hairline) 20%,
                var(--hairline) 80%, transparent);
}
.giv-desc kbd, .skv-md kbd {
    background: var(--neu-inset);
    border-color: var(--hairline);
    color: var(--primary);
}
.giv-desc strong, .skv-md strong { color: var(--text-1); }
.giv-desc del, .skv-md del { color: var(--text-3); }

/* ---- 引用/版本面板(.giv-panel / .giv-entry 系) ---- */
.giv-panel-empty { color: var(--text-muted); }
.giv-panel-title { color: var(--text-2); }
/* 条目卡:灰白小卡 → 凸起迷你卡 */
.giv-entry {
    background: var(--neu-bg);
    border: none;
    border-radius: 10px;
    box-shadow: var(--neu-raise-xs);
}
.giv-entry.clickable-card:active { background: var(--neu-inset); box-shadow: var(--neu-press-xs); }
.giv-entry-menu-trigger:hover { background: var(--neu-inset); color: var(--primary); }
.giv-entry-menu-item { color: var(--text-1); }
/* 条目 ⋮ 菜单 → 弹层标准 L3 小浮卡同款(深色投影防泛白) */
.giv-entry-menu-popup {
    background: var(--neu-bg);
    border: none;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-pop-shadow);
}
/* 版本历史卡片:白底描边卡 → 凸起卡;贴合列表(.giv-vlist)形态去阴影
   只留 --neu-line 色分隔线(连续行语言) */
.giv-vcard {
    background: var(--neu-bg);
    border: none;
    border-radius: 12px;
    box-shadow: var(--neu-raise-xs);
}
.giv-vcard.clickable-card:active { background: var(--neu-inset); }
.giv-vlist .giv-vcard { border-top-color: var(--hairline); box-shadow: none; }
.giv-vcard-avatar { background: var(--neu-inset); }
.giv-vbadge { color: var(--primary); }
.giv-vcard-title { color: var(--text-1); }
.giv-vcard-title.none, .giv-vcard-time, .giv-vcard-detail.none { color: var(--text-muted); }
.giv-vcard-detail { color: var(--text-3); }

/* ---- 评论区(列表文字/链接;输入胶囊深色毛玻璃保留不动) ---- */
.giv-clist .comment-time { color: var(--text-muted); }
.giv-clist .comment-time a, .giv-clist .comment-reply, .giv-clist .comment-toggle { color: var(--primary); }
/* 回复框:灰白小块 → 凹陷槽;「回复 @xxx」前缀同步中性化 */
.giv-clist .comment-reply-item { background: var(--neu-inset); border-radius: 10px; }
.giv-clist .comment-reply-to { background: var(--primary-tint); color: var(--primary); }
/* 评论空态统一走哨兵 StatusTpl.empty（.lf-status-section），listview 不再插
   .empty，故 .giv-cempty 死选择器随 2026-10-08 双空态合并整删 */
.giv-compose-guest { color: var(--text-3); }

/* ---- 评论预览卡(.giv-cprev):白底描边卡 → 凸起卡 ---- */
.giv-cprev {
    background: var(--neu-bg);
    border: none;
    border-radius: var(--neu-radius-sub);
    box-shadow: var(--neu-raise-xs);
}
.giv-cprev-more { color: var(--primary); }
/* .giv-cprev-more:active 逐字副本(itemview.css) 2026-10-08 删 */
/* .giv-cprev-empty 同上：空态哨兵统一，死选择器 2026-10-08 双空态合并整删 */

/* ============================================================
   9. 杂项收敛(残余写死色)
   ============================================================ */

/* 浅蓝底残余(头像底/高亮行/悬浮)统一拟态内槽 */
.avatar { background: var(--neu-inset); color: var(--primary); }

/* 加载态 */
.loading, .spinner { color: var(--primary); }

/* 选中文本 */
::selection { background: var(--tint-soak); }

/* ============================================================
   10. 聊天窗口(chatview.js 注入,.gct 前缀 —— !important 压制 JS 样式)
   ============================================================ */

/* 窗体底:透明 —— 由文件顶部「弹层标准」L1 结构件规则统一承担,此处不重复 */
.gct {
    color: var(--text-1) !important;
}

/* 消息流留白微调 */
.gct-msgs { padding: 16px 14px 22px !important; }

/* 气泡统一:己方/对方同样式(冷灰底 + 凸起阴影 + 圆角),仅方向不同
   ——己方右对齐且右下圆角小,对方左对齐且左下圆角小 */
.gct-msg.user .gct-bubble {
    background: var(--neu-bg) !important;
    color: var(--text-1) !important;
    border-radius: 20px 20px 7px 20px !important;
    box-shadow: 5px 5px 11px var(--neu-sh-dark), -5px -5px 11px var(--neu-sh-light) !important;
}

/* 对方气泡 */
.gct-msg.peer .gct-bubble {
    background: var(--neu-bg) !important;
    color: var(--text-1) !important;
    border-radius: 20px 20px 20px 7px !important;
    box-shadow: 5px 5px 11px var(--neu-sh-dark), -5px -5px 11px var(--neu-sh-light) !important;
}

/* 错误气泡 */
.gct-bubble.error {
    background: var(--danger-tint) !important;
    color: var(--danger) !important;
    box-shadow: var(--neu-raise-xs) !important;
}

/* 气泡内 markdown 元素拟态化(己方/对方气泡已同底色,共用一套) */
.gct-md code {
    background: var(--primary-tint) !important;
    color: var(--primary-2) !important;
}
.gct-md pre { background: var(--stripe) !important; border-radius: 12px !important; }
.gct-md a { color: var(--primary) !important; }
.gct-md blockquote { border-left-color: var(--tint-edge) !important; }
.gct-md mark { background: #FFE9A8 !important; }
.gct-md th, .gct-md td { border-color: var(--hairline) !important; }
.gct-md th { background: var(--stripe) !important; }
.gct-md hr { border-top-color: var(--hairline) !important; }
/* 正文媒体（引擎媒体分派 2026-10-11）：![](视频/音频地址) 渲染原生播放器，
   气泡内约束宽度防撑破；图片本就有 max-width 约束。 */
.gct-md video.md-video { max-width: 100%; border-radius: 12px !important; background: #000; }
.gct-md audio.md-audio { width: 100%; height: 40px; }

/* 时间分隔条:灰药丸 → 凹陷槽药丸 */
.gct-time-divider .gct-time-text {
    background: var(--neu-inset) !important;
    color: var(--text-3) !important;
    border-radius: var(--neu-radius-pill) !important;
    box-shadow: var(--neu-press-xs) !important;
}

/* 欢迎语 */
.gct-welcome { color: var(--text-3) !important; }

/* 浮窗形态(pv-float):白底浮窗 → 拟态凸起浮岛;阴影同浮窗标准深色柔影,
   边缘不做白色高光(2026-09-20 用户裁定) */
.pv-overlay.pv-float .pv-scroll {
    border: none !important;
    border-radius: 22px !important;
    background: var(--neu-bg) !important;
    box-shadow: var(--neu-pop-shadow) !important;
}

/* ============================================================
   11. 聊天输入条(input-bar.js 注入,.cib 前缀 —— !important)
   ============================================================ */

.cib {
    background: var(--neu-bg) !important;
    border-top: none !important;
    box-shadow: -1px -1px 2px var(--neu-sh-light) inset, 10px 10px 24px var(--neu-sh-dark);
}

/* 输入框:边框白底 → 凹陷槽 */
.cib-input {
    background: var(--neu-inset) !important;
    border: none !important;
    border-radius: 18px !important;
    box-shadow: var(--neu-press-sm) !important;
    color: var(--text-1) !important;
    caret-color: var(--primary) !important;
}
.cib-input:focus { box-shadow: var(--neu-press), 0 0 0 2.5px var(--tint-focus) !important; }

/* 好友搜索框:外壳只做布局,槽由 .msg-friend-search-input 自绘(搜索框标准形);
   放大镜图标去掉(凹陷槽里的图标是多余一层) */
.msg-friend-search {
    background: transparent !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
}
.msg-friend-search-icon { display: none !important; }

/* + 号按钮:凸起圆钮 */
.cib-plus {
    background: var(--neu-bg) !important;
    border: none !important;
    border-radius: 15px !important;
    box-shadow: var(--neu-raise-xs) !important;
    color: var(--primary) !important;
    font-weight: 700 !important;
}
.cib-plus:active { box-shadow: var(--neu-press-xs) !important; }


.cib-guest { color: var(--text-3) !important; }

/* ============================================================
   12. 用户主页(profileview.js 注入,.gfp 前缀 —— !important)
   ============================================================ */

.gfp {
    background: transparent !important;
    color: var(--text-1) !important;
}

/* 头部资料卡皮肤 → 元件标准「大卡」组;此处只留布局 padding */
.gfp-head {
    padding: 18px 16px !important;
}

.gfp-name { color: var(--text-1) !important; font-weight: 800 !important; }
.gfp-name.editable:hover, .gfp-name.editable:focus { background: var(--primary-tint) !important; color: var(--primary-2) !important; }
.gfp-name-real, .gfp-uname, .gfp-since, .gfp-views { color: var(--text-3) !important; }

/* 昵称编辑输入框 */
.gfp-name-edit {
    background: var(--neu-inset) !important;
    border: none !important;
    border-radius: 10px !important;
    box-shadow: var(--neu-press-xs) !important;
    color: var(--text-1) !important;
}
.gfp-name-edit:focus { box-shadow: var(--neu-press-xs), 0 0 0 2.5px var(--tint-focus) !important; }

/* 角色标签:灰药丸 → 凸起药丸 */
.gfp-tag-role {
    background: var(--neu-bg) !important;
    color: var(--text-2) !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 700 !important;
}
.gfp-tag-role.is-admin {
    background: var(--neu-accent-grad) !important;
    color: #fff !important;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light) !important;
}

/* 动作按钮排:聊天(主操作 accent)/好友(次操作凸起)/管理(⋯) */
.gfp-actions .gfp-btn { border-radius: 15px !important; }
.gfp-chat-btn {
    background: var(--neu-accent-grad) !important;
    color: var(--text-1) !important;
    box-shadow: 4px 4px 10px var(--neu-sh-dark), -4px -4px 10px var(--neu-sh-light) !important;
}
.gfp-chat-btn:active { background: var(--neu-accent-grad) !important; filter: brightness(.92) !important; }
.gfp-friend-btn {
    background: var(--neu-bg) !important;
    color: var(--primary) !important;
    border: none !important;
    box-shadow: var(--neu-raise-xs) !important;
    font-weight: 700 !important;
}
.gfp-friend-btn:active { box-shadow: var(--neu-press-xs) !important; }
.gfp-friend-btn.added { background: var(--neu-bg) !important; color: var(--danger) !important; }
/* 待对方同意 / 撤回请求:凹陷(已按下)状态,背景稍深 + inset 阴影 */
.gfp-friend-btn.pending {
    background: var(--neu-inset) !important;
    color: var(--text-1) !important;
    box-shadow: var(--neu-press-xs) !important;
}
.gfp-friend-btn.incoming { background: var(--neu-inset) !important; color: var(--text-muted) !important; box-shadow: var(--neu-press-xs) !important; }
.gfp-friend-btn.blocked, .gfp-friend-btn.blocked-by-me { background: var(--neu-bg) !important; color: var(--danger) !important; }
.gfp-actions .gfp-admin-wrap .gfp-btn {
    background: var(--neu-bg) !important;
    color: var(--text-2) !important;
    border: none !important;
    box-shadow: var(--neu-raise-xs) !important;
}

/* 管理弹层菜单 → 见下方「统一弹出菜单真源」块(.gfp-admin-popup 与 .item-menu-popup 共用) */

/* 区块标题与空态 */
.gfp-section { color: var(--text-1) !important; font-weight: 700 !important; }
.gfp-section .gfp-count { color: var(--text-muted) !important; }
/* （.gfp-empty 空态规则已删：DOM 构建侧从不产出——2026-09-28 死代码清理） */

/* 主页作品列表(复用 .items-grid 石板语言) */
.gfp .items-grid { margin-top: 4px; }

/* ============================================================
   13. chips → 已收编进文件顶部「元件标准」区
   ============================================================ */

/* 卡片内部子容器全透明(消除 tags/footer 区白底) */
.item-card .item-info,
.item-card .item-info-top,
.item-card .item-tags,
.item-card .item-card-footer {
    background: transparent !important;
}

/* ============================================================
   14. 会话卡细部(conversationcard.js/messages.css 协作)
   ============================================================ */

.conv-name { color: var(--text-1) !important; font-weight: 700 !important; }
.conv-preview, .conv-preview-empty { color: var(--text-3) !important; }
.conv-time { color: var(--text-muted) !important; }

/* 未读徽标:accent 凸起药丸 */
.conv-unread {
    background: var(--neu-accent-grad) !important;
    color: #fff !important;
    border-radius: var(--neu-radius-pill) !important;
    box-shadow: 2px 2px 5px var(--neu-sh-dark), -2px -2px 5px var(--neu-sh-light) !important;
    font-weight: 700 !important;
}

/* 置顶会话卡:整体轻凹(石板上「压着」的语言) */
.conv-card-pinned { background: var(--pin-wash) !important; }

/* 代理信号灯保持语义色,只柔化阴影 */
.conv-agent-dot[data-state="online"] { box-shadow: 0 0 0 2px var(--ok-tint) !important; }

/* ============================================================
   15. 浮动层(底部 Tab 栏 / 顶部头栏)—— 统一底色真源
   ------------------------------------------------------------
   所有「浮在内容之上」的层共用 --neu-float-bg(不透明冷灰,与画布同色,
   靠阴影分层)。不用毛玻璃:这些层常驻在屏且内容从其下滚动穿过,
   backdrop-filter 每帧重 blur 是滚动掉帧大户(2026-09-09 退役;
   mobile-shell.css 本轮同向删除了 Tab 栏毛玻璃,两处口径一致)。
   防挡:顶部由 sticky 头栏自身占位(自然顶垫),底部由滚动容器
   ::after 透明垫片承担。
   ============================================================ */

/* 底部 Tab:不透明冷灰浮岛(与画布同色);分层只靠 1px 上沿发丝线,
   不加 0 0 Npx 柔光光晕(2026-09-21 用户裁定:浮层白光是不必要的发光,去除) */
.bottom-tab-bar {
    bottom: calc(8px + env(safe-area-inset-bottom, 0px)) !important;
    width: calc(100% - 24px) !important;
    padding-bottom: 0 !important;
    height: var(--tab-h) !important;
    border-radius: 24px !important;
    background: var(--neu-float-bg) !important;
    box-shadow: 0 -1px 0 var(--hairline) !important;
}
.bottom-tab-bar .tab { color: var(--text-3); font-weight: 500; }
/* 选中态:不用颜色变化(去紫色),只靠图标凹陷表达 */
.bottom-tab-bar .tab.active { color: var(--text-2); font-weight: 500; }

/* 顶部头栏(消息页标题栏 / 社区页标题栏 + 分类导航):
   与底部 Tab 栏同底色。sticky 保持在顶部(本身在流内 = 自然顶垫,
   内容首项从头栏下方开始,滚动时从头栏后滑过)。 */
.msg-header,
.community-feed-nav {
    background: var(--neu-float-bg) !important;
    border-bottom: none !important;
    box-shadow: 0 1px 0 var(--hairline) !important;
}
/* ============================================================
   底部防挡占位标准(透明垫片,唯一真源)
   ------------------------------------------------------------
   滚动容器逐视图认领:我的 = .app-view-my > .container;
   消息 = .app-view-messages 自身(该视图 partial 无 .container,
   子节点 = header.msg-header + main.msg-list-wrap,sticky 头栏
   原设计即相对 slide 吸附——外层锁 hidden 会整页锁死,2026-09-09);
   社区 = .community-feed-slide。
   每个滚动容器末尾垫一个完全透明的 ::after 占位,把末行内容顶过 Tab 栏。
   ============================================================ */
/* canvas 不再用 padding 垫高(padding 区永远不是内容区,且会显示为
   一截"挡板");画面延伸到底,防挡统一由下方 ::after 透明垫片承担 */
.app-canvas, .app-root {
    padding-bottom: 0 !important;
}
/* 我的:外层 slide 只做壳,不滚动,无 padding(滚动下沉到 .container) */
.app-shell .app-view-my {
    overflow: hidden !important;
    padding: 0 !important;
}
/* 消息:slide 自身保持滚动容器(承接原 .app-view 的 overflow-y:auto),
   否则视图内没有任何滚动容器,内容增长即被裁切且无法滑动 */
.app-shell .app-view-messages {
    overflow-y: auto !important;
    overflow-x: hidden !important;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: 0 !important;
}
/* 显示范围下沉到 .container:让它成为滚动容器,接管原 slide 的 padding */
.app-shell .app-view-my > .container {
    padding: 12px 10px !important;
    height: 100% !important;
    overflow-y: auto !important;
    overflow-x: hidden !important;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    box-sizing: border-box;
}
/* 垫片挂在「实际滚动容器」末尾(透明,只顶内容不占视觉) */
.app-shell .app-view-my > .container::after,
.app-shell .app-view-messages::after,
.app-shell .community-feed-slide::after {
    content: '' !important;
    display: block !important;
    height: calc(var(--tab-h) + 20px + env(safe-area-inset-bottom, 0px)) !important;
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
    pointer-events: none !important;
}
/* active 指示槽尺寸/居中收归 mobile-shell.css 单一真源（纯图标形态
   42px 圆槽），皮肤层不再二次覆盖。 */

/* ============================================================
   17. (已并入文件顶部「弹层标准」框架块:弹层底色 / 弹出菜单
       全部收编到 L1/L3 标准,此处不再重复维护)
   ============================================================ */

/* ============================================================
   16. 「我的」页功能入口(qe 快捷入口,my.css 蓝灰渐变残余)
   ============================================================ */

.qe-emoji {
    background: var(--neu-bg) !important;
    border-radius: 18px !important;
    box-shadow: var(--neu-raise-sm) !important;
    border: none !important;
}
.qe-item:hover .qe-emoji { background: var(--neu-bg) !important; }
.qe-item:active .qe-emoji { box-shadow: var(--neu-press-sm) !important; }

/* ============================================================
   18. 小弹层底色统一(加好友 / 分享好友 / 通讯录;技能查看器 .skv-body
       底色已并入顶部 L1 名单,正文排版已并入第 8 节 markdown 块)
   ============================================================ */

/* 加好友表单(PlainView 内小卡片;输入件归全局输入槽标准):
   取消 = 凸起次操作;提交保留 --primary 语义底(token 已是褐色,白字可读);
   危险动作(撤回请求)= 去红底描边,归 L3 危险语义(红字) */
.add-friend-form .cancel-btn {
    background: var(--neu-bg);
    box-shadow: var(--neu-raise-xs);
}
.add-friend-form .cancel-btn:active { background: var(--neu-inset); box-shadow: var(--neu-press-xs); }
.add-friend-form .submit-btn:active { background: var(--primary-2); }
.add-friend-form .submit-btn.danger {
    background: var(--neu-bg);
    border: none;
    color: var(--danger);
    box-shadow: var(--neu-raise-xs);
}
.add-friend-form .submit-btn.danger:active { background: var(--neu-inset); box-shadow: var(--neu-press-xs); }

/* 分享好友弹层:列表壳 = 凸起卡,行分隔线/按压中性化 */
.sf-list {
    background: var(--neu-bg);
    border: none;
    box-shadow: var(--neu-raise-xs);
}
.sf-row:not(:last-child) { border-bottom-color: var(--hairline); }
.sf-row:active { background: var(--neu-inset); }
.sf-cancel {
    background: var(--neu-bg);
    box-shadow: var(--neu-raise-xs);
}
.sf-cancel:active { background: var(--neu-inset); box-shadow: var(--neu-press-xs); }
.sf-submit:active { background: var(--primary-2); }

/* 通讯录弹层(.msg-friend-*):壳已透明归 L1;行 = 连续行语言(不拆卡,
   行间分隔线中性化);分组标题条 = 凹陷色带;右侧字母索引条 = 凸起小浮条 */
.msg-friend-group-head {
    background: var(--neu-inset);
    border-top-color: var(--hairline);
}
.msg-friend-item { background: transparent; border-bottom-color: var(--hairline); }
.msg-friend-item:hover { background: var(--primary-tint); }
.msg-friend-item:active { background: var(--neu-inset); }
.msg-friend-index {
    background: var(--neu-bg);
    box-shadow: var(--neu-raise-xs);
}

/* 减弱动效:拟态过渡一并压平 */
@media (prefers-reduced-motion: reduce) {
    .card, .acc-cover, .fav-cover, .item-card, .community-feed-option,
    .msg-action-btn, .link-btn, .gct-bubble, .cib-input {
        transition: none !important;
    }
}
/* ============================================================
   黑夜模式组件级补裁（全站唯一 dark 组件覆盖区）
   ------------------------------------------------------------
   原则：配色尽量走 token（token 换色自动适配，见文件头部暗值块）；
   只有「token 表达不了 / 亮色字面量在暗底读不清」的少数量才进本区。
   新组件在暗底下的适配缺失，优先回去把亮色字面量收敛成 token，
   而不是往这里堆规则。
   ============================================================ */
/* 高亮 mark：亮色黄底在暗底上刺眼、且与页面亮色文字对比破裂，换暖金浸染 */
:root[data-theme="dark"] .gct-md mark,
:root[data-theme="dark"] .giv-desc mark,
:root[data-theme="dark"] .skv-md mark,
:root[data-theme="dark"] mark {
    background: rgba(255, 233, 168, .22) !important;
    color: var(--text-1) !important;
}
/* 管理面板角色芯片 / 徽标：亮值粉彩底字面量（#f0f5ff 底）在暗底整枚发亮，
   换同色相低透明浸染 + 提亮文字；灰阶芯片走白系低透明，文字沿用 token */
:root[data-theme="dark"] .panel-scope .role-chip {
    background: rgba(90, 103, 216, .16);
    color: #a8b2f2;
    border-color: rgba(90, 103, 216, .38);
}
:root[data-theme="dark"] .panel-scope .role-chip-more,
:root[data-theme="dark"] .panel-scope .role-chip-locked,
:root[data-theme="dark"] .panel-scope .badge-locked {
    background: rgba(255, 255, 255, .07);
    border-color: rgba(255, 255, 255, .16);
}
:root[data-theme="dark"] .panel-scope .badge-locked { color: var(--text-3); }
