From d2741f39f3d86a085689ccf02b76a2b97d17b6db Mon Sep 17 00:00:00 2001 From: sikongyue <3155157671@qq.com> Date: Mon, 3 Aug 2026 22:22:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(canvas):=20=E5=8A=A8=E6=95=88=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=B8=8E=E5=93=8D=E5=BA=94=E5=BC=8F=E9=80=82=E9=85=8D?= =?UTF-8?q?=20-=20token=E8=90=BD=E5=9C=B0+=E6=96=AD=E7=82=B9=E4=BD=93?= =?UTF-8?q?=E7=B3=BB+=E6=97=A0=E9=9A=9C=E7=A2=8D=20#99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 基于 Wayfinder #99 决议,完成动效/响应式/无障碍三大维度落地: 1. 动效 token 迁移(CSS 动画) - 33 处 easing 替换为 var(--motion-ease-out/in-out/linear) - 7 处有限动画 duration 替换为 var(--motion-dur-*-calc) (含 motion-scale 降级,自动联动 prefers-reduced-motion) - canvas-node batch 动画内联值替换为 token 2. aceternityMotion 对齐 + motion/react 硬编码替换 - 添加 JS↔CSS token 映射文档注释 - 3 处 motion/react 硬编码 duration 替换为 aceternityMotion.* 引用 3. infinite 装饰动画 reduced-motion 降级 - L1 (prefers-reduced-motion): 缩短至 0.01ms + 单次播放 - L2 (.no-motion): animation: none 完全禁用 - 覆盖 9 个 infinite 动画类(连线流光/边框流光/极光标题等) 4. 响应式断点体系 - @theme 新增 3 断点 token: --breakpoint-tablet(768)/desktop(1024)/wide(1440) - 修复 canvas-toolbar 外观面板缺 max-w 导致移动端溢出 5. 无障碍 - 画布页新增 skip-to-content 链接(键盘用户跳过侧栏直达画布) - 任务进度面板 aria-live="polite"(屏幕阅读器播报任务数变化) Closes #99 --- .../canvas/canvas-active-task-panel.tsx | 2 +- .../canvas/canvas-node-emotion-panel.tsx | 2 +- web/src/components/canvas/canvas-node.tsx | 2 +- web/src/components/canvas/canvas-toolbar.tsx | 2 +- web/src/lib/aceternity-motion.ts | 15 +++ .../pages/canvas/canvas-project-feedback.tsx | 2 +- web/src/pages/canvas/project.tsx | 5 +- web/src/styles/globals.css | 106 ++++++++++++------ 8 files changed, 93 insertions(+), 43 deletions(-) diff --git a/web/src/components/canvas/canvas-active-task-panel.tsx b/web/src/components/canvas/canvas-active-task-panel.tsx index 97a5cf10d..c6b2f83cc 100644 --- a/web/src/components/canvas/canvas-active-task-panel.tsx +++ b/web/src/components/canvas/canvas-active-task-panel.tsx @@ -62,7 +62,7 @@ export function CanvasActiveTaskPanel({ tasks }: { tasks: GenerationTask[] }) { 生成任务 - 当前画布 · {tasks.length} 个进行中 + 当前画布 · {tasks.length} 个进行中 diff --git a/web/src/components/canvas/canvas-node-emotion-panel.tsx b/web/src/components/canvas/canvas-node-emotion-panel.tsx index 63ed7d949..9b5988e47 100644 --- a/web/src/components/canvas/canvas-node-emotion-panel.tsx +++ b/web/src/components/canvas/canvas-node-emotion-panel.tsx @@ -202,7 +202,7 @@ function EmotionHeadPreview({ preset }: { preset: CanvasEmotionPreset }) {
- 实时预览 · {preset.label} + 实时预览 · {preset.label}
); diff --git a/web/src/components/canvas/canvas-node.tsx b/web/src/components/canvas/canvas-node.tsx index c8d27555d..7c0f2b26c 100644 --- a/web/src/components/canvas/canvas-node.tsx +++ b/web/src/components/canvas/canvas-node.tsx @@ -380,7 +380,7 @@ export const CanvasNode = React.memo(function CanvasNode({ "--batch-from-x": `${batchMotion?.x || 0}px`, "--batch-from-y": `${batchMotion?.y || 0}px`, "--batch-from-rotate": `${6 + (batchMotion?.index || 0) * 4}deg`, - animation: data.metadata?.batchRootId ? (batchClosing ? "canvas-batch-child-out 260ms cubic-bezier(.4,0,.2,1) both" : "canvas-batch-child-in 340ms cubic-bezier(.2,.85,.18,1) both") : undefined, + animation: data.metadata?.batchRootId ? (batchClosing ? `canvas-batch-child-out var(--motion-dur-base-calc) var(--motion-ease-in-out) both` : `canvas-batch-child-in var(--motion-dur-slow-calc) var(--motion-ease-out) both`) : undefined, animationDelay: data.metadata?.batchRootId ? `${batchClosing ? 0 : 45 + (batchMotion?.index || 0) * 24}ms` : undefined, } as React.CSSProperties } diff --git a/web/src/components/canvas/canvas-toolbar.tsx b/web/src/components/canvas/canvas-toolbar.tsx index ff09cf754..df454f0ed 100644 --- a/web/src/components/canvas/canvas-toolbar.tsx +++ b/web/src/components/canvas/canvas-toolbar.tsx @@ -142,7 +142,7 @@ export function CanvasToolbar({ {appearanceOpen ? ( - + event.stopPropagation()}> } title="画布外观" subtitle="调整整个创作空间" theme={theme} />
主题模式
diff --git a/web/src/lib/aceternity-motion.ts b/web/src/lib/aceternity-motion.ts index a7f377888..bc16bcc44 100644 --- a/web/src/lib/aceternity-motion.ts +++ b/web/src/lib/aceternity-motion.ts @@ -1,3 +1,18 @@ +/** + * 动效配置(对应 #99 动效系统) + * + * JS 侧 duration(秒)与 CSS token(毫秒)映射关系: + * instant 0.12s ≈ --motion-dur-fast (150ms) + * state 0.20s ≈ --motion-dur-fast (150ms) + * panel 0.32s ≈ --motion-dur-base (250ms) + * + * easing 与 CSS token 映射: + * enter [0.2, 0.85, 0.18, 1] ≈ --motion-ease-out + * exit [0.4, 0, 1, 1] ≈ --motion-ease-in + * + * prefers-reduced-motion 由组件层 useReducedMotion() 控制, + * CSS 层由 --motion-scale 联动(L0=1 / L1=0.3 / L2=0)。 + */ export const aceternityMotion = { duration: { instant: 0.12, diff --git a/web/src/pages/canvas/canvas-project-feedback.tsx b/web/src/pages/canvas/canvas-project-feedback.tsx index 44c5ec6b5..b694fff4e 100644 --- a/web/src/pages/canvas/canvas-project-feedback.tsx +++ b/web/src/pages/canvas/canvas-project-feedback.tsx @@ -34,7 +34,7 @@ export function CanvasUploadStatusToast({ status, theme }: { status: CanvasUploa >
- + {status.error ? : status.done ? : } diff --git a/web/src/pages/canvas/project.tsx b/web/src/pages/canvas/project.tsx index 7decdc583..23bf60733 100644 --- a/web/src/pages/canvas/project.tsx +++ b/web/src/pages/canvas/project.tsx @@ -1350,7 +1350,9 @@ function InfiniteCanvasPage() { if (!projectLoaded) return ; return ( -
+ <> + 跳转到画布主内容 +
{currentProject?.projectId ? openProjectAssets()} /> : null}
) : null}
+ ); } diff --git a/web/src/styles/globals.css b/web/src/styles/globals.css index dd25cca29..fb2a80f4f 100644 --- a/web/src/styles/globals.css +++ b/web/src/styles/globals.css @@ -164,6 +164,33 @@ --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)); @@ -174,6 +201,11 @@ } @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); @@ -259,7 +291,7 @@ --motion-instant: 120ms; --motion-state: 180ms; --motion-panel: 240ms; - --ease-aceternity: cubic-bezier(0.2, 0.85, 0.18, 1); + --ease-aceternity: var(--motion-ease-out); --ease-product-enter: cubic-bezier(0.16, 1, 0.3, 1); --workspace-canvas: #ffffff; --workspace-surface: rgba(255, 255, 255, 0.82); @@ -1209,7 +1241,7 @@ .creation-empty-composer { width: 100%; - animation: creation-workbench-enter 420ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-workbench-enter var(--motion-dur-slow-calc) var(--motion-ease-out) both; } .creation-composer { @@ -1275,7 +1307,7 @@ 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 cubic-bezier(.16, 1, .3, 1); + transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease, transform 160ms var(--motion-ease-out); } .creation-reference-tile:hover:not(:disabled) { @@ -1521,7 +1553,7 @@ width: 13px; height: 13px; color: var(--creation-muted); - transition: transform 160ms cubic-bezier(.16, 1, .3, 1); + transition: transform 160ms var(--motion-ease-out); } .creation-chip > svg:last-child.is-open { @@ -1634,7 +1666,7 @@ 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 cubic-bezier(.16, 1, .3, 1); + transition: border-color 160ms ease, background-color 160ms ease, transform 160ms var(--motion-ease-out); } .creation-inspiration-strip button:hover { @@ -1680,7 +1712,7 @@ .creation-results { width: 100%; - animation: creation-results-enter 280ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-results-enter var(--motion-dur-base-calc) var(--motion-ease-out) both; } .creation-thread-composer { @@ -1728,7 +1760,7 @@ padding: 0 !important; backdrop-filter: blur(28px) saturate(140%); -webkit-backdrop-filter: blur(28px) saturate(140%); - animation: creation-popover-enter 180ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-popover-enter var(--motion-dur-fast-calc) var(--motion-ease-out) both; } .dark .creation-control-popover-surface, @@ -2174,7 +2206,7 @@ border-radius: 26px; background: var(--creation-surface); box-shadow: 0 28px 70px rgba(0, 0, 0, .18); - animation: creation-workbench-enter 360ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-workbench-enter var(--motion-dur-slow-calc) var(--motion-ease-out) both; } html:not(.dark) .creation-studio-composer { @@ -2208,7 +2240,7 @@ background: #1c1f25; color: #c8cdd5; transform: rotate(-7deg); - transition: transform 180ms cubic-bezier(.16, 1, .3, 1), border-color 180ms ease, background-color 180ms ease; + transition: transform 180ms var(--motion-ease-out), border-color 180ms ease, background-color 180ms ease; } html:not(.dark) .creation-studio-reference { @@ -2316,7 +2348,7 @@ font-weight: 600; white-space: nowrap; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .055); - transition: transform 150ms cubic-bezier(.16, 1, .3, 1), border-color 150ms ease, background-color 150ms ease; + transition: transform 150ms var(--motion-ease-out), border-color 150ms ease, background-color 150ms ease; } html:not(.dark) .creation-studio-control, @@ -2344,7 +2376,7 @@ .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 cubic-bezier(.16, 1, .3, 1); } + .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 { @@ -2365,7 +2397,7 @@ background: #383d47; color: #e5e8ec; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .13); - transition: transform 150ms cubic-bezier(.16, 1, .3, 1), background-color 150ms ease, color 150ms ease; + 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); } @@ -2396,7 +2428,7 @@ border-radius: 10px; background: rgba(255, 255, 255, .055); color: var(--creation-accent); - animation: creation-intro-mark 2.8s cubic-bezier(.16, 1, .3, 1) infinite; + animation: creation-intro-mark 2.8s var(--motion-ease-out) infinite; } .creation-chat-intro-mark svg { width: 16px; height: 16px; } .creation-chat-headline { @@ -2407,7 +2439,7 @@ 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 cubic-bezier(.16, 1, .3, 1) infinite; } + .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 { @@ -2444,7 +2476,7 @@ background: #242730; color: #eef1f4; box-shadow: none; - transition: transform 140ms cubic-bezier(.16, 1, .3, 1), background-color 140ms ease, border-color 140ms ease; + transition: transform 140ms var(--motion-ease-out), background-color 140ms ease, border-color 140ms ease; } .creation-chat-reference:hover:not(:disabled) { @@ -2527,7 +2559,7 @@ font-weight: 600; white-space: nowrap; box-shadow: none; - transition: border-color 140ms ease, background-color 140ms ease, transform 140ms cubic-bezier(.16, 1, .3, 1); + 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"], @@ -2536,7 +2568,7 @@ .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 cubic-bezier(.16, 1, .3, 1); } + .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; } @@ -2556,7 +2588,7 @@ border-radius: 50%; background: #303540; color: #f1f3f5; - transition: background-color 140ms ease, color 140ms ease, transform 140ms cubic-bezier(.16, 1, .3, 1); + 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); } @@ -3590,7 +3622,7 @@ -webkit-background-clip: text; background-clip: text; color: transparent; - animation: ai-title-aurora 7s ease-in-out infinite; + animation: ai-title-aurora 7s var(--motion-ease-in-out) infinite; } .dark .ai-title-aurora { @@ -4219,7 +4251,7 @@ .canvas-floating-dock, .canvas-floating-panel, .canvas-node-toolbar { - animation: canvas-panel-in 180ms cubic-bezier(0.2, 0.85, 0.18, 1) both; + animation: canvas-panel-in var(--motion-dur-fast-calc) var(--motion-ease-out) both; } /* 覆盖工具栏与节点之间的视觉留白,避免鼠标途中被相邻节点抢走悬浮状态。 */ @@ -4271,7 +4303,7 @@ color 140ms ease, opacity 140ms ease, box-shadow 140ms ease, - transform 160ms cubic-bezier(0.2, 0.85, 0.18, 1); + transform 160ms var(--motion-ease-out); } .canvas-connection-handle { @@ -4307,7 +4339,7 @@ .canvas-menu-item-icon, .canvas-node-tool-icon { - transition: transform 160ms cubic-bezier(0.2, 0.85, 0.18, 1); + transition: transform 160ms var(--motion-ease-out); } .canvas-node-shell { @@ -4389,7 +4421,7 @@ content: ""; filter: drop-shadow(0 0 3px rgba(96, 165, 250, 0.2)); pointer-events: none; - animation: canvas-generation-border-flow 2.4s linear infinite; + 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); @@ -4402,11 +4434,11 @@ } .canvas-connection-flow { - animation: canvas-connection-flow 1.25s linear infinite; + animation: canvas-connection-flow 1.25s var(--motion-ease-linear) infinite; } .canvas-connection-draft { - animation: canvas-connection-flow 0.9s linear infinite; + animation: canvas-connection-flow 0.9s var(--motion-ease-linear) infinite; } @keyframes canvas-panel-in { @@ -4635,7 +4667,7 @@ html:not(.dark) .creation-home { .creation-empty-composer { width: 100%; margin: 0; - animation: creation-composer-arrive 360ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-composer-arrive var(--motion-dur-slow-calc) var(--motion-ease-out) both; } .creation-chat-composer { @@ -4675,7 +4707,7 @@ html:not(.dark) .creation-chat-composer { color: var(--creation-muted); box-shadow: none; transform: none; - transition: color 140ms ease, background-color 140ms ease, transform 140ms cubic-bezier(.16, 1, .3, 1); + transition: color 140ms ease, background-color 140ms ease, transform 140ms var(--motion-ease-out); } .creation-chat-reference svg, @@ -4751,7 +4783,7 @@ html:not(.dark) .creation-chat-reference:hover:not(:disabled) { background: rgba font-size: 11px; font-weight: 500; box-shadow: none !important; - transition: color 140ms ease, background-color 140ms ease, transform 140ms cubic-bezier(.16, 1, .3, 1); + transition: color 140ms ease, background-color 140ms ease, transform 140ms var(--motion-ease-out); } .creation-chat-control:hover, @@ -4790,7 +4822,7 @@ html:not(.dark) .creation-chat-composer .creation-model-picker.canvas-composer-m border-radius: 9px; background: #f3f4f5; color: #1b1d21; - transition: transform 140ms cubic-bezier(.16, 1, .3, 1), background-color 140ms ease; + transition: transform 140ms var(--motion-ease-out), background-color 140ms ease; } .creation-chat-submit:hover:not(:disabled) { background: #fff; transform: translateY(-1px); } @@ -4950,7 +4982,7 @@ html:not(.dark) .app-workspace-shell.is-creation-workspace .app-workspace-stage align-items: center; margin: 0 0 24px; text-align: center; - animation: creation-intro-arrive 420ms cubic-bezier(.16, 1, .3, 1) both; + animation: creation-intro-arrive var(--motion-dur-slow-calc) var(--motion-ease-out) both; } .creation-chat-intro p { @@ -4977,7 +5009,7 @@ html:not(.dark) .app-workspace-shell.is-creation-workspace .app-workspace-stage width: 16px; height: 1px; background: linear-gradient(90deg, transparent, rgba(227, 231, 235, .88), transparent); - animation: creation-intro-signal 2.8s cubic-bezier(.16, 1, .3, 1) infinite; + animation: creation-intro-signal 2.8s var(--motion-ease-out) infinite; } .creation-chat-reference.is-paper { @@ -5121,7 +5153,7 @@ html:not(.dark) .creation-home .creation-chat-composer .creation-model-picker.ca font-size: 1.25em; font-weight: 760; text-shadow: 0 0 24px rgba(89, 202, 232, .24); - animation: creation-intro-emphasis 2.6s cubic-bezier(.16, 1, .3, 1) infinite; + animation: creation-intro-emphasis 2.6s var(--motion-ease-out) infinite; } .creation-thread-stage, @@ -5187,7 +5219,7 @@ html:not(.dark) .creation-user-message-reference { background: rgba(28, 32, 37, .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 cubic-bezier(.16, 1, .3, 1); } +.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); } @@ -5450,7 +5482,7 @@ html:not(.dark) .creation-message-content code { background: rgba(28, 32, 37, .0 color: var(--creation-muted) !important; font-size: 11px !important; font-weight: 500; - transition: background-color 160ms cubic-bezier(.16, 1, .3, 1), color 160ms cubic-bezier(.16, 1, .3, 1), transform 160ms cubic-bezier(.16, 1, .3, 1) !important; + 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 { @@ -5490,7 +5522,7 @@ html:not(.dark) .creation-message-content code { background: rgba(28, 32, 37, .0 padding: 0 2px !important; color: var(--creation-muted) !important; font-size: 10px !important; - transition: color 160ms cubic-bezier(.16, 1, .3, 1), background-color 160ms cubic-bezier(.16, 1, .3, 1) !important; + transition: color 160ms var(--motion-ease-out), background-color 160ms var(--motion-ease-out) !important; } .creation-custom-trigger svg { width: 12px; height: 12px; } @@ -5566,7 +5598,7 @@ html:not(.dark) .creation-message-content code { background: rgba(28, 32, 37, .0 color: var(--creation-muted) !important; font-size: 11px !important; font-weight: 500; - transition: background-color 160ms cubic-bezier(.16, 1, .3, 1), color 160ms cubic-bezier(.16, 1, .3, 1) !important; + 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; } @@ -5600,7 +5632,7 @@ html:not(.dark) .creation-custom-value { background: rgba(28, 32, 37, .055) !imp border-radius: 8px; background: rgba(255, 255, 255, .06); color: var(--creation-muted); - transition: background-color 150ms ease, color 150ms ease, transform 150ms cubic-bezier(.16, 1, .3, 1); + transition: background-color 150ms ease, color 150ms ease, transform 150ms var(--motion-ease-out); } .creation-top-action svg { width: 16px; height: 16px; }