Files
ttstd-infinite-canvas/web/src/styles/globals.css

6409 lines
222 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@custom-variant dark (&:is(.dark *));
/* =========================================================================
Design Token System — 三层架构 (Primitive → Semantic → Component)
详见 Wayfinder #96: https://github.com/ddcat-ai/open-ai-canvas/issues/96
规范:禁止在组件中新增裸 text-[Npx]/rounded-[Npx]/z-[N],必须使用 token
========================================================================= */
/* -------------------------------------------------------------------------
Layer 1: Primitive — 纯值,无语义,不随主题变(所有维度的基础)
------------------------------------------------------------------------- */
:root {
/* --- 1. 色彩(oklch 色板)--- */
--color-neutral-0: oklch(1 0 0);
--color-neutral-50: oklch(0.985 0 0);
--color-neutral-100: oklch(0.97 0 0);
--color-neutral-200: oklch(0.922 0 0);
--color-neutral-300: oklch(0.87 0 0);
--color-neutral-400: oklch(0.708 0 0);
--color-neutral-500: oklch(0.556 0 0);
--color-neutral-600: oklch(0.439 0 0);
--color-neutral-700: oklch(0.371 0 0);
--color-neutral-800: oklch(0.269 0 0);
--color-neutral-900: oklch(0.205 0 0);
--color-neutral-950: oklch(0.145 0 0);
/* 节点类型语义色板(对应 #97 色带+图标徽章方案)
注意:用 --palette- 前缀避免与 @theme 的 --color-* 命名空间冲突导致循环引用 */
--palette-node-image: oklch(0.75 0.15 75); /* 琥珀 300 — 图片 */
--palette-node-video: oklch(0.65 0.22 350); /* 品红 400 — 视频 */
--palette-node-text: oklch(0.45 0.02 250); /* 中性蓝灰 700 — 文本 */
--palette-node-audio: oklch(0.7 0.13 220); /* 青蓝 400 — 音频 */
--palette-node-config: oklch(0.55 0.04 250); /* 灰蓝 500 — 配置 */
--palette-node-script: oklch(0.6 0.18 300); /* 紫色 400 — 脚本 */
--palette-node-drawing: oklch(0.65 0.12 55); /* 赭石 400 — 绘图 */
--palette-node-frame: oklch(0.7 0.15 155); /* 翠绿 400 — 帧 */
--palette-node-character: oklch(0.78 0.13 20); /* 桃红 300 — 角色引用 */
--palette-node-skill: oklch(0.7 0.17 55); /* 橙色 400 — 技能 */
/* 状态色(用 --palette- 前缀避免循环引用)*/
--palette-status-success: oklch(0.7 0.17 155);
--palette-status-error: oklch(0.65 0.22 25);
--palette-status-loading: oklch(0.62 0.18 250);
--palette-status-warning: oklch(0.75 0.15 85);
/* --- 2. 间距(4px 栅格 + 半距)--- */
--space-0: 0px;
--space-half: 2px;
--space-1: 4px;
--space-1-half: 6px;
--space-2: 8px;
--space-2-half: 10px;
--space-3: 12px;
--space-3-half: 14px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-10: 40px;
--space-12: 48px;
--space-16: 64px;
--space-20: 80px;
--space-24: 96px;
/* --- 3. 字号(10 档)--- */
--fs-nano: 7px; /* 纳米标注(角标计数、节点预览、% 后缀)*/
--fs-micro: 9px; /* 极小标注(分镜行号辅助)*/
--fs-tiny: 10px; /* 小标注(徽章、tag)*/
--fs-label: 11px; /* 标签文字 */
--fs-caption: 12px; /* 说明文字 */
--fs-body: 14px; /* 正文(基准)*/
--fs-body-lg: 15px; /* 大正文 */
--fs-heading: 16px; /* 小标题 */
--fs-heading-lg: 18px; /* 大标题 */
--fs-title: 22px; /* 页面标题 */
--fs-display: 36px; /* 展示标题 */
/* --- 4. 圆角(10 档)--- */
--r-xs: 4px;
--r-sm: 6px;
--r-md: 8px;
--r-lg: 12px;
--r-xl: 14px;
--r-2xl: 16px;
--r-3xl: 20px;
--r-4xl: 24px;
--r-tight: 15px;
--r-dock-compact: 13px;
--r-wide-tight: 22px;
--r-5xl: 32px;
--r-full: 9999px;
/* --- 5. 阴影(含 glow)--- */
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.06);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.1);
--shadow-xl: 0 16px 40px rgba(0, 0, 0, 0.12);
--shadow-2xl: 0 24px 60px rgba(0, 0, 0, 0.16);
--shadow-glow-sm: 0 0 12px rgba(125, 162, 255, 0.2);
--shadow-glow-md: 0 0 24px rgba(125, 162, 255, 0.3);
--shadow-glow-lg: 0 0 40px rgba(125, 162, 255, 0.4);
/* --- 6. Elevation(z-index 14 档,按视觉层划分,见 ADR-001)--- */
--z-canvas: 0; /* L0 画布底 */
--z-canvas-overlay: 5; /* L1 画布覆盖(网格、连线)*/
--z-node: 10; /* L2 节点层(未选中)*/
--z-node-active: 20; /* L3 激活节点(选中/拖拽)*/
--z-toolbar: 30; /* L4 浮动工具栏(顶栏、dock、zoom)*/
--z-node-toolbar: 50; /* L5 节点工具栏(click 触发)*/
--z-panel: 60; /* L6 侧边面板(侧栏、素材托盘)*/
--z-panel-floating: 80; /* L7 浮动面板(助手/agent/活动任务)*/
--z-modal: 100; /* L8 对话框 */
--z-modal-overlay: 110; /* L9 遮罩 */
--z-popover: 200; /* L10 弹出层 */
--z-toast: 500; /* L11 通知 */
--z-tooltip: 1000; /* L12 提示 */
--z-loader: 1200; /* 全屏加载遮罩 */
--z-max: 2000; /* L13 最高(紧急通知)*/
/* --- 6b. Canvas 浮层定位 inset(画布安全区,对应审计 D2/P0-2)--- */
--canvas-inset-x: 16px; /* 浮层水平安全区(dock inset、顶栏 px)*/
--canvas-inset-y: 16px; /* 浮层垂直安全区(dock 底部)*/
--canvas-topbar-h: 64px; /* 顶部栏高度 */
--canvas-topbar-offset: 72px; /* 顶栏下方浮层顶部偏移(topbar-h + 8px 间距)*/
--canvas-dock-popover-offset: 50px; /* dock 弹出面板底部偏移 */
/* --- 7. 动效(对应 #99 动效 token)--- */
/* duration */
--motion-dur-instant: 80ms;
--motion-dur-fast: 150ms;
--motion-dur-base: 250ms;
--motion-dur-slow: 400ms;
--motion-dur-emphasize: 600ms;
/* easing */
--motion-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
--motion-ease-in: cubic-bezier(0.64, 0, 0.78, 0);
--motion-ease-in-out: cubic-bezier(0.64, 0, 0.36, 1);
--motion-ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);
--motion-ease-linear: linear;
/* delay */
--motion-delay-none: 0ms;
--motion-delay-xs: 30ms;
--motion-delay-sm: 60ms;
--motion-delay-md: 100ms;
--motion-delay-lg: 150ms;
/* motion-scale(联动 prefers-reduced-motion)*/
--motion-scale: 1;
/* --- 8. 描边宽度 --- */
--stroke-0: 0px;
--stroke-1: 1px;
--stroke-2: 2px;
--stroke-3: 3px;
/* --- 9. 不透明度(6 档)--- */
--opa-hide: 0.08;
--opa-faint: 0.2;
--opa-muted: 0.45;
--opa-subtle: 0.55;
--opa-medium: 0.72;
--opa-full: 1;
}
/* prefers-reduced-motion 降级(对应 #99 三级降级策略 L1)*/
@media (prefers-reduced-motion: reduce) {
:root {
--motion-scale: 0.3;
}
}
/* 用户在应用内选择"无动效"时,JS 添加 .no-motion 类(L2 禁用)*/
.no-motion {
--motion-scale: 0;
}
/* infinite 装饰动画在 reduced-motion / no-motion 下降级(对应 #99 三级降级)*/
@media (prefers-reduced-motion: reduce) {
.canvas-connection-flow,
.canvas-connection-draft,
.canvas-generation-border-flow,
.canvas-task-progress-shimmer,
.ai-title-aurora,
.creation-intro-mark,
.creation-intro-word,
.creation-intro-signal,
.creation-intro-emphasis {
animation-duration: 0.01ms;
animation-iteration-count: 1;
}
}
.no-motion .canvas-connection-flow,
.no-motion .canvas-connection-draft,
.no-motion .canvas-generation-border-flow,
.no-motion .canvas-task-progress-shimmer,
.no-motion .ai-title-aurora,
.no-motion .creation-intro-mark,
.no-motion .creation-intro-word,
.no-motion .creation-intro-signal,
.no-motion .creation-intro-emphasis {
animation: none;
}
/* 动效计算函数(实际 duration = base * motion-scale)*/
:root {
--motion-dur-instant-calc: calc(var(--motion-dur-instant) * var(--motion-scale));
--motion-dur-fast-calc: calc(var(--motion-dur-fast) * var(--motion-scale));
--motion-dur-base-calc: calc(var(--motion-dur-base) * var(--motion-scale));
--motion-dur-slow-calc: calc(var(--motion-dur-slow) * var(--motion-scale));
--motion-dur-emphasize-calc: calc(var(--motion-dur-emphasize) * var(--motion-scale));
}
@theme inline {
/* 响应式断点(对应 #99 四断点体系:mobile/tablet/desktop/wide)*/
--breakpoint-tablet: 768px;
--breakpoint-desktop: 1024px;
--breakpoint-wide: 1440px;
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-border: var(--border);
--color-ring: var(--ring);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
--font-heading: var(--font-sans);
--font-sans: var(--font-sans);
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-input: var(--input);
--color-destructive: var(--destructive);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
/* === Design Token System 映射(对应 #96 三层架构)=== */
/* 色彩 — 节点类型色(可用 text-node-image / bg-node-video 等)*/
--color-node-image: var(--cn-type-image);
--color-node-video: var(--cn-type-video);
--color-node-text: var(--cn-type-text);
--color-node-audio: var(--cn-type-audio);
--color-node-config: var(--cn-type-config);
--color-node-script: var(--cn-type-script);
--color-node-drawing: var(--cn-type-drawing);
--color-node-frame: var(--cn-type-frame);
--color-node-character: var(--cn-type-character);
--color-node-skill: var(--cn-type-skill);
/* 色彩 — 状态色(可用 text-status-success / bg-status-error 等)*/
--color-status-success: var(--status-success);
--color-status-error: var(--status-error);
--color-status-loading: var(--status-loading);
--color-status-warning: var(--status-warning);
/* 色彩 — Canvas 语义色 */
--color-cn-text: var(--cn-text);
--color-cn-muted: var(--cn-muted);
--color-cn-faint: var(--cn-faint);
--color-cn-stroke: var(--cn-stroke);
--color-cn-fill: var(--cn-fill);
/* 字号(可用 text-fs-body / text-fs-caption 等)*/
--font-size-micro: var(--fs-micro);
--font-size-tiny: var(--fs-tiny);
--font-size-label: var(--fs-label);
--font-size-caption: var(--fs-caption);
--font-size-body: var(--fs-body);
--font-size-body-lg: var(--fs-body-lg);
--font-size-heading: var(--fs-heading);
--font-size-heading-lg: var(--fs-heading-lg);
--font-size-title: var(--fs-title);
--font-size-display: var(--fs-display);
}
:root {
--radius: 0.5rem;
--motion-instant: 120ms;
--motion-state: 180ms;
--motion-panel: 240ms;
--ease-aceternity: var(--motion-ease-out);
--ease-product-enter: cubic-bezier(0.16, 1, 0.3, 1);
--workspace-canvas: var(--background);
/* 页面、导航和内容区共用同一底色;卡片/浮层才允许使用 surface token。 */
--workspace-page: var(--workspace-canvas);
--workspace-navigation: var(--workspace-page);
--workspace-content: var(--workspace-page);
--workspace-surface: #ffffff;
--workspace-surface-strong: #ffffff;
--workspace-border: rgba(17, 17, 17, 0.14);
--workspace-border-strong: rgba(17, 17, 17, 0.22);
--workspace-grid-line: rgba(17, 17, 17, 0.045);
--workspace-nav: var(--workspace-navigation);
--workspace-sidebar: var(--workspace-navigation);
--workspace-accent: #171717;
--workspace-accent-soft: rgba(17, 17, 17, 0.07);
/* --- Semantic 层(引用 Primitive,随主题切换)--- */
/* 通用语义色(引用 Primitive neutral 色板)*/
--bg: var(--color-neutral-0);
--fg: var(--color-neutral-950);
--border-semantic: var(--color-neutral-200);
--accent: var(--workspace-accent);
--accent-soft: var(--workspace-accent-soft);
--muted: var(--color-neutral-100);
/* Canvas Theme 语义(从 CSS 变量反序列化到 TS 主题对象,对应 #96 决策3)*/
--cn-text: var(--color-neutral-950);
--cn-muted: var(--color-neutral-500);
--cn-faint: var(--color-neutral-400);
--cn-stroke: var(--color-neutral-200);
--cn-fill: var(--color-neutral-50);
--cn-active-stroke: var(--workspace-accent);
--cn-active-stroke-soft: var(--workspace-accent-soft);
/* Aceternity spatial 语义(对应 #96 决策3:CSS→TS 单向同步)*/
--cn-spatial-surface: var(--workspace-surface);
--cn-spatial-surface-strong: var(--workspace-surface-strong);
--cn-spatial-shadow: rgba(0, 0, 0, 0.12);
--cn-spatial-glow: rgba(125, 162, 255, 0.2);
--cn-spatial-glow-strong: rgba(125, 162, 255, 0.35);
--cn-spatial-elevated: var(--color-neutral-0);
--cn-spatial-toolbar-border: var(--color-neutral-200);
--director-sequencer-surface: var(--color-neutral-900);
--director-sequencer-surface-raised: var(--color-neutral-800);
--director-sequencer-border: rgba(255, 255, 255, 0.11);
--director-sequencer-muted: rgba(255, 255, 255, 0.48);
--director-sequencer-grid: rgba(255, 255, 255, 0.055);
--director-dock-surface: rgba(17, 19, 21, 0.92);
--director-dock-fg: rgba(255, 255, 255, 0.62);
--director-dock-fg-strong: rgba(255, 255, 255, 0.96);
--director-dock-active-surface: rgba(255, 255, 255, 0.14);
--director-control-hover: rgba(255, 255, 255, 0.09);
--director-swatch-inset: rgba(0, 0, 0, 0.18);
/* 节点类型色(引用 Primitive 节点色板,对应 #97 决策1 色带方案)*/
--cn-type-image: var(--palette-node-image);
--cn-type-video: var(--palette-node-video);
--cn-type-text: var(--palette-node-text);
--cn-type-audio: var(--palette-node-audio);
--cn-type-config: var(--palette-node-config);
--cn-type-script: var(--palette-node-script);
--cn-type-drawing: var(--palette-node-drawing);
--cn-type-frame: var(--palette-node-frame);
--cn-type-character: var(--palette-node-character);
--cn-type-skill: var(--palette-node-skill);
/* 状态语义色 */
--status-success: var(--palette-status-success);
--status-error: var(--palette-status-error);
--status-loading: var(--palette-status-loading);
--status-warning: var(--palette-status-warning);
--border: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--input: oklch(0.922 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--border: oklch(1 0 0 / 10%);
--ring: oklch(0.556 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--input: oklch(1 0 0 / 15%);
--workspace-canvas: var(--background);
--workspace-page: var(--workspace-canvas);
--workspace-navigation: var(--workspace-page);
--workspace-content: var(--workspace-page);
--workspace-surface: #181818;
--workspace-surface-strong: #181818;
--workspace-border: rgba(255, 255, 255, 0.085);
--workspace-border-strong: rgba(255, 255, 255, 0.16);
--workspace-grid-line: rgba(255, 255, 255, 0.038);
--workspace-nav: var(--workspace-navigation);
--workspace-sidebar: var(--workspace-navigation);
--workspace-accent: #f5f5f5;
--workspace-accent-soft: rgba(255, 255, 255, 0.09);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.922 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
/* --- Semantic 层 dark 覆盖 --- */
--bg: var(--color-neutral-950);
--fg: var(--color-neutral-50);
--border-semantic: var(--color-neutral-800);
--muted: var(--color-neutral-900);
--cn-text: var(--color-neutral-50);
--cn-muted: var(--color-neutral-400);
--cn-faint: var(--color-neutral-500);
--cn-stroke: rgba(255, 255, 255, 0.1);
--cn-fill: rgba(255, 255, 255, 0.04);
--cn-active-stroke: var(--workspace-accent);
--cn-active-stroke-soft: var(--workspace-accent-soft);
--cn-spatial-surface: var(--workspace-surface);
--cn-spatial-surface-strong: var(--workspace-surface-strong);
--cn-spatial-shadow: rgba(0, 0, 0, 0.4);
--cn-spatial-glow: rgba(125, 162, 255, 0.15);
--cn-spatial-glow-strong: rgba(125, 162, 255, 0.25);
--cn-spatial-elevated: var(--color-neutral-900);
--cn-spatial-toolbar-border: rgba(255, 255, 255, 0.1);
--director-sequencer-surface: #111315;
--director-sequencer-surface-raised: #191c1f;
--director-sequencer-border: rgba(255, 255, 255, 0.11);
--director-sequencer-muted: rgba(255, 255, 255, 0.48);
--director-sequencer-grid: rgba(255, 255, 255, 0.055);
--director-dock-surface: rgba(17, 19, 21, 0.92);
--director-dock-fg: rgba(255, 255, 255, 0.62);
--director-dock-fg-strong: rgba(255, 255, 255, 0.96);
--director-dock-active-surface: rgba(255, 255, 255, 0.14);
--director-control-hover: rgba(255, 255, 255, 0.09);
--director-swatch-inset: rgba(0, 0, 0, 0.18);
/* --- Shadow dark 覆盖(暗色下黑影不可见,改用白色微影制造抬升感,审计 D4/P2-D2)---
组件 token(--node-shadow/--dock-shadow/--panel-shadow/--modal-shadow)均引用
var(--shadow-*),此处覆盖自动级联。--cn-spatial-shadow(内联 boxShadow 用)已有
暗色变体(0.4),保留不动。 */
--shadow-xs: 0 1px 2px rgba(255, 255, 255, 0.04);
--shadow-sm: 0 2px 4px rgba(255, 255, 255, 0.05);
--shadow-md: 0 4px 12px rgba(255, 255, 255, 0.06);
--shadow-lg: 0 8px 24px rgba(255, 255, 255, 0.07);
--shadow-xl: 0 16px 40px rgba(255, 255, 255, 0.08);
--shadow-2xl: 0 24px 60px rgba(255, 255, 255, 0.1);
}
/* -------------------------------------------------------------------------
Layer 3: Component — 引用 Semantic,某组件专属
------------------------------------------------------------------------- */
:root {
/* Dock 组件(FloatingDock、悬停工具栏,对应 #95 工具栏方案)*/
--dock-radius: var(--r-xl); /* 14px */
--dock-padding: var(--space-2); /* 8px */
--dock-icon-size: 32px;
--dock-icon-size-labeled: 36px;
--dock-label-fs: var(--fs-label); /* 11px */
--dock-blur: 24px;
--dock-surface: var(--cn-spatial-surface);
--dock-border: var(--cn-spatial-toolbar-border);
--dock-shadow: var(--shadow-lg);
--dock-item-radius: var(--r-md); /* 8px */
--dock-item-radius-labeled: var(--r-lg); /* 12px */
--dock-radius-tight: var(--r-tight);
--dock-radius-compact: var(--r-dock-compact);
--dock-tooltip-z: 140;
--dock-precision-width: var(--space-12);
--dock-z-popover: 30; /* dock 子面板在 toolbar 根 stacking context 内的层级(见 ADR-001)*/
/* Canvas 创建菜单:固定行高保证图标、徽标和单行标签互不挤占 */
--canvas-create-node-height: var(--space-12);
--canvas-create-resource-height: var(--space-8);
/* Node 组件(画布节点,对应 #97 节点视觉规范)*/
--node-radius: var(--r-2xl); /* 16px */
--node-border-width: var(--stroke-1); /* 1px */
--node-border: var(--cn-stroke);
--node-active-border-width: var(--stroke-2); /* 2px */
--node-active-border: var(--cn-active-stroke);
--node-active-glow: 0 0 0 4px var(--cn-active-stroke-soft);
--node-active-glow-strong: 0 0 0 6px var(--cn-active-stroke-soft);
--node-shadow: var(--shadow-sm);
--node-shadow-hover: var(--shadow-md);
--node-shadow-selected: var(--shadow-lg);
--node-shadow-selected-primary: var(--shadow-xl);
--node-shadow-active: var(--shadow-2xl);
--node-header-height: 24px;
--node-title-fs: var(--fs-label); /* 11px */
--node-badge-fs: var(--fs-tiny); /* 10px */
--node-type-strip-width: 3px; /* 色带宽度 */
--node-type-badge-size: 20px; /* 图标徽章尺寸 */
--node-z-content: 30; /* 节点遮罩层(stacking context 内,见 ADR-001)*/
--node-z-overlay: 40; /* 节点角标/按钮层 */
--node-z-handle: 50; /* 节点 resize handle 层 */
/* Modal 组件(对话框,对应 #98 面板层级)*/
--modal-radius: var(--r-3xl); /* 20px */
--modal-max-width: 480px;
--modal-overlay-opacity: 0.5;
--modal-shadow: var(--shadow-2xl);
--modal-padding: var(--space-5); /* 20px */
/* Panel 组件(侧边面板,对应 #98 五层体系 L2)*/
--panel-radius: var(--r-2xl); /* 16px */
--panel-padding: var(--space-4); /* 16px */
--panel-shadow: var(--shadow-lg);
--panel-section-gap: var(--space-3); /* 12px */
--panel-width-compact: 320px;
--panel-radius-wide-tight: var(--r-wide-tight);
--loader-z: var(--z-loader);
/* Director workbench / Sequencer */
--director-sequencer-min-height: 180px;
--director-sequencer-label-width: 208px;
--director-sequencer-row-height: 30px;
--director-sequencer-base-width: 860px;
--director-sequencer-shot-select-width: 144px;
--director-dock-button-size: var(--space-8);
--director-dock-bottom: var(--space-2);
--director-pose-button-height: var(--space-8);
--director-color-swatch-size: var(--space-6);
/* Canvas 布局(画布页浮层定位,对应审计 P0-8.1/P1-2.1)*/
--canvas-sidebar-width: 232px; /* 项目侧栏宽度(短剧模式)*/
--canvas-panel-width: min(332px, calc(100vw - 24px)); /* 浮动面板默认宽度(活动任务等)*/
/* Prompt 面板(对应 #98 决策2 渐进式三区)*/
--prompt-panel-max-height: min(70vh, 640px);
--prompt-panel-input-min-height: 72px;
--prompt-panel-input-max-height: 224px;
--prompt-panel-section-fs: var(--fs-body); /* 14px A区 */
--prompt-panel-caption-fs: var(--fs-caption); /* 12px B区 */
--prompt-panel-label-fs: var(--fs-label); /* 11px 标签 */
--prompt-panel-heading-fs: var(--fs-heading); /* 16px 区标题 */
/* 进度条(对应 #98 决策3 任务进度)*/
--progress-bar-height: 6px;
--progress-bar-radius: var(--r-xs); /* 3px */
--progress-bar-fill: var(--status-loading);
--progress-bar-fill-success: var(--status-success);
--progress-bar-fill-error: var(--status-error);
/* 缩放控制(对应 #95 决策5)*/
--zoom-control-min: 0.05;
--zoom-control-max: 2;
--zoom-control-step: 0.1;
/* 短剧流程引导步骤(里程碑节点 + 状态轨道)*/
--flow-step-node: var(--space-5); /* 20px 完成/待办节点直径 */
--flow-step-node-current: var(--space-6); /* 24px 当前节点直径 */
--flow-step-gap: var(--space-1); /* 4px 节点与标签间距 */
--flow-step-track-height: var(--stroke-2); /* 2px 状态轨道高 */
--flow-step-track-width: var(--space-5); /* 20px 轨道段长 */
--flow-step-current-glow: 0 0 0 4px var(--cn-active-stroke-soft); /* 当前节点光晕 */
}
@layer base {
* {
@apply border-border outline-ring/50;
}
html,
body,
#root,
.ant-app {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
overscroll-behavior: none;
background: var(--workspace-page);
}
body {
background: var(--workspace-page);
color: var(--foreground);
}
#root {
position: fixed;
inset: 0;
isolation: isolate;
}
textarea {
resize: none;
}
textarea::-webkit-resizer {
display: none;
}
html {
@apply font-sans;
}
}
/* CodeMirror 使用运行时注入样式,需在全局覆盖中绑定项目主题 token。 */
.prompt-code-editor,
.prompt-code-editor .cm-editor {
width: 100%;
height: 100%;
min-height: 0;
}
.prompt-code-editor .cm-editor {
background: var(--workspace-surface-strong) !important;
color: var(--foreground);
font-size: var(--fs-caption);
}
.prompt-code-editor .cm-editor.cm-focused {
outline: 2px solid color-mix(in srgb, var(--workspace-accent) 42%, transparent);
outline-offset: -2px;
}
.prompt-code-editor .cm-scroller {
overflow: auto;
overflow-x: hidden;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
line-height: 1.65;
}
.prompt-code-editor .cm-content {
padding-block: var(--space-3);
color: var(--foreground) !important;
caret-color: var(--foreground);
}
.prompt-code-editor .cm-line {
padding-inline: var(--space-3);
overflow-wrap: anywhere;
}
.prompt-code-editor .cm-gutters {
border-right: 1px solid var(--workspace-border) !important;
background: color-mix(in srgb, var(--workspace-surface-strong) 92%, var(--foreground) 8%) !important;
color: color-mix(in srgb, var(--foreground) 42%, transparent) !important;
}
.prompt-code-editor .cm-activeLine,
.prompt-code-editor .cm-activeLineGutter {
background: color-mix(in srgb, var(--workspace-accent) 7%, transparent) !important;
}
.prompt-code-editor .cm-selectionBackground,
.prompt-code-editor .cm-content ::selection {
background: color-mix(in srgb, var(--workspace-accent) 24%, transparent) !important;
}
@layer utilities {
.app-spatial-workspace {
--workspace-canvas: var(--background);
--workspace-page: var(--workspace-canvas);
--workspace-navigation: var(--workspace-page);
--workspace-content: var(--workspace-page);
--workspace-surface: rgba(255, 255, 255, 0.74);
--workspace-surface-strong: rgba(255, 255, 255, 0.94);
--workspace-border: rgba(17, 17, 17, 0.1);
--workspace-border-strong: rgba(17, 17, 17, 0.2);
--workspace-grid-line: rgba(17, 17, 17, 0.035);
--workspace-nav: var(--workspace-navigation);
--workspace-sidebar: var(--workspace-navigation);
--workspace-accent: #171717;
--workspace-accent-soft: rgba(17, 17, 17, 0.065);
background-color: var(--workspace-canvas);
background-image:
linear-gradient(var(--workspace-grid-line) 1px, transparent 1px),
linear-gradient(90deg, var(--workspace-grid-line) 1px, transparent 1px);
background-size: 34px 34px;
}
.dark .app-spatial-workspace {
--workspace-canvas: var(--background);
--workspace-page: var(--workspace-canvas);
--workspace-navigation: var(--workspace-page);
--workspace-content: var(--workspace-page);
--workspace-surface: rgba(18, 18, 18, 0.76);
--workspace-surface-strong: rgba(22, 22, 22, 0.94);
--workspace-border: rgba(255, 255, 255, 0.09);
--workspace-border-strong: rgba(255, 255, 255, 0.18);
--workspace-grid-line: rgba(255, 255, 255, 0.026);
--workspace-nav: var(--workspace-navigation);
--workspace-sidebar: var(--workspace-navigation);
--workspace-accent: #f5f5f5;
--workspace-accent-soft: rgba(255, 255, 255, 0.08);
}
.app-workspace-shell.is-spatial {
position: relative;
gap: 0;
padding: 0;
}
.app-workspace-sidebar-scrim {
position: absolute;
z-index: 30;
inset: 0;
border: 0;
background: rgba(0, 0, 0, 0.42);
backdrop-filter: blur(2px);
}
.app-workspace-shell.is-spatial .app-workspace-sidebar {
border: 0;
border-right: 1px solid var(--workspace-border);
border-radius: 0;
background: var(--workspace-navigation);
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.dark .app-workspace-shell.is-spatial .app-workspace-sidebar {
box-shadow: none;
}
body.app-spatial-overlays {
--workspace-overlay-bg: rgba(244, 244, 245, 0.78);
--workspace-overlay-bg-strong: rgba(250, 250, 250, 0.88);
--workspace-overlay-border: rgba(17, 17, 17, 0.22);
--workspace-overlay-divider: rgba(17, 17, 17, 0.1);
--workspace-overlay-highlight: rgba(255, 255, 255, 0.86);
--workspace-overlay-hover: rgba(17, 17, 17, 0.065);
--workspace-overlay-selected: rgba(17, 17, 17, 0.1);
--workspace-overlay-shadow: 0 26px 72px rgba(15, 23, 42, 0.18), 0 4px 18px rgba(15, 23, 42, 0.08);
}
.dark body.app-spatial-overlays {
--workspace-overlay-bg: rgba(10, 10, 11, 0.78);
--workspace-overlay-bg-strong: rgba(15, 15, 16, 0.88);
--workspace-overlay-border: rgba(255, 255, 255, 0.22);
--workspace-overlay-divider: rgba(255, 255, 255, 0.105);
--workspace-overlay-highlight: rgba(255, 255, 255, 0.2);
--workspace-overlay-hover: rgba(255, 255, 255, 0.075);
--workspace-overlay-selected: rgba(255, 255, 255, 0.115);
--workspace-overlay-shadow: 0 30px 84px rgba(0, 0, 0, 0.62), 0 8px 24px rgba(0, 0, 0, 0.34);
}
body.app-spatial-overlays :where(
.ant-dropdown-menu,
.ant-select-dropdown,
.ant-popover-inner,
.ant-picker-dropdown .ant-picker-panel-container,
.ant-cascader-menus,
.ant-mentions-dropdown,
.ant-tooltip-inner,
.ant-modal-content,
.ant-drawer-content,
.ant-message-notice-content,
.ant-notification-notice
) {
border: 1px solid var(--workspace-overlay-border) !important;
background:
linear-gradient(145deg, var(--workspace-overlay-highlight), transparent 24%, transparent 76%, rgba(158, 178, 214, 0.055)),
var(--workspace-overlay-bg) !important;
box-shadow:
var(--workspace-overlay-shadow),
inset 0 1px 0 var(--workspace-overlay-highlight),
inset 1px 0 0 color-mix(in srgb, var(--workspace-overlay-highlight) 36%, transparent) !important;
backdrop-filter: blur(30px) saturate(138%) !important;
-webkit-backdrop-filter: blur(30px) saturate(138%) !important;
}
body.app-spatial-overlays :where(.ant-modal-content, .ant-drawer-content, .ant-notification-notice) {
background:
linear-gradient(145deg, var(--workspace-overlay-highlight), transparent 20%, transparent 82%, rgba(158, 178, 214, 0.05)),
var(--workspace-overlay-bg-strong) !important;
}
body.app-spatial-overlays :where(.ant-dropdown-menu, .ant-select-dropdown, .ant-popover-inner, .ant-cascader-menus, .ant-mentions-dropdown) {
border-radius: 8px !important;
}
body.app-spatial-overlays :where(
.ant-dropdown-menu-item:not(.ant-dropdown-menu-item-disabled),
.ant-dropdown-menu-submenu-title:not(.ant-dropdown-menu-item-disabled),
.ant-select-item-option:not(.ant-select-item-option-disabled),
.ant-cascader-menu-item:not(.ant-cascader-menu-item-disabled),
.ant-mentions-dropdown-menu-item
) {
border-radius: 5px;
transition: background-color var(--motion-instant) ease-out, color var(--motion-instant) ease-out;
}
body.app-spatial-overlays :where(
.ant-dropdown-menu-item:not(.ant-dropdown-menu-item-disabled):hover,
.ant-dropdown-menu-submenu-title:not(.ant-dropdown-menu-item-disabled):hover,
.ant-select-item-option-active:not(.ant-select-item-option-disabled),
.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),
.ant-mentions-dropdown-menu-item-active
) {
background: var(--workspace-overlay-hover) !important;
}
body.app-spatial-overlays :where(
.ant-dropdown-menu-item-selected,
.ant-select-item-option-selected:not(.ant-select-item-option-disabled),
.ant-cascader-menu-item-active
) {
background: var(--workspace-overlay-selected) !important;
color: var(--foreground) !important;
}
body.app-spatial-overlays :where(
.ant-dropdown-menu-item-divider,
.ant-popover-inner-content > .border-b,
.ant-popover-inner-content > .border-y,
.ant-modal-header,
.ant-modal-footer,
.ant-drawer-header
) {
border-color: var(--workspace-overlay-divider) !important;
}
body.app-spatial-overlays :where(.ant-popover-arrow::before, .ant-tooltip-arrow::before) {
border: 1px solid var(--workspace-overlay-border);
background: var(--workspace-overlay-bg-strong) !important;
}
body.app-spatial-overlays :where(.ant-modal-mask, .ant-drawer-mask) {
background: rgba(0, 0, 0, 0.48) !important;
backdrop-filter: blur(7px);
-webkit-backdrop-filter: blur(7px);
}
@media (prefers-reduced-transparency: reduce) {
body.app-spatial-overlays :where(
.ant-dropdown-menu,
.ant-select-dropdown,
.ant-popover-inner,
.ant-picker-dropdown .ant-picker-panel-container,
.ant-cascader-menus,
.ant-mentions-dropdown,
.ant-tooltip-inner,
.ant-modal-content,
.ant-drawer-content,
.ant-message-notice-content,
.ant-notification-notice
) {
background: var(--workspace-overlay-bg-strong) !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
}
.app-workspace-shell.is-spatial .app-workspace-brand-mark {
border: 1px solid color-mix(in srgb, var(--workspace-accent) 36%, transparent);
background: var(--workspace-accent);
color: color-mix(in srgb, var(--workspace-canvas) 92%, black);
box-shadow: 0 8px 24px color-mix(in srgb, var(--workspace-accent) 18%, transparent);
}
.app-workspace-shell.is-spatial .app-workspace-nav-link.is-active {
background: var(--workspace-accent-soft);
color: var(--foreground);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--workspace-accent) 13%, transparent);
}
.app-workspace-shell.is-spatial .app-workspace-nav-link.is-active::before {
left: -9px;
width: 3px;
height: 20px;
box-shadow: 0 0 18px color-mix(in srgb, var(--workspace-accent) 42%, transparent);
}
.app-workspace-shell.is-spatial .app-workspace-stage {
border-radius: 0;
background: var(--workspace-content);
}
/* 工作区保留滚轮与触控板滚动,只隐藏会形成额外竖向分割的浏览器轨道。 */
.app-spatial-workspace .app-workspace-scroll {
scrollbar-width: none;
}
.app-spatial-workspace .app-workspace-scroll::-webkit-scrollbar {
display: none;
}
.app-spatial-workspace .app-page-header {
border-color: var(--workspace-border);
}
.app-spatial-workspace .app-page-header h1 {
letter-spacing: 0;
text-wrap: balance;
}
.app-spatial-workspace .app-workspace-surface,
.app-spatial-workspace .app-collection-card {
border-color: var(--workspace-border);
background: var(--workspace-surface);
box-shadow:
0 18px 50px color-mix(in srgb, var(--workspace-canvas) 54%, transparent),
inset 0 1px 0 color-mix(in srgb, white 8%, transparent);
backdrop-filter: blur(18px) saturate(118%);
}
.app-spatial-workspace .app-collection-card:hover,
.app-spatial-workspace .app-collection-card:focus-within {
border-color: var(--workspace-border-strong);
background: color-mix(in srgb, var(--workspace-surface-strong) 96%, var(--workspace-accent) 4%);
box-shadow: 0 18px 42px color-mix(in srgb, var(--workspace-accent) 7%, transparent);
}
.app-spatial-workspace .app-table-surface {
border-color: var(--workspace-border);
background: var(--workspace-surface-strong);
box-shadow:
0 20px 54px color-mix(in srgb, var(--workspace-canvas) 58%, transparent),
inset 0 1px 0 color-mix(in srgb, white 7%, transparent);
}
.app-spatial-workspace .app-data-table .ant-table,
.app-spatial-workspace .app-data-table .ant-table-container {
background: transparent;
}
.app-spatial-workspace .app-list-search:focus-within {
filter: drop-shadow(0 0 16px color-mix(in srgb, var(--workspace-accent) 10%, transparent));
}
.app-spatial-workspace .app-pagination-bar {
border-color: var(--workspace-border);
background: transparent;
}
.app-spatial-workspace .app-home-header {
border-color: var(--workspace-border);
}
.app-spatial-workspace .app-home-metric {
border-color: var(--workspace-border);
background: var(--workspace-surface);
box-shadow:
0 16px 42px color-mix(in srgb, var(--workspace-canvas) 56%, transparent),
inset 0 1px 0 color-mix(in srgb, white 8%, transparent);
backdrop-filter: blur(18px) saturate(115%);
}
.app-spatial-workspace .app-home-metric svg {
width: 17px;
height: 17px;
}
.app-spatial-workspace .workspace-signal-icon path {
stroke: var(--workspace-accent) !important;
}
.app-spatial-workspace .workspace-signal-icon circle {
fill: color-mix(in srgb, var(--workspace-accent) 62%, transparent) !important;
}
.app-spatial-workspace .ant-switch.ant-switch-checked {
background: var(--workspace-accent);
}
.dark .app-spatial-workspace .ant-switch.ant-switch-checked .ant-switch-handle::before {
background: #171717;
}
.app-spatial-workspace .app-home-focus-panel,
.app-spatial-workspace .project-overview-focus,
.app-spatial-workspace .project-pipeline-surface {
border-color: var(--workspace-border);
background: var(--workspace-surface-strong);
box-shadow:
0 26px 72px color-mix(in srgb, var(--workspace-canvas) 64%, transparent),
inset 0 1px 0 color-mix(in srgb, white 8%, transparent);
}
.app-spatial-workspace .app-home-focus-panel {
min-height: 330px;
}
.app-spatial-workspace .spatial-chapter-panel,
.app-spatial-workspace .project-overview-status {
background: color-mix(in srgb, var(--workspace-surface) 82%, var(--workspace-accent) 3%);
}
.spatial-chapter-deck {
position: relative;
min-height: 242px;
perspective: 900px;
perspective-origin: 50% 34%;
transform-style: preserve-3d;
}
.spatial-chapter-card {
position: absolute;
top: 0;
left: 3%;
display: block;
width: min(82%, 290px);
height: 92px;
overflow: hidden;
border: 1px solid var(--workspace-border-strong);
border-radius: 7px;
background: color-mix(in srgb, var(--workspace-surface-strong) 95%, white 5%);
padding: 13px 15px;
color: color-mix(in srgb, var(--foreground) 76%, transparent);
box-shadow:
0 18px 28px rgba(0, 0, 0, 0.24),
inset 0 1px 0 color-mix(in srgb, white 13%, transparent);
transform: translate3d(var(--deck-x), var(--deck-y), var(--deck-z)) rotateX(46deg) rotateZ(-7deg);
transform-origin: center top;
transition:
border-color var(--motion-state) var(--ease-aceternity),
background-color var(--motion-state) var(--ease-aceternity),
color var(--motion-state) var(--ease-aceternity),
transform var(--motion-state) var(--ease-aceternity);
}
.spatial-chapter-card:hover,
.spatial-chapter-card:focus-visible {
z-index: 20 !important;
border-color: color-mix(in srgb, var(--workspace-accent) 58%, var(--workspace-border));
color: var(--foreground);
outline: none;
transform: translate3d(calc(var(--deck-x) + 8px), calc(var(--deck-y) - 5px), 18px) rotateX(34deg) rotateZ(-5deg);
}
.spatial-chapter-card.is-active {
border-color: color-mix(in srgb, var(--workspace-accent) 74%, white 8%);
background: var(--workspace-accent);
color: color-mix(in srgb, var(--workspace-canvas) 90%, black);
box-shadow:
0 22px 50px color-mix(in srgb, var(--workspace-accent) 23%, transparent),
inset 0 1px 0 rgba(255, 255, 255, 0.28);
}
.spatial-chapter-card.is-loading {
border-color: var(--workspace-border);
background: color-mix(in srgb, var(--foreground) 4%, var(--workspace-surface-strong));
}
.app-spatial-workspace .app-workflow-rail {
border-color: var(--workspace-border);
}
.app-spatial-workspace .app-workflow-step {
border-color: var(--workspace-border);
transition: background-color var(--motion-instant) ease-out;
}
.app-spatial-workspace .app-workflow-step:hover {
background: var(--workspace-accent-soft);
}
.app-spatial-workspace .project-workbench-header {
border-color: var(--workspace-border);
background: color-mix(in srgb, var(--workspace-nav) 92%, transparent);
box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--workspace-accent) 4%, transparent);
backdrop-filter: blur(22px) saturate(120%);
}
.app-spatial-workspace .project-pipeline-surface > div > a:hover {
background: color-mix(in srgb, var(--workspace-accent) 5%, transparent);
}
@media (max-width: 639px) {
.app-workspace-shell.is-spatial {
gap: 6px;
padding: 6px;
}
.app-workspace-shell.is-spatial .app-workspace-sidebar,
.app-workspace-shell.is-spatial .app-workspace-stage {
border-radius: 6px;
}
}
@media (max-width: 1023px) {
.app-workspace-sidebar-scrim {
left: 0;
}
.app-workspace-shell .app-workspace-sidebar.is-mobile-expanded {
position: absolute;
z-index: 40;
inset: 6px auto 6px 6px;
width: min(196px, calc(100vw - 58px));
box-shadow: 22px 0 70px rgba(0, 0, 0, 0.58), inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.app-spatial-workspace .app-home-focus-panel {
min-height: 0;
}
.spatial-chapter-deck {
display: grid;
min-height: 0;
gap: 8px;
perspective: none;
}
.spatial-chapter-card {
position: relative;
left: auto;
top: auto;
width: 100%;
height: auto;
min-height: 68px;
transform: none;
}
.spatial-chapter-card:hover,
.spatial-chapter-card:focus-visible {
transform: translateX(3px);
}
}
@media (prefers-reduced-motion: reduce) {
.spatial-chapter-card,
.spatial-chapter-card:hover,
.spatial-chapter-card:focus-visible {
transition: none;
transform: none;
}
}
.app-user-workspace {
background-color: var(--workspace-page);
}
.app-workspace-shell {
background: var(--workspace-page);
}
.app-workspace-sidebar {
border-right: 1px solid var(--workspace-border);
background: var(--workspace-navigation);
transition: width var(--motion-state) var(--ease-aceternity);
}
.app-workspace-stage,
.app-user-content,
.app-workspace-grid {
background: var(--workspace-content);
}
.app-workspace-page {
background: var(--workspace-content);
}
.app-workspace-navigation {
background: var(--workspace-navigation);
}
.app-workspace-nav-link.is-active {
background: color-mix(in srgb, var(--foreground) 6%, transparent);
color: var(--foreground);
}
.app-workspace-nav-link.is-active::before {
position: absolute;
left: -8px;
width: 2px;
height: 18px;
border-radius: 0 2px 2px 0;
background: var(--workspace-accent);
content: "";
}
.app-workspace-icon-button {
display: inline-flex;
width: 30px;
height: 30px;
flex: 0 0 auto;
align-items: center;
justify-content: center;
border-radius: 6px;
color: color-mix(in srgb, var(--foreground) 58%, transparent);
transition: color var(--motion-instant) ease-out, background-color var(--motion-instant) ease-out;
}
.app-workspace-icon-button:hover {
background: color-mix(in srgb, var(--foreground) 6%, transparent);
color: var(--foreground);
}
/* Sidebar custom scrollbar - 隐身融入设计 */
.app-workspace-sidebar-scroll-area {
position: relative; /* 为渐变遮罩定位 */
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: transparent transparent; /* 默认完全隐藏 */
transition: scrollbar-color var(--motion-state) ease-in-out;
}
.app-workspace-sidebar-scroll-area::-webkit-scrollbar {
width: 4px;
background: transparent; /* 默认轨道透明 */
}
.app-workspace-sidebar-scroll-area::-webkit-scrollbar-track {
background: transparent;
}
.app-workspace-sidebar-scroll-area::-webkit-scrollbar-thumb {
background: transparent; /* 默认滑块透明 */
border-radius: 9999px;
transition: background-color var(--motion-state) ease-in-out;
}
/* Hover state - 显示滚动条 */
.app-workspace-sidebar:hover .app-workspace-sidebar-scroll-area,
.app-workspace-sidebar-scroll-area:hover {
scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
}
.app-workspace-sidebar:hover .app-workspace-sidebar-scroll-area::-webkit-scrollbar-thumb,
.app-workspace-sidebar-scroll-area:hover::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.2);
}
/* Dark mode scrollbar */
.dark .app-workspace-sidebar:hover .app-workspace-sidebar-scroll-area,
.dark .app-workspace-sidebar-scroll-area:hover {
scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
}
.dark .app-workspace-sidebar:hover .app-workspace-sidebar-scroll-area::-webkit-scrollbar-thumb,
.dark .app-workspace-sidebar-scroll-area:hover::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.15);
}
/* Scroll fade gradients - 光影提示设计 */
.app-workspace-sidebar-scroll-area.has-top-fade::before,
.app-workspace-sidebar-scroll-area.has-bottom-fade::after {
content: "";
position: absolute;
left: 0;
right: 0;
height: 12px;
pointer-events: none; /* 不阻塞点击事件 */
z-index: 10;
}
.app-workspace-sidebar-scroll-area.has-top-fade::before {
top: 0;
background: var(--workspace-navigation);
}
.app-workspace-sidebar-scroll-area.has-bottom-fade::after {
bottom: 0;
background: var(--workspace-navigation);
}
.workspace-signal-icon {
filter: drop-shadow(0 7px 16px color-mix(in srgb, var(--workspace-accent) 14%, transparent));
}
.workspace-state {
animation: workspace-state-enter var(--motion-panel) var(--ease-product-enter) both;
}
.workspace-loading-state .ant-skeleton-title,
.workspace-loading-state .ant-skeleton-paragraph > li {
border-radius: 4px;
}
:where(.ant-btn) {
letter-spacing: 0;
transition:
color var(--motion-instant) ease-out,
background-color var(--motion-instant) ease-out,
border-color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out,
transform 90ms ease-out;
}
:where(.ant-btn:not(:disabled)):active {
transform: scale(0.98);
}
:where(.ant-select-item-option-content) {
min-width: 0;
}
.creation-home {
--creation-accent: var(--workspace-accent);
--creation-bg: var(--workspace-page);
--creation-surface: rgba(255, 255, 255, .68);
--creation-surface-muted: rgba(238, 241, 245, .68);
--creation-surface-hover: rgba(228, 232, 237, .7);
--creation-surface-selected: rgba(218, 223, 229, .72);
--creation-border: rgba(179, 188, 199, .34);
--creation-border-strong: rgba(123, 136, 151, .42);
--creation-text: #17191d;
--creation-muted: #929aa5;
--creation-faint: #b5bbc3;
isolation: isolate;
background: var(--creation-bg);
color: var(--creation-text);
backdrop-filter: blur(18px) saturate(112%);
-webkit-backdrop-filter: blur(18px) saturate(112%);
}
.dark .creation-home {
--creation-accent: var(--workspace-accent);
--creation-bg: var(--workspace-page);
--creation-surface: rgba(27, 29, 34, .72);
--creation-surface-muted: rgba(35, 38, 44, .68);
--creation-surface-hover: rgba(47, 50, 58, .72);
--creation-surface-selected: rgba(57, 61, 70, .74);
--creation-border: rgba(104, 111, 124, .24);
--creation-border-strong: rgba(137, 146, 160, .36);
--creation-text: #f2f4f6;
--creation-muted: #737b86;
--creation-faint: #565d67;
}
.creation-new-button {
position: absolute;
z-index: 30;
top: 24px;
right: 28px;
display: grid;
width: 36px;
height: 36px;
place-items: center;
border: 1px solid var(--creation-border);
border-radius: 9px;
background: var(--creation-surface);
color: var(--creation-muted);
box-shadow: 0 8px 24px rgba(31, 37, 45, .06), inset 0 1px 0 color-mix(in srgb, white 58%, transparent);
backdrop-filter: blur(18px) saturate(125%);
-webkit-backdrop-filter: blur(18px) saturate(125%);
transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease;
}
.creation-new-button:hover {
border-color: var(--creation-border-strong);
background: var(--creation-surface-hover);
color: var(--creation-text);
}
.creation-empty-workspace {
display: flex;
width: min(1000px, calc(100% - 64px));
min-height: 100%;
flex: 1 0 auto;
flex-direction: column;
align-items: center;
justify-content: center;
margin: 0 auto;
padding: 0 0 20px;
}
.creation-empty-composer {
width: 100%;
animation: creation-workbench-enter var(--motion-dur-slow-calc) var(--motion-ease-out) both;
}
.creation-composer {
position: relative;
width: 100%;
min-width: 0;
border: 1px solid var(--creation-border);
border-radius: 16px;
background: var(--creation-surface);
box-shadow: 0 22px 72px rgba(27, 33, 42, .065), inset 0 1px 0 color-mix(in srgb, white 76%, transparent);
overflow: hidden;
backdrop-filter: blur(26px) saturate(128%);
-webkit-backdrop-filter: blur(26px) saturate(128%);
transition: border-color 180ms ease, box-shadow 180ms ease;
}
.creation-composer::before {
position: absolute;
z-index: 1;
top: 0;
right: 22px;
left: 22px;
height: 1px;
background: linear-gradient(90deg, transparent, color-mix(in srgb, white 72%, transparent), transparent);
content: "";
pointer-events: none;
}
.creation-composer:focus-within {
border-color: var(--creation-border-strong);
box-shadow: 0 24px 68px rgba(27, 33, 42, .11), 0 0 0 3px color-mix(in srgb, var(--creation-accent) 7%, transparent), inset 0 1px 0 color-mix(in srgb, white 78%, transparent);
}
.dark .creation-composer {
border-color: rgba(255, 255, 255, .075);
background: rgba(22, 24, 29, .66);
box-shadow: 0 20px 72px rgba(0, 0, 0, .22), inset 0 1px 0 rgba(255, 255, 255, .04);
}
.dark .creation-composer:focus-within {
border-color: rgba(6, 182, 212, .34);
box-shadow: 0 28px 84px rgba(0, 0, 0, .32), 0 0 0 1px rgba(6, 182, 212, .1), inset 0 1px 0 rgba(255, 255, 255, .055);
}
.creation-prompt-area {
display: grid;
min-height: 174px;
grid-template-columns: 64px minmax(0, 1fr);
gap: 16px;
padding: 24px 24px 14px;
}
.creation-reference-tile {
display: flex;
width: 56px;
height: 70px;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
border: 1px solid var(--creation-border);
border-radius: 5px;
background: color-mix(in srgb, var(--creation-surface-muted) 80%, transparent);
color: var(--creation-muted);
transform: rotate(-7deg);
transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease, transform 160ms var(--motion-ease-out);
}
.creation-reference-tile:hover:not(:disabled) {
border-color: var(--creation-border-strong);
background: var(--creation-surface-hover);
color: var(--creation-text);
transform: rotate(-3deg) translateY(-2px);
}
.creation-reference-tile:disabled {
cursor: not-allowed;
opacity: .45;
}
.creation-reference-tile svg {
width: 17px;
height: 17px;
}
.creation-reference-tile span {
font-size: 9px;
font-weight: 600;
}
.creation-prompt-editor {
min-width: 0;
}
.creation-prompt-editor textarea {
width: 100%;
min-height: 126px;
resize: none;
border: 0;
background: transparent;
color: var(--creation-text);
font-size: 14px;
line-height: 1.75;
outline: none;
}
.creation-prompt-editor textarea::placeholder {
color: var(--creation-muted);
opacity: .82;
}
.creation-prompt-editor textarea:disabled {
cursor: wait;
opacity: .62;
}
.creation-attachment-strip {
display: flex;
gap: 8px;
padding-top: 8px;
overflow-x: auto;
}
.creation-attachment {
position: relative;
width: 48px;
height: 48px;
flex: 0 0 auto;
overflow: hidden;
border: 1px solid var(--creation-border);
border-radius: 8px;
background: var(--creation-surface-muted);
}
.creation-attachment img {
width: 100%;
height: 100%;
object-fit: cover;
}
.creation-attachment button {
position: absolute;
top: 3px;
right: 3px;
display: grid;
width: 17px;
height: 17px;
place-items: center;
border-radius: 50%;
background: rgba(15, 16, 18, .72);
color: white;
opacity: 0;
transition: opacity 140ms ease;
}
.creation-attachment:hover button,
.creation-attachment button:focus-visible {
opacity: 1;
}
.creation-attachment button svg {
width: 10px;
height: 10px;
}
.creation-composer-toolbar {
display: flex;
min-height: 64px;
align-items: center;
justify-content: space-between;
gap: 10px;
border-top: 1px solid color-mix(in srgb, var(--creation-border) 72%, transparent);
padding: 10px 16px 10px 18px;
}
.creation-composer-control-row {
display: flex;
min-width: 0;
align-items: center;
gap: 8px;
}
.creation-reference-button {
display: grid;
width: 34px;
height: 34px;
flex: 0 0 auto;
place-items: center;
border: 1px solid var(--creation-border);
border-radius: 9px;
background: color-mix(in srgb, var(--creation-surface-muted) 68%, transparent);
color: var(--creation-muted);
transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease, transform 120ms ease;
}
.creation-reference-button svg {
width: 16px;
height: 16px;
}
.creation-reference-button:hover:not(:disabled) {
border-color: var(--creation-border-strong);
background: var(--creation-surface-hover);
color: var(--creation-text);
transform: translateY(-1px);
}
.creation-reference-button:active:not(:disabled) {
transform: scale(.96);
}
.creation-reference-button:disabled {
cursor: not-allowed;
opacity: .45;
}
.creation-composer-primary-tools {
display: flex;
min-width: 0;
flex: 0 1 auto;
flex-wrap: wrap;
align-items: center;
gap: 6px;
border: 0;
border-radius: 0;
background: transparent;
padding: 0;
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.dark .creation-composer-primary-tools {
gap: 6px;
border: 0;
background: transparent;
padding: 0;
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.dark .creation-reference-button {
border-color: rgba(255, 255, 255, .07);
background: rgba(38, 41, 48, .44);
}
.creation-chip {
display: inline-flex;
height: 36px;
min-width: 0;
align-items: center;
justify-content: center;
gap: 7px;
border: 1px solid var(--creation-border);
border-radius: 8px;
background: color-mix(in srgb, var(--creation-surface-muted) 70%, transparent);
color: var(--creation-text);
padding: 0 10px;
font-size: 11px;
font-weight: 600;
white-space: nowrap;
box-shadow: inset 0 1px 0 color-mix(in srgb, white 40%, transparent);
transition: background-color 160ms ease, color 160ms ease, transform 120ms ease;
}
.creation-chip:hover,
.creation-chip[aria-expanded="true"] {
border-color: var(--creation-border-strong);
background: var(--creation-surface-hover);
}
.creation-chip:active {
transform: scale(.98);
}
.creation-chip.is-accent {
color: var(--creation-accent);
}
.creation-chip.is-accent[aria-expanded="true"] {
background: color-mix(in srgb, var(--creation-accent) 9%, transparent);
}
.dark .creation-chip {
border: 1px solid rgba(255, 255, 255, .075);
background: rgba(38, 41, 48, .64);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .035);
}
.dark .creation-chip:hover,
.dark .creation-chip[aria-expanded="true"] {
border-color: rgba(255, 255, 255, .13);
background: rgba(48, 52, 61, .82);
}
.dark .creation-chip.is-accent {
border-color: rgba(6, 182, 212, .2);
background: rgba(6, 182, 212, .08);
}
.creation-chip > svg {
width: 14px;
height: 14px;
flex: 0 0 auto;
}
.creation-chip > svg:last-child {
width: 13px;
height: 13px;
color: var(--creation-muted);
transition: transform 160ms var(--motion-ease-out);
}
.creation-chip > svg:last-child.is-open {
transform: rotate(180deg);
}
.creation-model-picker.canvas-composer-model-picker {
width: min(210px, 25vw) !important;
height: 36px !important;
border: 1px solid var(--creation-border) !important;
border-radius: 8px !important;
background: color-mix(in srgb, var(--creation-surface-muted) 70%, transparent) !important;
color: var(--creation-text) !important;
padding: 0 9px !important;
font-size: 11px;
font-weight: 600;
}
.creation-model-picker.canvas-composer-model-picker:hover,
.creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border-color: var(--creation-border-strong) !important;
background: var(--creation-surface-hover) !important;
}
.dark .creation-model-picker.canvas-composer-model-picker {
border: 1px solid rgba(255, 255, 255, .075) !important;
background: rgba(38, 41, 48, .64) !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .035);
}
.dark .creation-model-picker.canvas-composer-model-picker:hover,
.dark .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border-color: rgba(255, 255, 255, .13) !important;
background: rgba(48, 52, 61, .82) !important;
}
.creation-model-picker .canvas-model-picker-trigger-icon {
width: 22px;
height: 22px;
border-radius: 6px;
}
.creation-submit-button {
display: grid;
width: 40px;
height: 40px;
flex: 0 0 auto;
place-items: center;
border-radius: 50%;
background: var(--creation-text);
color: var(--creation-bg);
margin-left: auto;
box-shadow: inset 0 1px 0 color-mix(in srgb, white 26%, transparent), 0 8px 20px rgba(19, 23, 29, .14);
transition: background-color 160ms ease, color 160ms ease, transform 120ms ease, box-shadow 160ms ease;
}
.creation-composer-toolbar > .creation-submit-button {
margin-left: auto;
}
.creation-submit-button:hover:not(:disabled) {
transform: translateY(-1px);
}
.creation-submit-button:active:not(:disabled) {
transform: scale(.96);
}
.creation-submit-button:disabled {
cursor: not-allowed;
background: var(--creation-surface-selected);
color: var(--creation-faint);
}
.creation-submit-button.is-stopping {
background: #c84646;
color: white;
}
.creation-new-button:focus-visible,
.creation-reference-tile:focus-visible,
.creation-reference-button:focus-visible,
.creation-chip:focus-visible,
.creation-submit-button:focus-visible {
outline: 2px solid color-mix(in srgb, var(--creation-accent) 55%, transparent);
outline-offset: 2px;
}
.creation-inspiration-strip {
display: grid;
width: 100%;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
margin-top: 26px;
}
.creation-inspiration-strip button {
display: flex;
min-width: 0;
height: 76px;
align-items: center;
gap: 11px;
overflow: hidden;
border: 1px solid var(--creation-border);
border-radius: 10px;
background: color-mix(in srgb, var(--creation-surface) 74%, transparent);
color: var(--creation-text);
padding: 8px 11px;
text-align: left;
box-shadow: inset 0 1px 0 color-mix(in srgb, white 52%, transparent);
backdrop-filter: blur(18px) saturate(120%);
-webkit-backdrop-filter: blur(18px) saturate(120%);
transition: border-color 160ms ease, background-color 160ms ease, transform 160ms var(--motion-ease-out);
}
.creation-inspiration-strip button:hover {
border-color: var(--creation-border-strong);
background: var(--creation-surface-muted);
transform: translateY(-2px);
}
.creation-inspiration-strip img {
width: 58px;
height: 58px;
flex: 0 0 auto;
border-radius: 8px;
object-fit: cover;
}
.creation-inspiration-strip span {
min-width: 0;
overflow: hidden;
font-size: 12px;
font-weight: 600;
text-overflow: ellipsis;
white-space: nowrap;
}
.dark .creation-inspiration-strip button {
border-color: rgba(255, 255, 255, .06);
background: rgba(25, 27, 32, .72);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .035);
}
.dark .creation-inspiration-strip button:hover {
border-color: rgba(255, 255, 255, .13);
background: rgba(33, 36, 43, .86);
}
.creation-thread-stage {
width: min(840px, calc(100% - 48px));
flex: 1 0 auto;
margin: 0 auto;
padding: 72px 0 48px;
}
.creation-results {
width: 100%;
animation: creation-results-enter var(--motion-dur-base-calc) var(--motion-ease-out) both;
}
.creation-thread-composer {
position: sticky;
z-index: 20;
bottom: 0;
width: min(840px, calc(100% - 48px));
flex: 0 0 auto;
margin: 0 auto;
padding: 10px 0 22px;
background: linear-gradient(180deg, transparent, var(--creation-bg) 22%);
}
.creation-composer-meta {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 4px 0;
color: var(--creation-muted);
font-size: 10px;
}
.creation-composer-meta a {
display: inline-flex;
align-items: center;
gap: 5px;
color: inherit;
}
.creation-composer-meta a:hover {
color: var(--creation-text);
}
.creation-control-popover {
filter: none !important;
}
.creation-control-popover-surface,
.creation-model-picker-surface {
border: 1px solid rgba(220, 225, 231, .82) !important;
border-radius: 14px !important;
background: rgba(255, 255, 255, .78) !important;
box-shadow: 0 18px 46px rgba(20, 26, 35, .14), inset 0 1px 0 rgba(255, 255, 255, .78) !important;
overflow: hidden;
padding: 0 !important;
backdrop-filter: blur(28px) saturate(140%);
-webkit-backdrop-filter: blur(28px) saturate(140%);
animation: creation-popover-enter var(--motion-dur-fast-calc) var(--motion-ease-out) both;
}
.dark .creation-control-popover-surface,
.dark .creation-model-picker-surface {
border-color: rgba(61, 66, 76, .72) !important;
background: rgba(25, 27, 32, .92) !important;
box-shadow: 0 20px 52px rgba(0, 0, 0, .34), inset 0 1px 0 rgba(255, 255, 255, .055) !important;
}
.creation-control-popover-content,
.creation-model-picker-surface .ant-popover-inner-content {
padding: 0 !important;
}
.creation-mode-picker-menu {
width: 176px;
padding: 6px;
color: #17191d;
}
.dark .creation-mode-picker-menu {
color: #f2f4f6;
}
.creation-mode-picker-menu button {
display: flex;
width: 100%;
height: 40px;
align-items: center;
gap: 10px;
border-radius: 8px;
padding: 0 8px;
color: inherit;
font-size: 13px;
text-align: left;
transition: background-color 150ms ease;
}
.creation-mode-picker-menu button:hover,
.creation-mode-picker-menu button.is-selected {
background: #f1f2f4;
}
.dark .creation-mode-picker-menu button:hover,
.dark .creation-mode-picker-menu button.is-selected {
background: #282b31;
}
.creation-mode-picker-menu button > svg {
width: 15px;
height: 15px;
margin-left: auto;
}
.creation-menu-icon {
display: grid;
width: 26px;
height: 26px;
place-items: center;
border: 1px solid #e5e7eb;
border-radius: 7px;
}
.dark .creation-menu-icon {
border-color: #30343b;
}
.creation-menu-icon svg {
width: 15px;
height: 15px;
}
.creation-settings-panel {
width: min(400px, calc(100vw - 24px));
padding: 16px;
color: #17191d;
}
.dark .creation-settings-panel {
color: #f2f4f6;
}
.creation-settings-section + .creation-settings-section {
margin-top: 18px;
}
.creation-settings-section h3,
.creation-duration-panel h3 {
margin: 0 0 9px;
color: #8c949f;
font-size: 12px;
font-weight: 520;
}
.dark .creation-settings-section h3,
.dark .creation-duration-panel h3 {
color: #69717c;
}
.creation-segmented-grid {
display: grid;
gap: 4px;
border: 1px solid rgba(226, 230, 235, .7);
border-radius: 10px;
background: rgba(240, 242, 245, .7);
padding: 3px;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.dark .creation-segmented-grid {
border-color: rgba(58, 63, 72, .58);
background: rgba(35, 38, 44, .72);
}
.creation-segmented-grid.is-ratio {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
.creation-segmented-grid.is-resolution {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.creation-segmented-grid.is-quality,
.creation-segmented-grid.is-count {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.creation-segmented-grid button {
display: flex;
min-width: 0;
min-height: 48px;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
border-radius: 8px;
color: #3f454d;
font-size: 13px;
box-shadow: inset 0 1px 0 transparent;
transition: background-color 150ms ease, color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
}
.dark .creation-segmented-grid button {
color: #e3e6ea;
}
.creation-segmented-grid button:hover {
background: rgba(255, 255, 255, .58);
transform: translateY(-1px);
}
.creation-segmented-grid button:active {
transform: scale(.97);
}
.dark .creation-segmented-grid button:hover {
background: #2b2e35;
}
.creation-segmented-grid button.is-selected {
background: rgba(255, 255, 255, .84);
color: #17191d;
box-shadow: 0 2px 10px rgba(22, 28, 36, .07), inset 0 1px 0 rgba(255, 255, 255, .72);
}
.dark .creation-segmented-grid button.is-selected {
background: rgba(58, 62, 71, .86);
color: #ffffff;
box-shadow: 0 5px 14px rgba(0, 0, 0, .14), inset 0 1px 0 rgba(255, 255, 255, .07);
}
.creation-segmented-grid button small {
color: #9ba2ac;
font-size: 9px;
}
.dark .creation-segmented-grid button small {
color: #747b85;
}
.creation-ratio-preview {
display: grid;
width: 28px;
height: 19px;
place-items: center;
}
.creation-ratio-preview > span {
display: block;
border: 1.5px solid currentColor;
border-radius: 3px;
}
.creation-segmented-grid.is-resolution button,
.creation-segmented-grid.is-count button {
min-height: 42px;
font-size: 13px;
}
.creation-duration-panel {
width: min(400px, calc(100vw - 24px));
padding: 16px 18px 18px;
color: #17191d;
}
.dark .creation-duration-panel {
color: #f2f4f6;
}
.creation-duration-control {
display: grid;
grid-template-columns: minmax(0, 1fr) 96px;
align-items: center;
gap: 24px;
}
.creation-range-wrap input {
width: 100%;
height: 24px;
appearance: none;
background: transparent;
cursor: pointer;
}
.creation-range-wrap input::-webkit-slider-runnable-track {
height: 8px;
border-radius: 999px;
background: #e1e4e8;
}
.dark .creation-range-wrap input::-webkit-slider-runnable-track {
background: #30343b;
}
.creation-range-wrap input::-webkit-slider-thumb {
width: 8px;
height: 26px;
margin-top: -9px;
appearance: none;
border-radius: 4px;
background: #17191d;
box-shadow: none;
}
.dark .creation-range-wrap input::-webkit-slider-thumb {
background: #ffffff;
}
.creation-range-wrap input::-moz-range-track {
height: 8px;
border-radius: 999px;
background: #e1e4e8;
}
.dark .creation-range-wrap input::-moz-range-track {
background: #30343b;
}
.creation-range-wrap input::-moz-range-thumb {
width: 8px;
height: 26px;
border: 0;
border-radius: 4px;
background: #17191d;
}
.dark .creation-range-wrap input::-moz-range-thumb {
background: #ffffff;
}
.creation-range-labels {
display: flex;
justify-content: space-between;
margin-top: 4px;
color: #6f7781;
font-size: 12px;
font-variant-numeric: tabular-nums;
}
.creation-duration-value {
display: flex;
height: 56px;
align-items: center;
justify-content: space-between;
border: 1px solid rgba(226, 230, 235, .7);
border-radius: 9px;
background: rgba(240, 242, 244, .72);
padding: 0 17px;
}
.dark .creation-duration-value {
border-color: rgba(58, 63, 72, .6);
background: rgba(43, 46, 53, .78);
}
.creation-duration-value strong {
font-size: 17px;
font-weight: 550;
}
.creation-duration-value span {
color: #8f97a2;
font-size: 16px;
}
.creation-model-picker-menu {
width: min(384px, calc(100vw - 24px)) !important;
max-height: min(460px, calc(100vh - 24px));
padding: 8px !important;
background: rgba(255, 255, 255, .7) !important;
color: #17191d !important;
}
.dark .creation-model-picker-menu {
background: rgba(25, 27, 32, .7) !important;
color: #f2f4f6 !important;
}
.creation-model-picker-menu .canvas-model-picker-group-label {
padding: 7px 8px 6px;
font-size: 11px;
}
.creation-model-picker-heading {
display: flex;
min-width: 0;
align-items: center;
gap: 7px;
padding: 3px 8px 9px;
color: #929aa5;
font-size: 12px;
}
.creation-model-picker-heading strong {
min-width: 0;
overflow: hidden;
color: #17191d;
font-weight: 520;
text-overflow: ellipsis;
white-space: nowrap;
}
.dark .creation-model-picker-heading {
color: #69717c;
}
.dark .creation-model-picker-heading strong {
color: #f2f4f6;
}
.creation-model-picker-menu .canvas-model-picker-option {
min-height: 52px;
border-radius: 9px;
padding: 7px 9px;
transition: background-color 150ms ease, transform 120ms ease;
}
.creation-model-picker-menu .canvas-model-picker-option:hover {
transform: translateY(-1px);
}
.creation-model-picker-menu .canvas-model-picker-option > span:first-child {
gap: 12px;
}
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:first-child {
width: 34px;
height: 34px;
border: 1px solid #e6e8eb;
border-radius: 8px;
background: rgba(255, 255, 255, .66) !important;
}
.dark .creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:first-child {
border-color: #30343b;
background: rgba(35, 38, 44, .72) !important;
}
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:nth-child(2) > span:first-child {
font-size: 13px;
}
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:nth-child(2) > span:nth-child(2) {
margin-top: 5px;
font-size: 10px;
}
@keyframes creation-results-enter {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes creation-popover-enter {
from { opacity: 0; transform: translateY(6px) scale(.985); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes creation-workbench-enter {
from { opacity: 0; transform: translateY(12px) scale(.992); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
/* 创作首页使用独立的“编辑面 + 操作 Dock”结构,避免继承画布的面板语言。 */
.creation-home {
--creation-bg: var(--workspace-page);
--creation-surface: #131519;
--creation-surface-muted: #1e2127;
--creation-surface-hover: #262a31;
--creation-surface-selected: #343841;
--creation-border: rgba(255, 255, 255, .105);
--creation-border-strong: rgba(255, 255, 255, .2);
--creation-text: #f3f4f6;
--creation-muted: #737985;
--creation-faint: #4d535e;
background: var(--creation-bg);
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
html:not(.dark) .creation-home {
--creation-bg: var(--workspace-page);
--creation-surface: #ffffff;
--creation-surface-muted: #f0f2f5;
--creation-surface-hover: #e9edf1;
--creation-surface-selected: #dde1e7;
--creation-border: rgba(32, 37, 45, .13);
--creation-border-strong: rgba(32, 37, 45, .25);
--creation-text: #17191d;
--creation-muted: #89919d;
--creation-faint: #abb2bb;
}
.creation-empty-workspace {
width: min(1280px, calc(100% - 80px));
padding: 0 0 12px;
}
.creation-studio-composer {
width: 100%;
overflow: hidden;
border: 1px solid var(--creation-border);
border-radius: 26px;
background: var(--creation-surface);
box-shadow: 0 28px 70px rgba(0, 0, 0, .18);
animation: creation-workbench-enter var(--motion-dur-slow-calc) var(--motion-ease-out) both;
}
html:not(.dark) .creation-studio-composer {
box-shadow: 0 24px 62px rgba(25, 31, 41, .08);
}
.creation-studio-composer:focus-within {
border-color: var(--creation-border-strong);
box-shadow: 0 28px 70px rgba(0, 0, 0, .22);
}
.creation-studio-writing-surface {
display: grid;
min-height: 232px;
grid-template-columns: 82px minmax(0, 1fr);
gap: 22px;
padding: 28px 34px 18px;
}
.creation-studio-reference {
display: flex;
width: 74px;
height: 92px;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 6px;
align-self: start;
border: 1px solid rgba(132, 143, 161, .24);
border-radius: 8px;
background: #1c1f25;
color: #c8cdd5;
transform: rotate(-7deg);
transition: transform 180ms var(--motion-ease-out), border-color 180ms ease, background-color 180ms ease;
}
html:not(.dark) .creation-studio-reference {
background: #f1f3f6;
color: #69717c;
}
.creation-studio-reference:hover:not(:disabled) {
border-color: rgba(6, 182, 212, .55);
background: #22262d;
transform: rotate(-3deg) translateY(-3px);
}
.creation-studio-reference:disabled { cursor: wait; opacity: .5; }
.creation-studio-reference svg { width: 23px; height: 23px; }
.creation-studio-reference span { font-size: 11px; font-weight: 600; }
.creation-studio-editor { min-width: 0; }
.creation-studio-editor textarea {
display: block;
width: 100%;
min-height: 170px;
resize: none;
border: 0;
outline: 0;
background: transparent;
color: var(--creation-text);
font-size: 17px;
line-height: 1.75;
}
.creation-studio-editor textarea::placeholder { color: var(--creation-muted); opacity: .72; }
.creation-studio-editor textarea:disabled { cursor: wait; opacity: .56; }
.creation-studio-attachment-strip {
display: flex;
gap: 8px;
padding-top: 6px;
overflow-x: auto;
}
.creation-studio-attachment {
position: relative;
width: 54px;
height: 54px;
flex: 0 0 auto;
overflow: hidden;
border: 1px solid var(--creation-border);
border-radius: 10px;
background: var(--creation-surface-muted);
}
.creation-studio-attachment img { width: 100%; height: 100%; object-fit: cover; }
.creation-studio-attachment button {
position: absolute;
top: 4px;
right: 4px;
display: grid;
width: 18px;
height: 18px;
place-items: center;
border-radius: 50%;
background: rgba(0, 0, 0, .7);
color: white;
opacity: 0;
transition: opacity 140ms ease;
}
.creation-studio-attachment:hover button,
.creation-studio-attachment button:focus-visible { opacity: 1; }
.creation-studio-attachment button svg { width: 11px; height: 11px; }
.creation-studio-dock {
display: flex;
min-height: 80px;
align-items: center;
justify-content: space-between;
gap: 16px;
border-top: 1px solid var(--creation-border);
padding: 14px 32px 14px 34px;
}
.creation-studio-controls {
display: flex;
min-width: 0;
flex-wrap: wrap;
align-items: center;
gap: 10px;
}
.creation-studio-control,
.creation-model-picker.canvas-composer-model-picker {
display: inline-flex;
height: 48px !important;
min-width: 0;
align-items: center;
justify-content: center;
gap: 10px;
border: 1px solid rgba(255, 255, 255, .12) !important;
border-radius: 14px !important;
background: #202329 !important;
color: #f1f3f5 !important;
padding: 0 15px !important;
font-size: 14px;
font-weight: 600;
white-space: nowrap;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .055);
transition: transform 150ms var(--motion-ease-out), border-color 150ms ease, background-color 150ms ease;
}
html:not(.dark) .creation-studio-control,
html:not(.dark) .creation-model-picker.canvas-composer-model-picker {
border-color: rgba(32, 37, 45, .12) !important;
background: #f0f2f5 !important;
color: #20242a !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .85);
}
.creation-studio-control:hover,
.creation-studio-control[aria-expanded="true"],
.creation-model-picker.canvas-composer-model-picker:hover,
.creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border-color: rgba(255, 255, 255, .25) !important;
background: #292d34 !important;
transform: translateY(-1px);
}
html:not(.dark) .creation-studio-control:hover,
html:not(.dark) .creation-studio-control[aria-expanded="true"],
html:not(.dark) .creation-model-picker.canvas-composer-model-picker:hover,
html:not(.dark) .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] { background: #e7eaee !important; border-color: rgba(32, 37, 45, .22) !important; }
.creation-studio-control:active { transform: scale(.98); }
.creation-studio-control.is-mode { border-color: rgba(6, 182, 212, .36) !important; background: rgba(4, 73, 89, .28) !important; color: #18c2e1 !important; }
.creation-studio-control > svg { width: 19px; height: 19px; flex: 0 0 auto; }
.creation-studio-control > svg:last-child { width: 17px; height: 17px; color: var(--creation-muted); transition: transform 160ms var(--motion-ease-out); }
.creation-studio-control > svg:last-child.is-open { transform: rotate(180deg); }
.creation-model-picker.canvas-composer-model-picker {
width: min(328px, 30vw) !important;
justify-content: flex-start;
font-size: 15px;
}
.creation-model-picker .canvas-model-picker-trigger-icon { width: 25px; height: 25px; border-radius: 8px; }
.creation-studio-submit {
display: grid;
width: 58px;
height: 58px;
flex: 0 0 auto;
place-items: center;
border: 1px solid rgba(255, 255, 255, .15);
border-radius: 50%;
background: #383d47;
color: #e5e8ec;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .13);
cursor: pointer;
transition: transform 150ms var(--motion-ease-out), background-color 150ms ease, color 150ms ease;
}
.creation-studio-submit:hover:not(:disabled) { background: #f4f5f6; color: #111317; transform: translateY(-1px); }
.creation-studio-submit:active:not(:disabled) { transform: scale(.96); }
.creation-studio-submit:disabled { cursor: not-allowed; background: #2d3139; color: #5a606b; }
.creation-studio-submit.is-stopping { background: #bd4949; color: white; }
/* 对话态不沿用空态大面板:编辑、控制与消息流各自保持紧凑的固定职责。 */
.creation-empty-workspace {
width: min(1120px, calc(100% - 64px));
justify-content: center;
padding-bottom: 6vh;
}
.creation-empty-composer { width: 100%; margin: 0; }
.creation-chat-intro {
display: flex;
flex-direction: column;
align-items: center;
margin: 0 0 28px;
}
.creation-chat-intro-mark {
display: grid;
width: 30px;
height: 30px;
place-items: center;
margin-bottom: 10px;
border-radius: 10px;
background: rgba(255, 255, 255, .055);
color: var(--creation-accent);
animation: creation-intro-mark 2.8s var(--motion-ease-out) infinite;
}
.creation-chat-intro-mark svg { width: 16px; height: 16px; }
.creation-chat-headline {
margin: 0;
color: var(--creation-text);
font-size: 26px;
font-weight: 620;
line-height: 1.25;
text-align: center;
}
.creation-chat-headline span { display: inline-block; margin-left: 4px; color: var(--creation-accent); animation: creation-intro-word 2.8s var(--motion-ease-out) infinite; }
.creation-chat-intro p { margin: 8px 0 0; color: var(--creation-muted); font-size: 12px; }
.creation-chat-composer {
width: 100%;
overflow: hidden;
border: 0;
border-radius: 22px;
background: #1a1c21;
box-shadow: none;
}
html:not(.dark) .creation-chat-composer {
background: #fff;
box-shadow: 0 10px 32px rgba(20, 26, 35, .05);
}
.creation-chat-composer:focus-within { box-shadow: none; }
.creation-chat-writing-surface {
display: grid;
min-height: 92px;
grid-template-columns: 42px minmax(0, 1fr);
gap: 14px;
padding: 15px 18px 8px;
}
.creation-chat-reference {
display: grid;
width: 42px;
height: 42px;
place-items: center;
border: 0;
border-radius: 12px;
background: #242730;
color: #eef1f4;
box-shadow: none;
transition: transform 140ms var(--motion-ease-out), background-color 140ms ease, border-color 140ms ease;
}
.creation-chat-reference:hover:not(:disabled) {
background: #2c3039;
transform: translateY(-1px);
}
.creation-chat-reference:active:not(:disabled) { transform: scale(.96); }
.creation-chat-reference:disabled { cursor: wait; opacity: .45; }
.creation-chat-reference svg { width: 21px; height: 21px; }
html:not(.dark) .creation-chat-reference { background: #eff2f5; color: #1d2229; box-shadow: none; }
.creation-chat-composer.is-empty .creation-chat-writing-surface {
min-height: 126px;
grid-template-columns: 62px minmax(0, 1fr);
gap: 16px;
padding: 20px 24px 9px;
}
.creation-chat-reference.is-paper {
width: 56px;
height: 72px;
flex-direction: column;
gap: 4px;
border-radius: 4px;
background: #242730;
color: #bec5ce;
transform: rotate(-7deg);
}
.creation-chat-reference.is-paper:hover:not(:disabled) { background: #2c3039; transform: rotate(-4deg) translateY(-2px); }
.creation-chat-reference.is-paper svg { width: 18px; height: 18px; }
.creation-chat-reference.is-paper span { font-size: 9px; font-weight: 600; }
.creation-chat-editor { min-width: 0; }
.creation-chat-editor textarea {
display: block;
width: 100%;
min-height: 78px;
resize: none;
border: 0;
outline: 0;
background: transparent;
color: var(--creation-text);
font-size: 14px;
line-height: 1.7;
}
.creation-chat-editor textarea::placeholder { color: var(--creation-muted); opacity: .76; }
.creation-chat-editor textarea:disabled { cursor: wait; opacity: .55; }
.creation-chat-attachment-strip { display: flex; gap: 7px; padding-top: 6px; overflow-x: auto; }
.creation-chat-attachment { position: relative; width: 42px; height: 42px; flex: 0 0 auto; overflow: hidden; border: 1px solid var(--creation-border); border-radius: 8px; }
.creation-chat-attachment img { width: 100%; height: 100%; object-fit: cover; }
.creation-chat-attachment button { position: absolute; top: 2px; right: 2px; display: grid; width: 16px; height: 16px; place-items: center; border-radius: 50%; background: rgba(0, 0, 0, .7); color: white; opacity: 0; transition: opacity 140ms ease; }
.creation-chat-attachment:hover button, .creation-chat-attachment button:focus-visible { opacity: 1; }
.creation-chat-attachment button svg { width: 10px; height: 10px; }
.creation-chat-dock {
display: flex;
min-height: 58px;
align-items: center;
justify-content: space-between;
gap: 12px;
border-top: 0;
padding: 8px 14px 12px;
}
.creation-chat-controls { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 6px; }
.creation-chat-control,
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker {
display: inline-flex;
height: 32px !important;
min-width: 0;
align-items: center;
justify-content: center;
gap: 6px;
border: 1px solid rgba(255, 255, 255, .055) !important;
border-radius: 8px !important;
background: rgba(30, 33, 39, .78) !important;
color: #e6e9ed !important;
padding: 0 9px !important;
font-size: 11px;
font-weight: 600;
white-space: nowrap;
box-shadow: none;
transition: border-color 140ms ease, background-color 140ms ease, transform 140ms var(--motion-ease-out);
}
.creation-chat-control:hover,
.creation-chat-control[aria-expanded="true"],
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover,
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] { border-color: rgba(255, 255, 255, .12) !important; background: #272b32 !important; transform: translateY(-1px); }
.creation-chat-control:active { transform: scale(.98); }
.creation-chat-control.is-mode { border-color: rgba(6, 182, 212, .36) !important; background: rgba(5, 80, 98, .24) !important; color: #17c4e2 !important; }
.creation-chat-control > svg { width: 15px; height: 15px; flex: 0 0 auto; }
.creation-chat-control > svg:last-child { width: 14px; height: 14px; color: var(--creation-muted); transition: transform 160ms var(--motion-ease-out); }
.creation-chat-control > svg:last-child.is-open { transform: rotate(180deg); }
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker { width: min(196px, 26vw) !important; justify-content: flex-start; }
.creation-chat-composer .creation-model-picker .canvas-model-picker-trigger-icon { width: 19px; height: 19px; border-radius: 5px; }
html:not(.dark) .creation-chat-control,
html:not(.dark) .creation-chat-composer .creation-model-picker.canvas-composer-model-picker { border-color: transparent !important; background: #f1f3f5 !important; color: #262b32 !important; }
html:not(.dark) .creation-chat-control:hover,
html:not(.dark) .creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover { border-color: rgba(20, 26, 35, .2) !important; background: #e9edf1 !important; }
.creation-chat-submit {
display: grid;
width: 38px;
height: 38px;
flex: 0 0 auto;
place-items: center;
border: 0;
border-radius: 50%;
background: #303540;
color: #f1f3f5;
transition: background-color 140ms ease, color 140ms ease, transform 140ms var(--motion-ease-out);
}
.creation-chat-submit:hover:not(:disabled) { background: #f3f4f6; color: #121417; transform: translateY(-1px); }
.creation-chat-submit:active:not(:disabled) { transform: scale(.96); }
.creation-chat-submit:disabled { cursor: not-allowed; background: #282c33; color: #5c6370; }
.creation-chat-submit.is-stopping { background: #bd4949; color: white; }
.creation-control-popover-surface {
border: 0 !important;
border-radius: 12px !important;
background: #202227 !important;
box-shadow: 0 16px 38px rgba(0, 0, 0, .36) !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
.creation-parameter-menu { width: 292px; padding: 12px; }
.creation-parameter-section + .creation-parameter-section { margin-top: 14px; }
.creation-parameter-section h3 { margin: 0 0 8px; color: #858c97; font-size: 11px; font-weight: 500; }
.creation-choice-grid { display: grid; gap: 4px; }
.creation-choice-grid.is-ratio { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.creation-choice-grid.is-resolution { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.creation-choice-grid.is-quality, .creation-choice-grid.is-count { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.creation-choice-grid button {
display: flex;
min-width: 0;
min-height: 42px;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
border-radius: 8px;
color: #cdd1d7;
font-size: 11px;
transition: background-color 140ms ease, color 140ms ease;
}
.creation-choice-grid button:hover { background: rgba(255, 255, 255, .055); }
.creation-choice-grid button.is-selected { background: rgba(255, 255, 255, .12); color: #fff; }
.creation-choice-grid button small { display: none; }
.creation-choice-grid.is-resolution button, .creation-choice-grid.is-count button { min-height: 34px; font-size: 12px; }
.creation-choice-grid .creation-ratio-preview { width: 24px; height: 15px; }
.creation-choice-grid .creation-ratio-preview > span { border-width: 1px; border-radius: 2px; }
.creation-duration-menu { width: 250px; padding: 12px 14px; }
.creation-duration-menu > div:first-child { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; color: #858c97; font-size: 11px; }
.creation-duration-menu strong { color: #f3f4f6; font-size: 12px; font-weight: 600; }
.creation-range-wrap input { height: 18px; }
.creation-range-wrap input::-webkit-slider-runnable-track { height: 5px; }
.creation-range-wrap input::-webkit-slider-thumb { width: 7px; height: 19px; margin-top: -7px; border-radius: 4px; }
.creation-range-wrap input::-moz-range-track { height: 5px; }
.creation-range-wrap input::-moz-range-thumb { width: 7px; height: 19px; border-radius: 4px; }
.creation-range-labels { margin-top: 3px; font-size: 10px; }
html:not(.dark) .creation-control-popover-surface { background: #fff !important; box-shadow: 0 14px 34px rgba(20, 26, 35, .14) !important; }
html:not(.dark) .creation-parameter-section h3, html:not(.dark) .creation-duration-menu > div:first-child { color: #7b8490; }
html:not(.dark) .creation-choice-grid button { color: #4d5661; }
html:not(.dark) .creation-choice-grid button.is-selected { background: #e8ecf0; color: #20242a; }
html:not(.dark) .creation-duration-menu strong { color: #20242a; }
@keyframes creation-intro-mark {
0%, 100% { transform: translateY(0) rotate(0deg); opacity: .72; }
44% { transform: translateY(-3px) rotate(5deg); opacity: 1; }
}
@keyframes creation-intro-word {
0%, 100% { transform: translateY(0); filter: brightness(1); }
44% { transform: translateY(-2px); filter: brightness(1.18); }
}
@media (prefers-reduced-motion: reduce) {
.creation-chat-intro-mark,
.creation-chat-headline span {
animation: none;
}
}
.creation-thread-stage { width: min(960px, calc(100% - 48px)); padding: 48px 0 28px; }
.creation-thread-composer { width: min(960px, calc(100% - 48px)); padding: 10px 0 18px; }
.creation-chat-composer.is-thread .creation-chat-writing-surface { min-height: 76px; padding-top: 12px; }
.creation-chat-composer.is-thread .creation-chat-editor textarea { min-height: 50px; }
.creation-user-message { width: fit-content; max-width: min(70%, 520px); margin: 0 0 34px auto; border-radius: 16px 16px 5px 16px; background: rgba(255, 255, 255, .075); padding: 10px 14px; font-size: 14px; line-height: 1.65; }
html:not(.dark) .creation-user-message { background: rgba(20, 26, 35, .065); }
.creation-user-message-attachments { display: flex; gap: 6px; margin-top: 8px; }
.creation-user-message-attachments img { width: 44px; height: 44px; border-radius: 7px; object-fit: cover; }
.creation-assistant-message { max-width: 760px; margin: 0 0 42px; }
.creation-message-heading { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 8px; color: var(--creation-muted); font-size: 12px; }
.creation-message-mark { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 10px; background: #f3f4f6; color: #15171b; }
.creation-message-mark svg { width: 18px; height: 18px; }
.creation-message-model { max-width: min(400px, 48vw); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.creation-message-state { border-radius: 6px; background: rgba(255, 255, 255, .08); padding: 3px 6px; color: var(--creation-muted); }
.creation-message-state.is-error { background: rgba(185, 61, 61, .18); color: #ec7474; }
.creation-message-content { padding: 14px 0 0 42px; color: var(--creation-text); font-size: 15px; line-height: 1.8; white-space: pre-wrap; }
.creation-message-content > span { color: var(--creation-muted); }
.creation-message-error { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 15px 0 0 42px; color: #ef5350; font-size: 14px; line-height: 1.6; }
.creation-message-error button { display: inline-flex; align-items: center; gap: 6px; border: 1px solid rgba(255, 255, 255, .13); border-radius: 8px; background: rgba(255, 255, 255, .06); color: var(--creation-text); padding: 6px 9px; font-size: 12px; transition: background-color 140ms ease; }
.creation-message-error button:hover { background: rgba(255, 255, 255, .11); }
.creation-message-error button svg { width: 14px; height: 14px; }
@media (max-width: 800px) {
.creation-empty-workspace, .creation-thread-stage, .creation-thread-composer { width: calc(100% - 28px); }
.creation-empty-workspace { padding-bottom: 5vh; }
.creation-chat-writing-surface { grid-template-columns: 38px minmax(0, 1fr); gap: 10px; padding: 13px 14px 8px; }
.creation-chat-reference { width: 38px; height: 38px; border-radius: 11px; }
.creation-chat-editor textarea { min-height: 68px; font-size: 14px; }
.creation-chat-dock { align-items: flex-end; padding: 8px 9px 9px 12px; }
.creation-chat-controls { max-width: calc(100% - 42px); gap: 5px; }
.creation-chat-control, .creation-chat-composer .creation-model-picker.canvas-composer-model-picker { height: 34px !important; padding: 0 8px !important; font-size: 11px; }
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker { width: min(152px, 48vw) !important; }
.creation-chat-submit { width: 36px; height: 36px; }
.creation-thread-stage { padding-top: 28px; }
.creation-assistant-message { margin-bottom: 32px; }
.creation-message-content, .creation-message-error { padding-left: 0; }
.creation-user-message { max-width: 82%; }
}
@media (min-width: 1024px) {
.app-workspace-shell.is-spatial {
gap: 0;
padding: 0;
background: var(--workspace-canvas);
}
.app-workspace-shell.is-spatial .app-workspace-sidebar {
width: 88px !important;
border: 0;
border-radius: 0;
background: var(--workspace-canvas);
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.dark .app-workspace-shell.is-spatial .app-workspace-sidebar { box-shadow: none; }
.app-workspace-shell.is-spatial .app-workspace-stage {
border-radius: 0;
background: transparent;
}
.app-workspace-shell.is-spatial .app-workspace-sidebar > div:first-child {
height: 96px;
border-bottom: 0;
}
.app-workspace-shell.is-spatial .app-workspace-sidebar > div:first-child a > span:not(.app-workspace-brand-mark) { display: none; }
.app-workspace-shell.is-spatial .app-workspace-sidebar .app-workspace-brand-mark {
width: 34px;
height: 34px;
border-radius: 10px;
background: transparent;
color: var(--foreground);
}
.app-workspace-shell.is-spatial .app-workspace-sidebar nav { padding: 18px 10px; }
.app-workspace-shell.is-spatial .app-workspace-sidebar nav > div { display: none; }
.app-workspace-shell.is-spatial .app-workspace-nav-link {
height: 62px !important;
flex-direction: column;
justify-content: center !important;
gap: 5px !important;
margin: 0 0 9px;
padding: 0 !important;
color: var(--foreground);
font-size: 10px;
}
.app-workspace-shell.is-spatial .app-workspace-nav-link > svg { width: 20px; height: 20px; }
.app-workspace-shell.is-spatial .app-workspace-nav-link > span { display: block !important; font-size: 10px; line-height: 1.1; }
.app-workspace-shell.is-spatial .app-workspace-nav-link.is-active { background: transparent; color: var(--foreground); box-shadow: none; }
.app-workspace-shell.is-spatial .app-workspace-nav-link.is-active::before { display: none; }
.app-workspace-shell.is-spatial .app-workspace-sidebar > div:last-child { border-top: 0; padding: 12px 10px 18px; }
}
@media (max-width: 800px) {
.creation-new-button {
top: 16px;
right: 16px;
}
.creation-empty-workspace {
width: calc(100% - 32px);
padding: 72px 0 36px;
}
.creation-headline {
max-width: 300px;
font-size: 24px;
line-height: 1.35;
}
.creation-empty-composer {
margin-top: 28px;
}
.creation-prompt-area {
min-height: 158px;
grid-template-columns: 50px minmax(0, 1fr);
gap: 12px;
padding: 20px 16px 8px;
}
.creation-reference-tile {
width: 46px;
height: 62px;
}
.creation-reference-tile span {
font-size: 9px;
}
.creation-prompt-editor textarea {
min-height: 96px;
font-size: 15px;
}
.creation-composer-toolbar {
align-items: flex-end;
padding: 8px 12px 12px;
}
.creation-composer-primary-tools {
max-width: calc(100% - 46px);
gap: 2px;
}
.creation-chip {
height: 34px;
padding: 0 9px;
}
.creation-model-picker.canvas-composer-model-picker {
width: min(194px, 62vw) !important;
height: 34px !important;
}
.creation-submit-button {
width: 38px;
height: 38px;
}
.creation-inspiration-strip {
grid-template-columns: 1fr;
gap: 8px;
margin-top: 20px;
}
.creation-inspiration-strip button {
height: 66px;
}
.creation-inspiration-strip img {
width: 48px;
height: 48px;
}
.creation-settings-panel {
width: min(440px, calc(100vw - 96px));
padding: 10px;
}
.creation-model-picker-menu,
.creation-duration-panel {
width: min(440px, calc(100vw - 96px)) !important;
}
.creation-settings-section + .creation-settings-section {
margin-top: 10px;
}
.creation-settings-section h3,
.creation-duration-panel h3 {
margin-bottom: 6px;
font-size: 11px;
}
.creation-segmented-grid.is-ratio {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.creation-segmented-grid {
gap: 2px;
padding: 2px;
}
.creation-segmented-grid.is-ratio button {
min-height: 42px;
}
.creation-segmented-grid.is-quality,
.creation-segmented-grid.is-quality {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.creation-segmented-grid.is-quality button {
min-height: 40px;
}
.creation-segmented-grid.is-quality button small {
display: none;
}
.creation-segmented-grid.is-count {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.creation-segmented-grid.is-count button {
min-height: 36px;
}
.creation-duration-panel {
padding: 14px;
}
.creation-duration-control {
grid-template-columns: 1fr;
gap: 18px;
}
.creation-duration-value {
height: 50px;
}
.creation-thread-stage,
.creation-thread-composer {
width: calc(100% - 24px);
}
}
@media (max-width: 800px) {
.creation-empty-workspace {
width: calc(100% - 16px);
padding: 0 0 18px;
}
.creation-studio-composer { border-radius: 22px; }
.creation-studio-writing-surface {
min-height: 214px;
grid-template-columns: 64px minmax(0, 1fr);
gap: 14px;
padding: 24px 18px 14px;
}
.creation-studio-reference { width: 58px; height: 76px; }
.creation-studio-reference svg { width: 19px; height: 19px; }
.creation-studio-reference span { font-size: 9px; }
.creation-studio-editor textarea { min-height: 150px; font-size: 14px; }
.creation-studio-dock {
min-height: 0;
align-items: flex-end;
gap: 10px;
padding: 12px 14px 14px 18px;
}
.creation-studio-controls { max-width: calc(100% - 58px); gap: 8px; }
.creation-studio-control,
.creation-model-picker.canvas-composer-model-picker { height: 42px !important; border-radius: 12px !important; padding: 0 11px !important; font-size: 12px; }
.creation-model-picker.canvas-composer-model-picker { width: min(150px, 44vw) !important; }
.creation-studio-control > svg { width: 16px; height: 16px; }
.creation-studio-submit { width: 50px; height: 50px; }
}
@media (prefers-reduced-motion: reduce) {
.creation-reference-tile,
.creation-reference-button,
.creation-empty-composer,
.creation-submit-button,
.creation-results {
animation: none;
transition: none;
}
}
.app-workspace-surface {
border-color: var(--workspace-border);
background: var(--workspace-surface);
box-shadow: 0 18px 54px color-mix(in srgb, var(--workspace-canvas) 62%, transparent), inset 0 1px 0 color-mix(in srgb, white 7%, transparent);
}
.credit-balance-card {
border-color: rgba(225, 185, 74, 0.3);
background: #11100d;
color: #f8edc5;
box-shadow: 0 28px 78px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 228, 145, 0.16);
}
.credit-balance-card::before {
position: absolute;
z-index: 1;
inset: 0;
border-radius: inherit;
background-image:
linear-gradient(to right, rgba(232, 193, 86, 0.055) 1px, transparent 1px),
linear-gradient(to bottom, rgba(232, 193, 86, 0.055) 1px, transparent 1px);
background-size: 28px 28px;
content: "";
pointer-events: none;
}
.credit-balance-card > * {
position: relative;
z-index: 3;
}
.app-collection-card {
position: relative;
overflow: hidden;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--workspace-surface-strong);
transition:
background-color var(--motion-instant) ease-out,
border-color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out;
}
.app-collection-card:hover,
.app-collection-card:focus-within {
border-color: color-mix(in srgb, var(--foreground) 22%, var(--border));
background: color-mix(in srgb, var(--workspace-surface-strong) 96%, var(--foreground) 4%);
box-shadow: none;
}
.canvas-library-search {
max-width: 680px;
}
.canvas-library-page .app-page-header {
border-bottom: 0;
padding-bottom: 8px;
}
.canvas-library-toolbar {
min-height: 56px;
border: 0;
border-radius: 8px;
background: color-mix(in srgb, var(--workspace-surface-strong) 66%, transparent);
padding: 8px;
}
.canvas-library-grid {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
align-items: start;
gap: 20px 16px;
}
.canvas-library-page .app-pagination-bar {
position: static;
margin-top: var(--space-4);
border-color: var(--workspace-border);
background: transparent;
padding: var(--space-1-half) var(--space-2);
backdrop-filter: none;
}
/* 画布文件是单个可点击对象,缩略图与元信息共用一个容器,避免视觉割裂。 */
.app-canvas-project-card {
min-width: 0;
color: var(--foreground);
}
.app-canvas-project-card.is-library {
border-color: var(--workspace-border);
background: color-mix(in srgb, var(--workspace-surface-strong) 76%, transparent);
content-visibility: auto;
contain-intrinsic-size: 0 260px;
transition:
border-color var(--motion-instant) ease-out,
background-color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out,
transform var(--motion-instant) ease-out;
}
.app-canvas-project-card.is-library .app-canvas-project-preview {
overflow: hidden;
border-bottom: 1px solid var(--workspace-border);
background: var(--workspace-surface-strong);
}
.app-canvas-project-card.is-library:hover,
.app-canvas-project-card.is-library:focus-within {
border-color: color-mix(in srgb, var(--foreground) 24%, var(--workspace-border));
background: color-mix(in srgb, var(--workspace-surface-strong) 90%, transparent);
box-shadow: 0 10px 28px rgba(15, 23, 42, 0.07);
transform: translateY(-1px);
}
.app-canvas-project-card.is-library.is-selected {
border-color: var(--workspace-accent);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--workspace-accent) 22%, transparent);
}
.app-canvas-project-card.is-library .app-canvas-project-body {
min-height: 82px;
}
.app-canvas-project-card.is-recent .app-canvas-project-preview {
overflow: hidden;
border: 1px solid var(--workspace-border);
border-radius: 8px;
background: var(--workspace-surface-strong);
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
transition:
border-color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out;
}
.app-canvas-project-card.is-recent:hover .app-canvas-project-preview,
.app-canvas-project-card.is-recent:focus-within .app-canvas-project-preview {
border-color: color-mix(in srgb, var(--foreground) 24%, var(--workspace-border));
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
}
.app-canvas-project-checkbox {
accent-color: var(--workspace-accent);
}
.app-canvas-selection-toolbar {
border-color: color-mix(in srgb, var(--workspace-accent) 24%, var(--workspace-border));
background: var(--workspace-accent-soft);
color: color-mix(in srgb, var(--workspace-accent) 48%, var(--foreground));
}
.dark .app-canvas-project-card.is-library:hover,
.dark .app-canvas-project-card.is-library:focus-within {
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.32);
}
.dark .app-canvas-project-card.is-recent .app-canvas-project-preview {
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.28);
}
.dark .app-canvas-project-card.is-recent:hover .app-canvas-project-preview,
.dark .app-canvas-project-card.is-recent:focus-within .app-canvas-project-preview {
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.34);
}
@media (max-width: 639px) {
.canvas-library-search {
max-width: none;
}
.canvas-library-grid {
grid-template-columns: 1fr;
}
}
.app-data-table .ant-table-pagination {
position: sticky;
z-index: 10;
bottom: 0;
margin: 0 !important;
border-top: 1px solid var(--border);
background: color-mix(in srgb, var(--background) 94%, transparent);
padding: 12px 16px;
backdrop-filter: blur(12px);
}
.app-list-search {
width: 100%;
}
@media (min-width: 640px) {
.app-list-search {
width: 20rem !important;
flex: 0 0 20rem;
}
}
.app-table-surface {
box-shadow: 0 14px 38px color-mix(in srgb, var(--foreground) 5%, transparent), inset 0 1px 0 color-mix(in srgb, var(--background) 72%, transparent);
}
.app-data-table .ant-table-container,
.app-data-table .ant-table-content,
.app-data-table .ant-table-body {
min-width: 0;
}
.app-data-table .ant-table-thead > tr > th,
.app-data-table .ant-table-tbody > tr > td {
overflow: hidden;
}
.app-data-table .ant-table-thead > tr > th {
white-space: nowrap;
}
.task-table-surface {
border-radius: 6px;
box-shadow: none;
}
.task-table-surface .ant-table-thead > tr > th {
height: 38px;
padding: 8px 12px !important;
background: color-mix(in srgb, var(--foreground) 4%, var(--background)) !important;
color: color-mix(in srgb, var(--foreground) 52%, transparent) !important;
font-size: 11px;
font-weight: 500;
}
.task-table-surface .ant-table-tbody > tr > td {
height: 72px;
padding: 10px 12px !important;
background: var(--background);
transition: background-color var(--motion-instant) ease-out;
}
.task-table-surface .ant-table-tbody > tr:hover > td {
background: color-mix(in srgb, var(--foreground) 2.5%, var(--background)) !important;
}
.task-media-preview-modal .ant-modal-body {
display: grid;
min-height: 240px;
place-items: center;
padding: 0 !important;
background: #000;
}
@media (max-width: 767px) {
.task-table-surface .ant-table-content table {
width: 100% !important;
min-width: 100% !important;
}
.task-table-surface .ant-table-tbody > tr > td {
height: auto;
padding: 12px !important;
}
}
.wallet-ledger-table .ant-table-cell:nth-last-child(-n + 2) {
white-space: nowrap;
}
.app-pagination-bar .ant-pagination {
display: flex;
min-width: 0;
flex-wrap: wrap;
justify-content: flex-end;
gap: var(--space-1) 0;
}
:where(.ant-modal-content, .ant-drawer-content) {
border: 1px solid var(--border);
box-shadow: 0 28px 84px rgba(15, 23, 42, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
backdrop-filter: blur(24px);
}
:where(.ant-modal) .ant-modal-content {
padding: 0;
overflow: hidden;
}
:where(.ant-modal) .ant-modal-header {
margin: 0;
border-bottom: 1px solid var(--border);
padding: 13px 16px 12px;
}
:where(.ant-modal) .ant-modal-body {
padding: 14px 16px;
}
:where(.ant-modal) .ant-modal-footer {
margin: 0;
border-top: 1px solid var(--border);
padding: 10px 16px;
}
:where(.ant-modal) .ant-modal-close {
top: 9px;
right: 10px;
}
.ant-drawer .ant-drawer-header {
min-height: 48px;
padding: 10px 14px;
}
.ant-drawer .ant-drawer-body {
padding: 14px;
}
.dark :where(.ant-modal-content, .ant-drawer-content) {
box-shadow: 0 32px 96px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.06) !important;
}
:where(.ant-modal-mask, .ant-drawer-mask) {
backdrop-filter: blur(5px);
}
/* 画风选择器自身就是完整工作区表面,移除 AntD 外壳避免形成双层厚边。 */
.canvas-style-picker-modal .ant-modal-container,
.canvas-style-detail-modal .ant-modal-container {
overflow: hidden;
border: var(--stroke-1) solid var(--border) !important;
border-radius: var(--r-2xl) !important;
padding: 0 !important;
background: transparent !important;
}
.canvas-style-picker-modal .ant-modal-body,
.canvas-style-detail-modal .ant-modal-body {
padding: 0 !important;
}
.canvas-style-picker-modal .ant-modal-close,
.canvas-style-detail-modal .ant-modal-close {
top: var(--space-2);
right: var(--space-2);
color: var(--cn-text);
background: color-mix(in srgb, var(--cn-spatial-elevated) 84%, transparent);
backdrop-filter: blur(var(--space-2));
}
.canvas-toolbar-settings-modal {
max-width: calc(100vw - var(--space-8));
}
.canvas-toolbar-settings-modal .ant-modal-container,
.canvas-toolbar-settings-modal .ant-modal-content {
overflow: hidden;
border: 0 !important;
border-radius: var(--r-xl);
padding: 0 !important;
background: var(--cn-spatial-elevated) !important;
}
.canvas-toolbar-settings-modal .ant-modal-content {
box-shadow: var(--workspace-overlay-shadow) !important;
}
.canvas-toolbar-settings-modal .ant-modal-container {
box-shadow: none !important;
}
.canvas-toolbar-settings-modal .ant-modal-body {
padding: 0 !important;
}
.canvas-toolbar-settings-card {
background: var(--cn-spatial-surface);
transition: background-color var(--motion-dur-fast) var(--motion-ease-out), opacity var(--motion-dur-fast) var(--motion-ease-out);
}
.canvas-toolbar-settings-card:hover {
background: color-mix(in srgb, var(--cn-spatial-surface) 72%, var(--cn-spatial-elevated));
}
.canvas-toolbar-settings-card.is-hidden {
background: color-mix(in srgb, var(--cn-spatial-surface) 52%, transparent);
}
.canvas-toolbar-settings-card.is-hidden .canvas-toolbar-settings-card-content {
opacity: var(--opa-subtle);
}
.canvas-toolbar-settings-card.is-dragging {
opacity: var(--opa-muted);
}
:where(.ant-select-dropdown, .ant-dropdown-menu, .ant-popover-inner) {
border: 1px solid var(--border);
box-shadow: 0 20px 56px rgba(15, 23, 42, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
backdrop-filter: blur(22px);
}
.dark :where(.ant-select-dropdown, .ant-dropdown-menu, .ant-popover-inner) {
box-shadow: 0 24px 64px rgba(0, 0, 0, 0.44), inset 0 1px 0 rgba(255, 255, 255, 0.06) !important;
}
:where(.ant-input, .ant-input-affix-wrapper, .ant-input-number, .ant-select-content) {
transition:
border-color var(--motion-instant) ease-out,
background-color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out !important;
}
.auth-card-tabs .ant-tabs-nav {
margin: 0;
}
.auth-card-tabs .ant-tabs-nav::before {
display: none;
}
.auth-card-tabs .ant-tabs-nav-list {
width: 100%;
}
.auth-card-tabs .ant-tabs-tab {
position: relative;
flex: 1;
justify-content: center;
margin: 0 !important;
padding: 8px 0 12px !important;
color: rgba(255, 255, 255, 0.38);
font-weight: 500;
transition: color var(--motion-instant) ease-out;
}
.auth-card-tabs .ant-tabs-tab:hover {
color: rgba(255, 255, 255, 0.68);
}
.auth-card-tabs .ant-tabs-tab-active::after {
position: absolute;
bottom: 3px;
left: 50%;
width: 20px;
height: 2px;
border-radius: 1px;
background: rgba(255, 255, 255, 0.82);
content: "";
transform: translateX(-50%);
}
.auth-card-tabs .ant-tabs-tab-active .ant-tabs-tab-btn {
color: rgba(255, 255, 255, 0.94) !important;
text-shadow: none;
}
.auth-card-tabs .ant-tabs-tab-btn:focus-visible {
border-radius: 3px;
outline: 1px solid rgba(255, 255, 255, 0.48);
outline-offset: 3px;
}
.auth-card-tabs .ant-tabs-ink-bar {
display: none;
}
.auth-card-dark :where(.ant-input, .ant-input-affix-wrapper) {
border-color: transparent !important;
background: rgba(255, 255, 255, 0.055) !important;
box-shadow: none !important;
transition: border-color var(--motion-instant) ease-out, background-color var(--motion-instant) ease-out !important;
}
.auth-card-dark .ant-input-affix-wrapper > .ant-input {
background: transparent !important;
}
.auth-card-dark :where(.ant-input:hover, .ant-input-affix-wrapper:hover) {
border-color: rgba(255, 255, 255, 0.08) !important;
background: rgba(255, 255, 255, 0.07) !important;
}
.auth-card-dark :where(.ant-input:focus, .ant-input-focused, .ant-input-affix-wrapper-focused) {
border-color: transparent !important;
background: rgba(255, 255, 255, 0.085) !important;
outline: none !important;
box-shadow: none !important;
}
.auth-card-dark .ant-input-affix-wrapper-focused .ant-input-prefix svg {
color: rgba(255, 255, 255, 0.62) !important;
}
.auth-card-dark input:-webkit-autofill,
.auth-card-dark input:-webkit-autofill:hover,
.auth-card-dark input:-webkit-autofill:focus {
box-shadow: 0 0 0 1000px #17181c inset !important;
-webkit-text-fill-color: #f5f5f5 !important;
caret-color: #f5f5f5;
}
:where(.ant-modal, .ant-drawer, .ant-select-dropdown, .ant-dropdown, .ant-popover) {
overscroll-behavior: contain;
}
@media (prefers-reduced-motion: reduce) {
.app-collection-card {
transition: none;
}
.app-collection-card:hover,
.app-collection-card:focus-within {
transform: none;
}
:where(.ant-input, .ant-input-affix-wrapper, .ant-input-number, .ant-select-content) {
transition: none !important;
}
}
.ant-table-wrapper .ant-table-thead > tr > th {
font-size: 12px;
font-weight: 500;
letter-spacing: 0.015em;
}
.ant-form-item-label > label {
font-weight: 500;
letter-spacing: 0.01em;
}
.aceternity-floating-dock {
isolation: isolate;
transform-origin: bottom center;
box-shadow: 0 24px 72px rgba(15, 23, 42, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.16);
}
.aceternity-dock-command {
border-color: color-mix(in srgb, currentColor 11%, transparent);
background: var(--dock-command-bg);
color: inherit;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12), 0 5px 15px rgba(15, 23, 42, 0.08);
transition:
border-color var(--motion-instant) ease-out,
background-color var(--motion-instant) ease-out,
color var(--motion-instant) ease-out,
box-shadow var(--motion-instant) ease-out;
}
.aceternity-dock-command > span:first-child svg {
width: 100%;
height: 100%;
stroke-width: 1.8;
}
.aceternity-dock-command:hover:not(:disabled) {
border-color: color-mix(in srgb, currentColor 20%, transparent);
background: var(--dock-command-hover);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 12px 30px rgba(15, 23, 42, 0.14);
}
.aceternity-dock-command.is-labeled {
border-color: transparent;
background: transparent;
box-shadow: none;
}
.aceternity-dock-command.is-labeled:hover:not(:disabled) {
border-color: transparent;
background: var(--dock-command-hover);
box-shadow: none;
}
.aceternity-dock-command.is-labeled.is-active {
border-color: transparent;
box-shadow: none;
}
.aceternity-dock-command.is-active {
border-color: color-mix(in srgb, var(--dock-command-active) 28%, transparent);
background: var(--dock-command-active);
color: var(--dock-command-active-text);
box-shadow: 0 12px 30px color-mix(in srgb, var(--dock-command-active) 22%, transparent);
}
.aceternity-dock-command.is-active > span:first-child,
.aceternity-dock-command.is-active > span:first-child svg {
color: var(--dock-command-active-text);
stroke: currentColor;
opacity: 1;
}
.aceternity-dock-command.is-quiet {
border-color: transparent;
background: transparent;
box-shadow: none;
}
.aceternity-dock-command.is-quiet:hover:not(:disabled),
.aceternity-dock-command.is-quiet.is-active {
border-color: transparent;
background: var(--dock-command-hover);
box-shadow: none;
}
.aceternity-dock-command.is-danger {
color: var(--dock-command-danger);
}
.aceternity-dock-danger-group {
background: color-mix(in srgb, var(--dock-command-danger) 8%, transparent);
}
.aceternity-dock-command:focus-visible {
box-shadow: 0 0 0 2px var(--dock-command-bg), 0 0 0 4px var(--dock-command-active);
}
.aceternity-dock-command:disabled {
cursor: not-allowed;
opacity: 0.3;
box-shadow: none;
}
.canvas-image-tool-checkbox .ant-checkbox-inner {
border-color: color-mix(in srgb, var(--tool-accent) 44%, transparent) !important;
background: transparent !important;
}
.canvas-image-tool-checkbox.ant-checkbox-wrapper-checked .ant-checkbox-inner,
.canvas-image-tool-checkbox .ant-checkbox-checked .ant-checkbox-inner {
border-color: var(--tool-accent) !important;
background: var(--tool-accent) !important;
}
.aceternity-dock-separator {
background: color-mix(in srgb, currentColor 13%, transparent);
}
.aceternity-dock-tooltip {
border-color: var(--dock-tooltip-border);
background: var(--dock-tooltip-bg);
color: inherit;
}
.aceternity-floating-panel {
transform-origin: bottom center;
box-shadow: 0 30px 90px rgba(15, 23, 42, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.app-workspace-canvas {
background: var(--workspace-content);
}
.dark .app-workspace-canvas {
background: var(--workspace-content);
}
.app-spatial-surface {
border: 1px solid rgba(17, 24, 39, 0.1);
background: rgba(255, 255, 255, 0.88);
box-shadow: 0 18px 48px rgba(15, 23, 42, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.72);
backdrop-filter: blur(22px);
}
.dark .app-spatial-surface {
border-color: rgba(255, 255, 255, 0.11);
background: rgba(28, 28, 30, 0.88);
box-shadow: 0 22px 60px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(255, 255, 255, 0.07);
}
.app-spatial-interactive {
transition:
transform var(--motion-state) cubic-bezier(0.16, 1, 0.3, 1),
border-color var(--motion-state) ease-out,
box-shadow var(--motion-state) ease-out;
}
.app-spatial-interactive:hover {
transform: translateY(-2px);
border-color: rgba(79, 110, 232, 0.34);
box-shadow: 0 24px 68px rgba(15, 23, 42, 0.14), 0 0 0 1px rgba(79, 110, 232, 0.08);
}
.dark .app-spatial-interactive:hover {
border-color: rgba(130, 144, 240, 0.42);
box-shadow: 0 28px 76px rgba(0, 0, 0, 0.46), 0 0 0 1px rgba(130, 144, 240, 0.1);
}
@media (prefers-reduced-motion: reduce) {
.app-spatial-interactive {
transition: none;
}
.app-spatial-interactive:hover {
transform: none;
}
}
.aceternity-zoom-range {
appearance: none;
border-radius: 999px;
background: color-mix(in srgb, currentColor 12%, transparent);
cursor: ew-resize;
outline: none;
}
.aceternity-zoom-range::-webkit-slider-thumb {
width: 14px;
height: 14px;
appearance: none;
border: 2px solid currentColor;
border-radius: 999px;
background: var(--background);
box-shadow: 0 5px 16px rgba(15, 23, 42, 0.22);
}
.aceternity-zoom-range:focus-visible {
box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 18%, transparent);
}
.aceternity-comet-perspective[data-comet-active="true"] {
perspective: 1200px;
transform-style: preserve-3d;
}
.aceternity-comet-card {
transform-origin: center center;
}
.aceternity-comet-card[data-comet-active="true"] {
transform-style: preserve-3d;
backface-visibility: hidden;
will-change: transform;
}
.aceternity-comet-card::after {
position: absolute;
z-index: 2;
inset: 0;
border-radius: inherit;
background: linear-gradient(145deg, rgba(255, 255, 255, 0.16), transparent 24%, transparent 72%, rgba(255, 255, 255, 0.08));
content: "";
pointer-events: none;
}
.aceternity-drop-grid {
background-image:
linear-gradient(color-mix(in srgb, currentColor 14%, transparent) 1px, transparent 1px),
linear-gradient(90deg, color-mix(in srgb, currentColor 14%, transparent) 1px, transparent 1px);
background-position: center;
background-size: 34px 34px;
mask-image: radial-gradient(circle at center, black 12%, transparent 72%);
}
.ai-title-aurora {
background: linear-gradient(90deg, #111827 0%, #111827 36%, #6b7280 54%, #111827 72%, #111827 100%);
background-size: 220% 100%;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: ai-title-aurora 7s var(--motion-ease-in-out) infinite;
}
.dark .ai-title-aurora {
background: linear-gradient(90deg, #fafaf9 0%, #fafaf9 36%, #a8a29e 54%, #fafaf9 72%, #fafaf9 100%);
background-size: 220% 100%;
-webkit-background-clip: text;
background-clip: text;
}
@keyframes ai-title-aurora {
0%,
100% {
background-position: 0% 50%;
filter: drop-shadow(0 0 0 rgba(0, 0, 0, 0));
}
50% {
background-position: 100% 50%;
filter: drop-shadow(0 12px 28px rgba(28, 25, 23, 0.08));
}
}
.hide-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
.hide-scrollbar::-webkit-scrollbar {
display: none;
}
.prompt-filter-tag.ant-tag-checkable {
margin: 0;
border: 1px solid transparent;
border-radius: 6px;
padding: 5px 10px;
color: #57534e;
font-size: 14px;
line-height: 1;
transition:
background 0.15s ease,
border-color 0.15s ease,
box-shadow 0.15s ease,
color 0.15s ease;
}
.prompt-filter-tag.ant-tag-checkable:hover {
background: rgba(28, 25, 23, 0.06);
color: #1c1917;
}
.prompt-filter-tag.ant-tag-checkable.is-active,
.prompt-filter-tag.ant-tag-checkable-checked {
background: #111111;
border-color: #111111;
color: #ffffff;
font-weight: 600;
}
.dark .prompt-filter-tag.ant-tag-checkable {
color: #e7e5e4;
}
.dark .prompt-filter-tag.ant-tag-checkable:hover {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.dark .prompt-filter-tag.ant-tag-checkable.is-active,
.dark .prompt-filter-tag.ant-tag-checkable-checked {
background: rgba(250, 250, 249, 0.96);
border-color: rgba(255, 255, 255, 0.88);
box-shadow:
0 0 0 1px rgba(255, 255, 255, 0.18),
0 6px 18px rgba(0, 0, 0, 0.22);
color: #0c0a09 !important;
font-weight: 700;
}
.thin-scrollbar {
scrollbar-color: rgba(120, 113, 108, 0.45) transparent;
scrollbar-width: thin;
}
.script-column-picker {
display: flex;
flex-wrap: wrap;
gap: 6px 12px;
font-size: 12px;
}
.script-column-picker .ant-checkbox-wrapper {
margin-inline-start: 0;
color: inherit;
}
.script-column-picker .ant-checkbox-inner {
width: 15px;
height: 15px;
border-radius: 4px;
border-color: rgba(120, 113, 108, 0.58);
background: transparent;
}
.script-column-picker .ant-checkbox-checked .ant-checkbox-inner {
border-color: #5b6ee1;
background: #5b6ee1;
}
.script-column-picker .ant-checkbox-checked .ant-checkbox-inner::after {
width: 4px;
height: 7px;
}
.script-column-picker .ant-checkbox-wrapper:hover .ant-checkbox-inner,
.script-column-picker .ant-checkbox:hover .ant-checkbox-inner {
border-color: #7485ee;
}
.thin-scrollbar::-webkit-scrollbar {
height: 4px;
width: 4px;
}
.thin-scrollbar::-webkit-scrollbar-thumb {
background: rgba(120, 113, 108, 0.45);
border-radius: 999px;
}
.storyboard-scrollbar {
overscroll-behavior: contain;
scrollbar-color: rgba(148, 163, 184, 0.72) rgba(120, 113, 108, 0.14);
scrollbar-gutter: stable;
scrollbar-width: auto;
}
.storyboard-scrollbar::-webkit-scrollbar {
width: 12px;
}
.storyboard-scrollbar::-webkit-scrollbar-track {
background: rgba(120, 113, 108, 0.14);
border-left: 1px solid rgba(120, 113, 108, 0.18);
}
.storyboard-scrollbar::-webkit-scrollbar-thumb {
min-height: 40px;
border: 2px solid transparent;
border-radius: 999px;
background: rgba(148, 163, 184, 0.72);
background-clip: content-box;
}
.storyboard-scrollbar::-webkit-scrollbar-thumb:hover {
background: rgba(186, 196, 210, 0.9);
background-clip: content-box;
}
.hover-scrollbar {
scrollbar-color: transparent transparent;
scrollbar-width: thin;
}
.hover-scrollbar:hover {
scrollbar-color: rgba(120, 113, 108, 0.5) transparent;
}
.hover-scrollbar::-webkit-scrollbar {
height: 6px;
width: 6px;
}
.hover-scrollbar::-webkit-scrollbar-thumb {
background: transparent;
border-radius: 999px;
}
.hover-scrollbar:hover::-webkit-scrollbar-track {
background: rgba(120, 113, 108, 0.12);
border-radius: 999px;
}
.hover-scrollbar:hover::-webkit-scrollbar-thumb {
background: rgba(120, 113, 108, 0.5);
}
.hover-scrollbar-hint {
position: relative;
}
.hover-scrollbar-hint::after {
background: rgba(120, 113, 108, 0.42);
border-radius: 999px;
bottom: 4px;
content: "";
height: 3px;
left: 12px;
opacity: 0;
pointer-events: none;
position: absolute;
right: 12px;
transition: opacity 0.18s ease;
}
.hover-scrollbar-hint:hover::after {
opacity: 1;
}
.canvas-control-select.ant-select .ant-select-content,
.canvas-control-number.ant-input-number {
border-color: rgba(120, 113, 108, 0.32) !important;
box-shadow: none !important;
}
.canvas-compact-control.canvas-control-select.ant-select {
height: 100%;
}
.canvas-compact-control.canvas-control-select.ant-select .ant-select-content,
.canvas-compact-control.canvas-control-number.ant-input-number {
height: 100% !important;
}
.canvas-compact-control.canvas-control-select.ant-select .ant-select-content > :first-child {
align-items: center;
display: flex;
}
.canvas-compact-control.canvas-control-select.ant-select .ant-select-content,
.canvas-compact-control.canvas-control-select.ant-select .ant-select-input,
.canvas-compact-control.canvas-control-number.ant-input-number .ant-input-number-input {
height: 100% !important;
line-height: 1 !important;
}
.canvas-composer-icon.ant-btn {
flex: 0 0 32px;
width: 32px;
}
.canvas-composer-tools {
container-type: inline-size;
}
.canvas-composer-mode-button {
width: 32px;
}
.canvas-composer-tools .canvas-composer-mode-button span,
.canvas-composer-tools .canvas-model-picker-label > span:nth-child(n + 2),
.canvas-composer-tools .canvas-composer-icon.ant-btn > span:not(.ant-btn-icon) {
display: none;
}
.canvas-composer-tools .canvas-composer-model-picker {
width: 32px;
min-width: 32px;
}
.canvas-composer-tools .canvas-composer-model-picker {
padding-inline: 7px !important;
}
.canvas-composer-tools .canvas-model-picker-label {
min-width: 0;
}
.canvas-composer-model-picker {
align-items: center;
appearance: none;
background: color-mix(in srgb, var(--workspace-surface-strong) 94%, var(--workspace-accent) 6%);
border: 0;
border-radius: 9px;
color: var(--foreground);
cursor: pointer;
display: flex;
font: inherit;
gap: 8px;
height: 32px;
justify-content: space-between;
line-height: 1;
max-width: 100%;
min-width: 0;
outline: none !important;
padding: 0 9px;
text-align: left;
transition: background-color var(--motion-instant) ease-out, color var(--motion-instant) ease-out;
}
.canvas-composer-model-picker:hover {
background: color-mix(in srgb, var(--workspace-surface-strong) 88%, var(--workspace-accent) 12%);
}
.canvas-composer-model-picker:focus,
.canvas-composer-model-picker:focus-visible,
.canvas-composer-model-picker[aria-expanded="true"] {
background: color-mix(in srgb, var(--workspace-surface-strong) 84%, var(--workspace-accent) 16%);
box-shadow: none !important;
outline: none !important;
}
.canvas-model-picker-label {
flex: 1 1 auto;
overflow: hidden;
}
.canvas-model-picker-trigger-icon {
align-items: center;
border-radius: 6px;
display: inline-flex;
flex: 0 0 22px;
height: 22px;
justify-content: center;
width: 22px;
}
.canvas-model-picker-chevron {
color: color-mix(in srgb, var(--foreground) 52%, transparent);
flex: 0 0 14px;
height: 14px;
transition: transform var(--motion-instant) ease-out;
width: 14px;
}
.canvas-model-picker-chevron.is-open {
transform: rotate(180deg);
}
.canvas-model-picker-popover,
.canvas-preset-picker-popover {
filter: none !important;
}
.canvas-composer-popover-surface {
border: 0 !important;
border-radius: 10px !important;
background: var(--workspace-surface-strong) !important;
box-shadow: 0 14px 38px rgba(0, 0, 0, 0.22) !important;
overflow: hidden;
padding: 0 !important;
backdrop-filter: blur(22px) saturate(118%);
-webkit-backdrop-filter: blur(22px) saturate(118%);
}
.dark .canvas-composer-popover-surface {
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.34) !important;
}
.canvas-composer-popover-content {
padding: 0 !important;
}
.canvas-model-picker-menu {
max-height: min(420px, calc(100vh - 32px));
min-width: 0;
overflow-x: hidden;
overflow-y: auto;
padding: 4px;
}
.canvas-model-picker-group + .canvas-model-picker-group {
border-top: 1px solid var(--workspace-border);
margin-top: 5px;
padding-top: 5px;
}
.canvas-model-picker-group-label {
align-items: center;
display: flex;
font-size: 10px;
font-weight: 600;
gap: 6px;
letter-spacing: 0.02em;
min-width: 0;
padding: 5px 7px 4px;
}
.canvas-model-picker-option {
align-items: center;
border: 0;
border-radius: 7px;
cursor: pointer;
display: flex;
gap: 8px;
max-width: 100%;
min-height: 44px;
min-width: 0;
outline: none;
overflow: hidden;
padding: 6px 7px;
text-align: left;
transition: background-color var(--motion-instant) ease-out;
width: 100%;
}
.canvas-model-picker-option:hover {
background: color-mix(in srgb, var(--workspace-accent) 9%, transparent) !important;
}
.canvas-model-picker-option:focus-visible {
background: color-mix(in srgb, var(--workspace-accent) 13%, transparent) !important;
outline: none;
}
.canvas-model-picker-option > span:first-child {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
}
.canvas-model-picker-option-check {
flex: 0 0 14px;
height: 14px;
width: 14px;
}
.canvas-model-picker-empty {
font-size: 11px;
padding: 22px 12px;
text-align: center;
}
.canvas-preset-picker-trigger:focus-visible,
.canvas-preset-picker-trigger[aria-expanded="true"] {
background: color-mix(in srgb, var(--workspace-accent) 18%, transparent) !important;
outline: none;
}
.canvas-preset-picker-trigger {
cursor: pointer;
transition: background-color var(--motion-instant) ease-out, color var(--motion-instant) ease-out, transform 90ms ease-out;
}
.canvas-preset-picker-trigger:active {
transform: scale(0.97);
}
.canvas-generation-settings-trigger.ant-btn {
background: color-mix(in srgb, var(--workspace-surface-strong) 94%, var(--workspace-accent) 6%) !important;
border: 0 !important;
color: var(--foreground) !important;
cursor: pointer;
transition: background-color var(--motion-instant) ease-out, color var(--motion-instant) ease-out, transform 90ms ease-out;
}
.canvas-generation-settings-trigger.ant-btn:hover,
.canvas-generation-settings-trigger.ant-btn:focus-visible,
.canvas-generation-settings-trigger.ant-btn[aria-expanded="true"] {
background: color-mix(in srgb, var(--workspace-surface-strong) 86%, var(--workspace-accent) 14%) !important;
box-shadow: none !important;
outline: none !important;
}
.canvas-generation-settings-trigger.ant-btn .ant-btn-icon {
color: color-mix(in srgb, var(--workspace-accent) 72%, var(--foreground));
}
html:not(.dark) .canvas-composer-model-picker,
html:not(.dark) .canvas-generation-settings-trigger.ant-btn {
background: rgba(15, 23, 42, 0.045) !important;
color: #1f2937 !important;
}
html:not(.dark) .canvas-composer-model-picker:hover,
html:not(.dark) .canvas-composer-model-picker[aria-expanded="true"],
html:not(.dark) .canvas-generation-settings-trigger.ant-btn:hover,
html:not(.dark) .canvas-generation-settings-trigger.ant-btn:focus-visible,
html:not(.dark) .canvas-generation-settings-trigger.ant-btn[aria-expanded="true"] {
background: rgba(15, 23, 42, 0.075) !important;
}
html:not(.dark) .canvas-generation-cost-badge {
background: rgba(79, 110, 232, 0.09) !important;
color: #4f6ee8 !important;
}
.canvas-preset-picker-menu {
padding: 6px;
}
.canvas-preset-picker-search.ant-input-affix-wrapper {
border: 0 !important;
border-radius: 8px;
background: color-mix(in srgb, var(--workspace-accent) 7%, transparent) !important;
box-shadow: none !important;
color: color-mix(in srgb, var(--foreground) 66%, transparent);
height: 32px;
padding-inline: 9px;
}
.canvas-preset-picker-search.ant-input-affix-wrapper:focus,
.canvas-preset-picker-search.ant-input-affix-wrapper:focus-within {
background: color-mix(in srgb, var(--workspace-accent) 11%, transparent) !important;
box-shadow: none !important;
}
.canvas-preset-picker-option {
align-items: center;
background: transparent;
border: 0;
border-radius: 7px;
cursor: pointer;
display: flex;
gap: 9px;
min-height: 48px;
outline: none;
padding: 6px 8px;
text-align: left;
transition: background-color var(--motion-instant) ease-out;
width: 100%;
}
.canvas-preset-picker-option:hover,
.canvas-preset-picker-option:focus-visible {
background: color-mix(in srgb, var(--workspace-accent) 9%, transparent);
outline: none;
}
.canvas-preset-picker-option-icon {
align-items: center;
border-radius: 7px;
display: inline-flex;
flex: 0 0 28px;
height: 28px;
justify-content: center;
width: 28px;
}
body.app-spatial-overlays .canvas-composer-popover-surface {
border: 0 !important;
background: var(--workspace-surface-strong) !important;
}
html:not(.dark) body.app-spatial-overlays .canvas-composer-popover-surface {
background: #ffffff !important;
box-shadow: 0 14px 34px rgba(15, 23, 42, 0.13) !important;
}
.dark body.app-spatial-overlays .canvas-composer-popover-surface {
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.3) !important;
}
.agent-text-model-select .ant-select-content {
padding-inline: 6px !important;
}
.agent-text-model-select .ant-select-content {
min-width: 0;
}
@container (min-width: 440px) {
.canvas-composer-mode-button {
padding-inline: 8px;
width: auto;
}
.canvas-composer-tools .canvas-composer-mode-button span {
display: inline;
font-size: 12px;
line-height: 1;
}
.canvas-composer-icon.ant-btn {
flex: 0 1 auto;
max-width: 170px;
width: auto !important;
}
.canvas-composer-tools .canvas-composer-icon.ant-btn > span:not(.ant-btn-icon) {
display: inline-flex;
min-width: 0;
}
.canvas-composer-tools .canvas-composer-model-picker {
width: auto;
min-width: 9rem;
}
.canvas-composer-tools .canvas-composer-model-picker {
padding-inline: 10px !important;
}
.canvas-composer-tools .canvas-model-picker-label > span:nth-child(n + 2) {
display: inline-flex;
}
}
.canvas-control-select.ant-select-focused .ant-select-content,
.canvas-control-number.ant-input-number-focused {
border-color: #a8a29e !important;
}
.dark .canvas-control-select.ant-select .ant-select-content,
.dark .canvas-control-number.ant-input-number {
border-color: rgba(214, 211, 209, 0.2) !important;
}
.dark .canvas-control-select.ant-select-focused .ant-select-content,
.dark .canvas-control-number.ant-input-number-focused {
border-color: #78716c !important;
}
.canvas-image-settings-popover .ant-popover-inner {
border-radius: 18px;
box-shadow: 0 18px 54px rgba(28, 25, 23, 0.16);
padding: 18px;
}
.canvas-image-settings-popover .ant-popover-inner-content {
max-height: calc(100vh - 96px);
overflow-y: auto;
}
.canvas-image-settings-popover .ant-segmented {
border-radius: 999px;
padding: 3px;
}
.canvas-image-settings-popover .ant-segmented-item {
border-radius: 999px;
}
.dark .canvas-image-settings-popover .ant-popover-inner {
box-shadow: 0 18px 54px rgba(0, 0, 0, 0.45);
}
.canvas-floating-dock,
.canvas-floating-panel,
.canvas-node-toolbar {
animation: canvas-panel-in var(--motion-dur-fast-calc) var(--motion-ease-out) both;
}
/* 覆盖工具栏与节点之间的视觉留白,避免鼠标途中被相邻节点抢走悬浮状态。 */
.canvas-node-toolbar::after {
position: absolute;
top: 100%;
right: -8px;
left: -8px;
height: 14px;
content: "";
}
.canvas-floating-dock {
box-shadow:
0 1px 2px rgba(15, 23, 42, 0.06),
0 10px 26px rgba(15, 23, 42, 0.08);
}
.dark .canvas-floating-dock {
box-shadow:
0 1px 1px rgba(0, 0, 0, 0.28),
0 12px 28px rgba(0, 0, 0, 0.3);
}
.canvas-floating-panel {
box-shadow:
0 1px 2px rgba(15, 23, 42, 0.06),
0 14px 34px rgba(15, 23, 42, 0.1);
}
@media (max-width: 1024px) {
.aceternity-mode-switch {
top: 56px;
}
}
.dark .canvas-floating-panel {
box-shadow:
0 1px 1px rgba(0, 0, 0, 0.28),
0 14px 34px rgba(0, 0, 0, 0.34);
}
.canvas-tool-button,
.canvas-menu-item,
.canvas-node-tool-button {
transform: translate3d(0, 0, 0) scale(1);
transition:
background-color 140ms ease,
color 140ms ease,
opacity 140ms ease,
box-shadow 140ms ease,
transform 160ms var(--motion-ease-out);
}
.canvas-connection-handle {
touch-action: none;
}
@media (pointer: coarse) {
.canvas-connection-handle {
width: 44px !important;
height: 44px !important;
}
}
.canvas-tool-button:not(:disabled):hover,
.canvas-node-tool-button:not(:disabled):hover {
transform: translate3d(0, -1px, 0) scale(1.04);
}
.canvas-tool-button:not(:disabled):active,
.canvas-node-tool-button:not(:disabled):active,
.canvas-menu-item:not(:disabled):active {
transform: translate3d(0, 0, 0) scale(0.94);
}
.canvas-menu-item:not(:disabled):hover {
transform: translate3d(4px, 0, 0);
}
.canvas-menu-item:not(:disabled):hover .canvas-menu-item-icon,
.canvas-node-tool-button:not(:disabled):hover .canvas-node-tool-icon {
transform: scale(1.08);
}
.canvas-menu-item-icon,
.canvas-node-tool-icon {
transition: transform 160ms var(--motion-ease-out);
}
.canvas-node-shell {
transition:
border-color 160ms ease,
box-shadow 160ms ease,
background-color 160ms ease;
}
.canvas-node-shell.aceternity-comet-card {
box-shadow: 0 18px 48px rgba(15, 23, 42, 0.1), 0 2px 6px rgba(15, 23, 42, 0.06);
}
.canvas-node-shell.aceternity-comet-card:hover {
box-shadow: 0 30px 80px rgba(15, 23, 42, 0.18), 0 6px 20px rgba(15, 23, 42, 0.1);
}
.dark .canvas-node-shell.aceternity-comet-card {
box-shadow: 0 22px 60px rgba(0, 0, 0, 0.34), 0 2px 8px rgba(0, 0, 0, 0.3);
}
.dark .canvas-node-shell.aceternity-comet-card:hover {
box-shadow: 0 34px 90px rgba(0, 0, 0, 0.52), 0 8px 26px rgba(0, 0, 0, 0.36);
}
[data-canvas-viewport-interacting="true"] .canvas-node-shell,
[data-canvas-viewport-interacting="true"] .aceternity-comet-card {
transition: none !important;
}
/* 静止期用最终倍率重新排版 DOM,避免 Windows Chromium 复用交互期的低分辨率合成纹理。 */
.canvas-world-layer {
transform: translate(var(--canvas-live-x), var(--canvas-live-y)) scale(var(--canvas-live-scale-ratio));
transform-origin: 0 0;
}
.canvas-world-raster-layer {
zoom: var(--canvas-committed-scale);
}
[data-canvas-viewport-interacting="true"] .canvas-world-layer {
transform: translate3d(var(--canvas-live-x), var(--canvas-live-y), 0) scale(var(--canvas-live-scale-ratio));
will-change: transform;
}
[data-canvas-viewport-interacting="true"] .canvas-node-shell.aceternity-comet-card,
[data-canvas-viewport-interacting="true"] .canvas-node-shell.aceternity-comet-card:hover {
box-shadow: none !important;
}
[data-canvas-viewport-interacting="true"] :where(.canvas-node-shell-generating::before, .canvas-connection-flow, .canvas-connection-draft) {
animation: none !important;
}
/* 节点状态徽章 success 淡出动画(对应 #97 决策2)*/
@keyframes canvas-status-success-fade {
0% { opacity: 1; transform: scale(1); }
70% { opacity: 1; transform: scale(1); }
100% { opacity: 0; transform: scale(0.9); }
}
/* 任务进度条 shimmer 扫描动画(对应 #98 决策3)*/
@keyframes canvas-task-progress-shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(200%); }
}
.canvas-task-progress-shimmer {
animation: canvas-task-progress-shimmer 1.4s linear infinite;
}
.canvas-node-shell-generating::before {
position: absolute;
z-index: 45;
inset: -1.5px;
padding: 1px;
border-radius: 19px;
background: linear-gradient(110deg, rgba(91, 110, 225, 0.66), rgba(96, 165, 250, 0.62), rgba(167, 139, 250, 0.58), rgba(244, 114, 182, 0.54), rgba(250, 204, 21, 0.5), rgba(52, 211, 153, 0.58), rgba(91, 110, 225, 0.66));
background-size: 300% 100%;
content: "";
filter: drop-shadow(0 0 3px rgba(96, 165, 250, 0.2));
pointer-events: none;
animation: canvas-generation-border-flow 2.4s var(--motion-ease-linear) infinite;
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
}
.dark .canvas-node-shell-generating::before {
filter: drop-shadow(0 0 4px rgba(91, 110, 225, 0.22));
}
.canvas-connection-flow {
animation: canvas-connection-flow 1.25s var(--motion-ease-linear) infinite;
}
.canvas-connection-draft {
animation: canvas-connection-flow 0.9s var(--motion-ease-linear) infinite;
}
@keyframes canvas-panel-in {
from {
opacity: 0;
filter: saturate(0.92);
}
to {
opacity: 1;
filter: saturate(1);
}
}
@keyframes canvas-connection-flow {
to {
stroke-dashoffset: -44;
}
}
@keyframes canvas-generation-border-flow {
to {
background-position: 300% 0;
}
}
.canvas-node-info-modal .ant-modal-header {
padding-right: 0;
}
.canvas-node-info-modal .ant-modal-title {
line-height: 1;
}
.canvas-node-info-modal .ant-modal-close {
top: 21px;
}
@keyframes canvas-batch-child-in {
from {
opacity: 0;
transform: translate(var(--batch-from-x), var(--batch-from-y)) rotate(var(--batch-from-rotate)) scale(0.72);
}
72% {
opacity: 1;
transform: translate(0, 0) rotate(-1deg) scale(1.015);
}
to {
opacity: 1;
transform: translate(0, 0) rotate(0) scale(1);
}
}
@keyframes canvas-batch-child-out {
from {
opacity: 1;
transform: translate(0, 0) rotate(0) scale(1);
}
to {
opacity: 0;
transform: translate(var(--batch-from-x), var(--batch-from-y)) rotate(var(--batch-from-rotate)) scale(0.72);
}
}
}
@keyframes workspace-state-enter {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
.workspace-state { animation: none; }
:where(.ant-btn:not(:disabled)):active { transform: none; }
}
@media (prefers-reduced-motion: reduce) {
.aceternity-comet-card,
.aceternity-dock-command,
.aceternity-floating-panel,
.canvas-menu-item {
transform: none !important;
transition-duration: 0.01ms !important;
}
.canvas-node-shell-generating::before,
.canvas-connection-flow,
.canvas-connection-draft {
animation: none;
}
.canvas-node-shell-generating::before {
background-position: 50% 0;
}
}
/* 章节编辑区用清晰边界区分工具栏与正文,同时保留连续写作空间。 */
.project-workbench-page .project-chapter-editor-wrap {
min-height: 100%;
}
.project-chapter-editor {
min-height: 100%;
width: 100%;
padding: 24px 28px 48px;
color: var(--foreground);
font-size: 15px;
line-height: 1.8;
}
.project-chapter-editor p {
margin: 0 0 1em;
}
.project-chapter-editor h1,
.project-chapter-editor h2,
.project-chapter-editor h3 {
margin: 1.35em 0 0.55em;
font-weight: 650;
line-height: 1.3;
letter-spacing: -0.02em;
}
.project-chapter-editor h1 { font-size: 1.55em; }
.project-chapter-editor h2 { font-size: 1.3em; }
.project-chapter-editor h3 { font-size: 1.12em; }
.project-chapter-editor ul,
.project-chapter-editor ol {
margin: 0 0 1em;
padding-left: 1.4em;
}
.project-chapter-editor blockquote {
margin: 1.2em 0;
border-left: 2px solid color-mix(in srgb, var(--workspace-accent) 55%, transparent);
padding-left: 1em;
color: color-mix(in srgb, var(--foreground) 66%, transparent);
}
.project-chapter-editor p.is-editor-empty:first-child::before {
float: left;
height: 0;
color: color-mix(in srgb, var(--foreground) 34%, transparent);
content: attr(data-placeholder);
pointer-events: none;
}
@media (max-width: 1023px) {
.project-workbench-page .project-chapter-editor-wrap {
min-height: 100%;
}
.project-chapter-editor {
min-height: 420px;
padding: 18px 20px 36px;
font-size: 15px;
}
}
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
}
html[data-theme-switching="true"] :where(.canvas-node-shell, .aceternity-comet-card, .aceternity-floating-panel, .canvas-connection-flow, .canvas-connection-draft) {
animation: none !important;
transition: none !important;
}
/* 创作页是工作舞台,不使用管理台的边框、卡片和分段控件语言。 */
.creation-home {
--creation-accent: var(--workspace-accent);
--creation-bg: var(--workspace-page);
--creation-surface: #191b20;
--creation-surface-raised: #22252b;
--creation-text: #f2f3f4;
--creation-muted: #838991;
--creation-faint: #555b64;
min-width: 0;
background: var(--creation-bg);
color: var(--creation-text);
}
.creation-scrollbar {
scrollbar-color: rgba(255, 255, 255, .22) transparent;
scrollbar-gutter: stable;
scrollbar-width: auto;
}
.creation-scrollbar::-webkit-scrollbar { width: 10px; }
.creation-scrollbar::-webkit-scrollbar-track { background: transparent; }
.creation-scrollbar::-webkit-scrollbar-thumb {
border: 3px solid transparent;
border-radius: 999px;
background: rgba(255, 255, 255, .22);
background-clip: content-box;
}
.creation-scrollbar::-webkit-scrollbar-thumb:hover { background-color: rgba(255, 255, 255, .34); }
html:not(.dark) .creation-scrollbar {
scrollbar-color: rgba(35, 41, 49, .24) transparent;
}
html:not(.dark) .creation-scrollbar::-webkit-scrollbar-thumb { background-color: rgba(35, 41, 49, .24); }
html:not(.dark) .creation-scrollbar::-webkit-scrollbar-thumb:hover { background-color: rgba(35, 41, 49, .38); }
html:not(.dark) .creation-home {
--creation-bg: var(--workspace-page);
--creation-surface: #ffffff;
--creation-surface-raised: #f0f1ee;
--creation-text: #1d2024;
--creation-muted: #7c838b;
--creation-faint: #b5babf;
}
.creation-empty-workspace {
width: min(1000px, calc(100% - 56px));
min-height: 100%;
margin: 0 auto;
padding: 0 0 5vh;
}
.creation-empty-composer {
width: 100%;
margin: 0;
animation: creation-composer-arrive var(--motion-dur-slow-calc) var(--motion-ease-out) both;
}
.creation-chat-composer {
width: 100%;
overflow: hidden;
border: 0;
border-radius: 16px;
background: var(--creation-surface);
box-shadow: 0 20px 58px rgba(0, 0, 0, .15);
}
html:not(.dark) .creation-chat-composer {
box-shadow: 0 18px 48px rgba(30, 34, 38, .08);
}
.creation-chat-composer:focus-within { box-shadow: 0 20px 58px rgba(0, 0, 0, .18); }
.creation-chat-writing-surface,
.creation-chat-composer.is-empty .creation-chat-writing-surface {
display: grid;
min-height: 88px;
grid-template-columns: 34px minmax(0, 1fr);
gap: 12px;
padding: 16px 18px 6px;
}
.creation-chat-reference,
.creation-chat-reference.is-paper {
display: grid;
width: 32px;
height: 32px;
place-items: center;
align-self: start;
border: 0;
border-radius: 8px;
background: transparent;
color: var(--creation-muted);
box-shadow: none;
transform: none;
transition: color 140ms ease, background-color 140ms ease, transform 140ms var(--motion-ease-out);
}
.creation-chat-reference svg,
.creation-chat-reference.is-paper svg { width: 17px; height: 17px; }
.creation-chat-reference.is-paper span { display: none; }
.creation-chat-reference:hover:not(:disabled),
.creation-chat-reference.is-paper:hover:not(:disabled) { background: rgba(255, 255, 255, .07); color: var(--creation-text); transform: translateY(-1px); }
html:not(.dark) .creation-chat-reference:hover:not(:disabled) { background: rgba(28, 32, 36, .06); }
.creation-chat-editor textarea {
display: block;
width: 100%;
min-height: 60px;
border: 0;
outline: 0;
background: transparent;
color: var(--creation-text);
font-size: 14px;
line-height: 1.65;
}
.creation-chat-editor textarea::placeholder { color: var(--creation-muted); opacity: .72; }
.creation-chat-mention-container { min-height: 76px; }
.creation-chat-mention-editor {
display: block;
width: 100%;
min-height: 76px;
max-height: 220px;
overflow-y: auto;
border: 0;
outline: 0;
background: transparent;
color: var(--creation-text);
font-size: 14px;
line-height: 1.65;
resize: none;
}
.creation-chat-mention-editor:empty::before { color: var(--creation-muted); opacity: .72; }
.creation-chat-mention-editor[aria-disabled="true"],
.creation-chat-mention-editor:disabled { cursor: wait; opacity: .55; }
.creation-chat-dock {
display: flex;
min-height: 46px;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 4px 10px 10px 14px;
}
.creation-chat-controls {
display: flex;
min-width: 0;
flex-wrap: wrap;
align-items: center;
gap: 2px;
}
.creation-chat-control,
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker {
display: inline-flex;
height: 30px !important;
min-width: 0;
align-items: center;
gap: 5px;
border: 0 !important;
border-radius: 7px !important;
background: transparent !important;
color: var(--creation-muted) !important;
padding: 0 8px !important;
font-size: 11px;
font-weight: 500;
box-shadow: none !important;
transition: color 140ms ease, background-color 140ms ease, transform 140ms var(--motion-ease-out);
}
.creation-chat-control:hover,
.creation-chat-control[aria-expanded="true"],
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover,
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border: 0 !important;
background: rgba(255, 255, 255, .075) !important;
color: var(--creation-text) !important;
transform: none;
}
.creation-chat-control.is-mode {
background: rgba(255, 255, 255, .075) !important;
color: var(--creation-text) !important;
}
.creation-chat-control > svg { width: 14px; height: 14px; }
.creation-chat-control > svg:last-child { width: 12px; height: 12px; color: var(--creation-faint); }
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker { width: min(180px, 30vw) !important; justify-content: flex-start; }
.creation-chat-composer .creation-model-picker .canvas-model-picker-trigger-icon { width: 16px; height: 16px; border-radius: 4px; background: transparent !important; }
html:not(.dark) .creation-chat-control,
html:not(.dark) .creation-chat-composer .creation-model-picker.canvas-composer-model-picker { background: transparent !important; color: var(--creation-muted) !important; }
html:not(.dark) .creation-chat-control.is-mode,
html:not(.dark) .creation-chat-control:hover,
html:not(.dark) .creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover { background: rgba(29, 33, 37, .06) !important; color: var(--creation-text) !important; }
.creation-chat-submit {
display: grid;
width: 32px;
height: 32px;
flex: 0 0 auto;
place-items: center;
border: 0;
border-radius: 9px;
background: #f3f4f5;
color: #1b1d21;
cursor: pointer;
transition: transform 140ms var(--motion-ease-out), background-color 140ms ease;
}
.creation-chat-submit:hover:not(:disabled) { background: #fff; transform: translateY(-1px); }
.creation-chat-submit:disabled { background: #292d34; color: #606771; cursor: not-allowed; }
.creation-chat-submit.is-stopping { background: #d06060; color: #fff; }
html:not(.dark) .creation-chat-submit { background: #202328; color: #fff; }
html:not(.dark) .creation-chat-submit:hover:not(:disabled) { background: #2d3139; }
.creation-control-popover-surface,
.creation-model-picker-surface {
overflow: hidden;
border: 0 !important;
border-radius: 10px !important;
background: rgba(30, 32, 37, .92) !important;
box-shadow: 0 18px 44px rgba(0, 0, 0, .3) !important;
backdrop-filter: blur(18px) saturate(120%);
-webkit-backdrop-filter: blur(18px) saturate(120%);
}
.creation-control-popover-content,
.creation-model-picker-surface .ant-popover-inner-content { padding: 0 !important; }
.creation-parameter-menu { width: 274px; padding: 10px 12px 12px; }
.creation-parameter-section { display: grid; grid-template-columns: 38px minmax(0, 1fr); align-items: start; gap: 8px; }
.creation-parameter-section + .creation-parameter-section { margin-top: 12px; }
.creation-parameter-section h3 { margin: 7px 0 0; color: var(--creation-muted); font-size: 10px; font-weight: 500; }
.creation-choice-grid { display: grid; gap: 2px; }
.creation-choice-grid.is-ratio { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.creation-choice-grid.is-resolution { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.creation-choice-grid.is-quality, .creation-choice-grid.is-count { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.creation-choice-grid button {
display: flex;
min-width: 0;
min-height: 36px;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 3px;
border: 0;
border-radius: 5px;
background: transparent;
color: #989ea7;
font-size: 10px;
line-height: 1;
transition: color 120ms ease, background-color 120ms ease;
}
.creation-choice-grid button:hover { background: rgba(255, 255, 255, .06); color: #e9ebed; }
.creation-choice-grid button.is-selected { background: rgba(255, 255, 255, .11); color: #fff; }
.creation-choice-grid button small { display: none; }
.creation-choice-grid.is-resolution button, .creation-choice-grid.is-count button { min-height: 30px; font-size: 11px; }
.creation-choice-grid .creation-ratio-preview { width: 20px; height: 13px; }
.creation-choice-grid .creation-ratio-preview > span { border-width: 1px; border-radius: 2px; }
.creation-duration-menu { display: flex; width: 212px; align-items: center; gap: 10px; padding: 10px 12px; }
.creation-duration-menu > div:first-child { display: flex; flex: 0 0 auto; flex-direction: column; gap: 2px; color: var(--creation-muted); font-size: 10px; }
.creation-duration-menu strong { color: #f1f2f3; font-size: 12px; font-weight: 600; }
.creation-range-wrap { min-width: 0; flex: 1; }
.creation-range-wrap input { height: 14px; }
.creation-range-wrap input::-webkit-slider-runnable-track { height: 3px; }
.creation-range-wrap input::-webkit-slider-thumb { width: 6px; height: 14px; margin-top: -5px; border-radius: 4px; }
.creation-range-wrap input::-moz-range-track { height: 3px; }
.creation-range-wrap input::-moz-range-thumb { width: 6px; height: 14px; border-radius: 4px; }
.creation-range-labels { margin-top: 2px; color: var(--creation-faint); font-size: 9px; }
.creation-mode-picker-menu { width: 158px; padding: 5px; color: #f0f1f2; }
.creation-mode-picker-menu button { display: flex; width: 100%; height: 34px; align-items: center; gap: 8px; border: 0; border-radius: 6px; background: transparent; color: inherit; padding: 0 7px; font-size: 11px; text-align: left; }
.creation-mode-picker-menu button:hover, .creation-mode-picker-menu button.is-selected { background: rgba(255, 255, 255, .075); }
.creation-mode-picker-menu button > svg { width: 13px; height: 13px; margin-left: auto; }
.creation-menu-icon { display: grid; width: 19px; height: 19px; place-items: center; border: 0; border-radius: 5px; background: rgba(255, 255, 255, .07); }
.creation-menu-icon svg { width: 12px; height: 12px; }
.creation-model-picker-menu { width: min(332px, calc(100vw - 24px)) !important; max-height: min(420px, calc(100vh - 24px)); padding: 7px !important; background: transparent !important; color: #f0f1f2 !important; }
.creation-model-picker-heading { display: flex; align-items: center; gap: 6px; padding: 4px 7px 7px; color: #8e949d; font-size: 10px; }
.creation-model-picker-heading strong { color: #e6e8eb; font-weight: 500; }
.creation-model-picker-menu .canvas-model-picker-group-label { padding: 6px 7px 5px; font-size: 10px; }
.creation-model-picker-menu .canvas-model-picker-option { min-height: 43px; border-radius: 6px; padding: 5px 7px; }
.creation-model-picker-menu .canvas-model-picker-option:hover { transform: none; }
.creation-model-picker-menu .canvas-model-picker-option > span:first-child { gap: 8px; }
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:first-child { width: 26px; height: 26px; border: 0; border-radius: 5px; background: rgba(255, 255, 255, .07) !important; }
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:nth-child(2) > span:first-child { font-size: 11px; }
.creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:nth-child(2) > span:nth-child(2) { margin-top: 3px; font-size: 9px; }
.creation-thread-stage { width: min(820px, calc(100% - 48px)); padding: 44px 0 22px; }
.creation-thread-composer { width: min(820px, calc(100% - 48px)); padding: 8px 0 16px; }
.creation-chat-composer.is-thread .creation-chat-writing-surface { min-height: 70px; padding: 12px 14px 4px; }
.creation-chat-composer.is-thread .creation-chat-editor textarea { min-height: 48px; }
.creation-user-message { border-radius: 13px 13px 4px 13px; background: rgba(255, 255, 255, .07); box-shadow: none; }
.creation-assistant-message { margin-bottom: 36px; }
.creation-message-mark { width: 28px; height: 28px; border-radius: 8px; background: #f0f1f2; color: #1c1e22; }
.creation-new-button { border: 0; border-radius: 8px; background: rgba(255, 255, 255, .06); box-shadow: none; }
.creation-new-button:hover { border: 0; background: rgba(255, 255, 255, .12); }
html:not(.dark) .creation-control-popover-surface,
html:not(.dark) .creation-model-picker-surface { background: rgba(255, 255, 255, .94) !important; box-shadow: 0 16px 38px rgba(28, 32, 37, .12) !important; }
html:not(.dark) .creation-parameter-section h3,
html:not(.dark) .creation-duration-menu > div:first-child,
html:not(.dark) .creation-mode-picker-menu,
html:not(.dark) .creation-model-picker-menu { color: #727980 !important; }
html:not(.dark) .creation-choice-grid button { color: #737a82; }
html:not(.dark) .creation-choice-grid button:hover { background: rgba(28, 32, 37, .06); color: #25292e; }
html:not(.dark) .creation-choice-grid button.is-selected { background: rgba(28, 32, 37, .09); color: #20242a; }
html:not(.dark) .creation-duration-menu strong,
html:not(.dark) .creation-model-picker-heading strong { color: #20242a; }
html:not(.dark) .creation-mode-picker-menu button:hover,
html:not(.dark) .creation-mode-picker-menu button.is-selected,
html:not(.dark) .creation-model-picker-menu .canvas-model-picker-option > span:first-child > span:first-child { background: rgba(28, 32, 37, .06) !important; }
@keyframes creation-composer-arrive {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
@media (max-width: 680px) {
.creation-empty-workspace { width: calc(100% - 28px); padding-bottom: 8vh; }
.creation-chat-writing-surface, .creation-chat-composer.is-empty .creation-chat-writing-surface { grid-template-columns: 30px minmax(0, 1fr); gap: 8px; padding: 14px 12px 5px; }
.creation-chat-dock { align-items: flex-end; padding: 4px 7px 8px 8px; }
.creation-chat-controls { max-width: calc(100% - 38px); }
.creation-chat-control, .creation-chat-composer .creation-model-picker.canvas-composer-model-picker { height: 29px !important; padding: 0 6px !important; font-size: 10px; }
.creation-chat-composer .creation-model-picker.canvas-composer-model-picker { width: min(136px, 42vw) !important; }
.creation-thread-stage, .creation-thread-composer { width: calc(100% - 28px); }
.creation-parameter-menu { width: min(274px, calc(100vw - 24px)); }
}
@media (prefers-reduced-motion: reduce) {
.creation-empty-composer,
.creation-chat-reference,
.creation-chat-submit { animation: none; transition: none; }
}
/* 创作入口与空间导航在同一块画布上,避免视觉断层。 */
.director-sequencer {
position: relative;
color: rgba(255, 255, 255, 0.86);
font-size: var(--fs-caption);
}
.director-viewport-dock {
position: absolute;
z-index: var(--z-toolbar);
bottom: var(--director-dock-bottom);
left: 50%;
display: flex;
max-width: calc(100% - var(--space-6));
align-items: center;
gap: var(--space-half);
padding: var(--space-1);
overflow-x: auto;
border: var(--stroke-1) solid var(--director-sequencer-border);
border-radius: var(--r-lg);
background: var(--director-dock-surface);
box-shadow: var(--shadow-xl);
color: var(--director-dock-fg);
transform: translateX(-50%);
backdrop-filter: blur(var(--space-4));
}
.director-viewport-dock-button {
display: grid;
width: var(--director-dock-button-size);
height: var(--director-dock-button-size);
flex: 0 0 var(--director-dock-button-size);
place-items: center;
border-radius: var(--r-md);
transition: background var(--motion-dur-fast) var(--motion-ease-out), color var(--motion-dur-fast) var(--motion-ease-out), transform var(--motion-dur-fast) var(--motion-ease-out);
}
.director-viewport-dock-button > svg {
width: var(--space-4);
height: var(--space-4);
}
.director-viewport-dock-button:hover {
background: var(--director-control-hover);
color: var(--director-dock-fg-strong);
}
.director-viewport-dock-button:active {
transform: translateY(1px);
}
.director-viewport-dock-button.is-active {
background: var(--director-dock-active-surface);
color: var(--director-dock-fg-strong);
box-shadow: inset 0 0 0 var(--stroke-1) var(--director-sequencer-border);
}
.director-viewport-dock-divider {
width: var(--stroke-1);
height: var(--space-5);
flex: 0 0 var(--stroke-1);
margin: 0 var(--space-half);
background: var(--director-sequencer-border);
}
.director-actor-colors {
display: flex;
min-width: 0;
align-items: center;
gap: var(--space-1-half);
}
.director-actor-color {
width: var(--director-color-swatch-size);
height: var(--director-color-swatch-size);
flex: 0 0 var(--director-color-swatch-size);
border: var(--stroke-1) solid var(--director-sequencer-border);
border-radius: var(--r-full);
box-shadow: inset 0 0 0 var(--stroke-1) var(--director-swatch-inset);
}
.director-actor-color.is-active {
outline: var(--stroke-2) solid var(--workspace-accent);
outline-offset: var(--space-half);
}
.director-pose-section {
display: grid;
gap: var(--space-2);
}
.director-inspector-section-title {
display: flex;
align-items: center;
justify-content: space-between;
color: var(--cn-muted);
font-size: var(--fs-label);
}
.director-inspector-section-title > span:last-child {
color: var(--workspace-accent);
}
.director-pose-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--space-1);
}
.director-pose-button {
min-width: 0;
height: var(--director-pose-button-height);
padding: 0 var(--space-1);
overflow: hidden;
border: var(--stroke-1) solid var(--cn-stroke);
border-radius: var(--r-sm);
color: var(--cn-muted);
font-size: var(--fs-tiny);
text-overflow: ellipsis;
white-space: nowrap;
transition: border-color var(--motion-dur-fast) var(--motion-ease-out), background var(--motion-dur-fast) var(--motion-ease-out), color var(--motion-dur-fast) var(--motion-ease-out);
}
.director-pose-button:hover {
border-color: var(--workspace-accent);
color: var(--cn-text);
}
.director-pose-button.is-active {
border-color: var(--workspace-accent);
background: var(--workspace-accent-soft);
color: var(--workspace-accent);
}
@media (prefers-reduced-motion: reduce) {
.director-viewport-dock-button,
.director-pose-button {
transition: none;
}
}
.director-sequencer-resizer {
position: absolute;
z-index: 2;
inset: -4px 0 auto;
height: 8px;
cursor: ns-resize;
}
.director-sequencer-resizer::after {
content: "";
position: absolute;
top: 3px;
left: 50%;
width: 44px;
height: 2px;
border-radius: var(--r-full);
background: rgba(255, 255, 255, 0.28);
transform: translateX(-50%);
opacity: 0;
transition: opacity var(--motion-dur-fast) var(--motion-ease-out);
}
.director-sequencer:hover .director-sequencer-resizer::after,
.director-sequencer-resizer:focus-visible::after {
opacity: 1;
}
.director-sequencer-body {
position: relative;
height: calc(100% - 40px);
min-height: 0;
}
.director-sequencer-grid {
position: relative;
display: grid;
min-width: calc(var(--director-sequencer-base-width) * var(--director-sequencer-track-scale, 1));
grid-template-columns: var(--director-sequencer-label-width) minmax(640px, 1fr);
}
.director-sequencer-global-playhead {
position: absolute;
z-index: 1;
top: 28px;
bottom: 0;
right: 0;
left: var(--director-sequencer-label-width);
pointer-events: none;
}
.director-sequencer-global-playhead > i {
position: absolute;
top: 0;
bottom: 0;
width: 1px;
background: #f0b36a;
}
.director-sequencer-label,
.director-sequencer-track {
min-width: 0;
height: var(--director-sequencer-row-height);
border-bottom: 1px solid var(--director-sequencer-border);
}
.director-sequencer-row {
display: contents;
}
.director-sequencer-label {
display: flex;
align-items: center;
gap: var(--space-2);
width: var(--director-sequencer-label-width);
padding: 0 var(--space-3);
color: rgba(255, 255, 255, 0.64);
text-align: left;
white-space: nowrap;
transition: background var(--motion-dur-fast) var(--motion-ease-out), color var(--motion-dur-fast) var(--motion-ease-out);
}
.director-sequencer-label:hover,
.director-sequencer-row.is-selected > .director-sequencer-label {
background: rgba(255, 255, 255, 0.075);
color: rgba(255, 255, 255, 0.96);
}
.director-sequencer-label.is-indent {
padding-left: var(--space-6);
color: rgba(255, 255, 255, 0.46);
}
.director-sequencer-ruler-label,
.director-sequencer-ruler {
height: 28px;
border-bottom-color: var(--director-sequencer-border);
background: var(--director-sequencer-surface-raised);
}
.director-sequencer-ruler-label {
padding-left: var(--space-3);
color: rgba(255, 255, 255, 0.42);
font-size: var(--fs-micro);
letter-spacing: 0.06em;
text-transform: uppercase;
}
.director-sequencer-ruler {
position: relative;
cursor: ew-resize;
background-image: repeating-linear-gradient(to right, transparent 0, transparent calc(20% - 1px), var(--director-sequencer-grid) 20%);
}
.director-sequencer-tick {
position: absolute;
top: var(--space-2);
color: rgba(255, 255, 255, 0.38);
font-size: var(--fs-micro);
transform: translateX(-50%);
}
.director-sequencer-playhead {
position: absolute;
top: 0;
bottom: 0;
width: 1px;
background: #f0b36a;
pointer-events: none;
}
.director-sequencer-track {
position: relative;
overflow: hidden;
background-image: repeating-linear-gradient(to right, transparent 0, transparent calc(20% - 1px), var(--director-sequencer-grid) 20%);
}
.director-sequencer-track-content {
position: absolute;
inset: 0;
}
.director-sequencer-key {
position: absolute;
top: 50%;
width: 8px;
height: 8px;
border-radius: var(--r-xs);
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.38);
transform: translate(-50%, -50%) rotate(45deg);
}
.director-sequencer-clip {
position: absolute;
top: 5px;
bottom: 5px;
display: flex;
align-items: center;
min-width: 30px;
padding: 0 var(--space-2);
overflow: hidden;
border: 1px solid;
border-radius: var(--r-xs);
font-size: var(--fs-micro);
}
.director-sequencer-transport,
.director-sequencer-icon,
.director-sequencer-tool {
display: inline-flex;
align-items: center;
justify-content: center;
height: var(--space-8);
border-radius: var(--r-sm);
color: rgba(255, 255, 255, 0.62);
transition: background var(--motion-dur-fast) var(--motion-ease-out), color var(--motion-dur-fast) var(--motion-ease-out);
}
.director-sequencer-transport,
.director-sequencer-icon {
width: var(--space-8);
}
.director-sequencer-tool {
gap: var(--space-1);
padding: 0 var(--space-2);
font-size: var(--fs-micro);
}
.director-sequencer-shot-select {
width: var(--director-sequencer-shot-select-width);
height: var(--space-8);
padding: 0 var(--space-2);
overflow: hidden;
border: 1px solid var(--director-sequencer-border);
border-radius: var(--r-sm);
background: var(--director-sequencer-surface-raised);
color: rgba(255, 255, 255, 0.72);
font-size: var(--fs-micro);
text-overflow: ellipsis;
white-space: nowrap;
}
.director-sequencer-transport:hover,
.director-sequencer-icon:hover,
.director-sequencer-tool:hover,
.director-sequencer-icon.is-active,
.director-sequencer-tool.is-active {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
}
.app-workspace-shell.is-creation-workspace,
.app-workspace-shell.is-creation-workspace .app-workspace-sidebar,
.app-workspace-shell.is-creation-workspace .app-workspace-stage {
background: var(--workspace-page) !important;
}
html:not(.dark) .app-workspace-shell.is-creation-workspace,
html:not(.dark) .app-workspace-shell.is-creation-workspace .app-workspace-sidebar,
html:not(.dark) .app-workspace-shell.is-creation-workspace .app-workspace-stage {
background: var(--workspace-page) !important;
}
.creation-empty-workspace {
display: flex;
flex: 1 0 auto;
flex-direction: column;
align-items: center;
justify-content: center;
}
.creation-chat-intro {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
margin: 0 0 24px;
text-align: center;
animation: creation-intro-arrive var(--motion-dur-slow-calc) var(--motion-ease-out) both;
}
.creation-chat-intro p {
margin: 0 0 7px;
color: var(--creation-faint);
font-size: 10px;
font-weight: 500;
letter-spacing: .12em;
}
.creation-chat-intro h1 {
margin: 0;
color: var(--creation-text);
font-size: 24px;
font-weight: 580;
line-height: 1.3;
letter-spacing: 0;
}
.creation-intro-signal {
position: absolute;
top: -12px;
left: calc(50% - 50px);
width: 16px;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(227, 231, 235, .88), transparent);
animation: creation-intro-signal 2.8s var(--motion-ease-out) infinite;
}
.creation-chat-reference.is-paper {
display: flex;
width: 58px;
height: 74px;
flex-direction: column;
align-items: center;
align-self: start;
justify-content: center;
gap: 7px;
border: 1px dashed rgba(255, 255, 255, .09);
border-radius: 4px;
background: #242730;
color: #9097a1;
transform: rotate(-7deg);
}
.creation-chat-reference.is-paper svg { width: 21px; height: 21px; }
.creation-chat-reference.is-paper span { display: block; font-size: 10px; font-weight: 520; line-height: 1; white-space: nowrap; }
.creation-chat-reference.is-paper:hover:not(:disabled) { background: #2b2e37; color: #f1f3f5; transform: rotate(-4deg) translateY(-2px); }
.creation-chat-reference.is-paper:active:not(:disabled) { transform: rotate(-4deg) translateY(0) scale(.97); }
.creation-chat-reference.is-paper:focus-visible { outline: 2px solid color-mix(in srgb, #83d6ec 68%, transparent); outline-offset: 3px; }
.creation-chat-composer .creation-chat-writing-surface { grid-template-columns: 62px minmax(0, 1fr); gap: 16px; }
.creation-custom-value {
display: flex;
height: 28px;
align-items: center;
gap: 6px;
margin-top: 5px;
padding: 0 7px;
border-radius: 5px;
background: rgba(255, 255, 255, .045);
color: var(--creation-faint);
font-size: 10px;
}
.creation-custom-value span { flex: 0 0 auto; }
.creation-custom-value input {
width: 100%;
min-width: 0;
border: 0;
outline: 0;
background: transparent;
color: #edf0f2;
font-size: 11px;
line-height: 1;
}
.creation-custom-value input::-webkit-inner-spin-button,
.creation-custom-value input::-webkit-outer-spin-button { margin: 0; }
.creation-custom-value em { font-style: normal; }
.creation-duration-menu {
display: grid;
width: 224px;
grid-template-columns: 36px minmax(0, 1fr);
align-items: center;
gap: 7px 8px;
padding: 10px 11px;
}
.creation-duration-heading { display: flex; flex-direction: column; gap: 2px; color: var(--creation-muted); font-size: 10px; }
.creation-duration-heading strong { color: #f1f2f3; font-size: 12px; font-weight: 600; }
.creation-duration-choices { display: flex; min-width: 0; align-items: center; gap: 2px; }
.creation-duration-choices button { height: 26px; min-width: 0; flex: 1; border: 0; border-radius: 5px; background: transparent; color: #969ca5; font-size: 10px; transition: color 120ms ease, background-color 120ms ease; }
.creation-duration-choices button:hover { background: rgba(255, 255, 255, .06); color: #eef0f2; }
.creation-duration-choices button.is-selected { background: rgba(255, 255, 255, .11); color: #fff; }
.creation-custom-value.is-duration { grid-column: 2; width: 100%; margin-top: 0; }
html:not(.dark) .creation-chat-reference.is-paper { border-color: rgba(28, 32, 37, .10); background: #e9ebed; color: #626b75; }
html:not(.dark) .creation-chat-reference.is-paper:hover:not(:disabled) { background: #dfe3e6; color: #1c2025; }
html:not(.dark) .creation-custom-value { background: rgba(28, 32, 37, .055); }
html:not(.dark) .creation-custom-value input,
html:not(.dark) .creation-duration-heading strong { color: #23272c; }
html:not(.dark) .creation-duration-choices button:hover { background: rgba(28, 32, 37, .06); color: #23272c; }
html:not(.dark) .creation-duration-choices button.is-selected { background: rgba(28, 32, 37, .10); color: #23272c; }
@keyframes creation-intro-arrive {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes creation-intro-signal {
0%, 100% { opacity: .3; transform: translateX(-14px) scaleX(.55); }
50% { opacity: 1; transform: translateX(14px) scaleX(1); }
}
@media (prefers-reduced-motion: reduce) {
.creation-chat-intro,
.creation-intro-signal { animation: none; }
}
/* 创作对话使用同一套 Composer 规格;空态仅改变位置,不改变组件密度。 */
.creation-home .creation-chat-composer { border-radius: 18px; }
.creation-home .creation-chat-writing-surface,
.creation-home .creation-chat-composer.is-empty .creation-chat-writing-surface,
.creation-home .creation-chat-composer.is-thread .creation-chat-writing-surface {
min-height: 140px;
padding: 18px 20px 8px;
}
.creation-home .creation-chat-composer.is-empty .creation-chat-writing-surface,
.creation-home .creation-chat-composer.is-thread .creation-chat-writing-surface { grid-template-columns: 62px minmax(0, 1fr); gap: 16px; }
.creation-home .creation-chat-editor textarea,
.creation-home .creation-chat-composer.is-thread .creation-chat-editor textarea,
.creation-home .creation-chat-mention-container,
.creation-home .creation-chat-mention-editor { min-height: 76px; }
.creation-home .creation-chat-dock { min-height: 48px; padding: 4px 12px 12px 16px; }
.creation-home .creation-chat-control,
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker,
.creation-home .creation-chat-control.is-mode {
border: 0 !important;
background: transparent !important;
box-shadow: none !important;
color: var(--creation-muted) !important;
}
.creation-home .creation-chat-control:hover,
.creation-home .creation-chat-control[aria-expanded="true"],
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover,
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border: 0 !important;
background: rgba(255, 255, 255, .065) !important;
color: var(--creation-text) !important;
transform: none;
}
.creation-home .creation-chat-control.is-mode { color: var(--creation-text) !important; }
.creation-home .creation-chat-control.is-mode > svg:first-child { color: #81d3e6; }
html:not(.dark) .creation-home .creation-chat-control:hover,
html:not(.dark) .creation-home .creation-chat-control[aria-expanded="true"],
html:not(.dark) .creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover { background: rgba(28, 32, 37, .06) !important; }
.creation-chat-intro h1 span {
display: inline-block;
margin: 0 4px;
color: #83d6ec;
font-size: 1.25em;
font-weight: 760;
text-shadow: 0 0 24px rgba(89, 202, 232, .24);
animation: creation-intro-emphasis 2.6s var(--motion-ease-out) infinite;
}
.creation-thread-stage,
.creation-thread-composer { width: min(1068px, calc(100% - 56px)); }
.creation-thread-stage { padding: 52px 0 24px; }
.creation-thread-composer { padding: 10px 0 18px; }
.creation-results { width: 100%; }
.creation-user-message {
max-width: min(62%, 640px);
margin: 0 0 42px auto;
border-radius: 14px 14px 5px 14px;
background: rgba(255, 255, 255, .07);
padding: 11px 14px;
color: var(--creation-text);
font-size: 14px;
line-height: 1.7;
white-space: pre-wrap;
}
.creation-user-message-references { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; }
.creation-user-message-reference { display: inline-flex; min-width: 0; max-width: 180px; height: 25px; align-items: center; gap: 5px; border-radius: 6px; background: rgba(255, 255, 255, .075); padding: 0 7px; color: var(--creation-muted); font-size: 10px; line-height: 1; }
.creation-user-message-reference img { width: 17px; height: 17px; flex: 0 0 auto; border-radius: 4px; object-fit: cover; }
.creation-user-message-reference svg { width: 12px; height: 12px; flex: 0 0 auto; }
.creation-user-message-reference span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html:not(.dark) .creation-user-message-reference { background: rgba(28, 32, 37, .07); }
.creation-user-message-attachments button { position: relative; width: 44px; height: 44px; flex: 0 0 auto; overflow: hidden; border: 0; border-radius: 7px; background: transparent; padding: 0; }
.creation-user-message-attachments button:focus-visible { outline: 2px solid var(--creation-text); outline-offset: 2px; }
.creation-user-message-attachments button > span { position: absolute; right: 3px; bottom: 3px; display: grid; width: 17px; height: 17px; place-items: center; border-radius: 5px; background: rgba(0, 0, 0, .68); color: #fff; opacity: 0; transition: opacity 140ms ease; }
.creation-user-message-attachments button:hover > span,
.creation-user-message-attachments button:focus-visible > span { opacity: 1; }
.creation-user-message-attachments button > span svg { width: 10px; height: 10px; }
.creation-assistant-message { max-width: 900px; margin: 0 0 48px; }
.creation-message-heading { gap: 7px; color: var(--creation-faint); font-size: 11px; }
.creation-message-mark { width: 26px; height: 26px; border-radius: 8px; background: #eff1f3; color: #202329; }
.creation-message-mark svg { width: 15px; height: 15px; }
.creation-message-model { max-width: 300px; color: var(--creation-faint); }
.creation-message-state { border: 0; border-radius: 5px; background: rgba(255, 255, 255, .06); padding: 2px 5px; color: var(--creation-muted); font-size: 10px; }
.creation-message-content { max-width: 800px; padding: 14px 0 0 34px; color: var(--creation-text); font-size: 15px; line-height: 1.8; }
.creation-message-content p { margin: 0 0 12px; }
.creation-message-content p:last-child { margin-bottom: 0; }
.creation-message-content h1, .creation-message-content h2, .creation-message-content h3 { margin: 20px 0 8px; color: var(--creation-text); font-weight: 650; line-height: 1.35; }
.creation-message-content h1 { font-size: 21px; }
.creation-message-content h2 { font-size: 18px; }
.creation-message-content h3 { font-size: 16px; }
.creation-message-content ul, .creation-message-content ol { margin: 10px 0; padding-left: 22px; }
.creation-message-content li + li { margin-top: 4px; }
.creation-message-content blockquote { margin: 14px 0; border-left: 2px solid rgba(131, 214, 236, .65); padding: 2px 0 2px 12px; color: var(--creation-muted); }
.creation-message-content code { border-radius: 4px; background: rgba(255, 255, 255, .08); padding: 2px 5px; font-size: .88em; }
.creation-message-content pre { overflow-x: auto; border-radius: 8px; background: #181b20; padding: 12px 14px; }
.creation-message-content pre code { background: transparent; padding: 0; }
.creation-message-content a { color: #83d6ec; text-decoration: none; }
.creation-message-error { display: flex; max-width: 760px; align-items: center; gap: 10px; padding: 16px 0 0 34px; color: #ee8585; font-size: 13px; line-height: 1.6; }
.creation-message-error button { display: inline-flex; height: 28px; align-items: center; gap: 5px; border: 0; border-radius: 6px; background: rgba(226, 96, 96, .12); color: #ef8b8b; padding: 0 8px; font-size: 11px; }
.creation-message-error button:hover { background: rgba(226, 96, 96, .2); }
.creation-media-pending,
.creation-media-empty { display: inline-flex; min-height: 42px; align-items: center; gap: 8px; margin: 14px 0 0 34px; border: 0; border-radius: 8px; background: rgba(255, 255, 255, .055); padding: 0 12px; color: var(--creation-muted); font-size: 12px; }
.creation-media-empty button { border: 0; background: transparent; color: #83d6ec; font-size: 12px; }
.creation-media-result { max-width: 860px; padding: 14px 0 0 34px; }
.creation-image-result-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.creation-image-result { position: relative; aspect-ratio: 1; overflow: hidden; border: 0; border-radius: 9px; background: #181a1e; }
.creation-image-result img { width: 100%; height: 100%; object-fit: cover; transition: transform 220ms var(--motion-ease-out); }
.creation-image-result span, .creation-video-result > span { position: absolute; right: 8px; bottom: 8px; display: grid; width: 27px; height: 27px; place-items: center; border-radius: 7px; background: rgba(13, 14, 16, .62); color: #fff; opacity: 0; transition: opacity 160ms ease; backdrop-filter: blur(8px); }
.creation-image-result span svg, .creation-video-result span svg { width: 14px; height: 14px; }
.creation-image-result:hover img { transform: scale(1.025); }
.creation-image-result:hover span, .creation-video-result:hover > span { opacity: 1; }
.creation-video-result { position: relative; display: block; width: min(760px, 100%); aspect-ratio: 16 / 9; overflow: hidden; border: 0; border-radius: 10px; background: #121316; }
.creation-video-result > span { display: inline-flex; width: auto; height: 30px; align-items: center; gap: 5px; padding: 0 9px; font-size: 11px; }
.creation-media-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 10px; color: var(--creation-faint); font-size: 11px; }
.creation-media-actions > span { margin-right: 2px; }
.creation-media-actions a, .creation-media-actions button { display: inline-flex; align-items: center; gap: 4px; border: 0; background: transparent; color: var(--creation-muted); font-size: 11px; text-decoration: none; }
.creation-media-actions a:hover, .creation-media-actions button:hover { color: var(--creation-text); }
.creation-media-actions svg { width: 13px; height: 13px; }
.creation-media-preview-modal .ant-modal-content { overflow: hidden; border: 0; border-radius: 12px; background: #111215; padding: 0; }
.creation-media-preview-modal .ant-modal-close { color: #fff; }
.creation-media-preview-image, .creation-media-preview-video { display: block; max-width: 100%; max-height: 82vh; margin: 0 auto; object-fit: contain; }
.creation-media-preview-video { width: 100%; background: #050505; }
html:not(.dark) .creation-user-message { background: rgba(28, 32, 37, .07); }
html:not(.dark) .creation-message-content pre,
html:not(.dark) .creation-video-result,
html:not(.dark) .creation-media-preview-modal .ant-modal-content { background: #1f2227; }
html:not(.dark) .creation-message-content code { background: rgba(28, 32, 37, .08); }
@keyframes creation-intro-emphasis {
0%, 100% { transform: translateY(0); filter: brightness(1); }
45% { transform: translateY(-1px); filter: brightness(1.14); }
}
@media (max-width: 800px) {
.creation-home .creation-chat-writing-surface,
.creation-home .creation-chat-composer.is-empty .creation-chat-writing-surface,
.creation-home .creation-chat-composer.is-thread .creation-chat-writing-surface { min-height: 96px; padding: 14px 13px 6px; }
.creation-home .creation-chat-editor textarea,
.creation-home .creation-chat-composer.is-thread .creation-chat-editor textarea,
.creation-home .creation-chat-mention-container,
.creation-home .creation-chat-mention-editor { min-height: 64px; }
.creation-thread-stage, .creation-thread-composer { width: calc(100% - 28px); }
.creation-thread-stage { padding-top: 36px; }
.creation-user-message { max-width: 78%; }
.creation-assistant-message { max-width: 100%; }
.creation-message-content, .creation-message-error, .creation-media-result { padding-left: 0; }
.creation-media-pending, .creation-media-empty { margin-left: 0; }
.creation-image-result-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (prefers-reduced-motion: reduce) {
.creation-chat-intro h1 span { animation: none; }
}
/* 旧创作规则位于 utilities 层且使用 !important;必须在同层覆盖。 */
@layer utilities {
.creation-home .creation-chat-control,
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker,
.creation-home .creation-chat-control.is-mode {
border: 0 !important;
background: transparent !important;
box-shadow: none !important;
color: var(--creation-muted) !important;
}
.creation-home .creation-chat-control:hover,
.creation-home .creation-chat-control[aria-expanded="true"],
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker:hover,
.creation-home .creation-chat-composer .creation-model-picker.canvas-composer-model-picker[aria-expanded="true"] {
border: 0 !important;
background: rgba(255, 255, 255, .065) !important;
color: var(--creation-text) !important;
transform: none;
}
.creation-home .creation-chat-control.is-mode { color: var(--creation-text) !important; }
.creation-parameter-menu {
width: 304px;
padding: 13px 14px 14px;
}
.creation-parameter-section {
display: block;
margin: 0;
}
.creation-parameter-section + .creation-parameter-section { margin-top: 16px; }
.creation-parameter-section h3 {
margin: 0 0 8px;
color: var(--creation-muted);
font-size: 11px;
font-weight: 500;
}
.creation-parameter-content { min-width: 0; }
.creation-choice-grid { gap: 3px; }
.creation-choice-grid.is-ratio { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.creation-choice-grid button {
min-height: 46px;
border: 0;
border-radius: 6px;
background: transparent;
color: #959ca5;
font-size: 10px;
}
.creation-choice-grid button:hover { background: rgba(255, 255, 255, .055); color: #edf0f2; }
.creation-choice-grid button.is-selected { background: rgba(255, 255, 255, .12); color: #fff; }
.creation-choice-grid .creation-ratio-preview { width: 25px; height: 17px; }
.creation-choice-grid .creation-ratio-preview > span { border-width: 1px; }
.creation-choice-grid.is-resolution button,
.creation-choice-grid.is-count button { min-height: 32px; font-size: 11px; }
.creation-custom-trigger {
display: inline-flex;
height: 27px;
align-items: center;
border: 0;
background: transparent;
color: #8bcfe0;
padding: 0 4px;
font-size: 10px;
}
.creation-custom-trigger:hover { color: #c4edf6; }
.creation-custom-value {
display: flex;
width: 100%;
height: 32px;
align-items: center;
gap: 7px;
margin-top: 7px;
border-radius: 6px;
background: rgba(255, 255, 255, .055);
padding: 0 9px;
color: var(--creation-muted);
font-size: 11px;
}
.creation-custom-value input {
min-width: 0;
border: 0;
outline: 0;
background: transparent;
color: #edf0f2;
font-size: 12px;
}
.creation-duration-menu {
display: block;
width: 270px;
padding: 13px 14px 14px;
}
.creation-duration-heading {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 8px;
color: var(--creation-muted);
font-size: 11px;
}
.creation-duration-heading strong { color: #f1f3f4; font-size: 13px; font-weight: 600; }
.creation-duration-choices { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 3px; }
.creation-duration-choices button {
height: 30px;
border: 0;
border-radius: 6px;
background: transparent;
color: #969ca5;
font-size: 11px;
}
.creation-duration-choices button:hover { background: rgba(255, 255, 255, .055); color: #eff1f2; }
.creation-duration-choices button.is-selected { background: rgba(255, 255, 255, .12); color: #fff; }
.creation-custom-value.is-duration { width: 100%; grid-column: auto; margin-top: 7px; }
}
/* 解除旧版参数侧栏 Grid,Popover 必须是纵向信息分组。 */
.creation-parameter-section {
display: block !important;
grid-template-columns: none !important;
gap: 0 !important;
}
.creation-parameter-section h3 { margin: 0 0 8px !important; }
.creation-parameter-content { min-width: 0; }
.creation-choice-grid { gap: 3px; }
.creation-choice-grid.is-ratio { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.creation-choice-grid button { min-height: 46px; }
.creation-choice-grid.is-resolution button,
.creation-choice-grid.is-count button { min-height: 32px; }
.creation-duration-menu { display: block !important; width: 270px !important; grid-template-columns: none !important; padding: 13px 14px 14px !important; }
.creation-duration-heading { display: flex !important; flex-direction: row !important; align-items: baseline; justify-content: space-between; margin-bottom: 8px; }
.creation-duration-choices { display: grid !important; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 3px; }
.creation-duration-choices button { height: 30px; }
.creation-custom-value.is-duration { grid-column: auto !important; width: 100%; margin-top: 7px; }
/* 创作参数是即时选择,不使用后台式表单控件。 */
.creation-control-popover-surface {
border: 0 !important;
border-radius: 12px !important;
background: rgba(25, 27, 31, .96) !important;
box-shadow: 0 20px 48px rgba(0, 0, 0, .34) !important;
}
.creation-parameter-menu {
width: 288px !important;
padding: 12px !important;
}
.creation-parameter-section,
.creation-parameter-section + .creation-parameter-section {
display: block !important;
margin: 0 !important;
}
.creation-parameter-section + .creation-parameter-section { margin-top: 14px !important; }
.creation-parameter-section > header,
.creation-duration-heading {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: space-between;
min-height: 18px;
margin: 0 2px 7px !important;
}
.creation-parameter-section h3,
.creation-duration-heading > span {
margin: 0 !important;
color: var(--creation-muted) !important;
font-size: 11px !important;
font-weight: 500 !important;
letter-spacing: 0 !important;
}
.creation-parameter-section > header > span,
.creation-duration-heading strong {
color: var(--creation-text) !important;
font-size: 11px !important;
font-weight: 600 !important;
}
.creation-choice-grid { gap: 3px !important; }
.creation-choice-grid.is-ratio { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
.creation-choice-grid.is-resolution { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
.creation-choice-grid.is-ratio button,
.creation-choice-grid.is-resolution button,
.creation-choice-grid.is-quality button,
.creation-choice-grid.is-count button {
display: flex !important;
min-height: 34px !important;
align-items: center !important;
justify-content: center !important;
gap: 7px;
border: 0 !important;
border-radius: 6px !important;
background: transparent !important;
color: var(--creation-muted) !important;
font-size: 11px !important;
font-weight: 500;
transition: background-color 160ms var(--motion-ease-out), color 160ms var(--motion-ease-out), transform 160ms var(--motion-ease-out) !important;
}
.creation-choice-grid button:hover {
background: rgba(255, 255, 255, .055) !important;
color: var(--creation-text) !important;
}
.creation-choice-grid button.is-selected {
background: rgba(255, 255, 255, .105) !important;
color: var(--creation-text) !important;
}
.creation-choice-grid .creation-ratio-preview {
display: grid;
width: 18px !important;
height: 14px !important;
flex: 0 0 18px;
place-items: center;
}
.creation-choice-grid .creation-ratio-preview > span {
max-width: 18px;
max-height: 14px;
border-width: 1px !important;
border-radius: 2px !important;
}
.creation-custom-trigger {
display: inline-flex !important;
height: 26px !important;
align-items: center;
gap: 4px;
margin: 3px 0 0 2px;
border: 0 !important;
border-radius: 4px;
background: transparent !important;
padding: 0 2px !important;
color: var(--creation-muted) !important;
font-size: 10px !important;
transition: color 160ms var(--motion-ease-out), background-color 160ms var(--motion-ease-out) !important;
}
.creation-custom-trigger svg { width: 12px; height: 12px; }
.creation-custom-trigger:hover { background: rgba(255, 255, 255, .05) !important; color: var(--creation-text) !important; }
.creation-custom-value,
.creation-custom-value.is-duration {
display: flex !important;
width: 100% !important;
height: 32px !important;
align-items: center;
gap: 8px;
margin-top: 5px !important;
border: 0 !important;
border-radius: 6px !important;
background: rgba(255, 255, 255, .055) !important;
padding: 0 9px !important;
color: var(--creation-muted) !important;
font-size: 10px !important;
}
.creation-custom-value input {
min-width: 0;
flex: 1;
border: 0 !important;
outline: 0 !important;
background: transparent !important;
color: var(--creation-text) !important;
font-size: 11px !important;
}
.creation-custom-value em { color: var(--creation-muted); font-size: 11px; font-style: normal; }
.creation-duration-custom-field {
display: inline-flex;
min-width: 64px;
align-items: center;
justify-content: flex-end;
gap: 3px;
margin-left: auto;
color: var(--creation-text);
font-size: 11px;
font-variant-numeric: tabular-nums;
}
.creation-custom-value .creation-duration-custom-field input {
width: 42px;
flex: 0 0 42px;
padding: 0;
text-align: right;
}
.creation-duration-custom-field em { color: currentColor; }
.creation-duration-menu {
display: block !important;
width: 262px !important;
padding: 12px !important;
}
.creation-duration-choices {
display: grid !important;
grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
gap: 3px !important;
}
.creation-duration-choices button {
height: 32px !important;
min-width: 0;
border: 0 !important;
border-radius: 6px !important;
background: transparent !important;
color: var(--creation-muted) !important;
font-size: 11px !important;
font-weight: 500;
transition: background-color 160ms var(--motion-ease-out), color 160ms var(--motion-ease-out) !important;
}
.creation-duration-choices button:hover { background: rgba(255, 255, 255, .055) !important; color: var(--creation-text) !important; }
.creation-duration-choices button.is-selected { background: rgba(255, 255, 255, .105) !important; color: var(--creation-text) !important; }
html:not(.dark) .creation-control-popover-surface { background: rgba(255, 255, 255, .98) !important; box-shadow: 0 20px 48px rgba(25, 29, 35, .14) !important; }
html:not(.dark) .creation-choice-grid button:hover,
html:not(.dark) .creation-duration-choices button:hover,
html:not(.dark) .creation-custom-trigger:hover { background: rgba(28, 32, 37, .055) !important; }
html:not(.dark) .creation-choice-grid button.is-selected,
html:not(.dark) .creation-duration-choices button.is-selected { background: rgba(28, 32, 37, .09) !important; }
html:not(.dark) .creation-custom-value { background: rgba(28, 32, 37, .055) !important; }
/* 历史对话使用右侧时间轴,避免重新引入占据主舞台的常驻会话栏。 */
.creation-top-actions {
position: absolute;
z-index: 30;
top: 24px;
right: 28px;
display: flex;
align-items: center;
gap: 6px;
}
.creation-top-action {
display: grid;
width: 36px;
height: 36px;
place-items: center;
border: 0;
border-radius: 8px;
background: rgba(255, 255, 255, .06);
color: var(--creation-muted);
transition: background-color 150ms ease, color 150ms ease, transform 150ms var(--motion-ease-out);
}
.creation-top-action svg { width: 16px; height: 16px; }
.creation-top-action:hover,
.creation-top-action[aria-expanded="true"] { background: rgba(255, 255, 255, .12); color: var(--creation-text); transform: translateY(-1px); }
.creation-top-action:focus-visible { outline: 2px solid color-mix(in srgb, #83d6ec 70%, transparent); outline-offset: 2px; }
html:not(.dark) .creation-top-action { background: rgba(28, 32, 37, .055); }
html:not(.dark) .creation-top-action:hover,
html:not(.dark) .creation-top-action[aria-expanded="true"] { background: rgba(28, 32, 37, .11); }
.creation-history-drawer,
.creation-history-drawer-root {
--creation-history-bg: #111316;
--creation-history-surface: #1a1d22;
--creation-history-hover: #20242a;
--creation-history-text: #f1f3f4;
--creation-history-muted: #858c96;
--creation-history-faint: #555c66;
--creation-history-line: rgba(255, 255, 255, .09);
--creation-history-accent: #83d6ec;
}
html:not(.dark) .creation-history-drawer,
html:not(.dark) .creation-history-drawer-root {
--creation-history-bg: #f8f8f6;
--creation-history-surface: #ffffff;
--creation-history-hover: #f0f1ee;
--creation-history-text: #202328;
--creation-history-muted: #747c85;
--creation-history-faint: #b0b6bc;
--creation-history-line: rgba(28, 32, 37, .11);
--creation-history-accent: #1688a3;
}
.creation-history-drawer.ant-drawer-content,
.creation-history-drawer .ant-drawer-content,
.creation-history-drawer-root .ant-drawer-content { background: var(--creation-history-bg); color: var(--creation-history-text); }
.creation-history-drawer .ant-drawer-header { min-height: 58px; border-bottom: 1px solid var(--creation-history-line); padding: 10px 14px 10px 18px; }
.creation-history-drawer .ant-drawer-title { color: var(--creation-history-text); }
.creation-history-drawer .ant-drawer-close { display: grid; width: 36px; height: 36px; place-items: center; margin-inline-end: 8px; border-radius: 8px; color: var(--creation-history-muted); }
.creation-history-drawer .ant-drawer-close:hover { background: var(--creation-history-hover); color: var(--creation-history-text); }
.creation-history-drawer .ant-drawer-close:focus-visible { outline: 2px solid color-mix(in srgb, var(--creation-history-accent) 66%, transparent); outline-offset: 1px; }
.creation-history-drawer .ant-drawer-body { overscroll-behavior: contain; }
.creation-history-title { display: flex; min-width: 0; flex-direction: column; gap: 2px; }
.creation-history-title > span { font-size: 14px; font-weight: 650; letter-spacing: 0; }
.creation-history-title small { color: var(--creation-history-muted); font-size: 10px; font-weight: 500; }
.creation-history-timeline { margin: 0; padding: 8px 12px 18px 18px; list-style: none; }
.creation-history-timeline > li { position: relative; min-width: 0; padding-left: 14px; content-visibility: auto; contain-intrinsic-size: 0 68px; }
.creation-history-timeline > li::before { position: absolute; top: 0; bottom: 0; left: 2px; width: 1px; background: var(--creation-history-line); content: ""; }
.creation-history-timeline > li:first-child::before { top: 15px; }
.creation-history-timeline > li:last-child::before { bottom: calc(100% - 16px); }
.creation-history-dot { position: absolute; z-index: 1; top: 13px; left: 0; width: 5px; height: 5px; border: 1px solid var(--creation-history-bg); border-radius: 50%; background: var(--creation-history-faint); box-sizing: content-box; }
.creation-history-timeline > li.is-active .creation-history-dot { background: var(--creation-history-accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--creation-history-accent) 12%, transparent); }
.creation-history-timeline button {
display: flex;
width: 100%;
min-height: 64px;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: 2px;
border: 0;
border-radius: 7px;
background: transparent;
padding: 7px 9px;
color: var(--creation-history-text);
text-align: left;
transition: background-color 150ms ease;
}
.creation-history-timeline button:hover { background: var(--creation-history-hover); }
.creation-history-timeline button:focus-visible { outline: 2px solid color-mix(in srgb, var(--creation-history-accent) 68%, transparent); outline-offset: -2px; }
.creation-history-timeline > li.is-active button { background: color-mix(in srgb, var(--creation-history-accent) 5%, var(--creation-history-surface)); }
.creation-history-time { display: flex; width: 100%; align-items: center; justify-content: space-between; color: var(--creation-history-muted); font-size: 9px; font-variant-numeric: tabular-nums; line-height: 1.3; }
.creation-history-time em { color: var(--creation-history-faint); font-size: 9px; font-style: normal; }
.creation-history-item-heading { width: 100%; min-width: 0; overflow: hidden; font-size: 12px; font-weight: 630; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
.creation-history-snippet { display: block; width: 100%; overflow: hidden; color: var(--creation-history-muted); font-size: 10px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 640px) {
.creation-top-actions { top: 14px; right: 14px; }
.creation-top-action { width: 40px; height: 40px; }
.creation-history-drawer { width: 100vw !important; max-width: 100vw; }
.creation-history-drawer-root .ant-drawer-content-wrapper { width: 100vw !important; max-width: 100vw; }
.creation-history-timeline { padding-right: 12px; padding-left: 18px; }
}
/* -------------------------------------------------------------------------
Monochrome product surfaces
页面级黑白主题收口:焦点用边框表达,浮层使用单一表面,避免渐变、米色和蓝紫光圈在不同页面漂移。
------------------------------------------------------------------------- */
.creation-home {
--creation-accent: var(--workspace-accent);
--creation-bg: var(--workspace-page);
--creation-surface: color-mix(in srgb, var(--background) 96%, var(--foreground) 4%);
--creation-surface-muted: color-mix(in srgb, var(--background) 91%, var(--foreground) 9%);
--creation-surface-hover: color-mix(in srgb, var(--background) 86%, var(--foreground) 14%);
--creation-surface-selected: color-mix(in srgb, var(--background) 80%, var(--foreground) 20%);
--creation-border: color-mix(in srgb, var(--foreground) 14%, transparent);
--creation-border-strong: color-mix(in srgb, var(--foreground) 24%, transparent);
}
:where(.ant-input, .ant-input-affix-wrapper, .ant-input-number, .ant-select-selector, .ant-select-multiple .ant-select-selection-search-input) {
box-shadow: none !important;
}
:where(.ant-input:focus, .ant-input-focused, .ant-input-affix-wrapper-focused, .ant-input-number-focused, .ant-select-focused .ant-select-selector) {
border-color: var(--foreground) !important;
box-shadow: none !important;
outline: none !important;
}
:where(.ant-input:hover, .ant-input-affix-wrapper:hover, .ant-input-number:hover, .ant-select:not(.ant-select-disabled):hover .ant-select-selector) {
border-color: color-mix(in srgb, var(--foreground) 42%, var(--border)) !important;
}
:where(.ant-select-dropdown, .ant-dropdown-menu, .ant-popover-inner, .ant-picker-dropdown .ant-picker-panel-container) {
border: 1px solid var(--border) !important;
border-radius: var(--r-md) !important;
background: var(--popover) !important;
background-image: none !important;
box-shadow: var(--shadow-lg) !important;
backdrop-filter: none !important;
}
:where(.ant-select-item-option, .ant-dropdown-menu-item, .ant-cascader-menu-item) {
border-radius: var(--r-sm) !important;
color: var(--popover-foreground) !important;
}
:where(.ant-select-item-option-active:not(.ant-select-item-option-disabled), .ant-dropdown-menu-item:hover, .ant-cascader-menu-item-active) {
background: color-mix(in srgb, var(--popover-foreground) 6%, var(--popover)) !important;
}
:where(.ant-select-item-option-selected:not(.ant-select-item-option-disabled), .ant-dropdown-menu-item-selected) {
background: color-mix(in srgb, var(--popover-foreground) 12%, var(--popover)) !important;
color: var(--popover-foreground) !important;
font-weight: 600;
}
:where(.ant-tag-success, .ant-tag-warning, .ant-tag-processing, .ant-tag-cyan, .ant-tag-blue, .ant-tag-green, .ant-tag-gold, .ant-tag-orange) {
border-color: color-mix(in srgb, var(--foreground) 18%, transparent) !important;
background: color-mix(in srgb, var(--foreground) 7%, transparent) !important;
color: color-mix(in srgb, var(--foreground) 76%, transparent) !important;
}
body.app-spatial-overlays :where(.ant-dropdown-menu, .ant-select-dropdown, .ant-popover-inner, .ant-modal-content, .ant-drawer-content, .ant-message-notice-content, .ant-notification-notice) {
background: var(--popover) !important;
background-image: none !important;
box-shadow: var(--shadow-xl) !important;
backdrop-filter: none !important;
}
body.app-spatial-overlays :where(.ant-modal-mask, .ant-drawer-mask) {
background: color-mix(in srgb, var(--foreground) 48%, transparent) !important;
backdrop-filter: blur(3px) !important;
}
.app-workspace-shell.is-spatial .app-workspace-sidebar {
background: var(--workspace-navigation) !important;
background-image: none !important;
box-shadow: none !important;
backdrop-filter: none !important;
}