/**
 * Partner 库 · 前台样式
 * 文件：static/partner/partner.css
 *
 * 规矩（同 knowledge / edu）：
 *   · 只准用 var(--zai-*)，不写死色值 —— 否则主题切换会花，且过不了门禁 hex 规则；
 *   · 不重定义 :root 变量，令牌只在 static/zai/ui/tokens.css 里维护；
 *   · 类名统一 p- 前缀（partner），避免与站内 .card / .btn 冲突。
 */

/* ------------------------------------------------------------------ 列表页 */
.p-wrap { max-width: 860px; margin: 0 auto; padding: 32px 20px 64px; }
.p-wrap--chat { max-width: 820px; padding: 20px 16px 160px; }
.p-title { font-size: var(--zai-font-h2, 22px); margin: 0 0 6px; color: var(--zai-text-primary); }
.p-lead { color: var(--zai-text-secondary); margin: 0 0 24px; font-size: var(--zai-font-body, 14px); }
.p-grid { display: grid; gap: 14px; }

.p-card {
    display: block; background: var(--zai-surface); border: 1px solid var(--zai-border);
    border-radius: var(--zai-radius-lg); padding: 18px 20px;
    text-decoration: none; color: inherit; transition: border-color var(--zai-duration-fast), box-shadow var(--zai-duration-fast);
}
.p-card:hover { border-color: var(--zai-border-strong); box-shadow: var(--zai-shadow-sm); }
.p-card-name { font-size: var(--zai-font-h3, 16px); font-weight: 600; color: var(--zai-text-primary); }
.p-card-type {
    font-size: var(--zai-font-caption, 12px); color: var(--zai-color-primary);
    background: var(--zai-color-primary-soft); border-radius: var(--zai-radius-full);
    padding: 1px 8px; margin-left: 8px; vertical-align: 2px;
}
.p-card-dest { color: var(--zai-text-secondary); margin-top: 6px; }
.p-card-tags { margin-top: 10px; }
.p-tag {
    display: inline-block; font-size: var(--zai-font-caption, 12px);
    color: var(--zai-text-secondary); background: var(--zai-surface-sunken);
    border-radius: var(--zai-radius-sm); padding: 1px 7px; margin: 0 6px 4px 0;
}
.p-empty {
    background: var(--zai-surface); border: 1px dashed var(--zai-border-strong);
    border-radius: var(--zai-radius-lg); padding: 40px 20px; text-align: center;
    color: var(--zai-text-secondary);
}
.p-notice {
    background: var(--zai-color-warning-soft); border: 1px solid var(--zai-color-warning);
    color: var(--zai-text-primary); border-radius: var(--zai-radius-md);
    padding: 10px 14px; margin-bottom: 16px;
}

/* ------------------------------------------------------------------ 对话页 */
.p-hd { display: flex; align-items: center; gap: 12px; padding: 6px 0 16px; }
.p-hd a { color: var(--zai-text-secondary); text-decoration: none; font-size: var(--zai-font-caption, 13px); }
.p-hd h1 { font-size: var(--zai-font-h3, 17px); margin: 0; flex: 1; color: var(--zai-text-primary); }
.p-sub { color: var(--zai-text-secondary); font-size: var(--zai-font-caption, 13px); margin: 0 0 18px; }

.p-turn { display: flex; margin-bottom: 18px; }
.p-turn--user { justify-content: flex-end; }
.p-bubble {
    max-width: 90%; border-radius: var(--zai-radius-lg); padding: 14px 18px;
    color: var(--zai-text-primary);
}
.p-turn--user .p-bubble {
    background: var(--zai-color-primary); color: var(--zai-surface);
    border-bottom-right-radius: var(--zai-radius-xs); white-space: pre-wrap;
}
.p-turn--ai .p-bubble {
    background: var(--zai-surface); border: 1px solid var(--zai-border);
    border-bottom-left-radius: var(--zai-radius-xs);
}
.p-fail {
    border-left: 3px solid var(--zai-color-danger); background: var(--zai-color-danger-soft);
    color: var(--zai-color-danger); border-radius: var(--zai-radius-md); padding: 10px 14px;
}
.p-intro {
    background: var(--zai-surface); border: 1px solid var(--zai-border);
    border-radius: var(--zai-radius-lg); padding: 16px 18px; margin-bottom: 18px;
}
.p-intro-t { font-weight: 600; margin-bottom: 6px; color: var(--zai-text-primary); }
.p-meta { font-size: var(--zai-font-caption, 11px); color: var(--zai-text-muted); margin-top: 6px; }
.p-cites { margin-top: 10px; font-size: var(--zai-font-caption, 12px); color: var(--zai-text-secondary); }
.p-cites a { color: var(--zai-color-primary); }

/* ------------------------------------------------------------------ 输入区
   学老站（ai.zhiqiong.vip）的 Composer：外卡片 + 内部工具行，
   输入框无边框、聚焦时整卡描边，附件以 chip 形式贴在上方。 */
.p-form {
    position: fixed; left: var(--p-rail-w, 0); right: 0; bottom: 0;
    padding: 10px 16px calc(12px + env(safe-area-inset-bottom, 0px));
    background: linear-gradient(to top, var(--zai-bg) 62%, transparent);
}
.p-form-inner {
    max-width: 820px; margin: 0 auto;
    background: var(--zai-surface); border: 1px solid var(--zai-border-strong);
    border-radius: 18px; padding: 8px 10px 7px;
    box-shadow: 0 2px 12px rgba(20, 22, 30, .05);
    transition: border-color var(--zai-duration-fast) var(--zai-ease-out),
                box-shadow var(--zai-duration-fast) var(--zai-ease-out);
}
.p-form-inner:focus-within { border-color: var(--zai-color-primary); box-shadow: 0 2px 16px rgba(37, 99, 235, .14); }
.p-attached { display: flex; flex-wrap: wrap; gap: 6px; }
.p-attached:empty { display: none; }
.p-chip {
    display: inline-flex; align-items: center; gap: 4px;
    font-size: 11.5px; padding: 3px 9px; border-radius: 14px;
    background: var(--zai-color-primary-soft); color: var(--zai-color-primary);
}
.p-chip button { border: 0; background: transparent; color: inherit; cursor: pointer; padding: 0 0 0 2px; font-size: 12px; }
.p-input {
    width: 100%; border: 0; outline: 0; background: transparent;
    resize: none; font: inherit; line-height: 1.6; color: var(--zai-text-primary);
    padding: 6px 4px 2px; min-height: 26px; max-height: 180px;
}
.p-row { display: flex; align-items: center; gap: 6px; margin-top: 2px; }
.p-att-btn, .p-mic, .p-set-btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 30px; height: 30px; border-radius: 9px; cursor: pointer;
    border: 1px solid transparent; background: transparent;
    color: var(--zai-text-secondary); font-size: 15px; line-height: 1; flex: none;
}
.p-att-btn:hover, .p-mic:hover, .p-set-btn:hover { background: var(--zai-surface-sunken); color: var(--zai-text-primary); }
.p-att-btn input { display: none; }
.p-hint { margin-right: auto; font-size: 11px; color: var(--zai-text-muted); white-space: nowrap; }
/* 模型下拉（T-MODELPICK）：贴在输入框工具条上，窄屏自动收窄不换行 */
.p-model {
    max-width: 180px; height: 30px; padding: 0 6px; flex: none;
    border: 1px solid var(--zai-border); border-radius: 9px;
    background: var(--zai-surface); color: var(--zai-text-secondary);
    font: inherit; font-size: 12px; cursor: pointer;
    text-overflow: ellipsis;
}
.p-model:hover { border-color: var(--zai-border-strong); color: var(--zai-text-primary); }
.p-model:focus { outline: 2px solid var(--zai-color-primary-soft); outline-offset: 1px; }
.p-send {
    border: 0; background: var(--zai-color-primary); color: var(--zai-surface);
    border-radius: 9px; height: 30px; padding: 0 16px; font: inherit; font-size: 13px;
    font-weight: 600; cursor: pointer; flex: none;
}
.p-send:hover { background: var(--zai-color-primary-hover); }
.p-send:disabled { opacity: .55; cursor: default; }
.p-stop {
    border: 1px solid var(--zai-border-strong); background: var(--zai-surface);
    color: var(--zai-text-secondary); border-radius: 9px; height: 30px; padding: 0 12px;
    font: inherit; font-size: 12.5px; cursor: pointer; flex: none;
    transition: all var(--zai-duration-fast) var(--zai-ease-out);
}
.p-stop:hover { border-color: var(--zai-color-danger); color: var(--zai-color-danger); }
.p-stop[hidden] { display: none; }
@media (max-width: 980px) {
    /* 手机：触控目标放大，输入框别把消息区挤没 */
    .p-form { padding: 8px 10px calc(10px + env(safe-area-inset-bottom, 0px)); }
    .p-input { max-height: 120px; }
    .p-att-btn, .p-mic, .p-set-btn { width: 40px; height: 40px; font-size: 17px; }
    .p-model { height: 40px; max-width: 132px; font-size: 12.5px; }
    .p-send, .p-stop { height: 40px; padding: 0 18px; font-size: 14px; }
    .p-hint { display: none; }
    .p-send { margin-left: auto; }   /* 提示文案隐藏后，发送要自己靠右 */
}

/* ------------------------------------------------------------------ 回答富文本 */
/* 渲染器输出的是 <p class="p">；早先只写了 .p-p，导致段落间距一直走浏览器默认值 */
.p-bubble p.p, .p-bubble p.p-p { margin: 0 0 10px; line-height: 1.75; }
.p-bubble p.p:first-child, .p-bubble p.p-p:first-child { margin-top: 0; }
.p-bubble p.p:last-child, .p-bubble p.p-p:last-child { margin-bottom: 0; }
.p-bubble h2.p-h, .p-bubble h3.p-h, .p-bubble h4.p-h, .p-bubble h5.p-h {
    font-size: var(--zai-font-body-lg, 14px); margin: 14px 0 8px; color: var(--zai-text-primary);
}
.p-bubble ul.p-list, .p-bubble ol.p-list { margin: 0 0 10px; padding-left: 20px; }
.p-bubble li { margin: 3px 0; }
/* 字母 / 中文序号：不用圆点，保留 A/B/C 标记（正文要与下面的「选A…」按钮对照） */
.p-bubble ul.p-list--key { list-style: none; padding-left: 2px; }
.p-bubble .p-li-k {
    display: inline-block; min-width: 1.8em;
    color: var(--zai-text-secondary); font-weight: 600;
}
.p-bubble p.p:last-child, .p-bubble ul.p-list:last-child, .p-bubble ol.p-list:last-child { margin-bottom: 0; }
.p-bubble hr { border: 0; border-top: 1px solid var(--zai-border); margin: 14px 0; }
.p-bubble code {
    background: var(--zai-surface-sunken); border-radius: var(--zai-radius-xs);
    padding: 1px 5px; font-family: var(--zai-font-mono); font-size: 12.5px;
}

.p-tablewrap { overflow-x: auto; margin: 10px 0; }
.p-table { border-collapse: collapse; width: 100%; font-size: var(--zai-font-caption, 13px); }
.p-table th, .p-table td {
    border: 1px solid var(--zai-border); padding: 7px 10px;
    text-align: left; vertical-align: top; line-height: 1.6;
}
.p-table th { background: var(--zai-surface-sunken); font-weight: 600; white-space: nowrap; }
.p-table td.p-td-num { white-space: nowrap; color: var(--zai-text-secondary); width: 1%; }

/* 互动组件：选项 = 模型替用户写好的默认答案，点一下直接发出 */
.p-opts { display: flex; flex-wrap: wrap; gap: 10px; margin: 12px 0 4px; }
.p-opt {
    border: 1px solid var(--zai-color-primary); background: var(--zai-color-primary);
    color: var(--zai-surface); border-radius: var(--zai-radius-full);
    min-height: 38px; padding: 8px 18px; font: inherit; font-size: 14px; font-weight: 600;
    cursor: pointer; transition: background .15s, transform .15s;
}
/* 手指符号：一眼看出这是「可点的答案」而不是正文强调 */
.p-opt::before { content: '\1F446'; font-size: 13px; margin-right: 2px; }
.p-opt:hover { background: var(--zai-color-primary-hover); transform: translateY(-1px); }
/* 已被点过的选项组整体置灰并失去交互，避免重复提交同一句话 */
.p-opts[data-used="1"] .p-opt,
.p-guide[data-used="1"] .p-guide-btn { opacity: .45; pointer-events: none; transform: none; }

/* 三选一收尾按钮（宪法⑦ [[ZAI_GUIDE]]）：全宽大按钮 + 字母键圈 */
.p-guide { display: flex; flex-direction: column; gap: 10px; margin: 4px 0; }
.p-guide-btn {
    display: flex; align-items: center; gap: 12px; width: 100%; min-height: 50px;
    padding: 9px 16px; border: 1px solid var(--zai-color-primary);
    border-radius: var(--zai-radius-md); background: var(--zai-surface);
    color: var(--zai-text-primary); font: inherit; font-size: 14px; line-height: 1.5;
    text-align: left; cursor: pointer; transition: background .15s, transform .15s;
}
.p-guide-btn:hover {
    background: var(--zai-color-primary-soft); transform: translateY(-1px);
}
.p-guide-key {
    flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
    width: 26px; height: 26px; border-radius: var(--zai-radius-full);
    background: var(--zai-color-primary); color: var(--zai-surface);
    font-size: 13px; font-weight: 600;
}
.p-guide-txt { flex: 1 1 auto; }
.p-guide-btn:disabled { opacity: .55; cursor: not-allowed; }

/* 可填表格（[[form]]）：第 1 列项目名只读，第 2 列输入框，第 3 列起是提示 */
.p-table--edit .p-td-label { white-space: nowrap; color: var(--zai-text-primary); }
.p-table--edit .p-td-hint { white-space: nowrap; color: var(--zai-text-secondary); font-size: 12px; }
.p-form-in {
    width: 100%; box-sizing: border-box; min-height: 32px; padding: 5px 10px;
    border: 1px solid var(--zai-border-strong); border-radius: var(--zai-radius-sm);
    background: var(--zai-surface); color: var(--zai-text-primary);
    font: inherit; font-size: 14px;
}
.p-form-in:focus { outline: none; border-color: var(--zai-color-primary); }
.p-form-in:disabled { opacity: .65; cursor: not-allowed; }
.p-panel-ft--act { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.p-form-btn {
    border: 1px solid var(--zai-color-primary); background: var(--zai-color-primary);
    color: var(--zai-surface); border-radius: var(--zai-radius-md);
    min-height: 36px; padding: 7px 18px; font: inherit; font-size: 14px; font-weight: 600;
    cursor: pointer; transition: background .15s;
}
.p-form-btn:hover { background: var(--zai-color-primary-hover); }
.p-form-btn:disabled { opacity: .6; cursor: not-allowed; }
.p-form-tip { color: var(--zai-text-secondary); font-size: 12px; }

.p-panel {
    border: 1px solid var(--zai-border-strong); border-radius: var(--zai-radius-md);
    margin: 12px 0; overflow: hidden; background: var(--zai-surface);
}
.p-panel--form { border-color: var(--zai-color-primary); }
.p-panel--guide { border-color: var(--zai-color-success); }
.p-panel--summary { border-color: var(--zai-color-warning); }
.p-panel-hd {
    font-weight: 600; font-size: var(--zai-font-caption, 13px);
    padding: 8px 12px; border-bottom: 1px solid var(--zai-border);
    background: var(--zai-surface-sunken); color: var(--zai-text-primary);
}
.p-panel-bd { padding: 10px 12px; }
.p-panel-ft {
    font-size: var(--zai-font-caption, 12px); color: var(--zai-text-secondary);
    padding: 8px 12px; border-top: 1px dashed var(--zai-border);
}
.p-panel .p-tablewrap { margin: 0; }
.p-panel .p-table th, .p-panel .p-table td { border-left: 0; border-right: 0; }

/* ------------------------------------------------------------------ 提示页 */
.p-noticepage { max-width: 560px; margin: 12vh auto 0; padding: 0 20px; text-align: center; }
.p-noticepage-box {
    background: var(--zai-surface); border: 1px solid var(--zai-border);
    border-radius: var(--zai-radius-xl); padding: 40px 28px;
}
.p-noticepage h1 { font-size: var(--zai-font-h3, 18px); margin: 0 0 10px; color: var(--zai-text-primary); }
.p-noticepage p { color: var(--zai-text-secondary); margin: 0 0 22px; }
.p-btn {
    display: inline-block; background: var(--zai-color-primary); color: var(--zai-surface);
    text-decoration: none; border-radius: var(--zai-radius-md); padding: 9px 20px;
}
.p-btn:hover { background: var(--zai-color-primary-hover); }

/* 开场推荐问题（icebreakers）：与 p-opt 同款按钮，横排换行 */
.p-ice { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 2px; }
.p-ice .p-opt { font-size: 13px; }

/* 语音输入（麦克风）与回答朗读（喇叭） */
.p-speak {
    border: 1px solid var(--zai-color-primary);
    background: transparent; color: inherit; cursor: pointer;
    border-radius: 8px; padding: 6px 10px; font-size: 13px;
}
.p-speak:hover { background: var(--zai-color-primary); }
.p-speak { border: none; opacity: .55; font-size: 12px; padding: 2px 6px; }
.p-speak:hover { opacity: 1; background: transparent; }

/* 对话附件：📎 按钮 / 文件名预览 / 用户轮附件标识 */

.p-att-chip {
    display: inline-block; margin-right: 6px; padding: 1px 8px;
    border-radius: 999px; font-size: 12px; opacity: .75;
    border: 1px solid currentColor;
}

/* ==================================================================
 * 2026-10-25 体感升级：左栏 app shell / 消息头像 / 工具条 / 消息操作 / 思考态
 * 说明：令牌只用 var(--zai-*)，类名沿用 p- 前缀；不重定义 :root。
 * ================================================================== */

/* ---- 应用骨架：左栏 + 主区 ---- */
/* 左栏宽度变量放在 body.is-partner 上：.p-form 是 .p-app 的兄弟节点，
   放在 .p-app 里会导致固定输入条继承不到、压住左栏。 */
.is-partner { --p-rail-w: 288px; }
.p-app { display: flex; align-items: flex-start; }
.p-rail {
    position: sticky; top: calc(var(--zai-header-h, 56px) + 12px);
    width: 272px; flex: 0 0 272px; margin: 16px 0 0 16px;
    height: calc(100vh - var(--zai-header-h, 56px) - 28px);
    max-height: calc(100vh - var(--zai-header-h, 56px) - 28px);
    display: flex; flex-direction: column;
    background: var(--zai-surface);
    border: 1px solid var(--zai-border);
    border-radius: var(--zai-radius-lg);
    overflow: hidden;
}
.p-rail-hd { display: flex; align-items: center; gap: 8px; padding: 12px 14px 8px; }
.p-rail-title { flex: 1; font-size: 15px; font-weight: 700; color: var(--zai-text-primary); }
.p-rail-more { font-size: 12px; color: var(--zai-text-secondary); text-decoration: none; }
.p-rail-more:hover { color: var(--zai-color-primary); }
.p-rail-summon {
    display: block; margin: 0 12px 8px; text-align: center;
    background: var(--zai-color-primary); color: #fff;
    border-radius: var(--zai-radius-md); padding: 9px 12px;
    font-size: 13px; font-weight: 600; text-decoration: none;
    transition: background var(--zai-duration-fast) var(--zai-ease-out);
}
.p-rail-summon:hover { background: var(--zai-color-primary-hover); }
.p-rail-scroll { flex: 1; overflow-y: auto; padding: 2px 8px 8px; }
.p-rail-scroll::-webkit-scrollbar { width: 6px; }
.p-rail-scroll::-webkit-scrollbar-thumb { background: var(--zai-border-strong); border-radius: 3px; }
.p-rail-sec {
    font-size: 11px; font-weight: 600; letter-spacing: .4px;
    color: var(--zai-text-muted); padding: 10px 6px 6px;
}
.p-rail-item {
    display: flex; align-items: center; gap: 9px;
    padding: 8px; border-radius: var(--zai-radius-md);
    text-decoration: none; color: inherit; border: 1px solid transparent;
    transition: background var(--zai-duration-fast) var(--zai-ease-out);
}
.p-rail-item:hover { background: var(--zai-surface-sunken); }
.p-rail-item.on { background: var(--zai-color-primary-soft); border-color: var(--zai-color-primary); }
.p-rail-item.on .p-rail-name { color: var(--zai-color-primary); font-weight: 700; }
.p-rail-ava {
    flex: 0 0 28px; width: 28px; height: 28px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: var(--zai-color-primary); color: #fff;
    font-size: 12px; font-weight: 700;
}
.p-rail-name {
    flex: 1; min-width: 0; font-size: 13px; font-weight: 500; color: var(--zai-text-primary);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.p-rail-type {
    flex: 0 0 auto; font-size: 10px; color: var(--zai-text-secondary);
    background: var(--zai-surface-sunken); border-radius: var(--zai-radius-full);
    padding: 0 6px;
}
/* ---- 左栏记忆区（学老站：分类芯片 + 两行截断 + 计数） ---- */
.p-rail-mem { flex: none; margin: 8px 10px 0; padding: 10px 4px 8px; border-top: 1px solid var(--zai-border); }
.p-rail-mem-hd { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.p-rail-mem-t { font-size: 12px; font-weight: 600; color: var(--zai-text-secondary); }
.p-rail-mem-hd em {
    font-style: normal; font-size: 10px; line-height: 1.6; padding: 0 6px; border-radius: 999px;
    background: var(--zai-color-primary-soft); color: var(--zai-color-primary); font-weight: 600;
}
.p-rail-mem-hd a { margin-left: auto; font-size: 11px; color: var(--zai-text-muted); text-decoration: none; }
.p-rail-mem-hd a:hover { color: var(--zai-color-primary); }
.p-rail-mem-item { display: flex; align-items: flex-start; gap: 6px; padding: 4px; border-radius: 6px; }
.p-rail-mem-item:hover { background: var(--zai-surface-sunken); }
.p-rail-mem-txt {
    font-size: 11.5px; line-height: 1.5; color: var(--zai-text-secondary);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.p-rail-mem-empty { padding: 2px 4px; font-size: 11px; line-height: 1.6; color: var(--zai-text-muted); }
.p-rail-mem-add {
    width: 100%; height: 28px; margin-top: 6px; cursor: pointer;
    border: 1px dashed var(--zai-border-strong); border-radius: 8px;
    background: transparent; color: var(--zai-text-secondary); font: inherit; font-size: 12px;
    transition: all var(--zai-duration-fast) var(--zai-ease-out);
}
.p-rail-mem-add:hover { border-color: var(--zai-color-primary); color: var(--zai-color-primary); }

/* 分类芯片（目标/约束/决策/事实/偏好） */
.p-mem-cat {
    flex: none; font-size: 10px; font-weight: 600; line-height: 1.7;
    padding: 0 5px; border-radius: 4px; margin-top: 1px;
}
.p-mem-cat--goal { background: color-mix(in srgb, var(--zai-color-primary) 12%, transparent); color: var(--zai-color-primary); }
.p-mem-cat--limit { background: color-mix(in srgb, var(--zai-color-warning) 14%, transparent); color: var(--zai-color-warning); }
.p-mem-cat--decide { background: color-mix(in srgb, var(--zai-color-accent-purple) 14%, transparent); color: var(--zai-color-accent-purple); }
.p-mem-cat--fact { background: color-mix(in srgb, var(--zai-color-info) 12%, transparent); color: var(--zai-color-info); }
.p-mem-cat--like { background: color-mix(in srgb, var(--zai-color-success) 14%, transparent); color: var(--zai-color-success); }

/* ---- 记忆抽屉（右侧滑出，学老站备忘抽屉） ---- */
.p-mem-mask {
    position: fixed; inset: 0; z-index: 200; background: rgba(20, 22, 30, .35);
    opacity: 0; transition: opacity .22s var(--zai-ease-out);
}
.p-mem-mask.on { opacity: 1; }
.p-mem-mask[hidden] { display: none; }
.p-mem {
    position: fixed; top: 0; right: 0; bottom: 0; width: 400px; max-width: 92vw; z-index: 201;
    display: flex; flex-direction: column; background: var(--zai-surface);
    border-left: 1px solid var(--zai-border); box-shadow: -10px 0 34px rgba(20, 22, 30, .16);
    transform: translateX(102%); transition: transform .26s cubic-bezier(.4, 0, .2, 1);
}
.p-mem.on { transform: none; }
.p-mem[hidden] { display: none; }
.p-mem-hd { display: flex; align-items: flex-start; gap: 10px; padding: 18px 20px 14px; border-bottom: 1px solid var(--zai-border); }
.p-mem-title { font-size: 15px; font-weight: 700; color: var(--zai-text-primary); }
.p-mem-title em {
    font-style: normal; font-size: 11px; font-weight: 600; margin-left: 4px;
    padding: 1px 7px; border-radius: 999px;
    background: var(--zai-color-primary-soft); color: var(--zai-color-primary);
}
.p-mem-intro { margin-top: 5px; font-size: 11px; line-height: 1.6; color: var(--zai-text-muted); }
.p-mem-x { margin-left: auto; border: 0; background: transparent; color: var(--zai-text-muted); font-size: 16px; cursor: pointer; line-height: 1; }
.p-mem-x:hover { color: var(--zai-text-primary); }
.p-mem-body { flex: 1; overflow-y: auto; padding: 14px 20px; }
.p-mem-row {
    display: flex; align-items: flex-start; gap: 9px; padding: 10px 12px; margin-bottom: 8px;
    border: 1px solid var(--zai-border); border-radius: var(--zai-radius-sm);
    background: var(--zai-bg-muted);
}
.p-mem-main { flex: 1; min-width: 0; }
.p-mem-t { font-size: 12.5px; line-height: 1.55; color: var(--zai-text-primary); word-break: break-word; }
.p-mem-src { margin-top: 3px; font-size: 10px; color: var(--zai-text-muted); }
.p-mem-del { border: 0; background: transparent; color: var(--zai-text-muted); cursor: pointer; font-size: 12px; padding: 0 2px; flex: none; }
.p-mem-del:hover { color: var(--zai-color-danger); }
.p-mem-empty { padding: 10px 2px; font-size: 12px; line-height: 1.7; color: var(--zai-text-muted); }
.p-mem-ft { border-top: 1px solid var(--zai-border); padding: 12px 20px; background: var(--zai-bg-muted); }
.p-mem-add { display: flex; gap: 6px; margin-bottom: 8px; }
.p-mem-add select, .p-mem-add input {
    height: 34px; border: 1px solid var(--zai-border-strong); border-radius: 6px;
    background: var(--zai-surface); color: var(--zai-text-primary); font: inherit; font-size: 12px; outline: none;
}
.p-mem-add select { padding: 0 6px; color: var(--zai-text-secondary); }
.p-mem-add input { flex: 1; min-width: 0; padding: 0 10px; }
.p-mem-add input:focus, .p-mem-add select:focus { border-color: var(--zai-color-primary); }
.p-mem-btns { display: flex; align-items: center; gap: 8px; }
.p-mbtn {
    height: 32px; padding: 0 14px; border-radius: 6px; cursor: pointer; font: inherit; font-size: 12px;
    border: 1px solid var(--zai-border-strong); background: var(--zai-surface); color: var(--zai-text-secondary);
    transition: all var(--zai-duration-fast) var(--zai-ease-out);
}
.p-mbtn.primary { background: var(--zai-color-primary); border-color: var(--zai-color-primary); color: #fff; font-weight: 600; }
.p-mbtn.primary:hover { background: var(--zai-color-primary-hover); }
.p-mem-tip { font-size: 11px; color: var(--zai-text-muted); }

.p-rail-ft { border-top: 1px solid var(--zai-border); padding: 8px 12px; display: flex; gap: 14px; }
.p-rail-ft a { font-size: 12px; color: var(--zai-text-secondary); text-decoration: none; }
.p-rail-ft a:hover { color: var(--zai-color-primary); }
.p-main { flex: 1; min-width: 0; }

/* ---- 列表页卡片头像（与左栏视觉统一） ---- */
/* .p-wrap 是 body.zai-wrap(flex column) 的直接子项：auto 外边距会关掉 stretch，
   不显式给 width:100% 的话容器只会取内容宽度（实测 587px），max-width 形同虚设。 */
.p-wrap { width: 100%; box-sizing: border-box; }
/* 桌面端自适应多列，避免单列超宽卡片浪费横向空间 */
.p-grid { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }
.p-card { display: flex; gap: 12px; align-items: flex-start; }
.p-card-ava {
    flex: 0 0 40px; width: 40px; height: 40px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: var(--zai-color-primary); color: #fff;
    font-size: 15px; font-weight: 700;
}
.p-card-main { flex: 1; min-width: 0; }
.p-rail-empty { padding: 12px 8px; font-size: 12px; color: var(--zai-text-muted); line-height: 1.6; }

/* ---- 头像图片（角色专属 / 头像库）：填满圆形容器 ---- */
.p-ava img, .p-rail-ava img, .p-card-ava img {
    width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;
}

/* ---- 头像选择器（create 页）：横向滚动，避免 40 个把表单撑太高 ---- */
.p-avatar-pool {
    display: flex; gap: 8px; margin-top: 4px;
    overflow-x: auto; padding-bottom: 6px;
}
.p-avatar-pool::-webkit-scrollbar { height: 6px; }
.p-avatar-pool::-webkit-scrollbar-thumb { background: var(--zai-border-strong); border-radius: 3px; }
.p-avatar-pick {
    flex: 0 0 44px; width: 44px; height: 44px; padding: 0;
    border: 2px solid transparent; border-radius: 50%;
    background: var(--zai-surface-sunken); cursor: pointer; overflow: hidden;
    transition: border-color var(--zai-duration-fast) var(--zai-ease-out);
}
.p-avatar-pick img { width: 100%; height: 100%; object-fit: cover; display: block; }
.p-avatar-pick:hover { border-color: var(--zai-color-primary-soft); }
.p-avatar-pick.on { border-color: var(--zai-color-primary); box-shadow: var(--zai-shadow-focus); }

/* ---- 设置页 ---- */
.p-set-row {
    display: flex; justify-content: space-between; align-items: center;
    padding: 6px 0; font-size: 14px; color: var(--zai-text-secondary);
}
.p-set-row b { color: var(--zai-text-primary); font-size: 15px; }
.p-set-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px;
}
.p-set-grid label {
    display: flex; flex-direction: column; gap: 6px;
    font-size: 12px; color: var(--zai-text-secondary);
}
.p-set-grid .p-input { width: 100%; box-sizing: border-box; }
.p-hbtn { font-family: inherit; cursor: pointer; }
/* 窄屏防溢出：textarea 默认 min-width:auto（cols=20）会把麦克风/发送挤出屏幕 */
.p-input { min-width: 0; }
/* 排版打磨：对话正文/表格/输入框各上探 1 号（老站 2026-10-15 反馈验证过的值） */
.p-bubble { font-size: 15px; }
.p-table { font-size: 13.5px; }
.p-input { font-size: 15px; }
/* 卡片描述两行截断，避免多列卡片高度参差 */
.p-card-dest {
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ---- 对话头工具条 ---- */
/* 对话头吸顶：滚动长回答时，「新对话 / 我的会话」不丢；底部留白避开固定输入条 */
.p-wrap--chat { padding-bottom: 200px; }
.p-hd { position: sticky; top: var(--zai-header-h, 56px); z-index: 5; background: var(--zai-bg); }
/* 标题不要 flex:1：否则类型胶囊会被推到最右边、离名字很远 */
.p-hd h1 { flex: 0 1 auto; }
/* 对话页是 App 式界面，隐藏全站页脚，避免固定输入条与页脚叠出杂色块 */
.is-partner.is-chat .zai-footer { display: none; }
.p-tools { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.p-hbtn {
    border: 1px solid var(--zai-border-strong); background: var(--zai-surface);
    color: var(--zai-text-secondary); border-radius: var(--zai-radius-md);
    padding: 6px 12px; font-size: 12px; text-decoration: none;
    transition: all var(--zai-duration-fast) var(--zai-ease-out);
}
.p-hbtn:hover { border-color: var(--zai-color-primary); color: var(--zai-color-primary); background: var(--zai-color-primary-soft); }

/* ---- 消息头像与行结构 ---- */
.p-turn { display: flex; gap: 10px; align-items: flex-start; }
.p-turn--user { flex-direction: row-reverse; justify-content: flex-start; }
.p-ava {
    flex: 0 0 34px; width: 34px; height: 34px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: var(--zai-color-primary); color: #fff;
    font-size: 14px; font-weight: 700;
}
.p-ava--user { background: var(--zai-surface-sunken); color: var(--zai-text-secondary); }
.p-turn-main { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; }
.p-turn--user .p-turn-main { align-items: flex-end; }
.p-turn-main .p-bubble { max-width: 100%; }
.p-m-name { font-size: 12px; color: var(--zai-text-secondary); margin: 2px 0 5px 2px; }

/* ---- 消息操作行 ---- */
.p-msg-act {
    display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
    margin-top: 10px; padding-top: 9px; border-top: 1px dashed var(--zai-border);
}
.p-msg-act button {
    border: 1px solid var(--zai-border-strong); background: var(--zai-surface);
    color: var(--zai-text-secondary); border-radius: var(--zai-radius-sm);
    padding: 3px 9px; font: inherit; font-size: 11px; cursor: pointer;
    transition: all var(--zai-duration-fast) var(--zai-ease-out);
}
.p-msg-act button:hover { border-color: var(--zai-color-primary); color: var(--zai-color-primary); }
.p-msg-act .p-speak { border: 1px solid var(--zai-border-strong); opacity: 1; font-size: 11px; padding: 3px 9px; }

/* ---- 开场卡头部（头像 + 标题） ---- */
.p-intro-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.p-intro-hd .p-intro-t { margin: 0; }

/* ---- 思考过程（提交后占位） ---- */
.p-think {
    background: var(--zai-surface); border: 1px solid var(--zai-border);
    border-radius: var(--zai-radius-lg); padding: 12px 15px; margin-bottom: 18px;
}
.p-think[hidden] { display: none; }
.p-think-row {
    display: flex; align-items: center; gap: 8px;
    font-size: 13px; line-height: 1.6; padding: 3px 0; color: var(--zai-text-secondary);
}
.p-think-row.active { color: var(--zai-color-primary); font-weight: 600; }
.p-think-dots { display: none; gap: 3px; margin-left: 2px; }
.p-think-row.active .p-think-dots { display: inline-flex; }
.p-think-dots i {
    width: 4px; height: 4px; border-radius: 50%; background: currentColor;
    display: inline-block; animation: pDot 1.15s infinite ease-in-out;
}
.p-think-dots i:nth-child(2) { animation-delay: .18s; }
.p-think-dots i:nth-child(3) { animation-delay: .36s; }
@keyframes pDot { 0%, 60%, 100% { opacity: .28; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-2px); } }
@media (prefers-reduced-motion: reduce) { .p-think-dots i { animation: none; } }

/* ---- 流式输出（D3）：逐字追加的光标 + 中断提示 ---- */
.p-bubble--stream .p-stream-body { white-space: normal; word-break: break-word; }
.p-bubble--stream .p-stream-body > :first-child { margin-top: 0; }
.p-bubble--stream .p-stream-body > :last-child { margin-bottom: 0; }
.p-bubble--stream .p-stream-body::after {
    content: '▍'; margin-left: 1px; color: var(--zai-color-primary);
    animation: pCaret 1s steps(1) infinite;
}
@keyframes pCaret { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
.p-stream-note {
    margin-top: 10px; padding: 8px 10px; border-radius: var(--zai-radius-sm);
    background: var(--zai-surface-sunken); color: var(--zai-text-secondary);
    font-size: 12px; line-height: 1.6;
}
@media (prefers-reduced-motion: reduce) { .p-bubble--stream .p-stream-body::after { animation: none; } }

/* ---- 响应式：窄屏收起左栏，显示返回链接 ---- */
@media (max-width: 980px) {
    .is-partner { --p-rail-w: 0; }
    .p-app { display: block; }
    .p-rail { display: none; }
    .p-tools { display: none; }
}
@media (min-width: 981px) {
    .p-back { display: none; }
}

/* ---- 4 型筛选（列表页横向 tab；T 型为后台/讨论区专用，前台不渲染入口） ---- */
.p-typefilter {
    display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
    margin: 12px 0 16px;
}
.p-typefilter-item {
    display: inline-block; font-size: var(--zai-font-caption, 13px);
    color: var(--zai-text-secondary);
    background: var(--zai-surface-sunken);
    border: 1px solid transparent;
    border-radius: var(--zai-radius-full);
    padding: 4px 14px;
    transition: color var(--zai-duration-fast), background var(--zai-duration-fast), border-color var(--zai-duration-fast);
}
.p-typefilter-item:hover { color: var(--zai-text-primary); border-color: var(--zai-border-strong); }
.p-typefilter-item.active {
    color: var(--zai-color-primary); background: var(--zai-color-primary-soft);
    border-color: var(--zai-color-primary); font-weight: 600;
}

/* ---- 左栏双 Tab（Partner / 我的会话）+ 类型筛选 + 会话列表 ---- */
.p-rail-tabs { display: flex; gap: 4px; padding: 0 10px 8px; }
.p-rail-tab {
    flex: 1; border: 1px solid var(--zai-border); background: var(--zai-surface-sunken);
    color: var(--zai-text-secondary); font-size: var(--zai-font-caption, 12px);
    border-radius: var(--zai-radius-sm, 6px); padding: 5px 0; cursor: pointer;
    transition: color var(--zai-duration-fast), background var(--zai-duration-fast), border-color var(--zai-duration-fast);
}
.p-rail-tab:hover { color: var(--zai-text-primary); }
.p-rail-tab.active {
    color: var(--zai-color-primary); background: var(--zai-color-primary-soft);
    border-color: var(--zai-color-primary); font-weight: 600;
}
.p-rail-filter { display: flex; flex-wrap: wrap; gap: 4px; padding: 2px 10px 8px; }
.p-rail-ft {
    border: 0; background: transparent; cursor: pointer;
    color: var(--zai-text-secondary); font-size: var(--zai-font-caption, 11px);
    border-radius: var(--zai-radius-full); padding: 2px 9px;
}
.p-rail-ft:hover { color: var(--zai-text-primary); background: var(--zai-surface-sunken); }
.p-rail-ft.active { color: var(--zai-color-primary); background: var(--zai-color-primary-soft); font-weight: 600; }
.p-rail-sess {
    display: block; padding: 7px 12px; color: inherit; text-decoration: none;
    border-left: 2px solid transparent;
}
.p-rail-sess:hover { background: var(--zai-surface-sunken); }
.p-rail-sess.on { border-left-color: var(--zai-color-primary); background: var(--zai-color-primary-soft); }
.p-rail-sess-name {
    display: block; font-size: var(--zai-font-caption, 13px); font-weight: 600;
    color: var(--zai-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.p-rail-sess-meta, .p-rail-sess-time {
    display: block; font-size: 11px; color: var(--zai-text-secondary);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* ---- 召唤 Partner 弹窗 ---- */
#p-summon-modal { position: fixed; inset: 0; z-index: 999; }
.p-summon-mask { position: absolute; inset: 0; background: rgba(15, 22, 36, .45); }
.p-summon-box {
    position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: min(680px, 92vw); height: min(560px, 84vh);
    background: var(--zai-surface, #fff); border-radius: var(--zai-radius-lg, 14px);
    box-shadow: 0 18px 60px rgba(0,0,0,.22); display: flex; flex-direction: column; overflow: hidden;
}
.p-summon-hd {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 16px; border-bottom: 1px solid var(--zai-border); font-size: 14px;
}
.p-summon-x {
    border: 0; background: transparent; font-size: 18px; line-height: 1;
    color: var(--zai-text-secondary); cursor: pointer; padding: 2px 6px;
}
.p-summon-x:hover { color: var(--zai-text-primary); }
.p-summon-frame { flex: 1; border: 0; width: 100%; }

/* ---- 召唤弹窗（popup 态）紧凑化：小头像 / 小卡片 / 筛选 pill 化 ---- */
.p-popup .p-card {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 12px; border: 1px solid var(--zai-border);
    border-radius: 12px; cursor: pointer;
}
.p-popup .p-card:hover { border-color: var(--zai-color-primary); }
.p-popup .p-card-ava { width: 44px; height: 44px; flex: none; }
.p-popup .p-card-ava img { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; display: block; }
.p-popup .p-card-main { min-width: 0; }
.p-popup .p-card-name { font-size: 14px; font-weight: 600; margin-right: 6px; }
.p-popup .p-card-dest {
    font-size: 12px; color: var(--zai-text-secondary);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.p-popup .p-card-type { font-size: 11px; }
.p-popup .p-typefilter-item { text-decoration: none; }

/* 设置入口（输入栏 ⚙️，跳个人设置 vip.php）与 no_key 可点提示 */
.p-set-btn { text-decoration: none; }
.p-mic.is-rec { background: var(--zai-color-primary); color: var(--zai-surface); width: auto; padding: 0 10px; font-size: 12px; -webkit-user-select: none; user-select: none; }
.p-key-jump { cursor: pointer; }
.p-key-jump-go { color: var(--zai-color-primary); text-decoration: underline; white-space: nowrap; }
