Files
Neo-ZQYY/tmp/DEMO-miniprogram/miniprogram/pages/chat/chat.wxss

373 lines
7.4 KiB
Plaintext

/* pages/chat/chat.wxss — AI 对话页样式 */
page {
background-color: var(--color-gray-1, #f3f3f3);
}
/* ========== 错误态 ========== */
.page-error {
display: flex;
flex-direction: column;
height: 100vh;
background-color: var(--color-gray-1, #f3f3f3);
}
.error-content {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 24rpx;
}
.error-text {
font-size: 28rpx;
color: var(--color-gray-8, #777777);
}
.retry-btn {
padding: 16rpx 48rpx;
background: var(--color-primary, #0052d9);
border-radius: 22rpx;
}
.retry-btn--hover { opacity: 0.8; }
.retry-btn-text {
font-size: 28rpx;
color: #ffffff;
}
/* ========== 页面容器 ========== */
.chat-page {
display: flex;
flex-direction: column;
height: 100vh;
background-color: var(--color-gray-1, #f3f3f3);
position: relative;
}
/* ========== 消息列表 ========== */
.message-list {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 112rpx;
padding: 24rpx 28rpx;
box-sizing: border-box;
}
.scroll-bottom-spacer {
height: 160rpx;
}
/* ========== 引用内容卡片 ========== */
.reference-card {
background: #ecf2fe;
border-radius: 20rpx;
border-left: 6rpx solid #0052d9;
padding: 22rpx 26rpx;
margin-bottom: 28rpx;
}
.reference-label-row {
display: flex;
align-items: center;
gap: 10rpx;
margin-bottom: 10rpx;
}
.reference-quote-icon {
width: 32rpx;
height: 32rpx;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.reference-tag {
font-size: 20rpx;
line-height: 29rpx;
font-weight: 600;
color: #0052d9;
background: rgba(0, 82, 217, 0.10);
padding: 2rpx 12rpx;
border-radius: 8rpx;
}
.reference-source {
font-size: 20rpx;
line-height: 29rpx;
color: #5e5e5e;
}
.reference-summary {
font-size: 24rpx;
line-height: 36rpx;
color: #393939;
font-weight: 500;
}
/* ========== 空对话提示 ========== */
.empty-hint {
display: flex;
flex-direction: column;
align-items: center;
padding-top: 160rpx;
gap: 18rpx;
}
.empty-ai-avatar {
width: 120rpx;
height: 120rpx;
border-radius: 50%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 8rpx;
box-shadow: 0 12rpx 32rpx rgba(102, 126, 234, 0.30);
}
.empty-ai-img {
width: 72rpx;
height: 72rpx;
}
.empty-text {
font-size: 32rpx;
font-weight: 600;
color: var(--color-gray-13, #242424);
}
.empty-sub {
font-size: 26rpx;
color: var(--color-gray-6, #a6a6a6);
}
/* ========== IM 时间分割线 ========== */
.time-divider {
display: flex;
align-items: center;
justify-content: center;
margin: 20rpx 0 8rpx;
padding: 0 28rpx;
}
.time-divider-inner {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 6rpx 20rpx;
background: rgba(0, 0, 0, 0.06);
border-radius: 20rpx;
margin: 12rpx;
}
.time-divider-text {
font-size: 20rpx;
color: var(--color-gray-7, #8b8b8b);
line-height: 28rpx;
font-variant-numeric: tabular-nums;
}
/* ========== IM 消息行 ========== */
.message-row {
display: flex;
margin-bottom: 28rpx;
}
.message-user {
justify-content: flex-end;
}
.message-assistant {
justify-content: flex-start;
gap: 16rpx;
}
/* ========== AI 头像 ========== */
.ai-avatar {
width: 72rpx;
height: 72rpx;
border-radius: 50%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
box-shadow: 0 6rpx 16rpx rgba(102, 126, 234, 0.25);
overflow: hidden;
}
.ai-avatar-img {
width: 46rpx;
height: 46rpx;
}
/* ========== 气泡 ========== */
.bubble-wrapper {
max-width: 80%;
display: flex;
flex-direction: column;
gap: 12rpx;
}
.bubble {
padding: 20rpx 28rpx;
word-break: break-all;
}
.bubble-text {
font-size: 28rpx;
line-height: 1.65;
}
.bubble-user {
max-width: 80%;
background-color: var(--color-primary, #0052d9);
border-radius: 32rpx 8rpx 32rpx 32rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 82, 217, 0.22);
}
.bubble-user .bubble-text { color: #ffffff; }
.bubble-assistant {
background-color: #ffffff;
border-radius: 8rpx 32rpx 32rpx 32rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
}
.bubble-assistant .bubble-text { color: var(--color-gray-13, #242424); }
/* ========== AI 内联引用卡片 ========== */
.inline-ref-card {
background-color: #ffffff;
border-radius: 20rpx;
padding: 20rpx 24rpx;
border-left: 6rpx solid var(--color-primary, #0052d9);
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
max-width: 80%;
}
/* 用户侧引用卡片:右对齐,挂在用户气泡下方 */
.user-bubble-col {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 12rpx;
max-width: 80%;
}
.inline-ref-card--user {
border-left: none;
border-right: 6rpx solid var(--color-primary, #0052d9);
background-color: #ecf2fe;
max-width: 100%;
}
.inline-ref-header {
display: flex;
align-items: center;
gap: 10rpx;
margin-bottom: 8rpx;
}
.inline-ref-type {
font-size: 22rpx;
color: var(--color-primary, #0052d9);
font-weight: 600;
}
.inline-ref-title {
font-size: 24rpx;
color: var(--color-gray-13, #242424);
font-weight: 500;
}
.inline-ref-summary {
font-size: 22rpx;
color: var(--color-gray-8, #777777);
margin-bottom: 12rpx;
display: block;
line-height: 1.5;
}
.inline-ref-data {
display: flex;
flex-wrap: wrap;
gap: 8rpx 24rpx;
}
.ref-data-item {
display: flex;
align-items: center;
gap: 8rpx;
}
.ref-data-key {
font-size: 20rpx;
color: var(--color-gray-7, #8b8b8b);
}
.ref-data-value {
font-size: 20rpx;
color: var(--color-gray-13, #242424);
font-weight: 500;
}
/* ========== 打字指示器 ========== */
.typing-bubble { padding: 20rpx 32rpx; }
.typing-dots {
display: flex;
align-items: center;
gap: 8rpx;
}
.dot {
width: 12rpx;
height: 12rpx;
border-radius: 50%;
background-color: var(--color-gray-6, #a6a6a6);
animation: typingBounce 1.4s infinite ease-in-out;
}
.dot-1 { animation-delay: 0s; }
.dot-2 { animation-delay: 0.2s; }
.dot-3 { animation-delay: 0.4s; }
@keyframes typingBounce {
0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
40% { transform: scale(1); opacity: 1; }
}
/* ========== 底部输入区域 ========== */
.input-bar {
position: fixed;
left: 0;
right: 0;
display: flex;
align-items: center;
gap: 16rpx;
padding: 16rpx 24rpx 32rpx;
background-color: #ffffff;
border-top: 2rpx solid var(--color-gray-2, #eeeeee);
box-shadow: 0 -4rpx 24rpx rgba(0, 0, 0, 0.04);
z-index: 100;
transition: bottom 0.25s ease;
}
.input-wrapper {
flex: 1;
background-color: var(--color-gray-1, #f3f3f3);
border-radius: 48rpx;
padding: 18rpx 28rpx;
min-height: 72rpx;
display: flex;
align-items: center;
}
.chat-input {
width: 100%;
font-size: 28rpx;
color: var(--color-gray-13, #242424);
line-height: 1.4;
background: transparent;
}
.input-placeholder {
color: var(--color-gray-6, #a6a6a6);
font-size: 28rpx;
}
.send-btn {
width: 88rpx;
height: 72rpx;
border-radius: 36rpx;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
transition: opacity 0.15s, transform 0.15s;
}
.send-btn-active {
background: var(--color-primary, #0052d9);
box-shadow: 0 4rpx 16rpx rgba(0, 82, 217, 0.28);
}
.send-btn-disabled {
background-color: var(--color-gray-3, #e0e0e0);
}
.send-btn--hover {
opacity: 0.75;
transform: scale(0.95);
}
.send-icon {
width: 44rpx;
height: 44rpx;
}