From 09f1189d652ae0b53e9ef282ef63bb25be63509e Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 14 Sep 2026 20:43:21 +0800 Subject: [PATCH] refactor: delete EditingPlanner.css (#1899 #1900) --- .../pages/editing-planner/EditingPlanner.css | 6488 ----------------- 1 file changed, 6488 deletions(-) delete mode 100644 apps/web/src/pages/editing-planner/EditingPlanner.css diff --git a/apps/web/src/pages/editing-planner/EditingPlanner.css b/apps/web/src/pages/editing-planner/EditingPlanner.css deleted file mode 100644 index f4d17fabd..000000000 --- a/apps/web/src/pages/editing-planner/EditingPlanner.css +++ /dev/null @@ -1,6488 +0,0 @@ -/** - * 模板编辑器 — V21 原型 1:1 还原样式 - * 颜色:对齐全局V21设计系统,使用 var(--bg-primary)、var(--bg-secondary)、var(--primary) 等 - * 布局:3行(顶栏52 + 模式栏56 + 三栏主体flex) - * 面板宽度:左240 / 右280 - * 按钮:对齐V21 Button组件风格 - * 字号:12px为主,标题13-14px - */ - -/* ═══════════════════════════════════════ - 根容器 — 全屏三行布局(V21浅色主题) - ═══════════════════════════════════════ */ - -.ep-v8-root { - display: flex; - flex-direction: column; - height: calc(100vh - 68px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-primary, #1e293b); - font-family: "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 12px; - line-height: 1.5; - overflow: hidden; -} - -/* ═══════════════════════════════════════ - 第1行:顶栏 52px(V21风格) - ═══════════════════════════════════════ */ - -.ep-top-bar { - height: 52px; - min-height: 52px; - background: var(--bg-primary, #ffffff); - border-bottom: 1px solid var(--line, #e2e8f0); - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 20px; - flex-shrink: 0; -} - -.ep-top-bar-left { - display: flex; - align-items: center; - gap: 12px; -} - -.ep-logo { - font-size: 16px; - color: var(--primary, #6366f1); - font-weight: 700; -} - -.ep-app-title { - font-size: 14px; - font-weight: 700; - color: var(--primary, #6366f1); -} - -.ep-divider { - color: var(--text-muted, #cbd5e1); - margin: 0 4px; -} - -.ep-template-name { - color: var(--text-muted, #64748b); - font-size: 13px; -} - -.ep-top-bar-right { - display: flex; - align-items: center; - gap: 10px; -} - -/* 按钮 — V21风格 */ -.ep-btn { - height: 32px; - padding: 0 16px; - border-radius: var(--radius-sm, 14px); - font-size: 13px; - font-weight: 500; - border: none; - cursor: pointer; - transition: all 0.2s ease; - display: flex; - align-items: center; - gap: 6px; - white-space: nowrap; -} - -.ep-btn-primary { - background: var(--gradient-primary); - color: var(--text-inverse); - box-shadow: 0 14px 26px rgba(79, 70, 229, 0.22); - font-weight: 600; -} - -.ep-btn-primary:hover { - transform: translateY(-2px); - box-shadow: 0 18px 34px rgba(79, 70, 229, 0.28); -} - -.ep-btn-primary:active { - transform: translateY(0); -} - -.ep-btn-primary:disabled { - opacity: 0.5; - cursor: not-allowed; - transform: none; - box-shadow: none; -} - -.ep-btn-secondary { - background: var(--bg-primary, #ffffff); - color: var(--text-secondary); - border: 1px solid var(--line, #e2e8f0); - font-weight: 600; -} - -.ep-btn-secondary:hover { - border-color: var(--info-border); - color: var(--primary-dark); - background: var(--primary-soft); -} - -.ep-btn-secondary:active { - transform: scale(0.98); -} - -.ep-btn-secondary:disabled { - opacity: 0.4; - cursor: not-allowed; -} - -.ep-btn-sm { - height: 28px; - padding: 0 12px; - font-size: 12px; - border-radius: var(--radius-xs, 8px); -} - -.ep-btn-danger { - background: var(--danger, #ef4444); - color: var(--text-inverse); -} - -.ep-btn-danger:hover { - background: color-mix(in srgb, var(--danger, #ef4444), white 20%); -} - -.ep-btn-danger:active { - transform: scale(0.96); - background: color-mix(in srgb, var(--danger, #ef4444), black 10%); -} - -.ep-btn-danger:disabled { - opacity: 0.5; - cursor: not-allowed; - transform: none; -} - -/* ═══════════════════════════════════════ - 第2行:模式栏 56px — V21居中图标按钮风格 - ═══════════════════════════════════════ */ - -.ep-mode-bar { - height: 56px; - min-height: 56px; - background: var(--bg-primary, #ffffff); - border-bottom: 1px solid var(--line, #e2e8f0); - display: flex; - align-items: center; - justify-content: center; - gap: 12px; - padding: 0 20px; - flex-shrink: 0; -} - -.ep-mode-bar-label { - font-size: 12px; - color: var(--text-muted, #64748b); - margin-right: 8px; -} - -.ep-mode-btn { - position: relative; - padding: 8px 14px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--line, #e2e8f0); - color: var(--text-secondary, #64748b); - font-size: 10px; - cursor: pointer; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 2px; - border-radius: 10px; - transition: all 0.2s ease; - min-width: 64px; -} - -.ep-mode-btn:hover { - border-color: var(--primary-light, #a5b4fc); - background: var(--primary-soft, #f8faff); -} - -.ep-mode-btn.active { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.ep-mode-btn.active .ep-mode-label { - color: var(--primary, #6366f1); -} - -.ep-mode-icon { - font-size: 18px; - line-height: 1; -} - -/* ═══════════════════════════════════════ - 第3行:三栏主体 - ═══════════════════════════════════════ */ - -.ep-main-body { - flex: 1; - display: flex; - overflow: hidden; - min-height: 0; -} - -/* ─── 左栏 240px ─── */ - -.ep-left-panel { - width: 240px; - min-width: 240px; - background: var(--bg-primary, #ffffff); - border-right: 1px solid var(--line, #e2e8f0); - display: flex; - flex-direction: column; - overflow: hidden; -} - -/* 左栏标题 */ -.ep-left-header { - padding: 12px 14px; - border-bottom: 1px solid var(--line, #e2e8f0); - display: flex; - align-items: center; - justify-content: space-between; - flex-shrink: 0; -} - -.ep-left-title { - font-size: 12px; - font-weight: 600; - color: var(--text-secondary, #64748b); -} - -.ep-left-back-btn { - font-size: 10px; - color: var(--text-tertiary, #94a3b8); - background: none; - border: none; - cursor: pointer; -} - -.ep-left-back-btn:hover { - color: var(--primary, #6366f1); -} - -/* 搜索 */ -.ep-search-wrap { - padding: 10px 12px; - border-bottom: 1px solid var(--bg-secondary, #f1f5f9); - position: relative; - flex-shrink: 0; -} - -.ep-search-input { - width: 100%; - height: 36px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 12px 0 36px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - transition: all 0.2s ease; -} - -.ep-search-input::placeholder { - color: var(--text-tertiary, #94a3b8); -} - -.ep-search-input:focus { - border-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.ep-search-icon { - position: absolute; - left: 24px; - top: 50%; - transform: translateY(-50%); - color: var(--text-tertiary, #94a3b8); - font-size: 14px; - pointer-events: none; -} - -/* Chip 筛选 */ -.ep-filter-chips { - display: flex; - gap: 6px; - padding: 8px 12px; - border-bottom: 1px solid var(--bg-secondary, #f1f5f9); - flex-wrap: wrap; - flex-shrink: 0; -} - -.ep-filter-chip { - padding: 4px 10px; - border-radius: var(--radius-full, 9999px); - font-size: 10px; - background: var(--bg-secondary, #f8fafc); - color: var(--text-tertiary, #94a3b8); - border: 1px solid var(--border-color, #e2e8f0); - cursor: pointer; - transition: all 0.2s ease; - font-weight: 500; - line-height: 1.4; -} - -.ep-filter-chip:hover { - border-color: var(--primary, #6366f1); - color: var(--text-secondary, #64748b); -} - -.ep-filter-chip.active { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -/* 左侧 Tab 切换 */ -.ep-left-tabs { - display: flex; - border-bottom: 1px solid var(--border-color, #e2e8f0); - background: var(--bg-secondary, #f8fafc); -} - -.ep-left-tab { - flex: 1; - padding: 12px 16px; - font-size: 13px; - font-weight: 500; - color: var(--text-secondary, #64748b); - background: transparent; - border: none; - border-bottom: 2px solid transparent; - cursor: pointer; - transition: all 0.2s ease; -} - -.ep-left-tab:hover { - color: var(--text-primary, #1e293b); - background: var(--bg-primary, #ffffff); -} - -.ep-left-tab.active { - color: var(--primary, #6366f1); - border-bottom-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); -} - -/* 素材 Tab 容器 */ -.ep-assets-tab { - flex: 1; - overflow-y: auto; - padding: 12px; -} - -.ep-assets-tab::-webkit-scrollbar { - width: 6px; -} - -.ep-assets-tab::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -/* 模板列表 */ -.ep-template-list { - flex: 1; - overflow-y: auto; - padding: 10px 12px; -} - -.ep-template-list::-webkit-scrollbar { - width: 6px; -} - -.ep-template-list::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -.ep-template-card { - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 12px; - padding: 12px; - margin-bottom: 8px; - cursor: pointer; - transition: all 0.2s ease; -} - -.ep-template-card:hover { - border-color: var(--primary-light, #a5b4fc); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); -} - -.ep-template-card.active { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.15); -} - -.ep-template-card-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.ep-template-card-name { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.ep-template-card-mode { - font-size: 11px; - padding: 3px 8px; - border-radius: var(--radius-xs, 8px); - background: var(--primary-soft, #eef2ff); - color: var(--primary, #6366f1); - font-weight: 500; -} - -.ep-template-card-meta { - display: flex; - gap: 12px; - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - margin-bottom: 8px; -} - -.ep-template-card-tags { - display: flex; - gap: 6px; - margin-top: 8px; - flex-wrap: wrap; -} - -.ep-template-tag { - font-size: 11px; - padding: 2px 8px; - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-secondary, #64748b); -} - -/* Loading / Empty */ -.ep-loading, -.ep-empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 40px 16px; - color: var(--text-tertiary, #94a3b8); - font-size: 12px; - gap: 8px; -} - -.ep-loading > svg, -.ep-empty > svg { - width: 32px; - height: 32px; - color: var(--text-tertiary, #94a3b8); - opacity: 0.5; - animation: ep-skeleton-pulse 2s ease-in-out infinite; -} - -/* ─── 中栏 flex-1 ─── */ - -.ep-center-col { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - overflow: hidden; - background: var(--bg-secondary, #f8fafc); -} - -/* 上半部:预览 + 封面 (320px) */ -.ep-preview-area { - height: 320px; - min-height: 280px; - display: flex; - align-items: flex-start; - justify-content: center; - gap: 40px; - padding: 20px; - background: var(--bg-primary, #ffffff); - border-bottom: 1px solid var(--line, #e2e8f0); - flex-shrink: 0; -} - -/* 手机模型预览 */ -.ep-phone-preview { - width: 150px; - height: 267px; - background: var(--color-gray-950); - border-radius: 16px; - border: 2px solid var(--ep-border, #1f1f30); - position: relative; - overflow: hidden; - flex-shrink: 0; -} - -.ep-phone-status-bar { - height: 20px; - background: var(--color-gray-900); - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 10px; - font-size: 9px; - color: var(--ep-text-muted, #4b5563); -} - -.ep-phone-content { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - background: linear-gradient( - 135deg, - var(--ep-bg-card-hover, #1a1a2e), - var(--ep-bg-deepest, #0a0a14) - ); - height: calc(100% - 20px); - position: relative; -} - -.ep-phone-play-btn { - width: 36px; - height: 36px; - border-radius: 50%; - background: rgba(108, 92, 231, 0.8); - border: none; - color: var(--text-inverse); - font-size: 14px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.2s ease; -} - -.ep-phone-play-btn:hover { - background: var(--primary, #6366f1); - transform: scale(1.1); -} - -.ep-phone-progress { - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 3px; - background: rgba(255, 255, 255, 0.2); -} - -.ep-phone-progress-fill { - height: 100%; - background: var(--primary, #6366f1); - transition: width 0.3s ease; -} - -.ep-phone-clip-label { - position: absolute; - bottom: 8px; - left: 0; - right: 0; - text-align: center; - font-size: 9px; - color: var(--ep-text-secondary, #9ca3af); -} - -/* 标题/字幕实时预览叠加层 */ -.ep-preview-title, -.ep-preview-subtitle { - position: absolute; - left: 4px; - right: 4px; - text-align: center; - color: #fff; - line-height: 1.3; - pointer-events: none; - z-index: 5; - word-break: break-all; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.ep-preview-title { - text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.7); -} - -.ep-preview-subtitle { - background: rgba(0, 0, 0, 0.55); - padding: 2px 4px; - border-radius: 3px; - text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); -} - -/* 封面预览 */ -.ep-cover-preview { - width: 150px; - height: 267px; - background: var(--ep-bg-card, #13131f); - border-radius: 6px; - border: 1px solid var(--ep-border, #1f1f30); - position: relative; - overflow: hidden; - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; -} - -.ep-cover-image { - width: 100%; - height: 100%; - background: linear-gradient(135deg, var(--ep-bg-card-hover, #1a1a2e), var(--ep-bg-card, #13131f)); - display: flex; - align-items: center; - justify-content: center; - color: var(--ep-text-muted, #4b5563); - font-size: 11px; -} - -.ep-cover-label { - position: absolute; - bottom: 8px; - left: 0; - right: 0; - text-align: center; - font-size: 9px; - color: var(--ep-text-secondary, #9ca3af); -} - -/* 封面 AI 按钮 */ -.ep-cover-ai-btns { - position: absolute; - top: 8px; - left: 4px; - right: 4px; - display: flex; - gap: 4px; -} - -.ep-cover-ai-btn { - flex: 1; - height: 22px; - background: rgba(108, 92, 231, 0.7); - border: none; - border-radius: 4px; - color: var(--text-inverse); - font-size: 10px; - cursor: pointer; - transition: all 0.2s ease; - display: flex; - align-items: center; - justify-content: center; - gap: 2px; -} - -.ep-cover-ai-btn:hover { - background: var(--primary-hover, #4f46e5); -} - -.ep-cover-ai-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* 封面方案按钮(竖排4个) */ -.ep-cover-tags { - display: flex; - flex-direction: column; - gap: 8px; -} - -.ep-cover-tag { - padding: 6px 12px; - border-radius: var(--radius-full, 9999px); - font-size: 10px; - background: var(--bg-secondary, #f8fafc); - color: var(--text-tertiary, #94a3b8); - border: 1px solid var(--border-color, #e2e8f0); - cursor: pointer; - transition: all 0.2s ease; - white-space: nowrap; - display: flex; - align-items: center; - justify-content: center; - font-weight: 500; - height: auto; -} - -.ep-cover-tag:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.ep-cover-tag.active { - background: var(--primary-soft, #eef2ff); - color: var(--primary, #6366f1); - border-color: var(--primary, #6366f1); -} - -/* ─── 下半部:水平时间线(V21风格)─── */ - -.ep-timeline-area { - flex: 1; - display: flex; - flex-direction: column; - overflow: hidden; - background: var(--bg-primary, #ffffff); - border-top: 1px solid var(--line, #e2e8f0); - min-height: 0; -} - -.ep-timeline-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 16px; - border-bottom: 1px solid var(--bg-secondary, #f1f5f9); - flex-shrink: 0; -} - -.ep-timeline-title { - display: flex; - align-items: center; - gap: 10px; - font-size: 12px; - font-weight: 600; - color: var(--text-secondary, #64748b); -} - -.ep-timeline-duration { - font-size: 12px; - color: var(--warning, #f59e0b); - font-weight: 600; -} - -.ep-timeline-actions { - display: flex; - gap: 6px; -} - -.ep-timeline-action-btn { - width: 28px; - height: 28px; - padding: 0; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--line, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-muted, #94a3b8); - font-size: 12px; - cursor: pointer; - transition: all 0.2s ease; - display: flex; - align-items: center; - justify-content: center; -} - -.ep-timeline-action-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -/* 时间标尺 */ -.ep-time-ruler { - height: 24px; - background: var(--bg-secondary, #f8fafc); - border-bottom: 1px solid var(--bg-secondary, #f1f5f9); - display: flex; - align-items: flex-end; - padding: 0 16px; - overflow: hidden; - flex-shrink: 0; -} - -.ep-time-ruler-inner { - display: flex; - align-items: center; - height: 100%; - position: relative; -} - -.ep-time-mark { - position: absolute; - font-size: 9px; - color: var(--text-muted, #cbd5e1); - bottom: 4px; -} - -.ep-time-mark::after { - content: ""; - position: absolute; - bottom: -4px; - left: 0; - width: 1px; - height: 6px; - background: var(--border-color, #e2e2f0); -} - -/* 水平片段轨道 — 带底色 */ -.ep-clip-track { - flex: 1; - display: flex; - align-items: center; - gap: 8px; - padding: 6px 16px; - overflow-x: auto; - overflow-y: hidden; - background: var(--bg-primary, #ffffff); - position: relative; -} - -.ep-clip-track::-webkit-scrollbar { - height: 6px; -} - -.ep-clip-track::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e2e2); - border-radius: 3px; -} - -/* 水平片段卡片 — 宽度由 inline style 按 duration * pixelsPerSecond 控制 */ -.ep-clip-card { - min-width: 60px; - height: 64px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e2e2); - border-radius: var(--radius-sm, 14px); - cursor: pointer; - transition: all 0.2s ease; - display: flex; - flex-direction: column; - overflow: hidden; - position: relative; -} - -.ep-clip-card:hover { - border-color: var(--primary, #6366f1); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.15); -} - -.ep-clip-card.selected { - border-color: var(--primary, #6366f1); - box-shadow: - 0 0 0 2px var(--primary-soft, #eef2ff), - 0 4px 12px rgba(99, 102, 241, 0.2); -} - -.ep-clip-card.drag-over { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.ep-clip-card.dragging { - opacity: 0.5; -} - -.ep-clip-thumbnail { - height: 34px; - background: linear-gradient(135deg, var(--bg-secondary, #f8fafc), var(--border-light, #f1f5f9)); - display: flex; - align-items: center; - justify-content: center; - font-size: 20px; - flex-shrink: 0; -} - -.ep-clip-info { - padding: 4px 6px; - flex: 1; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.ep-clip-name { - font-size: 11px; - font-weight: 500; - color: var(--text-primary, #1e293b); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.ep-clip-duration { - font-size: 10px; - color: var(--text-tertiary, #94a3b8); -} - -.ep-clip-remove { - position: absolute; - top: 4px; - right: 4px; - width: 18px; - height: 18px; - border-radius: 50%; - background: rgba(239, 68, 68, 0.9); - border: 2px solid var(--text-inverse); - color: var(--text-inverse); - font-size: 10px; - cursor: pointer; - display: none; - align-items: center; - justify-content: center; - line-height: 1; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); -} - -.ep-clip-card:hover .ep-clip-remove { - display: flex; -} - -/* 播放头竖线 */ -.ep-playhead { - position: absolute; - top: 0; - bottom: 0; - width: 2px; - background: var(--primary, #6366f1); - z-index: 10; - pointer-events: none; - transition: left 0.05s linear; -} - -.ep-playhead-handle { - position: absolute; - top: -2px; - left: -6px; - width: 14px; - height: 14px; - background: var(--primary, #6366f1); - clip-path: polygon(0 0, 100% 0, 50% 100%); - cursor: pointer; - pointer-events: auto; - transition: transform 0.1s; -} - -.ep-playhead-handle:hover { - transform: scale(1.3); -} - -/* 缩放控件 */ -.ep-timeline-zoom { - display: flex; - align-items: center; - gap: 6px; - margin-right: 12px; -} - -.ep-zoom-btn { - width: 24px; - height: 24px; - border: 1px solid var(--line, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-muted, #94a3b8); - cursor: pointer; - font-size: 14px; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.15s; - padding: 0; -} - -.ep-zoom-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.ep-zoom-slider { - width: 80px; - height: 4px; - accent-color: var(--primary, #6366f1); - cursor: pointer; -} - -.ep-zoom-label { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - min-width: 42px; - text-align: center; -} - -/* ── 裁剪手柄 ── */ -.ep-trim-handle { - position: absolute; - top: 0; - bottom: 0; - width: 8px; - cursor: col-resize; - z-index: 5; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.15s; -} - -.ep-trim-handle-left { - left: 0; - border-radius: var(--radius-sm, 14px) 0 0 var(--radius-sm, 14px); -} - -.ep-trim-handle-right { - right: 0; - border-radius: 0 var(--radius-sm, 14px) var(--radius-sm, 14px) 0; -} - -.ep-trim-handle:hover { - background: rgba(99, 102, 241, 0.15); -} - -.ep-trim-handle-line { - width: 2px; - height: 20px; - background: var(--primary, #6366f1); - border-radius: 1px; - opacity: 0.6; -} - -.ep-trim-handle:hover .ep-trim-handle-line { - opacity: 1; -} - -/* 已裁剪片段的视觉标记 */ -.ep-clip-card.trimmed { - border-left: 3px solid var(--primary, #6366f1); - border-right: 3px solid var(--primary, #6366f1); -} - -/* 裁剪指示器(时长旁的剪刀图标) */ -.ep-trim-indicator { - margin-left: 2px; - font-size: 9px; - color: var(--primary, #6366f1); -} - -/* 裁剪徽章 */ -.ep-trim-badge { - position: absolute; - bottom: 4px; - right: 4px; - font-size: 9px; - color: var(--primary, #6366f1); - background: rgba(99, 102, 241, 0.1); - border-radius: 4px; - padding: 1px 3px; - line-height: 1; -} - -/* 裁剪预览 tooltip */ -.ep-trim-preview { - background: rgba(30, 41, 59, 0.92); - color: #fff; - border-radius: 8px; - padding: 8px 12px; - font-size: 12px; - z-index: 1000; - pointer-events: none; - backdrop-filter: blur(8px); - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); - min-width: 120px; -} - -.ep-trim-preview-row { - display: flex; - justify-content: space-between; - gap: 12px; - line-height: 1.6; -} - -.ep-trim-preview-label { - color: rgba(255, 255, 255, 0.6); - font-size: 11px; -} - -.ep-trim-preview-value { - font-weight: 500; - font-variant-numeric: tabular-nums; -} - -.ep-trim-preview-duration { - margin-top: 4px; - padding-top: 4px; - border-top: 1px solid rgba(255, 255, 255, 0.15); -} - -.ep-trim-preview-duration .ep-trim-preview-value { - color: #60a5fa; -} - -/* ── 右键上下文菜单 ── */ -.ep-context-menu { - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e2e2); - border-radius: 8px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); - z-index: 2000; - min-width: 160px; - padding: 4px 0; - overflow: hidden; -} - -.ep-context-menu-item { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 14px; - font-size: 13px; - color: var(--text-primary, #1e293b); - cursor: pointer; - transition: background 0.15s; -} - -.ep-context-menu-item:hover { - background: var(--bg-hover, #f1f5f9); -} - -.ep-context-menu-item-danger { - color: #ef4444; -} - -.ep-context-menu-item-danger:hover { - background: rgba(239, 68, 68, 0.06); -} - -.ep-context-menu-icon { - font-size: 14px; - width: 18px; - text-align: center; -} - -.ep-context-menu-divider { - height: 1px; - background: var(--border-color, #e2e2e2); - margin: 4px 0; -} - -/* 空轨道 */ -.ep-track-empty { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 8px; - color: var(--text-tertiary, #94a3b8); - font-size: 12px; - min-height: 64px; -} - -.ep-track-empty-icon { - font-size: 28px; - margin-bottom: 2px; -} - -.ep-track-empty-text { - color: var(--text-tertiary, #94a3b8); - font-size: 12px; -} - -.ep-track-empty-add-btn { - margin-top: 4px; - padding: 6px 18px; - background: var(--primary, #6366f1); - color: #fff; - border: none; - border-radius: var(--radius-sm, 14px); - font-size: 13px; - font-weight: 500; - cursor: pointer; - transition: all var(--transition-fast, 0.15s ease); -} - -.ep-track-empty-add-btn:hover { - background: var(--primary-hover, #4f46e5); - transform: translateY(-1px); - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); -} - -/* 轨道末尾 "+" 添加卡片 — 对齐 V21 原型虚线 "+" 卡 */ -.ep-track-add-card-wrapper { - position: relative; - flex-shrink: 0; -} - -.ep-track-add-card { - min-width: 60px; - height: 64px; - border: 2px dashed var(--line, #e2e8f0); - border-radius: 12px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - font-size: 24px; - color: #94a3b8; - transition: all 0.2s ease; - user-select: none; -} - -.ep-track-add-card:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.ep-track-add-card.locked { - cursor: not-allowed; - opacity: 0.5; - font-size: 18px; -} - -.ep-track-add-card.locked:hover { - border-color: var(--line, #e2e8f0); - color: #94a3b8; - background: none; -} - -/* picker 已改为 Portal 渲染,不再需要相对定位 */ - -/* 添加片段按钮 + 选择器 */ -.ep-add-clip-wrapper { - position: relative; - display: inline-block; -} - -.ep-add-clip-btn { - padding: 4px 12px; - background: var(--primary, #6366f1); - color: #fff; - border: none; - border-radius: var(--radius-sm, 14px); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all var(--transition-fast, 0.15s ease); - white-space: nowrap; -} - -.ep-add-clip-btn:hover { - background: var(--primary-hover, #4f46e5); - transform: translateY(-1px); - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); -} - -/* ── "+" 卡片类型+时长选择器 ── */ -.ep-add-clip-picker { - position: absolute; - top: calc(100% + 6px); - right: 0; - width: 180px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--line, #e2e8f0); - border-radius: var(--radius-md, 18px); - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); - z-index: 100; - padding: 10px; - display: flex; - flex-direction: column; - gap: 8px; -} - -/* fixed 定位版本 — 不受任何父容器 overflow 裁剪 */ -.ep-add-clip-picker--portal { - position: fixed !important; - z-index: 1000; -} - -.ep-add-clip-picker-title { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); - padding-bottom: 6px; - border-bottom: 1px solid var(--line, #e2e8f0); -} - -.ep-add-clip-type-row, -.ep-add-clip-duration-row { - display: flex; - align-items: center; - gap: 8px; -} - -.ep-add-clip-type-label { - font-size: 12px; - color: var(--text-secondary, #64748b); - font-weight: 500; - flex-shrink: 0; - min-width: 36px; -} - -.ep-add-clip-type-btn { - padding: 5px 10px; - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--line, #e2e8f0); - background: var(--bg-primary, #ffffff); - color: var(--text-secondary, #64748b); - font-size: 11px; - cursor: pointer; - transition: all 0.15s ease; - display: flex; - align-items: center; - gap: 4px; - white-space: nowrap; -} - -.ep-add-clip-type-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.ep-add-clip-type-btn.active { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - color: var(--primary, #6366f1); - font-weight: 500; -} - -.ep-add-clip-duration-unit { - font-size: 12px; - color: var(--text-tertiary, #94a3b8); -} - -.ep-add-clip-confirm-btn { - width: 100%; - height: 30px; - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); - border: none; - border-radius: var(--radius-xs, 8px); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all 0.15s ease; - margin-top: 4px; -} - -.ep-add-clip-confirm-btn:hover { - background: var(--primary-hover, #4f46e5); - transform: translateY(-1px); - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); -} - -/* ── 片段详情 — 类型选择器 ── */ -.ep-clip-type-selector { - display: flex; - gap: 6px; -} - -.ep-clip-type-btn { - padding: 5px 12px; - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--line, #e2e8f0); - background: var(--bg-primary, #ffffff); - color: var(--text-secondary, #64748b); - font-size: 11px; - cursor: pointer; - transition: all 0.15s ease; - display: flex; - align-items: center; - gap: 4px; -} - -.ep-clip-type-btn:hover:not(.disabled) { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.ep-clip-type-btn.active { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - color: var(--primary, #6366f1); - font-weight: 500; -} - -.ep-clip-type-btn.disabled { - opacity: 0.4; - cursor: not-allowed; -} - -/* 一镜到底提示 */ -.ep-one-take-hint { - padding: 6px 16px; - background: var(--color-accent-50, #fffbeb); - border-bottom: 1px solid var(--color-accent-100, #fef3c7); - color: var(--accent-color, #f59e0b); - font-size: 12px; - font-weight: 500; - font-size: 11px; - text-align: center; -} - -/* ─── 右栏 280px ─── */ - -.ep-right-panel { - width: 280px; - min-width: 280px; - background: var(--bg-primary, #ffffff); - border-left: 1px solid var(--line, #e2e8f0); - overflow-y: auto; - padding: 0; - display: flex; - flex-direction: column; -} - -.ep-right-panel::-webkit-scrollbar { - width: 6px; -} - -.ep-right-panel::-webkit-scrollbar-thumb { - background: var(--line, #e2e8f0); - border-radius: 3px; -} - -/* 设置区块 */ -.ep-settings-section { - padding: 14px; - border-bottom: 1px solid var(--bg-secondary, #f1f5f9); -} - -.ep-section-title { - font-size: 11px; - font-weight: 600; - color: var(--text-secondary, #64748b); - text-transform: uppercase; - margin-bottom: 12px; - margin-top: 0; - display: flex; - align-items: center; - gap: 6px; - letter-spacing: 0.3px; -} - -.ep-section-icon { - font-size: 14px; -} - -/* 表单字段 */ -.ep-field { - margin-bottom: 12px; -} - -.ep-field-label { - display: block; - font-size: 12px; - font-weight: 500; - color: var(--text-secondary, #64748b); - margin-bottom: 6px; -} - -.ep-form-input, -.ep-form-select { - width: 100%; - height: 32px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 10px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - transition: all 0.2s ease; -} - -.ep-form-input:focus, -.ep-form-select:focus { - border-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.ep-form-select { - cursor: pointer; - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 10px center; - padding-right: 28px; -} - -/* Toggle 开关 */ -.ep-toggle-row { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 12px; -} - -.ep-toggle-label { - font-size: 12px; - color: var(--text-primary, #1e293b); - font-weight: 500; -} - -.ep-toggle { - width: 40px; - height: 22px; - background: var(--border-color, #e2e8f0); - border-radius: 11px; - position: relative; - cursor: pointer; - transition: background 0.2s ease; - flex-shrink: 0; -} - -.ep-toggle.active { - background: var(--primary, #6366f1); -} - -.ep-toggle-knob { - width: 18px; - height: 18px; - background: var(--bg-primary); - border-radius: 50%; - position: absolute; - top: 2px; - left: 2px; - transition: left 0.2s ease; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.ep-toggle.active .ep-toggle-knob { - left: 20px; -} - -/* 滑块 */ -.ep-slider-row { - display: flex; - align-items: center; - gap: 10px; -} - -.ep-slider { - flex: 1; - -webkit-appearance: none; - height: 4px; - background: var(--border-color, #e2e8f0); - border-radius: 2px; - outline: none; -} - -.ep-slider::-webkit-slider-thumb { - -webkit-appearance: none; - width: 16px; - height: 16px; - background: var(--primary, #6366f1); - border-radius: 50%; - cursor: pointer; - box-shadow: 0 2px 4px rgba(99, 102, 241, 0.3); - border: 2px solid var(--text-inverse); -} - -.ep-slider-value { - font-size: 12px; - color: var(--text-secondary, #64748b); - min-width: 36px; - text-align: right; - font-weight: 500; -} - -/* 样式按钮组 */ -.ep-style-btns { - display: flex; - gap: 6px; -} - -.ep-style-btn { - width: 32px; - height: 32px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-secondary, #64748b); - font-size: 13px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.2s ease; - font-weight: 500; -} - -.ep-style-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.ep-style-btn.active { - background: var(--primary-soft, #eef2ff); - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -/* ── 标题预设样式 — 剪映风格方形网格,示例文字"标题"预览完整效果 ── */ -.ep-title-presets-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 8px; -} - -.ep-title-preset-card { - aspect-ratio: 1; - background: #ffffff; - border: 2px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - cursor: pointer; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 4px; - padding: 6px 4px; - transition: all 0.15s ease; - overflow: hidden; -} - -.ep-title-preset-card:hover { - border-color: var(--primary, #6366f1); - background: #f8fafc; - transform: translateY(-1px); -} - -.ep-title-preset-card.active { - border-color: var(--primary, #6366f1); - background: #eef2ff; - box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.3); -} - -.ep-title-preset-preview-text { - line-height: 1.2; - text-align: center; - word-break: keep-all; - white-space: nowrap; -} - -.ep-title-preset-card-label { - font-size: 9px; - color: #64748b; - line-height: 1; - text-align: center; - margin-top: auto; -} - -.ep-title-preset-card.active .ep-title-preset-card-label { - color: var(--primary, #6366f1); - font-weight: 500; -} - -/* AI推荐按钮 */ -.ep-ai-recommend-btn { - width: 100%; - height: 36px; - padding: 0 12px; - background: var(--gradient-primary, var(--gradient-primary)); - border: none; - border-radius: var(--radius-xs, 8px); - color: var(--text-inverse); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; - margin-top: 12px; - display: flex; - align-items: center; - justify-content: center; - gap: 6px; -} - -.ep-ai-recommend-btn:hover { - opacity: 0.9; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); -} - -.ep-ai-recommend-btn:disabled { - opacity: 0.5; - cursor: not-allowed; - transform: none; - box-shadow: none; -} - -/* 片段详情卡片 */ -.ep-clip-detail { - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-sm, 14px); - padding: 14px; -} - -.ep-clip-detail-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 12px; - padding-bottom: 10px; - border-bottom: 1px solid var(--border-light, #f1f5f9); -} - -.ep-clip-detail-name { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.ep-clip-detail-type { - font-size: 11px; - padding: 3px 8px; - border-radius: var(--radius-xs, 8px); - background: var(--primary-soft, #eef2ff); - color: var(--primary, #6366f1); - font-weight: 500; -} - -.ep-clip-detail-field { - margin-bottom: 10px; -} - -.ep-clip-detail-label { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - margin-bottom: 4px; - font-weight: 500; -} - -.ep-clip-detail-value { - font-size: 12px; - color: var(--text-primary, #1e293b); - font-weight: 500; -} - -.ep-clip-detail-row { - display: flex; - gap: 8px; - align-items: center; -} - -.ep-duration-input { - width: 70px; - height: 28px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 8px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - text-align: center; - font-weight: 500; - transition: all 0.2s ease; -} - -.ep-duration-input:focus { - border-color: var(--primary, #6366f1); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -/* ═══════════════════════════════════════ - 底栏 — V21已移除,内容移到顶栏 - ═══════════════════════════════════════ */ - -.ep-status-bar { - display: flex; - align-items: center; - justify-content: space-between; - padding: 6px 16px; - background: var(--ep-bg-card, #fff); - border-bottom: 1px solid var(--ep-border, #e8e8e8); - font-size: 12px; - color: var(--text-secondary, #666); - flex-shrink: 0; -} - -.ep-status-left, -.ep-status-right { - display: flex; - align-items: center; - gap: 4px; -} - -.ep-status-sep { - margin: 0 4px; - opacity: 0.35; -} - -/* ═══════════════════════════════════════ - 弹窗补充样式(V21浅色主题) - ═══════════════════════════════════════ */ - -.ep-modal-field { - margin-bottom: 16px; -} - -.ep-modal-field label { - display: block; - font-size: 13px; - font-weight: 500; - color: var(--text-primary, #1e293b); - margin-bottom: 6px; -} - -.ep-modal-info { - padding: 12px 14px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - font-size: 12px; - color: var(--text-secondary, #64748b); - margin-top: 8px; - border: 1px solid var(--border-color, #e2e8f0); -} - -/* 生成弹窗 */ -.ep-gen-setup { - padding: 8px 0; -} - -.ep-gen-field-label { - display: block; - font-size: 13px; - font-weight: 500; - color: var(--text-primary, #1e293b); - margin-bottom: 8px; -} - -.ep-gen-duration-input { - width: 100%; - height: 40px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 12px; - color: var(--text-primary, #1e293b); - font-size: 14px; - outline: none; - margin-bottom: 12px; - transition: all 0.2s ease; -} - -.ep-gen-duration-input:focus { - border-color: var(--primary, #6366f1); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.ep-gen-estimate { - font-size: 12px; - color: var(--text-secondary, #64748b); - padding: 12px 14px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-color, #e2e8f0); -} - -.ep-gen-progress { - display: flex; - flex-direction: column; - align-items: center; - padding: 24px 0; - gap: 20px; -} - -.ep-gen-progress-ring-wrap { - position: relative; - width: 120px; - height: 120px; -} - -.ep-gen-progress-ring { - width: 100%; - height: 100%; - transform: rotate(-90deg); -} - -.ep-gen-progress-ring-bg { - fill: none; - stroke: var(--border-color, #e2e8f0); - stroke-width: 8; -} - -.ep-gen-progress-ring-fill { - fill: none; - stroke: var(--primary, #6366f1); - stroke-width: 8; - stroke-linecap: round; - transition: - stroke-dashoffset 0.5s ease, - stroke 0.3s; -} - -.ep-gen-progress-pct { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font-size: 24px; - font-weight: 700; - color: var(--text-primary, #1e293b); -} - -.ep-gen-step-text { - font-size: 14px; - color: var(--text-primary, #1e293b); - font-weight: 500; -} - -.ep-gen-progress-bar { - width: 100%; - height: 6px; - background: var(--border-color, #e2e8f0); - border-radius: 3px; - overflow: hidden; -} - -.ep-gen-progress-bar-fill { - height: 100%; - background: var(--primary, #6366f1); - border-radius: 3px; - transition: width 0.5s ease; -} - -.ep-gen-task-id { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - font-family: monospace; -} - -.ep-gen-result { - display: flex; - flex-direction: column; - align-items: center; - padding: 32px 0; - gap: 12px; -} - -.ep-gen-result-icon { - font-size: 56px; -} - -.ep-gen-result-title { - font-size: 18px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.ep-gen-result-msg { - font-size: 13px; - color: var(--text-secondary, #64748b); -} - -.ep-gen-result-msg--error { - color: var(--danger, #ef4444); -} - -.ep-gen-result-actions { - display: flex; - gap: 10px; - margin-top: 12px; -} - -.ep-btn-primary:active { - background: var(--primary-dark, #4338ca); - transform: scale(0.97); -} -.ep-btn-secondary:active { - background: var(--bg-secondary, #f8fafc); - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} -.ep-btn-danger:active { - background: var(--error-color); - transform: scale(0.97); -} - -.ep-btn-danger:disabled { - opacity: 0.4; - cursor: not-allowed; -} -.ep-btn-sm:active { - transform: scale(0.96); - opacity: 0.85; -} - -.ep-btn-sm:disabled { - opacity: 0.4; - cursor: not-allowed; -} -.ep-cover-ai-btn:active { - background: var(--primary-dark, #4338ca); - transform: scale(0.96); -} -.ep-filter-chip:active { - transform: scale(0.95); - background: var(--primary-soft, #eef2ff); -} -.ep-cover-tag:active { - transform: scale(0.96); - background: var(--primary-soft, #eef2ff); -} -.ep-timeline-action-btn:active { - background: var(--primary-soft, #eef2ff); - transform: scale(0.96); -} - -.ep-timeline-action-btn:disabled { - opacity: 0.4; - cursor: not-allowed; -} -.ep-style-btn:active { - background: var(--primary-soft, #eef2ff); - transform: scale(0.95); -} -.ep-ai-recommend-btn:active { - opacity: 0.8; - transform: scale(0.98); -} -.ep-mode-btn:active { - background: rgba(108, 92, 231, 0.15); -} - -/* 底栏链接按钮 */ -.ep-status-link { - color: var(--ep-accent, #6c5ce7); - cursor: pointer; - background: none; - border: none; - font-size: 11px; - padding: 2px 4px; - border-radius: 3px; - transition: - color 0.2s, - background 0.2s; - display: inline-flex; - align-items: center; - gap: 3px; -} - -.ep-status-link:hover { - color: var(--ep-accent-hover, #7c6cf7); - background: var(--ep-accent-soft, rgba(108, 92, 231, 0.12)); -} - -.ep-status-link:active { - color: var(--primary-dark); -} - -/* Skeleton loading */ -@keyframes ep-skeleton-pulse { - 0%, - 100% { - opacity: 0.4; - } - 50% { - opacity: 0.8; - } -} - -.ep-skeleton { - display: flex; - flex-direction: column; - gap: 8px; - padding: 12px 8px; -} - -.ep-skeleton-item { - height: 48px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-sm, 14px); - animation: ep-skeleton-pulse 1.5s ease-in-out infinite; -} - -.ep-skeleton-item--header { - height: 14px; - width: 60%; -} - -.ep-skeleton-item--meta { - height: 10px; - width: 40%; -} - -.ep-skeleton-item--tag { - height: 18px; - width: 80%; -} -/* ═══ 片段属性面板 — 补充样式 ═══ */ -.ep-clip-detail-unit { - font-size: var(--font-size-xs, 11px); - color: var(--text-tertiary, #94a3b8); - margin-left: 2px; -} - -.ep-clip-detail-linked { - display: inline-flex; - align-items: center; - gap: 4px; - color: var(--primary, #6366f1); - font-size: 12px; -} - -.ep-clip-detail-linked::before { - content: ""; - display: inline-block; - width: 12px; - height: 12px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236366f1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/svg%3E"); - background-size: contain; - background-repeat: no-repeat; - flex-shrink: 0; -} - -/* ═══ 配音素材选择器 ═══ */ -.ep-clip-detail-select { - width: 100%; - padding: 6px 8px; - font-size: 12px; - color: var(--text-primary, #e2e8f0); - background: var(--bg-tertiary, #1e293b); - border: 1px solid var(--border-color, #334155); - border-radius: 6px; - outline: none; - cursor: pointer; - transition: border-color 0.15s; -} - -.ep-clip-detail-select:hover { - border-color: var(--primary, #6366f1); -} - -.ep-clip-detail-select:focus { - border-color: var(--primary, #6366f1); - box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.15); -} - -.ep-voice-upload-btn { - width: 100%; - margin-top: 6px; - padding: 6px 0; - font-size: 12px; - color: var(--primary, #6366f1); - background: transparent; - border: 1px dashed var(--primary, #6366f1); - border-radius: 6px; - cursor: pointer; - transition: - background 0.15s, - color 0.15s; -} - -.ep-voice-upload-btn:hover { - background: rgba(99, 102, 241, 0.08); -} - -/* 配音标签行(含刷新按钮) */ -.ep-clip-detail-label { - display: flex; - align-items: center; - gap: 6px; -} - -.ep-voice-refresh-btn { - display: inline-flex; - align-items: center; - justify-content: center; - width: 20px; - height: 20px; - padding: 0; - font-size: 11px; - line-height: 1; - color: var(--text-secondary, #94a3b8); - background: transparent; - border: none; - border-radius: 4px; - cursor: pointer; - transition: - background 0.15s, - color 0.15s; -} - -.ep-voice-refresh-btn:hover { - color: var(--primary, #6366f1); - background: rgba(99, 102, 241, 0.1); -} - -.ep-voice-refresh-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* 配音选择行(select + 试听按钮) */ -.ep-voice-select-row { - display: flex; - align-items: center; - gap: 6px; -} - -.ep-voice-select-row .ep-clip-detail-select { - flex: 1; - min-width: 0; -} - -.ep-voice-preview-btn { - display: inline-flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - flex-shrink: 0; - font-size: 13px; - line-height: 1; - color: var(--text-primary, #e2e8f0); - background: var(--bg-tertiary, #1e293b); - border: 1px solid var(--border-color, #334155); - border-radius: 6px; - cursor: pointer; - transition: - background 0.15s, - border-color 0.15s; -} - -.ep-voice-preview-btn:hover { - background: var(--bg-hover, #2d3a4f); - border-color: var(--primary, #6366f1); -} - -.ep-voice-loading, -.ep-voice-empty { - padding: 8px 0; - font-size: 12px; - color: var(--text-secondary, #94a3b8); - text-align: center; -} - -/* ═══ 预览区 — 补充样式 ═══ */ -.ep-phone-empty-hint { - color: rgba(255, 255, 255, 0.5); - font-size: var(--font-size-xs, 11px); -} - -.ep-cover-icon { - font-size: 24px; - line-height: 1; -} - -/* ═══ 素材面板 — 补充样式 ═══ */ -.ep-media-panel-inner { - position: relative; -} - -/* ═══ 生成历史弹窗 — 补充样式 ═══ */ -.ep-gh-modal { - width: 520px; - max-width: 95vw; -} - -.ep-gh-body { - max-height: 400px; - overflow-y: auto; -} - -.ep-gh-empty { - display: flex; - align-items: center; - justify-content: center; - padding: 32px; - color: var(--text-tertiary, #94a3b8); - font-size: var(--font-size-sm, 13px); -} - -.ep-gh-table { - width: 100%; - border-collapse: collapse; -} - -.ep-gh-table-header-row { - border-bottom: 1px solid var(--border-color, #e2e8f0); - text-align: left; -} - -.ep-gh-th { - padding: 10px 12px; - font-size: var(--font-size-xs, 11px); - color: var(--text-secondary, #64748b); - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.ep-gh-table-row { - border-bottom: 1px solid var(--border-light, #f1f5f9); - transition: background 0.2s ease; -} - -.ep-gh-table-row:hover { - background: var(--bg-secondary, #f8fafc); -} - -.ep-gh-td { - padding: 10px 12px; - font-size: var(--font-size-sm, 13px); - color: var(--text-primary, #1e293b); -} - -.ep-gh-td-id { - font-family: "SF Mono", "Fira Code", monospace; - font-size: var(--font-size-xs, 11px); - color: var(--text-secondary, #64748b); -} - -.ep-gh-td-time { - color: var(--text-tertiary, #94a3b8); - font-size: var(--font-size-xs, 11px); -} - -.ep-gh-status-tag { - display: inline-block; - padding: 3px 10px; - border-radius: var(--radius-full, 9999px); - font-size: var(--font-size-xs, 11px); - line-height: 1.4; - font-weight: 500; -} - -/* ═══ 生成历史弹窗 — 基础 Modal 结构 ═══ */ -.ep-modal-overlay { - position: fixed; - inset: 0; - z-index: 1050; - display: grid; - place-items: center; - background: var(--bg-overlay, rgba(15, 23, 42, 0.45)); - animation: ep-fade-in 0.2s ease; - backdrop-filter: blur(4px); -} - -@keyframes ep-fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.ep-modal { - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-lg, 24px); - box-shadow: 0 20px 60px rgba(15, 23, 42, 0.15); - animation: ep-scale-in 0.2s ease-out; - overflow: hidden; -} - -@keyframes ep-scale-in { - from { - opacity: 0; - transform: scale(0.95); - } - to { - opacity: 1; - transform: scale(1); - } -} - -.ep-modal-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 20px 24px; - border-bottom: 1px solid var(--border-light, #f1f5f9); -} - -.ep-modal-header h3 { - margin: 0; - font-size: 16px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.ep-modal-close { - width: 32px; - height: 32px; - display: grid; - place-items: center; - border: none; - border-radius: var(--radius-xs, 8px); - background: transparent; - color: var(--text-secondary, #64748b); - font-size: 18px; - cursor: pointer; - transition: all 0.2s ease; -} - -.ep-modal-close:hover { - background: var(--bg-secondary, #f8fafc); - color: var(--text-primary, #1e293b); -} - -.ep-modal-close:active { - transform: scale(0.92); - background: var(--border-color, #e2e8f0); -} - -.ep-modal-body { - padding: 20px 24px; -} - -.ep-modal-footer { - display: flex; - justify-content: flex-end; - gap: 10px; - padding: 16px 24px; - border-top: 1px solid var(--border-light, #f1f5f9); -} - -/* 状态标签变体 */ -.ep-gh-status-tag--completed { - background: var(--success-soft); - color: var(--success-color); -} - -.ep-gh-status-tag--failed { - background: var(--error-soft); - color: var(--error-color); -} - -.ep-gh-status-tag--rendering { - background: var(--info-soft); - color: var(--info-color); -} - -.ep-gh-status-tag--default { - background: var(--bg-secondary); - color: var(--text-tertiary); -} - -/* 空状态增强 */ -.ep-gh-empty { - flex-direction: column; - gap: 8px; - text-align: center; - min-height: 80px; -} - -/* ═══════════════════════════════════════ - BGM 选择器 Drawer - ═══════════════════════════════════════ */ - -.bgm-selector-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - gap: 0; - overflow: hidden; -} - -.bgm-search-row { - margin-bottom: 12px; - flex-shrink: 0; -} - -.bgm-category-bar { - display: flex; - gap: 8px; - flex-wrap: nowrap; - overflow-x: auto; - padding-bottom: 12px; - border-bottom: 1px solid var(--border-light, #f1f5f9); - margin-bottom: 12px; - flex-shrink: 0; -} - -.bgm-category-bar::-webkit-scrollbar { - height: 0; -} - -.bgm-category-tag { - cursor: pointer; - border-radius: var(--radius-full, 9999px); - padding: 4px 12px; - font-size: 12px; - border: 1px solid var(--border-color, #e2e8f0); - background: var(--bg-primary, #ffffff); - color: var(--text-secondary, #64748b); - transition: all 0.2s ease; - white-space: nowrap; - flex-shrink: 0; - user-select: none; -} - -.bgm-category-tag:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.bgm-category-tag.active { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); - border-color: var(--primary, #6366f1); -} - -.bgm-list { - flex: 1; - overflow-y: auto; - display: flex; - flex-direction: column; - gap: 8px; - min-height: 0; -} - -.bgm-list::-webkit-scrollbar { - width: 5px; -} - -.bgm-list::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -.bgm-item { - display: flex; - align-items: center; - gap: 10px; - padding: 10px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-md, 18px); - background: var(--bg-primary, #ffffff); - cursor: pointer; - transition: all 0.2s ease; - position: relative; -} - -.bgm-item:hover { - border-color: var(--primary-light, #a5b4fc); - background: var(--primary-soft, #f8faff); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.1); -} - -.bgm-item.selected { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.15); -} - -.bgm-item-cover { - width: 44px; - height: 44px; - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - overflow: hidden; -} - -.bgm-item-cover img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.bgm-item-cover-icon { - font-size: 20px; - opacity: 0.5; -} - -.bgm-item-info { - flex: 1; - min-width: 0; - display: flex; - flex-direction: column; - gap: 3px; -} - -.bgm-item-name { - font-size: 13px; - font-weight: 500; - color: var(--text-primary, #1e293b); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.bgm-item-meta { - display: flex; - gap: 8px; - font-size: 11px; - color: var(--text-tertiary, #94a3b8); -} - -.bgm-item-category { - color: var(--primary, #6366f1); -} - -.bgm-item-tags { - display: flex; - gap: 4px; - flex-wrap: wrap; -} - -.bgm-item-tag { - font-size: 10px; - padding: 1px 6px; - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-secondary, #64748b); -} - -.bgm-item-preview-btn { - width: 30px; - height: 30px; - border-radius: 50%; - border: 1px solid var(--border-color, #e2e8f0); - background: var(--bg-primary, #ffffff); - color: var(--text-secondary, #64748b); - font-size: 13px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - transition: all 0.2s ease; -} - -.bgm-item-preview-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.bgm-item-preview-btn.playing { - border-color: var(--primary, #6366f1); - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); -} - -.bgm-item-check { - position: absolute; - top: 6px; - right: 6px; - width: 18px; - height: 18px; - border-radius: 50%; - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); - font-size: 11px; - display: flex; - align-items: center; - justify-content: center; - font-weight: 700; -} - -/* 混音配置区 */ -.bgm-mix-config { - flex-shrink: 0; - border-top: 1px solid var(--border-light, #f1f5f9); - padding-top: 14px; - margin-top: 12px; - display: flex; - flex-direction: column; - gap: 12px; -} - -.bgm-mix-header { - display: flex; - align-items: center; - justify-content: space-between; - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.bgm-mix-clear { - font-size: 12px; - color: var(--danger, #ef4444); - background: none; - border: none; - cursor: pointer; - font-weight: 500; - transition: opacity 0.2s; -} - -.bgm-mix-clear:hover { - opacity: 0.7; -} - -.bgm-mix-selected { - font-size: 12px; - color: var(--text-secondary, #64748b); - padding: 6px 10px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-light, #f1f5f9); -} - -.bgm-mix-field { - display: flex; - flex-direction: column; - gap: 4px; -} - -.bgm-mix-label { - display: flex; - align-items: center; - justify-content: space-between; - font-size: 12px; - color: var(--text-secondary, #64748b); - font-weight: 500; -} - -.bgm-mix-value { - color: var(--primary, #6366f1); - font-weight: 600; - font-size: 12px; -} - -.bgm-mix-toggle-row { - flex-direction: row; - align-items: center; - justify-content: space-between; -} - -.bgm-loading, -.bgm-empty { - display: flex; - align-items: center; - justify-content: center; - padding: 32px 16px; - color: var(--text-tertiary, #94a3b8); - font-size: 13px; -} - -/* ═══════════════════════════════════════ - 字幕样式配置面板 Drawer - ═══════════════════════════════════════ */ - -.subtitle-style-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - gap: 0; - overflow-y: auto; -} - -.subtitle-style-drawer .ant-drawer-body::-webkit-scrollbar { - width: 5px; -} - -.subtitle-style-drawer .ant-drawer-body::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -.sub-field { - margin-bottom: 16px; -} - -.sub-toggle-row { - display: flex; - align-items: center; - justify-content: space-between; -} - -.sub-label { - font-size: 12px; - font-weight: 500; - color: var(--text-secondary, #64748b); - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - margin-bottom: 6px; -} - -.sub-mode-switch { - display: flex; - gap: 0; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - overflow: hidden; -} - -.sub-mode-btn { - flex: 1; - padding: 7px 12px; - font-size: 12px; - font-weight: 500; - background: var(--bg-primary, #ffffff); - border: none; - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; - border-right: 1px solid var(--border-color, #e2e8f0); -} - -.sub-mode-btn:last-child { - border-right: none; -} - -.sub-mode-btn:hover { - background: var(--primary-soft, #f8faff); - color: var(--primary, #6366f1); -} - -.sub-mode-btn.active { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); -} - -.sub-select { - width: 100%; -} - -.sub-color-row { - display: flex; - align-items: center; - gap: 10px; -} - -.sub-value { - color: var(--primary, #6366f1); - font-weight: 600; - font-size: 12px; -} - -.sub-position-group { - display: flex; - gap: 0; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - overflow: hidden; -} - -.sub-position-btn { - flex: 1; - padding: 7px 10px; - font-size: 12px; - font-weight: 500; - background: var(--bg-primary, #ffffff); - border: none; - border-right: 1px solid var(--border-color, #e2e8f0); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sub-position-btn:last-child { - border-right: none; -} - -.sub-position-btn:hover { - background: var(--primary-soft, #f8faff); - color: var(--primary, #6366f1); -} - -.sub-position-btn.active { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); -} - -.sub-effect-btns { - display: flex; - gap: 8px; -} - -.sub-effect-btn { - flex: 1; - padding: 7px 12px; - font-size: 12px; - font-weight: 500; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sub-effect-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.sub-effect-btn.active { - background: var(--primary-soft, #eef2ff); - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); -} - -.sub-preview-box { - background: linear-gradient(135deg, #1a1a2e, #0a0a14); - border-radius: var(--radius-md, 18px); - padding: 20px; - display: flex; - align-items: center; - justify-content: center; - min-height: 60px; -} - -.sub-preview-text { - line-height: 1.4; - text-align: center; - word-break: break-all; -} - -/* ═══════════════════════════════════════ - ClipPropertiesPanel — BGM/字幕高级配置按钮 - ═══════════════════════════════════════ */ - -.ep-advanced-btn { - width: 100%; - padding: 8px 12px; - font-size: 12px; - font-weight: 500; - background: var(--primary-soft, #eef2ff); - border: 1px solid var(--primary-light, #a5b4fc); - border-radius: var(--radius-xs, 8px); - color: var(--primary, #6366f1); - cursor: pointer; - transition: all 0.2s ease; - display: flex; - align-items: center; - gap: 6px; - justify-content: center; -} - -.ep-advanced-btn:hover { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); - transform: translateY(-1px); - box-shadow: 0 4px 10px rgba(99, 102, 241, 0.25); -} - -.ep-bgm-current { - font-size: 11px; - color: var(--text-secondary, #64748b); - padding: 6px 10px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-light, #f1f5f9); - margin-bottom: 8px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.ep-bgm-empty { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - padding: 6px 10px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px dashed var(--border-color, #e2e8f0); - margin-bottom: 8px; - text-align: center; -} - -/* ═══════════════════════════════════════ - 转场特效选择器 Drawer - ═══════════════════════════════════════ */ - -.transition-selector-drawer .ant-drawer-body { - padding: 16px 20px; - display: flex; - flex-direction: column; - gap: 20px; -} - -.ts-duration-section { - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-md, 12px); - padding: 16px; -} - -.ts-duration-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.ts-duration-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.ts-duration-value { - font-size: 13px; - font-weight: 700; - color: var(--primary, #6366f1); - font-variant-numeric: tabular-nums; -} - -.ts-duration-marks { - display: flex; - justify-content: space-between; - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - margin-top: 4px; -} - -/* ── 转场卡片网格 ── */ - -.ts-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 10px; -} - -.ts-card { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 6px; - padding: 14px 8px; - background: var(--bg-surface, #ffffff); - border: 2px solid transparent; - border-radius: var(--radius-md, 12px); - cursor: pointer; - transition: all 0.2s ease; - user-select: none; -} - -.ts-card:hover { - background: var(--primary-soft, #eef2ff); - border-color: var(--primary-light, #c7d2fe); - transform: translateY(-1px); -} - -.ts-card.active { - border-color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - box-shadow: 0 2px 8px rgba(99, 102, 241, 0.15); -} - -.ts-card-icon { - font-size: 22px; - line-height: 1; -} - -.ts-card-name { - font-size: 11px; - font-weight: 500; - color: var(--text-secondary, #64748b); - text-align: center; - white-space: nowrap; -} - -.ts-card.active .ts-card-name { - color: var(--primary, #6366f1); - font-weight: 600; -} - -.ts-card-check { - position: absolute; - top: 4px; - right: 6px; - font-size: 12px; - font-weight: 700; - color: var(--primary, #6366f1); -} - -/* ── 转场选择器底部 ── */ - -.ts-footer { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding-top: 12px; - border-top: 1px solid var(--border-light, #f1f5f9); -} - -.ts-reset-btn { - padding: 6px 14px; - font-size: 12px; - font-weight: 500; - background: var(--bg-secondary, #f1f5f9); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.ts-reset-btn:hover { - background: var(--bg-primary, #e2e8f0); - color: var(--text-primary, #1e293b); -} - -.ts-current { - font-size: 12px; - color: var(--text-tertiary, #94a3b8); -} - -/* ═══════════════════════════════════════ - 片段调速面板 Drawer - ═══════════════════════════════════════ */ - -.speed-panel-drawer .ant-drawer-body { - padding: 16px 20px; - display: flex; - flex-direction: column; - gap: 20px; -} - -.sp-speed-section { - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-md, 12px); - padding: 16px; -} - -.sp-speed-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; -} - -.sp-speed-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.sp-speed-value { - font-size: 14px; - font-weight: 700; - color: var(--primary, #6366f1); - font-variant-numeric: tabular-nums; -} - -.sp-speed-marks { - display: flex; - justify-content: space-between; - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - margin-top: 4px; -} - -.sp-speed-desc { - font-size: 12px; - color: var(--text-secondary, #64748b); - margin-top: 8px; - text-align: center; -} - -/* ── 预设按钮 ── */ - -.sp-presets { - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-md, 12px); - padding: 14px 16px; -} - -.sp-presets-label { - font-size: 12px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 10px; -} - -.sp-presets-row { - display: flex; - gap: 8px; -} - -.sp-preset-btn { - flex: 1; - padding: 8px 0; - font-size: 13px; - font-weight: 600; - background: var(--bg-surface, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sp-preset-btn:hover { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); -} - -.sp-preset-btn.active { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); - border-color: var(--primary, #6366f1); -} - -/* ── 音调修正 ── */ - -.sp-pitch-section { - display: flex; - justify-content: space-between; - align-items: center; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-md, 12px); - padding: 14px 16px; -} - -.sp-pitch-info { - display: flex; - flex-direction: column; - gap: 2px; -} - -.sp-pitch-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -.sp-pitch-desc { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); -} - -/* ── 调速底部 ── */ - -.sp-footer { - display: flex; - gap: 10px; - padding-top: 12px; - border-top: 1px solid var(--border-light, #f1f5f9); -} - -.sp-reset-btn { - flex: 1; - padding: 8px 14px; - font-size: 12px; - font-weight: 500; - background: var(--bg-secondary, #f1f5f9); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sp-reset-btn:hover { - background: var(--bg-primary, #e2e8f0); - color: var(--text-primary, #1e293b); -} - -.sp-apply-all-btn { - flex: 1; - padding: 8px 14px; - font-size: 12px; - font-weight: 600; - background: var(--primary-soft, #eef2ff); - border: 1px solid var(--primary-light, #a5b4fc); - border-radius: var(--radius-xs, 8px); - color: var(--primary, #6366f1); - cursor: pointer; - transition: all 0.2s ease; -} - -.sp-apply-all-btn:hover { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); -} - -/* ═══════════════════════════════════════ - 时间线 — 转场指示器 + 速度徽章 - ═══════════════════════════════════════ */ - -.ep-transition-indicator { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 2px; - min-width: 36px; - padding: 4px 6px; - background: var(--primary-soft, #eef2ff); - border: 1px solid var(--primary-light, #c7d2fe); - border-radius: var(--radius-xs, 6px); - flex-shrink: 0; - cursor: default; -} - -.ep-trans-icon { - font-size: 14px; - line-height: 1; -} - -.ep-trans-duration { - font-size: 9px; - font-weight: 600; - color: var(--primary, #6366f1); - white-space: nowrap; -} - -.ep-speed-badge { - position: absolute; - top: 4px; - right: 22px; - padding: 1px 5px; - font-size: 10px; - font-weight: 700; - color: var(--text-inverse, #ffffff); - background: rgba(99, 102, 241, 0.85); - border-radius: 4px; - line-height: 1.4; - pointer-events: none; -} - -/* ═══════════════════════════════════════ - 片段详情 — 转场/调速入口按钮 - ═══════════════════════════════════════ */ - -.ep-advanced-btn--transition, -.ep-advanced-btn--speed { - justify-content: flex-start; - gap: 8px; - padding: 10px 12px; - font-size: 12px; -} - -.ep-advanced-btn-icon { - font-size: 16px; - flex-shrink: 0; -} - -.ep-advanced-btn-label { - font-weight: 600; - flex-shrink: 0; -} - -.ep-advanced-btn-value { - flex: 1; - text-align: right; - font-weight: 500; - opacity: 0.8; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.ep-advanced-btn-arrow { - font-size: 16px; - font-weight: 300; - opacity: 0.5; - flex-shrink: 0; -} - -/* ═══ TTS 配音面板 Drawer ═══ */ - -.tts-panel-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - gap: 20px; -} - -/* ── 配音模式切换 ── */ - -.tts-mode-section { - display: flex; - flex-direction: column; - gap: 8px; -} - -.tts-mode-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1f2937); -} - -.tts-mode-group { - display: flex; - gap: 8px; -} - -.tts-mode-btn { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - padding: 10px 8px; - border: 1px solid var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-surface, #fff); - color: var(--text-secondary, #6b7280); - cursor: pointer; - transition: all 0.2s ease; - font-size: 12px; -} - -.tts-mode-btn:hover { - border-color: var(--primary-300, #93c5fd); - color: var(--primary-600, #2563eb); - background: var(--primary-50, #eff6ff); -} - -.tts-mode-btn.active { - border-color: var(--primary-500, #3b82f6); - color: var(--primary-600, #2563eb); - background: var(--primary-50, #eff6ff); - font-weight: 600; -} - -.tts-mode-icon { - font-size: 20px; -} - -.tts-mode-text { - font-size: 12px; -} - -/* ── 文本输入 ── */ - -.tts-text-section { - display: flex; - flex-direction: column; - gap: 6px; -} - -.tts-text-header { - display: flex; - align-items: center; - justify-content: space-between; -} - -.tts-text-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1f2937); -} - -.tts-text-count { - font-size: 12px; - color: var(--text-tertiary, #9ca3af); -} - -.tts-text-input { - width: 100%; - padding: 10px 12px; - border: 1px solid var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-surface, #fff); - color: var(--text-primary, #1f2937); - font-size: 13px; - line-height: 1.5; - resize: vertical; - outline: none; - transition: border-color 0.2s; - font-family: inherit; -} - -.tts-text-input:focus { - border-color: var(--primary-500, #3b82f6); - box-shadow: 0 0 0 2px var(--primary-100, #dbeafe); -} - -.tts-text-input::placeholder { - color: var(--text-tertiary, #9ca3af); -} - -/* ── 音色选择 ── */ - -.tts-voice-section { - display: flex; - flex-direction: column; - gap: 8px; -} - -.tts-voice-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1f2937); - display: flex; - align-items: center; - gap: 8px; -} - -.tts-voice-loading { - font-size: 12px; - font-weight: 400; - color: var(--text-tertiary, #9ca3af); -} - -.tts-voice-tabs { - display: flex; - gap: 4px; - background: var(--bg-secondary, #f3f4f6); - border-radius: var(--radius-md, 8px); - padding: 3px; -} - -.tts-voice-tab { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - gap: 6px; - padding: 6px 12px; - border: none; - background: transparent; - border-radius: 6px; - font-size: 12px; - font-weight: 500; - color: var(--text-secondary, #6b7280); - cursor: pointer; - transition: all 0.2s ease; -} - -.tts-voice-tab:hover { - color: var(--text-primary, #1f2937); -} - -.tts-voice-tab.active { - background: var(--bg-surface, #fff); - color: var(--primary-600, #2563eb); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); -} - -.tts-voice-tab-count { - font-size: 10px; - padding: 1px 6px; - background: var(--primary-100, #dbeafe); - color: var(--primary-600, #2563eb); - border-radius: 10px; - font-weight: 600; -} - -.tts-voice-list { - display: flex; - flex-direction: column; - gap: 6px; - max-height: 200px; - overflow-y: auto; -} - -.tts-voice-item { - display: flex; - align-items: center; - gap: 10px; - padding: 8px 10px; - border: 1px solid var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-surface, #fff); - cursor: pointer; - transition: all 0.2s ease; -} - -.tts-voice-item:hover { - border-color: var(--primary-300, #93c5fd); - background: var(--primary-50, #eff6ff); -} - -.tts-voice-item.selected { - border-color: var(--primary-500, #3b82f6); - background: var(--primary-50, #eff6ff); -} - -.tts-voice-item-icon { - font-size: 20px; - flex-shrink: 0; - width: 28px; - height: 28px; - display: flex; - align-items: center; - justify-content: center; - background: var(--bg-secondary, #f3f4f6); - border-radius: 50%; -} - -.tts-voice-item-info { - flex: 1; - min-width: 0; -} - -.tts-voice-item-name { - font-size: 13px; - font-weight: 500; - color: var(--text-primary, #1f2937); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tts-voice-item-desc { - font-size: 11px; - color: var(--text-tertiary, #9ca3af); - margin-top: 2px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tts-voice-item-play { - flex-shrink: 0; - width: 26px; - height: 26px; - display: flex; - align-items: center; - justify-content: center; - border: none; - background: var(--primary-500, #3b82f6); - color: #fff; - border-radius: 50%; - font-size: 11px; - cursor: pointer; - transition: all 0.2s ease; -} - -.tts-voice-item-play:hover { - background: var(--primary-600, #2563eb); - transform: scale(1.08); -} - -.tts-voice-empty { - padding: 20px; - text-align: center; - font-size: 12px; - color: var(--text-tertiary, #9ca3af); - background: var(--bg-secondary, #f3f4f6); - border-radius: var(--radius-md, 8px); -} - -/* ── 滑块区域 ── */ - -.tts-slider-section { - display: flex; - flex-direction: column; - gap: 4px; -} - -.tts-slider-header { - display: flex; - align-items: center; - justify-content: space-between; -} - -.tts-slider-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1f2937); -} - -.tts-slider-value { - font-size: 12px; - font-weight: 500; - color: var(--primary-600, #2563eb); - min-width: 50px; - text-align: right; -} - -.tts-slider-marks { - display: flex; - justify-content: space-between; - font-size: 11px; - color: var(--text-tertiary, #9ca3af); - padding: 0 2px; -} - -/* ── 试听按钮 ── */ - -.tts-preview-section { - display: flex; - justify-content: center; -} - -.tts-preview-btn { - display: flex; - align-items: center; - gap: 6px; - padding: 8px 24px; - border: 1px solid var(--primary-500, #3b82f6); - border-radius: var(--radius-md, 8px); - background: var(--primary-50, #eff6ff); - color: var(--primary-600, #2563eb); - font-size: 13px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; -} - -.tts-preview-btn:hover:not(:disabled) { - background: var(--primary-100, #dbeafe); -} - -.tts-preview-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* ── 字幕联动 ── */ - -.tts-subtitle-section { - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 12px; - border: 1px solid var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-surface, #fff); -} - -.tts-subtitle-info { - display: flex; - flex-direction: column; - gap: 2px; -} - -.tts-subtitle-label { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1f2937); -} - -.tts-subtitle-desc { - font-size: 11px; - color: var(--text-tertiary, #9ca3af); -} - -/* ── 上传配音提示 ── */ - -.tts-upload-hint { - padding: 16px; - border: 1px dashed var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-secondary, #f9fafb); -} - -.tts-upload-hint p { - font-size: 13px; - color: var(--text-secondary, #6b7280); - margin: 0 0 6px; - line-height: 1.5; -} - -.tts-upload-hint p:last-child { - margin-bottom: 0; -} - -/* ── 底部操作 ── */ - -.tts-footer { - display: flex; - justify-content: center; - padding-top: 4px; -} - -.tts-reset-btn { - padding: 6px 20px; - border: 1px solid var(--border-primary, #e5e7eb); - border-radius: var(--radius-md, 8px); - background: var(--bg-surface, #fff); - color: var(--text-secondary, #6b7280); - font-size: 13px; - cursor: pointer; - transition: all 0.2s ease; -} - -.tts-reset-btn:hover { - border-color: var(--border-primary, #d1d5db); - color: var(--text-primary, #1f2937); - background: var(--bg-secondary, #f9fafb); -} - -/* ═══════════════════════════════════════ - 水印配置面板 Drawer - ═══════════════════════════════════════ */ - -.watermark-panel-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - gap: 0; - overflow-y: auto; -} - -.watermark-panel-drawer .ant-drawer-body::-webkit-scrollbar { - width: 5px; -} - -.watermark-panel-drawer .ant-drawer-body::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -/* ── Tab 切换 ── */ - -.wp-tabs { - display: flex; - gap: 0; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - overflow: hidden; - margin-bottom: 16px; -} - -.wp-tab { - flex: 1; - padding: 8px 6px; - font-size: 11px; - font-weight: 500; - background: var(--bg-primary, #ffffff); - border: none; - border-right: 1px solid var(--border-color, #e2e8f0); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; - display: flex; - flex-direction: column; - align-items: center; - gap: 2px; -} - -.wp-tab:last-child { - border-right: none; -} - -.wp-tab:hover { - background: var(--primary-soft, #f8faff); - color: var(--primary, #6366f1); -} - -.wp-tab.active { - background: var(--primary, #6366f1); - color: var(--text-inverse, #ffffff); -} - -.wp-tab-icon { - font-size: 16px; - line-height: 1; -} - -.wp-tab-label { - font-size: 10px; -} - -/* ── 空状态 ── */ - -.wp-empty-hint { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 40px 20px; - text-align: center; - color: var(--text-tertiary, #94a3b8); -} - -.wp-empty-icon { - font-size: 40px; - margin-bottom: 12px; - opacity: 0.5; -} - -.wp-empty-hint p { - margin: 0; - font-size: 13px; - color: var(--text-secondary, #64748b); -} - -.wp-empty-desc { - font-size: 12px !important; - color: var(--text-tertiary, #94a3b8) !important; - margin-top: 4px !important; -} - -/* ── 配置区块 ── */ - -.wp-section { - display: flex; - flex-direction: column; - gap: 14px; -} - -.wp-common-section { - margin-top: 8px; -} - -.wp-section-divider { - height: 1px; - background: var(--border-light, #f1f5f9); - margin-bottom: 8px; -} - -.wp-common-title { - font-size: 12px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 4px; -} - -/* ── 字段 ── */ - -.wp-field { - display: flex; - flex-direction: column; - gap: 6px; -} - -.wp-field-label { - font-size: 12px; - font-weight: 500; - color: var(--text-secondary, #64748b); -} - -.wp-input { - width: 100%; - height: 32px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 10px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - transition: all 0.2s ease; -} - -.wp-input:focus { - border-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.wp-input::placeholder { - color: var(--text-tertiary, #94a3b8); -} - -.wp-textarea { - width: 100%; - padding: 8px 10px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - color: var(--text-primary, #1e293b); - font-size: 12px; - line-height: 1.5; - resize: vertical; - outline: none; - transition: border-color 0.2s; - font-family: inherit; -} - -.wp-textarea:focus { - border-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.wp-textarea::placeholder { - color: var(--text-tertiary, #94a3b8); -} - -.wp-select { - width: 100%; - height: 32px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 10px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - cursor: pointer; - transition: all 0.2s ease; - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 10px center; - padding-right: 28px; -} - -.wp-select:focus { - border-color: var(--primary, #6366f1); -} - -/* ── 滑块 ── */ - -.wp-slider-row { - display: flex; - align-items: center; - gap: 10px; -} - -.wp-slider { - flex: 1; - -webkit-appearance: none; - height: 4px; - background: var(--border-color, #e2e8f0); - border-radius: 2px; - outline: none; -} - -.wp-slider::-webkit-slider-thumb { - -webkit-appearance: none; - width: 14px; - height: 14px; - background: var(--primary, #6366f1); - border-radius: 50%; - cursor: pointer; - box-shadow: 0 2px 4px rgba(99, 102, 241, 0.3); - border: 2px solid var(--text-inverse, #ffffff); -} - -.wp-slider-value { - font-size: 12px; - color: var(--text-secondary, #64748b); - min-width: 40px; - text-align: right; - font-weight: 500; -} - -/* ── 颜色选择 ── */ - -.wp-color-row { - display: flex; - align-items: center; - gap: 10px; -} - -.wp-color-input { - width: 32px; - height: 32px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 2px; - cursor: pointer; - background: var(--bg-primary, #ffffff); -} - -.wp-color-value { - font-size: 12px; - color: var(--text-secondary, #64748b); - font-family: "SF Mono", "Fira Code", monospace; -} - -/* ── 图片预览 ── */ - -.wp-image-preview { - width: 100%; - height: 80px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-light, #f1f5f9); - border-radius: var(--radius-xs, 8px); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - margin-top: 4px; -} - -.wp-image-preview img { - max-width: 100%; - max-height: 100%; - object-fit: contain; -} - -/* ── 底部操作 ── */ - -.wp-footer { - display: flex; - justify-content: center; - padding-top: 16px; - margin-top: 16px; - border-top: 1px solid var(--border-light, #f1f5f9); -} - -.wp-reset-btn { - padding: 6px 20px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-secondary, #64748b); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; -} - -.wp-reset-btn:hover { - background: var(--bg-primary, #e2e8f0); - color: var(--text-primary, #1e293b); -} - -/* ═══════════════════════════════════════ - 片头片尾配置面板 Drawer - ═══════════════════════════════════════ */ - -.intro-outro-panel-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - gap: 16px; - overflow-y: auto; -} - -.intro-outro-panel-drawer .ant-drawer-body::-webkit-scrollbar { - width: 5px; -} - -.intro-outro-panel-drawer .ant-drawer-body::-webkit-scrollbar-thumb { - background: var(--border-color, #e2e8f0); - border-radius: 3px; -} - -/* ── 区块 ── */ - -.iop-block { - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-light, #f1f5f9); - border-radius: var(--radius-md, 12px); - padding: 16px; -} - -.iop-block-header { - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 12px; -} - -.iop-block-icon { - font-size: 18px; -} - -.iop-block-title { - font-size: 13px; - font-weight: 600; - color: var(--text-primary, #1e293b); -} - -/* ── 类型选择 ── */ - -.iop-kind-row { - display: flex; - gap: 8px; - margin-bottom: 12px; -} - -.iop-kind-btn { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - padding: 10px 8px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #ffffff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; - font-size: 12px; -} - -.iop-kind-btn:hover { - border-color: var(--primary-light, #a5b4fc); - color: var(--primary, #6366f1); - background: var(--primary-soft, #f8faff); -} - -.iop-kind-btn.active { - border-color: var(--primary, #6366f1); - color: var(--primary, #6366f1); - background: var(--primary-soft, #eef2ff); - font-weight: 600; -} - -.iop-kind-icon { - font-size: 18px; - line-height: 1; -} - -.iop-kind-label { - font-size: 11px; -} - -/* ── 字段 ── */ - -.iop-field { - display: flex; - flex-direction: column; - gap: 6px; - margin-bottom: 12px; -} - -.iop-field-label { - font-size: 12px; - font-weight: 500; - color: var(--text-secondary, #64748b); -} - -.iop-input { - width: 100%; - height: 32px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 10px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - transition: all 0.2s ease; -} - -.iop-input:focus { - border-color: var(--primary, #6366f1); - background: var(--bg-primary, #ffffff); - box-shadow: 0 0 0 3px var(--primary-soft, #eef2ff); -} - -.iop-input::placeholder { - color: var(--text-tertiary, #94a3b8); -} - -.iop-select { - width: 100%; - height: 32px; - background: var(--bg-primary, #ffffff); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - padding: 0 10px; - color: var(--text-primary, #1e293b); - font-size: 12px; - outline: none; - cursor: pointer; - transition: all 0.2s ease; - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 10px center; - padding-right: 28px; -} - -.iop-select:focus { - border-color: var(--primary, #6366f1); -} - -/* ── 滑块 ── */ - -.iop-slider-row { - display: flex; - align-items: center; - gap: 10px; -} - -.iop-slider { - flex: 1; - -webkit-appearance: none; - height: 4px; - background: var(--border-color, #e2e8f0); - border-radius: 2px; - outline: none; -} - -.iop-slider::-webkit-slider-thumb { - -webkit-appearance: none; - width: 14px; - height: 14px; - background: var(--primary, #6366f1); - border-radius: 50%; - cursor: pointer; - box-shadow: 0 2px 4px rgba(99, 102, 241, 0.3); - border: 2px solid var(--text-inverse, #ffffff); -} - -.iop-slider-value { - font-size: 12px; - color: var(--text-secondary, #64748b); - min-width: 36px; - text-align: right; - font-weight: 500; -} - -/* ── 底部操作 ── */ - -.iop-footer { - display: flex; - justify-content: center; - padding-top: 12px; - border-top: 1px solid var(--border-light, #f1f5f9); -} - -.iop-reset-btn { - padding: 6px 20px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-secondary, #64748b); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; -} - -.iop-reset-btn:hover { - background: var(--bg-primary, #e2e8f0); - color: var(--text-primary, #1e293b); -} - -/* ═══════════════════════════════════════════════ - 混剪配置面板 (PiP Configuration Panel) - ═══════════════════════════════════════════════ */ - -.pip-config-panel-drawer .ant-drawer-body { - padding: 16px; - display: flex; - flex-direction: column; - height: 100%; -} - -/* 顶部工具栏 */ -.pip-toolbar { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 16px; -} - -.pip-toolbar-left { - display: flex; - align-items: center; - gap: 8px; -} - -.pip-add-btn { - padding: 6px 14px; - font-size: 13px; - border: 1px dashed var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 6px); - background: var(--bg-secondary, #fafafa); - color: var(--text-secondary, #666); - cursor: pointer; - transition: all 0.2s; -} - -.pip-add-btn:hover { - border-color: var(--color-primary, #1677ff); - color: var(--color-primary, #1677ff); -} - -.pip-enable-switch { - display: flex; - align-items: center; - gap: 6px; - font-size: 13px; - color: var(--text-secondary, #666); -} - -/* 主体布局 */ -.pip-body { - display: flex; - gap: 16px; - flex: 1; - min-height: 0; -} - -/* 图层列表 */ -.pip-layer-list { - width: 180px; - flex-shrink: 0; - border: 1px solid var(--border-color-light, #f0f0f0); - border-radius: var(--radius-sm, 8px); - background: var(--bg-secondary, #fafafa); - overflow-y: auto; -} - -.pip-layer-item { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 10px; - cursor: pointer; - border-bottom: 1px solid var(--border-color-light, #f0f0f0); - transition: background 0.15s; -} - -.pip-layer-item:last-child { - border-bottom: none; -} - -.pip-layer-item:hover { - background: var(--color-primary-bg, #f0f5ff); -} - -.pip-layer-item.active { - background: var(--color-primary-bg, #e6f4ff); - border-left: 3px solid var(--color-primary, #1677ff); -} - -.pip-layer-thumb { - width: 40px; - height: 40px; - border-radius: var(--radius-xs, 4px); - background: var(--bg-tertiary, #e8e8e8); - object-fit: cover; - flex-shrink: 0; -} - -.pip-layer-name { - font-size: 13px; - color: var(--text-primary, #333); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - flex: 1; -} - -.pip-layer-delete { - opacity: 0; - font-size: 14px; - color: var(--text-tertiary, #999); - cursor: pointer; - transition: opacity 0.15s; - background: none; - border: none; - padding: 2px; -} - -.pip-layer-item:hover .pip-layer-delete { - opacity: 1; -} - -.pip-layer-delete:hover { - color: var(--color-danger, #ff4d4f); -} - -.pip-layer-empty { - padding: 24px 16px; - text-align: center; - color: var(--text-tertiary, #999); - font-size: 13px; -} - -/* 配置区 */ -.pip-config-area { - flex: 1; - min-width: 0; - overflow-y: auto; -} - -.pip-config-empty { - display: flex; - align-items: center; - justify-content: center; - height: 100%; - color: var(--text-tertiary, #999); - font-size: 14px; -} - -/* 迷你预览 */ -.pip-preview-box { - position: relative; - width: 100%; - aspect-ratio: 16 / 9; - background: #1a1a2e; - border-radius: var(--radius-sm, 8px); - overflow: hidden; - margin-bottom: 16px; -} - -.pip-preview-layer { - position: absolute; - border: 1px solid rgba(255, 255, 255, 0.3); - border-radius: 2px; - transition: all 0.2s; -} - -.pip-preview-layer.selected { - border: 2px solid var(--color-primary, #1677ff); - box-shadow: 0 0 8px rgba(22, 119, 255, 0.4); -} - -.pip-preview-label { - position: absolute; - bottom: 2px; - left: 2px; - font-size: 10px; - color: #fff; - background: rgba(0, 0, 0, 0.5); - padding: 1px 4px; - border-radius: 2px; -} - -/* 配置表单 */ -.pip-field { - margin-bottom: 14px; -} - -.pip-field-label { - display: block; - font-size: 13px; - color: var(--text-secondary, #666); - margin-bottom: 6px; -} - -.pip-field-row { - display: flex; - gap: 12px; -} - -.pip-field-row > * { - flex: 1; -} - -/* 九宫格 */ -.pip-grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 4px; - width: 120px; -} - -.pip-grid-btn { - width: 36px; - height: 36px; - border: 1px solid var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 4px); - background: var(--bg-secondary, #fafafa); - cursor: pointer; - transition: all 0.15s; - display: flex; - align-items: center; - justify-content: center; -} - -.pip-grid-btn:hover { - border-color: var(--color-primary, #1677ff); - background: var(--color-primary-bg, #f0f5ff); -} - -.pip-grid-btn.active { - background: var(--color-primary, #1677ff); - border-color: var(--color-primary, #1677ff); - color: #fff; -} - -.pip-grid-dot { - width: 6px; - height: 6px; - border-radius: 50%; - background: currentColor; -} - -/* 滑块行 */ -.pip-slider-row { - display: flex; - align-items: center; - gap: 10px; -} - -.pip-slider { - flex: 1; -} - -.pip-slider-value { - font-size: 13px; - color: var(--text-primary, #333); - min-width: 40px; - text-align: right; -} - -/* 输入框 */ -.pip-input { - width: 100%; - padding: 6px 10px; - border: 1px solid var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 6px); - font-size: 13px; - outline: none; - transition: border-color 0.2s; - background: var(--bg-primary, #fff); - color: var(--text-primary, #333); -} - -.pip-input:focus { - border-color: var(--color-primary, #1677ff); -} - -/* 选择器 */ -.pip-select { - width: 100%; - padding: 6px 10px; - border: 1px solid var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 6px); - font-size: 13px; - background: var(--bg-primary, #fff); - color: var(--text-primary, #333); - outline: none; -} - -/* 数字输入 */ -.pip-number { - width: 100%; - padding: 6px 10px; - border: 1px solid var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 6px); - font-size: 13px; - outline: none; - background: var(--bg-primary, #fff); - color: var(--text-primary, #333); -} - -.pip-number:focus { - border-color: var(--color-primary, #1677ff); -} - -/* 比例锁 */ -.pip-lock-row { - display: flex; - align-items: center; - gap: 6px; - font-size: 13px; - color: var(--text-secondary, #666); - cursor: pointer; - user-select: none; -} - -.pip-lock-icon { - font-size: 16px; -} - -/* 素材类型按钮组 */ -.pip-type-btns { - display: flex; - gap: 8px; -} - -.pip-type-btn { - flex: 1; - padding: 8px 12px; - border: 1px solid var(--border-color, #d9d9d9); - border-radius: var(--radius-xs, 6px); - background: var(--bg-secondary, #fafafa); - color: var(--text-secondary, #666); - font-size: 13px; - cursor: pointer; - transition: all 0.2s; - text-align: center; -} - -.pip-type-btn:hover { - border-color: var(--color-primary, #1677ff); - color: var(--color-primary, #1677ff); -} - -.pip-type-btn.active { - background: var(--color-primary, #1677ff); - border-color: var(--color-primary, #1677ff); - color: #fff; -} - -/* 底部 */ -.pip-footer { - margin-top: 16px; - padding-top: 12px; - border-top: 1px solid var(--border-color-light, #f0f0f0); - display: flex; - justify-content: flex-end; -} - -.pip-reset-btn { - padding: 6px 20px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - color: var(--text-secondary, #64748b); - font-size: 12px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; -} - -.pip-reset-btn:hover { - background: var(--bg-primary, #e2e8f0); - color: var(--text-primary, #1e293b); -} - -/* ═══════════════════════════════════════════════════════ - 滤镜调色面板 (Filter Panel) - ═══════════════════════════════════════════════════════ */ - -.filter-panel-drawer .ant-drawer-body { - padding: 16px; -} - -/* 顶部开关 */ -.filter-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 14px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-sm, 10px); - margin-bottom: 20px; -} - -.filter-header-label { - font-size: 14px; - font-weight: 500; - color: var(--text-primary, #1e293b); -} - -/* 分区 */ -.filter-section { - margin-bottom: 20px; -} - -.filter-section-title { - font-size: 13px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 10px; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -/* 预设滤镜网格 */ -.filter-presets { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 8px; -} - -.filter-preset-item { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - padding: 6px 4px; - border: 2px solid transparent; - border-radius: var(--radius-xs, 8px); - background: none; - cursor: pointer; - transition: all 0.2s ease; -} - -.filter-preset-item:hover { - background: var(--bg-secondary, #f8fafc); - border-color: var(--border-color, #e2e8f0); -} - -.filter-preset-item.active { - border-color: var(--primary-color, #3b82f6); - background: var(--primary-light, #eff6ff); -} - -.filter-preset-preview { - width: 100%; - aspect-ratio: 1; - border-radius: 6px; - background: #e8e8e8; -} - -.filter-preset-label { - font-size: 11px; - color: var(--text-secondary, #64748b); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - text-align: center; -} - -.filter-preset-item.active .filter-preset-label { - color: var(--primary-color, #3b82f6); - font-weight: 500; -} - -/* 滑块行 */ -.filter-slider-row { - display: flex; - align-items: center; - gap: 10px; - margin-bottom: 12px; -} - -.filter-slider-label { - font-size: 13px; - color: var(--text-secondary, #64748b); - min-width: 48px; - flex-shrink: 0; -} - -.filter-slider { - flex: 1; - height: 4px; - border-radius: 2px; - background: var(--border-color, #e2e8f0); - outline: none; - appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -.filter-slider::-webkit-slider-thumb { - appearance: none; - -webkit-appearance: none; - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.filter-slider::-moz-range-thumb { - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.filter-slider-value { - font-size: 13px; - color: var(--text-primary, #1e293b); - min-width: 36px; - text-align: right; - font-variant-numeric: tabular-nums; -} - -/* 预览色块 */ -.filter-preview-block { - width: 100%; - height: 80px; - border-radius: var(--radius-sm, 10px); - border: 1px solid var(--border-color, #e2e8f0); -} - -/* 底部重置 */ -.filter-footer { - margin-top: 20px; - padding-top: 14px; - border-top: 1px solid var(--border-color, #e2e8f0); - display: flex; - justify-content: flex-end; -} - -.filter-reset-btn { - padding: 6px 16px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.filter-reset-btn:hover { - border-color: #ef4444; - color: #ef4444; - background: #fef2f2; -} - -/* ═══════════════════════════════════════════════════════ - 绿幕抠像面板 (Green Screen Panel) - ═══════════════════════════════════════════════════════ */ - -.green-screen-panel-drawer .ant-drawer-body { - padding: 16px; -} - -/* 顶部开关 */ -.green-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 14px; - background: var(--bg-secondary, #f8fafc); - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-sm, 10px); - margin-bottom: 20px; -} - -.green-header-label { - font-size: 14px; - font-weight: 500; - color: var(--text-primary, #1e293b); -} - -/* 分区 */ -.green-section { - margin-bottom: 20px; -} - -.green-section-title { - font-size: 13px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 10px; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -/* 颜色预设 */ -.green-presets { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - -.green-preset-btn { - display: flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - border: 2px solid transparent; - border-radius: var(--radius-xs, 8px); - background: var(--bg-secondary, #f8fafc); - cursor: pointer; - transition: all 0.2s ease; -} - -.green-preset-btn:hover { - border-color: var(--border-color, #e2e8f0); - background: var(--bg-primary, #fff); -} - -.green-preset-btn.active { - border-color: var(--primary-color, #3b82f6); - background: var(--primary-light, #eff6ff); -} - -.green-preset-dot { - width: 14px; - height: 14px; - border-radius: 50%; - border: 1px solid rgba(0, 0, 0, 0.1); - flex-shrink: 0; -} - -.green-preset-label { - font-size: 12px; - color: var(--text-secondary, #64748b); - white-space: nowrap; -} - -.green-preset-btn.active .green-preset-label { - color: var(--primary-color, #3b82f6); - font-weight: 500; -} - -/* 自定义颜色行 */ -.green-color-row { - display: flex; - align-items: center; - gap: 10px; -} - -.green-color-picker { - width: 36px; - height: 36px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - cursor: pointer; - padding: 2px; - background: none; -} - -.green-color-picker::-webkit-color-swatch-wrapper { - padding: 0; -} - -.green-color-picker::-webkit-color-swatch { - border: none; - border-radius: 4px; -} - -.green-color-hex { - flex: 1; - padding: 8px 10px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - font-size: 13px; - font-family: monospace; - color: var(--text-primary, #1e293b); - outline: none; - transition: border-color 0.2s; -} - -.green-color-hex:focus { - border-color: var(--primary-color, #3b82f6); -} - -.green-color-swatch { - width: 36px; - height: 36px; - border-radius: 6px; - border: 1px solid var(--border-color, #e2e8f0); - flex-shrink: 0; -} - -/* 滑块行 */ -.green-slider-row { - margin-bottom: 14px; -} - -.green-slider-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 6px; -} - -.green-slider-label { - font-size: 13px; - color: var(--text-secondary, #64748b); -} - -.green-slider-value { - font-size: 13px; - color: var(--text-primary, #1e293b); - font-variant-numeric: tabular-nums; -} - -.green-slider { - width: 100%; - height: 4px; - border-radius: 2px; - background: var(--border-color, #e2e8f0); - outline: none; - appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -.green-slider::-webkit-slider-thumb { - appearance: none; - -webkit-appearance: none; - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.green-slider::-moz-range-thumb { - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.green-slider-desc { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - margin-top: 4px; -} - -/* 预览区 */ -.green-preview-box { - position: relative; - width: 100%; - height: 100px; - border-radius: var(--radius-sm, 10px); - border: 1px solid var(--border-color, #e2e8f0); - overflow: hidden; - background: #f0fdf4; -} - -.green-preview-bg { - position: absolute; - inset: 0; -} - -.green-preview-subject { - position: absolute; - inset: 0; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 1; -} - -.green-preview-circle { - width: 36px; - height: 36px; - border-radius: 50%; - background: rgba(255, 255, 255, 0.9); - border: 2px solid rgba(0, 0, 0, 0.1); - margin-bottom: 6px; -} - -.green-preview-text { - font-size: 12px; - color: var(--text-secondary, #64748b); - font-weight: 500; -} - -.green-preview-edge { - position: absolute; - inset: 8px; - border: 3px solid transparent; - border-radius: var(--radius-xs, 8px); - pointer-events: none; -} - -/* 底部重置 */ -.green-footer { - margin-top: 20px; - padding-top: 14px; - border-top: 1px solid var(--border-color, #e2e8f0); - display: flex; - justify-content: flex-end; -} - -.green-reset-btn { - padding: 6px 16px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.green-reset-btn:hover { - border-color: #ef4444; - color: #ef4444; - background: #fef2f2; -} - -/* ═══════════════════════════════════════════════════════════════ - 贴纸配置面板 (StickerPanel) - ═══════════════════════════════════════════════════════════════ */ - -.sticker-panel-drawer .ant-drawer-body { - padding: 16px; -} - -/* 顶部开关 */ -.sticker-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 16px; - padding: 10px 12px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-color, #e2e8f0); -} - -.sticker-header-label { - font-size: 14px; - font-weight: 500; - color: var(--text-primary, #1e293b); -} - -/* 类型 Tab */ -.sticker-tabs { - display: flex; - gap: 4px; - margin-bottom: 16px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - padding: 4px; - border: 1px solid var(--border-color, #e2e8f0); -} - -.sticker-tab { - flex: 1; - padding: 8px 12px; - font-size: 13px; - font-weight: 500; - border: none; - border-radius: 6px; - background: transparent; - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sticker-tab:hover { - color: var(--text-primary, #1e293b); - background: rgba(255, 255, 255, 0.6); -} - -.sticker-tab.active { - background: var(--primary-color, #3b82f6); - color: #fff; - box-shadow: 0 1px 3px rgba(59, 130, 246, 0.3); -} - -/* Tab 内容区 */ -.sticker-tab-content { - margin-bottom: 16px; -} - -/* Emoji 网格 */ -.sticker-emoji-grid { - display: grid; - grid-template-columns: repeat(6, 1fr); - gap: 6px; -} - -.sticker-emoji-btn { - aspect-ratio: 1; - display: flex; - align-items: center; - justify-content: center; - font-size: 22px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 8px; - background: var(--bg-primary, #fff); - cursor: pointer; - transition: all 0.15s ease; -} - -.sticker-emoji-btn:hover { - transform: scale(1.15); - border-color: var(--primary-color, #3b82f6); - box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2); -} - -/* 图片贴纸 URL 输入 */ -.sticker-image-input { - display: flex; - gap: 8px; -} - -.sticker-url-input { - flex: 1; - padding: 8px 12px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - outline: none; - transition: border-color 0.2s; -} - -.sticker-url-input:focus { - border-color: var(--primary-color, #3b82f6); -} - -.sticker-url-add-btn { - padding: 8px 16px; - font-size: 13px; - font-weight: 500; - border: none; - border-radius: var(--radius-xs, 8px); - background: var(--primary-color, #3b82f6); - color: #fff; - cursor: pointer; - transition: background 0.2s; - white-space: nowrap; -} - -.sticker-url-add-btn:hover { - background: #2563eb; -} - -/* 文字花字 */ -.sticker-text-section { - display: flex; - flex-direction: column; - gap: 14px; -} - -.sticker-text-input-row { - display: flex; - gap: 8px; -} - -.sticker-text-input { - flex: 1; - padding: 8px 12px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - outline: none; - transition: border-color 0.2s; -} - -.sticker-text-input:focus { - border-color: var(--primary-color, #3b82f6); -} - -.sticker-text-add-btn { - padding: 8px 16px; - font-size: 13px; - font-weight: 500; - border: none; - border-radius: var(--radius-xs, 8px); - background: var(--primary-color, #3b82f6); - color: #fff; - cursor: pointer; - transition: background 0.2s; - white-space: nowrap; -} - -.sticker-text-add-btn:hover:not(:disabled) { - background: #2563eb; -} - -.sticker-text-add-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* 花字预设 */ -.sticker-preset-title { - font-size: 13px; - font-weight: 500; - color: var(--text-secondary, #64748b); - margin-bottom: 8px; -} - -.sticker-preset-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 8px; -} - -.sticker-preset-preview { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 10px 6px; - border-radius: 8px; - border: 1px solid var(--border-color, #e2e8f0); - cursor: pointer; - transition: all 0.15s ease; - min-height: 56px; -} - -.sticker-preset-preview:hover { - transform: scale(1.05); - border-color: var(--primary-color, #3b82f6); -} - -.sticker-preset-preview span { - font-size: 14px; - font-weight: 600; -} - -.sticker-preset-name { - font-size: 10px; - color: var(--text-tertiary, #94a3b8); - margin-top: 4px; - text-align: center; -} - -/* 已添加贴纸列表 */ -.sticker-list-section { - margin-bottom: 16px; -} - -.sticker-section-title { - font-size: 13px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 10px; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.sticker-list { - display: flex; - flex-direction: column; - gap: 4px; - max-height: 180px; - overflow-y: auto; -} - -.sticker-list-item { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 10px; - border-radius: 6px; - border: 1px solid var(--border-color, #e2e8f0); - background: var(--bg-primary, #fff); - cursor: pointer; - transition: all 0.15s ease; -} - -.sticker-list-item:hover { - border-color: var(--primary-color, #3b82f6); - background: var(--bg-hover, #f1f5f9); -} - -.sticker-list-item.active { - border-color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.08); -} - -.sticker-list-icon { - font-size: 16px; - width: 24px; - text-align: center; - flex-shrink: 0; -} - -.sticker-list-name { - flex: 1; - font-size: 13px; - color: var(--text-primary, #1e293b); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.sticker-list-delete { - opacity: 0; - font-size: 14px; - color: var(--text-tertiary, #94a3b8); - cursor: pointer; - transition: all 0.15s; - background: none; - border: none; - padding: 2px 4px; -} - -.sticker-list-item:hover .sticker-list-delete { - opacity: 1; -} - -.sticker-list-delete:hover { - color: #ef4444; -} - -/* 属性编辑 */ -.sticker-props-section { - margin-bottom: 16px; - padding: 12px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-color, #e2e8f0); -} - -.sticker-prop-row { - display: flex; - align-items: center; - gap: 10px; - margin-bottom: 10px; -} - -.sticker-prop-label { - font-size: 12px; - color: var(--text-secondary, #64748b); - min-width: 36px; - flex-shrink: 0; -} - -.sticker-prop-slider { - flex: 1; - height: 4px; - border-radius: 2px; - background: var(--border-color, #e2e8f0); - outline: none; - appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -.sticker-prop-slider::-webkit-slider-thumb { - appearance: none; - -webkit-appearance: none; - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.sticker-prop-slider::-moz-range-thumb { - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.sticker-prop-value { - font-size: 12px; - color: var(--text-primary, #1e293b); - min-width: 40px; - text-align: right; - font-variant-numeric: tabular-nums; -} - -.sticker-prop-number { - width: 70px; - padding: 4px 8px; - font-size: 12px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - background: var(--bg-primary, #fff); - outline: none; - text-align: center; -} - -.sticker-prop-number:focus { - border-color: var(--primary-color, #3b82f6); -} - -.sticker-prop-select { - flex: 1; - padding: 4px 8px; - font-size: 12px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - background: var(--bg-primary, #fff); - outline: none; -} - -.sticker-prop-color { - width: 32px; - height: 32px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - padding: 2px; - cursor: pointer; - background: var(--bg-primary, #fff); -} - -/* 预览框 */ -.sticker-preview-box { - position: relative; - width: 100%; - height: 120px; - border-radius: var(--radius-sm, 10px); - border: 1px solid var(--border-color, #e2e8f0); - background: #1a1a2e; - overflow: hidden; - margin-top: 12px; -} - -.sticker-preview-item { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - font-size: 24px; - color: #fff; - pointer-events: none; -} - -/* 底部 */ -.sticker-footer { - margin-top: 16px; - padding-top: 14px; - border-top: 1px solid var(--border-color, #e2e8f0); - display: flex; - justify-content: flex-end; -} - -.sticker-reset-btn { - padding: 6px 16px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.sticker-reset-btn:hover { - border-color: #ef4444; - color: #ef4444; - background: #fef2f2; -} - -/* ═══════════════════════════════════════════════════════════════ - 封面选择器 (CoverSelector) - ═══════════════════════════════════════════════════════════════ */ - -.cover-selector-drawer .ant-drawer-body { - padding: 16px; -} - -/* 顶部开关 */ -.cover-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 16px; - padding: 10px 12px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-color, #e2e8f0); -} - -.cover-header-label { - font-size: 14px; - font-weight: 500; - color: var(--text-primary, #1e293b); -} - -/* 原生 checkbox 开关 */ -.cover-switch { - position: relative; - display: inline-block; - width: 40px; - height: 22px; -} - -.cover-switch input { - opacity: 0; - width: 0; - height: 0; -} - -.cover-switch-slider { - position: absolute; - cursor: pointer; - inset: 0; - background: var(--border-color, #e2e8f0); - border-radius: 22px; - transition: 0.3s; -} - -.cover-switch-slider::before { - content: ""; - position: absolute; - height: 16px; - width: 16px; - left: 3px; - bottom: 3px; - background: #fff; - border-radius: 50%; - transition: 0.3s; -} - -.cover-switch input:checked + .cover-switch-slider { - background: var(--primary-color, #3b82f6); -} - -.cover-switch input:checked + .cover-switch-slider::before { - transform: translateX(18px); -} - -/* 模式选择 */ -.cover-mode-section { - margin-bottom: 16px; -} - -.cover-section-title { - font-size: 13px; - font-weight: 600; - color: var(--text-secondary, #64748b); - margin-bottom: 10px; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.cover-mode-tabs { - display: flex; - gap: 6px; -} - -.cover-mode-tab { - flex: 1; - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - padding: 10px 8px; - font-size: 12px; - font-weight: 500; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 8px; - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.cover-mode-tab:hover { - border-color: var(--primary-color, #3b82f6); - color: var(--primary-color, #3b82f6); -} - -.cover-mode-tab.active { - border-color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.08); - color: var(--primary-color, #3b82f6); -} - -.cover-mode-icon { - font-size: 20px; -} - -.cover-mode-label { - font-size: 11px; -} - -/* 模式内容区 */ -.cover-mode-content { - margin-bottom: 16px; -} - -/* 智能封面 */ -.cover-auto-section { - padding: 12px; - background: var(--bg-secondary, #f8fafc); - border-radius: var(--radius-xs, 8px); - border: 1px solid var(--border-color, #e2e8f0); -} - -.cover-auto-desc { - font-size: 13px; - color: var(--text-secondary, #64748b); - line-height: 1.5; - margin-bottom: 12px; -} - -.cover-auto-suggestion { - padding: 10px; - background: rgba(59, 130, 246, 0.06); - border-radius: 6px; - border: 1px solid rgba(59, 130, 246, 0.2); -} - -.cover-auto-badge { - display: inline-block; - padding: 2px 8px; - font-size: 11px; - font-weight: 600; - color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.1); - border-radius: 4px; - margin-bottom: 6px; -} - -.cover-auto-time { - font-size: 13px; - color: var(--text-primary, #1e293b); - margin-bottom: 8px; -} - -.cover-auto-use-btn { - padding: 5px 12px; - font-size: 12px; - font-weight: 500; - border: 1px solid var(--primary-color, #3b82f6); - border-radius: 6px; - background: var(--bg-primary, #fff); - color: var(--primary-color, #3b82f6); - cursor: pointer; - transition: all 0.2s; -} - -.cover-auto-use-btn:hover { - background: var(--primary-color, #3b82f6); - color: #fff; -} - -.cover-auto-pending { - display: flex; - align-items: center; - gap: 10px; - font-size: 13px; - color: var(--text-tertiary, #94a3b8); -} - -.cover-auto-spinner { - width: 16px; - height: 16px; - border: 2px solid var(--border-color, #e2e8f0); - border-top-color: var(--primary-color, #3b82f6); - border-radius: 50%; - animation: cover-spin 0.8s linear infinite; -} - -@keyframes cover-spin { - to { - transform: rotate(360deg); - } -} - -/* 抽帧选封面 */ -.cover-frame-section { - display: flex; - flex-direction: column; - gap: 14px; -} - -.cover-frame-preview { - width: 100%; - aspect-ratio: 16/9; - border-radius: var(--radius-sm, 10px); - border: 1px solid var(--border-color, #e2e8f0); - overflow: hidden; - background: #1a1a2e; -} - -.cover-frame-placeholder { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 8px; -} - -.cover-frame-icon { - font-size: 32px; -} - -.cover-frame-time { - font-size: 14px; - color: rgba(255, 255, 255, 0.8); - font-variant-numeric: tabular-nums; -} - -.cover-frame-timeline { - display: flex; - flex-direction: column; - gap: 6px; -} - -.cover-frame-slider-header { - display: flex; - align-items: center; - justify-content: space-between; -} - -.cover-frame-slider-label { - font-size: 12px; - color: var(--text-secondary, #64748b); -} - -.cover-frame-slider-value { - font-size: 12px; - color: var(--text-primary, #1e293b); - font-variant-numeric: tabular-nums; -} - -.cover-frame-slider { - width: 100%; - height: 4px; - border-radius: 2px; - background: var(--border-color, #e2e8f0); - outline: none; - appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -.cover-frame-slider::-webkit-slider-thumb { - appearance: none; - -webkit-appearance: none; - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.cover-frame-slider::-moz-range-thumb { - width: 14px; - height: 14px; - border-radius: 50%; - background: var(--primary-color, #3b82f6); - cursor: pointer; - border: 2px solid #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.cover-frame-range { - display: flex; - justify-content: space-between; - font-size: 11px; - color: var(--text-tertiary, #94a3b8); - font-variant-numeric: tabular-nums; -} - -/* 快捷选帧 */ -.cover-frame-quick { - display: flex; - align-items: center; - gap: 6px; - flex-wrap: wrap; -} - -.cover-quick-label { - font-size: 12px; - color: var(--text-secondary, #64748b); -} - -.cover-quick-btn { - padding: 4px 10px; - font-size: 11px; - font-variant-numeric: tabular-nums; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: 6px; - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.15s; -} - -.cover-quick-btn:hover { - border-color: var(--primary-color, #3b82f6); - color: var(--primary-color, #3b82f6); -} - -/* 上传封面 */ -.cover-upload-section { - margin-bottom: 16px; -} - -.cover-upload-area { - width: 100%; - min-height: 140px; - border: 2px dashed var(--border-color, #e2e8f0); - border-radius: var(--radius-sm, 10px); - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: all 0.2s ease; - background: var(--bg-secondary, #f8fafc); -} - -.cover-upload-area:hover { - border-color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.04); -} - -.cover-upload-area.dragging { - border-color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.08); -} - -.cover-upload-preview { - position: relative; - width: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.cover-upload-preview img { - max-width: 100%; - max-height: 160px; - border-radius: 6px; - object-fit: contain; -} - -.cover-upload-overlay { - position: absolute; - inset: 0; - display: flex; - align-items: center; - justify-content: center; - background: rgba(0, 0, 0, 0.4); - color: #fff; - font-size: 13px; - font-weight: 500; - border-radius: 6px; - opacity: 0; - transition: opacity 0.2s; -} - -.cover-upload-area:hover .cover-upload-overlay { - opacity: 1; -} - -.cover-upload-placeholder { - display: flex; - flex-direction: column; - align-items: center; - gap: 6px; - padding: 20px; -} - -.cover-upload-icon { - font-size: 32px; -} - -.cover-upload-text { - font-size: 13px; - color: var(--text-secondary, #64748b); - font-weight: 500; -} - -.cover-upload-hint { - font-size: 11px; - color: var(--text-tertiary, #94a3b8); -} - -/* 封面预览 */ -.cover-preview-section { - margin-bottom: 16px; -} - -.cover-preview-box { - position: relative; - width: 100%; - aspect-ratio: 16/9; - border-radius: var(--radius-sm, 10px); - border: 1px solid var(--border-color, #e2e8f0); - overflow: hidden; - background: #1a1a2e; -} - -.cover-preview-img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.cover-preview-placeholder { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 8px; -} - -.cover-preview-icon { - font-size: 32px; -} - -.cover-preview-text { - font-size: 13px; - color: rgba(255, 255, 255, 0.7); -} - -.cover-preview-ratio { - position: absolute; - top: 8px; - right: 8px; - padding: 2px 8px; - font-size: 11px; - font-weight: 600; - color: #fff; - background: rgba(0, 0, 0, 0.5); - border-radius: 4px; -} - -/* 底部 */ -.cover-footer { - margin-top: 16px; - padding-top: 14px; - border-top: 1px solid var(--border-color, #e2e8f0); - display: flex; - justify-content: flex-end; -} - -.cover-reset-btn { - padding: 6px 16px; - font-size: 13px; - border: 1px solid var(--border-color, #e2e8f0); - border-radius: var(--radius-xs, 8px); - background: var(--bg-primary, #fff); - color: var(--text-secondary, #64748b); - cursor: pointer; - transition: all 0.2s ease; -} - -.cover-reset-btn:hover { - border-color: #ef4444; - color: #ef4444; - background: #fef2f2; -} - -/* ── 生成历史取消按钮 ── */ -.ep-gh-td-action { - width: 60px; - text-align: center; -} -.ep-gh-cancel-btn { - background: none; - border: none; - color: var(--color-error, #ff4d4f); - cursor: pointer; - font-size: 12px; - padding: 2px 8px; - border-radius: 4px; - transition: background 0.2s; -} -.ep-gh-cancel-btn:hover:not(:disabled) { - background: rgba(255, 77, 79, 0.1); -} -.ep-gh-cancel-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} -.ep-gh-action-placeholder { - color: var(--text-tertiary, #bfbfbf); -} - -/* ═══ 生成进度 - 片段状态列表 ═══ */ - -.ep-gen-clip-list { - margin-top: 16px; - max-height: 200px; - overflow-y: auto; - border: 1px solid var(--border-color, #e5e7eb); - border-radius: 8px; - padding: 4px 0; -} - -.ep-gen-clip-item { - display: flex; - align-items: center; - gap: 10px; - padding: 6px 12px; - font-size: 13px; -} - -.ep-gen-clip-item + .ep-gen-clip-item { - border-top: 1px solid var(--border-color-light, #f3f4f6); -} - -.ep-gen-clip-index { - width: 22px; - height: 22px; - display: flex; - align-items: center; - justify-content: center; - background: var(--bg-secondary, #f3f4f6); - border-radius: 4px; - font-size: 11px; - color: var(--text-secondary, #6b7280); - flex-shrink: 0; -} - -.ep-gen-clip-name { - flex: 1; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - color: var(--text-primary, #1f2937); -} - -.ep-gen-clip-status { - flex-shrink: 0; - font-size: 12px; - font-weight: 500; -} - -.ep-gen-clip-status.status-completed { - color: #10b981; -} - -.ep-gen-clip-status.status-failed { - color: #ef4444; -} - -.ep-gen-clip-status.status-processing { - color: #3b82f6; - animation: pulse 1.5s infinite; -} - -.ep-gen-clip-status.status-pending, -.ep-gen-clip-status.status-queued { - color: #9ca3af; -} - -@keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.5; - } -} - -/* ═══ 右侧栏 Tab ═══ */ -.ep-right-panel { - width: 260px; - height: 100%; - display: flex; - flex-direction: column; - border-left: 1px solid var(--border-color, #e5e7eb); - background: var(--bg-secondary, #f9fafb); -} - -.ep-right-tabs { - display: flex; - height: 40px; - border-bottom: 1px solid var(--border-color, #e5e7eb); - background: var(--bg-primary, #fff); -} - -.ep-right-tab { - flex: 1; - border: none; - background: transparent; - font-size: 13px; - color: var(--text-secondary, #6b7280); - cursor: pointer; - transition: all 0.2s; - border-bottom: 2px solid transparent; -} - -.ep-right-tab:hover { - color: var(--text-primary, #111827); -} - -.ep-right-tab.active { - color: var(--primary-color, #3b82f6); - border-bottom-color: var(--primary-color, #3b82f6); - font-weight: 500; -} - -.ep-right-tab-content { - flex: 1; - overflow-y: auto; - min-height: 0; -} - -/* ═══ 编辑器内片段列表 ═══ */ -.ep-clip-list { - height: 100%; - display: flex; - flex-direction: column; -} - -.ep-clip-list-toolbar { - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 12px; - border-bottom: 1px solid var(--border-color, #e5e7eb); - background: var(--bg-primary, #fff); -} - -.ep-clip-list-count { - font-size: 12px; - color: var(--text-secondary, #6b7280); -} - -.ep-clip-list-count b { - color: var(--text-primary, #111827); - font-weight: 600; -} - -.ep-clip-list-scroll { - flex: 1; - overflow-y: auto; - padding: 6px; -} - -.ep-clip-list-item { - background: var(--bg-primary, #fff); - border: 1px solid var(--border-color, #e5e7eb); - border-radius: 6px; - padding: 8px 10px; - margin-bottom: 6px; - cursor: pointer; - transition: all 0.15s; -} - -.ep-clip-list-item:hover { - border-color: var(--primary-color, #3b82f6); - box-shadow: 0 1px 3px rgba(59, 130, 246, 0.1); -} - -.ep-clip-list-item.selected { - border-color: var(--primary-color, #3b82f6); - background: rgba(59, 130, 246, 0.04); -} - -.ep-clip-item-head { - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 4px; -} - -.ep-clip-item-index { - width: 18px; - height: 18px; - line-height: 18px; - text-align: center; - font-size: 11px; - font-weight: 600; - background: var(--bg-tertiary, #f3f4f6); - color: var(--text-secondary, #6b7280); - border-radius: 3px; - flex-shrink: 0; -} - -.ep-clip-item-type { - font-size: 11px; - color: var(--text-secondary, #6b7280); - display: flex; - align-items: center; - gap: 3px; - flex-shrink: 0; -} - -.ep-clip-item-type-label { - font-size: 11px; -} - -.ep-clip-item-duration { - margin-left: auto; - font-size: 11px; - font-weight: 500; - color: var(--text-primary, #111827); - flex-shrink: 0; -} - -.ep-clip-item-text { - font-size: 12px; - color: var(--text-secondary, #6b7280); - line-height: 1.4; - margin-bottom: 6px; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; -} - -.ep-clip-item-actions { - display: flex; - gap: 2px; - justify-content: flex-end; - opacity: 0; - transition: opacity 0.15s; -} - -.ep-clip-list-item:hover .ep-clip-item-actions, -.ep-clip-list-item.selected .ep-clip-item-actions { - opacity: 1; -} - -.ep-clip-item-btn { - width: 24px !important; - height: 24px !important; - padding: 0 !important; - font-size: 11px !important; -} - -.ep-clip-list-empty { - padding: 16px; - text-align: center; -} - -/* ═══ 封面 AI 生成按钮 ═══ */ -.cover-generate-section { - padding: 0 16px 12px; -} - -.cover-generate-btn { - width: 100%; - padding: 10px 16px; - border: 1px solid var(--color-primary, #1677ff); - border-radius: 8px; - background: var(--color-primary, #1677ff); - color: #fff; - font-size: 14px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - display: flex; - align-items: center; - justify-content: center; - gap: 6px; -} - -.cover-generate-btn:hover:not(:disabled) { - background: var(--color-primary-hover, #4096ff); - border-color: var(--color-primary-hover, #4096ff); -} - -.cover-generate-btn:disabled { - opacity: 0.6; - cursor: not-allowed; -} - -/* ═══ 标题设置 — 颜色预设 ═══ */ -.ep-color-presets { - display: flex; - align-items: center; - gap: 6px; - flex-wrap: wrap; -} - -.ep-color-swatch { - width: 24px; - height: 24px; - border-radius: 4px; - border: 2px solid transparent; - cursor: pointer; - transition: - border-color 0.15s, - transform 0.1s; -} - -.ep-color-swatch:hover { - transform: scale(1.1); -} - -.ep-color-swatch.active { - border-color: var(--ep-primary, #4f8cff); -} - -.ep-color-picker { - width: 28px; - height: 28px; - border: none; - border-radius: 4px; - cursor: pointer; - padding: 0; - background: none; -} - -.ep-color-picker::-webkit-color-swatch-wrapper { - padding: 0; -} - -.ep-color-picker::-webkit-color-swatch { - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 4px; -}