roxqtang's picture
Initial commit
8fe50ee
/* Global Reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif; /* Updated Font */
}
body {
background-color: #f0f2f5; /* Lighter grey background */
color: #1c1e21; /* Darker text color */
line-height: 1.5;
display: flex;
height: 100vh;
overflow: hidden;
}
/* Container */
.container {
display: flex;
width: 100%;
height: 100%;
}
/* Sidebar */
.sidebar {
width: 260px; /* Slightly wider */
background-color: #ffffff; /* White background */
color: #333; /* Dark text for sidebar */
display: flex;
flex-direction: column;
height: 100%;
border-right: 1px solid #e0e0e0; /* Subtle border */
flex-shrink: 0;
}
.sidebar-header {
padding: 25px 20px; /* Increased padding */
text-align: left; /* Align left */
border-bottom: 1px solid #e0e0e0;
}
.sidebar-header h1 {
font-size: 1.6rem; /* Slightly larger */
font-weight: 600;
color: #0d6efd; /* Accent color */
}
.sidebar-menu {
flex-grow: 1;
padding: 15px 0; /* Reduced top/bottom padding */
}
.sidebar-menu ul {
list-style: none;
}
.sidebar-menu li {
margin-bottom: 5px; /* Reduced margin */
}
.sidebar-menu a {
display: flex;
align-items: center;
padding: 12px 20px; /* Adjusted padding */
color: #555; /* Grey text color */
text-decoration: none;
transition: all 0.2s ease;
border-radius: 5px; /* Slight rounding */
margin: 0 10px; /* Horizontal margin */
}
.sidebar-menu a i {
margin-right: 12px; /* Increased icon margin */
width: 20px;
text-align: center;
font-size: 1.1em; /* Slightly larger icons */
color: #888; /* Lighter icon color */
}
.sidebar-menu a:hover,
.sidebar-menu li.active a {
background-color: #e7f3ff; /* Light blue background for hover/active */
color: #0d6efd; /* Blue text for hover/active */
}
.sidebar-menu li.active a i,
.sidebar-menu a:hover i {
color: #0d6efd; /* Blue icon for hover/active */
}
.sidebar-footer {
padding: 15px;
text-align: center;
font-size: 0.8rem;
color: #aaa; /* Lighter grey */
border-top: 1px solid #e0e0e0;
}
/* Main Content Area */
.main-content {
flex-grow: 1;
padding: 20px;
overflow-y: auto; /* Enable vertical scroll */
background-color: #f0f2f5;
display: flex;
flex-direction: column;
gap: 20px; /* Space between sections */
}
/* Card Style */
.card {
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
padding: 20px;
border: 1px solid #e0e0e0; /* Subtle border for cards */
}
.card h2 {
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 15px;
color: #333;
display: flex;
align-items: center;
}
.card h2 i {
margin-right: 10px;
color: #0d6efd;
}
/* Sections Layout */
.top-section,
.middle-section {
display: flex;
gap: 20px;
}
.top-section > div,
.middle-section > div {
flex: 1;
min-width: 0; /* Prevent flex overflow */
}
/* Upload Panel */
.upload-panel .file-upload-container {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.upload-btn {
background-color: #0d6efd;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 1rem;
transition: background-color 0.2s ease;
margin-bottom: 10px;
}
.upload-btn:hover {
background-color: #0b5ed7;
}
.supported-files {
font-size: 0.85rem;
color: #888;
margin-bottom: 10px;
}
/* 文件上传列表容器 */
.file-list-container {
margin-top: 15px;
width: 100%;
}
/* 文件列表表格样式 */
.file-list-table {
list-style: none;
padding: 0;
width: 100%;
border: 1px solid #e0e0e0;
border-radius: 5px;
background-color: #f8f9fa;
overflow: hidden;
}
#file-list {
list-style: none;
padding: 0;
margin: 0;
max-height: 250px;
overflow-y: auto;
border: 1px solid #e0e0e0;
border-radius: 5px;
background-color: #f8f9fa;
}
#file-list:empty {
border: none;
padding: 0;
margin: 0;
height: 0;
}
#file-list li {
padding: 10px 15px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-items: center;
font-size: 0.9rem;
position: relative;
background-color: white;
}
#file-list li:nth-child(odd) {
background-color: #f8f9fa;
}
#file-list li:last-child {
border-bottom: none;
}
#file-list li i {
margin-right: 10px;
color: #6c757d;
}
/* 文件信息部分 */
.file-name {
flex-grow: 1;
font-weight: 500;
color: #333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 70%;
}
/* 文件状态样式 */
.file-status {
padding: 3px 8px;
border-radius: 12px;
font-size: 0.8rem;
font-weight: normal;
white-space: nowrap;
margin-left: auto;
}
/* 不同状态的样式 */
.file-status-uploading {
color: #0d6efd;
background-color: rgba(13, 110, 253, 0.1);
}
.file-status-success {
color: #198754;
background-color: rgba(25, 135, 84, 0.1);
}
.file-status-error {
color: #dc3545;
background-color: rgba(220, 53, 69, 0.1);
}
.file-status-retrying {
color: #fd7e14;
background-color: rgba(253, 126, 20, 0.1);
}
/* Summary & Tags Panel */
.summary-tags-panel {
display: flex;
flex-direction: column;
}
/* 文件信息部分样式 */
.file-info-section {
margin-bottom: 15px;
border-bottom: 1px solid #e0e0e0;
padding-bottom: 10px;
}
.file-info-section h4 {
font-size: 1rem;
font-weight: 600;
color: #444;
margin-bottom: 8px;
padding-left: 5px;
border-left: 3px solid #0d6efd;
}
#uploaded-filename {
font-size: 1.25rem;
font-weight: 700;
color: #0d6efd;
margin-bottom: 15px;
padding-left: 10px;
border-left: 4px solid #0d6efd;
display: block;
width: 100%;
}
.summary-section h4 {
font-size: 1rem;
font-weight: 600;
color: #444;
margin-bottom: 8px;
padding-left: 5px;
border-left: 3px solid #0d6efd;
}
/* 文档标签区域 */
.document-tags-container {
margin-top: 10px;
margin-bottom: 15px;
}
.document-tag-group {
margin-bottom: 12px;
border-left: 2px solid #e7f3ff;
padding-left: 8px;
}
.document-tag-header {
display: flex;
align-items: center;
cursor: pointer;
padding: 5px 8px;
background-color: #f8f9fa;
border-radius: 4px;
margin-bottom: 5px;
}
.document-tag-header:hover {
background-color: #e7f3ff;
}
.document-tag-header i {
margin-right: 8px;
color: #0d6efd;
transition: transform 0.2s ease;
}
.document-tag-header.active i.fa-chevron-right {
transform: rotate(90deg);
}
.document-tag-name {
font-weight: 500;
color: #333;
}
.document-tag-content {
display: none;
padding: 5px 0 5px 20px;
}
.document-tag-content.active {
display: block;
}
/* 标签容器放在文件名下面 */
#tags-container {
margin-top: 8px;
margin-bottom: 12px;
}
.tag {
display: inline-block;
background-color: #e7f3ff; /* Light blue background */
color: #0d6efd; /* Blue text */
padding: 5px 12px; /* Adjusted padding */
border-radius: 15px;
font-size: 0.85rem;
font-weight: 500;
margin-right: 6px;
margin-bottom: 6px;
}
#summary-area {
flex-grow: 1;
width: 100%;
min-height: 150px; /* 增加高度 */
padding: 12px 15px;
border: 1px solid #ccc;
border-radius: 5px;
background-color: #f8f9fa; /* Light background for textarea */
resize: vertical; /* Allow vertical resize */
outline: none;
font-size: 0.95rem;
line-height: 1.5;
color: #333;
font-family: 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
white-space: pre-wrap; /* 保留换行 */
}
/* Knowledge Folders Panel */
.knowledge-folders-panel .folder-list {
list-style: none;
padding: 0;
}
.knowledge-folders-panel .folder-list li {
padding: 8px 0;
font-size: 0.95rem;
color: #333;
display: flex;
align-items: center;
border-bottom: 1px dashed #eee; /* Dashed separator */
}
.knowledge-folders-panel .folder-list li:last-child {
border-bottom: none;
}
.knowledge-folders-panel .folder-list i {
margin-right: 10px;
color: #ffc107; /* Folder icon color */
}
/* Chat Panel */
.chat-panel {
display: flex;
flex-direction: column;
overflow: hidden; /* Prevent content overflow */
height: 450px; /* Fixed height for chat panel */
}
.chat-history {
flex-grow: 1;
padding: 15px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 15px;
background-color: #f8f9fa; /* Light background for chat history */
border-radius: 5px;
margin-bottom: 15px;
}
.message {
max-width: 85%; /* Slightly wider messages */
padding: 10px 15px; /* Adjusted padding */
border-radius: 18px;
line-height: 1.5;
word-wrap: break-word;
}
.user-message {
align-self: flex-end;
background-color: #0d6efd; /* Blue user messages */
color: white;
border-bottom-right-radius: 5px;
}
.bot-message {
align-self: flex-start;
background-color: #e9ecef; /* Light grey bot messages */
color: #333;
border-bottom-left-radius: 5px;
}
.input-container {
padding-top: 15px;
display: flex;
align-items: center; /* Align items vertically */
gap: 10px;
border-top: 1px solid #e0e0e0;
}
#user-input {
flex-grow: 1;
padding: 10px 15px;
border: 1px solid #ccc;
border-radius: 20px;
background-color: #fff;
resize: none;
outline: none;
min-height: 40px; /* Match button height */
max-height: 100px; /* Limit expansion */
font-size: 0.95rem;
}
#send-btn {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: #0d6efd;
color: white;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.2s ease;
}
#send-btn:hover {
background-color: #0b5ed7;
}
.status-indicator {
margin-top: 8px;
font-size: 0.8rem;
color: #dc3545; /* Default to error color */
min-height: 1em;
}
.status-indicator.success {
color: #198754; /* Green for success */
}
/* Review Panel */
.review-panel p {
font-size: 0.95rem;
color: #555;
}
.review-panel strong {
color: #0d6efd;
}
/* Remove old status indicator style from chat header */
/* #status-indicator { ... } */
/* Remove old typing indicator styles if they exist */
/* .typing-indicator { ... } */
/* .typing-dot { ... } */
/* @keyframes typingAnimation { ... } */
/* Adjustments for responsiveness if needed */
@media (max-width: 1200px) {
.top-section,
.middle-section {
flex-direction: column;
}
.chat-panel {
height: auto; /* Allow chat panel height to adjust */
min-height: 400px;
}
}
@media (max-width: 768px) {
.sidebar {
width: 100%;
height: auto;
position: static; /* Or fixed/sticky as needed */
border-right: none;
border-bottom: 1px solid #e0e0e0;
}
.main-content {
padding: 15px;
}
body {
flex-direction: column;
height: auto;
overflow: visible;
}
.container {
flex-direction: column;
height: auto;
}
}
/* 打字指示器样式 */
.typing-indicator span {
display: inline-block;
width: 6px;
height: 6px;
background-color: #999;
border-radius: 50%;
margin: 0 2px;
animation: typingAnimation 1.4s infinite ease-in-out;
}
.typing-indicator span:nth-child(1) {
animation-delay: 0s;
}
.typing-indicator span:nth-child(2) {
animation-delay: 0.2s;
}
.typing-indicator span:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes typingAnimation {
0%, 60%, 100% {
transform: translateY(0);
opacity: 0.6;
}
30% {
transform: translateY(-4px);
opacity: 1;
}
}
/* 文件状态样式 */
.file-status {
color: #666;
font-size: 0.85rem;
font-style: italic;
}
/* 状态指示器类型 */
.status-indicator.info {
color: #0d6efd;
}
.status-indicator.success {
color: #198754;
}
.status-indicator.error {
color: #dc3545;
}
/* 添加错误消息样式 */
.error-message {
background-color: #ffe6e6 !important; /* 浅红色背景 */
border-left: 3px solid #dc3545; /* 红色左边框 */
}
.error-message .message-content {
color: #721c24; /* 深红色文本 */
font-size: 0.9rem;
line-height: 1.6;
}
/* 空标签样式 */
.tag.empty-tag {
background-color: #f0f0f0; /* 灰色背景 */
color: #666; /* 灰色文本 */
}
/* 摘要内容区域样式 */
.summary-content {
width: 100%;
min-height: 150px;
max-height: 400px;
padding: 12px 15px;
border: 1px solid #ccc;
border-radius: 5px;
background-color: #f8f9fa;
overflow-y: auto;
font-size: 0.95rem;
line-height: 1.5;
color: #333;
white-space: pre-wrap;
}
/* 文件标题样式 - 对应Markdown中的## */
.summary-content h2 {
font-size: 1.1rem;
font-weight: 700;
color: #0d6efd;
margin-top: 15px;
margin-bottom: 10px;
padding-left: 8px;
border-left: 3px solid #0d6efd;
}
/* 摘要标题样式 - 对应Markdown中的### */
.summary-content h3 {
font-size: 0.95rem;
font-weight: 600;
color: #444;
margin-top: 8px;
margin-bottom: 8px;
padding-left: 5px;
border-left: 2px solid #28a745;
}
/* 摘要中的段落样式 */
.summary-content p {
margin-bottom: 10px;
}
/* 占位文本样式 */
.placeholder-text {
color: #999;
font-style: italic;
}
/* 文件分隔线样式 */
.file-divider {
height: 1px;
background-color: #e0e0e0;
margin: 15px 0;
}
/* 知识图谱页面样式 */
.knowledge-map-section {
height: calc(100vh - 60px);
display: flex;
flex-direction: column;
}
.knowledge-map-panel {
display: flex;
flex-direction: column;
flex-grow: 1;
overflow: hidden;
}
.map-controls {
display: flex;
align-items: center;
padding: 10px 0;
margin-bottom: 15px;
border-bottom: 1px solid #e0e0e0;
flex-wrap: wrap; /* 允许控制项在窄屏幕上换行 */
}
.control-group {
display: flex;
align-items: center;
margin-right: 20px;
margin-bottom: 5px; /* 在换行时提供一些垂直间距 */
}
.control-group label {
margin-right: 8px;
font-size: 0.9rem;
color: #555;
}
.map-control-select {
padding: 5px 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 0.9rem;
background-color: #fff;
}
.map-control-btn {
background-color: #0d6efd;
color: white;
padding: 5px 12px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 0.9rem;
transition: background-color 0.2s ease;
margin-right: 10px; /* 按钮之间的间距 */
white-space: nowrap; /* 防止文本换行 */
display: flex;
align-items: center;
}
.map-control-btn i {
margin-right: 5px;
}
.map-control-btn:hover {
background-color: #0b5ed7;
}
#view-toggle-btn {
background-color: #6c757d; /* 不同的颜色以区分功能 */
}
#view-toggle-btn:hover {
background-color: #5a6268;
}
/* 添加视图模式指示器 */
.view-mode-indicator {
margin-left: auto; /* 推到右边 */
font-size: 0.85rem;
color: #6c757d;
font-style: italic;
}
/* 节点类型样式 */
.tag-node {
color: #0d6efd;
}
.document-node {
color: #e15759;
}
.category-node {
color: #f28e2c;
}
.knowledge-map-container {
flex-grow: 1;
width: 100%;
height: 70%;
min-height: 400px;
border: 1px solid #e0e0e0;
border-radius: 5px;
background-color: #f8f9fa;
overflow: hidden;
position: relative;
}
.map-info {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid #e0e0e0;
}
.map-info p {
font-size: 0.9rem;
color: #666;
margin-bottom: 10px;
}
.node-info {
background-color: #f8f9fa;
border: 1px solid #e0e0e0;
border-radius: 5px;
padding: 15px;
margin-top: 10px;
}
.node-info h3 {
font-size: 1.1rem;
font-weight: 600;
color: #333;
margin-bottom: 10px;
padding-left: 8px;
border-left: 3px solid #0d6efd;
}
.node-details {
font-size: 0.95rem;
line-height: 1.5;
color: #444;
}
.node-details .tag-list {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-top: 8px;
}
.node-details .document-link {
display: inline-flex;
align-items: center;
margin-top: 10px;
background-color: #e7f3ff;
color: #0d6efd;
padding: 6px 12px;
border-radius: 4px;
text-decoration: none;
font-size: 0.9rem;
transition: all 0.2s ease;
}
.node-details .document-link:hover {
background-color: #0d6efd;
color: white;
}
/* 词云链接样式 */
.node-details .wordcloud-link {
display: inline-flex;
align-items: center;
margin-top: 10px;
margin-left: 10px;
background-color: #e8f5e9;
color: #2e7d32;
padding: 6px 12px;
border-radius: 4px;
text-decoration: none;
font-size: 0.9rem;
transition: all 0.2s ease;
}
.node-details .wordcloud-link:hover {
background-color: #2e7d32;
color: white;
}
/* 文档操作按钮容器 */
.document-action-buttons {
display: flex;
flex-wrap: wrap;
margin-top: 15px;
}
.document-action-buttons a i {
margin-right: 5px;
}
/* 知识图谱缩放控制器 */
.zoom-controllers {
position: absolute;
top: 10px;
right: 10px;
z-index: 100;
display: flex;
flex-direction: column;
gap: 5px;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 4px;
padding: 5px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
}
.zoom-btn {
width: 36px;
height: 36px;
border-radius: 4px;
background-color: white;
border: 1px solid #ddd;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
}
.zoom-btn:hover {
background-color: #f0f0f0;
border-color: #ccc;
}
.zoom-btn i {
color: #555;
font-size: 16px;
}
.zoom-btn:hover i {
color: #0d6efd;
}
/* 强调当前活动的节点 */
.active-node-path {
stroke-width: 2;
stroke: #0d6efd;
}
/* 在知识图谱容器上添加相对定位以支持缩放控制器定位 */
.knowledge-map-container.draggable {
cursor: grab;
}
.knowledge-map-container.dragging {
cursor: grabbing;
}
/* 词云图布局样式 */
.wordcloud-mode .node {
font-size: 1.2em;
font-weight: bold;
transition: transform 0.3s ease, font-size 0.3s ease;
}
.wordcloud-mode .node:hover {
transform: scale(1.1);
z-index: 10;
}
.wordcloud-mode .document-node {
color: #0d6efd;
font-size: 1.3em;
}
/* 词云图模态框样式 */
.wordcloud-modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.wordcloud-modal-content {
width: 80%;
max-width: 900px;
max-height: 80vh;
background-color: white;
border-radius: 8px;
overflow: auto;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
}
.wordcloud-modal-header {
padding: 15px 20px;
border-bottom: 1px solid #e0e0e0;
display: flex;
justify-content: space-between;
align-items: center;
}
.wordcloud-modal-header h3 {
margin: 0;
color: #333;
font-size: 1.2rem;
}
.close-modal {
background: none;
border: none;
font-size: 1.2rem;
color: #666;
cursor: pointer;
padding: 5px;
border-radius: 50%;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.2s ease;
}
.close-modal:hover {
background-color: #f0f0f0;
color: #333;
}
.wordcloud-modal-body {
padding: 20px;
overflow-y: auto;
}
.loading-indicator {
text-align: center;
padding: 30px;
color: #666;
}
.loading-indicator i {
font-size: 2rem;
margin-bottom: 10px;
color: #0d6efd;
}
.wordcloud-image-container {
text-align: center;
margin-bottom: 20px;
}
.wordcloud-image {
max-width: 100%;
max-height: 400px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
border-radius: 4px;
}
.wordcloud-freq-container {
border-top: 1px solid #e0e0e0;
padding-top: 15px;
margin-top: 15px;
}
.wordcloud-freq-container h4 {
margin-bottom: 10px;
color: #333;
font-size: 1rem;
}
.word-freq-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
max-height: 150px;
overflow-y: auto;
padding: 10px;
background-color: #f8f9fa;
border-radius: 5px;
}
/* 在词云图布局中强调文档节点 */
.map-control-select option[value="wordcloud"] {
font-weight: bold;
color: #0d6efd;
}
/* 直接生成词云图按钮样式 */
.generate-cloud-link {
display: inline-flex;
align-items: center;
margin-top: 10px;
margin-left: 10px;
background-color: #fff0e5;
color: #ff6d00;
padding: 6px 12px;
border-radius: 4px;
text-decoration: none;
font-size: 0.9rem;
transition: all 0.2s ease;
}
.generate-cloud-link:hover {
background-color: #ff6d00;
color: white;
}
/* 相关文档样式 */
.related-docs {
margin-top: 10px;
max-height: 300px;
overflow-y: auto;
border: 1px solid #e0e0e0;
border-radius: 5px;
padding: 10px;
background-color: #f8f9fa;
}
.related-doc-item {
padding: 10px;
border-bottom: 1px solid #eee;
transition: background-color 0.2s ease;
}
.related-doc-item:last-child {
border-bottom: none;
}
.related-doc-item:hover {
background-color: #f0f0f0;
}
.doc-title {
display: block;
font-weight: 500;
color: #333;
margin-bottom: 5px;
}
/* 词云图专用样式增强 */
#knowledge-map-container.wordcloud-mode {
background-color: #ffffff !important;
border: 1px solid #ddd !important;
padding: 10px;
overflow: visible !important;
min-height: 400px;
}
/* 词云图样式增强 */
.wordcloud-mode div {
overflow: visible !important;
}
/* 确保词云图文字可见 */
.wordcloud-mode text,
.wordcloud-mode .ec-wordCloud text,
.wordcloud-mode svg text {
fill: #333 !important;
fill-opacity: 1 !important;
font-weight: bold !important;
stroke: none !important;
font-family: 'Arial', '微软雅黑', sans-serif !important;
visibility: visible !important;
opacity: 1 !important;
}
/* 强制显示SVG元素 */
.wordcloud-mode svg,
.wordcloud-mode canvas {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
}
/* 去除任何可能引起问题的遮挡元素 */
.wordcloud-mode * {
pointer-events: auto !important;
}
/* 确保词语悬停时的效果 */
.wordcloud-mode text:hover,
.wordcloud-mode .ec-wordCloud text:hover {
fill: #f00 !important;
cursor: pointer;
transform: scale(1.1);
}
/* 词云图词语样式 */
.ec-wordCloud text {
cursor: pointer;
transition: all 0.3s ease;
text-shadow: 0 2px 1px rgba(0,0,0,0.1);
fill-opacity: 1 !important; /* 确保文字不透明 */
font-weight: bold;
}
.ec-wordCloud text:hover {
fill-opacity: 0.8;
transform: scale(1.1);
text-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
/* 当选择词云图模式时应用特殊样式 */
.wordcloud-mode .ec-wordCloud {
transform-origin: center center;
animation: wordcloud-appear 1s ease-out;
}
@keyframes wordcloud-appear {
0% {
opacity: 0;
transform: scale(0.95);
}
100% {
opacity: 1;
transform: scale(1);
}
}
/* 根据字体大小设置不同样式 */
.ec-wordCloud text[font-size="24"],
.ec-wordCloud text[font-size="25"],
.ec-wordCloud text[font-size="26"],
.ec-wordCloud text[font-size="27"],
.ec-wordCloud text[font-size="28"],
.ec-wordCloud text[font-size="29"],
.ec-wordCloud text[font-size="30"] {
opacity: 0.9;
}
.ec-wordCloud text[font-size="31"],
.ec-wordCloud text[font-size="32"],
.ec-wordCloud text[font-size="33"],
.ec-wordCloud text[font-size="34"],
.ec-wordCloud text[font-size="35"],
.ec-wordCloud text[font-size="40"] {
opacity: 0.95;
}
.ec-wordCloud text[font-size="41"],
.ec-wordCloud text[font-size="42"],
.ec-wordCloud text[font-size="43"],
.ec-wordCloud text[font-size="44"],
.ec-wordCloud text[font-size="45"],
.ec-wordCloud text[font-size="50"] {
opacity: 1;
font-weight: bold;
}
.ec-wordCloud text[font-size="60"],
.ec-wordCloud text[font-size="70"],
.ec-wordCloud text[font-size="80"],
.ec-wordCloud text[font-size="90"],
.ec-wordCloud text[font-size="100"] {
opacity: 1;
font-weight: bold;
text-shadow: 0 2px 3px rgba(0,0,0,0.2);
}
/* 知识图谱节点样式由JS控制 */
/* 词云图容器样式 */
.wordcloud-container {
background-color: #ffffff !important;
border: 1px solid #e0e0e0 !important;
border-radius: 8px !important;
padding: 15px !important;
min-height: 400px !important;
position: relative !important;
margin-top: 20px !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important;
}
/* 确保词云图内的文字清晰可见 */
.wordcloud-container .echarts-for-react text,
.wordcloud-container text {
fill: #333333 !important;
font-weight: bold !important;
font-family: 'Arial', sans-serif !important;
pointer-events: auto !important;
cursor: pointer !important;
text-shadow: 0px 0px 2px rgba(255, 255, 255, 0.8) !important;
transition: all 0.2s ease !important;
}
/* 词云图高亮状态 */
.wordcloud-container text:hover {
fill: #2c85ff !important;
transform: scale(1.1) !important;
}
/* 词云图加载状态 */
.wordcloud-loading {
position: absolute !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
text-align: center !important;
color: #666 !important;
}
/* 相关文档列表样式 */
.related-docs {
max-height: 300px !important;
overflow-y: auto !important;
margin-top: 10px !important;
border: 1px solid #eee !important;
border-radius: 4px !important;
padding: 10px !important;
}
.related-doc-item {
padding: 8px !important;
border-bottom: 1px solid #eee !important;
display: flex !important;
flex-direction: column !important;
}
.related-doc-item:last-child {
border-bottom: none !important;
}
.doc-title {
font-weight: bold !important;
margin-bottom: 5px !important;
}
.document-action-buttons {
display: flex !important;
gap: 10px !important;
margin-top: 5px !important;
}
.document-link, .wordcloud-link {
color: #2c85ff !important;
text-decoration: none !important;
font-size: 0.9em !important;
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
}
.document-link:hover, .wordcloud-link:hover {
text-decoration: underline !important;
}
/* 树形图节点悬停样式 */
.node:hover {
cursor: pointer !important;
filter: brightness(1.1) !important;
}
/* 添加知识文件夹相关的样式 */
.folder-list {
list-style: none;
padding: 0;
margin: 0;
}
.folder-item {
margin-bottom: 10px;
border-radius: 6px;
overflow: hidden;
border: 1px solid #e5e7eb;
background-color: #f9fafb;
}
.folder-header {
padding: 10px 15px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
background-color: #f3f4f6;
transition: background-color 0.3s;
}
.folder-header:hover {
background-color: #e5e7eb;
}
.folder-toggle {
transition: transform 0.3s;
}
.file-list {
list-style: none;
padding: 0;
margin: 0;
background-color: #ffffff;
}
.file-item {
padding: 8px 15px 8px 35px;
border-top: 1px solid #e5e7eb;
display: flex;
align-items: center;
font-size: 0.9em;
}
.file-item i {
margin-right: 8px;
color: #6b7280;
}
.file-tag {
margin-left: 5px;
font-size: 0.85em;
color: #9ca3af;
font-style: italic;
}
.file-link {
color: #3b82f6;
text-decoration: none;
}
.file-link:hover {
text-decoration: underline;
}
.demo-notice {
margin-top: 15px;
padding: 10px;
border-radius: 6px;
background-color: #fff7ed;
border: 1px solid #ffedd5;
color: #c2410c;
font-size: 0.9em;
}
/* 确保已存在的样式不受影响 */