/* App-level layout + resets. Element Plus ships its own component styles. */ /* ═══ 墨玉控制台主题(Ink-Jade Console)═══ 深墨侧栏 + 玉绿主色(微信血统精炼) + 暖纸内容区。 Element Plus 变量在此统一覆写,组件零改动。 */ :root { --yk-header-height: 56px; --yk-aside-width: 260px; --yk-bg: #f3f5f8; --yk-border: #e6e9ef; --yk-ink: #171d2b; --yk-ink-2: #1f2637; --yk-ink-text: #a7b1c4; --yk-ink-text-dim: #6b7689; --yk-jade: #0d9f6e; --yk-jade-bright: #35d492; --yk-jade-soft: #4bbe8f; /* Element Plus 主色系 → 玉绿 */ --el-color-primary: #0d9f6e; --el-color-primary-light-3: #4bbe8f; --el-color-primary-light-5: #7fd2ac; --el-color-primary-light-7: #b2e6cc; --el-color-primary-light-8: #d0f0df; --el-color-primary-light-9: #e8f7ef; --el-color-primary-dark-2: #0a8459; --el-border-radius-base: 6px; } * { box-sizing: border-box; } html, body, #app { height: 100%; margin: 0; } body { font-family: -apple-system, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'MiSans', 'Microsoft YaHei', 'Segoe UI', sans-serif; font-size: 14px; color: #2b3240; background: var(--yk-bg); -webkit-font-smoothing: antialiased; font-variant-numeric: tabular-nums; } a { color: var(--el-color-primary, #409eff); text-decoration: none; } /* Layout shell ----------------------------------------------------------- */ .yk-app { height: 100%; } .yk-header { display: flex; align-items: center; gap: 16px; height: var(--yk-header-height); padding: 0 20px; background: #fff; border-bottom: 1px solid var(--yk-border); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); } .yk-header__title { font-size: 18px; font-weight: 600; margin: 0; white-space: nowrap; } .yk-header__spacer { flex: 1; } .yk-aside { background: #fff; border-right: 1px solid var(--yk-border); overflow: auto; } .yk-aside__search { padding: 10px 12px 6px; } .yk-aside__tree { padding: 4px 6px 16px; } .yk-main { padding: 16px; background: var(--yk-bg); overflow: auto; } /* Empty / loading placeholders */ .yk-empty { padding: 40px 0; color: #909399; text-align: center; } /* Chat timeline ---------------------------------------------------------- */ .yk-chat { display: flex; flex-direction: column; gap: 16px; } .yk-chat__header { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } .yk-chat__title { font-size: 16px; font-weight: 600; margin: 0; } .yk-chat__sub { color: #909399; font-size: 13px; } .yk-chat__stream { display: flex; flex-direction: column; gap: 4px; background: #fff; border: 1px solid var(--yk-border); border-radius: 8px; padding: 16px; } .yk-chat__load { display: flex; justify-content: center; padding: 8px 0 12px; } .yk-chat__end { text-align: center; color: #c0c4cc; font-size: 12px; padding: 6px 0 2px; } /* Message bubble */ .yk-msg { display: flex; width: 100%; padding: 4px 0; } .yk-msg--send { flex-direction: row-reverse; } .yk-msg__row { display: flex; max-width: 78%; gap: 10px; align-items: flex-start; } .yk-msg--send .yk-msg__row { flex-direction: row-reverse; } .yk-msg__body { display: flex; flex-direction: column; min-width: 0; } .yk-msg--send .yk-msg__body { align-items: flex-end; } /* 头像(微信式):对方在左/自己在右(row-reverse),小圆角方形 */ .yk-msg__avatar-wrap { flex: none; } .yk-msg__avatar { width: 38px; height: 38px; border-radius: 4px; object-fit: cover; display: block; background: #f2f3f5; } .yk-msg__avatar--ph { display: flex; align-items: center; justify-content: center; color: #a8abb2; } /* Clickable bubble row — opens the all-fields drawer. Subtle hover so users * discover the interaction without changing the bubble's own look. */ .yk-msg__row--clickable { cursor: pointer; border-radius: 6px; transition: background-color 0.15s ease; } .yk-msg__row--clickable:hover { background-color: var(--el-fill-color-light, #f5f7fa); } .yk-msg__meta { display: flex; gap: 8px; align-items: center; font-size: 12px; color: #909399; padding: 0 4px 2px; } .yk-msg--send .yk-msg__meta { flex-direction: row-reverse; } .yk-msg__bubble { padding: 8px 12px; border-radius: 8px; background: #ffffff; border: 1px solid #e5e6eb; color: #303133; line-height: 1.5; word-break: break-word; white-space: pre-wrap; } .yk-msg--send .yk-msg__bubble { background: #95ec69; border-color: #95ec69; color: #0f170a; } .yk-msg__image { max-width: 220px; max-height: 220px; border-radius: 8px; display: block; cursor: zoom-in; } .yk-msg__video { max-width: 280px; max-height: 280px; border-radius: 8px; display: block; } /* Inline audio player for voice messages with an http URL. Keeps the native * control compact so it sits inside a chat row. */ .yk-msg__audio { max-width: 240px; height: 32px; display: block; } .yk-msg__chip { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; border-radius: 16px; background: #ecf5ff; color: var(--el-color-primary, #409eff); font-size: 13px; cursor: default; } .yk-msg__chip--download { cursor: pointer; text-decoration: none; } .yk-msg__transcript { margin-top: 4px; font-size: 12px; color: #909399; font-style: italic; padding: 0 4px; } /* Centered faint row for divider / system messages */ .yk-msg--center { justify-content: center; } .yk-msg__divider { font-size: 12px; color: #909399; background: transparent; text-align: center; padding: 2px 8px; } .yk-clickable-row { cursor: pointer; } .yk-channel-tag { margin-right: 4px; } /* ═══════════════════ 主题精修层(2026-08-22) ═══════════════════ */ /* 内容区:暖纸底 + 极淡点阵纹理(营造深度,不喧宾) */ .yk-main { background: radial-gradient(circle at 1px 1px, rgba(23, 29, 43, 0.035) 1px, transparent 0) 0 0 / 22px 22px, var(--yk-bg); } /* 页面进场:轻微上浮淡入(仅首次挂载,transform 动画不触发布局) */ .yk-main > * { animation: yk-rise 0.32s cubic-bezier(0.22, 0.8, 0.36, 1) both; } /* 注意:不能用 transform——结束后残留的 transform 值会让 position:fixed 的 抽屉改成相对动画元素定位,被列表卡片裁半截(2026-08-22 实测);纯 opacity 无此副作用 */ @keyframes yk-rise { from { opacity: 0; } to { opacity: 1; } } /* ── 卡片 ── */ .el-card { border-radius: 10px; border: 1px solid rgba(23, 29, 43, 0.06); box-shadow: 0 1px 2px rgba(23, 29, 43, 0.03), 0 4px 16px -8px rgba(23, 29, 43, 0.08); transition: box-shadow 0.25s ease, transform 0.25s ease; } .el-card:hover { box-shadow: 0 2px 4px rgba(23, 29, 43, 0.04), 0 10px 28px -10px rgba(13, 159, 110, 0.16); } /* ── 表格 ── */ .el-table { --el-table-header-bg-color: #f6f8fa; --el-table-header-text-color: #5a6472; --el-table-row-hover-bg-color: #eef8f2; --el-table-border-color: #edf0f4; border-radius: 8px; overflow: hidden; } .el-table th.el-table__cell { font-weight: 600; font-size: 12.5px; letter-spacing: 0.02em; } .el-table .el-table__row { transition: background-color 0.18s ease; } .el-table .cell { font-variant-numeric: tabular-nums; } /* ── 按钮/输入框圆角微调 ── */ .el-button { border-radius: 7px; font-weight: 500; } .el-button--primary { box-shadow: 0 2px 8px -2px rgba(13, 159, 110, 0.45); } .el-input__wrapper, .el-select__wrapper, .el-date-editor { border-radius: 7px; } /* ── 分页器 ── */ .el-pagination.is-background .el-pager li.is-active { background: var(--el-color-primary); box-shadow: 0 2px 6px -1px rgba(13, 159, 110, 0.5); } /* ── 标签(tag) ── */ .el-tag { border-radius: 5px; font-weight: 500; } /* ── 抽屉/对话框 ── */ .el-drawer, .el-dialog { border-radius: 12px; } /* ── 细滚动条 ── */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-thumb { background: #c6cdd8; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #aab4c4; } ::-webkit-scrollbar-track { background: transparent; } .yk-sidenav::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.14); } /* ── 聊天流:纸面质感 ── */ .yk-chat__stream { background: radial-gradient(circle at 1px 1px, rgba(23, 29, 43, 0.028) 1px, transparent 0) 0 0 / 20px 20px, #fdfdfd; border-radius: 12px; } /* ── 页头标题排版 ── */ h2 { letter-spacing: 0.01em; } /* ══ 可点击元素统一玉绿示意(2026-08-22) ══ */ /* 文本链接:玉绿 + 悬停下划线 */ .yk-link { color: var(--el-color-primary); cursor: pointer; transition: color 0.15s ease; } .yk-link:hover { text-decoration: underline; text-underline-offset: 3px; } /* Element 链接按钮:悬停下划线(颜色已随主色) */ .el-button.is-link { transition: color 0.15s ease; } .el-button.is-link:hover { text-decoration: underline; text-underline-offset: 3px; } /* 行级可点击(点行开抽屉):悬停时行首主信息染玉绿,配合行底色示意 */ .el-table .yk-clickable-row { cursor: pointer; } .el-table .yk-clickable-row:hover td:first-child .cell { color: var(--el-color-primary); transition: color 0.15s ease; } /* 聊天会话侧栏:悬停/激活玉绿系 */ .yk-chat-side__item:hover { background: #eef8f2; } .yk-chat-side__item.is-active { background: #e2f5eb; box-shadow: inset 3px 0 0 var(--el-color-primary); }