/* ==================== 全局样式 ==================== */ * { margin: 0; padding: 0; box-sizing: border-box; } /* ==================== CSS 变量系统 ==================== */ :root { /* 品牌色 - 参考 preview-ui.html */ --primary: #8B6914; --primary-hover: #A67C00; --primary-light: #F5E6C8; --primary-dark: #6B520F; /* 功能色 */ --danger: #EF4444; --danger-hover: #DC2626; --success: #10B981; --success-hover: #059669; --warning: #F59E0B; --warning-hover: #D97706; --info: #3B82F6; --info-hover: #2563EB; /* 背景色 */ --bg-primary: #FFFFFF; --bg-secondary: #F8F9FA; --bg-tertiary: #E5E7EB; --bg-sidebar: #FFFFFF; --bg-overlay: rgba(0, 0, 0, 0.5); /* 文本色 */ --text-primary: #1F2937; --text-secondary: #6B7280; --text-muted: #9CA3AF; --text-inverse: #FFFFFF; /* 边框色 */ --border-color: #E5E7EB; --border-color-hover: #D1D5DB; --border-color-focus: var(--primary); /* 阴影 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.15); /* 圆角 */ --radius-xs: 4px; --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; --radius-full: 9999px; /* 间距系统 */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 12px; --spacing-lg: 16px; --spacing-xl: 20px; --spacing-2xl: 24px; --spacing-3xl: 32px; --spacing-4xl: 40px; /* 字体大小 */ --font-xs: 11px; --font-sm: 12px; --font-base: 14px; --font-md: 16px; --font-lg: 18px; --font-xl: 20px; --font-2xl: 24px; --font-3xl: 30px; /* 字重 */ --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; /* 过渡 */ --transition-fast: 0.15s ease; --transition-base: 0.2s ease; --transition-slow: 0.3s ease; /* 层级 */ --z-dropdown: 1000; --z-sticky: 1020; --z-fixed: 1030; --z-modal-backdrop: 1040; --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070; /* 布局 */ --header-height: 61px; --sidebar-width: 240px; --sidebar-collapsed-width: 64px; } /* ==================== 深色主题 ==================== */ @media (prefers-color-scheme: dark) { :root { --bg-primary: #1F2937; --bg-secondary: #111827; --bg-tertiary: #374151; --bg-sidebar: #1F2937; --bg-overlay: rgba(0, 0, 0, 0.7); --text-primary: #F9FAFB; --text-secondary: #D1D5DB; --text-muted: #9CA3AF; --border-color: #374151; --border-color-hover: #4B5563; --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.3); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4); } } /* ==================== 主题类 ==================== */ .theme-light { --bg-primary: #FFFFFF; --bg-secondary: #F8F9FA; --bg-tertiary: #E5E7EB; --bg-sidebar: #FFFFFF; --text-primary: #1F2937; --text-secondary: #6B7280; --text-muted: #9CA3AF; --border-color: #E5E7EB; } .theme-dark { --bg-primary: #1F2937; --bg-secondary: #111827; --bg-tertiary: #374151; --bg-sidebar: #1F2937; --text-primary: #F9FAFB; --text-secondary: #D1D5DB; --text-muted: #9CA3AF; --border-color: #374151; } /* ==================== 基础样式 ==================== */ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size: var(--font-base); line-height: 1.5; color: var(--text-primary); background: var(--bg-secondary); overflow: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* 滚动条样式 */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: var(--radius-xs); } ::-webkit-scrollbar-thumb:hover { background: var(--border-color-hover); } /* 选择文本样式 */ ::selection { background: var(--primary-light); color: var(--primary-dark); } /* 焦点样式 */ :focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; } /* ==================== 布局系统 ==================== */ /* 应用容器 */ .app-container { display: flex; flex-direction: column; height: 100vh; width: 100vw; background: var(--bg-secondary); } /* ==================== Header ==================== */ .header { background: var(--bg-primary); border-bottom: 1px solid var(--border-color); padding: var(--spacing-lg) var(--spacing-2xl); display: flex; align-items: center; justify-content: space-between; height: var(--header-height); flex-shrink: 0; z-index: var(--z-sticky); } .logo { display: flex; align-items: center; gap: var(--spacing-md); } .logo-icon { width: 36px; height: 36px; background: var(--primary); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; font-size: var(--font-xl); } .logo-text { font-size: var(--font-lg); font-weight: var(--font-semibold); color: var(--text-primary); } .logo-version { font-size: var(--font-xs); background: var(--primary-light); color: var(--primary); padding: 2px 6px; border-radius: var(--radius-xs); margin-left: 6px; } .search-bar { flex: 1; max-width: 400px; margin: 0 var(--spacing-2xl); } .search-wrapper { position: relative; } .search-input { width: 100%; padding: 10px 16px 10px 40px; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-secondary); font-size: var(--font-base); transition: all var(--transition-base); } .search-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-light); } .search-input::placeholder { color: var(--text-muted); } .search-icon { position: absolute; left: var(--spacing-md); top: 50%; transform: translateY(-50%); color: var(--text-muted); font-size: var(--font-md); pointer-events: none; } .header-actions { display: flex; gap: var(--spacing-md); } .icon-btn { width: 40px; height: 40px; border: none; background: transparent; border-radius: var(--radius-sm); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: var(--font-lg); transition: all var(--transition-base); color: var(--text-secondary); } .icon-btn:hover { background: var(--bg-secondary); color: var(--text-primary); } /* ==================== Main Container ==================== */ .main-container { display: flex; flex: 1; overflow: hidden; } /* ==================== Sidebar ==================== */ .sidebar { width: var(--sidebar-width); background: var(--bg-sidebar); border-right: 1px solid var(--border-color); padding: var(--spacing-lg) var(--spacing-md); display: flex; flex-direction: column; flex-shrink: 0; overflow-y: auto; } .sidebar.collapsed { width: var(--sidebar-collapsed-width); } .sidebar.collapsed .nav-section-title, .sidebar.collapsed .nav-item span:not(.nav-icon) { display: none; } .sidebar.collapsed .nav-item { justify-content: center; padding: var(--spacing-md); } .nav-section { margin-bottom: var(--spacing-2xl); } .nav-section:last-child { margin-bottom: 0; } .nav-section-title { font-size: var(--font-xs); font-weight: var(--font-semibold); text-transform: uppercase; color: var(--text-muted); padding: 0 var(--spacing-md) var(--spacing-md); letter-spacing: 0.5px; } .nav-item { display: flex; align-items: center; gap: var(--spacing-md); padding: var(--spacing-md) var(--spacing-md); border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition-base); margin-bottom: 2px; font-size: var(--font-base); color: var(--text-secondary); border: none; background: transparent; width: 100%; text-align: left; } .nav-item:hover { background: var(--bg-secondary); color: var(--text-primary); } .nav-item.active { background: var(--primary-light); color: var(--primary); font-weight: var(--font-medium); } .nav-icon { font-size: var(--font-lg); width: 24px; text-align: center; flex-shrink: 0; } .sidebar-footer { margin-top: auto; padding-top: var(--spacing-lg); border-top: 1px solid var(--border-color); } /* ==================== Content Area ==================== */ .content-area { flex: 1; padding: var(--spacing-2xl); overflow-y: auto; display: flex; flex-direction: column; gap: var(--spacing-2xl); } /* ==================== View System ==================== */ .view { display: none; height: 100%; animation: fadeIn var(--transition-base); } .view.active { display: flex; flex-direction: column; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* ==================== 共享 UI 组件 ==================== */ /* ==================== Button ==================== */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--spacing-sm); padding: var(--spacing-lg) var(--spacing-xl); border: none; border-radius: var(--radius-md); font-size: var(--font-base); font-weight: var(--font-medium); cursor: pointer; transition: all var(--transition-base); white-space: nowrap; user-select: none; } .btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; } .btn:not(:disabled):hover { transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn:not(:disabled):active { transform: translateY(0); } /* Button Variants */ .btn-primary { background: var(--primary); color: var(--text-inverse); } .btn-primary:hover:not(:disabled) { background: var(--primary-hover); } .btn-secondary { background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-color); } .btn-secondary:hover:not(:disabled) { background: var(--bg-tertiary); border-color: var(--border-color-hover); } .btn-danger { background: var(--danger); color: var(--text-inverse); } .btn-danger:hover:not(:disabled) { background: var(--danger-hover); } .btn-success { background: var(--success); color: var(--text-inverse); } .btn-success:hover:not(:disabled) { background: var(--success-hover); } .btn-ghost { background: transparent; color: var(--text-secondary); } .btn-ghost:hover:not(:disabled) { background: var(--bg-secondary); color: var(--text-primary); } /* Button Sizes */ .btn-sm { padding: var(--spacing-sm) var(--spacing-lg); font-size: var(--font-sm); } .btn-lg { padding: var(--spacing-xl) var(--spacing-2xl); font-size: var(--font-md); } .btn-icon { width: 40px; height: 40px; padding: 0; } .btn-icon.btn-sm { width: 32px; height: 32px; } .btn-icon.btn-lg { width: 48px; height: 48px; } /* ==================== Input ==================== */ .input, .textarea, .select { width: 100%; padding: var(--spacing-md) var(--spacing-lg); border: 1px solid var(--border-color); border-radius: var(--radius-sm); background: var(--bg-primary); color: var(--text-primary); font-size: var(--font-base); transition: all var(--transition-base); } .input:focus, .textarea:focus, .select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-light); } .input::placeholder, .textarea::placeholder { color: var(--text-muted); } .input:disabled, .textarea:disabled, .select:disabled { opacity: 0.6; cursor: not-allowed; background: var(--bg-secondary); } .textarea { resize: vertical; min-height: 80px; font-family: inherit; } /* Input Sizes */ .input-sm, .textarea-sm { padding: var(--spacing-sm) var(--spacing-md); font-size: var(--font-sm); } .input-lg, .textarea-lg { padding: var(--spacing-lg) var(--spacing-xl); font-size: var(--font-md); } /* Input Groups */ .input-group { display: flex; align-items: stretch; } .input-group .input, .input-group .btn { border-radius: 0; } .input-group .input:first-child, .input-group .btn:first-child { border-top-left-radius: var(--radius-sm); border-bottom-left-radius: var(--radius-sm); } .input-group .input:last-child, .input-group .btn:last-child { border-top-right-radius: var(--radius-sm); border-bottom-right-radius: var(--radius-sm); } .input-group .input + .btn, .input-group .btn + .input { border-left: none; } /* ==================== Card ==================== */ .card { background: var(--bg-primary); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); padding: var(--spacing-xl); border: 1px solid var(--border-color); } .card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); } .card-title { font-size: var(--font-md); font-weight: var(--font-semibold); display: flex; align-items: center; gap: var(--spacing-sm); } .card-body { flex: 1; } .card-footer { margin-top: var(--spacing-lg); padding-top: var(--spacing-lg); border-top: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; } /* ==================== Form ==================== */ .form-group { margin-bottom: var(--spacing-xl); } .form-label { display: block; font-size: var(--font-base); font-weight: var(--font-medium); margin-bottom: var(--spacing-sm); color: var(--text-primary); } .form-label.required::after { content: '*'; color: var(--danger); margin-left: 4px; } .form-hint { font-size: var(--font-sm); color: var(--text-muted); margin-top: var(--spacing-xs); } .form-error { font-size: var(--font-sm); color: var(--danger); margin-top: var(--spacing-xs); } /* ==================== Badge & Tag ==================== */ .badge { display: inline-flex; align-items: center; padding: 2px 8px; font-size: var(--font-xs); font-weight: var(--font-medium); border-radius: var(--radius-full); } .badge-primary { background: var(--primary-light); color: var(--primary); } .badge-success { background: #D1FAE5; color: #059669; } .badge-danger { background: #FEE2E2; color: #DC2626; } .badge-warning { background: #FEF3C7; color: #D97706; } .tag { display: inline-flex; align-items: center; padding: var(--spacing-xs) var(--spacing-md); background: var(--bg-secondary); border-radius: var(--radius-full); font-size: var(--font-sm); color: var(--text-primary); border: 1px solid var(--border-color); gap: 4px; } .tag:hover { background: var(--bg-tertiary); } .tag .tag-close { cursor: pointer; opacity: 0.6; transition: opacity var(--transition-fast); } .tag .tag-close:hover { opacity: 1; } /* ==================== Modal ==================== */ .modal-overlay { position: fixed; inset: 0; background: var(--bg-overlay); display: none; align-items: center; justify-content: center; z-index: var(--z-modal-backdrop); backdrop-filter: blur(2px); } .modal-overlay.show { display: flex; animation: fadeIn var(--transition-base); } .modal { background: var(--bg-primary); border-radius: var(--radius-lg); width: 90%; max-width: 600px; max-height: 85vh; overflow: hidden; box-shadow: var(--shadow-xl); display: flex; flex-direction: column; animation: slideUp var(--transition-base); } .modal-sm { max-width: 400px; } .modal-lg { max-width: 800px; } .modal-xl { max-width: 1000px; } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .modal-header { padding: var(--spacing-xl) var(--spacing-2xl); border-bottom: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; } .modal-title { font-size: var(--font-lg); font-weight: var(--font-semibold); } .modal-close { width: 36px; height: 36px; border: none; background: var(--bg-secondary); border-radius: var(--radius-full); cursor: pointer; font-size: var(--font-lg); display: flex; align-items: center; justify-content: center; transition: all var(--transition-base); color: var(--text-secondary); } .modal-close:hover { background: var(--bg-tertiary); color: var(--text-primary); } .modal-body { padding: var(--spacing-2xl); overflow-y: auto; flex: 1; } .modal-footer { padding: var(--spacing-xl) var(--spacing-2xl); border-top: 1px solid var(--border-color); display: flex; align-items: center; justify-content: flex-end; gap: var(--spacing-md); } /* ==================== Toast Notification ==================== */ .toast-container { position: fixed; bottom: var(--spacing-2xl); right: var(--spacing-2xl); z-index: var(--z-tooltip); display: flex; flex-direction: column; gap: var(--spacing-md); } .toast { background: var(--bg-primary); border-radius: var(--radius-md); padding: var(--spacing-lg) var(--spacing-xl); box-shadow: var(--shadow-lg); display: flex; align-items: flex-start; gap: var(--spacing-md); min-width: 300px; max-width: 500px; border-left: 4px solid var(--primary); animation: slideInRight var(--transition-base); } .toast-success { border-left-color: var(--success); } .toast-danger { border-left-color: var(--danger); } .toast-warning { border-left-color: var(--warning); } .toast-info { border-left-color: var(--info); } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } .toast-icon { font-size: var(--font-xl); flex-shrink: 0; margin-top: 2px; } .toast-content { flex: 1; } .toast-title { font-size: var(--font-base); font-weight: var(--font-medium); margin-bottom: 2px; } .toast-message { font-size: var(--font-sm); color: var(--text-secondary); line-height: 1.4; } .toast-close { background: none; border: none; cursor: pointer; padding: 0; color: var(--text-muted); transition: color var(--transition-fast); } .toast-close:hover { color: var(--text-primary); } /* ==================== Loading ==================== */ .loading { display: inline-block; width: 20px; height: 20px; border: 2px solid var(--border-color); border-top-color: var(--primary); border-radius: var(--radius-full); animation: spin 0.6s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .loading-sm { width: 16px; height: 16px; } .loading-lg { width: 32px; height: 32px; border-width: 3px; } .loading-overlay { position: absolute; inset: 0; background: var(--bg-overlay); display: flex; align-items: center; justify-content: center; z-index: 10; } /* ==================== Panel/Section ==================== */ .panel { background: var(--bg-primary); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); padding: var(--spacing-xl); border: 1px solid var(--border-color); } .panel-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--spacing-lg); } .panel-title { font-size: var(--font-md); font-weight: var(--font-semibold); display: flex; align-items: center; gap: var(--spacing-sm); } .toolbar { display: flex; gap: var(--spacing-md); margin-bottom: var(--spacing-xl); flex-wrap: wrap; } /* ==================== Divider ==================== */ .divider { height: 1px; background: var(--border-color); margin: var(--spacing-2xl) 0; } .divider-vertical { width: 1px; height: 100%; background: var(--border-color); margin: 0 var(--spacing-md); } /* ==================== Grid ==================== */ .grid { display: grid; gap: var(--spacing-lg); } .grid-cols-2 { grid-template-columns: repeat(2, 1fr); } .grid-cols-3 { grid-template-columns: repeat(3, 1fr); } .grid-cols-4 { grid-template-columns: repeat(4, 1fr); } .grid-auto-fit { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } /* ==================== Flex Utilities ==================== */ .flex { display: flex; } .flex-col { flex-direction: column; } .flex-1 { flex: 1; } .items-center { align-items: center; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-sm { gap: var(--spacing-sm); } .gap-md { gap: var(--spacing-lg); } .gap-lg { gap: var(--spacing-2xl); } /* ==================== Spacing Utilities ==================== */ .mt-sm { margin-top: var(--spacing-sm); } .mt-md { margin-top: var(--spacing-lg); } .mt-lg { margin-top: var(--spacing-2xl); } .mb-sm { margin-bottom: var(--spacing-sm); } .mb-md { margin-bottom: var(--spacing-lg); } .mb-lg { margin-bottom: var(--spacing-2xl); } .p-sm { padding: var(--spacing-sm); } .p-md { padding: var(--spacing-lg); } .p-lg { padding: var(--spacing-2xl); } /* ==================== Text Utilities ==================== */ .text-sm { font-size: var(--font-sm); } .text-base { font-size: var(--font-base); } .text-lg { font-size: var(--font-lg); } .text-muted { color: var(--text-muted); } .text-secondary { color: var(--text-secondary); } .text-primary { color: var(--text-primary); } .font-medium { font-weight: var(--font-medium); } .font-semibold { font-weight: var(--font-semibold); } /* 截图视图 */ .screenshot-controls { display: flex; gap: var(--spacing-md); margin-bottom: var(--spacing-xl); } .screenshot-preview { flex: 1; background: var(--bg-secondary); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; min-height: 400px; border: 2px dashed var(--border-color); } .placeholder { text-align: center; color: var(--text-tertiary); } .placeholder .icon { font-size: 48px; margin-bottom: var(--spacing-md); display: block; } .placeholder p { font-size: 16px; margin-bottom: var(--spacing-sm); } .placeholder small { font-size: 12px; } /* 图库视图 */ .gallery-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xl); } .gallery-header h2 { font-size: 24px; font-weight: 600; } .gallery-actions { display: flex; gap: var(--spacing-sm); } .gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--spacing-lg); } /* 上传视图 */ .upload-container { max-width: 800px; margin: 0 auto; } .upload-container h2 { font-size: 24px; font-weight: 600; margin-bottom: var(--spacing-xl); } .upload-area { background: var(--bg-secondary); border: 2px dashed var(--border-color); border-radius: var(--radius-lg); padding: var(--spacing-xl); margin-bottom: var(--spacing-xl); text-align: center; cursor: pointer; transition: all 0.2s; } .upload-area:hover { border-color: var(--primary-color); background: var(--bg-tertiary); } .upload-placeholder .icon { font-size: 64px; display: block; margin-bottom: var(--spacing-md); } .upload-options { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: var(--spacing-lg); } .upload-options h3 { font-size: 16px; font-weight: 600; margin-bottom: var(--spacing-md); } .option-group { display: flex; flex-direction: column; gap: var(--spacing-md); } .option-group label { display: flex; align-items: center; gap: var(--spacing-sm); cursor: pointer; } .option-group input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; } /* 设置视图 */ .settings-container { max-width: 800px; margin: 0 auto; } .settings-container h2 { font-size: 24px; font-weight: 600; margin-bottom: var(--spacing-xl); } .settings-section { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: var(--spacing-lg); margin-bottom: var(--spacing-lg); } .settings-section h3 { font-size: 16px; font-weight: 600; margin-bottom: var(--spacing-md); } .setting-item { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-md) 0; border-bottom: 1px solid var(--border-color); } .setting-item:last-child { border-bottom: none; } .setting-item select { padding: var(--spacing-sm) var(--spacing-md); border: 1px solid var(--border-color); border-radius: var(--radius-sm); background: var(--bg-primary); color: var(--text-primary); font-size: 14px; min-width: 150px; } .setting-item label { display: flex; align-items: center; gap: var(--spacing-sm); cursor: pointer; } .shortcut-list { display: flex; flex-direction: column; gap: var(--spacing-md); } .shortcut-item { display: flex; justify-content: space-between; align-items: center; } .shortcut-item kbd { background: var(--bg-tertiary); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--radius-sm); font-family: monospace; font-size: 12px; } .about-info { text-align: center; color: var(--text-secondary); } .about-info p { margin-bottom: var(--spacing-sm); } .about-info strong { color: var(--text-primary); font-size: 16px; } /* 滚动条样式 */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: var(--radius-sm); } ::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); } /* ==================== 响应式设计 ==================== */ /* 平板设备 */ @media (max-width: 1024px) { :root { --sidebar-width: 200px; } .header { padding: var(--spacing-lg) var(--spacing-xl); } .content-area { padding: var(--spacing-xl); } } /* 移动设备 */ @media (max-width: 768px) { :root { --header-height: 56px; --sidebar-width: 100%; } .app-container { flex-direction: column; } .main-container { position: relative; } .header { padding: var(--spacing-md) var(--spacing-lg); } .search-bar { display: none; } .sidebar { position: fixed; bottom: 0; left: 0; right: 0; width: 100%; height: 60px; flex-direction: row; border-right: none; border-top: 1px solid var(--border-color); padding: var(--spacing-sm); z-index: var(--z-fixed); } .sidebar .nav-section { display: flex; flex: 1; margin-bottom: 0; justify-content: space-around; } .sidebar .nav-section-title { display: none; } .sidebar .nav-item { flex-direction: column; gap: 2px; padding: var(--spacing-sm); border-radius: var(--radius-sm); } .sidebar .nav-item span:not(.nav-icon) { font-size: var(--font-xs); } .sidebar .nav-icon { font-size: var(--font-xl); } .sidebar-footer { display: none; } .content-area { padding: var(--spacing-lg); padding-bottom: 80px; } .modal { width: 95%; max-height: 90vh; } .modal-body { padding: var(--spacing-lg); } .modal-header, .modal-footer { padding: var(--spacing-lg); } .toast-container { left: var(--spacing-lg); right: var(--spacing-lg); bottom: var(--spacing-lg); } .toast { min-width: auto; } .grid-cols-2, .grid-cols-3, .grid-cols-4 { grid-template-columns: 1fr; } .toolbar { flex-direction: column; } .toolbar .btn { width: 100%; } } /* 大屏幕优化 */ @media (min-width: 1440px) { :root { --sidebar-width: 260px; } .content-area { max-width: 1400px; margin: 0 auto; } } /* 打印样式 */ @media print { .header, .sidebar, .toast-container { display: none !important; } .content-area { padding: 0; overflow: visible; } .card, .panel { box-shadow: none; border: 1px solid #ddd; } } /* ==================== 额外的动画 ==================== */ @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes slideOutRight { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } } /* ==================== 保留的旧样式(兼容性) ==================== */ /* 截图视图 */ .screenshot-controls { display: flex; gap: var(--spacing-lg); margin-bottom: var(--spacing-xl); } .screenshot-preview { flex: 1; background: var(--bg-secondary); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; min-height: 400px; border: 2px dashed var(--border-color); } .placeholder { text-align: center; color: var(--text-muted); } .placeholder .icon { font-size: 48px; margin-bottom: var(--spacing-lg); display: block; } .placeholder p { font-size: var(--font-md); margin-bottom: var(--spacing-sm); } .placeholder small { font-size: var(--font-sm); } /* 图库视图 */ .gallery-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xl); } .gallery-header h2 { font-size: var(--font-2xl); font-weight: var(--font-semibold); } .gallery-actions { display: flex; gap: var(--spacing-sm); } .gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--spacing-lg); } /* 上传视图 */ .upload-container { max-width: 800px; margin: 0 auto; } .upload-container h2 { font-size: var(--font-2xl); font-weight: var(--font-semibold); margin-bottom: var(--spacing-xl); } .upload-area { background: var(--bg-secondary); border: 2px dashed var(--border-color); border-radius: var(--radius-lg); padding: var(--spacing-xl); margin-bottom: var(--spacing-xl); text-align: center; cursor: pointer; transition: all var(--transition-base); } .upload-area:hover { border-color: var(--primary); background: var(--bg-tertiary); } .upload-placeholder .icon { font-size: 64px; display: block; margin-bottom: var(--spacing-lg); } .upload-options { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: var(--spacing-xl); } .upload-options h3 { font-size: var(--font-md); font-weight: var(--font-semibold); margin-bottom: var(--spacing-lg); } .option-group { display: flex; flex-direction: column; gap: var(--spacing-lg); } .option-group label { display: flex; align-items: center; gap: var(--spacing-sm); cursor: pointer; } .option-group input[type='checkbox'] { width: 18px; height: 18px; cursor: pointer; } /* 设置视图 */ .settings-container { max-width: 800px; margin: 0 auto; } .settings-container h2 { font-size: var(--font-2xl); font-weight: var(--font-semibold); margin-bottom: var(--spacing-xl); } .settings-section { background: var(--bg-secondary); border-radius: var(--radius-lg); padding: var(--spacing-xl); margin-bottom: var(--spacing-lg); } .settings-section h3 { font-size: var(--font-md); font-weight: var(--font-semibold); margin-bottom: var(--spacing-lg); } .setting-item { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-lg) 0; border-bottom: 1px solid var(--border-color); } .setting-item:last-child { border-bottom: none; } .setting-item select { padding: var(--spacing-sm) var(--spacing-lg); border: 1px solid var(--border-color); border-radius: var(--radius-sm); background: var(--bg-primary); color: var(--text-primary); font-size: var(--font-base); min-width: 150px; } .setting-item label { display: flex; align-items: center; gap: var(--spacing-sm); cursor: pointer; } .shortcut-list { display: flex; flex-direction: column; gap: var(--spacing-lg); } .shortcut-item { display: flex; justify-content: space-between; align-items: center; } .shortcut-item kbd { background: var(--bg-tertiary); padding: var(--spacing-sm) var(--spacing-lg); border-radius: var(--radius-sm); font-family: monospace; font-size: var(--font-sm); } .about-info { text-align: center; color: var(--text-secondary); } .about-info p { margin-bottom: var(--spacing-sm); } .about-info strong { color: var(--text-primary); font-size: var(--font-md); }