paper-burner/css/history_detail/_deprecated/immersive_layout.css

1105 lines
28 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* css/immersive_layout.css */
:root {
--immersive-separator-color: var(--color-slate-200);
--immersive-handle-width: 1px;
--immersive-handle-color: transparent;
--immersive-handle-hover-color: var(--color-primary-100);
--immersive-panel-min-width: 200px; /* 增加最小宽度,避免布局崩坏 */
--dock-height-in-immersive: 45px;
--immersive-transition-duration: 0.2s;
--immersive-surface-bg: var(--color-slate-50);
--immersive-panel-bg: #ffffff;
}
/* 确保沉浸式布局容器在需要时可以显示为 flex */
#immersive-layout-container {
/* display: flex; */ /* JS会控制这个 */
background: var(--immersive-surface-bg);
font-family: var(--font-sans);
}
#immersive-content-area {
display: flex;
flex: 1;
overflow: hidden;
/* height: calc(100vh - var(--dock-height-in-immersive)); */ /* REMOVED: 为Dock预留空间, 现在dock在TOC内部 */
}
.immersive-panel {
overflow: hidden;
padding: 0;
box-sizing: border-box;
position: relative;
min-width: var(--immersive-panel-min-width);
display: flex;
flex-direction: column;
height: 100%;
background: var(--immersive-panel-bg);
transition: all var(--immersive-transition-duration) ease;
margin: 0;
border-right: 1px solid var(--immersive-separator-color);
}
/* 主内容区域在沉浸模式下可能需要特殊处理其内部的 .container 样式 */
#immersive-main-content-area .container {
width: 100% !important;
max-width: 100% !important;
margin: 0 !important;
padding: 8px 16px !important;
box-shadow: none;
height: 100%;
display: flex;
flex-direction: column;
gap: 6px;
background: #ffffff;
border-radius: 0;
border: none;
position: relative;
overflow: hidden;
box-sizing: border-box;
}
/* 将标题和 meta 信息合并到一行 */
#immersive-main-content-area .container > h2 {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
padding: 0;
gap: 12px;
}
#immersive-main-content-area .container > .meta {
position: absolute;
top: 8px;
right: 16px;
margin: 0;
display: flex;
align-items: center;
gap: 8px;
}
/* tabs 和 fileName/meta 在同一行区域 */
#immersive-main-content-area .container > .tabs-container {
order: 0;
margin-top: 0;
}
#immersive-main-content-area .container .tabs-container {
flex-shrink: 0;
}
#immersive-main-content-area .container .tab-content {
flex-grow: 1;
overflow-y: auto !important; /* 确保tab-content是滚动容器 */
height: 0; /* flex-grow 生效的关键 */
margin-bottom: 0; /* 移除可能的外边距 */
margin-top: 0 !important; /* 覆盖原始的 margin-top: -2px */
padding: 0 !important; /* 覆盖原始的 padding: 24px */
min-height: 0 !important; /* 覆盖原始的 min-height: 300px */
background: transparent !important; /* 移除背景色,避免视觉干扰 */
border-radius: 0 !important; /* 移除圆角 */
display: flex !important;
flex-direction: column !important;
}
/* 强制修复:确保所有内容容器都正确填充 */
#immersive-main-content-area .tab-content .content-wrapper {
flex: 1 !important;
min-height: 0 !important;
overflow-y: auto !important;
margin: 0 !important;
display: flex !important;
flex-direction: column !important;
padding: 20px !important; /* 给内容适当的呼吸空间 */
}
#immersive-main-content-area .tab-content .chunk-compare-container {
/* 让 tab-content 成为唯一滚动容器,避免内部再滚动 */
flex: none !important;
min-height: auto !important;
overflow: visible !important;
margin: 0 !important;
display: block !important;
}
/* chunk-compare-container保持原有的间距设计 */
#immersive-main-content-area .tab-content .chunk-compare-container {
padding: 0 !important; /* chunk-compare有自己的内部间距 */
}
/* 确保h3标题不影响flex计算 */
#immersive-main-content-area .tab-content > h3 {
flex: none !important;
margin-bottom: 16px !important;
margin-top: 0 !important;
}
#immersive-main-content-area .container .tab-content:last-child {
margin-bottom: 0 !important;
}
/* TOC - 极简美观 */
#immersive-toc-area #toc-popup {
position: static;
display: flex !important;
flex-direction: column;
width: 100% !important;
flex-grow: 1;
border: none !important;
box-shadow: none !important;
transform: none !important;
visibility: visible !important;
opacity: 1 !important;
padding: 0;
margin: 0;
background: transparent;
overflow: hidden;
}
#immersive-toc-area #toc-popup #toc-popup-header {
display: none;
}
#immersive-toc-area #toc-popup #toc-list {
overflow-y: auto;
flex-grow: 1;
padding: 8px 0;
background: transparent;
max-height: none !important;
scrollbar-width: thin;
scrollbar-color: rgba(0, 0, 0, 0.06) transparent;
}
#immersive-toc-area #toc-popup #toc-list::-webkit-scrollbar {
width: 2px;
}
#immersive-toc-area #toc-popup #toc-list::-webkit-scrollbar-track {
background: transparent;
}
#immersive-toc-area #toc-popup #toc-list::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.06);
border-radius: 1px;
}
#immersive-toc-area #toc-list li {
margin: 0 !important;
}
#immersive-toc-area #toc-list li a {
padding: 6px 12px !important;
font-size: 0.8rem !important;
font-weight: 500 !important;
color: var(--color-slate-500) !important;
border: none !important;
border-left: 3px solid transparent !important;
background: transparent !important;
transition: all 0.15s ease !important;
line-height: 1.5 !important;
}
#immersive-toc-area #toc-list li a:hover {
color: var(--color-slate-900) !important;
background: var(--color-slate-100) !important;
border-left-color: var(--color-slate-300) !important;
}
#immersive-toc-area #toc-list li a.active {
color: var(--color-primary-700) !important;
background: var(--color-primary-50) !important;
border-left-color: var(--color-primary-500) !important;
}
#immersive-toc-area #toc-list li.toc-h1 a {
font-weight: 600 !important;
color: var(--color-slate-700) !important;
margin-top: 8px !important;
}
#immersive-toc-area #toc-list li.toc-h2 a {
padding-left: 18px !important;
font-size: 0.7em !important;
}
#immersive-toc-area #toc-list li.toc-h3 a {
padding-left: 26px !important;
font-size: 0.68em !important;
color: #b5bac1 !important;
}
#immersive-toc-area #toc-list .toc-toggle {
display: none !important;
}
#immersive-toc-area #toc-popup #toc-popup-close-btn {
display: none;
}
#immersive-toc-area #toc-popup .toc-controls {
display: none;
}
/* 移除 TOC 中的文件名图标,保持极简 */
#immersive-toc-area #toc-list li a[href^="#placeholder-"] {
font-weight: 500 !important;
color: #6b7280 !important;
background: transparent !important;
border: none !important;
border-left: 2px solid transparent !important;
padding-left: 10px !important;
}
#immersive-toc-area #toc-list li a[href^="#placeholder-"]::before {
display: none !important;
}
#immersive-toc-area #toc-list li a[href^="#placeholder-"]:hover {
color: #374151 !important;
background: rgba(0, 0, 0, 0.02) !important;
border-left-color: #9ca3af !important;
}
/* Chatbot特定样式调整 */
#immersive-chatbot-area #chatbot-modal {
position: static !important;
display: flex !important;
width: 100% !important;
height: 100% !important;
pointer-events: auto !important;
background-color: transparent !important;
padding: 0 !important;
margin: 0 !important;
}
#immersive-chatbot-area .chatbot-window {
position: static !important;
width: 100% !important;
height: 100% !important;
max-width: none !important;
min-width: 0 !important;
max-height: none !important;
min-height: 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
resize: none !important;
overflow: hidden !important;
display: flex;
flex-direction: column;
background: var(--immersive-surface-bg) !important;
border: none !important;
transition: all var(--immersive-transition-duration) ease !important;
}
#immersive-chatbot-area #chatbot-fab {
display: none !important; /* 沉浸模式下隐藏FAB */
}
/* 隐藏chatbot自己的全屏和位置切换按钮因为布局由外部控制 */
#immersive-chatbot-area #chatbot-fullscreen-toggle-btn,
#immersive-chatbot-area #chatbot-position-toggle-btn,
#immersive-chatbot-area #chatbot-close-btn {
display: none !important;
}
.immersive-resize-handle {
width: var(--immersive-handle-width);
background: var(--immersive-separator-color);
cursor: col-resize;
flex-shrink: 0;
position: relative;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s ease;
margin: 0;
border-radius: 0;
}
/* 移除拖动条中间的细线 */
.immersive-resize-handle::before {
display: none;
}
.immersive-resize-handle:hover {
background: var(--color-primary-100);
transition-delay: 0.1s; /* 防止意外划过时的闪烁 */
}
.immersive-resize-handle:hover::before {
display: none;
}
/* 拖动时的样式 */
.immersive-dragging .immersive-resize-handle {
background: var(--color-primary-200);
}
.immersive-dragging .immersive-resize-handle::before {
display: none;
}
/* 当body上应用了 no-scroll 类时(例如沉浸模式下),禁用滚动 */
body.no-scroll {
overflow: hidden;
}
/* 原本的 .container 和 #toc-float-btn, #toc-popup 在沉浸模式下需要隐藏 */
body.immersive-active > .container,
body.immersive-active > #toc-float-btn,
body.immersive-active > #toc-popup:not(#immersive-toc-area #toc-popup),
body.immersive-active > #chatbot-modal:not(#immersive-chatbot-area #chatbot-modal),
body.immersive-active > #chatbot-fab
/* body.immersive-active > #bottom-left-dock REMOVED - Dock is now moved, not hidden globally */
{
display: none !important;
}
/* 确保沉浸式布局下的主要内容区域不会被其他元素遮挡,比如聊天机器人的某些内部定位元素 */
#immersive-main-content-area {
position: relative; /* for z-index context */
z-index: 0;
height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
}
/* 调整dock设置弹窗、批注弹窗等在沉浸模式下的z-index确保它们能显示在沉浸式布局之上 */
body.immersive-active .modal-overlay {
z-index: 20001 !important; /* 高于沉浸式布局的 header */
}
body.immersive-active #custom-context-menu {
z-index: 20002 !important;
}
/* 确保原始的 toc-popup 在非沉浸模式下能正常显示 */
#toc-popup {
/* 保留其原始样式 */
}
/* 沉浸模式下,如果 chatbot-window 内部有自己的 resize handle (通常没有,但以防万一) */
#immersive-chatbot-area .chatbot-window::after {
display: none !important; /* 隐藏可能的伪元素 resize handle */
}
/* Styling for the toggle button when it acts as an exit button */
/* #toggle-immersive-btn.immersive-exit-btn-active {
position: fixed !important; // Ensure it overrides inline styles if any
top: auto !important;
right: 20px !important;
bottom: 20px !important; // Position relative to viewport bottom, removed dock height adjustment
left: auto !important;
width: 40px !important; // Smaller, circular or square button
height: 40px !important;
padding: 0 !important;
border-radius: 50% !important; // Circular
background-color: #dc3545 !important; // Danger color for exit
color: white !important;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px; // Adjust icon size
box-shadow: 0 2px 8px rgba(0,0,0,0.3) !important;
transition: transform 0.2s ease-out;
}
#toggle-immersive-btn.immersive-exit-btn-active:hover {
transform: scale(1.1);
background-color: #c82333 !important; // Darker on hover
} */
/* Base style for the immersive toggle button - 使用统一尺寸系统 */
#toggle-immersive-btn {
position: fixed !important;
top: 12px !important;
right: 12px !important;
z-index: 20000 !important;
width: 32px !important;
height: 32px !important;
border: 1px solid var(--color-slate-200) !important;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-md) !important;
background: #ffffff !important;
color: var(--color-slate-600) !important;
font-size: 14px !important;
box-shadow: var(--shadow-sm) !important;
transition: all 0.2s ease !important;
}
#toggle-immersive-btn:hover {
background: var(--color-slate-50) !important;
color: var(--color-slate-900) !important;
border-color: var(--color-slate-300) !important;
box-shadow: var(--shadow-md) !important;
}
#toggle-immersive-btn:active {
transform: translateY(0) !important;
transition: all 0.1s ease !important;
}
/* Styles when immersive mode is active (mostly for icon change via JS, positioning is the same) */
#toggle-immersive-btn.immersive-exit-btn-active {
/* The base style #toggle-immersive-btn already covers position, size, and default BG. */
/* This class is now mainly a flag for JS to change the icon and title. */
/* If a different background for "exit" state is desired (but not red as per user): */
/* background-color: var(--secondary-accent-color, #5bc0de) !important; */
}
/* #toggle-immersive-btn.immersive-exit-btn-active:hover { */
/* If hover for exit needs to be different */
/* background-color: var(--secondary-accent-color-dark, #31b0d5) !important; */
/* } */
/* TOC 底部 dock - 极简设计 */
#immersive-toc-area #toc-dock-placeholder {
flex-shrink: 0;
border-top: 1px solid var(--color-slate-200);
background: var(--color-slate-50);
padding: 12px;
}
#immersive-toc-area #toc-dock-placeholder #bottom-left-dock {
position: static !important;
width: 100% !important;
height: auto !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
gap: 4px !important;
font-size: 0.7em !important;
}
/* 隐藏详细统计信息 */
#immersive-toc-area #bottom-left-dock.dock-collapsed #dock-info-stack,
#immersive-toc-area #bottom-left-dock #dock-info-stack {
display: none !important;
}
/* 始终显示进度 */
#immersive-toc-area #bottom-left-dock.dock-collapsed #dock-collapsed-progress-display,
#immersive-toc-area #bottom-left-dock #dock-collapsed-progress-display {
display: block !important;
color: #6b7280 !important;
font-weight: 400 !important;
margin: 0 !important;
}
/* 按钮行 */
#immersive-toc-area #bottom-left-dock #settings-link,
#immersive-toc-area #bottom-left-dock #dock-toggle-btn,
#immersive-toc-area #bottom-left-dock.dock-collapsed #settings-link,
#immersive-toc-area #bottom-left-dock.dock-collapsed #dock-toggle-btn {
display: inline-block !important;
color: #9ca3af !important;
font-size: 1em !important;
padding: 2px 4px !important;
margin: 0 2px !important;
}
#immersive-toc-area #bottom-left-dock #settings-link:hover,
#immersive-toc-area #bottom-left-dock #dock-toggle-btn:hover {
color: #6b7280 !important;
}
/* Removed old #immersive-dock-placeholder styles */
/* Horizontal Resize Handle for TOC vs Dock adjustment */
#toc-vs-dock-resize-handle {
height: 1px;
background: var(--immersive-separator-color);
cursor: ns-resize;
flex-shrink: 0;
position: relative;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
border-radius: 0;
transition: background 0.2s ease;
}
#toc-vs-dock-resize-handle::before {
display: none;
}
#toc-vs-dock-resize-handle:hover {
background: var(--immersive-handle-hover-color);
transform: none;
}
#toc-vs-dock-resize-handle:hover::before {
display: none;
}
/* Optional: Style when dragging */
body.toc-dock-resizing #toc-vs-dock-resize-handle {
background: rgba(59, 130, 246, 0.2);
}
body.toc-dock-resizing #toc-vs-dock-resize-handle::before {
display: none;
}
/* 优化的拖拽状态 */
.immersive-dragging .immersive-resize-handle {
background: rgba(59, 130, 246, 0.2);
}
.immersive-dragging .immersive-resize-handle::before {
display: none;
}
.immersive-dragging #toc-vs-dock-resize-handle {
background: rgba(59, 130, 246, 0.2);
}
.immersive-dragging #toc-vs-dock-resize-handle::before {
display: none;
}
/* Ensure other panels like TOC and Chatbot still use the default .immersive-panel padding or have their own */
#immersive-toc-area.immersive-panel {
padding: 4px 6px 0 6px !important;
border-right: 1px solid var(--immersive-separator-color);
}
#immersive-chatbot-area.immersive-panel {
padding: 4px 6px 0 6px !important;
border-right: none;
}
#immersive-main-content-area.immersive-panel {
border-right: 1px solid var(--immersive-separator-color);
}
/* Immersive Mode: Main Content Area Header Styling - REFINED */
/* Grouping fileName and fileMeta - no new div, control via flex item properties if .container is flex column */
#immersive-main-content-area #fileName {
font-size: 0.75em;
font-weight: 500;
color: #6b7280;
line-height: 1;
margin: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
max-width: 180px;
}
#immersive-main-content-area #fileMeta {
font-size: 0.7em;
color: #9ca3af;
line-height: 1;
margin: 0;
padding: 0;
display: inline-flex;
align-items: center;
gap: 4px;
}
#immersive-main-content-area #fileMeta .meta-separator {
margin: 0 2px;
}
/* 将标题、meta 和 tabs 整合到紧凑的两行顶栏 */
#immersive-main-content-area .container {
padding: 0 !important;
gap: 0 !important;
display: grid !important;
grid-template-rows: 24px 32px 1fr !important;
grid-template-columns: 1fr !important;
flex-direction: unset !important;
}
/* 第一行h2 和 meta 在同一行 - 极简设计 */
#immersive-main-content-area .container > h2 {
grid-row: 1;
grid-column: 1;
height: 24px;
display: flex;
align-items: center;
margin: 0;
padding: 0 16px;
font-size: 0.7em;
font-weight: 400;
color: #9ca3af;
background: transparent;
border: none;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 50%;
}
/* meta 与 h2 重叠在同一行 */
#immersive-main-content-area .container > .meta {
grid-row: 1;
grid-column: 1;
height: 24px;
display: flex;
align-items: center;
justify-content: flex-end;
margin: 0;
padding: 0 16px;
gap: 12px;
background: transparent;
pointer-events: none;
z-index: 1;
}
#immersive-main-content-area .container > .meta * {
pointer-events: auto;
}
#immersive-main-content-area .meta-info {
gap: 8px;
display: flex;
align-items: center;
color: #9ca3af;
font-size: 0.7em;
}
#immersive-main-content-area .meta-separator {
color: #d1d5db;
}
#immersive-main-content-area .meta-export-trigger {
padding: 2px 8px;
font-size: 0.7em;
gap: 3px;
border-radius: 4px;
height: auto;
border: none;
background: transparent;
color: #9ca3af;
font-weight: 400;
transition: all 0.15s ease;
}
#immersive-main-content-area .meta-export-trigger:hover {
background: #f3f4f6;
color: #6b7280;
}
#immersive-main-content-area .meta-export-trigger i {
font-size: 0.85em;
}
/* 第二行tabs - 更现代简洁的设计 */
#immersive-main-content-area .container > .tabs-container {
grid-row: 2;
grid-column: 1;
padding: 0 16px;
border: none;
display: flex;
gap: 2px;
margin: 0;
height: 32px;
justify-content: flex-start;
align-items: center;
background: transparent;
border-bottom: 1px solid #f0f0f0;
}
#immersive-main-content-area .tabs-container .tab-btn {
padding: 0 14px;
font-size: 0.7em;
font-weight: 500;
border-radius: 0;
background-color: transparent;
border: none;
border-bottom: 2px solid transparent;
color: #9ca3af;
cursor: pointer;
transition: all 0.15s ease;
margin: 0;
height: 32px;
line-height: 1;
display: flex;
align-items: center;
}
#immersive-main-content-area .tabs-container .tab-btn:hover {
color: #6b7280;
border-bottom-color: #e5e7eb;
}
#immersive-main-content-area .tabs-container .tab-btn.active {
background-color: transparent;
color: #3b82f6;
border-bottom-color: #3b82f6;
font-weight: 600;
}
/* 第三行tab-content */
#immersive-main-content-area .container > .tab-content {
grid-row: 3;
grid-column: 1;
overflow-y: auto;
min-height: 0;
padding: 16px;
background: #ffffff;
}
/* 沉浸模式下隐藏 PDF 对照按钮 */
body.immersive-active #tab-pdf-compare {
display: none !important;
}
/* 导出控制面板 */
#immersive-main-content-area .container > .history-export-controls {
grid-row: 3;
grid-column: 1;
z-index: 10;
pointer-events: none;
}
#immersive-main-content-area .container > .history-export-controls.active {
pointer-events: auto;
}
/* 隐藏 tab-content 内的 h3 标题 */
#immersive-main-content-area .tab-content > h3 {
display: none;
}
/* 压缩顶部 meta 区域 - 已整合到顶栏中 */
#immersive-main-content-area .meta {
margin: 0;
gap: 8px;
font-size: 0.7em;
min-height: auto;
position: absolute;
top: 0;
right: 12px;
height: 32px;
display: flex;
align-items: center;
padding: 0;
z-index: 3;
background: transparent;
}
#immersive-main-content-area .meta-info {
gap: 6px;
display: flex;
align-items: center;
color: #9ca3af;
}
#immersive-main-content-area .meta-info span {
line-height: 1;
}
#immersive-main-content-area .meta-separator {
color: #d1d5db;
margin: 0 2px;
}
#immersive-main-content-area .meta-export-trigger {
padding: 4px 10px;
font-size: 0.7em;
gap: 4px;
border-radius: 4px;
height: auto;
border: 1px solid rgba(59, 130, 246, 0.15);
background: transparent;
color: #3b82f6;
font-weight: 500;
transition: all 0.15s ease;
}
#immersive-main-content-area .meta-export-trigger:hover {
background: rgba(59, 130, 246, 0.08);
border-color: rgba(59, 130, 246, 0.25);
}
#immersive-main-content-area .meta-export-trigger i {
font-size: 0.85em;
}
/* Specific fix for the duplicate padding issue if .container is inside .immersive-panel with padding */
/* This assumes .immersive-main-content-area IS an .immersive-panel */
/* 确保沉浸模式立即生效的样式 - 简化版本 */
body.immersive-active #immersive-main-content-area .container {
height: 100% !important;
padding: 20px 24px !important;
margin-bottom: 0 !important;
box-sizing: border-box !important;
display: flex !important;
flex-direction: column !important;
}
body.immersive-active #immersive-main-content-area.immersive-panel {
padding: 0 !important;
height: 100% !important;
}
body.immersive-active .immersive-panel {
padding-bottom: 0 !important;
margin-bottom: 0 !important;
}
body.immersive-active #immersive-content-area {
height: 100vh !important;
box-sizing: border-box !important;
}
/* 初始化时立即应用的样式 */
body.immersive-entering #immersive-main-content-area .container,
body.immersive-active #immersive-main-content-area .container {
animation: fixLayoutHeight 0.1s ease-out;
}
@keyframes fixLayoutHeight {
0% { height: calc(100% - 1px); }
100% { height: 100%; }
}
/* Reset padding on the general .immersive-panel if we want specific panels to override */
/* This might be too broad, an alternative is to ensure specific panels like #immersive-main-content-area */
/* have their padding managed correctly. For now, let's adjust #immersive-main-content-area.immersive-panel directly. */
/* Additional optimizations for immersive mode UI */
/* 沉浸模式下移除所有虚线,统一使用实线或无边框 */
body.immersive-active .markdown-body img,
body.immersive-active pre,
body.immersive-active .chunk-pair,
body.immersive-active .chunk-divider,
body.immersive-active .chunk-compare-header,
body.immersive-active .chunk-ocr.active,
body.immersive-active .chunk-translation.active {
border-style: solid !important;
}
body.immersive-active #bottom-left-dock {
border-style: solid !important;
}
body.immersive-active .toc-info {
border-left-style: solid !important;
}
/* 改进的动画和过渡效果 */
body.immersive-entering {
overflow: hidden;
}
body.immersive-exiting {
overflow: hidden;
}
body.immersive-dragging {
cursor: col-resize !important;
user-select: none !important;
}
body.immersive-dragging * {
cursor: col-resize !important;
user-select: none !important;
pointer-events: none;
}
body.immersive-dragging .immersive-resize-handle {
pointer-events: auto;
}
/* 改进的面板间距 */
#immersive-content-area {
gap: 0;
padding: 0;
}
/* 更好的滚动条样式 */
.immersive-panel::-webkit-scrollbar {
width: 6px;
}
.immersive-panel::-webkit-scrollbar-track {
background: rgba(0,0,0,0.02);
border-radius: 3px;
}
.immersive-panel::-webkit-scrollbar-thumb {
background: rgba(59, 130, 246, 0.2);
border-radius: 3px;
transition: background 0.2s ease;
}
.immersive-panel::-webkit-scrollbar-thumb:hover {
background: rgba(59, 130, 246, 0.4);
}
/* 改进的面板标题样式 */
.immersive-panel-header {
background: transparent;
border-bottom: none;
padding: 8px 12px;
font-weight: 500;
font-size: 0.85rem;
color: #374151;
border-radius: 0;
}
/* 优化的拖拽状态 */
.immersive-dragging .immersive-resize-handle::before {
background: #3b82f6 !important;
width: 3px !important;
box-shadow: 0 0 8px rgba(59, 130, 246, 0.4) !important;
}
.immersive-dragging #toc-vs-dock-resize-handle::before {
background: #3b82f6 !important;
height: 3px !important;
box-shadow: 0 0 8px rgba(59, 130, 246, 0.4) !important;
}
/* 响应式优化 */
@media (max-width: 1200px) {
.immersive-panel {
padding: 6px 8px 0 8px;
}
#immersive-main-content-area .container {
padding: 12px 16px !important;
}
#immersive-toc-area {
min-width: 200px;
}
#immersive-chatbot-area {
min-width: 250px;
}
}
/* 移动端禁用沉浸式布局 - 700px以下屏幕 */
@media (max-width: 700px) {
/* 完全隐藏沉浸式布局切换按钮 */
#toggle-immersive-btn {
display: none !important;
}
/* 强制退出沉浸式模式(如果用户在更大屏幕上进入了沉浸模式后缩小屏幕) */
body.immersive-active #immersive-layout-container {
display: none !important;
}
/* 确保正常布局在移动端可见 */
body.immersive-active > .container,
body.immersive-active > #toc-float-btn,
body.immersive-active > #toc-popup:not(#immersive-toc-area #toc-popup),
body.immersive-active > #chatbot-modal:not(#immersive-chatbot-area #chatbot-modal),
body.immersive-active > #chatbot-fab {
display: block !important;
}
/* 恢复正常的body滚动 */
body.immersive-active {
overflow: auto !important;
}
}
@media (max-width: 768px) and (min-width: 701px) {
/* 701px-768px范围内保持沉浸式功能但优化布局 */
:root {
--immersive-panel-min-width: 120px;
}
#immersive-content-area {
flex-direction: column;
gap: 2px;
}
.immersive-resize-handle {
height: 6px;
width: 100%;
cursor: ns-resize;
}
.immersive-resize-handle::before {
left: 10%;
right: 10%;
top: calc(50% - 1px);
bottom: auto;
width: auto;
height: 2px;
}
#toggle-immersive-btn {
top: 10px !important;
right: 10px !important;
width: var(--btn-large-mobile, 36px) !important;
height: var(--btn-large-mobile, 36px) !important;
font-size: var(--btn-icon-large-mobile, 16px) !important;
}
}
/* 暗色模式支持 */
@media (prefers-color-scheme: dark) {
:root {
--immersive-surface-bg: #1a1d23;
--immersive-surface-bg-alt: #1a1d23;
--immersive-separator-color: #374151;
}
#immersive-layout-container {
background: #111827;
}
.immersive-panel {
border-color: #374151;
color: #e5e7eb;
}
#immersive-main-content-area .container {
background: #1a1d23;
color: #e5e7eb;
}
#toggle-immersive-btn {
background: #1f2937 !important;
color: #e5e7eb !important;
box-shadow: 0 1px 3px rgba(0,0,0,0.3), 0 0 0 1px rgba(255,255,255,0.05) !important;
}
#toggle-immersive-btn:hover {
background: #374151 !important;
}
}
/* 动态亮度调节 */
body.immersive-active {
--immersive-bg-brightness: 1;
}
body.immersive-active.reading-focus {
--immersive-bg-brightness: 0.95;
}
#immersive-layout-container {
filter: brightness(var(--immersive-bg-brightness, 1));
transition: filter 0.3s ease;
}