diff --git a/core/frontend/src/components/free-create/asset-library-modal.tsx b/core/frontend/src/components/free-create/asset-library-modal.tsx
index c4f57f1..6a952c7 100644
--- a/core/frontend/src/components/free-create/asset-library-modal.tsx
+++ b/core/frontend/src/components/free-create/asset-library-modal.tsx
@@ -97,8 +97,6 @@ export function AssetLibraryModal({ open, onClose, onPick, notify }: {
return () => window.clearInterval(timer);
}, [open, activeGroup, assets]);
- if (!open) return null;
-
const createGroup = async () => {
const name = newName.trim();
if (!name || creatingGroup) return;
@@ -160,6 +158,9 @@ export function AssetLibraryModal({ open, onClose, onPick, notify }: {
}
};
+ // 所有 Hook 必须在关闭态也保持同一调用顺序;不能在此之前提前 return。
+ if (!open) return null;
+
const startRenameAsset = (item: FreeAssetItem) => {
setConfirmDeleteAssetId(null);
setConfirmDeleteGroupId(null);
diff --git a/core/frontend/src/components/loading.css b/core/frontend/src/components/loading.css
index 28f0c73..e1ca944 100644
--- a/core/frontend/src/components/loading.css
+++ b/core/frontend/src/components/loading.css
@@ -4,12 +4,13 @@
100% { background-position: 480px 0; }
}
.skeleton-block {
- background: var(--background-base, #f1f1f1);
- background-image: linear-gradient(90deg, rgba(0,0,0,0.03) 0%, rgba(0,0,0,0.07) 40%, rgba(0,0,0,0.03) 80%);
+ background: var(--black-alpha-4);
+ background-image: linear-gradient(90deg, transparent 0%, var(--black-alpha-8) 40%, transparent 80%);
background-size: 480px 100%;
background-repeat: no-repeat;
animation: sk-shimmer 1.2s ease-in-out infinite;
- border-radius: 8px;
+ box-shadow: inset 0 0 0 1px var(--border-faint);
+ border-radius: var(--r-md);
}
.skeleton-grid {
display: grid;
diff --git a/core/frontend/src/dark-mode-pages.css b/core/frontend/src/dark-mode-pages.css
new file mode 100644
index 0000000..bd14932
--- /dev/null
+++ b/core/frontend/src/dark-mode-pages.css
@@ -0,0 +1,2435 @@
+/* ============================================================
+ Dark · 各页局部 token / 常见硬编码浅色覆盖
+ 依赖 html[data-theme="dark"](theme.ts)
+ ============================================================ */
+
+html[data-theme="dark"] {
+ /* 通用页面局部色 */
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+}
+
+/* —— 商品库 —— */
+html[data-theme="dark"] .products-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --pl-black: #e8eaed;
+ --pl-muted: rgba(232, 234, 237, 0.56);
+ --pl-line: rgba(255, 255, 255, 0.10);
+ --pl-wash: rgba(255, 255, 255, 0.045);
+ --pl-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+}
+html[data-theme="dark"] .products-page .pl-thumb,
+html[data-theme="dark"] .products-page .pl-thumb.placeholder {
+ background: #2a2f38;
+}
+html[data-theme="dark"] .products-page .pl-card {
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .products-page .pl-card:hover {
+ background: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .products-page .pl-check {
+ background: var(--surface-raised);
+ border-color: var(--border-muted);
+ box-shadow: none;
+}
+
+/* —— 模特库 —— */
+html[data-theme="dark"] .models-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --ml-black: #e8eaed;
+ --ml-muted: rgba(232, 234, 237, 0.56);
+ --ml-line: rgba(255, 255, 255, 0.10);
+ --ml-wash: rgba(255, 255, 255, 0.045);
+ --ml-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+}
+html[data-theme="dark"] .models-page .ml-thumb {
+ /* 保留 .has-mock-media 写入的 background-image,仅替换无图时的底色。 */
+ background-color: var(--background-lighter);
+}
+html[data-theme="dark"] .models-page .ml-card {
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .models-page .ml-card:hover {
+ background: rgba(255, 255, 255, 0.07);
+}
+
+/* 筛选标签条:硬编码 #414750 / is-on 用 --ml-black 当底会变成浅底白字 */
+html[data-theme="dark"] .models-page .ml-tag-chip {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.05);
+ color: rgba(232, 234, 237, 0.88);
+}
+html[data-theme="dark"] .models-page .ml-tag-chip i {
+ color: rgba(232, 234, 237, 0.48);
+}
+html[data-theme="dark"] .models-page .ml-tag-chip:hover {
+ border-color: rgba(61, 107, 255, 0.45);
+ color: #a8bbff;
+}
+html[data-theme="dark"] .models-page .ml-tag-chip.is-on {
+ border-color: transparent;
+ background: #e8eaed;
+ color: #0f1115;
+}
+html[data-theme="dark"] .models-page .ml-tag-chip.is-on i {
+ color: rgba(15, 17, 21, 0.55);
+}
+html[data-theme="dark"] .models-page .ml-tag-sep {
+ background: rgba(255, 255, 255, 0.14);
+}
+
+/* 卡片上的小标签:盖过 .models-page .ml-tag(.blue|.green) 硬编码 */
+html[data-theme="dark"] .models-page .ml-tag {
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .models-page .ml-tag.blue {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .models-page .ml-tag.green {
+ color: #6ddea0;
+ background: rgba(66, 195, 102, 0.16);
+}
+
+/* --ml-black 在 dark 里是浅色字;选中态按钮不能再拿它当深色底 */
+html[data-theme="dark"] .models-page .ml-seg-btn.active,
+html[data-theme="dark"] .models-page .ml-ghost.is-on {
+ color: #0f1115;
+ border-color: #e8eaed;
+ background: #e8eaed;
+}
+
+/* —— 视频/图片创作入口 —— */
+html[data-theme="dark"] .projects-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --vc-black: #e8eaed;
+ --vc-muted: rgba(232, 234, 237, 0.68);
+ --vc-line: rgba(255, 255, 255, 0.10);
+ --vc-wash: rgba(255, 255, 255, 0.045);
+ --vc-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .projects-page .vc-tool,
+html[data-theme="dark"] .projects-page .vc-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .projects-page .vc-tool:hover,
+html[data-theme="dark"] .projects-page .vc-card:hover {
+ background: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .projects-page .vc-tool.primary {
+ background: rgba(61, 107, 255, 0.10);
+}
+html[data-theme="dark"] .projects-page .vc-tool.primary:hover {
+ background: rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .projects-page .vc-tool-cover {
+ background: #2a2f38;
+}
+html[data-theme="dark"] .projects-page .vc-toolbar,
+html[data-theme="dark"] .projects-page .vc-search,
+html[data-theme="dark"] .projects-page .vc-select-trigger,
+html[data-theme="dark"] .projects-page .vc-view-btn,
+html[data-theme="dark"] .projects-page .vc-ghost {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.88);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .projects-page .vc-seg-btn.active,
+html[data-theme="dark"] .projects-page .vc-ghost.is-on,
+html[data-theme="dark"] .projects-page .vc-view-btn.active {
+ color: #0f1115;
+ border-color: #e8eaed;
+ background: #e8eaed;
+}
+html[data-theme="dark"] .projects-page .vc-select-menu {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: #1a1e26;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.45);
+}
+html[data-theme="dark"] .projects-page .vc-select-option:hover {
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .projects-page .vc-select-option.selected {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .projects-page .vc-check {
+ background: rgba(26, 30, 38, 0.92);
+}
+
+/* —— 账户 / 设置 / 消息 / 团队 / 后台 —— */
+html[data-theme="dark"] .account-page,
+html[data-theme="dark"] .settings-page,
+html[data-theme="dark"] .msg-page,
+html[data-theme="dark"] .team-page,
+html[data-theme="dark"] .admin-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ /* 流水次要说明需要更高对比,0.56 在灰行底上偏糊 */
+ --muted: rgba(232, 234, 237, 0.68);
+ --text: #e8eaed;
+ --st-muted: rgba(210, 218, 232, 0.78);
+ --st-text: #e8eaed;
+ --st-black: #e8eaed;
+ --st-line: rgba(255, 255, 255, 0.10);
+ --st-wash: rgba(255, 255, 255, 0.045);
+ --st-hover: rgba(255, 255, 255, 0.08);
+ --st-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
+ --shadow-card: 0 8px 20px rgba(0, 0, 0, 0.4);
+}
+html[data-theme="dark"] .settings-page {
+ --st-danger: #ff6b5c;
+ /* --st-black 已改成浅字色,不能再当选中底用 */
+}
+
+/* 设置侧栏:选中项白底是 --st-black 被深色复用成字色导致 */
+html[data-theme="dark"] .settings-page .st-tab {
+ color: rgba(232, 234, 237, 0.72);
+}
+html[data-theme="dark"] .settings-page .st-tab:hover {
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .settings-page .st-tab.active {
+ color: #fff !important;
+ background: #3d6bff !important;
+}
+html[data-theme="dark"] .settings-page .st-tab.active svg {
+ color: #fff;
+}
+html[data-theme="dark"] .settings-page .st-tab .nav-badge {
+ color: rgba(232, 234, 237, 0.62);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .settings-page .st-tab.active .nav-badge {
+ color: #fff;
+ background: rgba(255, 255, 255, 0.18);
+}
+html[data-theme="dark"] .settings-page .st-tab.active .nav-dot {
+ background: #fff;
+}
+html[data-theme="dark"] .settings-page .settings-content {
+ border-color: rgba(255, 255, 255, 0.09);
+ background: #1c1f26;
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28);
+ border-radius: 20px;
+}
+html[data-theme="dark"] .settings-page .settings-nav {
+ border-color: rgba(255, 255, 255, 0.09);
+ background: #1c1f26;
+ border-radius: 20px;
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28);
+}
+/* 全局 .pane 深色卡规则会叠进设置页,这里拆掉第二层 */
+html[data-theme="dark"] .settings-page .pane {
+ background: transparent !important;
+ border: 0 !important;
+ box-shadow: none !important;
+ color: inherit;
+}
+html[data-theme="dark"] .settings-page .st-row {
+ border-bottom-color: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .settings-page .st-input {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .settings-page .st-input:focus {
+ border-color: rgba(61, 107, 255, 0.55);
+ box-shadow: 0 0 0 3px rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .settings-page .st-ghost {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .settings-page .st-ghost:hover:not(:disabled) {
+ background: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .settings-page .st-ghost:disabled {
+ color: rgba(232, 234, 237, 0.4);
+ border-color: rgba(255, 255, 255, 0.08);
+ background: rgba(255, 255, 255, 0.03);
+}
+/* 右侧「恢复默认」「管理团队」等文字链:原先吃 --st-muted,深色卡上几乎看不见 */
+html[data-theme="dark"] .settings-page .st-text {
+ color: rgba(210, 218, 232, 0.92);
+}
+html[data-theme="dark"] .settings-page .st-text:hover {
+ color: #fff;
+}
+html[data-theme="dark"] .settings-page .st-muted,
+html[data-theme="dark"] .settings-page .st-copy span,
+html[data-theme="dark"] .settings-page .st-dots,
+html[data-theme="dark"] .settings-page .device-row .meta,
+html[data-theme="dark"] .settings-page .page-head .sub {
+ color: rgba(210, 218, 232, 0.72);
+}
+html[data-theme="dark"] .settings-page .st-team strong,
+html[data-theme="dark"] .settings-page .st-copy strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .settings-page .avatar-edit .av-big {
+ background: #3d6bff;
+ color: #fff;
+}
+html[data-theme="dark"] .settings-page .switch .slider {
+ background: rgba(255, 255, 255, 0.22);
+}
+html[data-theme="dark"] .settings-page .pref-choice,
+html[data-theme="dark"] .settings-page .dur-chip {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .settings-page .pref-choice.selected,
+html[data-theme="dark"] .settings-page .dur-chip.selected {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: rgba(61, 107, 255, 0.16);
+ color: #a8bbff;
+}
+html[data-theme="dark"] .settings-page .logout-pill:hover,
+html[data-theme="dark"] .settings-page .logout-pill:focus-visible {
+ background: rgba(255, 107, 92, 0.12);
+}
+
+/* 账户流水表:行底半透明白 + 消耗积分 #111827 在深色下几乎看不见 */
+html[data-theme="dark"] .account-page .data-panel,
+html[data-theme="dark"] .account-page .billing-ledger,
+html[data-theme="dark"] .account-page .billing-chart-panel,
+html[data-theme="dark"] .account-page .billing-distribution {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.035);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .account-page .panel-head,
+html[data-theme="dark"] .account-page .billing-ledger-row,
+html[data-theme="dark"] .account-page .billing-ledger-empty,
+html[data-theme="dark"] .account-page .bill-pager {
+ border-color: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .account-page .billing-ledger-row {
+ background: rgba(255, 255, 255, 0.03);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .account-page .billing-ledger-row:hover {
+ background: rgba(61, 107, 255, 0.10);
+}
+html[data-theme="dark"] .account-page .billing-ledger-row.header {
+ background: rgba(255, 255, 255, 0.04);
+ color: rgba(232, 234, 237, 0.58);
+}
+html[data-theme="dark"] .account-page .billing-ledger-copy strong,
+html[data-theme="dark"] .account-page .billing-ledger-meta strong,
+html[data-theme="dark"] .account-page .billing-ledger-feature {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .account-page .billing-ledger-copy span,
+html[data-theme="dark"] .account-page .billing-ledger-meta span {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .account-page .billing-ledger-cost {
+ color: #f2f4f7;
+}
+html[data-theme="dark"] .account-page .billing-ledger-cost.is-credit {
+ color: #6ddea0;
+}
+html[data-theme="dark"] .account-page .billing-ledger-icon {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .account-page .tag {
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .account-page .billing-day-value {
+ color: rgba(232, 234, 237, 0.88);
+}
+html[data-theme="dark"] .account-page .bill-pager .pages button {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+html[data-theme="dark"] body .rs-select-menu-portal .rs-select-option.selected,
+html[data-theme="dark"] body .rs-select-menu-portal .rs-select-option.selected .rs-select-option-label {
+ background: rgba(61, 107, 255, 0.18) !important;
+ color: #a8bbff !important;
+}
+
+/* —— 全能创作 —— */
+html[data-theme="dark"] .omni-create-page,
+html[data-theme="dark"] .omni-history-page,
+html[data-theme="dark"] .omni-session-page {
+ --black: #e8eaed;
+ --text: #e8eaed;
+ --muted: rgba(232, 234, 237, 0.56);
+}
+html[data-theme="dark"] .omni-session-back {
+ color: var(--black-alpha-72);
+}
+html[data-theme="dark"] .omni-preset-dialog {
+ border-color: var(--border-faint);
+ background: var(--surface);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-preset-close {
+ color: var(--black-alpha-56);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-preset-close:hover {
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .omni-preset-media-frame,
+html[data-theme="dark"] .omni-preset-media-frame img,
+html[data-theme="dark"] .omni-preset-media-frame video {
+ border-color: var(--border-faint);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-preset-kind {
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .omni-preset-detail > p {
+ color: var(--black-alpha-64);
+}
+html[data-theme="dark"] .omni-preset-default {
+ border: 1px solid var(--border-faint);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-preset-default span {
+ color: var(--black-alpha-48);
+}
+html[data-theme="dark"] .omni-preset-default p {
+ color: var(--black-alpha-72);
+}
+html[data-theme="dark"] .omni-preset-actions button:not(.primary) {
+ border-color: var(--border-faint);
+ color: var(--black-alpha-56);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-preset-actions button:not(.primary):hover {
+ border-color: var(--black-alpha-24);
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .omni-preset-actions button.primary {
+ border-color: var(--heat);
+ color: var(--accent-white);
+ background: var(--heat);
+}
+
+/* —— 仪表盘 / 流水线 / 库 / AI 工具 / 自由创作 / 登录 / 向导 / 复刻 —— */
+html[data-theme="dark"] .dashboard-page,
+html[data-theme="dark"] .pipeline-page,
+html[data-theme="dark"] .library-page,
+html[data-theme="dark"] .ai-tools-page,
+html[data-theme="dark"] .free-create-page,
+html[data-theme="dark"] .login-page,
+html[data-theme="dark"] .project-wizard-page,
+html[data-theme="dark"] .product-create-page,
+html[data-theme="dark"] .video-remix-page,
+html[data-theme="dark"] .video-replace-page,
+html[data-theme="dark"] .quick-create-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --muted: rgba(232, 234, 237, 0.56);
+ --text: #e8eaed;
+ --pl-muted: rgba(232, 234, 237, 0.56);
+ --pl-line: rgba(255, 255, 255, 0.10);
+ --shadow-card: 0 8px 20px rgba(0, 0, 0, 0.4);
+}
+
+/* 专业创作 / 商品库共用的「创建新商品」抽屉。基础样式中为浅色稿保留了
+ 多处半透明白底;抽屉通过 portal 挂在 page 外,必须在这里单独覆盖。 */
+html[data-theme="dark"] .pcd-layer {
+ --klein: var(--heat);
+ --klein-hover: var(--heat-hover);
+ --pcd-muted: var(--black-alpha-56);
+ --pcd-line: var(--border-muted);
+}
+html[data-theme="dark"] .pcd-drawer,
+html[data-theme="dark"] .pcd-head,
+html[data-theme="dark"] .pcd-foot,
+html[data-theme="dark"] .pcd-gallery-head {
+ background: var(--surface);
+ border-color: var(--border-faint);
+ box-shadow: none;
+}
+html[data-theme="dark"] .pcd-head,
+html[data-theme="dark"] .pcd-gallery-head {
+ background: var(--surface-raised);
+}
+html[data-theme="dark"] .pcd-close,
+html[data-theme="dark"] .pcd-ghost,
+html[data-theme="dark"] .pcd-point-x {
+ color: var(--black-alpha-56);
+ background: var(--background-lighter);
+ border-color: var(--border-faint);
+}
+html[data-theme="dark"] .pcd-close:hover,
+html[data-theme="dark"] .pcd-ghost:hover,
+html[data-theme="dark"] .pcd-point-x:hover {
+ color: var(--accent-black);
+ background: var(--black-alpha-7);
+}
+html[data-theme="dark"] .pcd-label,
+html[data-theme="dark"] .pcd-upload-hit strong {
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .pcd-req {
+ color: var(--accent-crimson);
+}
+html[data-theme="dark"] .pcd-field input,
+html[data-theme="dark"] .pcd-select-trigger,
+html[data-theme="dark"] .pcd-point input {
+ color: var(--accent-black);
+ background: var(--background-lighter);
+ border-color: var(--border-muted);
+}
+html[data-theme="dark"] .pcd-field input::placeholder,
+html[data-theme="dark"] .pcd-point input::placeholder,
+html[data-theme="dark"] .pcd-select-trigger .is-placeholder {
+ color: var(--black-alpha-48);
+}
+html[data-theme="dark"] .pcd-field input:focus,
+html[data-theme="dark"] .pcd-point input:focus,
+html[data-theme="dark"] .pcd-select.open .pcd-select-trigger {
+ border-color: var(--heat-40);
+ box-shadow: 0 0 0 3px var(--heat-12);
+}
+html[data-theme="dark"] .pcd-select-menu,
+html[data-theme="dark"] .pcd-select-option {
+ color: var(--accent-black);
+ background: var(--surface-raised);
+ border-color: var(--border-faint);
+ box-shadow: none;
+}
+html[data-theme="dark"] .pcd-select-option:hover {
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .pcd-select-option.selected {
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .pcd-block {
+ border-color: var(--border-faint);
+}
+html[data-theme="dark"] .pcd-upload {
+ color: var(--heat);
+ border-color: var(--heat-20);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .pcd-upload:hover,
+html[data-theme="dark"] .pcd-upload.is-dragover {
+ border-color: var(--heat-40);
+ background: var(--heat-16);
+}
+html[data-theme="dark"] .pcd-preview,
+html[data-theme="dark"] .pcd-preview-frame,
+html[data-theme="dark"] .pcd-gallery-slot {
+ background: var(--background-lighter);
+ border-color: var(--border-faint);
+ box-shadow: none;
+}
+html[data-theme="dark"] .pcd-gallery {
+ background: var(--background-base);
+}
+html[data-theme="dark"] .pcd-gallery-slot.empty {
+ color: var(--black-alpha-48);
+ background: var(--background-lighter);
+}
+
+/* 卡片 / 输入 / 芯片常见浅色硬编码兜底 */
+html[data-theme="dark"] .card,
+html[data-theme="dark"] .pane,
+html[data-theme="dark"] .modal,
+html[data-theme="dark"] .drawer,
+html[data-theme="dark"] .dropdown,
+html[data-theme="dark"] .menu-pop,
+html[data-theme="dark"] .custom-select-menu,
+html[data-theme="dark"] .cs-menu {
+ background: var(--surface);
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+}
+
+html[data-theme="dark"] input,
+html[data-theme="dark"] textarea,
+html[data-theme="dark"] select,
+html[data-theme="dark"] .input,
+html[data-theme="dark"] .field input,
+html[data-theme="dark"] .field textarea {
+ background: var(--background-lighter);
+ border-color: var(--border-muted);
+ color: var(--accent-black);
+}
+
+html[data-theme="dark"] input::placeholder,
+html[data-theme="dark"] textarea::placeholder {
+ color: var(--black-alpha-48);
+}
+
+/* 表格线 / 分割 */
+html[data-theme="dark"] table,
+html[data-theme="dark"] .table,
+html[data-theme="dark"] th,
+html[data-theme="dark"] td {
+ border-color: var(--border-faint);
+}
+html[data-theme="dark"] thead th,
+html[data-theme="dark"] .table thead {
+ background: var(--background-lighter);
+ color: var(--black-alpha-72);
+}
+
+/* 滚动条略暗 */
+html[data-theme="dark"] ::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.18);
+}
+html[data-theme="dark"] ::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+
+/* 侧栏/顶栏之外:常见卡片浅底硬编码 */
+html[data-theme="dark"] .pl-card,
+html[data-theme="dark"] .ml-card,
+html[data-theme="dark"] .vc-card,
+html[data-theme="dark"] .omni-case-card,
+html[data-theme="dark"] .asset-card,
+html[data-theme="dark"] .asset-card-2,
+html[data-theme="dark"] .billing-card,
+html[data-theme="dark"] .st-card,
+html[data-theme="dark"] .settings-panel,
+html[data-theme="dark"] .pane {
+ background: var(--surface);
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+ box-shadow: 0 8px 18px rgba(0, 0, 0, 0.32);
+}
+
+html[data-theme="dark"] .chip,
+html[data-theme="dark"] .tag-chip,
+html[data-theme="dark"] .pl-tag,
+html[data-theme="dark"] .ml-tag {
+ background: rgba(255, 255, 255, 0.06);
+ border-color: rgba(255, 255, 255, 0.10);
+ color: rgba(232, 234, 237, 0.78);
+}
+
+html[data-theme="dark"] .btn-ghost,
+html[data-theme="dark"] .pl-ghost,
+html[data-theme="dark"] .ml-ghost {
+ color: var(--accent-black);
+ border-color: var(--border-faint);
+ background: transparent;
+}
+html[data-theme="dark"] .btn-ghost:hover,
+html[data-theme="dark"] .pl-ghost:hover,
+html[data-theme="dark"] .ml-ghost:hover {
+ background: rgba(255, 255, 255, 0.06);
+}
+
+/* 商品库进入管理态后,“完成”是退出当前模式的状态按钮,不是第二个主 CTA。
+ 不可复用 --pl-black:深色主题中它是正文浅色,曾导致按钮变成突兀白块。 */
+html[data-theme="dark"] .products-page .pl-ghost.is-on {
+ color: var(--heat);
+ border-color: var(--heat-20);
+ background: var(--heat-12);
+}
+
+html[data-theme="dark"] .empty-state,
+html[data-theme="dark"] .pl-empty,
+html[data-theme="dark"] .ml-empty {
+ background: rgba(61, 107, 255, 0.06);
+ border-color: rgba(61, 107, 255, 0.22);
+ color: rgba(232, 234, 237, 0.56);
+}
+
+html[data-theme="dark"] .omni-home-composer,
+html[data-theme="dark"] .omni-composer,
+html[data-theme="dark"] .composer,
+html[data-theme="dark"] .chat-input {
+ background: var(--surface);
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+}
+
+html[data-theme="dark"] .modal-b,
+html[data-theme="dark"] .modal-backdrop,
+html[data-theme="dark"] .drawer-mask {
+ background: rgba(0, 0, 0, 0.62);
+}
+
+
+/* ============================================================
+ 全能创作首页 · 创作卡 / 方向卡 / 工具条(截图里那块大白卡)
+ ============================================================ */
+html[data-theme="dark"] .omni-home-hero > p,
+html[data-theme="dark"] .omni-home-hero .omni-home-sub {
+ color: rgba(232, 234, 237, 0.55);
+}
+
+html[data-theme="dark"] .omni-output-switch {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: 0 7px 18px rgba(0, 0, 0, 0.28);
+}
+html[data-theme="dark"] .omni-output-switch button {
+ color: rgba(232, 234, 237, 0.55);
+}
+html[data-theme="dark"] .omni-output-switch button.active {
+ color: #0f1115;
+ background: #e8eaed;
+}
+
+html[data-theme="dark"] .omni-start-composer {
+ border-color: rgba(255, 255, 255, 0.10);
+ border-top-color: var(--klein);
+ background: #1a1e26;
+ box-shadow: 0 22px 54px rgba(0, 0, 0, 0.45), 0 0 0 5px rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .omni-start-composer:focus-within {
+ border-color: rgba(61, 107, 255, 0.45);
+ box-shadow: 0 24px 58px rgba(0, 0, 0, 0.5), 0 0 0 4px rgba(61, 107, 255, 0.12);
+}
+
+html[data-theme="dark"] #omniStartPrompt,
+html[data-theme="dark"] #omniSessionPrompt {
+ color: #e8eaed;
+}
+html[data-theme="dark"] #omniStartPrompt::placeholder,
+html[data-theme="dark"] #omniSessionPrompt::placeholder {
+ color: rgba(232, 234, 237, 0.38);
+}
+
+html[data-theme="dark"] .omni-selected-case {
+ border-color: rgba(61, 107, 255, 0.28);
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .omni-selected-case button {
+ color: rgba(232, 234, 237, 0.55);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .omni-selected-case button:hover {
+ color: #8eb0ff;
+ background: rgba(61, 107, 255, 0.22);
+}
+
+html[data-theme="dark"] .omni-attachment-chip {
+ border-color: rgba(61, 107, 255, 0.22);
+ color: #c9d4ef;
+ background: rgba(61, 107, 255, 0.10);
+}
+html[data-theme="dark"] .omni-attachment-chip img {
+ background: #2a2f38;
+}
+html[data-theme="dark"] .omni-attachment-remove {
+ color: rgba(232, 234, 237, 0.55);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .omni-attachment-remove:hover {
+ color: #8eb0ff;
+ background: rgba(61, 107, 255, 0.22);
+}
+
+html[data-theme="dark"] .omni-icon-tool {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: rgba(232, 234, 237, 0.78);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .omni-icon-tool:hover {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #8eb0ff;
+ background: rgba(61, 107, 255, 0.12);
+}
+
+html[data-theme="dark"] .omni-upload-menu,
+html[data-theme="dark"] .omni-mention-menu {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1e2229;
+ box-shadow: 0 18px 38px rgba(0, 0, 0, 0.5);
+}
+html[data-theme="dark"] .omni-upload-menu > strong,
+html[data-theme="dark"] .omni-upload-menu button small {
+ color: rgba(232, 234, 237, 0.45);
+}
+html[data-theme="dark"] .omni-upload-menu button {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .omni-upload-menu button:hover {
+ color: #8eb0ff;
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .omni-upload-menu button > svg {
+ background: rgba(61, 107, 255, 0.16);
+ color: #8eb0ff;
+}
+
+html[data-theme="dark"] .omni-slot-tag {
+ color: #0f1115;
+ background: #e8eaed;
+}
+html[data-theme="dark"] .omni-slot-box.is-empty {
+ background: rgba(255, 255, 255, 0.04);
+ border-color: rgba(255, 255, 255, 0.14);
+ color: rgba(232, 234, 237, 0.45);
+}
+html[data-theme="dark"] .omni-slot-box.is-empty:hover {
+ border-color: rgba(61, 107, 255, 0.45);
+ color: #8eb0ff;
+ background: rgba(61, 107, 255, 0.12);
+}
+
+html[data-theme="dark"] .omni-case-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .omni-case-card:hover,
+html[data-theme="dark"] .omni-case-card.active {
+ border-color: rgba(61, 107, 255, 0.40);
+}
+html[data-theme="dark"] .omni-case-copy strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .omni-case-copy small {
+ color: rgba(232, 234, 237, 0.52);
+}
+
+html[data-theme="dark"] .omni-history-toolbar {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.3);
+}
+html[data-theme="dark"] .omni-history-toolbar button {
+ color: rgba(232, 234, 237, 0.55);
+}
+html[data-theme="dark"] .omni-history-toolbar button.active {
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .omni-history-back {
+ color: var(--black-alpha-56);
+ border-color: var(--border-faint);
+ background: var(--surface);
+}
+html[data-theme="dark"] .omni-history-back:hover {
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .omni-history-item {
+ border-color: var(--border-faint);
+ background: var(--surface);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-history-item:hover {
+ border-color: var(--heat-20);
+ background: var(--background-lighter);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-history-item > img {
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-history-placeholder {
+ color: var(--black-alpha-40);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-history-header p {
+ color: var(--black-alpha-56);
+}
+html[data-theme="dark"] .omni-history-empty {
+ color: var(--black-alpha-56);
+ border-color: var(--border-faint);
+ background: var(--surface);
+}
+html[data-theme="dark"] .omni-history-actions > svg {
+ color: var(--black-alpha-48);
+}
+html[data-theme="dark"] .omni-history-actions button {
+ color: var(--black-alpha-56);
+ border-color: transparent;
+ background: transparent;
+}
+html[data-theme="dark"] .omni-history-item:hover .omni-history-actions button,
+html[data-theme="dark"] .omni-history-item:focus-within .omni-history-actions button {
+ border-color: var(--border-faint);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-history-actions button:hover {
+ color: var(--accent-crimson);
+ border-color: var(--crimson-bd);
+ background: var(--crimson-bg);
+}
+html[data-theme="dark"] .omni-history-status {
+ color: var(--accent-honey);
+}
+html[data-theme="dark"] .omni-history-status::before {
+ background: var(--accent-honey);
+}
+html[data-theme="dark"] .omni-history-status.completed {
+ color: var(--heat);
+}
+html[data-theme="dark"] .omni-history-status.completed::before,
+html[data-theme="dark"] .omni-history-status.generating::before {
+ background: var(--heat);
+}
+html[data-theme="dark"] .omni-history-status.generating {
+ color: var(--heat);
+}
+
+
+/* 顶栏工作模式胶囊 */
+html[data-theme="dark"] .mode-indicator {
+ background: #e8eaed;
+ box-shadow: 0 5px 12px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .topbar .mode-tabs .mode-tab {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .topbar .mode-tabs .mode-tab:hover {
+ border-color: rgba(255, 255, 255, 0.22);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .topbar .mode-tabs .mode-tab.active {
+ color: #0f1115;
+ background: transparent;
+ border-color: transparent;
+}
+
+/* 全能创作会话页:消息、生成卡和确认动作全部回到同一层级的深色工作面。 */
+html[data-theme="dark"] .omni-session-composer {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 15px 34px rgba(0, 0, 0, 0.45);
+}
+html[data-theme="dark"] .omni-session-composer.is-revise-hint {
+ border-color: rgba(61, 107, 255, 0.45);
+ box-shadow: 0 15px 34px rgba(0, 0, 0, 0.45), 0 0 0 3px rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .omni-session-page .omni-msg,
+html[data-theme="dark"] .omni-session-page .omni-message,
+html[data-theme="dark"] .omni-session-page .omni-bubble,
+html[data-theme="dark"] .omni-session-page .omni-agent-card,
+html[data-theme="dark"] .omni-session-page .omni-strategy-card,
+html[data-theme="dark"] .omni-session-page .omni-video-plan-card,
+html[data-theme="dark"] .omni-session-page .omni-prompt-file-card,
+html[data-theme="dark"] .omni-session-page .omni-elicit-card,
+html[data-theme="dark"] .omni-session-page .omni-selling-point-card,
+html[data-theme="dark"] .omni-session-page .omni-direction-card,
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-card,
+html[data-theme="dark"] .omni-session-page .omni-confirm-card,
+html[data-theme="dark"] .omni-session-page .omni-result-card,
+html[data-theme="dark"] .omni-session-page .omni-process-card {
+ background: var(--surface) !important;
+ border-color: var(--border-faint) !important;
+ color: var(--accent-black);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-chat-row.agent .omni-chat-bubble {
+ border-color: var(--border-faint);
+ border-bottom-left-radius: var(--r-sm);
+ color: var(--accent-black);
+ background: var(--surface-raised);
+}
+html[data-theme="dark"] .omni-session-page .omni-chat-row.is-user .omni-chat-bubble {
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+ background: var(--background-lighter);
+ -webkit-backdrop-filter: none;
+ backdrop-filter: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-chat-markdown h3,
+html[data-theme="dark"] .omni-session-page .omni-chat-markdown strong,
+html[data-theme="dark"] .omni-session-page .omni-chat-bubble code,
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-copy strong,
+html[data-theme="dark"] .omni-session-page .omni-confirm-copy strong {
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .omni-session-page .omni-chat-bubble code {
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .omni-session-page .omni-reply-hint {
+ border-color: var(--border-faint);
+ color: var(--black-alpha-56);
+}
+html[data-theme="dark"] .omni-session-page .omni-reply-hint-label,
+html[data-theme="dark"] .omni-session-page .omni-strategy-head span {
+ color: var(--heat);
+ background: var(--heat-12);
+}
+
+/* 策略、方案和 Prompt 卡:卡内信息层次用深浅面与 1 px 分隔,而不是白色子卡。 */
+html[data-theme="dark"] .omni-session-page .omni-strategy-head,
+html[data-theme="dark"] .omni-session-page .omni-video-plan-head,
+html[data-theme="dark"] .omni-session-page .omni-elicit-head,
+html[data-theme="dark"] .omni-session-page .omni-plan-section,
+html[data-theme="dark"] .omni-session-page .omni-selling-point-card > header,
+html[data-theme="dark"] .omni-session-page .omni-direction-head {
+ border-color: var(--border-faint);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-strategy-grid div,
+html[data-theme="dark"] .omni-session-page .omni-strategy-direction,
+html[data-theme="dark"] .omni-session-page .omni-plan-points span,
+html[data-theme="dark"] .omni-session-page .omni-plan-timeline span,
+html[data-theme="dark"] .omni-session-page .omni-plan-summary,
+html[data-theme="dark"] .omni-session-page .omni-direction-list > button,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer .omni-prompt-meta div,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer .omni-prompt-shot-fields div {
+ border-color: var(--border-faint);
+ color: var(--black-alpha-64);
+ background: var(--background-lighter);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-strategy-grid span,
+html[data-theme="dark"] .omni-session-page .omni-plan-points i,
+html[data-theme="dark"] .omni-session-page .omni-plan-points .omni-plan-point-body,
+html[data-theme="dark"] .omni-session-page .omni-plan-summary i,
+html[data-theme="dark"] .omni-session-page .omni-plan-summary .omni-plan-point-body,
+html[data-theme="dark"] .omni-session-page .omni-prompt-file-copy small,
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-copy span,
+html[data-theme="dark"] .omni-session-page .omni-confirm-copy span,
+html[data-theme="dark"] .omni-session-page .omni-confirm-foot > span {
+ color: var(--black-alpha-56);
+}
+html[data-theme="dark"] .omni-session-page .omni-strategy-grid strong,
+html[data-theme="dark"] .omni-session-page .omni-plan-section > strong,
+html[data-theme="dark"] .omni-session-page .omni-plan-points b,
+html[data-theme="dark"] .omni-session-page .omni-direction-head strong,
+html[data-theme="dark"] .omni-session-page .omni-selling-point-card header strong {
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .omni-session-page .omni-strategy-direction {
+ border-color: var(--heat-20);
+}
+html[data-theme="dark"] .omni-session-page .omni-strategy-direction b,
+html[data-theme="dark"] .omni-session-page .omni-plan-timeline b,
+html[data-theme="dark"] .omni-session-page .omni-plan-summary b {
+ color: var(--heat);
+}
+html[data-theme="dark"] .omni-session-page .omni-video-plan-head span {
+ color: var(--accent-black);
+ background: var(--black-alpha-12);
+}
+html[data-theme="dark"] .omni-session-page .omni-plan-summary .omni-plan-final-input {
+ color: var(--accent-black);
+}
+
+/* 追问、确认和文档操作沿用统一交互层级。 */
+html[data-theme="dark"] .omni-session-page .omni-prompt-file-icon,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer-file {
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-file-card button,
+html[data-theme="dark"] .omni-session-page .omni-doc-download,
+html[data-theme="dark"] .omni-session-page .omni-reply-guide-options button,
+html[data-theme="dark"] .omni-session-page .omni-chat-question-input button,
+html[data-theme="dark"] .omni-session-page .omni-gate-actions button,
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-actions button.is-secondary,
+html[data-theme="dark"] .omni-session-page .omni-elicit-actions button.cancel-btn {
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-file-card button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-doc-download:hover,
+html[data-theme="dark"] .omni-session-page .omni-reply-guide-options button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-chat-question-input button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-gate-actions button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-actions button.is-secondary:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-elicit-actions button.cancel-btn:hover:not(:disabled) {
+ border-color: var(--heat-40);
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .omni-session-page .omni-reply-guide-options button.primary,
+html[data-theme="dark"] .omni-session-page .omni-gate-actions button.primary,
+html[data-theme="dark"] .omni-session-page .omni-elicit-options button.active,
+html[data-theme="dark"] .omni-session-page .omni-elicit-assets button.active,
+html[data-theme="dark"] .omni-session-page .omni-direction-list > button.is-selected {
+ border-color: var(--heat-40);
+ color: var(--heat);
+ background: var(--heat-12);
+}
+html[data-theme="dark"] .omni-session-page .omni-elicit-options button,
+html[data-theme="dark"] .omni-session-page .omni-elicit-assets button,
+html[data-theme="dark"] .omni-session-page .omni-elicit-field input[type="text"],
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-revise-input,
+html[data-theme="dark"] .omni-session-page .omni-direction-custom .input {
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+ background: var(--background-lighter);
+}
+html[data-theme="dark"] .omni-session-page .omni-elicit-options button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-elicit-assets button:hover:not(:disabled),
+html[data-theme="dark"] .omni-session-page .omni-direction-list > button:hover:not(:disabled) {
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+ box-shadow: inset 0 0 0 1px var(--black-alpha-24);
+ transform: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-elicit-field > label,
+html[data-theme="dark"] .omni-session-page .omni-elicit-options button,
+html[data-theme="dark"] .omni-session-page .omni-elicit-assets span,
+html[data-theme="dark"] .omni-session-page .omni-direction-list > button > strong,
+html[data-theme="dark"] .omni-session-page .omni-direction-list p b {
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .omni-session-page .omni-direction-list p,
+html[data-theme="dark"] .omni-session-page .omni-direction-index,
+html[data-theme="dark"] .omni-session-page .omni-direction-list small,
+html[data-theme="dark"] .omni-session-page .omni-direction-head span,
+html[data-theme="dark"] .omni-session-page .omni-selling-point-card header span,
+html[data-theme="dark"] .omni-session-page .omni-selling-point-selected {
+ color: var(--black-alpha-56);
+}
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-actions button:not(.is-secondary),
+html[data-theme="dark"] .omni-session-page .omni-elicit-actions button:not(.cancel-btn),
+html[data-theme="dark"] .omni-session-page .omni-confirm-foot > button,
+html[data-theme="dark"] .omni-session-page .omni-direction-custom button {
+ color: var(--accent-white);
+ background: var(--heat);
+}
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-revise-input::placeholder {
+ color: var(--black-alpha-48);
+}
+html[data-theme="dark"] .omni-session-page .omni-step-confirm-revise-input:focus,
+html[data-theme="dark"] .omni-session-page .omni-elicit-field input[type="text"]:focus {
+ border-color: var(--heat-40);
+ box-shadow: 0 0 0 2px var(--heat-12);
+}
+html[data-theme="dark"] .omni-session-page .omni-confirm-hint {
+ color: var(--accent-honey);
+ background: var(--honey-bg);
+}
+
+/* Prompt 详情抽屉和对话资源面板也不能回退到浅色。 */
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer header,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer-head,
+html[data-theme="dark"] .omni-session-page .omni-prompt-block,
+html[data-theme="dark"] .omni-session-page .omni-prompt-table-wrap,
+html[data-theme="dark"] .omni-session-page .omni-assets-drawer,
+html[data-theme="dark"] .omni-session-page .omni-assets-drawer-body {
+ border-color: var(--border-faint);
+ color: var(--accent-black);
+ background: var(--surface);
+ box-shadow: none;
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer header button,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer-head button {
+ color: var(--black-alpha-56);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer header button:hover,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer-head button:hover {
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-block p,
+html[data-theme="dark"] .omni-session-page .omni-prompt-meta dd,
+html[data-theme="dark"] .omni-session-page .omni-prompt-shot-fields dd,
+html[data-theme="dark"] .omni-session-page .omni-prompt-table th,
+html[data-theme="dark"] .omni-session-page .omni-prompt-table td {
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-meta dt,
+html[data-theme="dark"] .omni-session-page .omni-prompt-shot-fields dt,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer header small,
+html[data-theme="dark"] .omni-session-page .omni-prompt-drawer-head small {
+ color: var(--black-alpha-48);
+}
+html[data-theme="dark"] .omni-session-page .omni-prompt-table th,
+html[data-theme="dark"] .omni-session-page .omni-prompt-table tbody tr:hover td {
+ background: var(--background-lighter);
+}
+
+/* ============================================================
+ 图片创作三工作台(.yz-image) · 模特上身 / 平台套图 / 图片创作
+ 根节点自带浅色 token + 半透明白面板,必须整块覆盖
+ ============================================================ */
+html[data-theme="dark"] .yz-image {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --muted: rgba(232, 234, 237, 0.68);
+ --text: #e8eaed;
+ --shadow-card: 0 8px 20px rgba(0, 0, 0, 0.4);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .yz-image .generator-panel,
+html[data-theme="dark"] .yz-image .result-panel,
+html[data-theme="dark"] .yz-image .studio-history,
+html[data-theme="dark"] .yz-image .studio-stage {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.38);
+}
+html[data-theme="dark"] .yz-image .image-back-button,
+html[data-theme="dark"] .yz-image .secondary-action {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .yz-image .image-back-button:hover,
+html[data-theme="dark"] .yz-image .secondary-action:hover {
+ background: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .yz-image .product-context {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .yz-image .field-label,
+html[data-theme="dark"] .yz-image .choice-row button {
+ color: rgba(232, 234, 237, 0.86);
+}
+html[data-theme="dark"] .yz-image .choice-row button,
+html[data-theme="dark"] .yz-image .product-choice,
+html[data-theme="dark"] .yz-image .model-choice,
+html[data-theme="dark"] .yz-image .platform-choice,
+html[data-theme="dark"] .yz-image .new-conversation {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .yz-image .product-choice.active,
+html[data-theme="dark"] .yz-image .model-choice.active,
+html[data-theme="dark"] .yz-image .platform-choice.active,
+html[data-theme="dark"] .yz-image .choice-row button.active,
+html[data-theme="dark"] .yz-image .history-item.active {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: rgba(61, 107, 255, 0.14);
+ color: #c5d2ff;
+}
+html[data-theme="dark"] .yz-image .choice-row button.active {
+ color: #a8bbff;
+}
+html[data-theme="dark"] .yz-image .history-item.active .nm {
+ color: #a8bbff;
+}
+html[data-theme="dark"] .yz-image .step-number {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .yz-image .product-library-choice,
+html[data-theme="dark"] .yz-image .upload-choice {
+ border-color: rgba(255, 255, 255, 0.18);
+ color: rgba(232, 234, 237, 0.62);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .yz-image .product-library-choice svg,
+html[data-theme="dark"] .yz-image .upload-choice svg {
+ color: #a8bbff;
+}
+html[data-theme="dark"] .yz-image .image-prompt {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .yz-image .image-prompt:focus {
+ border-color: rgba(61, 107, 255, 0.5);
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: 0 0 0 3px rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .yz-image .asset-pair-grid > .control-section + .control-section,
+html[data-theme="dark"] .yz-image .generator-settings,
+html[data-theme="dark"] .yz-image .result-topbar,
+html[data-theme="dark"] .yz-image .result-footer,
+html[data-theme="dark"] .yz-image .result-stat {
+ border-color: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .yz-image .choice-check {
+ border-color: rgba(255, 255, 255, 0.22);
+ background: #1a1e26;
+}
+html[data-theme="dark"] .yz-image .product-choice.active .choice-check,
+html[data-theme="dark"] .yz-image .model-choice.active .choice-check,
+html[data-theme="dark"] .yz-image .platform-choice.active .choice-check {
+ border-color: #3d6bff;
+ background: #3d6bff;
+}
+html[data-theme="dark"] .yz-image .product-choice.active .choice-check::after,
+html[data-theme="dark"] .yz-image .model-choice.active .choice-check::after,
+html[data-theme="dark"] .yz-image .platform-choice.active .choice-check::after {
+ background: #fff;
+}
+html[data-theme="dark"] .yz-image .result-tags span {
+ color: rgba(232, 234, 237, 0.62);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .yz-image .result-empty-icon {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .yz-image .result-canvas,
+html[data-theme="dark"] .yz-image .studio-canvas {
+ background:
+ radial-gradient(circle at center, rgba(61, 107, 255, 0.10), transparent 32%),
+ linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
+ background-size: auto, 34px 34px, 34px 34px;
+}
+html[data-theme="dark"] .yz-image .studio-canvas {
+ background-size: auto, 42px 42px, 42px 42px;
+}
+html[data-theme="dark"] .yz-image .history-item:hover {
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .yz-image .history-tip {
+ color: rgba(232, 234, 237, 0.62);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .yz-image .suggestion-chip {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .yz-image .image-composer {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: #1a1e26;
+ box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45);
+}
+html[data-theme="dark"] .yz-image .image-reference-button {
+ border-color: rgba(255, 255, 255, 0.18);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .yz-image .generate-button {
+ box-shadow: 0 10px 22px rgba(61, 107, 255, 0.28);
+}
+html[data-theme="dark"] .yz-image .product-choice img,
+html[data-theme="dark"] .yz-image .product-choice .thumb-fallback,
+html[data-theme="dark"] .yz-image .model-choice img,
+html[data-theme="dark"] .yz-image .model-choice .thumb-fallback {
+ background: rgba(255, 255, 255, 0.08);
+}
+
+/* 图片创作入口三张卡(.asset-factory) */
+html[data-theme="dark"] .asset-factory {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --af-black: #e8eaed;
+ --af-muted: rgba(232, 234, 237, 0.68);
+ --af-line: rgba(255, 255, 255, 0.10);
+ --af-wash: rgba(255, 255, 255, 0.045);
+ --af-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .asset-factory .af-tool {
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .asset-factory .af-tool:hover {
+ background: rgba(255, 255, 255, 0.07);
+ box-shadow: 0 15px 32px rgba(0, 0, 0, 0.4);
+}
+html[data-theme="dark"] .asset-factory .af-tool-cover {
+ background: #2a2f38;
+}
+html[data-theme="dark"] .asset-factory .af-seg-btn,
+html[data-theme="dark"] .asset-factory .af-select-trigger,
+html[data-theme="dark"] .asset-factory .af-search,
+html[data-theme="dark"] .asset-factory .af-view-btn,
+html[data-theme="dark"] .asset-factory .af-media {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: rgba(232, 234, 237, 0.86);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .asset-factory .af-seg-btn.active,
+html[data-theme="dark"] .asset-factory .af-view-btn.active {
+ color: #0f1115;
+ background: #e8eaed;
+ border-color: #e8eaed;
+}
+html[data-theme="dark"] .asset-factory .af-select-menu {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: #1a1e26;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.45);
+}
+html[data-theme="dark"] .asset-factory .af-select-option:hover {
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .asset-factory .af-select-option.selected {
+ background: rgba(61, 107, 255, 0.18);
+ color: #a8bbff;
+}
+html[data-theme="dark"] .asset-factory .af-tag {
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.08);
+}
+
+/* ============================================================
+ 视频创作工作台 · 一键成片 / 专业创作 / 自由生成 / 提炼提示词 / 视频复刻
+ ============================================================ */
+
+/* 一键成片 */
+html[data-theme="dark"] .quick-create-page {
+ --quick-blue: #3d6bff;
+ --quick-blue-hover: #5a82ff;
+ --quick-muted: rgba(232, 234, 237, 0.68);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .quick-create-page .project-builder-title h1 {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .quick-create-page .image-back-button {
+ border-color: rgba(61, 107, 255, 0.45);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .quick-create-page .quick-create-panel {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
+}
+html[data-theme="dark"] .quick-create-page .quick-form-panel {
+ border-top-color: #3d6bff;
+}
+html[data-theme="dark"] .quick-create-page .quick-status-panel {
+ border-top-color: #e8eaed;
+ background: radial-gradient(circle at 50% 45%, rgba(61, 107, 255, 0.12), transparent 34%), #161a22;
+}
+html[data-theme="dark"] .quick-create-page .quick-name-input {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .quick-create-page .quick-name-input::placeholder {
+ color: rgba(232, 234, 237, 0.42);
+}
+html[data-theme="dark"] .quick-create-page .quick-name-input:focus {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: 0 0 0 4px rgba(61, 107, 255, 0.14);
+}
+
+/* 品类芯片:盖过共享 .chip 浅色字 */
+html[data-theme="dark"] .quick-create-page .chip.quick-cat-chip {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: rgba(232, 234, 237, 0.88);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .quick-create-page .chip.quick-cat-chip:hover {
+ border-color: rgba(255, 255, 255, 0.22);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .quick-create-page .chip.quick-cat-chip.active {
+ border-color: rgba(61, 107, 255, 0.55);
+ color: #c5d2ff;
+ background: rgba(61, 107, 255, 0.18);
+}
+
+/* 上传区 / 参数格:去掉浅灰底 */
+html[data-theme="dark"] .quick-create-page .quick-upload,
+html[data-theme="dark"] .quick-create-page .quick-upload.has-images {
+ border-color: rgba(61, 107, 255, 0.35);
+ background: radial-gradient(circle at center, rgba(61, 107, 255, 0.12), transparent 47%), rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .quick-create-page .quick-upload-copy strong,
+html[data-theme="dark"] .quick-create-page .quick-upload-trigger strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .quick-create-page .quick-upload-trigger {
+ color: rgba(232, 234, 237, 0.88);
+}
+html[data-theme="dark"] .quick-create-page .quick-upload-more {
+ border-color: rgba(61, 107, 255, 0.4);
+ background: rgba(61, 107, 255, 0.08);
+}
+html[data-theme="dark"] .quick-create-page .quick-upload-more-icon {
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .quick-create-page .quick-image-grid,
+html[data-theme="dark"] .quick-create-page .quick-image-tile {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .quick-create-page .quick-parameter-field {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+/* 盖过 .quick-parameter-field > span { color:#30343a } */
+html[data-theme="dark"] .quick-create-page .quick-parameter-field > span {
+ color: rgba(232, 234, 237, 0.9);
+}
+html[data-theme="dark"] .quick-create-page .quick-field-label {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .quick-create-page .quick-parameter-field .rs-select-btn {
+ border-color: rgba(255, 255, 255, 0.12) !important;
+ color: #e8eaed !important;
+ background: rgba(255, 255, 255, 0.05) !important;
+}
+html[data-theme="dark"] .quick-create-page .quick-clear-all,
+html[data-theme="dark"] .quick-create-page .quick-ready-tags span,
+html[data-theme="dark"] .quick-create-page .secondary-action {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.06);
+}
+
+/* 立即生成:禁用态浅灰底+浅灰字几乎看不见 */
+html[data-theme="dark"] .quick-create-page .quick-generate-button {
+ color: #fff;
+ background: #3d6bff;
+ box-shadow: 0 12px 24px rgba(61, 107, 255, 0.28);
+}
+html[data-theme="dark"] .quick-create-page .quick-generate-button:disabled {
+ color: rgba(232, 234, 237, 0.55);
+ background: rgba(255, 255, 255, 0.10);
+ box-shadow: none;
+}
+html[data-theme="dark"] .quick-create-page .quick-cancel-button {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .quick-create-page .quick-generating-preview {
+ border-color: rgba(61, 107, 255, 0.28);
+ background: rgba(61, 107, 255, 0.10);
+ box-shadow: none;
+}
+html[data-theme="dark"] .quick-create-page .quick-generating-preview::before {
+ background: #1a1e26;
+}
+html[data-theme="dark"] .quick-create-page .quick-progress-dot {
+ border-color: #e8eaed;
+ background: #e8eaed;
+ color: #0f1115;
+ box-shadow: 0 0 0 5px rgba(232, 234, 237, 0.08);
+}
+html[data-theme="dark"] .quick-create-page .quick-progress-node:not(:last-child)::after {
+ background: rgba(232, 234, 237, 0.28);
+}
+html[data-theme="dark"] .quick-create-page .quick-video-result-card,
+html[data-theme="dark"] .quick-create-page .quick-history-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .quick-create-page .quick-video-result-thumb,
+html[data-theme="dark"] .quick-create-page .quick-history-thumb {
+ background: #2a2f38;
+}
+html[data-theme="dark"] .quick-create-page .quick-history-open {
+ border-color: rgba(61, 107, 255, 0.4);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.04);
+}
+
+/* 提炼提示词 / 视频复刻 */
+html[data-theme="dark"] .vr-page,
+html[data-theme="dark"] .vrep-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --muted: rgba(232, 234, 237, 0.68);
+ --text: #e8eaed;
+ --shadow-card: 0 8px 20px rgba(0, 0, 0, 0.4);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .vr-page .image-back-button,
+html[data-theme="dark"] .vrep-page .image-back-button,
+html[data-theme="dark"] .vr-page .secondary-action,
+html[data-theme="dark"] .vrep-page .secondary-action {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vr-page .video-flow-panel,
+html[data-theme="dark"] .vr-page .video-result-panel,
+html[data-theme="dark"] .vrep-page .video-flow-panel,
+html[data-theme="dark"] .vrep-page .video-result-panel,
+html[data-theme="dark"] .vr-page .video-remix-upload-panel,
+html[data-theme="dark"] .vr-page .remix-information-panel,
+html[data-theme="dark"] .vr-page .remix-prompt-panel {
+ border-color: rgba(255, 255, 255, 0.10) !important;
+ background: #1a1e26 !important;
+ background-color: #1a1e26 !important;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.4) !important;
+}
+html[data-theme="dark"] .vr-page .remix-page .video-remix-upload-panel:hover,
+html[data-theme="dark"] .vr-page .remix-page .remix-information-panel:hover,
+html[data-theme="dark"] .vr-page .remix-page .remix-prompt-panel:hover {
+ border-color: rgba(61, 107, 255, 0.35) !important;
+ box-shadow: 0 18px 42px rgba(0, 0, 0, 0.45) !important;
+}
+
+/* 进度条:硬编码灰字 */
+html[data-theme="dark"] .vr-page .remix-progress-strip {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .vr-page .remix-progress-step {
+ color: rgba(232, 234, 237, 0.55);
+}
+html[data-theme="dark"] .vr-page .remix-progress-dot {
+ color: rgba(232, 234, 237, 0.55);
+ border-color: rgba(255, 255, 255, 0.18);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vr-page .remix-progress-step.active,
+html[data-theme="dark"] .vr-page .remix-progress-step.done {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .vr-page .remix-progress-step.active .remix-progress-dot,
+html[data-theme="dark"] .vr-page .remix-progress-step.done .remix-progress-dot {
+ color: #fff;
+ border-color: #3d6bff;
+ background: #3d6bff;
+}
+
+/* 上传区:#f5f8ff / #42506a / #1d2940 */
+html[data-theme="dark"] .vr-page .video-upload-field,
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field,
+html[data-theme="dark"] .vrep-page .video-upload-field {
+ border-color: rgba(61, 107, 255, 0.4) !important;
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(61, 107, 255, 0.08) !important;
+}
+html[data-theme="dark"] .vr-page .video-upload-field:hover,
+html[data-theme="dark"] .vr-page .video-upload-field.has-file,
+html[data-theme="dark"] .vr-page .video-upload-field.is-dragover,
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field:hover,
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field:focus-within,
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field.is-dragover,
+html[data-theme="dark"] .vrep-page .video-upload-field:hover,
+html[data-theme="dark"] .vrep-page .video-upload-field.has-file,
+html[data-theme="dark"] .vrep-page .video-upload-field.is-dragover {
+ border-color: #3d6bff !important;
+ background: rgba(61, 107, 255, 0.14) !important;
+ box-shadow: none;
+}
+html[data-theme="dark"] .vr-page .video-upload-field strong,
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field strong,
+html[data-theme="dark"] .vrep-page .video-upload-field strong {
+ color: #e8eaed !important;
+}
+html[data-theme="dark"] .vr-page .remix-page .video-upload-field svg {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .vr-page .video-upload-change {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+
+/* 信息卡标签/数值 */
+html[data-theme="dark"] .vr-page .remix-info-item {
+ border-color: rgba(61, 107, 255, 0.22);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .vr-page .remix-info-item span,
+html[data-theme="dark"] .vr-page .remix-info-file span {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .vr-page .remix-info-item strong,
+html[data-theme="dark"] .vr-page .remix-info-file strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .vr-page .remix-info-file small {
+ color: rgba(232, 234, 237, 0.55);
+}
+
+/* 提示词编辑框 */
+html[data-theme="dark"] .vr-page .remix-prompt-panel .analysis-prompt {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+ box-shadow: none;
+}
+html[data-theme="dark"] .vr-page .remix-prompt-panel .analysis-prompt:focus {
+ border-color: #3d6bff;
+ box-shadow: 0 0 0 3px rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .vr-page .remix-prompt-placeholder,
+html[data-theme="dark"] .vr-page .video-result-placeholder {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .vr-page .primary-action,
+html[data-theme="dark"] .vrep-page .primary-action {
+ color: #fff;
+ background: #3d6bff;
+ border-color: #3d6bff;
+}
+html[data-theme="dark"] .vr-page .primary-action:disabled,
+html[data-theme="dark"] .vrep-page .primary-action:disabled {
+ color: rgba(232, 234, 237, 0.55);
+ background: rgba(255, 255, 255, 0.10);
+ border-color: transparent;
+}
+html[data-theme="dark"] .vr-page .remix-history-empty,
+html[data-theme="dark"] .vr-page .remix-history-card {
+ border-color: rgba(255, 255, 255, 0.10) !important;
+ color: rgba(232, 234, 237, 0.72);
+ background: #1a1e26 !important;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35) !important;
+}
+html[data-theme="dark"] .vr-page .remix-history-card:hover {
+ border-color: rgba(61, 107, 255, 0.35) !important;
+ box-shadow: 0 16px 36px rgba(0, 0, 0, 0.45) !important;
+}
+html[data-theme="dark"] .vr-page .remix-history-cover {
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vr-page .remix-history-status {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .vr-page .remix-history-copy h3 {
+ color: #e8eaed !important;
+}
+html[data-theme="dark"] .vr-page .remix-history-copy p {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .vr-page .remix-history-actions time {
+ color: rgba(232, 234, 237, 0.55);
+}
+html[data-theme="dark"] .vr-page .remix-history-open,
+html[data-theme="dark"] .vr-page .remix-history-copy-button {
+ border-color: rgba(61, 107, 255, 0.4);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vr-page .remix-history-open:hover,
+html[data-theme="dark"] .vr-page .remix-history-copy-button:hover {
+ border-color: #3d6bff;
+ color: #fff;
+ background: #3d6bff;
+}
+
+/* 展开提示词:#f7f9fd 白底 + 深色字被全局 textarea 浅字盖掉 → 浅字不可读 */
+html[data-theme="dark"] .vr-page .remix-history-prompt {
+ border-color: rgba(255, 255, 255, 0.10) !important;
+ background: rgba(255, 255, 255, 0.04) !important;
+}
+html[data-theme="dark"] .vr-page .remix-history-prompt-head strong {
+ color: #e8eaed !important;
+}
+html[data-theme="dark"] .vr-page .remix-history-prompt textarea {
+ border-color: rgba(255, 255, 255, 0.12) !important;
+ color: #e8eaed !important;
+ background: #12151c !important;
+}
+/* 视频复刻专属:结果卡渐变浅底、模式开关、商品卡、临时图、历史 */
+html[data-theme="dark"] .vrep-page .replace-flow-panel,
+html[data-theme="dark"] .vrep-page .replace-result-panel {
+ border-color: rgba(255, 255, 255, 0.10) !important;
+ background: #1a1e26 !important;
+ background-color: #1a1e26 !important;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.4) !important;
+}
+html[data-theme="dark"] .vrep-page .replace-result-panel::before {
+ background: rgba(255, 255, 255, 0.18);
+}
+html[data-theme="dark"] .vrep-page .replace-result-panel.has-result::before {
+ background: #3d6bff;
+}
+html[data-theme="dark"] .vrep-page .replace-mode-switch {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .vrep-page .replace-mode-button {
+ color: rgba(232, 234, 237, 0.62);
+ background: transparent;
+ box-shadow: none;
+}
+html[data-theme="dark"] .vrep-page .replace-mode-button.active {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+ box-shadow: inset 0 0 0 1px rgba(61, 107, 255, 0.35);
+}
+html[data-theme="dark"] .vrep-page .replace-limit-tip {
+ background: rgba(245, 166, 35, 0.12);
+ border-color: rgba(245, 166, 35, 0.35);
+ color: rgba(232, 234, 237, 0.82);
+}
+html[data-theme="dark"] .vrep-page .replace-product-method {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .vrep-page .replace-product-method:hover:not(:disabled):not(.is-disabled) {
+ border-color: rgba(61, 107, 255, 0.4);
+ background: rgba(61, 107, 255, 0.08);
+}
+html[data-theme="dark"] .vrep-page .replace-product-method.active {
+ border-color: #3d6bff;
+ background: rgba(61, 107, 255, 0.14);
+ box-shadow: inset 0 0 0 1px #3d6bff;
+}
+html[data-theme="dark"] .vrep-page .replace-product-method-icon,
+html[data-theme="dark"] .vrep-page .replace-product-method.has-product-preview .replace-product-method-icon {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .vrep-page .replace-product-method > svg {
+ color: rgba(232, 234, 237, 0.45);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-grid {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-cell {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-cell.empty {
+ border-color: rgba(61, 107, 255, 0.28);
+ background: rgba(61, 107, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-more {
+ border-color: rgba(61, 107, 255, 0.35);
+ color: #e8eaed;
+ background: rgba(61, 107, 255, 0.10);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-more > span:first-child {
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-temporary-clear {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .vrep-page .replace-placeholder-visual {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .vrep-page .replace-placeholder-visual > span {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .vrep-page .video-result-placeholder,
+html[data-theme="dark"] .vrep-page .replace-generating-state,
+html[data-theme="dark"] .vrep-page .replace-restoring-state {
+ color: rgba(232, 234, 237, 0.72);
+}
+html[data-theme="dark"] .vrep-page .replace-history-empty,
+html[data-theme="dark"] .vrep-page .replace-history-card {
+ border-color: rgba(255, 255, 255, 0.10) !important;
+ color: rgba(232, 234, 237, 0.72);
+ background: #1a1e26 !important;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35) !important;
+}
+html[data-theme="dark"] .vrep-page .replace-history-summary:hover {
+ background: rgba(61, 107, 255, 0.08);
+}
+html[data-theme="dark"] .vrep-page .replace-history-cover {
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-history-copy > span {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .vrep-page .replace-history-copy strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .vrep-page .replace-history-toggle {
+ border-color: rgba(61, 107, 255, 0.4);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-history-compare {
+ border-top-color: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .vrep-page .video-upload-change {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .vrep-page .replace-generating-frame {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.06);
+ box-shadow: none;
+}
+html[data-theme="dark"] .vrep-page .replace-generating-product {
+ border-color: #1a1e26;
+}
+html[data-theme="dark"] .vrep-page .replace-generating-bar {
+ background: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .vr-page input,
+html[data-theme="dark"] .vr-page textarea,
+html[data-theme="dark"] .vr-page select,
+html[data-theme="dark"] .vrep-page input,
+html[data-theme="dark"] .vrep-page textarea,
+html[data-theme="dark"] .vrep-page select {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+
+/* 专业创作 · 新建项目向导 */
+html[data-theme="dark"] .project-wizard-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --nw-black: #e8eaed;
+ --nw-muted: rgba(232, 234, 237, 0.68);
+ --nw-line: rgba(255, 255, 255, 0.10);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .project-wizard-page .nw-back,
+html[data-theme="dark"] .project-wizard-page .nw-status {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .project-wizard-page .nw-rail,
+html[data-theme="dark"] .project-wizard-page .nw-surface {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+}
+html[data-theme="dark"] .project-wizard-page .nw-rail {
+ background: #161a22;
+}
+html[data-theme="dark"] .project-wizard-page .nw-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .project-wizard-page .nw-card:hover {
+ background: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .project-wizard-page .nw-card.active {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .project-wizard-page .nw-select-trigger,
+html[data-theme="dark"] .project-wizard-page .nw-select-menu {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: #1a1e26;
+ color: #e8eaed;
+}
+html[data-theme="dark"] .project-wizard-page .nw-select-option:hover {
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .project-wizard-page .nw-select-option.selected {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .project-wizard-page .nw-step-mark {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .project-wizard-page .nw-step.current .nw-step-mark {
+ color: #fff;
+ background: #3d6bff;
+}
+html[data-theme="dark"] .project-wizard-page .nw-picked-ph {
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .project-wizard-page .nw-ghost {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .project-wizard-page .nw-next {
+ color: #fff;
+ background: #3d6bff;
+ border-color: #3d6bff;
+}
+
+/* 专业创作 · 生产管线(脚本 / 资产 / 底栏) */
+html[data-theme="dark"] .pipeline-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --pl-muted: rgba(232, 234, 237, 0.68);
+ --pl-line: rgba(255, 255, 255, 0.10);
+ --accent-black: #e8eaed;
+ --black-alpha-40: rgba(232, 234, 237, 0.45);
+ --black-alpha-48: rgba(232, 234, 237, 0.52);
+ --black-alpha-56: rgba(232, 234, 237, 0.62);
+ --ink: #e8eaed;
+ --ink-3: rgba(232, 234, 237, 0.62);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .pipeline-page .pl-back,
+html[data-theme="dark"] .pipeline-page .pl-status {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .pipeline-page .pl-rail,
+html[data-theme="dark"] .pipeline-page .pl-main {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 8px 18px rgba(0, 0, 0, 0.38);
+}
+html[data-theme="dark"] .pipeline-page .pl-rail {
+ background: #161a22;
+}
+html[data-theme="dark"] .pipeline-page .pl-step-mark,
+html[data-theme="dark"] .pipeline-page .pl-picked-ph,
+html[data-theme="dark"] .pipeline-page .pl-picked-card img {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .pl-step.current .pl-step-mark {
+ color: #fff;
+ background: #3d6bff;
+}
+html[data-theme="dark"] .pipeline-page .pl-ghost {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .pipeline-page .pl-next {
+ color: #fff;
+ background: #3d6bff;
+ border-color: #3d6bff;
+}
+html[data-theme="dark"] .pipeline-page .pl-next:disabled,
+html[data-theme="dark"] .pipeline-page .pl-ghost:disabled {
+ color: rgba(232, 234, 237, 0.45);
+ background: rgba(255, 255, 255, 0.08);
+ border-color: transparent;
+}
+
+/* 底栏白条 */
+html[data-theme="dark"] .pipeline-page .stage-foot,
+html[data-theme="dark"] .pipeline-page .as-action-bar {
+ border-top-color: rgba(255, 255, 255, 0.10);
+ background: #161a22 !important;
+}
+
+/* 脚本 · AI 助手白面板(截图最刺眼) */
+html[data-theme="dark"] .pipeline-page .chat-pane {
+ background: #161a22 !important;
+ border-left: 1px solid rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .chat-msg.ai .chat-bubble {
+ border-color: rgba(255, 255, 255, 0.10);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .pipeline-page .chat-msg.user .chat-bubble {
+ color: #e8eaed;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .pipeline-page .chat-input-card {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .pipeline-page .chat-input-area {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .pipeline-page .chat-input-area::placeholder {
+ color: rgba(232, 234, 237, 0.4);
+}
+html[data-theme="dark"] .pipeline-page .chat-icon-btn {
+ border-color: rgba(255, 255, 255, 0.14);
+ color: rgba(232, 234, 237, 0.72);
+}
+html[data-theme="dark"] .pipeline-page .chat-mode {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .pipeline-page .chat-mode.primary {
+ color: #fff;
+ background: #3d6bff;
+ border-color: #3d6bff;
+ box-shadow: none;
+}
+html[data-theme="dark"] .pipeline-page .chat-empty .ce-title {
+ color: #e8eaed;
+}
+
+/* 镜头卡浅蓝头 */
+html[data-theme="dark"] .pipeline-page .shot-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .pipeline-page .shot-head {
+ border-bottom-color: rgba(255, 255, 255, 0.10);
+ background: linear-gradient(180deg, rgba(61, 107, 255, 0.16) 0%, rgba(61, 107, 255, 0.06) 100%) !important;
+ box-shadow: inset 0 3px 0 #3d6bff;
+}
+html[data-theme="dark"] .pipeline-page .shot-title strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .pipeline-page .shot-icon-btn {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.68);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .pipeline-page .shot-area,
+html[data-theme="dark"] .pipeline-page .shot-dialogue {
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .pipeline-page .shot-area:hover {
+ border-color: rgba(61, 107, 255, 0.28);
+ background: rgba(61, 107, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .shot-area:focus {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0 0 0 3px rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .pipeline-page .shot-pills span {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .shot-insert-gap .add-shot-btn {
+ color: #a8bbff;
+ border-color: rgba(61, 107, 255, 0.4);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .pipeline-page .shot-insert-gap .add-shot-btn:hover {
+ background: rgba(61, 107, 255, 0.14);
+ border-color: #3d6bff;
+}
+
+/* 资产选择 · 工作卡 / 生成卡 / 提示词框 */
+html[data-theme="dark"] .pipeline-page .as-work {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04) !important;
+}
+html[data-theme="dark"] .pipeline-page .as-gen {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .pipeline-page .as-gen-preview {
+ border-bottom-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .pipeline-page .as-gen-meta h4,
+html[data-theme="dark"] .pipeline-page .as-gen-meta input {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .pipeline-page .as-gen-meta > span,
+html[data-theme="dark"] .pipeline-page .as-gen-meta-side > span {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .as-gen-prompt {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: #e8eaed !important;
+ background: #12151c !important;
+}
+html[data-theme="dark"] .pipeline-page .as-gen-prompt:focus {
+ border-color: rgba(61, 107, 255, 0.55);
+ background: #12151c !important;
+ box-shadow: 0 0 0 3px rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .pipeline-page .as-ghost-btn {
+ border-color: rgba(61, 107, 255, 0.4);
+ color: #a8bbff;
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .pipeline-page .as-ghost-btn:hover {
+ border-color: #3d6bff;
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .pipeline-page .as-empty {
+ border-color: rgba(61, 107, 255, 0.28);
+ background: rgba(61, 107, 255, 0.06);
+}
+html[data-theme="dark"] .pipeline-page .as-scroll {
+ background: #12151c !important;
+}
+html[data-theme="dark"] .pipeline-page .as-row {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .pipeline-page .as-label {
+ border-color: rgba(61, 107, 255, 0.22);
+ background: linear-gradient(145deg, rgba(61, 107, 255, 0.14), rgba(61, 107, 255, 0.04));
+}
+html[data-theme="dark"] .pipeline-page .as-label > div > span {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .pipeline-page .as-status {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .pipeline-page .as-status.ready {
+ color: #6ddea0;
+ background: rgba(66, 195, 102, 0.16);
+}
+html[data-theme="dark"] .pipeline-page .as-preview {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ box-shadow: none;
+}
+html[data-theme="dark"] .pipeline-page .as-head {
+ border-bottom-color: rgba(255, 255, 255, 0.10);
+}
+html[data-theme="dark"] .pipeline-page .as-slot,
+html[data-theme="dark"] .pipeline-page .as-card {
+ border-color: rgba(255, 255, 255, 0.10);
+}
+
+/* 自由生成 */
+html[data-theme="dark"] .fc-page {
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --fc-black: #e8eaed;
+ --fc-muted: rgba(232, 234, 237, 0.68);
+ --fc-line: rgba(255, 255, 255, 0.10);
+ --fc-wash: rgba(255, 255, 255, 0.045);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .fc-page .fc-back,
+html[data-theme="dark"] .fc-page .fc-ghost,
+html[data-theme="dark"] .fc-page .fc-filter {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.88);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .fc-page .fc-filter.active {
+ color: #0f1115;
+ border-color: #e8eaed;
+ background: #e8eaed;
+}
+html[data-theme="dark"] .fc-page .fc-card {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .fc-page .fc-composer {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: #1a1e26;
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.45);
+}
+html[data-theme="dark"] .fc-page .fc-tag {
+ color: rgba(232, 234, 237, 0.82);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .fc-page .fc-tag.blue {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.18);
+}
+html[data-theme="dark"] .fc-page .fc-tag.green {
+ color: #6ddea0;
+ background: rgba(66, 195, 102, 0.16);
+}
+html[data-theme="dark"] .fc-page .fc-hover-btn,
+html[data-theme="dark"] .fc-page .fc-card-failed {
+ background: rgba(26, 30, 38, 0.92);
+ color: rgba(232, 234, 237, 0.82);
+}
+html[data-theme="dark"] .fc-page .fc-progress-mini {
+ background: rgba(255, 255, 255, 0.12);
+}
+
+
+/* 消息中心 · dark 硬编码浅色收口 */
+html[data-theme="dark"] .msg-page {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .page-head h1 {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-back {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.05);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-back:hover {
+ background: rgba(255, 255, 255, 0.09);
+}
+html[data-theme="dark"] .msg-page .msg-back:focus-visible {
+ box-shadow: 0 0 0 2px #1a1e26, 0 0 0 4px rgba(61, 107, 255, 0.4);
+}
+html[data-theme="dark"] .msg-page .msg-ghost {
+ border-color: rgba(255, 255, 255, 0.12);
+ color: rgba(232, 234, 237, 0.9);
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .msg-page .msg-ghost:hover:not(:disabled) {
+ background: rgba(255, 255, 255, 0.09);
+}
+html[data-theme="dark"] .msg-page .msg-ghost:disabled {
+ color: rgba(232, 234, 237, 0.36);
+ border-color: rgba(255, 255, 255, 0.07);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .msg-page .msg-primary {
+ background: #3d6bff;
+ box-shadow: 0 9px 18px rgba(61, 107, 255, 0.28);
+}
+html[data-theme="dark"] .msg-page .msg-primary:hover {
+ background: #5a82ff;
+}
+html[data-theme="dark"] .msg-page .msg-primary.is-active,
+html[data-theme="dark"] .msg-page .msg-ghost.is-active {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+ border-color: rgba(61, 107, 255, 0.28);
+}
+html[data-theme="dark"] .msg-page .msg-workbench {
+ border-color: rgba(255, 255, 255, 0.10);
+ background: rgba(255, 255, 255, 0.03);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
+}
+html[data-theme="dark"] .msg-page .msg-inbox {
+ border-right-color: rgba(255, 255, 255, 0.10);
+ background: #1a1e26;
+}
+html[data-theme="dark"] .msg-page .msg-detail {
+ background: #1a1e26;
+}
+html[data-theme="dark"] .msg-page .msg-toolbar {
+ border-bottom-color: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .msg-page .msg-filter {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .msg-page .msg-filter:hover {
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.1);
+}
+/* --st-black 在深色下已是浅字色,不能再当选中底 */
+html[data-theme="dark"] .msg-page .msg-filter.active,
+html[data-theme="dark"] .msg-page .msg-filter.active.is-muted {
+ color: #0f1115;
+ background: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-filter.is-muted:not(.active) {
+ color: rgba(232, 234, 237, 0.48);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .msg-page .msg-search {
+ border-color: rgba(255, 255, 255, 0.14);
+ background: #14171c;
+ color: rgba(232, 234, 237, 0.72);
+}
+html[data-theme="dark"] .msg-page .msg-search:focus-within {
+ border-color: rgba(61, 107, 255, 0.55);
+ box-shadow: inset 0 0 0 1px rgba(61, 107, 255, 0.4);
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-search input {
+ background: transparent;
+ border: 0;
+ box-shadow: none;
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-search input::placeholder {
+ color: rgba(232, 234, 237, 0.42);
+}
+html[data-theme="dark"] .msg-page .msg-item {
+ border-bottom-color: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .msg-page .msg-item:hover {
+ background: rgba(255, 255, 255, 0.05);
+}
+html[data-theme="dark"] .msg-page .msg-item.active {
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] .msg-page .msg-item-icon {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.16);
+}
+html[data-theme="dark"] .msg-page .msg-item-icon.billing {
+ color: #e6c35c;
+ background: rgba(236, 183, 48, 0.16);
+}
+html[data-theme="dark"] .msg-page .msg-item-icon.system {
+ color: rgba(232, 234, 237, 0.72);
+ background: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .msg-page .msg-item-icon.team {
+ color: #6ddea0;
+ background: rgba(66, 195, 102, 0.16);
+}
+html[data-theme="dark"] .msg-page .msg-item strong {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-item.read strong {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .msg-page .msg-item .txt,
+html[data-theme="dark"] .msg-page .msg-time,
+html[data-theme="dark"] .msg-page .msg-mute-note {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .msg-page .msg-load-more {
+ border-top-color: rgba(255, 255, 255, 0.08);
+ color: rgba(232, 234, 237, 0.62);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] .msg-page .msg-skel-bar,
+html[data-theme="dark"] .msg-page .msg-skel-ico,
+html[data-theme="dark"] .msg-page .msg-skel-time,
+html[data-theme="dark"] .msg-page .msg-skel-more span {
+ background-color: rgba(255, 255, 255, 0.08);
+ background-image: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
+}
+html[data-theme="dark"] .msg-page .msg-skel-row {
+ border-bottom-color: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .msg-page .msg-empty,
+html[data-theme="dark"] .msg-page .msg-detail-empty {
+ color: rgba(232, 234, 237, 0.62);
+ background: transparent;
+}
+html[data-theme="dark"] .msg-page .msg-detail-empty .ic {
+ background: rgba(255, 255, 255, 0.06);
+}
+html[data-theme="dark"] .msg-page .msg-detail-body {
+ background: transparent;
+}
+html[data-theme="dark"] .msg-page .msg-summary,
+html[data-theme="dark"] .msg-page .msg-timeline,
+html[data-theme="dark"] .msg-page .msg-step {
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .msg-page .msg-summary span,
+html[data-theme="dark"] .msg-page .msg-timeline-h,
+html[data-theme="dark"] .msg-page .msg-step .t {
+ color: rgba(232, 234, 237, 0.62);
+}
+html[data-theme="dark"] .msg-page .msg-summary strong,
+html[data-theme="dark"] .msg-page .msg-step .d,
+html[data-theme="dark"] .msg-page .ic-t {
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-step {
+ border-top-color: rgba(255, 255, 255, 0.08);
+}
+html[data-theme="dark"] .msg-page .msg-related {
+ color: #a8bbff;
+}
+html[data-theme="dark"] .msg-page .msg-related:hover {
+ color: #c5d2ff;
+}
+html[data-theme="dark"] .msg-page .msg-log {
+ background: #0f1115;
+ color: #e8eaed;
+}
+html[data-theme="dark"] .msg-page .msg-detail-f {
+ border-top-color: rgba(255, 255, 255, 0.08);
+ background: rgba(26, 30, 38, 0.92);
+}
diff --git a/core/frontend/src/design-restraint.css b/core/frontend/src/design-restraint.css
index a978120..75b7a6b 100644
--- a/core/frontend/src/design-restraint.css
+++ b/core/frontend/src/design-restraint.css
@@ -153,8 +153,228 @@
--shadow-cta-active:
0 1px 2px rgba(0, 47, 167, .18);
--shadow-floating: 0 8px 28px rgba(17, 19, 24, .06);
+
+ /* 容器四角准星:用 mask 着色,让它跟随当前主题的边框层级。 */
+ --corner-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 21'%3E%3Cpath fill='%23000' d='M10.5 4C10.5 7.31371 7.81371 10 4.5 10H0.5V11H4.5C7.81371 11 10.5 13.6863 10.5 17V21H11.5V17C11.5 13.6863 14.1863 11 17.5 11H21.5V10H17.5C14.1863 10 11.5 7.31371 11.5 4V0H10.5V4Z'/%3E%3C/svg%3E");
}
+
+/* ============================================================
+ Dark theme · 同一套语义 token 反色
+ 由 html[data-theme="dark"] 驱动(见 theme.ts / settings 外观)
+ ============================================================ */
+html[data-theme="dark"] {
+ color-scheme: dark;
+
+ --background-base: #0f1115;
+ --background-lighter: #14171c;
+ --surface: #181b21;
+ --surface-raised: #1e2229;
+
+ --border-faint: #2a2f38;
+ --border-muted: #323843;
+ --border-loud: #3c4450;
+
+ /* 主文字走近白;accent-white 保持真白(按钮/反色字) */
+ --accent-black: #e8eaed;
+ --accent-white: #ffffff;
+ --nav-active: #e8eaed;
+
+ --forest-bg: rgba(66, 195, 102, .14);
+ --forest-bd: rgba(66, 195, 102, .32);
+ --crimson-bg: rgba(235, 52, 36, .14);
+ --crimson-bd: rgba(235, 52, 36, .32);
+ --honey-bg: rgba(236, 183, 48, .14);
+ --honey-bd: rgba(236, 183, 48, .32);
+
+ /* 克莱因在深底上略提亮,避免发灰 */
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --heat: var(--klein);
+ --heat-hover: var(--klein-hover);
+
+ --black: var(--accent-black);
+ --text: var(--accent-black);
+ --heat-90: rgba(61, 107, 255, .90);
+ --heat-40: rgba(61, 107, 255, .40);
+ --heat-20: rgba(61, 107, 255, .20);
+ --heat-16: rgba(61, 107, 255, .16);
+ --heat-12: rgba(61, 107, 255, .14);
+ --heat-8: rgba(61, 107, 255, .10);
+ --heat-4: rgba(61, 107, 255, .06);
+
+ /* black-alpha → 白透明阶梯(同语义:轻微叠色) */
+ --black-alpha-1: rgba(255, 255, 255, .015);
+ --black-alpha-2: rgba(255, 255, 255, .025);
+ --black-alpha-3: rgba(255, 255, 255, .035);
+ --black-alpha-4: rgba(255, 255, 255, .05);
+ --black-alpha-5: rgba(255, 255, 255, .06);
+ --black-alpha-6: rgba(255, 255, 255, .07);
+ --black-alpha-7: rgba(255, 255, 255, .08);
+ --black-alpha-8: rgba(255, 255, 255, .09);
+ --black-alpha-10: rgba(255, 255, 255, .11);
+ --black-alpha-12: rgba(255, 255, 255, .13);
+ --black-alpha-16: rgba(255, 255, 255, .16);
+ --black-alpha-20: rgba(255, 255, 255, .20);
+ --black-alpha-24: rgba(255, 255, 255, .24);
+ --black-alpha-32: rgba(255, 255, 255, .32);
+ --black-alpha-40: rgba(255, 255, 255, .40);
+ --black-alpha-48: rgba(255, 255, 255, .48);
+ --black-alpha-56: rgba(255, 255, 255, .56);
+ --black-alpha-64: rgba(255, 255, 255, .64);
+ --black-alpha-72: rgba(255, 255, 255, .72);
+ --black-alpha-88: rgba(255, 255, 255, .88);
+
+ --shadow-cta:
+ 0 1px 2px rgba(61, 107, 255, .22),
+ 0 6px 16px rgba(61, 107, 255, .28);
+ --shadow-cta-hover:
+ 0 2px 4px rgba(61, 107, 255, .26),
+ 0 10px 22px rgba(61, 107, 255, .34);
+ --shadow-cta-active:
+ 0 1px 2px rgba(61, 107, 255, .22);
+ --shadow-floating: 0 8px 28px rgba(0, 0, 0, .45);
+
+ /* styles.css legacy aliases */
+ --bg: var(--background-base);
+ --bg-soft: var(--background-lighter);
+ --card: var(--surface);
+ --border: var(--border-faint);
+ --border-soft: var(--border-muted);
+ --ink: var(--accent-black);
+ --ink-2: rgba(232, 234, 237, .72);
+ --ink-3: rgba(232, 234, 237, .52);
+ --ink-4: rgba(232, 234, 237, .32);
+ --orange: var(--klein);
+ --orange-soft: var(--heat-40);
+ --orange-tint: var(--heat-8);
+ --orange-hover: var(--klein-hover);
+ --green: #6dd88a;
+ --green-bg: var(--forest-bg);
+ --green-bd: var(--forest-bd);
+ --red: #ff6b5c;
+ --red-bg: var(--crimson-bg);
+ --red-bd: var(--crimson-bd);
+}
+
+/* 壳层硬编码浅色 → dark 对齐 */
+html[data-theme="dark"] aside.sidebar {
+ /* 盖过 aside.sidebar 本地 --klein:#002fa7,否则子菜单 active 仍是深蓝 */
+ --klein: #3d6bff;
+ --klein-hover: #5a82ff;
+ --st-black: #e8eaed;
+ border-right-color: rgba(255, 255, 255, 0.08);
+ background: rgba(255, 255, 255, 0.03);
+}
+html[data-theme="dark"] aside.sidebar .nav-submenu {
+ border-left-color: rgba(61, 107, 255, 0.32);
+}
+html[data-theme="dark"] aside.sidebar .nav-subitem {
+ color: rgba(232, 234, 237, 0.78);
+}
+html[data-theme="dark"] aside.sidebar .nav-subitem:hover {
+ color: #a8bbff;
+ background: rgba(61, 107, 255, 0.14);
+}
+html[data-theme="dark"] aside.sidebar .nav-subitem.active {
+ color: #c5d2ff;
+ background: rgba(61, 107, 255, 0.2);
+}
+html[data-theme="dark"] aside.sidebar .nav-subitem.active::before {
+ box-shadow: 0 0 0 4px rgba(61, 107, 255, 0.22);
+}
+html[data-theme="dark"] aside.sidebar .nav-subitem .pill-mini {
+ background: rgba(255, 255, 255, 0.1);
+ color: #a8bbff;
+}
+html[data-theme="dark"] .sidebar-head {
+ border-bottom-color: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .brand-logo {
+ mix-blend-mode: normal;
+ filter: brightness(0) invert(1);
+ opacity: 0.92;
+}
+html[data-theme="dark"] aside.sidebar .nav-item {
+ color: rgba(232, 234, 237, 0.78);
+}
+html[data-theme="dark"] aside.sidebar .nav-item .nav-desc,
+html[data-theme="dark"] aside.sidebar .nav-item .nav-sub {
+ color: rgba(232, 234, 237, 0.42);
+}
+html[data-theme="dark"] aside.sidebar .nav-item.active,
+html[data-theme="dark"] aside.sidebar .nav-item[aria-current="page"] {
+ color: #e8eaed;
+}
+html[data-theme="dark"] aside.sidebar .org-switcher,
+html[data-theme="dark"] aside.sidebar .org-switcher span {
+ color: rgba(232, 234, 237, 0.78);
+}
+html[data-theme="dark"] aside.sidebar .org-switcher svg {
+ color: rgba(232, 234, 237, 0.48);
+}
+html[data-theme="dark"] .user .av {
+ background: #3a4050;
+ color: #fff;
+}
+html[data-theme="dark"] .grid-bg {
+ background-image:
+ linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px);
+}
+html[data-theme="dark"] .topbar {
+ border-bottom-color: rgba(255, 255, 255, 0.08);
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
+}
+html[data-theme="dark"] .top-search {
+ border-color: #3a4050;
+ color: #e8eaed;
+ background: rgba(255, 255, 255, 0.04);
+}
+html[data-theme="dark"] .top-search:hover {
+ border-color: #4a5160;
+ background: rgba(255, 255, 255, 0.07);
+}
+html[data-theme="dark"] .queue-chip,
+html[data-theme="dark"] .balance-chip {
+ border-color: var(--border-faint);
+ background: var(--surface);
+}
+
+html[data-theme="dark"] aside.sidebar .nav-item .nav-chevron {
+ color: rgba(232, 234, 237, 0.42);
+}
+html[data-theme="dark"] aside.sidebar .nav-item:hover {
+ color: #e8eaed;
+}
+html[data-theme="dark"] aside.sidebar .liquid-shape {
+ /* 深色下不用纯黑胶囊,改用品牌蓝选中态 */
+ color: #3d6bff;
+ filter: drop-shadow(0 5px 10px rgba(61, 107, 255, 0.28));
+}
+html[data-theme="dark"] aside.sidebar .nav-liquid,
+html[data-theme="dark"] aside.sidebar .nav-capsule {
+ background: rgba(61, 107, 255, 0.12);
+ box-shadow: 0 0 0 4px rgba(61, 107, 255, 0.12);
+}
+html[data-theme="dark"] .main,
+html[data-theme="dark"] .content,
+html[data-theme="dark"] .page {
+ background: var(--background-base);
+ color: var(--accent-black);
+}
+html[data-theme="dark"] .icon-btn {
+ background: var(--surface);
+ border-color: var(--border-faint);
+ color: var(--black-alpha-64);
+}
+html[data-theme="dark"] .icon-btn:hover {
+ background: var(--background-lighter);
+ color: var(--accent-black);
+ border-color: var(--border-loud);
+}
+
+
::selection { background: var(--heat-20); color: var(--heat); }
html, body {
@@ -268,7 +488,7 @@ aside.sidebar {
min-height: var(--topbar-height);
box-sizing: border-box;
overflow: hidden;
- background: #fff;
+ background: var(--surface);
border-bottom: 1px solid rgba(27, 32, 40, 0.07);
}
.brand { display: flex; align-items: center; justify-content: center; min-width: 0; color: var(--accent-black); }
@@ -607,7 +827,7 @@ aside.sidebar .nav-subitem .pill-mini {
padding: 0 5px;
border: 0;
border-radius: 999px;
- background: #fff;
+ background: var(--surface);
color: var(--klein);
font-size: 11px;
font-weight: 600;
@@ -619,7 +839,7 @@ aside.sidebar .liquid-indicator {
top: 0;
left: 0;
z-index: 2;
- width: 132px;
+ width: 152px;
height: 76px;
pointer-events: none;
transition: transform 520ms cubic-bezier(0.22, 1, 0.36, 1);
@@ -635,6 +855,7 @@ aside.sidebar .liquid-shape {
width: 100%;
height: 100%;
overflow: visible;
+ color: #101012;
filter: drop-shadow(0 5px 7px rgba(0, 0, 0, 0.14));
transform-origin: left center;
}
@@ -651,7 +872,7 @@ aside.sidebar .indicator-content {
top: 0;
left: 33px;
height: 76px;
- width: 94px;
+ width: 112px;
display: flex;
align-items: center;
gap: 9px;
@@ -776,7 +997,7 @@ body.sidebar-collapsed .user::after { display: none; }
grid-column: 2;
grid-row: 2;
position: relative;
- background: #fff;
+ background: var(--surface);
min-width: 0;
min-height: 0;
overflow-x: clip;
@@ -827,7 +1048,7 @@ body.sidebar-collapsed .user::after { display: none; }
display: flex; align-items: center; gap: 16px;
padding: 0 clamp(36px, 3.2vw, 68px);
border-bottom: 1px solid rgba(27, 32, 40, 0.08);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 4px 16px rgba(20, 27, 38, 0.035);
position: sticky; top: 0; z-index: var(--z-topbar);
align-self: start;
@@ -1168,8 +1389,11 @@ body.sidebar-collapsed .user::after { display: none; }
.with-corners .corner-tr, .with-corners .corner-bl {
content: ''; position: absolute;
width: 14px; height: 14px;
- background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 21' fill='%23e8e8e8'%3E%3Cpath d='M10.5 4C10.5 7.31371 7.81371 10 4.5 10H0.5V11H4.5C7.81371 11 10.5 13.6863 10.5 17V21H11.5V17C11.5 13.6863 14.1863 11 17.5 11H21.5V10H17.5C14.1863 10 11.5 7.31371 11.5 4V0H10.5V4Z'/%3E%3C/svg%3E") no-repeat center;
- background-size: contain;
+ background-color: var(--border-muted);
+ -webkit-mask: var(--corner-mark) center / contain no-repeat;
+ mask: var(--corner-mark) center / contain no-repeat;
+ color: transparent;
+ font-size: 0;
pointer-events: none;
}
.card-hard.with-corners::before { top: -7px; left: -7px; }
@@ -2269,6 +2493,11 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
color: var(--black-alpha-56);
font-weight: 500;
}
+html[data-theme="dark"] .placeholder .ph-frame {
+ background: var(--surface-raised);
+ border-color: var(--border-faint);
+ color: var(--black-alpha-56);
+}
.placeholder.has-mock-media {
background-color: var(--background-lighter);
background-image: var(--mock-media-url);
@@ -2599,6 +2828,7 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
margin: 6px 4px;
}
+
/* ─── Modal ─── */
.modal-bg {
position: fixed; inset: 0;
@@ -2632,24 +2862,27 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
content: '';
position: absolute;
width: 14px; height: 14px;
- background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 21' fill='%23e8e8e8'%3E%3Cpath d='M10.5 4C10.5 7.31371 7.81371 10 4.5 10H0.5V11H4.5C7.81371 11 10.5 13.6863 10.5 17V21H11.5V17C11.5 13.6863 14.1863 11 17.5 11H21.5V10H17.5C14.1863 10 11.5 7.31371 11.5 4V0H10.5V4Z'/%3E%3C/svg%3E") no-repeat center;
- background-size: contain;
+ background-color: var(--border-muted);
+ -webkit-mask: var(--corner-mark) center / contain no-repeat;
+ mask: var(--corner-mark) center / contain no-repeat;
pointer-events: none;
- color: var(--black-alpha-48);
- font-family: var(--font-mono);
- font-size: 13px; line-height: 1;
+ z-index: 1;
}
-.modal::before { top: -7px; left: -7px; }
-.modal::after { bottom: -7px; right: -7px; }
+.modal::before { top: 0; left: 0; }
+.modal::after { bottom: 0; right: 0; }
.modal .corner-tr, .modal .corner-bl {
position: absolute;
width: 14px; height: 14px;
- background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 21' fill='%23e8e8e8'%3E%3Cpath d='M10.5 4C10.5 7.31371 7.81371 10 4.5 10H0.5V11H4.5C7.81371 11 10.5 13.6863 10.5 17V21H11.5V17C11.5 13.6863 14.1863 11 17.5 11H21.5V10H17.5C14.1863 10 11.5 7.31371 11.5 4V0H10.5V4Z'/%3E%3C/svg%3E") no-repeat center;
- background-size: contain;
+ background-color: var(--border-muted);
+ -webkit-mask: var(--corner-mark) center / contain no-repeat;
+ mask: var(--corner-mark) center / contain no-repeat;
+ color: transparent;
+ font-size: 0;
pointer-events: none;
+ z-index: 1;
}
-.modal .corner-tr { top: -7px; right: -7px; }
-.modal .corner-bl { bottom: -7px; left: -7px; }
+.modal .corner-tr { top: 0; right: 0; }
+.modal .corner-bl { bottom: 0; left: 0; }
.modal-h {
padding: 22px 24px 16px;
border-bottom: 1px solid var(--border-faint);
@@ -2716,6 +2949,12 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
font-family: inherit;
}
.card-del-btn svg { width: 14px; height: 14px; }
+html[data-theme="dark"] .card-del-btn {
+ background: var(--surface-raised);
+ border-color: var(--border-faint);
+ color: var(--black-alpha-56);
+ box-shadow: none;
+}
.product-card:hover .card-del-btn,
.asset-card:hover .card-del-btn,
.project-card:hover .card-del-btn,
@@ -2804,10 +3043,18 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
position: fixed; top: 0; left: 0; bottom: 0;
width: var(--sidebar-width);
z-index: 1200;
+ /* 手机上的侧栏是抽屉,必须遮住页面内容,不能沿用桌面端的半透明背景。 */
+ background: var(--surface-raised);
+ border-right-color: var(--border-faint);
transform: translateX(-100%);
transition: transform .28s cubic-bezier(.32, .72, 0, 1);
box-shadow: 0 0 40px rgba(0, 0, 0, .18);
}
+ /* 暗色桌面侧栏可保留轻透层;窄屏抽屉必须是实底,避免透出页面内容。 */
+ html[data-theme="dark"] aside.sidebar {
+ background: var(--surface-raised);
+ border-right-color: var(--border-faint);
+ }
/* 抽屉里收窄态不适用,强制展开宽度,避免 body.sidebar-collapsed 把抽屉压成 96px */
body.sidebar-collapsed aside.sidebar { width: var(--sidebar-width); }
aside.sidebar.mobile-open { transform: translateX(0); }
@@ -2822,8 +3069,22 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
}
.mobile-nav-btn span { display: block; width: 16px; height: 1.6px; background: var(--accent-black); border-radius: 2px; }
.mobile-nav-backdrop { position: fixed; inset: 0; z-index: 1150; background: rgba(21, 20, 15, .42); }
- /* 顶栏给汉堡键让出左侧空间 */
- .topbar { padding-left: 64px; }
+ /* 顶栏给汉堡键让出左侧空间;搜索与余额压缩为单行工具,避免中文在窄窗逐字折行。 */
+ .topbar { padding: 0 16px 0 64px; gap: 8px; }
+ .topbar .right { gap: 8px; flex: 0 0 auto; }
+ .top-search {
+ width: 40px;
+ min-width: 40px;
+ padding: 0;
+ justify-content: center;
+ }
+ .top-search span { display: none; }
+ .balance-chip {
+ flex: 0 0 auto;
+ padding: 0 12px;
+ white-space: nowrap;
+ }
+ .balance-chip-label { display: none; }
.stats { grid-template-columns: repeat(2, 1fr); }
.stat:nth-child(2) { border-right: 0; }
.stat:nth-child(1), .stat:nth-child(2) { border-bottom: 1px solid var(--border-faint); }
@@ -2899,7 +3160,7 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
left: 0;
width: 252px;
padding: 11px 13px 14px;
- background: #fff;
+ background: var(--surface);
color: var(--accent-black);
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: var(--r-md);
@@ -2921,7 +3182,7 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
position: absolute;
top: -5px; left: 14px;
width: 10px; height: 10px;
- background: #fff;
+ background: var(--surface);
border-left: 1px solid rgba(34, 42, 54, 0.10);
border-top: 1px solid rgba(34, 42, 54, 0.10);
transform: rotate(45deg);
diff --git a/core/frontend/src/free-create-page.css b/core/frontend/src/free-create-page.css
index 54e1e53..0d7642f 100644
--- a/core/frontend/src/free-create-page.css
+++ b/core/frontend/src/free-create-page.css
@@ -334,7 +334,7 @@
border: 1px solid rgba(28, 34, 43, 0.12);
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
cursor: pointer;
@@ -598,7 +598,7 @@
max-width: 280px;
max-height: 260px;
overflow-y: auto;
- background: #fff;
+ background: var(--surface);
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: 12px;
box-shadow: 0 12px 30px rgba(20, 27, 38, 0.12);
@@ -708,7 +708,7 @@
left: 0;
z-index: 60;
min-width: 180px;
- background: #fff;
+ background: var(--surface);
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: 12px;
box-shadow: 0 12px 30px rgba(20, 27, 38, 0.12);
diff --git a/core/frontend/src/library-page.css b/core/frontend/src/library-page.css
index e3faf69..2777eed 100644
--- a/core/frontend/src/library-page.css
+++ b/core/frontend/src/library-page.css
@@ -124,7 +124,7 @@
padding: 0 13px;
border: 1px solid var(--lib-line);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
}
.library-page .lib-search svg { width: 16px; height: 16px; flex: 0 0 auto; color: var(--lib-muted); }
.library-page .lib-search input {
@@ -152,7 +152,7 @@
border: 1px solid rgba(34, 42, 54, 0.12);
border-radius: 10px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
text-align: left;
@@ -175,7 +175,7 @@
padding: 6px;
border: 1px solid var(--lib-line);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 14px 34px rgba(20, 27, 38, 0.14);
opacity: 0;
visibility: hidden;
@@ -197,7 +197,7 @@
border: 0;
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
text-align: left;
diff --git a/core/frontend/src/main.tsx b/core/frontend/src/main.tsx
index 487756c..75e0b96 100644
--- a/core/frontend/src/main.tsx
+++ b/core/frontend/src/main.tsx
@@ -1,3 +1,4 @@
+import { applyTheme, readStoredAppearance } from "./theme";
import { createRoot } from "react-dom/client";
import { App } from "./App";
import "./styles.css";
@@ -22,5 +23,8 @@ import "./quick-create-page.css";
import "./admin-page.css";
import "./omni-create-page.css";
import "./omni-session-page.css";
+import "./dark-mode-pages.css";
+
+applyTheme(readStoredAppearance());
createRoot(document.getElementById("root")!).render(
);
diff --git a/core/frontend/src/messages-page.css b/core/frontend/src/messages-page.css
index 8bee58b..9540486 100644
--- a/core/frontend/src/messages-page.css
+++ b/core/frontend/src/messages-page.css
@@ -50,7 +50,7 @@
padding: 0;
border-radius: 8px;
border: 1px solid rgba(28, 34, 43, 0.12);
- background: #fff;
+ background: var(--surface);
color: var(--st-text);
cursor: pointer;
}
@@ -178,7 +178,7 @@
padding: 0 13px;
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
color: var(--st-muted);
}
.msg-search input {
@@ -196,6 +196,8 @@
flex: 1;
min-height: 0;
overflow-y: auto;
+ display: flex;
+ flex-direction: column;
}
.msg-load-more {
padding: 14px 16px 18px;
@@ -274,6 +276,7 @@
}
.msg-empty {
+ flex: 1;
min-height: 320px;
display: grid;
place-items: center;
diff --git a/core/frontend/src/models-page.css b/core/frontend/src/models-page.css
index e05fe52..b43a4e2 100644
--- a/core/frontend/src/models-page.css
+++ b/core/frontend/src/models-page.css
@@ -204,6 +204,7 @@
pointer-events: none;
}
.models-page .ml-check svg { width: 13px; height: 13px; }
+.models-page.manage-mode .ml-card:not(.selectable) { cursor: not-allowed; }
.models-page.manage-mode .ml-card.selectable .ml-check { display: grid; }
.models-page.manage-mode .ml-card.selected .ml-check {
color: #fff;
@@ -383,7 +384,7 @@
padding: 0 12px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 999px;
- background: #fff;
+ background: var(--surface);
color: #414750;
font-size: 12px;
cursor: pointer;
diff --git a/core/frontend/src/omni-create-page.css b/core/frontend/src/omni-create-page.css
index 3293f07..cfeac68 100644
--- a/core/frontend/src/omni-create-page.css
+++ b/core/frontend/src/omni-create-page.css
@@ -36,24 +36,31 @@
position: absolute;
top: 20px;
right: 0;
- height: 40px;
+ height: 36px;
display: inline-flex;
align-items: center;
- gap: 8px;
+ gap: 6px;
padding: 0 14px;
- border: 1.5px solid rgba(16, 16, 18, .22);
- border-radius: 12px;
- color: var(--black);
- background: #fff;
+ border: 1px solid var(--border-faint);
+ border-radius: var(--r-md);
+ color: var(--black-alpha-56);
+ background: transparent;
font-size: 13px;
- font-weight: 650;
- box-shadow: 0 4px 12px rgba(16, 16, 18, .08);
+ font-weight: 500;
+ box-shadow: none;
cursor: pointer;
+ transition: background-color var(--t-base), border-color var(--t-base), color var(--t-base);
}
.omni-home-history:hover {
- border-color: var(--black);
- background: #f7f7f8;
+ border-color: var(--black-alpha-24);
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+
+.omni-home-history:focus-visible {
+ outline: none;
+ box-shadow: 0 0 0 2px var(--background-base), 0 0 0 4px var(--heat-40);
}
.omni-home-history svg {
@@ -378,7 +385,7 @@
padding: 8px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 13px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 18px 38px rgba(20, 27, 38, .15);
}
@@ -447,7 +454,7 @@
padding: 8px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 13px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 18px 38px rgba(20, 27, 38, .15);
}
@@ -582,7 +589,7 @@
.omni-parameter .custom-select-trigger:hover,
.omni-parameter .custom-select-shell.open .custom-select-trigger {
border-color: rgba(0, 47, 167, .36);
- background: #fff;
+ background: var(--surface);
}
.omni-parameter .custom-select-trigger svg {
@@ -640,7 +647,7 @@
.omni-duration-trigger:hover,
.omni-duration-trigger[aria-expanded="true"] {
border-color: rgba(0, 47, 167, .36);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 0 0 3px rgba(0, 47, 167, .07);
}
@@ -664,7 +671,7 @@
padding: 16px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 16px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 18px 38px rgba(20, 27, 38, .15);
}
@@ -738,7 +745,7 @@
border: 0;
border-radius: 8px;
color: #575e69;
- background: #fff;
+ background: var(--surface);
font-size: 12px;
text-align: left;
cursor: pointer;
@@ -995,15 +1002,15 @@
.omni-preset-dialog {
position: relative;
z-index: 1;
- width: min(1040px, 100%);
+ width: min(1180px, 100%);
display: grid;
- grid-template-columns: 440px minmax(0, 1fr);
- gap: 42px;
- padding: 30px;
+ grid-template-columns: 500px minmax(0, 1fr);
+ gap: 32px;
+ padding: 28px;
border: 1px solid rgba(34, 42, 54, .10);
border-top: 3px solid var(--klein);
border-radius: 20px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 28px 70px rgba(10, 17, 30, .22);
animation: omniMessageIn 180ms ease both;
}
@@ -1139,7 +1146,7 @@
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 10px;
color: #616873;
- background: #fff;
+ background: var(--surface);
font-size: 13px;
cursor: pointer;
}
@@ -1231,7 +1238,7 @@
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 10px;
color: #414750;
- background: #fff;
+ background: var(--surface);
cursor: pointer;
}
@@ -1307,35 +1314,34 @@
.omni-history-list {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
- gap: 18px;
+ gap: 14px;
}
.omni-history-item {
min-width: 0;
display: grid;
- grid-template-columns: 150px minmax(0, 1fr) 70px;
+ grid-template-columns: 150px minmax(0, 1fr) 36px;
align-items: center;
- gap: 20px;
- padding: 17px;
+ gap: 16px;
+ padding: 16px;
border: 1px solid rgba(34, 42, 54, .09);
- border-radius: 19px;
+ border-radius: var(--r-md);
background: rgba(255, 255, 255, .96);
cursor: pointer;
- box-shadow: 0 8px 22px rgba(20, 27, 38, .05);
- transition: transform 170ms ease, border-color 170ms ease, box-shadow 170ms ease;
+ box-shadow: none;
+ transition: border-color 170ms ease, background-color 170ms ease;
}
.omni-history-item:hover {
- transform: translateY(-2px);
border-color: rgba(0, 47, 167, .30);
- box-shadow: 0 13px 26px rgba(20, 27, 38, .09);
+ background: var(--background-lighter);
}
.omni-history-item > img {
width: 150px;
height: 112px;
display: block;
- border-radius: 13px;
+ border-radius: var(--r-md);
object-fit: cover;
background: #edf0f4;
}
@@ -1354,21 +1360,24 @@
}
.omni-history-item h2 {
- margin: 8px 0 7px;
- font-size: 17px;
- line-height: 1.35;
+ margin: 6px 0 5px;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 1.4;
}
.omni-history-item p,
.omni-history-item small {
color: #858b94;
- font-size: 14px;
- line-height: 1.45;
+ font-size: 13px;
+ line-height: 1.55;
}
.omni-history-item small {
display: block;
- margin-top: 9px;
+ margin-top: 7px;
+ font-family: var(--font-mono);
+ font-size: 11px;
}
.omni-history-actions {
@@ -1389,14 +1398,16 @@
}
.omni-history-actions button {
- width: 36px;
- height: 36px;
+ width: 32px;
+ height: 32px;
display: grid;
place-items: center;
+ border: 1px solid transparent;
border-radius: 8px;
color: #858b94;
- background: #f4f5f7;
+ background: transparent;
cursor: pointer;
+ transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease, opacity 160ms ease;
}
.omni-history-actions button:hover {
@@ -1404,6 +1415,25 @@
background: #fff0f0;
}
+@media (hover: hover) {
+ .omni-history-actions button {
+ opacity: 0;
+ pointer-events: none;
+ }
+
+ .omni-history-item:hover .omni-history-actions button,
+ .omni-history-item:focus-within .omni-history-actions button,
+ .omni-history-actions button:focus-visible {
+ opacity: 1;
+ pointer-events: auto;
+ }
+
+ .omni-history-item:hover .omni-history-actions button {
+ border-color: rgba(34, 42, 54, .09);
+ background: #f4f5f7;
+ }
+}
+
.omni-delete-confirm {
position: fixed;
inset: 0;
@@ -1432,7 +1462,7 @@
padding: 26px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 17px;
- background: #fff;
+ background: var(--surface);
text-align: center;
box-shadow: 0 26px 64px rgba(10, 17, 30, .22);
animation: omniMessageIn 180ms ease both;
@@ -1476,7 +1506,7 @@
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 9px;
color: #5e6570;
- background: #fff;
+ background: var(--surface);
font-size: 12px;
font-weight: 650;
cursor: pointer;
@@ -1547,7 +1577,7 @@
.omni-parameter .rs-select-btn:hover,
.omni-parameter .rs-select.open .rs-select-btn {
border-color: rgba(0, 47, 167, .36);
- background: #fff;
+ background: var(--surface);
}
.omni-parameter .rs-select-btn svg {
diff --git a/core/frontend/src/omni-session-page.css b/core/frontend/src/omni-session-page.css
index 664b9e3..25a0d7c 100644
--- a/core/frontend/src/omni-session-page.css
+++ b/core/frontend/src/omni-session-page.css
@@ -71,12 +71,25 @@
align-items: center;
justify-content: center;
gap: 7px;
- border: 1px solid rgba(34, 42, 54, .10);
- border-radius: 10px;
- color: #414750;
- background: #fff;
+ border: 1px solid var(--border-faint);
+ border-radius: var(--r-md);
+ color: var(--black-alpha-56);
+ background: transparent;
font-size: 12px;
+ font-weight: 500;
cursor: pointer;
+ transition: background-color var(--t-base), border-color var(--t-base), color var(--t-base);
+}
+
+.omni-session-back:hover {
+ border-color: var(--black-alpha-24);
+ color: var(--accent-black);
+ background: var(--black-alpha-4);
+}
+
+.omni-session-back:focus-visible {
+ outline: none;
+ box-shadow: 0 0 0 2px var(--background-base), 0 0 0 4px var(--heat-40);
}
.omni-session-back svg {
@@ -375,7 +388,7 @@
margin: 0 0 24px 44px;
border: 1px solid rgba(34, 42, 54, .09);
border-radius: 15px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 10px 26px rgba(20, 27, 38, .06);
animation: omniMessageIn 220ms ease both;
overflow: hidden;
@@ -407,7 +420,7 @@
margin: 0 0 24px 44px;
border: 1px solid rgba(34, 42, 54, .09);
border-radius: 16px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 12px 30px rgba(20, 27, 38, .065);
animation: omniMessageIn 220ms ease both;
}
@@ -594,7 +607,7 @@
border: 1px solid rgba(34, 42, 54, .08);
border-radius: 10px;
color: #5b626d;
- background: #fff;
+ background: var(--surface);
font-size: 13px;
line-height: 1.65;
}
@@ -689,7 +702,7 @@
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 9px;
color: #333944;
- background: #fff;
+ background: var(--surface);
font-size: 12px;
font-weight: 650;
cursor: pointer;
@@ -712,7 +725,7 @@
border: 1px solid rgba(0, 47, 167, .20);
border-radius: 9px;
color: var(--klein);
- background: #fff;
+ background: var(--surface);
font-size: 12px;
font-weight: 650;
cursor: pointer;
@@ -814,7 +827,7 @@
.omni-session-preset-trigger[aria-expanded="true"] {
border-color: rgba(0, 47, 167, .36);
color: var(--klein);
- background: #fff;
+ background: var(--surface);
}
.omni-session-preset-trigger span {
@@ -837,7 +850,7 @@
overflow: hidden;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 17px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 24px 60px rgba(20, 27, 38, .18);
transform: translateX(-52%);
}
@@ -1035,7 +1048,7 @@
overflow: hidden;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 16px 36px rgba(20, 27, 38, .15);
}
@@ -1707,7 +1720,7 @@
padding: 7px 13px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 8px;
- background: #fff;
+ background: var(--surface);
color: #575d66;
font-size: 13px;
cursor: pointer;
@@ -1730,7 +1743,7 @@
padding: 9px 12px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 8px;
- background: #fff;
+ background: var(--surface);
color: var(--black);
font-size: 13px;
font-family: inherit;
@@ -1754,7 +1767,7 @@
padding: 6px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 8px;
- background: #fff;
+ background: var(--surface);
cursor: pointer;
text-align: left;
}
@@ -1844,7 +1857,7 @@
padding: 14px 16px;
border: 1px solid rgba(34, 42, 54, 0.09);
border-radius: 16px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 12px 30px rgba(20, 27, 38, .065);
/* 不走入场 opacity 动画:poll 重渲染时避免「闪一下」 */
animation: none;
@@ -1905,7 +1918,7 @@
}
.omni-step-confirm-actions button.is-secondary {
- background: #fff;
+ background: var(--surface);
border: 1px solid rgba(34, 42, 54, 0.14);
color: #222a36;
}
@@ -1946,7 +1959,7 @@
.omni-step-confirm-revise-input:focus {
border-color: rgba(0, 47, 167, .42);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 0 0 3px rgba(0, 47, 167, .14);
}
@@ -1973,7 +1986,7 @@
padding: 14px 16px;
border: 1px solid rgba(34, 42, 54, .10);
border-radius: 14px;
- background: #fff;
+ background: var(--surface);
/* 时长/参数下拉要冒出卡片,不能被裁 */
overflow: visible;
}
@@ -2604,7 +2617,7 @@
gap: 10px;
padding: 14px 14px 12px;
border-bottom: 1px solid rgba(34, 42, 54, .08);
- background: #fff;
+ background: var(--surface);
}
.omni-prompt-drawer-file {
@@ -2684,7 +2697,7 @@
padding: 14px 15px;
border: 1px solid rgba(34, 42, 54, .06);
border-radius: 14px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 6px 16px rgba(20, 27, 38, .04);
}
@@ -2756,7 +2769,7 @@
overflow-x: auto;
border-radius: 12px;
border: 1px solid rgba(34, 42, 54, .08);
- background: #fff;
+ background: var(--surface);
}
.omni-prompt-table {
diff --git a/core/frontend/src/pipeline-page.css b/core/frontend/src/pipeline-page.css
index 80d9f4a..c3c2790 100644
--- a/core/frontend/src/pipeline-page.css
+++ b/core/frontend/src/pipeline-page.css
@@ -110,7 +110,7 @@
padding: 12px;
border: 1px solid rgba(34, 42, 54, 0.08);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
}
.pipeline-page .pl-rail-summary > span { color: var(--pl-muted); font-size: 10px; }
.pipeline-page .pl-rail-track {
@@ -139,7 +139,7 @@
border: 1px solid rgba(34, 42, 54, 0.085);
border-radius: 12px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
text-align: left;
cursor: pointer;
box-sizing: border-box;
@@ -156,7 +156,7 @@
}
.pipeline-page .pl-step.static:hover {
border-color: rgba(34, 42, 54, 0.085);
- background: #fff;
+ background: var(--surface);
}
.pipeline-page .pl-step.static:hover .pl-step-chev { color: var(--pl-muted); }
.pipeline-page .pl-step.current {
@@ -250,7 +250,7 @@
.pipeline-page .pl-ghost {
border: 1px solid rgba(34, 42, 54, 0.11);
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
}
.pipeline-page .pl-next {
min-width: 210px;
@@ -328,7 +328,7 @@
border-radius: 8px;
}
.chat-msg.ai .chat-bubble {
- background: #fff;
+ background: var(--surface);
border: 1px solid rgba(34, 42, 54, 0.08);
border-radius: 8px 8px 8px 2px;
}
@@ -465,7 +465,7 @@
overflow: hidden;
border: 1px solid rgba(0, 47, 167, 0.13);
border-radius: 14px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 11px 26px rgba(20, 27, 38, 0.07);
}
.shot-head {
@@ -504,7 +504,7 @@
border: 1px solid rgba(34, 42, 54, 0.09);
border-radius: 8px;
color: var(--pl-muted);
- background: #fff;
+ background: var(--surface);
cursor: pointer;
}
.shot-icon-btn svg { width: 13px; height: 13px; }
@@ -542,7 +542,7 @@
.shot-area:focus {
outline: none;
border-color: rgba(0, 47, 167, 0.38);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 0 0 3px rgba(0, 47, 167, 0.07);
}
.shot-dialogue { min-height: 42px; }
@@ -564,7 +564,7 @@
.icon-mini-btn.armed { width: auto; padding: 0 8px; font-size: 12px; color: var(--accent-crimson); border-color: var(--accent-crimson); background: var(--surface); }
.shot-insert-gap { flex: 0 0 auto; height: 10px; position: relative; display: flex; align-items: center; justify-content: center; padding: 0; transition: height .24s cubic-bezier(.18,.72,.28,1), padding .24s cubic-bezier(.18,.72,.28,1); }
.shot-insert-gap:hover { height: 72px; padding: 14px 0; }
- .shot-insert-gap .add-shot-btn { opacity: 0; transform: translateY(4px) scale(.96); height: 28px; padding: 0 14px; background: #fff; color: var(--klein); border: 1px dashed rgba(0, 47, 167, 0.35); border-radius: 8px; font-size: 13px; font-family: inherit; font-weight: 500; cursor: pointer; transition: opacity .2s ease .04s, transform .24s cubic-bezier(.18,.72,.28,1) .04s, background var(--t-base), border-color var(--t-base), color var(--t-base); display: inline-flex; align-items: center; gap: 6px; pointer-events: none; white-space: nowrap; }
+ .shot-insert-gap .add-shot-btn { opacity: 0; transform: translateY(4px) scale(.96); height: 28px; padding: 0 14px; background: var(--surface); color: var(--klein); border: 1px dashed rgba(0, 47, 167, 0.35); border-radius: 8px; font-size: 13px; font-family: inherit; font-weight: 500; cursor: pointer; transition: opacity .2s ease .04s, transform .24s cubic-bezier(.18,.72,.28,1) .04s, background var(--t-base), border-color var(--t-base), color var(--t-base); display: inline-flex; align-items: center; gap: 6px; pointer-events: none; white-space: nowrap; }
.shot-insert-gap .add-shot-btn svg { width: 12px; height: 12px; }
.shot-insert-gap:hover .add-shot-btn { opacity: 1; transform: translateY(0) scale(1); pointer-events: auto; }
.shot-insert-gap .add-shot-btn:hover { background: rgba(0, 47, 167, 0.06); border-style: solid; border-color: var(--klein); }
@@ -613,7 +613,7 @@
width: 100%;
min-height: 48px;
padding: 0 14px;
- background: #fff;
+ background: var(--surface);
border: 1px solid rgba(34, 42, 54, 0.11);
border-radius: 12px;
font-size: 14px;
@@ -638,7 +638,7 @@
display: grid;
grid-template-rows: 72px minmax(0, 1fr) 74px;
overflow: hidden;
- background: #fff;
+ background: var(--surface);
}
.as-head {
display: flex;
@@ -677,7 +677,7 @@
padding: 18px;
border: 1px solid rgba(0, 47, 167, 0.13);
border-radius: 16px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 12px 30px rgba(20, 27, 38, 0.075);
}
.as-row::before {
@@ -755,7 +755,7 @@
overflow: hidden;
border: 1px solid rgba(0, 47, 167, 0.15);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 7px 18px rgba(20, 27, 38, 0.06);
}
.as-preview.ready {
@@ -782,7 +782,7 @@
position: absolute;
inset: 0;
pointer-events: none;
- background-color: #fff;
+ background-color: var(--surface);
background-image:
radial-gradient(ellipse 4px 1px at center, rgba(0, 47, 167, 0.28) 98%, transparent),
radial-gradient(ellipse 1px 4px at center, rgba(0, 47, 167, 0.28) 98%, transparent);
@@ -807,7 +807,7 @@
border: 1px solid rgba(0, 47, 167, 0.26);
border-radius: 8px;
color: var(--klein);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 8px 22px rgba(0, 47, 167, 0.11);
font-size: 12px;
font-weight: 600;
@@ -911,7 +911,7 @@
overflow: hidden;
border: 1px solid rgba(0, 47, 167, 0.15);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 12px 28px rgba(20, 27, 38, 0.085);
}
.as-gen-preview {
@@ -923,7 +923,7 @@
overflow: hidden;
border: 0;
border-bottom: 1px solid rgba(34, 42, 54, 0.08);
- background: #fff;
+ background: var(--surface);
}
.as-gen-preview.ready {
background-image: var(--mock-media-url);
@@ -1001,7 +1001,7 @@
}
.as-gen-prompt:focus {
border-color: rgba(0, 47, 167, 0.38);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 0 0 3px rgba(0, 47, 167, 0.06);
}
.as-gen-actions {
@@ -1088,7 +1088,7 @@
.as-ai-btn svg, .as-ghost-btn svg { width: 14px; height: 14px; }
.as-ai-btn:disabled, .as-ghost-btn:disabled { opacity: .45; cursor: not-allowed; box-shadow: none; }
.as-ai-btn-lg { min-height: 44px; margin-top: 18px; padding: 0 18px; font-size: 14px; }
- .as-ghost-btn { border: 1px solid rgba(0, 47, 167, 0.19); color: var(--klein); background: #fff; }
+ .as-ghost-btn { border: 1px solid rgba(0, 47, 167, 0.19); color: var(--klein); background: var(--surface); }
.as-ghost-btn:hover { transform: translateY(-1px); border-color: rgba(0, 47, 167, 0.38); background: #eef5ff; }
.as-ghost-btn-sm { min-height: 30px; font-size: 12px; }
@media (max-width: 1180px) {
@@ -1264,14 +1264,14 @@
aspect-ratio: 9 / 16;
max-height: 280px;
overflow: hidden;
- background: #fff;
+ background: var(--surface);
}
.video-thumb.pending::before {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
- background-color: #fff;
+ background-color: var(--surface);
background-image:
radial-gradient(ellipse 4px 1px at center, rgba(0, 47, 167, 0.28) 98%, transparent),
radial-gradient(ellipse 1px 4px at center, rgba(0, 47, 167, 0.28) 98%, transparent);
@@ -1296,7 +1296,7 @@
border: 1px solid rgba(0, 47, 167, 0.26);
border-radius: 8px;
color: var(--klein);
- background: #fff;
+ background: var(--surface);
box-shadow: 0 8px 22px rgba(0, 47, 167, 0.11);
font-size: 12px;
font-weight: 600;
diff --git a/core/frontend/src/product-create-page.css b/core/frontend/src/product-create-page.css
index d435fff..cfc78d1 100644
--- a/core/frontend/src/product-create-page.css
+++ b/core/frontend/src/product-create-page.css
@@ -310,7 +310,7 @@
display: flex;
flex-direction: column;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
box-shadow: -28px 0 70px rgba(10, 15, 24, 0.22);
transform: translateX(100%);
transition: transform 260ms cubic-bezier(0.22, 1, 0.36, 1);
@@ -422,7 +422,7 @@
overflow-y: auto;
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 14px 34px rgba(20, 27, 38, 0.14);
opacity: 0;
visibility: hidden;
@@ -445,7 +445,7 @@
border: 0;
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
text-align: left;
@@ -635,7 +635,7 @@
padding: 0 8px;
border: 0;
border-radius: 999px;
- background: #fff;
+ background: var(--surface);
color: var(--accent-black);
font: inherit;
font-size: 10px;
@@ -766,7 +766,7 @@
padding: 10px 14px;
border: 1px solid rgba(34, 42, 54, 0.10);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 12px 28px rgba(20, 27, 38, 0.12);
}
.pcd-toast-ic {
@@ -816,7 +816,7 @@
border: 1px solid rgba(34, 42, 54, 0.11);
border-radius: 11px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
font-weight: 600;
@@ -845,7 +845,7 @@
background: rgba(255, 255, 255, 0.90);
box-shadow: 0 10px 28px rgba(20, 27, 38, 0.07);
}
-.pcd-gallery-slot img { width: 100%; height: 100%; display: block; object-fit: contain; background: #fff; }
+.pcd-gallery-slot img { width: 100%; height: 100%; display: block; object-fit: contain; background: var(--surface); }
.pcd-gallery-slot.empty {
display: grid;
place-items: center;
diff --git a/core/frontend/src/products-page.css b/core/frontend/src/products-page.css
index 615d712..d455910 100644
--- a/core/frontend/src/products-page.css
+++ b/core/frontend/src/products-page.css
@@ -108,7 +108,7 @@
padding: 0 13px;
border: 1px solid var(--pl-line);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
}
.pl-search svg {
width: 16px;
@@ -148,7 +148,7 @@
border: 1px solid rgba(34, 42, 54, 0.12);
border-radius: 10px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
text-align: left;
@@ -181,7 +181,7 @@
padding: 6px;
border: 1px solid var(--pl-line);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 14px 34px rgba(20, 27, 38, 0.14);
opacity: 0;
visibility: hidden;
@@ -203,7 +203,7 @@
border: 0;
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
text-align: left;
@@ -316,6 +316,35 @@
border-color: var(--klein);
box-shadow: 0 0 0 2px rgba(0, 47, 167, 0.16), var(--pl-shadow);
}
+ .pl-skeleton-card {
+ pointer-events: none;
+ cursor: default;
+ }
+ .pl-skeleton-card:hover { transform: none; }
+ .pl-skeleton-thumb {
+ aspect-ratio: 4 / 3;
+ margin: 8px 8px 0;
+ border-radius: var(--r-md);
+ }
+ .pl-skeleton-meta {
+ display: grid;
+ gap: 8px;
+ }
+ .pl-skeleton-line { display: block; height: 12px; }
+ .pl-skeleton-line--title { width: 52%; }
+ .pl-skeleton-line--copy { width: 76%; height: 10px; }
+ .pl-skeleton-tags {
+ display: flex;
+ gap: 8px;
+ margin-top: 2px;
+ }
+ .pl-skeleton-pill {
+ display: block;
+ width: 58px;
+ height: 22px;
+ border-radius: var(--r-sm);
+ }
+ .pl-skeleton-pill--short { width: 46px; }
.pl-thumb {
position: relative;
@@ -492,7 +521,15 @@
border-color: var(--klein, #002fa7);
background: var(--klein, #002fa7);
}
-.products-page.manage-mode .pl-card .card-del-btn { opacity: 0 !important; pointer-events: none !important; }
+/* 删除是管理动作:普通浏览态不因 hover 露出,进入管理态才显示。 */
+.products-page:not(.manage-mode) .product-card:hover .card-del-btn {
+ opacity: 0;
+ pointer-events: none;
+}
+.products-page.manage-mode .pl-card .card-del-btn {
+ opacity: 1;
+ pointer-events: auto;
+}
.products-page.manage-mode .pl-card button.pl-tag { pointer-events: none; }
/* 影擎吸底选择条 · 管理模式即出现 */
diff --git a/core/frontend/src/project-wizard-page.css b/core/frontend/src/project-wizard-page.css
index 6bab409..a15597d 100644
--- a/core/frontend/src/project-wizard-page.css
+++ b/core/frontend/src/project-wizard-page.css
@@ -116,7 +116,7 @@
padding: 12px;
border: 1px solid rgba(34, 42, 54, 0.08);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
}
.project-wizard-page .nw-rail-summary > span { color: var(--nw-muted); font-size: 10px; }
.project-wizard-page .nw-rail-track {
@@ -148,7 +148,7 @@
padding: 10px;
border: 1px solid rgba(34, 42, 54, 0.085);
border-radius: 12px;
- background: #fff;
+ background: var(--surface);
}
.project-wizard-page .nw-step[hidden] {
display: none;
@@ -270,7 +270,7 @@
padding: 0 13px;
border: 1px solid var(--nw-line);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
}
.project-wizard-page .nw-search svg { width: 16px; height: 16px; color: var(--nw-muted); }
.project-wizard-page .nw-search input {
@@ -297,7 +297,7 @@
border: 1px solid rgba(0, 47, 167, 0.15);
border-radius: 10px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
text-align: left;
@@ -317,7 +317,7 @@
padding: 6px;
border: 1px solid var(--nw-line);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 14px 34px rgba(20, 27, 38, 0.14);
opacity: 0;
visibility: hidden;
@@ -334,7 +334,7 @@
border: 0;
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
text-align: left;
@@ -513,7 +513,7 @@
padding: 0 13px;
border: 1px solid var(--nw-line);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 14px;
color: var(--accent-black);
@@ -549,7 +549,7 @@
border: 1px solid var(--nw-line);
border-radius: 999px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
cursor: pointer;
diff --git a/core/frontend/src/projects-page.css b/core/frontend/src/projects-page.css
index 1b07a8d..5f49e0b 100644
--- a/core/frontend/src/projects-page.css
+++ b/core/frontend/src/projects-page.css
@@ -192,7 +192,7 @@
padding: 0 13px;
border: 1px solid var(--vc-line);
border-radius: 10px;
- background: #fff;
+ background: var(--surface);
}
.projects-page .vc-search svg { width: 16px; height: 16px; flex: 0 0 auto; color: var(--vc-muted); }
.projects-page .vc-search input {
@@ -220,7 +220,7 @@
border: 1px solid rgba(34, 42, 54, 0.12);
border-radius: 10px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 12px;
text-align: left;
@@ -243,7 +243,7 @@
padding: 6px;
border: 1px solid var(--vc-line);
border-radius: 11px;
- background: #fff;
+ background: var(--surface);
box-shadow: 0 14px 34px rgba(20, 27, 38, 0.14);
opacity: 0;
visibility: hidden;
@@ -262,7 +262,7 @@
border: 0;
border-radius: 8px;
color: var(--accent-black);
- background: #fff;
+ background: var(--surface);
font: inherit;
font-size: 13px;
text-align: left;
diff --git a/core/frontend/src/quick-create-page.css b/core/frontend/src/quick-create-page.css
index 19faa9c..607d8fb 100644
--- a/core/frontend/src/quick-create-page.css
+++ b/core/frontend/src/quick-create-page.css
@@ -37,7 +37,7 @@
.quick-create-page .quick-field-label { display: flex; align-items: center; justify-content: space-between; gap: 14px; font-size: 14px; font-weight: 700; }
.quick-create-page .quick-field-label small { color: var(--quick-muted); font-size: 11px; font-weight: 500; }
.quick-create-page .quick-name-input { height: 50px; padding: 0 15px; border: 1px solid rgba(34,42,54,.13); border-radius: 12px; outline: none; background: rgba(248,249,252,.88); transition: border-color 180ms ease, box-shadow 180ms ease, background 180ms ease; }
-.quick-create-page .quick-name-input:focus { border-color: rgba(0,47,167,.55); background: #fff; box-shadow: 0 0 0 4px rgba(0,47,167,.08); }
+.quick-create-page .quick-name-input:focus { border-color: rgba(0,47,167,.55); background: var(--surface); box-shadow: 0 0 0 4px rgba(0,47,167,.08); }
.quick-create-page .quick-upload { position: relative; min-height: 190px; display: grid; place-items: center; overflow: hidden; border: 1px dashed rgba(0,47,167,.28); border-radius: 14px; background: radial-gradient(circle at center,rgba(0,47,167,.07),transparent 47%),rgba(248,249,252,.86); }
.quick-create-page .quick-upload input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.quick-create-page .quick-upload-copy { display: grid; justify-items: center; gap: 8px; padding: 24px; border: 0; color: inherit; background: transparent; font: inherit; text-align: center; cursor: pointer; }
@@ -52,7 +52,7 @@
.quick-create-page .quick-image-tile button { position: absolute; top: 3px; right: 3px; width: 19px; height: 19px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%; color: #fff; background: rgba(25,28,34,.72); cursor: pointer; }.quick-create-page .quick-image-tile button svg { width: 12px; height: 12px; }
.quick-create-page .quick-upload-more { min-height: 240px; display: grid; place-items: center; align-content: center; gap: 8px; border: 1px dashed rgba(0,47,167,.35); border-radius: 13px; background: rgba(243,247,255,.78); }
.quick-create-page .quick-upload-trigger { display: grid; justify-items: center; gap: 8px; padding: 0; border: 0; color: #303746; background: transparent; font: inherit; cursor: pointer; }.quick-create-page .quick-upload-trigger strong { font-size: 14px; font-weight: 700; }.quick-create-page .quick-upload-trigger small { color: var(--quick-muted); font-size: 12px; }
-.quick-create-page .quick-upload-more-icon { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 12px; color: var(--quick-blue); background: #fff; box-shadow: 0 5px 16px rgba(0,47,167,.08); }.quick-create-page .quick-upload-more-icon svg { width: 24px; height: 24px; stroke-width: 1.75; }
+.quick-create-page .quick-upload-more-icon { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 12px; color: var(--quick-blue); background: var(--surface); box-shadow: 0 5px 16px rgba(0,47,167,.08); }.quick-create-page .quick-upload-more-icon svg { width: 24px; height: 24px; stroke-width: 1.75; }
.quick-create-page .quick-clear-all { padding: 5px 9px; border: 0; border-radius: 7px; color: var(--quick-muted); background: rgba(255,255,255,.72); font: inherit; font-size: 11px; cursor: pointer; }
.quick-create-page .quick-parameter-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; margin-top: 20px; }
.quick-create-page .quick-parameter-field { min-width: 0; display: grid; gap: 9px; padding: 14px; border: 1px solid rgba(34,42,54,.10); border-radius: 12px; background: rgba(248,249,252,.72); }
@@ -61,7 +61,7 @@
.quick-create-page .quick-parameter-field .rs-select-btn { height: 38px; font-size: 12px; }
.quick-create-page .quick-form-footer { display: flex; margin-top: 26px; }
.quick-create-page .quick-generate-button { width: 100%; height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 9px; border: 0; border-radius: 12px; color: #fff; background: var(--quick-blue); font: inherit; font-weight: 700; cursor: pointer; box-shadow: 0 12px 24px rgba(0,47,167,.22); }.quick-create-page .quick-generate-button:disabled { color: #99a1ae; background: #e5e8ee; box-shadow: none; cursor: not-allowed; }.quick-create-page .quick-generate-button svg { width: 20px; height: 20px; }
-.quick-create-page .quick-cancel-button { width: 100%; height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 9px; border: 1px solid rgba(34,42,54,.16); border-radius: 12px; color: #272a30; background: #fff; font: inherit; font-weight: 700; cursor: pointer; }.quick-create-page .quick-cancel-button:hover:not(:disabled) { border-color: rgba(200,61,77,.35); color: #c83d4d; background: rgba(200,61,77,.06); }.quick-create-page .quick-cancel-button:disabled { opacity: .55; cursor: not-allowed; }.quick-create-page .quick-cancel-button svg { width: 18px; height: 18px; }
+.quick-create-page .quick-cancel-button { width: 100%; height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 9px; border: 1px solid rgba(34,42,54,.16); border-radius: 12px; color: #272a30; background: var(--surface); font: inherit; font-weight: 700; cursor: pointer; }.quick-create-page .quick-cancel-button:hover:not(:disabled) { border-color: rgba(200,61,77,.35); color: #c83d4d; background: rgba(200,61,77,.06); }.quick-create-page .quick-cancel-button:disabled { opacity: .55; cursor: not-allowed; }.quick-create-page .quick-cancel-button svg { width: 18px; height: 18px; }
.quick-create-page .quick-create-shell.is-generating .quick-form-panel { opacity: .82; }
.quick-create-page .quick-create-shell.is-generating .quick-form-footer { pointer-events: auto; opacity: 1; }
.quick-create-page .quick-status-panel { position: relative; display: grid; place-items: center; min-height: 0; padding: 34px; background: radial-gradient(circle at 50% 45%,rgba(0,47,167,.075),transparent 34%),rgba(250,251,253,.88); }.quick-create-page .quick-state { width: min(560px,100%); display: none; }.quick-create-page .quick-state-ready { display: grid; justify-items: center; text-align: center; }
@@ -85,7 +85,7 @@
.quick-create-page .quick-state-ready { position: relative; top: -10px; }
.quick-create-page .quick-state-ready h2 { margin: 0 0 9px; font-size: 23px; }.quick-create-page .quick-state-ready > p { max-width: 430px; margin: 0; color: var(--quick-muted); font-size: 13px; line-height: 1.7; }.quick-create-page .quick-ready-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 20px; }.quick-create-page .quick-ready-tags span { padding: 7px 10px; border: 1px solid rgba(34,42,54,.08); border-radius: 999px; color: #505762; background: rgba(255,255,255,.72); font-size: 11px; }
.quick-create-page .quick-state-generating { width: min(460px,100%); justify-items: center; text-align: center; }
-.quick-create-page .quick-generating-preview { position: relative; width: 460px; max-width: 100%; height: 258px; display: grid; place-items: center; margin-bottom: 27px; border: 1px solid rgba(0,47,167,.16); border-radius: 15px; background: #edf4ff; box-shadow: 0 18px 34px rgba(0,47,167,.08); }.quick-create-page .quick-generating-preview::before { content: ""; position: absolute; inset: 18px; border-radius: 10px; background: #fff; }
+.quick-create-page .quick-generating-preview { position: relative; width: 460px; max-width: 100%; height: 258px; display: grid; place-items: center; margin-bottom: 27px; border: 1px solid rgba(0,47,167,.16); border-radius: 15px; background: #edf4ff; box-shadow: 0 18px 34px rgba(0,47,167,.08); }.quick-create-page .quick-generating-preview::before { content: ""; position: absolute; inset: 18px; border-radius: 10px; background: var(--surface); }
.quick-create-page .quick-preview-spinner { position: relative; z-index: 1; width: 62px; height: 62px; border-radius: 50%; background: conic-gradient(from 160deg,transparent 0deg,transparent 136deg,var(--quick-blue) 300deg,rgba(0,47,167,.12) 360deg); -webkit-mask: radial-gradient(circle,transparent 0 66%,#000 69%); mask: radial-gradient(circle,transparent 0 66%,#000 69%); animation: quick-spinner-rotate 1.1s linear infinite; }
.quick-create-page .quick-generating-copy { width: 100%; text-align: center; }.quick-create-page .quick-generating-copy h2 { margin: 0 0 8px; font-size: 23px; }.quick-create-page .quick-generating-copy p { margin: 0; color: var(--quick-muted); font-size: 13px; line-height: 1.7; }
.quick-create-page .quick-progress-track { width: 100%; display: flex; align-items: flex-start; margin-top: 28px; }
@@ -104,7 +104,7 @@
.quick-create-page .quick-state-complete { width: min(560px,100%); gap: 17px; }
.quick-create-page .quick-video-result-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
.quick-create-page .quick-video-result-grid.is-single { grid-template-columns: minmax(0, 1fr); width: min(320px,100%); justify-self: center; }
-.quick-create-page .quick-video-result-card { min-width: 0; padding: 8px 8px 9px; border: 1px solid rgba(34,42,54,.10); border-radius: 8px; color: #25282d; background: #fff; font: inherit; text-align: left; cursor: pointer; }
+.quick-create-page .quick-video-result-card { min-width: 0; padding: 8px 8px 9px; border: 1px solid rgba(34,42,54,.10); border-radius: 8px; color: #25282d; background: var(--surface); font: inherit; text-align: left; cursor: pointer; }
.quick-create-page .quick-video-result-thumb { position: relative; display: block; aspect-ratio: 16/9; overflow: hidden; border-radius: 8px; background: #eef1f5; }
.quick-create-page .quick-video-result-thumb img,.quick-create-page .quick-video-result-thumb video { width: 100%; height: 100%; display: block; object-fit: cover; pointer-events: none; }
.quick-create-page .quick-video-play { position: absolute; inset: 0; display: grid; place-items: center; color: #fff; background: rgba(0,0,0,.22); }
@@ -130,7 +130,7 @@
.quick-create-page .quick-history-head h2 { margin: 0; font-size: 20px; font-weight: 600; }
.quick-create-page .quick-history-head span { color: var(--quick-muted); font-size: 13px; }
.quick-create-page .quick-history-list { display: grid; gap: 10px; }
-.quick-create-page .quick-history-card { display: grid; grid-template-columns: 112px minmax(0,1fr) auto; align-items: center; gap: 16px; padding: 12px 14px; border: 1px solid rgba(34,42,54,.10); border-radius: 8px; background: #fff; box-shadow: inset 3px 0 0 var(--quick-blue); }
+.quick-create-page .quick-history-card { display: grid; grid-template-columns: 112px minmax(0,1fr) auto; align-items: center; gap: 16px; padding: 12px 14px; border: 1px solid rgba(34,42,54,.10); border-radius: 8px; background: var(--surface); box-shadow: inset 3px 0 0 var(--quick-blue); }
.quick-create-page .quick-history-thumb { position: relative; width: 112px; aspect-ratio: 16/9; overflow: hidden; padding: 0; border: 0; border-radius: 8px; background: #eef1f5; cursor: pointer; }
.quick-create-page .quick-history-thumb:disabled { cursor: default; }
.quick-create-page .quick-history-thumb img { width: 100%; height: 100%; display: block; object-fit: cover; }
@@ -144,7 +144,7 @@
.quick-create-page .quick-history-badge.is-wait { color: var(--quick-muted); background: rgba(34,42,54,.06); }
.quick-create-page .quick-history-copy h3 { margin: 6px 0 4px; font-size: 16px; font-weight: 600; }
.quick-create-page .quick-history-copy p { margin: 0; color: var(--quick-muted); font-size: 12px; }
-.quick-create-page .quick-history-open { min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 12px; border: 1px solid rgba(34,42,54,.12); border-radius: 8px; color: var(--quick-blue); background: #fff; font: inherit; font-size: 13px; cursor: pointer; }
+.quick-create-page .quick-history-open { min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 12px; border: 1px solid rgba(34,42,54,.12); border-radius: 8px; color: var(--quick-blue); background: var(--surface); font: inherit; font-size: 13px; cursor: pointer; }
.quick-create-page .quick-history-open:hover { background: rgba(0,47,167,.05); }
.quick-create-page .quick-history-open svg { width: 15px; height: 15px; }
.quick-create-page .quick-history-empty { margin: 0; padding: 28px 8px; color: var(--quick-muted); font-size: 13px; }
diff --git a/core/frontend/src/routes/models.tsx b/core/frontend/src/routes/models.tsx
index d9c10d8..4df07d6 100644
--- a/core/frontend/src/routes/models.tsx
+++ b/core/frontend/src/routes/models.tsx
@@ -20,7 +20,7 @@ const TABS: { k: Tab; label: string; title: string; note: string }[] = [
{ k: "mine", label: "我的模特", title: "我的模特", note: "维护可复用的品牌模特与人物参考资产" }
];
-const PAGE_SIZE = 20;
+const PAGE_SIZE = 24;
type Preview = { src: string; kind: "image"; name: string };
@@ -294,7 +294,7 @@ function modelTags(m: ModelEntity): string[] {
}
export function ModelsPage({ onNotify, onBillingChanged }: {
- onNotify?: (type: "success" | "error", text: string) => void;
+ onNotify?: (type: "success" | "error" | "info", text: string) => void;
onBillingChanged?: () => void;
}) {
const [tab, setTab] = useState
("all");
@@ -313,6 +313,14 @@ export function ModelsPage({ onNotify, onBillingChanged }: {
const fileRef = useRef(null);
const tabCopy = TABS.find((item) => item.k === tab) || TABS[0];
const exitEdit = () => { setEditMode(false); setSelected(new Set()); };
+ const enterEdit = () => {
+ setEditMode(true);
+ // 全部列表把官方模板排在前面,第一页往往一张都删不了,底栏会一直停在 0。
+ if (items.length > 0 && items.every((m) => m.is_official) && tab !== "mine") {
+ setTab("mine");
+ onNotify?.("info", "官方模特不能删除,已切换到我的模特");
+ }
+ };
const toggleSelect = (id: string) => setSelected((prev) => {
const next = new Set(prev);
if (next.has(id)) next.delete(id); else next.add(id);
@@ -415,7 +423,7 @@ export function ModelsPage({ onNotify, onBillingChanged }: {
维护可复用的品牌模特与人物参考资产