feat(*): 模型能力配置 - 支持模型级视频限制校验与协议管理

This commit is contained in:
ddCat
2026-08-06 15:34:45 +08:00
parent a18673a101
commit 9ca9dd9df6
36 changed files with 1692 additions and 401 deletions

View File

@@ -303,16 +303,20 @@
--motion-panel: 240ms;
--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);
--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(15, 23, 42, 0.14);
--workspace-border-strong: rgba(15, 23, 42, 0.18);
--workspace-grid-line: rgba(51, 65, 85, 0.045);
--workspace-nav: rgba(255, 255, 255, 0.88);
--workspace-sidebar: #f5f6f8;
--workspace-accent: #2563eb;
--workspace-accent-soft: #eaf1ff;
--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 色板)*/
@@ -423,16 +427,19 @@
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--input: oklch(1 0 0 / 15%);
--workspace-canvas: #0b0c0d;
--workspace-surface: rgba(20, 21, 22, 0.72);
--workspace-surface-strong: rgba(25, 26, 27, 0.9);
--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: rgba(11, 12, 13, 0.82);
--workspace-sidebar: #101112;
--workspace-accent: #7da2ff;
--workspace-accent-soft: rgba(80, 125, 230, 0.16);
--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);
@@ -569,6 +576,7 @@
/* 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 标签 */
@@ -610,10 +618,11 @@
border: 0;
overflow: hidden;
overscroll-behavior: none;
background: var(--background);
background: var(--workspace-page);
}
body {
@apply bg-background text-foreground;
background: var(--workspace-page);
color: var(--foreground);
}
#root {
position: fixed;
@@ -686,14 +695,17 @@
@layer utilities {
.app-spatial-workspace {
--workspace-canvas: #f5f5f5;
--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: rgba(250, 250, 250, 0.86);
--workspace-sidebar: rgba(250, 250, 250, 0.72);
--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);
@@ -704,22 +716,25 @@
}
.dark .app-spatial-workspace {
--workspace-canvas: #080808;
--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: rgba(10, 10, 10, 0.88);
--workspace-sidebar: rgba(12, 12, 13, 0.72);
--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: 12px;
padding: 12px;
gap: 0;
padding: 0;
}
.app-workspace-sidebar-scrim {
@@ -732,24 +747,17 @@
}
.app-workspace-shell.is-spatial .app-workspace-sidebar {
border: 1px solid color-mix(in srgb, var(--foreground) 16%, transparent);
border-radius: 8px;
background:
linear-gradient(145deg, color-mix(in srgb, white 10%, transparent), transparent 24%, transparent 76%, color-mix(in srgb, var(--foreground) 3%, transparent)),
var(--workspace-sidebar);
box-shadow:
0 26px 70px rgba(0, 0, 0, 0.12),
inset 0 1px 0 color-mix(in srgb, white 24%, transparent),
inset 1px 0 0 color-mix(in srgb, white 7%, transparent);
backdrop-filter: blur(28px) saturate(132%);
-webkit-backdrop-filter: blur(28px) saturate(132%);
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:
0 28px 80px rgba(0, 0, 0, 0.46),
inset 0 1px 0 rgba(255, 255, 255, 0.18),
inset 1px 0 0 rgba(255, 255, 255, 0.055);
box-shadow: none;
}
body.app-spatial-overlays {
@@ -902,8 +910,8 @@
}
.app-workspace-shell.is-spatial .app-workspace-stage {
border-radius: 8px;
background: color-mix(in srgb, var(--workspace-canvas) 92%, transparent);
border-radius: 0;
background: var(--workspace-content);
}
/* 工作区保留滚轮与触控板滚动,只隐藏会形成额外竖向分割的浏览器轨道。 */
@@ -1159,15 +1167,33 @@
}
.app-user-workspace {
background-color: var(--workspace-canvas);
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-sidebar);
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);
@@ -1260,12 +1286,12 @@
.app-workspace-sidebar-scroll-area.has-top-fade::before {
top: 0;
background: linear-gradient(to bottom, var(--workspace-surface-strong) 0%, transparent 100%);
background: var(--workspace-navigation);
}
.app-workspace-sidebar-scroll-area.has-bottom-fade::after {
bottom: 0;
background: linear-gradient(to top, var(--workspace-surface-strong) 0%, transparent 100%);
background: var(--workspace-navigation);
}
.workspace-signal-icon {
@@ -1299,14 +1325,9 @@
min-width: 0;
}
.app-user-content,
.app-workspace-grid {
background: transparent;
}
.creation-home {
--creation-accent: #04a9cd;
--creation-bg: rgba(246, 248, 251, .78);
--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);
@@ -1324,8 +1345,8 @@
}
.dark .creation-home {
--creation-accent: #06b6d4;
--creation-bg: rgba(10, 11, 13, .86);
--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);
@@ -2301,7 +2322,7 @@
/* 创作首页使用独立的“编辑面 + 操作 Dock”结构,避免继承画布的面板语言。 */
.creation-home {
--creation-bg: #0d0e10;
--creation-bg: var(--workspace-page);
--creation-surface: #131519;
--creation-surface-muted: #1e2127;
--creation-surface-hover: #262a31;
@@ -2317,7 +2338,7 @@
}
html:not(.dark) .creation-home {
--creation-bg: #f8f9fb;
--creation-bg: var(--workspace-page);
--creation-surface: #ffffff;
--creation-surface-muted: #f0f2f5;
--creation-surface-hover: #e9edf1;
@@ -3735,11 +3756,11 @@
}
.app-workspace-canvas {
background: transparent;
background: var(--workspace-content);
}
.dark .app-workspace-canvas {
background: transparent;
background: var(--workspace-content);
}
.app-spatial-surface {
@@ -4837,8 +4858,8 @@ html[data-theme-switching="true"] :where(.canvas-node-shell, .aceternity-comet-c
/* 创作页是工作舞台,不使用管理台的边框、卡片和分段控件语言。 */
.creation-home {
--creation-accent: #dce4e9;
--creation-bg: #0d0e10;
--creation-accent: var(--workspace-accent);
--creation-bg: var(--workspace-page);
--creation-surface: #191b20;
--creation-surface-raised: #22252b;
--creation-text: #f2f3f4;
@@ -4872,7 +4893,7 @@ html:not(.dark) .creation-scrollbar::-webkit-scrollbar-thumb { background-color:
html:not(.dark) .creation-scrollbar::-webkit-scrollbar-thumb:hover { background-color: rgba(35, 41, 49, .38); }
html:not(.dark) .creation-home {
--creation-bg: #f7f7f5;
--creation-bg: var(--workspace-page);
--creation-surface: #ffffff;
--creation-surface-raised: #f0f1ee;
--creation-text: #1d2024;
@@ -5534,13 +5555,13 @@ html:not(.dark) .creation-model-picker-menu .canvas-model-picker-option > span:f
.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: #0d0e10 !important;
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: #f7f7f5 !important;
background: var(--workspace-page) !important;
}
.creation-empty-workspace {
@@ -6297,3 +6318,81 @@ html:not(.dark) .creation-history-drawer-root {
.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;
}