tai-JY / src /styles.css
youngtsai's picture
chat Markdown
cd297eb
/* 現有樣式 */
/* 新增更明顯的打字動畫 */
.typing-animation {
margin-top: 8px;
padding-top: 6px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.typing-text {
font-size: 14px;
color: #666;
font-style: italic;
min-width: 80px;
animation: pulse 2s infinite ease-in-out;
}
@keyframes pulse {
0% { opacity: 0.6; }
50% { opacity: 1; }
100% { opacity: 0.6; }
}
/* 更生動的打字指示器 */
.typing-indicator {
display: flex;
align-items: center;
margin-top: 8px;
padding-top: 6px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
font-size: 14px;
color: #666;
}
.typing-indicator span {
margin-right: 5px;
}
.typing-dots {
display: inline-flex;
align-items: center;
}
.typing-dots span {
width: 4px;
height: 4px;
margin: 0 1px;
background-color: #666;
border-radius: 50%;
animation: blink 1.4s infinite both;
}
.typing-dots span:nth-child(2) {
animation-delay: 0.2s;
}
.typing-dots span:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes blink {
0% { opacity: 0.2; }
20% { opacity: 1; }
100% { opacity: 0.2; }
}
/* 添加閃爍的光標效果 */
.blinking-cursor {
display: inline-block;
width: 8px;
height: 16px;
background-color: #333;
margin-left: 2px;
animation: blink 1s infinite;
}
@keyframes blink {
0%, 49% {
opacity: 1;
}
50%, 100% {
opacity: 0;
}
}
/* 呼吸效果的氣泡 */
.ai-bubble.breathing {
animation: breathe 2s infinite ease-in-out;
box-shadow: 0 0 8px rgba(0, 120, 255, 0.3);
}
@keyframes breathe {
0%, 100% {
transform: scale(1);
box-shadow: 0 0 8px rgba(0, 120, 255, 0.3);
}
50% {
transform: scale(1.02);
box-shadow: 0 0 12px rgba(0, 120, 255, 0.5);
}
}
/* 打字光標效果 */
.typing-cursor {
display: inline-block;
width: 2px;
height: 16px;
background-color: #3498db;
margin-left: 2px;
vertical-align: middle;
animation: cursor-blink 1s infinite;
}
@keyframes cursor-blink {
0%, 49% { opacity: 1; }
50%, 100% { opacity: 0; }
}
/* 確保消息內容區域有適當的樣式 */
.message-content {
display: inline;
}
/* Markdown 樣式 */
.markdown-content h1 {
font-size: 1.8em;
margin-top: 16px;
margin-bottom: 8px;
font-weight: 600;
}
.markdown-content h2 {
font-size: 1.5em;
margin-top: 14px;
margin-bottom: 7px;
font-weight: 600;
}
.markdown-content h3 {
font-size: 1.3em;
margin-top: 12px;
margin-bottom: 6px;
font-weight: 600;
}
.markdown-content h4, .markdown-content h5, .markdown-content h6 {
font-size: 1.1em;
margin-top: 10px;
margin-bottom: 5px;
font-weight: 600;
}
.markdown-content strong {
font-weight: 700;
}
.markdown-content em {
font-style: italic;
}
.markdown-content code {
font-family: 'Courier New', Courier, monospace;
background-color: rgba(0, 0, 0, 0.05);
padding: 2px 4px;
border-radius: 3px;
font-size: 0.9em;
}
.markdown-content pre {
background-color: #f6f8fa;
border-radius: 6px;
padding: 16px;
overflow: auto;
margin: 16px 0;
}
.markdown-content pre code {
background-color: transparent;
padding: 0;
font-size: 0.9em;
white-space: pre;
}
.markdown-content a {
color: #0366d6;
text-decoration: none;
}
.markdown-content a:hover {
text-decoration: underline;
}
.markdown-content blockquote {
border-left: 4px solid #dfe2e5;
padding-left: 16px;
color: #6a737d;
margin: 16px 0;
}
.markdown-content ul, .markdown-content ol {
padding-left: 24px;
margin: 8px 0;
}
.markdown-content img {
max-width: 100%;
margin: 8px 0;
}
.markdown-content table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.markdown-content table th, .markdown-content table td {
border: 1px solid #dfe2e5;
padding: 8px 12px;
}
.markdown-content table th {
background-color: #f6f8fa;
font-weight: 600;
}
/* 確保 AI 氣泡內的 Markdown 內容有適當的間距 */
.ai-bubble .markdown-content {
margin: 0;
}
.ai-bubble .markdown-content > *:first-child {
margin-top: 0;
}
.ai-bubble .markdown-content > *:last-child {
margin-bottom: 0;
}