From 4ed521076600b5a60151cbeccf0fa7358c1d5492 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 17 Sep 2026 11:14:32 +0800 Subject: [PATCH] =?utf8?q?=E5=8D=87=E7=BA=A7=E8=87=B3=2020260917=20zip=20?= =?utf8?q?=E5=B7=A5=E7=A8=8B=EF=BC=9A=E7=BA=AF=20Vite=20SPA=20=E5=89=8D?= =?utf8?q?=E7=AB=AF=20+=20antd6=20+=20=E6=96=B0=E7=BB=84=E4=BB=B6=E5=BA=93?= =?utf8?q?=EF=BC=9Bprod=20=E6=9C=8D=E5=8A=A1=E7=94=B1=20vinext=20start=20?= =?utf8?q?=E5=88=87=20vite=20preview=EF=BC=9Bdb-sidecar=20=E5=8D=87?= =?utf8?q?=E7=BA=A7=E4=B8=BA=20zip=20=E5=86=85=E8=BE=83=E6=96=B0=E7=89=88?= =?utf8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ...4\244\321\206\320\250\320\236-20260916.md" | 41 + ...4\244\321\206\320\250\320\236-20260917.md" | 35 + app/brand-layout.css | 52 + app/brand-token-css.ts | 7 + app/company-theme.tsx | 64 +- app/globals.css | 772 +++---- app/layout.tsx | 7 + app/page.tsx | 1023 ++++++--- app/site-menu-model.ts | 81 + app/site-workspace.css | 73 + app/site-workspace.tsx | 212 ++ app/ui-layout-compat.css | 130 ++ app/ui-system.css | 92 + app/ui-system.tsx | 105 + db-sidecar.mjs | 128 +- index.html | 12 + lib/site-workspace.mjs | 256 +++ package-lock.json | 2008 +++++++++++++++-- package.json | 6 +- pnpm-lock.yaml | 1889 ++++++++++------ scripts/build-verified.sh | 0 scripts/install-ci.sh | 0 scripts/prepare-brand-component-patch.cjs | 48 + scripts/sites-env.sh | 0 scripts/validate-artifact.sh | 0 src/App.tsx | 2 + src/antd.less | 88 + src/assets/icons/Apps.svg | 11 + src/assets/icons/First.svg | 3 + src/assets/icons/Last.svg | 3 + src/assets/icons/Next.svg | 3 + src/assets/icons/Previous.svg | 3 + src/assets/icons/WISE_SRP.svg | 34 + src/assets/icons/arrow-down.svg | 3 + src/assets/icons/arrow-right.svg | 3 + src/assets/icons/config.svg | 3 + src/assets/icons/file.svg | 3 + src/assets/icons/iot_suite.svg | 10 + src/assets/icons/manage.svg | 11 + src/assets/icons/menu.svg | 3 + src/assets/icons/notifications.svg | 4 + src/assets/icons/search.svg | 3 + src/assets/icons/support.svg | 3 + src/components/dropdown-button/README.md | 5 + src/components/dropdown-button/index.less | 133 ++ src/components/dropdown-button/index.tsx | 54 + src/components/header/index.less | 242 ++ src/components/header/index.tsx | 91 + src/components/icons/svgIcon.tsx | 74 + src/components/menu/README.md | 5 + src/components/menu/index.less | 201 ++ src/components/menu/index.tsx | 38 + src/components/pagination/index.less | 101 + src/components/pagination/index.tsx | 60 + src/components/search-input/index.less | 36 + src/components/search-input/index.tsx | 30 + src/main.tsx | 17 + src/styles.less | 51 + src/templates/detail/README.md | 3 + src/templates/form/README.md | 3 + src/templates/list/README.md | 50 + src/templates/list/index.tsx | 217 ++ src/templates/list/mockData.ts | 45 + src/templates/list/styles.css | 44 + src/templates/login/README.md | 3 + src/theme.json | 62 + src/theme/overrides.css | 47 + src/vite-env.d.ts | 2 + tests/brand-token-css.test.mjs | 35 + tests/site-menu-model.test.mjs | 73 + tests/site-workspace-integration.mjs | 22 + tests/site-workspace.test.mjs | 39 + tests/ui-system.test.mjs | 92 + tsconfig.json | 5 +- tsconfig.ui.json | 1 + vite.config.ts | 4 + vite.local.config.ts | 11 +- ...67\320\224\321\206\320\260\342\225\235.md" | 79 + 78 files changed, 7454 insertions(+), 1755 deletions(-) create mode 100644 "UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260916.md" create mode 100644 "UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260917.md" create mode 100644 app/brand-layout.css create mode 100644 app/brand-token-css.ts create mode 100644 app/site-menu-model.ts create mode 100644 app/site-workspace.css create mode 100644 app/site-workspace.tsx create mode 100644 app/ui-layout-compat.css create mode 100644 app/ui-system.css create mode 100644 app/ui-system.tsx create mode 100644 index.html create mode 100644 lib/site-workspace.mjs mode change 100755 => 100644 scripts/build-verified.sh mode change 100755 => 100644 scripts/install-ci.sh create mode 100644 scripts/prepare-brand-component-patch.cjs mode change 100755 => 100644 scripts/sites-env.sh mode change 100755 => 100644 scripts/validate-artifact.sh create mode 100644 src/App.tsx create mode 100644 src/antd.less create mode 100644 src/assets/icons/Apps.svg create mode 100644 src/assets/icons/First.svg create mode 100644 src/assets/icons/Last.svg create mode 100644 src/assets/icons/Next.svg create mode 100644 src/assets/icons/Previous.svg create mode 100644 src/assets/icons/WISE_SRP.svg create mode 100644 src/assets/icons/arrow-down.svg create mode 100644 src/assets/icons/arrow-right.svg create mode 100644 src/assets/icons/config.svg create mode 100644 src/assets/icons/file.svg create mode 100644 src/assets/icons/iot_suite.svg create mode 100644 src/assets/icons/manage.svg create mode 100644 src/assets/icons/menu.svg create mode 100644 src/assets/icons/notifications.svg create mode 100644 src/assets/icons/search.svg create mode 100644 src/assets/icons/support.svg create mode 100644 src/components/dropdown-button/README.md create mode 100644 src/components/dropdown-button/index.less create mode 100644 src/components/dropdown-button/index.tsx create mode 100644 src/components/header/index.less create mode 100644 src/components/header/index.tsx create mode 100644 src/components/icons/svgIcon.tsx create mode 100644 src/components/menu/README.md create mode 100644 src/components/menu/index.less create mode 100644 src/components/menu/index.tsx create mode 100644 src/components/pagination/index.less create mode 100644 src/components/pagination/index.tsx create mode 100644 src/components/search-input/index.less create mode 100644 src/components/search-input/index.tsx create mode 100644 src/main.tsx create mode 100644 src/styles.less create mode 100644 src/templates/detail/README.md create mode 100644 src/templates/form/README.md create mode 100644 src/templates/list/README.md create mode 100644 src/templates/list/index.tsx create mode 100644 src/templates/list/mockData.ts create mode 100644 src/templates/list/styles.css create mode 100644 src/templates/login/README.md create mode 100644 src/theme.json create mode 100644 src/theme/overrides.css create mode 100644 src/vite-env.d.ts create mode 100644 tests/brand-token-css.test.mjs create mode 100644 tests/site-menu-model.test.mjs create mode 100644 tests/site-workspace-integration.mjs create mode 100644 tests/site-workspace.test.mjs create mode 100644 tests/ui-system.test.mjs create mode 100644 "\321\207\320\273\320\251\321\207\320\222\342\225\243\321\207\320\276\320\261\321\207\320\240\320\226\321\211\320\227\320\235\321\206\320\256\320\224-\321\205\320\232\320\257\321\210\320\223\342\225\234\321\210\320\267\320\224\321\206\320\260\342\225\235.md" diff --git "a/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260916.md" "b/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260916.md" new file mode 100644 index 0000000..43a269b --- /dev/null +++ "b/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260916.md" @@ -0,0 +1,41 @@ +# StationBuilder UI 校验说明 + +校验依据:用户提供的 `skills.zip` 中 `web-ui-builder` v1.3.0。直接修改现有 `StationBuilder-full-20260915` 工程,不另建静态设计页面;业务接口、数据库和已确认的建站流程不变。 + +## 已修正 + +- 将组件库统一至 Ant Design 6.6.4,图标统一至 @ant-design/icons 6.3.4,同步 npm 和 pnpm 锁文件。 +- `app/theme.json` 与附件的品牌配置逐项一致:主色 #008cd6,正文基准 16px,控件圆角 4px,字体、状态色和各组件 token 均取自该配置。 +- 移除旧 `--company-*`、`--brand-*` 别名,业务样式使用官方 `--ant-*` 变量;统一间距、字号与字重,减少旧样式覆盖新组件的冲突。 +- 可见按钮、输入框、复选框、单选框、下拉框及数据表格统一使用 antd。文件选择器保留浏览器原生能力;树状画布、模拟场景和仪表板内容不当作普通表单控件改写。 +- 面板和字段改为 Card / Form.Item;弹窗改为 Modal,保留原关闭与确认回调、内嵌确认弹窗及编辑内容。抽屉适配 v6 的 size / destroyOnHidden。 +- 状态筛选和节点编辑等 Tab 的业务内容归属 `items[].children`,避免只有标签条而没有 Tab 内容的实现。 +- 常见操作分组保持单行,最多三个可见操作;多余操作放入“更多”,同组至多一个主按钮。 +- 面板工具栏和仪表板“导入 / 新增”也接入统一操作分组。隐藏文件选择器、搜索框等辅助内容保持挂载,不会因“更多”收纳而失效;主按钮识别不依赖生产构建后的函数名称。 +- 消息提示使用 `App.useApp()` 的主题化实例;接入附件的 Select 渐变、浮层和表头设计覆盖。 +- 为菜单、缩略图和画布工具按钮增加尺寸兼容层,保留响应式规则;不在兼容层建立另一套字体和配色。将业务样式统一在根布局加载,避免客户端晚加载的旧样式覆盖品牌规则。 + +## 保留的特殊内容 + +用户此前明确要求复刻的 WISE-IoT Header、原站图标与无图标主菜单结构保留,不换成附件默认的另一套产品框架。数字孪生示意画面、仪表板图表配色、客户应用色系、运行日志、代码展示及导出仪表板 HTML 属于内容或用户配置数据,不全部替换为普通 UI 状态色。 + +## 校验结果与限制 + +- TypeScript UI 类型检查通过。 +- 23 项 UI 适配及既有业务回归测试通过,覆盖单选筛选、表格行/单元格点击、Tab 内容归属、弹窗关闭和操作分组,以及模板、资产、菜单数据逻辑和按钮尺寸兼容规则。 +- 品牌配置完整指纹校验通过,非仅校验少数主色值。 +- 当前预览服务已恢复,可访问站点管理、领域方案和设备模板路由。只做开发预览和类型/单元测试,未自动生成正式发布包。 +- **视觉验收尚未完成**:浏览器连接工具持续报告 `Unable to load browser request-header policy`,无法读取截图、计算样式或逐项实际点击验证。因此目前不能宣称全部页面已严格符合,也不能宣称 1920×1080 下所有布局已经验收。 + +## 本地预览与复核 + +预览地址:http://127.0.0.1:37931/t/stationbuilder/?page=projects + +建议视觉复核:站点层级与新增、五步建站、手动资产树与三个节点 Tab、设备模板和报警规则抽屉、领域能力四区块、仪表板列表、菜单配置。重点检查 1920×1080 下的标题、控件高度、文本截断、操作分组和浮层显示。 + +可重复执行的检查: + +```sh +node node_modules/typescript/bin/tsc -p tsconfig.ui.json --noEmit +node --test tests/ui-system.test.mjs tests/site-menu-model.test.mjs tests/site-workspace.test.mjs +``` diff --git "a/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260917.md" "b/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260917.md" new file mode 100644 index 0000000..f158ed1 --- /dev/null +++ "b/UI\321\206\320\260\320\261\321\211\320\272\320\234\321\210\320\277\342\224\244\321\206\320\250\320\236-20260917.md" @@ -0,0 +1,35 @@ +# StationBuilder UI 调整说明(web-ui-builder 1.3.0) + +## 本次实际修改 + +- 在现有工程中接入新安装 Skill 的原始品牌资产,不另做独立设计页面。业务入口仍是 app/page.tsx。 +- src/theme.json、src/antd.less、src/theme/overrides.css 保持与 Skill 一致;清除昨天重复的主题与覆盖副本,避免两套品牌配置分叉。副本可从 work/ui-style-backup-20260917/app 恢复。 +- 修正官方 CSS token 的序列化:lineHeight 等无单位值不再错误输出 px,字体、高度、内边距等真实长度仍输出 px。 +- 外层主菜单采用 Skill SideMenu,保留现有名称、顺序和无图标要求。支持分组展开/收起及 Header 按钮折叠菜单,宽度由组件决定,内容通过 flex 自然伸缩。 +- 保留已确认的 WISE-IoT Header 文字、原站图标与结构,不替换成 Skill 默认的另一套 Header。 +- 站点、领域方案、设备模板、页面样式及领域仪表板管理等搜索区域改用 Skill SearchInput;分页列表改用 Skill Pagination,支持每页 10/20/50/100 条。 +- 统一表格的字号、行高、表头与表体间距、悬停色;统一卡片标题、搜索工具栏与底部按钮栏。按钮仍保持最多三个、单排、一个主操作,其他操作保留在“更多”中。 +- 领域方案四区块在宽屏上保持四列,分配剩余视口高度,内容内部滚动;窄屏降为两列或一列。 +- 业务逻辑不作重新设计:保留模板创建站点、站点层级、五步配置、资产树、节点三个 Tab、设备模板直接编辑、报警规则抽屉及第四步至第五步的菜单生成规则。 +- 新增 Less 与 SVG 转 React 插件,保留原有 React/antd/Vite 版本;生产和本地 Vite 配置均支持品牌 SVG 图标。 + +## 验证范围 + +- UI TypeScript 检查通过;26 项品牌与业务回归测试通过。 +- Skill 环境检查通过;四个页面地址及业务组件、品牌 CSS/图标模块加载检查通过(HTTP 200),本地开发预览已恢复。HTTP 检查不等同于浏览器视觉验收。 +- 品牌三个原始文件指纹校验通过,新增测试防止无单位行高再次被写成 px。 +- 完整部署工程类型检查仍存在归档中缺失 Cloudflare 类型和 .openai/hosting.json 等问题,本次未补造部署环境,也不把它等同于 UI 类型检查通过。 +- 浏览器连接持续返回 Unable to load browser request-header policy,无法逐页读取截图并点击。因此视觉验收、1920×1080 实际截图验收及抽屉真实点击验收尚未完成,不能宣称全页面像素级符合。 +- 本次不生成正式发布包,不改数据库内容。 +- 本地预览直接挂载 app/page.tsx 的客户端入口,绕过归档工程 RSC 开发渲染超时;数据接口仍代理到原有 sidecar。正式 vite.config.ts 的 vinext/部署逻辑保留,并非重新做一套设计页面。 + +## 可重复检查 + +```sh +node node_modules/typescript/bin/tsc -p tsconfig.ui.json --noEmit +node --test tests/brand-token-css.test.mjs tests/ui-system.test.mjs tests/site-menu-model.test.mjs tests/site-workspace.test.mjs +``` + +本地开发预览:http://127.0.0.1:37931/t/stationbuilder/?page=projects + +请优先复核:站点管理列表、领域方案四区块、设备模板编辑及报警规则抽屉、五步配置中的页面选择和菜单配置。 diff --git a/app/brand-layout.css b/app/brand-layout.css new file mode 100644 index 0000000..15a6a77 --- /dev/null +++ b/app/brand-layout.css @@ -0,0 +1,52 @@ +/* StationBuilder business layout on top of the Skill's unmodified brand files. + Keep the approved WISE-IoT header artwork and the existing configuration flow. */ +.sb-brand-shell.app-shell { padding-left:0; } +.sb-brand-shell>.body { min-width:0; } +.sb-brand-shell .sb-brand-nav { position:sticky; top:56px; align-self:flex-start; height:calc(100dvh - 56px); display:flex; flex-direction:column; background:var(--ant-color-border); overflow:auto; } +.sb-brand-nav>nav { flex:1; min-height:0; } +.sb-brand-nav>nav>.ant-menu { height:auto; min-height:100%; font-family:var(--ant-font-family); font-size:var(--ant-font-size); } +.sb-brand-nav .ant-menu-item,.sb-brand-nav .ant-menu-submenu-title { font-weight:400; } +.sb-brand-nav>.design-doc-link { position:static; margin:var(--ant-padding-sm) var(--ant-padding); height:var(--ant-control-height); flex-shrink:0; border-radius:var(--ant-border-radius); background:var(--ant-color-primary); color:var(--ant-color-text-light-solid); } +.sb-brand-shell .workspace.main { display:flex; flex-direction:column; padding:0; min-height:calc(100dvh - 56px); } +.sb-brand-shell .workspace>.page-heading { padding:var(--ant-padding) var(--ant-padding-lg); min-height:80px; background:var(--ant-color-bg-layout); gap:var(--ant-padding); } +.sb-brand-shell .page-heading h1 { font-size:var(--ant-font-size-heading-4); line-height:var(--ant-line-height-heading-4); font-weight:var(--ant-font-weight-strong); } +.sb-brand-shell .page-heading p { font-size:var(--ant-font-size-sm); line-height:var(--ant-line-height-sm); margin-top:var(--ant-padding-xxs); color:var(--ant-color-text-secondary); } +.sb-brand-shell .page-heading>div:last-child { display:flex; flex-wrap:nowrap; align-items:center; gap:var(--ant-padding-xs); } +.sb-brand-shell .workspace>.content { flex:1; min-width:0; padding:var(--ant-padding) var(--ant-padding-lg) var(--ant-padding-lg); } +.sb-brand-shell .workspace>.sticky-actions { position:sticky; inset:auto; bottom:0; width:100%; min-height:64px; height:auto; margin:0; padding:var(--ant-padding) var(--ant-padding-lg); border-top:1px solid var(--ant-color-border); background:var(--ant-color-bg-container); z-index:20; } +.sb-brand-shell .station-config-footer,.sb-brand-shell .sticky-actions>div { flex-wrap:nowrap; gap:var(--ant-padding-xs); } +.sb-brand-shell .filterbar.company-filterbar,.sb-brand-shell .station-list-toolbar { display:flex; align-items:center; gap:var(--ant-padding-xs); padding-block:var(--ant-padding); min-height:64px; height:auto; } +.sb-brand-shell .station-list-toolbar>div:last-child,.sb-brand-shell .filter-actions { margin-left:auto; display:flex; align-items:center; flex-wrap:nowrap; gap:var(--ant-padding-xs); } +.sb-brand-shell .search-input.ant-input-affix-wrapper { flex-shrink:0; max-width:100%; height:var(--ant-control-height); } +.sb-brand-shell .page-footer>.pagination { height:auto; min-height:0; padding:0; margin:0; border:0; background:transparent; } +.sb-brand-shell .page-footer .page-size { min-width:128px; } +.sb-brand-shell .station-ui-table .ant-table-cell { height:auto; line-height:var(--ant-line-height); padding-inline:var(--ant-padding); } +.sb-brand-shell .station-ui-table .ant-table-thead>tr>th { padding-block:var(--ant-padding-sm); text-align:left; border-bottom:2px solid var(--ant-color-primary); } +.sb-brand-shell .station-ui-table .ant-table-tbody>tr>td { padding-block:var(--ant-table-cell-padding-block); } +.sb-brand-shell .panel.ant-card>.ant-card-head.panel-head { display:block; min-height:48px; padding:0 var(--ant-padding-lg); } +.sb-brand-shell .panel.ant-card .ant-card-head-wrapper { gap:var(--ant-padding); } +.sb-brand-shell .panel.ant-card .ant-card-head-title { font-size:var(--ant-font-size); font-weight:var(--ant-font-weight-strong); } +.sb-brand-shell .panel.ant-card>.ant-card-body { padding:var(--ant-padding-lg); } +.sb-brand-shell .company-list-panel.ant-card>.ant-card-body { padding:0 var(--ant-padding) var(--ant-padding-sm); } +.sb-brand-shell .station-ui-tabs>.ant-tabs-nav { margin:0; background:var(--ant-color-fill-quaternary); } +.sb-brand-shell .station-ui-tabs>.ant-tabs-nav .ant-tabs-tab { padding:var(--ant-padding-sm) var(--ant-padding-lg); } +.sb-brand-shell .station-ui-tabs>.ant-tabs-content-holder { background:var(--ant-color-bg-layout); } +.sb-brand-shell .station-ui-tabs .ant-tabs-tab-btn b,.sb-brand-shell .station-ui-tabs .ant-tabs-tab-btn i { display:inline-flex; align-items:center; min-width:16px; line-height:16px; padding:0 4px; margin-left:8px; border:1px solid var(--ant-color-border); border-radius:9999px; } +.sb-brand-shell .station-ui-tabs .ant-tabs-tab-active .ant-tabs-tab-btn b { border-color:var(--ant-color-success); } +.sb-brand-shell .domain-capability-grid { gap:var(--ant-padding-sm); } +.sb-brand-shell .domain-capability-detail { height:calc(100dvh - 176px); min-height:800px; } +.sb-brand-shell .domain-capability-grid { flex:1; min-height:0; } +.sb-brand-shell .domain-capability-card { height:100%; min-height:0; max-height:none; } +.sb-brand-shell .domain-capability-card>footer { padding:var(--ant-padding-xs); min-height:48px; flex-wrap:nowrap; } +.sb-brand-shell .domain-capability-card>footer .ant-btn { padding-inline:var(--ant-padding-xs); } +.sb-brand-shell .dashboard-manager-actions { display:flex; flex-wrap:nowrap; align-items:center; gap:var(--ant-padding-xs); } +@media (max-width:1440px) { + .sb-brand-shell .domain-capability-detail { height:auto; min-height:0; } + .sb-brand-shell .domain-capability-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } + .sb-brand-shell .domain-capability-card { height:520px; min-height:0; } +} +@media (max-width:1000px) { + .sb-brand-shell .workspace>.content { padding:var(--ant-padding); } + .sb-brand-shell .station-list-toolbar,.sb-brand-shell .filterbar.company-filterbar { overflow-x:auto; } + .sb-brand-shell .domain-capability-grid { grid-template-columns:1fr; } +} diff --git a/app/brand-token-css.ts b/app/brand-token-css.ts new file mode 100644 index 0000000..b375ed4 --- /dev/null +++ b/app/brand-token-css.ts @@ -0,0 +1,7 @@ +/** Serialize official antd tokens without turning unitless values into lengths. */ +export function tokenCssValue(name: string, value: string | number): string { + if (typeof value !== "number") return value; + if (/^(lineHeight|fontWeight|opacity|zIndex|sizeStep|sizeUnit)/i.test(name)) return String(value); + const length = /^(fontSize|borderRadius|controlHeight|size|padding|margin)|(?:Size|Height|Width|Radius|Padding|Margin)/; + return length.test(name) ? `${value}px` : String(value); +} diff --git a/app/company-theme.tsx b/app/company-theme.tsx index fc2ba6d..7261d02 100644 --- a/app/company-theme.tsx +++ b/app/company-theme.tsx @@ -1,55 +1,23 @@ "use client"; -import { ConfigProvider } from "antd"; +import { App, ConfigProvider, theme, type ThemeConfig } from "antd"; import zhCN from "antd/locale/zh_CN"; +import brandTheme from "../src/theme.json"; +import { tokenCssValue as cssValue } from "./brand-token-css"; -const companyTheme = { - token: { - colorPrimary: "#008cd6", - colorInfo: "#008cd6", - colorSuccess: "#42d067", - colorWarning: "#ff990b", - colorError: "#f05b49", - colorText: "#323233", - colorTextSecondary: "#89898a", - colorBorder: "#d9d9d9", - colorBgLayout: "#ffffff", - colorBgContainer: "#ffffff", - borderRadius: 4, - controlHeight: 32, - fontFamily: - 'Roboto, "Noto Sans SC", "Microsoft YaHei", Arial, sans-serif', - fontSize: 14, - boxShadow: "none", - boxShadowSecondary: "0 4px 16px rgba(0, 0, 0, 0.12)", - }, - components: { - Button: { - primaryShadow: "none", - defaultShadow: "none", - fontWeight: 600, - paddingInline: 24, - }, - Drawer: { - colorBgElevated: "#ffffff", - }, - Table: { - headerBg: "#f7f7f7", - headerColor: "#323233", - rowHoverBg: "#f1f8fc", - borderColor: "#e5e5e5", - }, - Input: { - activeBorderColor: "#008cd6", - hoverBorderColor: "#008cd6", - }, - }, -} as const; +export const companyTheme: ThemeConfig = { ...brandTheme, cssVar: { key: "stationbuilder" } }; +const kebab = (name: string) => name.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2").toLowerCase(); +// Body, plain layout elements and portals share antd's official, resolved variables. +const resolved = theme.getDesignToken(companyTheme); +const declarations = Object.entries(resolved).filter(([, value]) => typeof value === "string" || typeof value === "number").map(([name, value]) => "--ant-" + kebab(name) + ":" + cssValue(name, value as string | number)); +for (const [component, tokens] of Object.entries(brandTheme.components)) { + for (const [name, value] of Object.entries(tokens)) declarations.push("--ant-" + kebab(component) + "-" + kebab(name) + ":" + cssValue(name, value)); +} +const rootVariables = ":root{" + declarations.join(";") + "}"; export default function CompanyTheme({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); + return + + {children} + ; } diff --git a/app/globals.css b/app/globals.css index af580ad..68c29cf 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,87 +1,87 @@ @import "tailwindcss"; -:root{--blue:#009fe3;--blue2:#007cc3;--pale:#e7f5fc;--line:#d9dde2;--soft:#f4f5f6;--text:#333;--muted:#777;--green:#00b96b;--orange:#f3a000;--red:#f05b49}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Microsoft YaHei",sans-serif;color:var(--text);font-size:13px;background:var(--soft)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}.app-shell{min-height:100vh;padding-top:56px;padding-left:190px}.topbar{position:fixed;z-index:50;left:0;right:0;top:0;height:56px;border-top:3px solid transparent;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,#008cd6,#009fe3);background-origin:border-box;background-clip:padding-box,border-box;border-bottom:1px solid #cfd4d9;display:flex;align-items:center;padding:0 12px;gap:9px;box-shadow:0 1px 3px #00000012}.hamburger{border:0;background:transparent;font-size:17px;color:#777}.brand-mark,.login-logo{color:#078be0;font-size:24px;line-height:1;font-weight:bold}.topbar>strong{font-size:16px}.divider{height:19px;border-left:1px solid #d4d7da;margin:0 2px}.top-actions{margin-left:auto;display:flex;align-items:center;gap:16px;color:#666}.top-actions>span{font-size:15px;position:relative}.top-actions i{position:absolute;width:5px;height:5px;background:red;border-radius:50%;right:-2px;top:-2px}.top-actions small{font-size:8px;line-height:1.2}.avatar{width:23px;height:23px;border-radius:50%;background:#d7f1fb;color:#168abf;display:grid!important;place-items:center;font-size:10px!important}.site-switcher{margin:2px 9px 4px;height:30px;border:1px solid #cfd4d9;border-radius:4px;background:#fff;color:#333;font-size:11px;padding:0 6px;width:calc(100% - 18px)}.site-switcher:focus{outline:1px solid var(--blue)}.side-nav{position:fixed;z-index:35;top:56px;bottom:0;left:0;width:190px;background:#f3f4f5;border-right:1px solid #d2d6da;display:flex;flex-direction:column;padding:0}.side-title{height:48px;padding:17px 15px 0;font-weight:bold;font-size:14px}.side-title span{float:right;color:#999}.side-nav>button{height:41px;border:0;background:transparent;text-align:left;padding:0 14px;display:flex;align-items:center;gap:10px;border-left:3px solid transparent;font-size:14px}.side-nav>button:hover{background:rgba(0,0,0,.04);color:#007fbe}.side-nav>button.active{background:rgba(0,140,214,.1);color:#008cd6;border-left-color:var(--blue)}.side-nav>button b{width:18px;text-align:center}.side-nav>button em{font-style:normal;width:21px;height:21px;border:1px solid #bfc5ca;border-radius:50%;display:grid;place-items:center;font-size:10px;background:white}.side-nav>button.active em{background:var(--blue);border-color:var(--blue);color:white}.side-nav>small{font-size:10px;color:#999;padding:20px 15px 8px;text-transform:uppercase;letter-spacing:.8px}.side-help{position:relative;margin:auto 12px 12px;border:1px solid var(--line);background:white;padding:11px;display:flex;flex-direction:column;gap:5px;font-size:10px}.side-help span{color:#888} -.model-trigger{display:flex;align-items:center;justify-content:space-between;cursor:pointer;color:#888} -.model-trigger:hover{color:#007fbd} -.model-trigger .caret{font-size:8px;margin-left:4px} +*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:var(--ant-font-family);color:var(--ant-color-text-base);font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-layout)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}.app-shell{min-height:100vh;padding-top:56px;padding-left:192px}.topbar{position:fixed;z-index:50;left:0;right:0;top:0;height:56px;border-top:3px solid transparent;background-image:linear-gradient(var(--ant-color-bg-container),var(--ant-color-bg-container)),linear-gradient(90deg,var(--ant-color-primary),var(--ant-color-primary));background-origin:border-box;background-clip:padding-box,border-box;border-bottom:1px solid var(--ant-color-border);display:flex;align-items:center;padding:0 12px;gap:8px;box-shadow:0 1px 3px color-mix(in srgb,var(--ant-color-text-base) 7%,transparent)}.hamburger{border:0;background:transparent;font-size:var(--ant-font-size);color:var(--ant-color-text-secondary)}.brand-mark,.login-logo{color:var(--ant-color-primary);font-size:var(--ant-font-size-heading-3);line-height:1;font-weight:600}.topbar>strong{font-size:var(--ant-font-size)}.divider{height:19px;border-left:1px solid var(--ant-color-border);margin:0 4px}.top-actions{margin-left:auto;display:flex;align-items:center;gap:16px;color:var(--ant-color-text-secondary)}.top-actions>span{font-size:var(--ant-font-size);position:relative}.top-actions i{position:absolute;width:5px;height:5px;background:var(--ant-color-error);border-radius:50%;right:-2px;top:-2px}.top-actions small{font-size:var(--ant-font-size-sm);line-height:1.2}.avatar{width:23px;height:23px;border-radius:50%;background:var(--ant-color-primary-bg);color:var(--ant-color-primary);display:grid!important;place-items:center;font-size:var(--ant-font-size-sm)!important}.site-switcher{margin:4px 8px 4px;height:30px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);color:var(--ant-color-text-base);font-size:var(--ant-font-size-sm);padding:0 8px;width:calc(100% - 18px)}.site-switcher:focus{outline:1px solid var(--ant-color-primary)}.side-nav{position:fixed;z-index:35;top:56px;bottom:0;left:0;width:190px;background:var(--ant-color-bg-layout);border-right:1px solid var(--ant-color-border);display:flex;flex-direction:column;padding:0}.side-title{height:48px;padding:16px 16px 0;font-weight:600;font-size:var(--ant-font-size)}.side-title span{float:right;color:var(--ant-color-text-secondary)}.side-nav>button{height:41px;border:0;background:transparent;text-align:left;padding:0 16px;display:flex;align-items:center;gap:12px;border-left:3px solid transparent;font-size:var(--ant-font-size)}.side-nav>button:hover{background:var(--ant-color-fill-quaternary);color:var(--ant-color-primary-hover)}.side-nav>button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary);border-left-color:var(--ant-color-primary)}.side-nav>button b{width:18px;text-align:center}.side-nav>button em{font-style:normal;width:21px;height:21px;border:1px solid var(--ant-color-border);border-radius:50%;display:grid;place-items:center;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-container)}.side-nav>button.active em{background:var(--ant-color-primary);border-color:var(--ant-color-primary);color:var(--ant-color-bg-container)}.side-nav>small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);padding:20px 16px 8px;text-transform:uppercase;letter-spacing:.8px}.side-help{position:relative;margin:auto 12px 12px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:12px;display:flex;flex-direction:column;gap:4px;font-size:var(--ant-font-size-sm)}.side-help span{color:var(--ant-color-text-secondary)} +.model-trigger{display:flex;align-items:center;justify-content:space-between;cursor:pointer;color:var(--ant-color-text-secondary)} +.model-trigger:hover{color:var(--ant-color-primary-hover)} +.model-trigger .caret{font-size:var(--ant-font-size-sm);margin-left:4px} .model-backdrop{position:fixed;inset:0;z-index:60} -.model-popover{position:absolute;left:0;right:0;bottom:calc(100% + 6px);z-index:61;background:#fff;border:1px solid #d2d6d9;border-radius:6px;box-shadow:0 8px 22px #0002;padding:8px;display:flex;flex-direction:column;gap:5px} -.model-popover-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px} -.model-popover-head>span{font-weight:bold;color:#007fbd;font-size:10px} -.model-popover-head>small{color:#aeb4b8;font-size:8px} -.model-row{display:flex;align-items:center;gap:7px;padding:5px 7px;border:1px solid #e6e9eb;border-radius:4px;background:#fafbfb;font-size:10px;cursor:pointer} -.model-row input[type=radio]{margin:0;accent-color:#009fe3} -.model-row .model-name{font-weight:bold;color:#333;flex:1} -.model-row .model-tag{color:#1f9d5f;font-size:8px;background:#eafaf1;border:1px solid #c8eccf;padding:1px 5px;border-radius:8px;white-space:nowrap} -.model-row .model-rate{color:#888;font-size:9px;min-width:34px;text-align:right} -.model-row.disabled{opacity:.45;cursor:not-allowed;background:#f4f4f4} -.model-row.disabled .model-tag{color:#9aa1a5;background:#eceeef;border-color:#dfe2e3} -.model-row:not(.disabled):hover{border-color:#8ccce9;background:#eef7fb}.workspace{min-height:calc(100vh - 56px);padding-bottom:64px}.crumb{height:34px;padding:11px 20px 0;color:#8b8f93;font-size:11px}.crumb b{color:var(--blue)}.page-heading{min-height:60px;padding:3px 20px 11px;display:flex;align-items:center;justify-content:space-between}.page-heading h1{font-size:21px;margin:0 0 5px}.page-heading p{margin:0;color:#81868b}.button{border:1px solid var(--blue2);background:var(--blue2);color:white;border-radius:2px;min-width:92px;height:31px;padding:0 14px;margin-left:8px}.button:hover{background:#006ca9}.button.secondary{background:white;color:#555;border-color:#cdd2d6}.button.secondary:hover{border-color:var(--blue);color:var(--blue)}.button:disabled{opacity:.55;cursor:not-allowed}.steps{height:70px;background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr);padding:0 22px}.steps button{border:0;background:transparent;display:flex;align-items:center;position:relative;text-align:left;color:#999;padding:0 18px}.steps button>i{font-style:normal;width:29px;height:29px;border-radius:50%;border:1px solid #cfd4d9;display:grid;place-items:center;margin-right:10px;background:#fff}.steps button span{display:flex;flex-direction:column;gap:4px}.steps button small{font-size:8px}.steps button>b{position:absolute;right:0;font-size:23px;color:#c3c7ca}.steps button.active{color:#222}.steps button.active>i{background:var(--blue);border-color:var(--blue);color:#fff}.steps button.done>i{background:#39b980;border-color:#39b980;color:white}.steps button.locked{cursor:default}.content{padding:14px 20px}.panel{background:white;border:1px solid var(--line);margin-bottom:14px}.panel-head{min-height:43px;border-bottom:1px solid var(--line);padding:8px 12px;display:flex;justify-content:space-between;align-items:center}.panel-head>strong{font-size:14px}.panel-head .button{height:28px}.panel-body{padding:12px}.summary-strip{display:grid;grid-template-columns:repeat(5,1fr);height:64px;background:white;border:1px solid var(--line);margin-bottom:14px}.summary-strip div{display:flex;align-items:center;justify-content:center;gap:9px;border-right:1px solid var(--line)}.summary-strip div:last-child{border:0}.summary-strip b{font-size:23px}.summary-strip span{color:#777}.filterbar{height:45px;display:flex;align-items:center;gap:7px;padding-bottom:10px;border-bottom:1px solid var(--line)}.filterbar>label{width:205px;height:30px;border:1px solid #cdd2d6;display:flex;align-items:center;padding:0 8px;color:#999}.filterbar input{border:0;outline:0;width:100%;padding-left:8px}.filterbar select,.preview-toolbar select{height:30px;border:1px solid #cdd2d6;background:white;padding:0 25px 0 9px}.filterbar>span{flex:1}.view-switch{display:flex}.view-switch button,.icon-button{width:31px;height:29px;border:1px solid #cbd0d4;background:white}.view-switch button.active{background:var(--blue);color:white;border-color:var(--blue)}.icon-button{border:0;font-size:16px}.data-table{width:100%;border-collapse:collapse}.data-table th{height:35px;background:#f6f7f8;color:#4b4f53;text-align:left;font-size:11px;font-weight:bold;border-bottom:1px solid var(--line);padding:0 10px}.data-table td{height:48px;border-bottom:1px solid #e3e5e7;padding:7px 10px;font-size:11px}.data-table tr:hover td{background:#f7fbfd}.link{border:0;background:transparent;color:#008ed2;padding:0}.site-icon{display:inline-grid;place-items:center;width:30px;height:30px;margin-right:8px;color:#098dd5;border:1px solid #c8d8e0;background:#f7fcff;font-size:18px;vertical-align:middle}.site-icon.big{width:40px;height:40px;font-size:26px}.status{display:inline-flex;align-items:center;justify-content:center;border-radius:10px;padding:2px 8px;font-size:10px;line-height:1.2;border:1px solid}.status.ok{color:#008c51;background:#e5fff3;border-color:#60d9a2}.status.warn{color:#b37400;background:#fff4d8;border-color:#f6bc44}.status.bad{color:#d84632;background:#ffeae7;border-color:#ff8b7b}.status.muted{color:#777;background:#f3f3f3;border-color:#c9c9c9}.dots,.trash{border:0;background:transparent;color:#777}.pagination{height:46px;display:flex;justify-content:flex-end;align-items:center;gap:7px;padding-top:12px}.pagination span{margin-right:10px;color:#777}.pagination button{width:28px;height:28px;border:0;background:white}.pagination button.active{background:#dff2fc;color:#008fd2}.pagination select{border:0;background:white}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:12px 0}.project-grid article{border:1px solid var(--line);padding:14px;cursor:pointer}.project-grid article:hover{border-color:var(--blue);box-shadow:0 2px 7px #008fd21f}.project-grid article>div{display:flex;justify-content:space-between}.project-grid h3{margin:10px 0 5px}.project-grid p,.project-grid small{color:#888;font-size:11px}.project-grid section{display:flex;gap:18px;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:10px 0;margin:12px 0}.project-grid section span{display:flex;flex-direction:column}.project-grid section b{font-size:16px}.two-column{display:grid;grid-template-columns:1fr 340px;gap:14px}.two-column.equal{grid-template-columns:1fr 1fr}.basic-layout>.panel>.panel-body{padding:17px}.stack{display:flex;flex-direction:column}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-grid>label{display:flex;flex-direction:column;gap:7px;font-size:11px;font-weight:bold}.form-grid>label>input,.form-grid>label>select,.form-grid>label>textarea{border:1px solid #cfd3d7;background:white;border-radius:2px;padding:8px;outline:none;font-weight:normal}.form-grid>label>input:focus,.form-grid>label>select:focus,.form-grid>label>textarea:focus{border-color:var(--blue)}.form-grid>label>input,.form-grid>label>select{height:34px}.form-grid>label>textarea{min-height:80px;resize:vertical;line-height:1.6}.field{display:flex;flex-direction:column;gap:7px}.field>span{font-size:11px;font-weight:bold}.field>span i{color:red;font-style:normal;margin-right:3px}.field input,.field select,.field textarea{border:1px solid #cfd3d7;background:white;border-radius:2px;padding:8px;outline:none}.field input,.field select{height:34px}.field textarea{min-height:130px;resize:vertical;line-height:1.6}.field textarea.small{min-height:80px}.field small{color:#999;font-size:10px}.form-grid .field:nth-child(n+3){grid-column:1/-1}.upload{height:90px;border:1px dashed #bfc7cd;background:#fafbfb;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#777;gap:5px}.upload b{color:var(--blue);font-size:20px}.ai-box{text-align:center;padding:12px}.ai-box>span{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,#05a9e8,#8056d9);color:#fff;display:grid;place-items:center;margin:auto;font-weight:bold}.ai-box h3{font-size:14px;margin:12px}.ai-box p{color:#777;line-height:1.7;text-align:left}.meter{height:7px;border-radius:5px;background:#edf0f2;overflow:hidden}.meter i{display:block;height:100%;background:linear-gradient(90deg,#00a4e7,#42c58a);transition:width .35s}.tips{padding-left:22px;line-height:2;color:#666}.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}.kpi-row>div{height:75px;border:1px solid var(--line);background:white;padding:12px 14px;position:relative}.kpi-row span{display:block;color:#008dcf;font-size:11px;margin-bottom:6px}.kpi-row b{font-size:25px}.kpi-row small{margin-left:4px;color:#888}.kpi-row .status{margin-top:7px}.editable td{padding:7px}.editable input,.editable select{height:29px;border:1px solid #d3d7db;width:100%;padding:0 7px;background:#fff}.editable .number{width:65px}.tree{line-height:2.2}.tree .l1{padding-left:24px}.tree .l2{padding-left:52px;color:#777}.tree span{border-radius:10px;background:#eef2f4;padding:2px 7px;font-size:10px}.file-card{display:flex;align-items:center;gap:12px;border:1px solid #e0e3e5;background:#fafafa;padding:12px}.file-card .excel{width:36px;height:42px;background:#14834f;color:white;display:grid;place-items:center;font-weight:bold}.file-card>div{flex:1}.file-card p{margin:5px 0 0;color:#888;font-size:10px}.checks{display:flex;gap:20px;color:#15935c;padding:12px 2px 0;font-size:10px}.tabs{height:46px;border-bottom:1px solid var(--line);display:flex;gap:6px;margin:-12px -12px 0;padding-left:10px}.tabs button{padding:0 18px;border:0;border-bottom:2px solid transparent;background:white}.tabs button.active{color:#008ed2;border-bottom-color:#008ed2}.tabs i{font-style:normal;border-radius:10px;background:#e7f3f8;padding:2px 7px;margin-left:5px}.section-toolbar{display:flex;justify-content:space-between;align-items:center;padding:14px 4px}.section-toolbar p{margin:4px 0 0;color:#888;font-size:11px}.mu-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.mu-grid article{border:1px solid var(--line);display:grid;grid-template-columns:42% 58%;min-height:128px;cursor:pointer}.mu-grid article.selected{border:2px solid var(--blue);background:#fbfeff}.mu-thumb{margin:8px;background:#e9eef1;display:grid;place-items:center;position:relative;overflow:hidden}.mu-thumb:after{content:"";width:72%;height:40%;border:1px solid #8ec4dd;background:white;box-shadow:26px -23px 0 -8px #b9e1f3,-18px 25px 0 -7px #8ed1ec}.mu-thumb b{position:absolute;z-index:2;color:var(--blue);font-size:22px}.mu-grid article>div:last-child{padding:11px 10px 8px 0}.mu-grid header{display:flex;gap:7px;align-items:center}.mu-grid h3{font-size:13px;margin:0}.mu-grid p{color:#777;font-size:10px;line-height:1.5;min-height:32px}.mu-grid button{border:0;background:transparent;color:#008ed2;padding:0}.blue{color:#008ed2}.type-tag{background:#eff3f5;padding:4px 8px;border-radius:2px}.wide-cell{min-width:300px}.menu-builder{display:grid;grid-template-columns:230px 1fr 240px;gap:14px;background:#f6f7f8;padding:14px}.page-pool,.menu-tree,.menu-preview{background:white;border:1px solid var(--line);padding:12px}.page-pool p{color:#999;font-size:10px}.page-pool div{border:1px solid var(--line);padding:10px;margin-top:8px;background:#fafafa}.menu-tree section{border:1px solid var(--line);margin-bottom:8px;padding:10px}.menu-tree section>span{float:right}.menu-tree section>div{margin:9px 0 0 15px;padding:7px;border-top:1px solid #eee}.menu-tree i{font-style:normal;font-size:8px;background:#e1f0f8;color:#008ed2;padding:3px;margin-right:8px}.menu-tree i.cube{background:#eee8fb;color:#7045bc}.menu-tree>button{border:1px dashed #aaa;background:#fafafa;width:100%;height:34px}.menu-preview aside{background:#f4f5f6;min-height:250px;display:flex;flex-direction:column;padding-top:10px}.menu-preview strong{padding:12px}.menu-preview button{border:0;background:transparent;text-align:left;padding:10px}.menu-preview button.active{background:#d8effa;color:#0089ca}.generate-layout{display:grid;grid-template-columns:1.1fr .9fr;gap:14px}.confirm-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.confirm-grid div{border:1px solid #dfe2e5;padding:12px;display:flex;flex-direction:column;gap:5px;position:relative}.confirm-grid span,.confirm-grid small{color:#888;font-size:10px}.confirm-grid button{position:absolute;right:10px;top:10px;border:0;background:transparent;color:#008ed2;font-size:10px}.option-list{display:grid;grid-template-columns:1fr 1fr;gap:12px}.option-list label{display:flex;align-items:center;gap:8px}.task-panel{height:100%}.overall{background:#f6fbfd;border:1px solid #d3eaf5;padding:13px}.overall>div:first-child{display:flex;justify-content:space-between;margin-bottom:9px}.overall p{margin:8px 0 0;color:#777;font-size:10px}.task-list{padding:10px 0}.task-list>div{display:flex;align-items:center;border-bottom:1px solid #eee;padding:9px 3px}.task-list>div>i{font-style:normal;width:25px;height:25px;border-radius:50%;border:1px solid #d2d6da;display:grid;place-items:center;margin-right:9px}.task-list>div>i.done{background:#31b67c;border-color:#31b67c;color:white}.task-list>div>i.spin{color:#008fd2}.task-list>div>span{display:flex;flex:1;flex-direction:column;gap:3px}.task-list small{color:#999}.task-panel>.panel-body>.button{width:100%;margin:5px 0}.result-header{display:flex;align-items:center;justify-content:space-between;background:white;border:1px solid var(--line);padding:12px;margin-bottom:14px}.result-header>div{display:flex;align-items:center;gap:10px}.result-header h2{margin:0 0 4px}.result-header p{margin:0;color:#888;font-size:10px}.result-layout{display:grid;grid-template-columns:1fr 280px;gap:14px}.result-pages{display:grid;grid-template-columns:1fr;gap:10px}.result-pages article{border:1px solid var(--line)}.result-pages article>div:last-child{padding:10px}.result-pages article header{display:flex;justify-content:space-between}.result-pages h3{font-size:13px;margin:10px 0 4px}.result-pages p,.result-pages small{font-size:10px;color:#888}.result-pages footer{display:flex;margin-top:9px}.result-pages footer .button{margin:0 5px 0 0;min-width:68px;height:27px}.dashboard-thumb{height:115px;background:#f2f5f7;position:relative;padding:12px 10px 10px 35px}.dashboard-thumb>i{position:absolute;left:0;top:0;bottom:0;width:25px;background:#d7e2e8}.dashboard-thumb>header{display:block;height:10px;background:white;border:1px solid #d9e1e5}.dashboard-thumb>section{display:flex;gap:4px;margin-top:5px}.dashboard-thumb>section b{height:22px;flex:1;background:white;border:1px solid #cde0e9}.dashboard-thumb>footer{position:absolute;left:35px;right:46px;bottom:10px;height:50px;background:white;border:1px solid #d8e1e6;display:flex;align-items:flex-end;gap:5px;padding:8px}.dashboard-thumb>footer em{flex:1;background:#67c5ea;height:45%}.dashboard-thumb>footer em:nth-child(2){height:75%}.dashboard-thumb>footer em:nth-child(4){height:92%}.dashboard-thumb>span{position:absolute;right:9px;bottom:10px;width:31px;height:50px;background:conic-gradient(#17b876 0 72%,#e6edf0 72%)}.dashboard-thumb-live{position:relative;min-height:115px;background:#f2f5f7;border-bottom:1px solid #d8e1e6;overflow:hidden}.dashboard-thumb-live>div{position:relative}.thumb-empty{position:absolute;inset:0;display:grid;place-items:center;color:#999;font-size:11px}result-menu div{display:flex;justify-content:space-between;border-bottom:1px solid #eee;padding:10px 4px}.result-menu span{background:#edf1f3;border-radius:10px;padding:2px 7px}.text-button{border:0;background:transparent;color:#008ed2;margin-top:12px}.score{display:flex;align-items:center;justify-content:center;gap:10px;padding:10px}.score b{width:55px;height:55px;border-radius:50%;border:5px solid #32bb81;display:grid;place-items:center;font-size:18px}.score span{color:#16945d}.validation{padding-left:10px;list-style:none;line-height:2;color:#178f5a}.preview-shell{border:1px solid var(--line);background:white;margin:-2px}.preview-toolbar{height:45px;display:flex;align-items:center;justify-content:space-between;padding:0 10px;border-bottom:1px solid var(--line)}.preview-toolbar>div{display:flex;align-items:center;gap:8px}.preview-toolbar button{border:1px solid #d1d5d8;background:white;height:29px;padding:0 10px}.preview-main{display:grid;grid-template-columns:1fr 300px;height:655px}.cube-canvas{position:relative;background:#f2f4f5;border-right:1px solid var(--line);overflow:hidden}.cube-top{position:absolute;left:0;right:0;top:0;height:32px;background:white;border-top:3px solid var(--blue2);border-bottom:1px solid #cfd4d8;display:flex;align-items:center;padding:0 10px;gap:15px}.cube-top b{color:#087fc0}.cube-top i{margin-left:auto;font-style:normal;color:#777}.cube-side{position:absolute;left:0;top:32px;bottom:0;width:130px;background:#edf0f1;display:flex;flex-direction:column}.cube-side strong{padding:15px 10px}.cube-side button{height:37px;border:0;background:transparent;text-align:left;padding-left:12px}.cube-side button.active{background:#d6effb;color:#0088c9}.cube-content{position:absolute;left:130px;top:32px;right:0;bottom:0;padding:12px}.cube-content>header{display:flex;justify-content:space-between;align-items:center}.cube-content>header h2{font-size:16px;margin:5px 0 8px}.cube-content>header span,.cube-content>header small{font-size:9px;color:#888}.cube-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.cube-kpis>div{height:78px;background:white;border:1px solid #d6dade;padding:9px;position:relative;display:flex;flex-direction:column}.cube-kpis span{font-size:9px;color:#008dcd}.cube-kpis b{font-size:20px;margin:5px 0}.cube-kpis small{font-size:9px;color:#888}.spark{position:absolute;right:9px;bottom:14px;width:42px;height:18px;border-top:3px solid #13a7e5;transform:skewY(-12deg);border-radius:50%}.spark.s1{transform:skewY(8deg)}.spark.s2{border-color:#f0a000}.cube-grid{display:grid;grid-template-columns:1.7fr .8fr;gap:7px;margin-top:7px}.cube-grid>section{background:white;border:1px solid #d6dade;padding:10px}.cube-grid h3{font-size:11px;margin:0 0 8px}.cube-grid h3 span,.cube-grid h3 button{float:right;border:0;background:transparent;color:#777;font-size:9px}.line-chart{height:175px;position:relative}.line-chart>div{position:absolute;inset:0 0 20px;background:repeating-linear-gradient(to bottom,#fff 0,#fff 29px,#e8ecee 30px)}.line-chart svg{position:absolute;left:0;right:0;top:0;height:145px;width:100%}.line-chart footer{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:space-between;font-size:8px;color:#999}.donut{width:115px;height:115px;border-radius:50%;background:conic-gradient(#1abc78 0 80%,#f2aa24 80% 92%,#aeb7bd 92%);margin:13px auto;display:grid;place-items:center}.donut:before{content:"";position:absolute;width:72px;height:72px;background:white;border-radius:50%}.donut b{z-index:1;font-size:21px;display:flex;flex-direction:column;align-items:center}.donut small{font-size:8px;color:#888}.donut-panel footer{display:flex;justify-content:space-around;font-size:8px}.donut-panel footer i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:3px}.green{background:#1abc78}.orange{background:#f2aa24}.gray{background:#aeb7bd}.alarm-panel{grid-column:1/-1}.alarm-panel table{border-collapse:collapse;width:100%;font-size:9px}.alarm-panel td{border-top:1px solid #e5e8ea;padding:8px}.inspector{background:white;overflow:auto}.inspector>nav{height:42px;display:flex;border-bottom:1px solid var(--line)}.inspector>nav button{flex:1;border:0;border-bottom:2px solid transparent;background:white;font-size:11px}.inspector>nav button.active{color:#008ed2;border-bottom-color:#008ed2}.inspector-body{padding:14px}.inspector-body h3{font-size:15px}.inspector-body p{font-size:11px;color:#777;line-height:1.7}.inspector-body dl{display:grid;grid-template-columns:85px 1fr;border-top:1px solid #eee;margin:15px 0}.inspector-body dt,.inspector-body dd{margin:0;padding:9px 0;border-bottom:1px solid #eee;font-size:10px}.inspector-body dt{color:#888}.component{padding:8px;border:1px solid #e2e5e7;margin-top:6px}.component span{float:right}.code-body header{text-align:right}.code-body header button{border:0;background:transparent;color:#008ed2}.code-body pre{font-size:10px;line-height:1.55;background:#202a33;color:#cce9f7;padding:12px;min-height:410px;overflow:auto}.inspector-body textarea{width:100%;height:120px;border:1px solid #ccd2d6;padding:9px;resize:none}.suggestion{border:1px solid #cfd5d9;background:#f8fafb;border-radius:12px;padding:5px 9px;margin:0 5px 7px 0;font-size:10px}.inspector-body>.button{width:100%;margin:12px 0}.sticky-actions{position:fixed;z-index:20;left:232px;right:0;bottom:0;height:54px;background:white;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 20px;box-shadow:0 -2px 6px #0000000c}.toast{position:fixed;z-index:100;right:24px;top:56px;background:#26323a;color:white;padding:12px 18px;box-shadow:0 5px 18px #0003}.toast b{color:#46d195;margin-right:8px}.modal-backdrop{position:fixed;z-index:90;inset:0;background:#0007;display:grid;place-items:center}.modal{width:610px;max-height:78vh;background:white;box-shadow:0 10px 30px #0004;display:flex;flex-direction:column}.modal>header{height:47px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 15px}.modal h2{font-size:15px}.modal>header button{border:0;background:transparent;font-size:22px;color:#888}.modal-body{padding:16px;overflow:auto;flex:1 1 auto;min-height:0}.modal>footer{border-top:1px solid var(--line);padding:10px 15px;text-align:right}.modal-note{background:#edf8fd;border-left:3px solid var(--blue);padding:12px;margin-bottom:14px;color:#26799f}.impact-title{font-weight:bold;margin-bottom:8px}.impact-list{list-style:none;padding:0;border:1px solid var(--line)}.impact-list li{display:flex;justify-content:space-between;padding:10px;border-bottom:1px solid #eee}.impact-list span{color:#008ed2}.download-list{display:flex;flex-direction:column}.download-list label{padding:11px;border-bottom:1px solid #eee;display:flex;gap:8px}.download-list>div{margin-top:15px;background:#f4f6f7;padding:12px;display:flex;justify-content:space-between}.history-list>div{display:flex;align-items:center;gap:10px;border-bottom:1px solid #eee;padding:11px}.history-list i{font-style:normal;width:34px;height:34px;border-radius:50%;background:#e4f4fb;color:#008ed2;display:grid;place-items:center}.history-list span{display:flex;flex:1;flex-direction:column;gap:4px}.history-list small{color:#888}.history-list button{border:0;background:transparent;color:#008ed2}.login-page{min-height:100vh;background:linear-gradient(145deg,#eef5f8,#fff 55%,#e5f4fb);border-top:4px solid var(--blue2);display:flex;align-items:center;justify-content:center}.login-top{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:10px}.login-top b{font-size:18px}.login-top span{border-left:1px solid #ccc;padding-left:10px;color:#777}.login-card{width:420px;background:white;border:1px solid #d6dce0;box-shadow:0 12px 35px #1e526618;padding:42px;text-align:center}.login-logo{font-size:48px}.login-card h1{font-size:23px}.login-card p{color:#777;line-height:1.6}.sso-button{width:100%;height:48px;margin:22px 0 12px;border:1px solid #ccd3d7;background:#fff;display:flex;align-items:center;gap:12px;padding:0 13px}.sso-button b{flex:1;text-align:left}.sso-button i{font-style:normal;font-size:18px;color:#008ed2}.login-card>small{color:#999}.login-page>footer{position:absolute;bottom:18px;color:#999;font-size:10px} +.model-popover{position:absolute;left:0;right:0;bottom:calc(100% + 6px);z-index:61;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);box-shadow:0 8px 22px color-mix(in srgb,var(--ant-color-text-base) 13%,transparent);padding:8px;display:flex;flex-direction:column;gap:4px} +.model-popover-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px} +.model-popover-head>span{font-weight:600;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)} +.model-popover-head>small{color:var(--ant-color-text-disabled);font-size:var(--ant-font-size-sm)} +.model-row{display:flex;align-items:center;gap:8px;padding:4px 8px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);font-size:var(--ant-font-size-sm);cursor:pointer} +.model-row input[type=radio]{margin:0;accent-color:var(--ant-color-primary)} +.model-row .model-name{font-weight:600;color:var(--ant-color-text-base);flex:1} +.model-row .model-tag{color:var(--ant-color-success);font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-success-bg);padding:4px 4px;border-radius:var(--ant-border-radius);white-space:nowrap} +.model-row .model-rate{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);min-width:34px;text-align:right} +.model-row.disabled{opacity:.45;cursor:not-allowed;background:var(--ant-color-bg-layout)} +.model-row.disabled .model-tag{color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout);border-color:var(--ant-color-border)} +.model-row:not(.disabled):hover{border-color:var(--ant-color-primary-bg);background:var(--ant-color-bg-layout)}.workspace{min-height:calc(100vh - 56px);padding-bottom:64px}.crumb{height:34px;padding:12px 20px 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.crumb b{color:var(--ant-color-primary)}.page-heading{min-height:60px;padding:4px 20px 12px;display:flex;align-items:center;justify-content:space-between}.page-heading h1{font-size:var(--ant-font-size-heading-4);margin:0 0 4px}.page-heading p{margin:0;color:var(--ant-color-text-secondary)}.button{border:1px solid var(--ant-color-primary-active);background:var(--ant-color-primary-active);color:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);min-width:92px;height:31px;padding:0 16px;margin-left:8px}.button:hover{background:var(--ant-color-primary-hover)}.button.secondary{background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);border-color:var(--ant-color-border)}.button.secondary:hover{border-color:var(--ant-color-primary);color:var(--ant-color-primary)}.button:disabled{opacity:.55;cursor:not-allowed}.steps{height:70px;background:var(--ant-color-bg-container);border-top:1px solid var(--ant-color-border);border-bottom:1px solid var(--ant-color-border);display:grid;grid-template-columns:repeat(4,1fr);padding:0 24px}.steps button{border:0;background:transparent;display:flex;align-items:center;position:relative;text-align:left;color:var(--ant-color-text-secondary);padding:0 20px}.steps button>i{font-style:normal;width:29px;height:29px;border-radius:50%;border:1px solid var(--ant-color-border);display:grid;place-items:center;margin-right:12px;background:var(--ant-color-bg-container)}.steps button span{display:flex;flex-direction:column;gap:4px}.steps button small{font-size:var(--ant-font-size-sm)}.steps button>b{position:absolute;right:0;font-size:var(--ant-font-size-heading-3);color:var(--ant-color-text-disabled)}.steps button.active{color:var(--ant-color-text-base)}.steps button.active>i{background:var(--ant-color-primary);border-color:var(--ant-color-primary);color:var(--ant-color-text-light-solid)}.steps button.done>i{background:var(--ant-color-success);border-color:var(--ant-color-success);color:var(--ant-color-bg-container)}.steps button.locked{cursor:default}.content{padding:16px 20px}.panel{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);margin-bottom:16px}.panel-head{min-height:43px;border-bottom:1px solid var(--ant-color-border);padding:8px 12px;display:flex;justify-content:space-between;align-items:center}.panel-head>strong{font-size:var(--ant-font-size)}.panel-head .button{height:28px}.panel-body{padding:12px}.summary-strip{display:grid;grid-template-columns:repeat(5,1fr);height:64px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);margin-bottom:16px}.summary-strip div{display:flex;align-items:center;justify-content:center;gap:8px;border-right:1px solid var(--ant-color-border)}.summary-strip div:last-child{border:0}.summary-strip b{font-size:var(--ant-font-size-heading-3)}.summary-strip span{color:var(--ant-color-text-secondary)}.filterbar{height:45px;display:flex;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--ant-color-border)}.filterbar>label{width:205px;height:30px;border:1px solid var(--ant-color-border);display:flex;align-items:center;padding:0 8px;color:var(--ant-color-text-secondary)}.filterbar input{border:0;outline:0;width:100%;padding-left:8px}.filterbar select,.preview-toolbar select{height:30px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 24px 0 8px}.filterbar>span{flex:1}.view-switch{display:flex}.view-switch button,.icon-button{width:31px;height:29px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.view-switch button.active{background:var(--ant-color-primary);color:var(--ant-color-bg-container);border-color:var(--ant-color-primary)}.icon-button{border:0;font-size:var(--ant-font-size)}.data-table{width:100%;border-collapse:collapse}.data-table th{height:35px;background:var(--ant-color-bg-layout);color:var(--ant-color-text-secondary);text-align:left;font-size:var(--ant-font-size-sm);font-weight:600;border-bottom:1px solid var(--ant-color-border);padding:0 12px}.data-table td{height:48px;border-bottom:1px solid var(--ant-color-border);padding:8px 12px;font-size:var(--ant-font-size-sm)}.data-table tr:hover td{background:var(--ant-color-bg-layout)}.link{border:0;background:transparent;color:var(--ant-color-primary);padding:0}.site-icon{display:inline-grid;place-items:center;width:30px;height:30px;margin-right:8px;color:var(--ant-color-primary);border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);font-size:var(--ant-font-size);vertical-align:middle}.site-icon.big{width:40px;height:40px;font-size:var(--ant-font-size-heading-3)}.status{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ant-border-radius);padding:4px 8px;font-size:var(--ant-font-size-sm);line-height:1.2;border:1px solid}.status.ok{color:var(--ant-color-success);background:var(--ant-color-bg-layout);border-color:var(--ant-color-success)}.status.warn{color:var(--ant-color-error);background:var(--ant-color-primary-bg);border-color:var(--ant-color-error-bg)}.status.bad{color:var(--ant-color-error);background:var(--ant-color-bg-layout);border-color:var(--ant-color-error)}.status.muted{color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout);border-color:var(--ant-color-border)}.dots,.trash{border:0;background:transparent;color:var(--ant-color-text-secondary)}.pagination{height:46px;display:flex;justify-content:flex-end;align-items:center;gap:8px;padding-top:12px}.pagination span{margin-right:12px;color:var(--ant-color-text-secondary)}.pagination button{width:28px;height:28px;border:0;background:var(--ant-color-bg-container)}.pagination button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.pagination select{border:0;background:var(--ant-color-bg-container)}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:12px 0}.project-grid article{border:1px solid var(--ant-color-border);padding:16px;cursor:pointer}.project-grid article:hover{border-color:var(--ant-color-primary);box-shadow:none}.project-grid article>div{display:flex;justify-content:space-between}.project-grid h3{margin:12px 0 4px}.project-grid p,.project-grid small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.project-grid section{display:flex;gap:20px;border-top:1px solid var(--ant-color-border);border-bottom:1px solid var(--ant-color-border);padding:12px 0;margin:12px 0}.project-grid section span{display:flex;flex-direction:column}.project-grid section b{font-size:var(--ant-font-size)}.two-column{display:grid;grid-template-columns:1fr 340px;gap:16px}.two-column.equal{grid-template-columns:1fr 1fr}.basic-layout>.panel>.panel-body{padding:16px}.stack{display:flex;flex-direction:column}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.form-grid>label{display:flex;flex-direction:column;gap:8px;font-size:var(--ant-font-size-sm);font-weight:600}.form-grid>label>input,.form-grid>label>select,.form-grid>label>textarea{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);padding:8px;outline:none;font-weight:400}.form-grid>label>input:focus,.form-grid>label>select:focus,.form-grid>label>textarea:focus{border-color:var(--ant-color-primary)}.form-grid>label>input,.form-grid>label>select{height:34px}.form-grid>label>textarea{min-height:80px;resize:vertical;line-height:1.6}.field{display:flex;flex-direction:column;gap:8px}.field>span{font-size:var(--ant-font-size-sm);font-weight:600}.field>span i{color:red;font-style:normal;margin-right:4px}.field input,.field select,.field textarea{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);padding:8px;outline:none}.field input,.field select{height:34px}.field textarea{min-height:130px;resize:vertical;line-height:1.6}.field textarea.small{min-height:80px}.field small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.form-grid .field:nth-child(n+3){grid-column:1/-1}.upload{height:90px;border:1px dashed var(--ant-color-border);background:var(--ant-color-bg-layout);display:flex;flex-direction:column;justify-content:center;align-items:center;color:var(--ant-color-text-secondary);gap:4px}.upload b{color:var(--ant-color-primary);font-size:var(--ant-font-size-heading-4)}.ai-box{text-align:center;padding:12px}.ai-box>span{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));color:var(--ant-color-text-light-solid);display:grid;place-items:center;margin:auto;font-weight:600}.ai-box h3{font-size:var(--ant-font-size);margin:12px}.ai-box p{color:var(--ant-color-text-secondary);line-height:1.7;text-align:left}.meter{height:7px;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);overflow:hidden}.meter i{display:block;height:100%;background:linear-gradient(90deg,var(--ant-color-primary),var(--ant-color-success));transition:width .35s}.tips{padding-left:24px;line-height:2;color:var(--ant-color-text-secondary)}.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.kpi-row>div{height:75px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:12px 16px;position:relative}.kpi-row span{display:block;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm);margin-bottom:8px}.kpi-row b{font-size:var(--ant-font-size-heading-3)}.kpi-row small{margin-left:4px;color:var(--ant-color-text-secondary)}.kpi-row .status{margin-top:8px}.editable td{padding:8px}.editable input,.editable select{height:29px;border:1px solid var(--ant-color-border);width:100%;padding:0 8px;background:var(--ant-color-bg-container)}.editable .number{width:65px}.tree{line-height:2.2}.tree .l1{padding-left:24px}.tree .l2{padding-left:52px;color:var(--ant-color-text-secondary)}.tree span{border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);padding:4px 8px;font-size:var(--ant-font-size-sm)}.file-card{display:flex;align-items:center;gap:12px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);padding:12px}.file-card .excel{width:36px;height:42px;background:var(--ant-color-success);color:var(--ant-color-bg-container);display:grid;place-items:center;font-weight:600}.file-card>div{flex:1}.file-card p{margin:4px 0 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.checks{display:flex;gap:20px;color:var(--ant-color-success);padding:12px 4px 0;font-size:var(--ant-font-size-sm)}.tabs{height:46px;border-bottom:1px solid var(--ant-color-border);display:flex;gap:8px;margin:-12px -12px 0;padding-left:12px}.tabs button{padding:0 20px;border:0;border-bottom:2px solid transparent;background:var(--ant-color-bg-container)}.tabs button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary)}.tabs i{font-style:normal;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);padding:4px 8px;margin-left:4px}.section-toolbar{display:flex;justify-content:space-between;align-items:center;padding:16px 4px}.section-toolbar p{margin:4px 0 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.mu-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.mu-grid article{border:1px solid var(--ant-color-border);display:grid;grid-template-columns:42% 58%;min-height:128px;cursor:pointer}.mu-grid article.selected{border:2px solid var(--ant-color-primary);background:var(--ant-color-bg-layout)}.mu-thumb{margin:8px;background:var(--ant-color-bg-layout);display:grid;place-items:center;position:relative;overflow:hidden}.mu-thumb:after{content:"";width:72%;height:40%;border:1px solid var(--ant-color-primary-bg);background:var(--ant-color-bg-container);box-shadow:none}.mu-thumb b{position:absolute;z-index:2;color:var(--ant-color-primary);font-size:var(--ant-font-size-heading-3)}.mu-grid article>div:last-child{padding:12px 12px 8px 0}.mu-grid header{display:flex;gap:8px;align-items:center}.mu-grid h3{font-size:var(--ant-font-size-sm);margin:0}.mu-grid p{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.5;min-height:32px}.mu-grid button{border:0;background:transparent;color:var(--ant-color-primary);padding:0}.blue{color:var(--ant-color-primary)}.type-tag{background:var(--ant-color-bg-layout);padding:4px 8px;border-radius:var(--ant-border-radius)}.wide-cell{min-width:300px}.menu-builder{display:grid;grid-template-columns:230px 1fr 240px;gap:16px;background:var(--ant-color-bg-layout);padding:16px}.page-pool,.menu-tree,.menu-preview{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:12px}.page-pool p{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.page-pool div{border:1px solid var(--ant-color-border);padding:12px;margin-top:8px;background:var(--ant-color-bg-layout)}.menu-tree section{border:1px solid var(--ant-color-border);margin-bottom:8px;padding:12px}.menu-tree section>span{float:right}.menu-tree section>div{margin:8px 0 0 16px;padding:8px;border-top:1px solid var(--ant-color-border)}.menu-tree i{font-style:normal;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-layout);color:var(--ant-color-primary);padding:4px;margin-right:8px}.menu-tree i.cube{background:var(--ant-color-bg-layout);color:var(--ant-color-primary)}.menu-tree>button{border:1px dashed var(--ant-color-border);background:var(--ant-color-bg-layout);width:100%;height:34px}.menu-preview aside{background:var(--ant-color-bg-layout);min-height:250px;display:flex;flex-direction:column;padding-top:12px}.menu-preview strong{padding:12px}.menu-preview button{border:0;background:transparent;text-align:left;padding:12px}.menu-preview button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.generate-layout{display:grid;grid-template-columns:1.1fr .9fr;gap:16px}.confirm-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.confirm-grid div{border:1px solid var(--ant-color-border);padding:12px;display:flex;flex-direction:column;gap:4px;position:relative}.confirm-grid span,.confirm-grid small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.confirm-grid button{position:absolute;right:10px;top:10px;border:0;background:transparent;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.option-list{display:grid;grid-template-columns:1fr 1fr;gap:12px}.option-list label{display:flex;align-items:center;gap:8px}.task-panel{height:100%}.overall{background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-primary);padding:12px}.overall>div:first-child{display:flex;justify-content:space-between;margin-bottom:8px}.overall p{margin:8px 0 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.task-list{padding:12px 0}.task-list>div{display:flex;align-items:center;border-bottom:1px solid var(--ant-color-border);padding:8px 4px}.task-list>div>i{font-style:normal;width:25px;height:25px;border-radius:50%;border:1px solid var(--ant-color-border);display:grid;place-items:center;margin-right:8px}.task-list>div>i.done{background:var(--ant-color-success);border-color:var(--ant-color-success);color:var(--ant-color-bg-container)}.task-list>div>i.spin{color:var(--ant-color-primary)}.task-list>div>span{display:flex;flex:1;flex-direction:column;gap:4px}.task-list small{color:var(--ant-color-text-secondary)}.task-panel>.panel-body>.button{width:100%;margin:4px 0}.result-header{display:flex;align-items:center;justify-content:space-between;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:12px;margin-bottom:16px}.result-header>div{display:flex;align-items:center;gap:12px}.result-header h2{margin:0 0 4px}.result-header p{margin:0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.result-layout{display:grid;grid-template-columns:1fr 280px;gap:16px}.result-pages{display:grid;grid-template-columns:1fr;gap:12px}.result-pages article{border:1px solid var(--ant-color-border)}.result-pages article>div:last-child{padding:12px}.result-pages article header{display:flex;justify-content:space-between}.result-pages h3{font-size:var(--ant-font-size-sm);margin:12px 0 4px}.result-pages p,.result-pages small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.result-pages footer{display:flex;margin-top:8px}.result-pages footer .button{margin:0 4px 0 0;min-width:68px;height:27px}.dashboard-thumb{height:115px;background:var(--ant-color-bg-layout);position:relative;padding:12px 12px 12px 36px}.dashboard-thumb>i{position:absolute;left:0;top:0;bottom:0;width:25px;background:var(--ant-color-fill-secondary)}.dashboard-thumb>header{display:block;height:10px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border)}.dashboard-thumb>section{display:flex;gap:4px;margin-top:4px}.dashboard-thumb>section b{height:22px;flex:1;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-primary)}.dashboard-thumb>footer{position:absolute;left:35px;right:46px;bottom:10px;height:50px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);display:flex;align-items:flex-end;gap:4px;padding:8px}.dashboard-thumb>footer em{flex:1;background:var(--ant-color-primary);height:45%}.dashboard-thumb>footer em:nth-child(2){height:75%}.dashboard-thumb>footer em:nth-child(4){height:92%}.dashboard-thumb>span{position:absolute;right:9px;bottom:10px;width:31px;height:50px;background:conic-gradient(var(--ant-color-success) 0 72%,var(--ant-color-fill-secondary) 72%)}.dashboard-thumb-live{position:relative;min-height:115px;background:var(--ant-color-bg-layout);border-bottom:1px solid var(--ant-color-border);overflow:hidden}.dashboard-thumb-live>div{position:relative}.thumb-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}result-menu div{display:flex;justify-content:space-between;border-bottom:1px solid var(--ant-color-border);padding:12px 4px}.result-menu span{background:var(--ant-color-bg-layout);border-radius:var(--ant-border-radius);padding:4px 8px}.text-button{border:0;background:transparent;color:var(--ant-color-primary);margin-top:12px}.score{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px}.score b{width:55px;height:55px;border-radius:50%;border:5px solid var(--ant-color-success);display:grid;place-items:center;font-size:var(--ant-font-size)}.score span{color:var(--ant-color-success)}.validation{padding-left:12px;list-style:none;line-height:2;color:var(--ant-color-success)}.preview-shell{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);margin:-4px}.preview-toolbar{height:45px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid var(--ant-color-border)}.preview-toolbar>div{display:flex;align-items:center;gap:8px}.preview-toolbar button{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);height:29px;padding:0 12px}.preview-main{display:grid;grid-template-columns:1fr 300px;height:655px}.cube-canvas{position:relative;background:var(--ant-color-bg-layout);border-right:1px solid var(--ant-color-border);overflow:hidden}.cube-top{position:absolute;left:0;right:0;top:0;height:32px;background:var(--ant-color-bg-container);border-top:3px solid var(--ant-color-primary-active);border-bottom:1px solid var(--ant-color-border);display:flex;align-items:center;padding:0 12px;gap:16px}.cube-top b{color:var(--ant-color-primary)}.cube-top i{margin-left:auto;font-style:normal;color:var(--ant-color-text-secondary)}.cube-side{position:absolute;left:0;top:32px;bottom:0;width:130px;background:var(--ant-color-bg-layout);display:flex;flex-direction:column}.cube-side strong{padding:16px 12px}.cube-side button{height:37px;border:0;background:transparent;text-align:left;padding-left:12px}.cube-side button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.cube-content{position:absolute;left:130px;top:32px;right:0;bottom:0;padding:12px}.cube-content>header{display:flex;justify-content:space-between;align-items:center}.cube-content>header h2{font-size:var(--ant-font-size);margin:4px 0 8px}.cube-content>header span,.cube-content>header small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.cube-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.cube-kpis>div{height:78px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:8px;position:relative;display:flex;flex-direction:column}.cube-kpis span{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary)}.cube-kpis b{font-size:var(--ant-font-size-heading-4);margin:4px 0}.cube-kpis small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.spark{position:absolute;right:9px;bottom:14px;width:42px;height:18px;border-top:3px solid var(--ant-color-primary);transform:skewY(-12deg);border-radius:50%}.spark.s1{transform:skewY(8deg)}.spark.s2{border-color:var(--ant-color-error)}.cube-grid{display:grid;grid-template-columns:1.7fr .8fr;gap:8px;margin-top:8px}.cube-grid>section{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:12px}.cube-grid h3{font-size:var(--ant-font-size-sm);margin:0 0 8px}.cube-grid h3 span,.cube-grid h3 button{float:right;border:0;background:transparent;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.line-chart{height:175px;position:relative}.line-chart>div{position:absolute;inset:0 0 20px;background:repeating-linear-gradient(to bottom,var(--ant-color-bg-container) 0,var(--ant-color-bg-container) 29px,var(--ant-color-fill-secondary) 30px)}.line-chart svg{position:absolute;left:0;right:0;top:0;height:145px;width:100%}.line-chart footer{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:space-between;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.donut{width:115px;height:115px;border-radius:50%;background:conic-gradient(var(--ant-color-success) 0 80%,var(--ant-color-error-bg) 80% 92%,var(--ant-color-text-disabled) 92%);margin:12px auto;display:grid;place-items:center}.donut:before{content:"";position:absolute;width:72px;height:72px;background:var(--ant-color-bg-container);border-radius:50%}.donut b{z-index:1;font-size:var(--ant-font-size-heading-4);display:flex;flex-direction:column;align-items:center}.donut small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.donut-panel footer{display:flex;justify-content:space-around;font-size:var(--ant-font-size-sm)}.donut-panel footer i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px}.green{background:var(--ant-color-success)}.orange{background:var(--ant-color-error-bg)}.gray{background:var(--ant-color-text-disabled)}.alarm-panel{grid-column:1/-1}.alarm-panel table{border-collapse:collapse;width:100%;font-size:var(--ant-font-size-sm)}.alarm-panel td{border-top:1px solid var(--ant-color-border);padding:8px}.inspector{background:var(--ant-color-bg-container);overflow:auto}.inspector>nav{height:42px;display:flex;border-bottom:1px solid var(--ant-color-border)}.inspector>nav button{flex:1;border:0;border-bottom:2px solid transparent;background:var(--ant-color-bg-container);font-size:var(--ant-font-size-sm)}.inspector>nav button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary)}.inspector-body{padding:16px}.inspector-body h3{font-size:var(--ant-font-size)}.inspector-body p{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.7}.inspector-body dl{display:grid;grid-template-columns:85px 1fr;border-top:1px solid var(--ant-color-border);margin:16px 0}.inspector-body dt,.inspector-body dd{margin:0;padding:8px 0;border-bottom:1px solid var(--ant-color-border);font-size:var(--ant-font-size-sm)}.inspector-body dt{color:var(--ant-color-text-secondary)}.component{padding:8px;border:1px solid var(--ant-color-border);margin-top:8px}.component span{float:right}.code-body header{text-align:right}.code-body header button{border:0;background:transparent;color:var(--ant-color-primary)}.code-body pre{font-size:var(--ant-font-size-sm);line-height:1.55;background:var(--ant-color-text-base);color:var(--ant-color-primary-bg);padding:12px;min-height:410px;overflow:auto}.inspector-body textarea{width:100%;height:120px;border:1px solid var(--ant-color-border);padding:8px;resize:none}.suggestion{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);border-radius:var(--ant-border-radius);padding:4px 8px;margin:0 4px 8px 0;font-size:var(--ant-font-size-sm)}.inspector-body>.button{width:100%;margin:12px 0}.sticky-actions{position:fixed;z-index:20;left:232px;right:0;bottom:0;height:54px;background:var(--ant-color-bg-container);border-top:1px solid var(--ant-color-border);display:flex;align-items:center;justify-content:space-between;padding:0 20px;box-shadow:none}.toast{position:fixed;z-index:100;right:24px;top:56px;background:var(--ant-color-text-base);color:var(--ant-color-bg-container);padding:12px 20px;box-shadow:none}.toast b{color:var(--ant-color-success);margin-right:8px}.modal-backdrop{position:fixed;z-index:90;inset:0;background:color-mix(in srgb,var(--ant-color-bg-mask) 47%,transparent);display:grid;place-items:center}.modal{width:610px;max-height:78vh;background:var(--ant-color-bg-container);box-shadow:0 10px 30px color-mix(in srgb,var(--ant-color-text-base) 27%,transparent);display:flex;flex-direction:column}.modal>header{height:47px;border-bottom:1px solid var(--ant-color-border);display:flex;align-items:center;justify-content:space-between;padding:0 16px}.modal h2{font-size:var(--ant-font-size)}.modal>header button{border:0;background:transparent;font-size:var(--ant-font-size-heading-3);color:var(--ant-color-text-secondary)}.modal-body{padding:16px;overflow:auto;flex:1 1 auto;min-height:0}.modal>footer{border-top:1px solid var(--ant-color-border);padding:12px 16px;text-align:right}.modal-note{background:var(--ant-color-bg-layout);border-left:3px solid var(--ant-color-primary);padding:12px;margin-bottom:16px;color:var(--ant-color-primary)}.impact-title{font-weight:600;margin-bottom:8px}.impact-list{list-style:none;padding:0;border:1px solid var(--ant-color-border)}.impact-list li{display:flex;justify-content:space-between;padding:12px;border-bottom:1px solid var(--ant-color-border)}.impact-list span{color:var(--ant-color-primary)}.download-list{display:flex;flex-direction:column}.download-list label{padding:12px;border-bottom:1px solid var(--ant-color-border);display:flex;gap:8px}.download-list>div{margin-top:16px;background:var(--ant-color-bg-layout);padding:12px;display:flex;justify-content:space-between}.history-list>div{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--ant-color-border);padding:12px}.history-list i{font-style:normal;width:34px;height:34px;border-radius:50%;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center}.history-list span{display:flex;flex:1;flex-direction:column;gap:4px}.history-list small{color:var(--ant-color-text-secondary)}.history-list button{border:0;background:transparent;color:var(--ant-color-primary)}.login-page{min-height:100vh;background:linear-gradient(145deg,var(--ant-color-bg-layout),var(--ant-color-bg-container) 55%,var(--ant-color-bg-layout));border-top:4px solid var(--ant-color-primary-active);display:flex;align-items:center;justify-content:center}.login-top{position:absolute;left:18px;top:14px;display:flex;align-items:center;gap:12px}.login-top b{font-size:var(--ant-font-size)}.login-top span{border-left:1px solid var(--ant-color-border);padding-left:12px;color:var(--ant-color-text-secondary)}.login-card{width:420px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);box-shadow:none;padding:44px;text-align:center}.login-logo{font-size:var(--ant-font-size-heading-2)}.login-card h1{font-size:var(--ant-font-size-heading-3)}.login-card p{color:var(--ant-color-text-secondary);line-height:1.6}.sso-button{width:100%;height:48px;margin:24px 0 12px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;align-items:center;gap:12px;padding:0 12px}.sso-button b{flex:1;text-align:left}.sso-button i{font-style:normal;font-size:var(--ant-font-size);color:var(--ant-color-primary)}.login-card>small{color:var(--ant-color-text-secondary)}.login-page>footer{position:absolute;bottom:18px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} .avatar-button{border:0;padding:0} -.design-link{margin-left:auto;color:var(--blue);font-size:12px;text-decoration:none;padding:0 10px;border-right:1px solid #d4d7da} -.design-link:hover{text-decoration:underline}.avatar-button:hover{outline:1px solid var(--blue)} +.design-link{margin-left:auto;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm);text-decoration:none;padding:0 12px;border-right:1px solid var(--ant-color-border)} +.design-link:hover{text-decoration:underline}.avatar-button:hover{outline:1px solid var(--ant-color-primary)} .steps{grid-template-columns:repeat(5,1fr)} .domain-steps{grid-template-columns:repeat(7,1fr)} -.module-switch{padding:10px 9px 6px;border-bottom:1px solid var(--line);display:grid;gap:6px}.module-switch>button{height:47px;border:1px solid #d8dde1;background:#fff;display:flex;align-items:center;text-align:left;padding:0 9px;gap:9px;font-size:14px}.module-switch>button>b{width:23px;height:23px;display:grid;place-items:center;background:#eff3f5;color:#6f7d85}.module-switch>button>span{display:flex;flex-direction:column;font-weight:bold;gap:2px}.module-switch>button small{font-weight:normal;font-size:9px;color:#8d959a}.module-switch>button.active{border-color:transparent;background:rgba(0,140,214,.1);color:#008cd6}.module-switch>button:hover{background:rgba(0,0,0,.04)}.module-switch>button.active>b{background:#008cd6;color:white}.side-nav>.side-title{display:none} -.domain-hero{min-height:160px;background:linear-gradient(120deg,#075d8b,#009bdc 58%,#55c8df);color:white;margin-bottom:14px;padding:26px 30px;display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden}.domain-hero:after{content:"◆";position:absolute;right:34%;top:-55px;font-size:230px;color:#ffffff0b;transform:rotate(16deg)}.domain-hero>div:first-child{max-width:640px;z-index:1}.domain-hero .eyebrow{font-size:9px;letter-spacing:2px;opacity:.8}.domain-hero h2{font-size:24px;margin:9px 0}.domain-hero p{margin:0;line-height:1.7;opacity:.86}.domain-hero-stats{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#ffffff38;z-index:1}.domain-hero-stats div{width:105px;height:58px;background:#ffffff14;display:flex;flex-direction:column;align-items:center;justify-content:center}.domain-hero-stats b{font-size:20px}.domain-hero-stats span{font-size:9px;opacity:.8}.domain-filter label{width:300px}.domain-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:14px 0 4px}.domain-grid article{border:1px solid var(--line);border-top:3px solid #83949c;padding:15px;min-height:230px;background:white}.domain-grid article.water{border-top-color:#009fe3}.domain-grid article.gas{border-top-color:#e58c35}.domain-grid article.energy{border-top-color:#e7b61d}.domain-grid article.dc{border-top-color:#6b70bf}.domain-grid article>header{display:flex;justify-content:space-between;align-items:center}.domain-grid article>header>span{font-size:28px;color:#168ebf}.domain-grid article>header>div{display:flex;align-items:center;gap:7px}.domain-grid h3{font-size:16px;margin:13px 0 6px}.domain-grid p{color:#70787d;font-size:10px;line-height:1.65;min-height:34px}.domain-metrics{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid #edf0f2;border-bottom:1px solid #edf0f2;padding:8px 0;gap:7px}.domain-metrics span{font-size:9px;color:#888}.domain-metrics b{font-size:13px;color:#333;margin-right:3px}.domain-grid footer{display:flex;justify-content:space-between;margin-top:12px}.domain-grid footer button{border:0;background:transparent;color:#008ed2;font-size:10px}.domain-grid footer button:last-child{border:1px solid #a9d8ed;padding:5px 9px}.solution-parts{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.solution-parts>div{border:1px solid #dfe3e6;background:#fafbfb;padding:12px;display:flex;gap:9px;min-height:80px}.solution-parts i{font-style:normal;font-size:20px;color:#008ed2}.solution-parts span{display:flex;flex-direction:column;gap:6px}.solution-parts small{font-size:9px;line-height:1.5;color:#777} -.solution-banner{min-height:126px;border:1px solid var(--line);background:linear-gradient(100deg,#eef9fd,#fff);display:flex;align-items:center;padding:20px;margin-bottom:12px}.solution-logo{width:72px;height:72px;background:#009fe3;color:white;border-radius:4px;display:grid;place-items:center;font-size:40px;margin-right:18px}.solution-banner>div:nth-child(2){flex:1}.solution-banner h2{margin:5px 0;font-size:21px}.solution-banner p{margin:0 0 8px;color:#666}.solution-banner small{margin-left:10px;color:#888}.solution-banner aside{display:flex}.solution-summary{display:grid;grid-template-columns:repeat(6,1fr);background:#fff;border:1px solid var(--line);margin-bottom:12px}.solution-summary>div{height:65px;border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center}.solution-summary b{font-size:21px}.solution-summary span{font-size:9px;color:#888;margin-top:5px}.detail-grid{display:grid;grid-template-columns:1fr 310px;gap:12px}.asset-template{display:grid;grid-template-columns:1fr 1.3fr;gap:15px}.asset-tree{background:#f5f8f9;padding:12px;display:flex;flex-direction:column;gap:10px}.asset-tree span{padding-left:15px}.asset-tree em{font-style:normal;color:#788187;font-size:10px}.template-specs{display:grid;gap:8px}.template-specs>div{border:1px solid #e0e4e6;padding:9px}.template-specs p{margin:4px 0 0;color:#777;font-size:10px;line-height:1.45}.domain-page-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}.domain-page-list article{display:grid;grid-template-columns:115px 1fr;border:1px solid var(--line);min-height:145px}.domain-page-thumb{margin:8px;background:#e9eef1;position:relative;padding:28px 7px 7px;display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.domain-page-thumb span{position:absolute;left:7px;top:6px;color:#008ed2}.domain-page-thumb i{background:#75c9e9;height:40px}.domain-page-thumb i:nth-child(2){height:62px}.domain-page-thumb i:nth-child(3){height:50px}.domain-page-list section{padding:10px 9px 8px 0}.domain-page-list section>div{display:flex;justify-content:space-between}.domain-page-list h3{font-size:12px;margin:7px 0 3px}.domain-page-list section>b{font-size:9px;color:#008ed2}.domain-page-list p{font-size:9px;color:#777;line-height:1.5}.domain-page-list footer button{border:0;background:transparent;color:#008ed2;padding:0;margin-right:12px;font-size:9px}.flow-list{display:grid;gap:8px}.flow-list>div{display:flex;align-items:center;border:1px solid #e0e4e6;padding:9px}.flow-list i{font-style:normal;width:29px;height:29px;background:#e8f5fb;color:#008ed2;display:grid;place-items:center;margin-right:9px}.flow-list span{display:flex;flex:1;flex-direction:column;gap:3px}.flow-list small{font-size:9px;color:#888}.flow-list em{font-style:normal;font-size:9px;color:#008ed2}.flow-list .future-item{border-style:dashed;opacity:.75}.solution-menu{display:flex;flex-direction:column}.solution-menu>b{padding:8px;background:#f2f4f5;margin-top:4px}.solution-menu>span{padding:7px 8px 7px 17px;border-bottom:1px solid #eee}.solution-menu i{font-style:normal;font-size:8px;color:#008ed2;margin-right:7px}.knowledge-list>div{display:flex;align-items:center;border-bottom:1px solid #eee;padding:9px 2px}.knowledge-list>div>i{font-style:normal;width:27px;color:#008ed2}.knowledge-list span{display:flex;flex:1;flex-direction:column;gap:3px}.knowledge-list small{font-size:9px;color:#888}.knowledge-list button{border:0;background:transparent;color:#008ed2} -.ai-config-layout{display:grid;grid-template-columns:1fr 370px;gap:14px}.wordbuddy-card{background:#1e1f21;color:#e9eaec;border-radius:7px;overflow:hidden;box-shadow:0 8px 22px #0002}.wordbuddy-card>header{height:58px;border-bottom:1px solid #3a3c3f;display:flex;justify-content:space-between;align-items:center;padding:0 14px}.wordbuddy-card>header>div{display:flex;gap:9px;align-items:center}.wb-logo{width:31px;height:31px;border-radius:6px;background:linear-gradient(135deg,#6d5ee9,#0aa5e8);display:grid;place-items:center;font-weight:bold}.wordbuddy-card header section{display:flex;flex-direction:column}.wordbuddy-card header small{font-size:9px;color:#9ca1a6;margin-top:3px}.wordbuddy-card header label{display:flex;align-items:center;gap:8px}.model-list{padding:7px}.model-list>button{width:100%;min-height:56px;border:0;border-radius:5px;background:transparent;color:#e7e8ea;display:flex;align-items:center;padding:7px 9px;text-align:left;position:relative}.model-list>button:hover,.model-list>button.selected{background:#2d2f32}.model-list>button>i{font-style:normal;width:25px;color:#c7cbd0;font-weight:bold}.model-list>button>span{display:flex;flex:1;flex-direction:column;gap:2px}.model-list>button>span>b{font-size:13px}.model-list>button small{font-size:8px;color:#16a9ed}.model-list>button em{font-style:normal;font-size:8px;color:#8f959b}.model-list>button>strong{color:#aeb3b8;font-size:10px;margin-right:24px}.model-list>button>u{position:absolute;right:9px;color:#35d19c;text-decoration:none;font-size:15px}.wordbuddy-card>footer{border-top:1px solid #3a3c3f;padding:9px}.wordbuddy-card>footer button{border:0;background:transparent;color:#c7cbd0}.selected-model{display:flex;align-items:center;gap:12px;background:#f0f9fd;border:1px solid #cfeaf6;padding:13px}.selected-model>span{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,#7060eb,#00a5e5);color:white;display:grid;place-items:center}.selected-model section{flex:1}.selected-model h3{margin:2px 0;font-size:18px}.selected-model p{margin:0;font-size:9px;color:#777}.model-facts{display:grid;grid-template-columns:110px 1fr;margin:12px 0 0}.model-facts dt,.model-facts dd{margin:0;padding:7px;border-bottom:1px solid #eee;font-size:10px}.model-facts dt{color:#888}.strategy-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}.strategy-list label{border:1px solid #dce1e4;padding:9px;display:flex;gap:7px}.strategy-list label>span{display:flex;flex-direction:column;gap:3px}.strategy-list small,.setting-row small{font-size:9px;color:#888}.setting-row{display:flex;align-items:center;border-top:1px solid #eee;padding:9px 2px}.setting-row>span{display:flex;flex:1;flex-direction:column;gap:3px}.context-list{display:grid;gap:6px}.context-list>span{display:flex;align-items:center;background:#f7f8f8;padding:7px}.context-list i{font-style:normal;width:25px;color:#008ed2}.context-list b{flex:1;font-size:10px}.context-list em{font-style:normal;color:#14905b;font-size:9px}.token-estimate{display:flex;flex-direction:column;border-top:1px solid #ddd;margin-top:10px;padding-top:10px;gap:4px}.token-estimate span{font-size:9px;color:#888} -@media(max-width:1100px){.app-shell{padding-left:42px}.side-nav{display:none}.workspace{min-width:900px}.sticky-actions{left:42px}.top-actions small{display:none}.result-layout{grid-template-columns:1fr}.preview-main{grid-template-columns:1fr 260px}.mu-grid{grid-template-columns:repeat(2,1fr)}} +.module-switch{padding:12px 8px 8px;border-bottom:1px solid var(--ant-color-border);display:grid;gap:8px}.module-switch>button{height:47px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;align-items:center;text-align:left;padding:0 8px;gap:8px;font-size:var(--ant-font-size)}.module-switch>button>b{width:23px;height:23px;display:grid;place-items:center;background:var(--ant-color-bg-layout);color:var(--ant-color-text-secondary)}.module-switch>button>span{display:flex;flex-direction:column;font-weight:600;gap:4px}.module-switch>button small{font-weight:400;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.module-switch>button.active{border-color:transparent;background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.module-switch>button:hover{background:var(--ant-color-fill-quaternary)}.module-switch>button.active>b{background:var(--ant-color-primary);color:var(--ant-color-bg-container)}.side-nav>.side-title{display:none} +.domain-hero{min-height:160px;background:linear-gradient(120deg,var(--ant-color-primary),var(--ant-color-primary) 58%,var(--ant-color-primary));color:var(--ant-color-bg-container);margin-bottom:16px;padding:28px 32px;display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden}.domain-hero:after{content:"◆";position:absolute;right:34%;top:-55px;font-size:var(--ant-font-size-heading-2);color:color-mix(in srgb,var(--ant-color-text-light-solid) 4%,transparent);transform:rotate(16deg)}.domain-hero>div:first-child{max-width:640px;z-index:1}.domain-hero .eyebrow{font-size:var(--ant-font-size-sm);letter-spacing:2px;opacity:.8}.domain-hero h2{font-size:var(--ant-font-size-heading-3);margin:8px 0}.domain-hero p{margin:0;line-height:1.7;opacity:.86}.domain-hero-stats{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:color-mix(in srgb,var(--ant-color-bg-container) 22%,transparent);z-index:1}.domain-hero-stats div{width:105px;height:58px;background:color-mix(in srgb,var(--ant-color-bg-container) 8%,transparent);display:flex;flex-direction:column;align-items:center;justify-content:center}.domain-hero-stats b{font-size:var(--ant-font-size-heading-4)}.domain-hero-stats span{font-size:var(--ant-font-size-sm);opacity:.8}.domain-filter label{width:300px}.domain-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:16px 0 4px}.domain-grid article{border:1px solid var(--ant-color-border);border-top:3px solid var(--ant-color-border);padding:16px;min-height:230px;background:var(--ant-color-bg-container)}.domain-grid article.water{border-top-color:var(--ant-color-primary)}.domain-grid article.gas{border-top-color:var(--ant-color-error)}.domain-grid article.energy{border-top-color:var(--ant-color-error-bg)}.domain-grid article.dc{border-top-color:var(--ant-color-primary)}.domain-grid article>header{display:flex;justify-content:space-between;align-items:center}.domain-grid article>header>span{font-size:var(--ant-font-size-heading-2);color:var(--ant-color-primary)}.domain-grid article>header>div{display:flex;align-items:center;gap:8px}.domain-grid h3{font-size:var(--ant-font-size);margin:12px 0 8px}.domain-grid p{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.65;min-height:34px}.domain-metrics{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--ant-color-border);border-bottom:1px solid var(--ant-color-border);padding:8px 0;gap:8px}.domain-metrics span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.domain-metrics b{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-base);margin-right:4px}.domain-grid footer{display:flex;justify-content:space-between;margin-top:12px}.domain-grid footer button{border:0;background:transparent;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.domain-grid footer button:last-child{border:1px solid var(--ant-color-primary-bg);padding:4px 8px}.solution-parts{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}.solution-parts>div{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);padding:12px;display:flex;gap:8px;min-height:80px}.solution-parts i{font-style:normal;font-size:var(--ant-font-size-heading-4);color:var(--ant-color-primary)}.solution-parts span{display:flex;flex-direction:column;gap:8px}.solution-parts small{font-size:var(--ant-font-size-sm);line-height:1.5;color:var(--ant-color-text-secondary)} +.solution-banner{min-height:126px;border:1px solid var(--ant-color-border);background:linear-gradient(100deg,var(--ant-color-bg-layout),var(--ant-color-bg-container));display:flex;align-items:center;padding:20px;margin-bottom:12px}.solution-logo{width:72px;height:72px;background:var(--ant-color-primary);color:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);display:grid;place-items:center;font-size:var(--ant-font-size-heading-2);margin-right:20px}.solution-banner>div:nth-child(2){flex:1}.solution-banner h2{margin:4px 0;font-size:var(--ant-font-size-heading-4)}.solution-banner p{margin:0 0 8px;color:var(--ant-color-text-secondary)}.solution-banner small{margin-left:12px;color:var(--ant-color-text-secondary)}.solution-banner aside{display:flex}.solution-summary{display:grid;grid-template-columns:repeat(6,1fr);background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);margin-bottom:12px}.solution-summary>div{height:65px;border-right:1px solid var(--ant-color-border);display:flex;flex-direction:column;align-items:center;justify-content:center}.solution-summary b{font-size:var(--ant-font-size-heading-4)}.solution-summary span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);margin-top:4px}.detail-grid{display:grid;grid-template-columns:1fr 310px;gap:12px}.asset-template{display:grid;grid-template-columns:1fr 1.3fr;gap:16px}.asset-tree{background:var(--ant-color-bg-layout);padding:12px;display:flex;flex-direction:column;gap:12px}.asset-tree span{padding-left:16px}.asset-tree em{font-style:normal;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.template-specs{display:grid;gap:8px}.template-specs>div{border:1px solid var(--ant-color-border);padding:8px}.template-specs p{margin:4px 0 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.45}.domain-page-list{display:grid;grid-template-columns:1fr 1fr;gap:12px}.domain-page-list article{display:grid;grid-template-columns:115px 1fr;border:1px solid var(--ant-color-border);min-height:145px}.domain-page-thumb{margin:8px;background:var(--ant-color-bg-layout);position:relative;padding:28px 8px 8px;display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.domain-page-thumb span{position:absolute;left:7px;top:6px;color:var(--ant-color-primary)}.domain-page-thumb i{background:var(--ant-color-primary);height:40px}.domain-page-thumb i:nth-child(2){height:62px}.domain-page-thumb i:nth-child(3){height:50px}.domain-page-list section{padding:12px 8px 8px 0}.domain-page-list section>div{display:flex;justify-content:space-between}.domain-page-list h3{font-size:var(--ant-font-size-sm);margin:8px 0 4px}.domain-page-list section>b{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary)}.domain-page-list p{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.5}.domain-page-list footer button{border:0;background:transparent;color:var(--ant-color-primary);padding:0;margin-right:12px;font-size:var(--ant-font-size-sm)}.flow-list{display:grid;gap:8px}.flow-list>div{display:flex;align-items:center;border:1px solid var(--ant-color-border);padding:8px}.flow-list i{font-style:normal;width:29px;height:29px;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center;margin-right:8px}.flow-list span{display:flex;flex:1;flex-direction:column;gap:4px}.flow-list small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.flow-list em{font-style:normal;font-size:var(--ant-font-size-sm);color:var(--ant-color-primary)}.flow-list .future-item{border-style:dashed;opacity:.75}.solution-menu{display:flex;flex-direction:column}.solution-menu>b{padding:8px;background:var(--ant-color-bg-layout);margin-top:4px}.solution-menu>span{padding:8px 8px 8px 16px;border-bottom:1px solid var(--ant-color-border)}.solution-menu i{font-style:normal;font-size:var(--ant-font-size-sm);color:var(--ant-color-primary);margin-right:8px}.knowledge-list>div{display:flex;align-items:center;border-bottom:1px solid var(--ant-color-border);padding:8px 4px}.knowledge-list>div>i{font-style:normal;width:27px;color:var(--ant-color-primary)}.knowledge-list span{display:flex;flex:1;flex-direction:column;gap:4px}.knowledge-list small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.knowledge-list button{border:0;background:transparent;color:var(--ant-color-primary)} +.ai-config-layout{display:grid;grid-template-columns:1fr 370px;gap:16px}.wordbuddy-card{background:var(--ant-color-text-base);color:var(--ant-color-fill-secondary);border-radius:var(--ant-border-radius);overflow:hidden;box-shadow:none}.wordbuddy-card>header{height:58px;border-bottom:1px solid var(--ant-color-border);display:flex;justify-content:space-between;align-items:center;padding:0 16px}.wordbuddy-card>header>div{display:flex;gap:8px;align-items:center}.wb-logo{width:31px;height:31px;border-radius:var(--ant-border-radius);background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));display:grid;place-items:center;font-weight:600}.wordbuddy-card header section{display:flex;flex-direction:column}.wordbuddy-card header small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);margin-top:4px}.wordbuddy-card header label{display:flex;align-items:center;gap:8px}.model-list{padding:8px}.model-list>button{width:100%;min-height:56px;border:0;border-radius:var(--ant-border-radius);background:transparent;color:var(--ant-color-fill-secondary);display:flex;align-items:center;padding:8px 8px;text-align:left;position:relative}.model-list>button:hover,.model-list>button.selected{background:var(--ant-color-text-base)}.model-list>button>i{font-style:normal;width:25px;color:var(--ant-color-text-disabled);font-weight:600}.model-list>button>span{display:flex;flex:1;flex-direction:column;gap:4px}.model-list>button>span>b{font-size:var(--ant-font-size-sm)}.model-list>button small{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary)}.model-list>button em{font-style:normal;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.model-list>button>strong{color:var(--ant-color-text-disabled);font-size:var(--ant-font-size-sm);margin-right:24px}.model-list>button>u{position:absolute;right:9px;color:var(--ant-color-success);text-decoration:none;font-size:var(--ant-font-size)}.wordbuddy-card>footer{border-top:1px solid var(--ant-color-border);padding:8px}.wordbuddy-card>footer button{border:0;background:transparent;color:var(--ant-color-text-disabled)}.selected-model{display:flex;align-items:center;gap:12px;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-primary);padding:12px}.selected-model>span{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));color:var(--ant-color-bg-container);display:grid;place-items:center}.selected-model section{flex:1}.selected-model h3{margin:4px 0;font-size:var(--ant-font-size)}.selected-model p{margin:0;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.model-facts{display:grid;grid-template-columns:110px 1fr;margin:12px 0 0}.model-facts dt,.model-facts dd{margin:0;padding:8px;border-bottom:1px solid var(--ant-color-border);font-size:var(--ant-font-size-sm)}.model-facts dt{color:var(--ant-color-text-secondary)}.strategy-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}.strategy-list label{border:1px solid var(--ant-color-border);padding:8px;display:flex;gap:8px}.strategy-list label>span{display:flex;flex-direction:column;gap:4px}.strategy-list small,.setting-row small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.setting-row{display:flex;align-items:center;border-top:1px solid var(--ant-color-border);padding:8px 4px}.setting-row>span{display:flex;flex:1;flex-direction:column;gap:4px}.context-list{display:grid;gap:8px}.context-list>span{display:flex;align-items:center;background:var(--ant-color-bg-layout);padding:8px}.context-list i{font-style:normal;width:25px;color:var(--ant-color-primary)}.context-list b{flex:1;font-size:var(--ant-font-size-sm)}.context-list em{font-style:normal;color:var(--ant-color-success);font-size:var(--ant-font-size-sm)}.token-estimate{display:flex;flex-direction:column;border-top:1px solid var(--ant-color-border);margin-top:12px;padding-top:12px;gap:4px}.token-estimate span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)} +@media(max-width:1100px){.app-shell{padding-left:44px}.side-nav{display:none}.workspace{min-width:900px}.sticky-actions{left:42px}.top-actions small{display:none}.result-layout{grid-template-columns:1fr}.preview-main{grid-template-columns:1fr 260px}.mu-grid{grid-template-columns:repeat(2,1fr)}} /* 右下角浮动 AI 会话 */ -.ai-fab{position:fixed;right:22px;bottom:22px;z-index:80;width:54px;height:54px;border-radius:50%;border:0;background:transparent;box-shadow:0 8px 22px #0a85c355;display:grid;place-items:center;cursor:pointer;touch-action:none;user-select:none}.ai-fab-icon{width:54px;height:54px;border-radius:50%;object-fit:cover;-webkit-user-drag:none;user-drag:none;user-select:none;pointer-events:none} -.design-doc-link{display:block;margin-top:auto;margin-left:10px;margin-right:10px;margin-bottom:10px;padding:5px 8px;font-size:10px;line-height:1.4;font-weight:600;text-align:center;color:#fff;text-decoration:none;border-radius:6px;background:linear-gradient(135deg,#7e57c2 0%,#ab47bc 100%);box-shadow:0 1px 4px #7e57c255;opacity:.95;transition:opacity .15s} -.design-doc-link:hover{opacity:1;color:#fff} +.ai-fab{position:fixed;right:22px;bottom:22px;z-index:80;width:54px;height:54px;border-radius:50%;border:0;background:transparent;box-shadow:0 8px 22px color-mix(in srgb,var(--ant-color-primary) 33%,transparent);display:grid;place-items:center;cursor:pointer;touch-action:none;user-select:none}.ai-fab-icon{width:54px;height:54px;border-radius:50%;object-fit:cover;-webkit-user-drag:none;user-drag:none;user-select:none;pointer-events:none} +.design-doc-link{display:block;margin-top:auto;margin-left:12px;margin-right:12px;margin-bottom:12px;padding:4px 8px;font-size:var(--ant-font-size-sm);line-height:1.4;font-weight:600;text-align:center;color:var(--ant-color-text-light-solid);text-decoration:none;border-radius:var(--ant-border-radius);background:linear-gradient(135deg,var(--ant-color-primary) 0%,var(--ant-color-primary-bg) 100%);box-shadow:none;opacity:.95;transition:opacity .15s} +.design-doc-link:hover{opacity:1;color:var(--ant-color-text-light-solid)} .ai-fab:active{cursor:grabbing} -.ai-fab:hover:not(:active){transform:translateY(-1px);box-shadow:0 12px 26px #0a85c366} -.ai-dialog{position:fixed;right:22px;bottom:88px;z-index:81;width:25vw;min-width:320px;height:70vh;min-height:420px;background:#fff;border:1px solid #d2d6d9;border-radius:10px;box-shadow:0 18px 48px #0003;display:flex;flex-direction:column;overflow:hidden} -.ai-dialog header{display:flex;align-items:center;gap:9px;padding:10px 12px;border-bottom:1px solid #eceef0;background:linear-gradient(135deg,#6d5ee9,#0aa5e8);color:#fff} -.ai-dialog .ai-dialog-logo{width:28px;height:28px;border-radius:7px;background:#ffffff33;display:grid;place-items:center;font-size:15px} +.ai-fab:hover:not(:active){transform:translateY(-1px);box-shadow:0 12px 26px color-mix(in srgb,var(--ant-color-primary-hover) 40%,transparent)} +.ai-dialog{position:fixed;right:22px;bottom:88px;z-index:81;width:25vw;min-width:320px;height:70vh;min-height:420px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);box-shadow:0 18px 48px color-mix(in srgb,var(--ant-color-text-base) 20%,transparent);display:flex;flex-direction:column;overflow:hidden} +.ai-dialog header{display:flex;align-items:center;gap:8px;padding:12px 12px;border-bottom:1px solid var(--ant-color-border);background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));color:var(--ant-color-text-light-solid)} +.ai-dialog .ai-dialog-logo{width:28px;height:28px;border-radius:var(--ant-border-radius);background:color-mix(in srgb,var(--ant-color-bg-container) 20%,transparent);display:grid;place-items:center;font-size:var(--ant-font-size)} .ai-dialog .ai-dialog-title{flex:1;display:flex;flex-direction:column;line-height:1.25} -.ai-dialog .ai-dialog-title b{font-size:13px} -.ai-dialog .ai-dialog-title small{font-size:9px;opacity:.85} -.ai-dialog .ai-close{border:0;background:transparent;color:#fff;font-size:20px;line-height:1;width:28px;height:28px;border-radius:6px} -.ai-dialog .ai-close:hover{background:#ffffff33} -.ai-messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px;background:#f7f8f9} -.ai-welcome{width:100%;margin:auto 0;display:flex;flex-direction:column;gap:10px;color:#323233}.ai-welcome-intro{display:flex;align-items:center;gap:10px;padding-bottom:2px}.ai-welcome-intro>span{width:32px;height:32px;border-radius:4px;background:#e5f4fb;color:#008cd6;display:grid;place-items:center;flex:0 0 auto}.ai-welcome-intro>div{min-width:0}.ai-welcome-intro b{display:block;font-size:14px;line-height:1.4}.ai-welcome-intro p{margin:2px 0 0;color:#777;font-size:12px;line-height:1.5}.ai-capability-list{border:1px solid #dfe3e6;background:#fff}.ai-capability-list>div{min-height:52px;padding:8px 10px;display:flex;align-items:center;gap:10px;border-bottom:1px solid #edf0f2}.ai-capability-list>div:last-child{border-bottom:0}.ai-capability-list i{width:22px;height:22px;border-radius:50%;background:#e5f4fb;color:#008cd6;display:grid;place-items:center;flex:0 0 auto;font-size:12px;font-style:normal;font-weight:600}.ai-capability-list span{display:flex;flex-direction:column;gap:2px;min-width:0}.ai-capability-list b{font-size:13px;line-height:1.35;font-weight:500}.ai-capability-list small{color:#777;font-size:11px;line-height:1.35}.ai-welcome-tip{padding:8px 10px;background:#eef7fb;border-left:3px solid #008cd6;color:#666;font-size:11px;line-height:1.5}.ai-welcome-tip b{color:#323233} +.ai-dialog .ai-dialog-title b{font-size:var(--ant-font-size-sm)} +.ai-dialog .ai-dialog-title small{font-size:var(--ant-font-size-sm);opacity:.85} +.ai-dialog .ai-close{border:0;background:transparent;color:var(--ant-color-text-light-solid);font-size:var(--ant-font-size-heading-4);line-height:1;width:28px;height:28px;border-radius:var(--ant-border-radius)} +.ai-dialog .ai-close:hover{background:color-mix(in srgb,var(--ant-color-bg-container) 20%,transparent)} +.ai-messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px;background:var(--ant-color-bg-layout)} +.ai-welcome{width:100%;margin:auto 0;display:flex;flex-direction:column;gap:12px;color:var(--ant-color-text-base)}.ai-welcome-intro{display:flex;align-items:center;gap:12px;padding-bottom:4px}.ai-welcome-intro>span{width:32px;height:32px;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center;flex:0 0 auto}.ai-welcome-intro>div{min-width:0}.ai-welcome-intro b{display:block;font-size:var(--ant-font-size);line-height:1.4}.ai-welcome-intro p{margin:4px 0 0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.5}.ai-capability-list{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.ai-capability-list>div{min-height:52px;padding:8px 12px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--ant-color-border)}.ai-capability-list>div:last-child{border-bottom:0}.ai-capability-list i{width:22px;height:22px;border-radius:50%;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center;flex:0 0 auto;font-size:var(--ant-font-size-sm);font-style:normal;font-weight:600}.ai-capability-list span{display:flex;flex-direction:column;gap:4px;min-width:0}.ai-capability-list b{font-size:var(--ant-font-size-sm);line-height:1.35;font-weight:600}.ai-capability-list small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.35}.ai-welcome-tip{padding:8px 12px;background:var(--ant-color-bg-layout);border-left:3px solid var(--ant-color-primary);color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.5}.ai-welcome-tip b{color:var(--ant-color-text-base)} .ai-bubble{display:flex;gap:8px;align-items:flex-start;max-width:88%} -.ai-bubble .ai-avatar{width:26px;height:26px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;font-size:11px;background:#e3edf3;color:#168abf} +.ai-bubble .ai-avatar{width:26px;height:26px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;font-size:var(--ant-font-size-sm);background:var(--ant-color-fill-secondary);color:var(--ant-color-primary)} .ai-bubble.me{flex-direction:row-reverse;align-self:flex-end} -.ai-bubble.me .ai-avatar{background:linear-gradient(135deg,#7060eb,#00a5e5);color:#fff} -.ai-bubble .ai-text{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.6;padding:8px 11px;border-radius:9px;background:#fff;border:1px solid #e6e9eb} -.ai-bubble.me .ai-text{background:#009fe3;color:#fff;border-color:#009fe3} -.ai-dialog footer{display:flex;gap:8px;padding:9px;border-top:1px solid #eceef0;background:#fff} -.ai-dialog .ai-input{flex:1;resize:none;height:42px;max-height:120px;border:1px solid #d4d8db;border-radius:7px;padding:9px 10px;font-size:12px;line-height:1.4;outline:none} -.ai-dialog .ai-input:focus{border-color:#8ccce9} -.ai-dialog .ai-send{border:0;background:#009fe3;color:#fff;border-radius:7px;padding:0 16px;font-size:12px;align-self:flex-end;height:42px} +.ai-bubble.me .ai-avatar{background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));color:var(--ant-color-text-light-solid)} +.ai-bubble .ai-text{white-space:pre-wrap;word-break:break-word;font-size:var(--ant-font-size-sm);line-height:1.6;padding:8px 12px;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border)} +.ai-bubble.me .ai-text{background:var(--ant-color-primary);color:var(--ant-color-text-light-solid);border-color:var(--ant-color-primary)} +.ai-dialog footer{display:flex;gap:8px;padding:8px;border-top:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)} +.ai-dialog .ai-input{flex:1;resize:none;height:42px;max-height:120px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px 12px;font-size:var(--ant-font-size-sm);line-height:1.4;outline:none} +.ai-dialog .ai-input:focus{border-color:var(--ant-color-primary-bg)} +.ai-dialog .ai-send{border:0;background:var(--ant-color-primary);color:var(--ant-color-text-light-solid);border-radius:var(--ant-border-radius);padding:0 16px;font-size:var(--ant-font-size-sm);align-self:flex-end;height:42px} .ai-dialog .ai-send:disabled{opacity:.5;cursor:not-allowed} -.ai-dialog .ai-send:not(:disabled):hover{background:#008ac4} +.ai-dialog .ai-send:not(:disabled):hover{background:var(--ant-color-primary-hover)} /* ===== 新建站点向导:基本属性 ===== */ .domain-select{display:flex;align-items:center;gap:8px} -.domain-select input{flex:1;border:1px solid var(--line);border-radius:3px;height:30px;padding:0 9px;background:#fff} -.domain-select input:focus{border-color:var(--blue);outline:none} -.domain-add{display:flex;align-items:center;gap:8px;margin-top:9px} -.domain-add input{flex:1;border:1px solid var(--line);border-radius:3px;height:30px;padding:0 9px;background:#fff} -.domain-add input:focus{border-color:var(--blue);outline:none} -.file-list{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px} -.file-list li{display:flex;align-items:center;gap:6px;background:var(--soft);border:1px solid var(--line);border-radius:4px;padding:6px 9px;font-size:12px} -.file-list a{color:var(--blue);text-decoration:none} +.domain-select input{flex:1;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:30px;padding:0 8px;background:var(--ant-color-bg-container)} +.domain-select input:focus{border-color:var(--ant-color-primary);outline:none} +.domain-add{display:flex;align-items:center;gap:8px;margin-top:8px} +.domain-add input{flex:1;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:30px;padding:0 8px;background:var(--ant-color-bg-container)} +.domain-add input:focus{border-color:var(--ant-color-primary);outline:none} +.file-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px} +.file-list li{display:flex;align-items:center;gap:8px;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px 8px;font-size:var(--ant-font-size-sm)} +.file-list a{color:var(--ant-color-primary);text-decoration:none} .file-list a:hover{text-decoration:underline} -.file-list small{color:var(--muted);margin-left:auto} -.invalid{border-color:var(--red)!important;background:#fff4f2!important} -.hint{color:var(--muted);font-size:11px;margin:0 0 10px;line-height:1.6} +.file-list small{color:var(--ant-color-text-secondary);margin-left:auto} +.invalid{border-color:var(--ant-color-error)!important;background:var(--ant-color-bg-layout)!important} +.hint{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);margin:0 0 12px;line-height:1.6} /* ===== 可编辑表格内的输入控件 ===== */ -.data-table input,.data-table select,.data-table textarea{border:1px solid #d9dee2;border-radius:3px;height:28px;padding:0 8px;width:100%;background:#fff;font-size:12px} -.data-table input:focus,.data-table select:focus,.data-table textarea:focus{border-color:var(--blue);outline:none} +.data-table input,.data-table select,.data-table textarea{border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:28px;padding:0 8px;width:100%;background:var(--ant-color-bg-container);font-size:var(--ant-font-size-sm)} +.data-table input:focus,.data-table select:focus,.data-table textarea:focus{border-color:var(--ant-color-primary);outline:none} .data-table .number{width:100%;text-align:right} -.data-table input::placeholder{color:#b9bfc3} +.data-table input::placeholder{color:var(--ant-color-text-disabled)} /* 站点列表:列宽可手动拖动调整(拖拽表头右缘的分隔条) */ .data-table.resizable-cols{table-layout:fixed;width:100%} .data-table.resizable-cols th{position:relative} .data-table .col-resizer{position:absolute;top:0;right:0;width:6px;height:100%;cursor:col-resize;z-index:2;user-select:none} .data-table .col-resizer::after{content:"";position:absolute;top:0;right:2px;width:2px;height:100%;background:transparent} -.data-table .col-resizer:hover::after,.data-table .col-resizer.active::after{background:var(--blue)} +.data-table .col-resizer:hover::after,.data-table .col-resizer.active::after{background:var(--ant-color-primary)} /* 可编辑表格使用固定列宽,避免输入框在自动布局下被压窄(设备类型框变窄的 BUG) */ .data-table.editable{table-layout:fixed} .data-table.editable th:nth-child(1){width:40%} @@ -90,48 +90,48 @@ .data-table.editable th:nth-child(4){width:auto} .data-table.editable th:nth-child(5){width:48px} .data-table.editable input,.data-table.editable select,.data-table.editable textarea{min-width:0;width:100%} -.data-table.editable .trash{border:0;background:transparent;color:var(--red);font-size:15px;cursor:pointer;line-height:1} -.data-table.editable .trash:hover{color:#d63723} -.data-table.editable .asset-eye-btn{border:0;background:transparent;color:var(--blue);font-size:18px;cursor:pointer;line-height:1;padding:0;display:inline-flex;align-items:center} -.data-table.editable .asset-eye-btn.disabled{color:#c4c9cc;cursor:default} +.data-table.editable .trash{border:0;background:transparent;color:var(--ant-color-error);font-size:var(--ant-font-size);cursor:pointer;line-height:1} +.data-table.editable .trash:hover{color:var(--ant-color-error)} +.data-table.editable .asset-eye-btn{border:0;background:transparent;color:var(--ant-color-primary);font-size:var(--ant-font-size);cursor:pointer;line-height:1;padding:0;display:inline-flex;align-items:center} +.data-table.editable .asset-eye-btn.disabled{color:var(--ant-color-text-disabled);cursor:default} /* ===== 领域方案库:列表筛选栏 + 可排序列头 ===== */ -.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px} -.filter-bar .filter-search{flex:1 1 220px;min-width:180px;height:30px;border:1px solid #d9dee2;border-radius:3px;padding:0 10px;font-size:12px;background:#fff} -.filter-bar .filter-search:focus{border-color:var(--blue);outline:none} -.filter-bar select{height:30px;border:1px solid #d9dee2;border-radius:3px;padding:0 8px;font-size:12px;background:#fff;color:#444} -.filter-bar select:focus{border-color:var(--blue);outline:none} -.filter-bar .filter-count{margin-left:auto;font-size:12px} +.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px} +.filter-bar .filter-search{flex:1 1 220px;min-width:180px;height:30px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 12px;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-container)} +.filter-bar .filter-search:focus{border-color:var(--ant-color-primary);outline:none} +.filter-bar select{height:30px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 8px;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary)} +.filter-bar select:focus{border-color:var(--ant-color-primary);outline:none} +.filter-bar .filter-count{margin-left:auto;font-size:var(--ant-font-size-sm)} .data-table th.sortable{cursor:pointer;user-select:none;white-space:nowrap} -.data-table th.sortable:hover{color:var(--blue)} -.data-table th.sortable .sort-ind{color:var(--blue);font-size:10px} +.data-table th.sortable:hover{color:var(--ant-color-primary)} +.data-table th.sortable .sort-ind{color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)} /* ===== Assets 资产配置 ===== */ -.empty-row td{background:#fafbfc} -.empty-row input{color:#b7bcc0;background:#fafbfc} -.empty-row input::placeholder{color:#c3c8cc} -.asset-tree-preview{background:#f5f8f9;border:1px solid #e7ebed;border-radius:6px;padding:12px 14px;font-size:12px} -.tree-root{font-weight:bold;color:#33414a;margin-bottom:8px;display:flex;align-items:center;gap:5px} -.tree-branch{margin:4px 0 4px 14px;padding-left:12px;border-left:1px dashed #cdd5d9} -.tree-node{display:flex;align-items:center;gap:6px;font-weight:bold;color:#3a4750} -.site-structure-title{margin-top:18px} -.site-structure{grid-column:2;margin-top:6px} -.site-structure .tree-branch{margin:4px 0 4px 0;padding-left:12px;border-left:1px solid #ddd} -.site-structure .tree-node{font-weight:normal;color:#555;font-size:14px} -.site-structure .tree-node.current-site{color:var(--blue);background:rgba(0,140,214,.08);border-radius:3px;padding:1px 4px;margin-left:-4px} -.tree-count{background:var(--pale);color:var(--blue2);border-radius:9px;padding:0 7px;font-size:10px;font-weight:normal} -.tree-leaves{color:#788187;font-size:11px;line-height:1.7;margin:3px 0 0 20px;word-break:break-all} +.empty-row td{background:var(--ant-color-bg-layout)} +.empty-row input{color:var(--ant-color-text-disabled);background:var(--ant-color-bg-layout)} +.empty-row input::placeholder{color:var(--ant-color-text-disabled)} +.asset-tree-preview{background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:12px 16px;font-size:var(--ant-font-size-sm)} +.tree-root{font-weight:600;color:var(--ant-color-text-secondary);margin-bottom:8px;display:flex;align-items:center;gap:4px} +.tree-branch{margin:4px 0 4px 16px;padding-left:12px;border-left:1px dashed var(--ant-color-border)} +.tree-node{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--ant-color-text-secondary)} +.site-structure-title{margin-top:20px} +.site-structure{grid-column:2;margin-top:8px} +.site-structure .tree-branch{margin:4px 0 4px 0;padding-left:12px;border-left:1px solid var(--ant-color-border)} +.site-structure .tree-node{font-weight:400;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size)} +.site-structure .tree-node.current-site{color:var(--ant-color-primary);background:var(--ant-color-primary-bg);border-radius:var(--ant-border-radius);padding:4px 4px;margin-left:-4px} +.tree-count{background:var(--ant-color-primary-bg);color:var(--ant-color-primary-active);border-radius:var(--ant-border-radius);padding:0 8px;font-size:var(--ant-font-size-sm);font-weight:400} +.tree-leaves{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.7;margin:4px 0 0 20px;word-break:break-all} /* ===== Functions 功能与菜单 ===== */ -.mu-tree{display:flex;flex-direction:column;gap:14px} -.mu-group>b{display:block;color:var(--blue2);font-size:13px;margin-bottom:6px} -.mu-items{display:flex;flex-direction:column;gap:6px;padding:6px 0 4px 18px;border-left:1px dashed var(--line);margin-left:6px} -.mu-items label{display:flex;align-items:flex-start;gap:7px;border:1px solid var(--line);border-radius:5px;padding:7px 9px;background:#fff;cursor:pointer;font-size:12px} -.mu-items label:hover{border-color:#9ed3ec;background:#f4fafe} -.mu-items label.disabled{opacity:.5;cursor:not-allowed;background:#f6f7f8} -.mu-items label input{margin-top:2px;accent-color:var(--blue)} +.mu-tree{display:flex;flex-direction:column;gap:16px} +.mu-group>b{display:block;color:var(--ant-color-primary-active);font-size:var(--ant-font-size-sm);margin-bottom:8px} +.mu-items{display:flex;flex-direction:column;gap:8px;padding:8px 0 4px 20px;border-left:1px dashed var(--ant-color-border);margin-left:8px} +.mu-items label{display:flex;align-items:flex-start;gap:8px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px 8px;background:var(--ant-color-bg-container);cursor:pointer;font-size:var(--ant-font-size-sm)} +.mu-items label:hover{border-color:var(--ant-color-primary-bg);background:var(--ant-color-bg-layout)} +.mu-items label.disabled{opacity:.5;cursor:not-allowed;background:var(--ant-color-bg-layout)} +.mu-items label input{margin-top:4px;accent-color:var(--ant-color-primary)} .mu-items label span{display:flex;flex-direction:column;line-height:1.3} -.mu-items label small{color:var(--muted);font-size:10px} +.mu-items label small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} .two-column>div:first-child{min-width:0} .cube-editor{overflow-x:auto} .cube-editor table{width:100%} @@ -141,82 +141,82 @@ .cube-editor .cube-editor-table th:nth-child(3){width:140px} .cube-editor .cube-editor-table th:nth-child(4){width:200px} .cube-editor .cube-editor-table td:nth-child(3){white-space:nowrap;overflow:hidden;text-overflow:ellipsis} -.cube-actions{display:flex;gap:5px;white-space:nowrap} -.cube-actions button{border:1px solid var(--line);background:#fff;border-radius:4px;height:26px;padding:0 9px;font-size:11px;color:#444} -.cube-actions button:hover{border-color:var(--blue);color:var(--blue)} -.cube-actions .trash{border-color:#f0c4bd;color:var(--red)} -.cube-actions .trash:hover{background:#fdeae6;border-color:var(--red)} +.cube-actions{display:flex;gap:4px;white-space:nowrap} +.cube-actions button{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);height:26px;padding:0 8px;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)} +.cube-actions button:hover{border-color:var(--ant-color-primary);color:var(--ant-color-primary)} +.cube-actions .trash{border-color:var(--ant-color-error-bg);color:var(--ant-color-error)} +.cube-actions .trash:hover{background:var(--ant-color-bg-layout);border-color:var(--ant-color-error)} /* 醒目 AI 操作按钮(渐变蓝紫) */ -.btn-ai{display:inline-flex;align-items:center;gap:4px;background:linear-gradient(135deg,#2563eb,#7c3aed);color:#fff;border:1px solid transparent;border-radius:5px;height:26px;padding:0 11px;font-size:11px;font-weight:600;cursor:pointer;box-shadow:0 1px 4px rgba(37,99,235,.35);white-space:nowrap} +.btn-ai{display:inline-flex;align-items:center;gap:4px;background:linear-gradient(135deg,var(--ant-color-primary),var(--ant-color-primary));color:var(--ant-color-text-light-solid);border:1px solid transparent;border-radius:var(--ant-border-radius);height:26px;padding:0 12px;font-size:var(--ant-font-size-sm);font-weight:600;cursor:pointer;box-shadow:none;white-space:nowrap} .btn-ai:hover{filter:brightness(1.08)} .btn-ai:active{transform:translateY(1px)} .btn-ai:disabled{opacity:.65;cursor:default;box-shadow:none} .cube-actions .btn-ai{height:26px} -.menu-editor{display:flex;flex-direction:column;gap:10px} +.menu-editor{display:flex;flex-direction:column;gap:12px} .menu-row{display:grid;grid-template-columns:1.4fr 1fr 1.4fr auto;gap:8px;align-items:center} -.menu-row input,.menu-row select{border:1px solid var(--line);border-radius:3px;height:30px;padding:0 8px;background:#fff;width:100%} -.menu-row .trash{border:1px solid #f0c4bd;background:#fff;color:var(--red);border-radius:4px;height:30px;width:34px;font-size:15px} -.menu-row .trash:hover{background:#fdeae6;border-color:var(--red)} -.menu-preview .menu-tree{border:1px solid var(--line);background:#fff} -.menu-preview .menu-root{padding:10px 12px;font-weight:bold;border-bottom:1px solid var(--line);background:#fafbfc} -.menu-preview .menu-section{padding:10px 12px;border-bottom:1px solid #eee} +.menu-row input,.menu-row select{border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:30px;padding:0 8px;background:var(--ant-color-bg-container);width:100%} +.menu-row .trash{border:1px solid var(--ant-color-error-bg);background:var(--ant-color-bg-container);color:var(--ant-color-error);border-radius:var(--ant-border-radius);height:30px;width:34px;font-size:var(--ant-font-size)} +.menu-row .trash:hover{background:var(--ant-color-bg-layout);border-color:var(--ant-color-error)} +.menu-preview .menu-tree{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)} +.menu-preview .menu-root{padding:12px 12px;font-weight:600;border-bottom:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout)} +.menu-preview .menu-section{padding:12px 12px;border-bottom:1px solid var(--ant-color-border)} .menu-preview .menu-section:last-child{border-bottom:0} -.menu-preview .menu-section-title{font-size:12px;color:var(--blue2);font-weight:bold;margin-bottom:7px} -.menu-preview .menu-leaf{padding:5px 0 5px 16px;font-size:12px;color:#555;border-left:2px solid #e1e7ea;margin:3px 0 3px 4px} -.menu-preview .menu-leaf.cube{border-left-color:#c9b8f0} -.menu-preview .menu-leaf.muted{color:#aaa;border-left-color:#eee} +.menu-preview .menu-section-title{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary-active);font-weight:600;margin-bottom:8px} +.menu-preview .menu-leaf{padding:4px 0 4px 16px;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);border-left:2px solid var(--ant-color-border);margin:4px 0 4px 4px} +.menu-preview .menu-leaf.cube{border-left-color:var(--ant-color-primary)} +.menu-preview .menu-leaf.muted{color:var(--ant-color-text-disabled);border-left-color:var(--ant-color-border)} /* ===== Generate 预览 line 面板 ===== */ -.line-panel{background:#fff;border:1px solid var(--line);border-radius:6px;padding:11px 13px;display:flex;flex-direction:column;gap:8px} -.line-panel h3{margin:0;font-size:13px;display:flex;align-items:center;justify-content:space-between} -.line-panel h3 span{color:var(--muted);font-size:10px;font-weight:normal} +.line-panel{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:12px 12px;display:flex;flex-direction:column;gap:8px} +.line-panel h3{margin:0;font-size:var(--ant-font-size-sm);display:flex;align-items:center;justify-content:space-between} +.line-panel h3 span{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);font-weight:400} /* ===== 生成提示词查看 ===== */ .prompt-list{display:flex;flex-direction:column;gap:8px} -.prompt-row{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--line);border-radius:5px;padding:8px 11px;background:#fff} +.prompt-row{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px 12px;background:var(--ant-color-bg-container)} .prompt-row span{display:flex;flex-direction:column;line-height:1.35;min-width:0} -.prompt-row span small{color:var(--muted);font-size:10px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:420px} -.prompt-row b{font-size:13px} +.prompt-row span small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:420px} +.prompt-row b{font-size:var(--ant-font-size-sm)} .prompt-view{margin:0;background:#0f1115;color:#e6edf3;border:1px solid #2a2f36;border-radius:6px;padding:14px;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:11.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word;max-height:60vh;overflow:auto} /* ===== 站点列表:多选与删除 ===== */ -.data-table input[type=checkbox]{display:block;width:16px;height:16px;padding:0;margin:0 auto;appearance:none;border:1px solid #aeb4b9;border-radius:2px;box-shadow:none;background:#fff;cursor:pointer;vertical-align:middle} -.data-table input[type=checkbox]:checked{border-color:var(--blue);background-color:var(--blue);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.2 6.6 11 12.5 4.8' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:14px 14px} -.data-table input[type=checkbox]:focus-visible{outline:2px solid #9bd8f3;outline-offset:1px} +.data-table input[type=checkbox]{display:block;width:16px;height:16px;padding:0;margin:0 auto;appearance:none;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);box-shadow:none;background:var(--ant-color-bg-container);cursor:pointer;vertical-align:middle} +.data-table input[type=checkbox]:checked{border-color:var(--ant-color-primary);background-color:var(--ant-color-primary);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.2 6.6 11 12.5 4.8' fill='none' stroke='var(--ant-color-bg-container)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:14px 14px} +.data-table input[type=checkbox]:focus-visible{outline:2px solid var(--ant-color-primary-bg);outline-offset:1px} .data-table thead th:first-child{width:34px;text-align:center} -.link.danger{color:var(--red)} +.link.danger{color:var(--ant-color-error)} .link.danger:hover{text-decoration:underline} .project-grid article{position:relative} -.card-del{position:absolute;top:8px;right:8px;border:1px solid #f0c4bd;background:#fff;color:var(--red);border-radius:4px;height:26px;padding:0 9px;font-size:11px;cursor:pointer} -.card-del:hover{background:#fdeae6;border-color:var(--red)} -.style-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:14px 0 4px} -.style-card{border:1px solid var(--line);background:white;display:flex;flex-direction:column} -.style-card .style-thumb{position:relative;aspect-ratio:16/9;min-height:200px;background:#f2f5f7;display:grid;place-items:center;cursor:zoom-in;overflow:hidden} +.card-del{position:absolute;top:8px;right:8px;border:1px solid var(--ant-color-error-bg);background:var(--ant-color-bg-container);color:var(--ant-color-error);border-radius:var(--ant-border-radius);height:26px;padding:0 8px;font-size:var(--ant-font-size-sm);cursor:pointer} +.card-del:hover{background:var(--ant-color-bg-layout);border-color:var(--ant-color-error)} +.style-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;padding:16px 0 4px} +.style-card{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;flex-direction:column} +.style-card .style-thumb{position:relative;aspect-ratio:16/9;min-height:200px;background:var(--ant-color-bg-layout);display:grid;place-items:center;cursor:zoom-in;overflow:hidden} .style-card .style-thumb img{width:100%;height:100%;object-fit:contain} -.style-card .style-thumb .zoom{position:absolute;right:8px;bottom:8px;background:#0008;color:#fff;width:24px;height:24px;border-radius:3px;display:grid;place-items:center;font-size:13px} -.style-info{padding:11px 12px 2px} -.style-info h3{font-size:14px;margin:0} -.style-info small{color:#999;font-size:10px} -.style-card footer{display:flex;justify-content:flex-end;gap:14px;padding:8px 12px} +.style-card .style-thumb .zoom{position:absolute;right:8px;bottom:8px;background:color-mix(in srgb,var(--ant-color-bg-mask) 53%,transparent);color:var(--ant-color-text-light-solid);width:24px;height:24px;border-radius:var(--ant-border-radius);display:grid;place-items:center;font-size:var(--ant-font-size-sm)} +.style-info{padding:12px 12px 4px} +.style-info h3{font-size:var(--ant-font-size);margin:0} +.style-info small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} +.style-card footer{display:flex;justify-content:flex-end;gap:16px;padding:8px 12px} .style-lightbox{max-width:92vw;max-height:88vh} .style-upload-row{display:flex;gap:12px;align-items:stretch} -.style-upload-prev{width:150px;height:120px;border:1px solid #d8dde0;display:grid;place-items:center;background:#f7f9fa;overflow:hidden} +.style-upload-prev{width:150px;height:120px;border:1px solid var(--ant-color-border);display:grid;place-items:center;background:var(--ant-color-bg-layout);overflow:hidden} .style-upload-prev img{width:100%;height:100%;object-fit:contain} -.style-json-row{display:flex;gap:10px;align-items:flex-start} -.style-json-row textarea{flex:1;min-height:150px;resize:vertical;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.5} -.style-json-row .upload{width:120px;height:64px;flex:0 0 auto;margin-top:2px} +.style-json-row{display:flex;gap:12px;align-items:flex-start} +.style-json-row textarea{flex:1;min-height:150px;resize:vertical;font-family:var(--ant-font-family);font-size:var(--ant-font-size-sm);line-height:1.5} +.style-json-row .upload{width:120px;height:64px;flex:0 0 auto;margin-top:4px} .modal>footer .spacer{flex:1} -.style-picker{margin-top:18px;border-top:1px dashed var(--line);padding-top:14px} -.style-picker h4{margin:0 0 4px;font-size:14px} -.style-picker h4 small{color:#999;font-weight:normal;font-size:10px;margin-left:6px} -.style-pick-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:8px} -.style-pick{border:1px solid var(--line);background:white;padding:7px;display:flex;flex-direction:column;gap:6px;cursor:pointer;text-align:center;color:#555} -.style-pick:hover{border-color:var(--blue)} -.style-pick.active{border:2px solid var(--blue);background:#f4fbff;color:#007cc3} -.style-pick-thumb{height:78px;background:#f2f5f7;display:grid;place-items:center;overflow:hidden} +.style-picker{margin-top:20px;border-top:1px dashed var(--ant-color-border);padding-top:16px} +.style-picker h4{margin:0 0 4px;font-size:var(--ant-font-size)} +.style-picker h4 small{color:var(--ant-color-text-secondary);font-weight:400;font-size:var(--ant-font-size-sm);margin-left:8px} +.style-pick-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-top:8px} +.style-pick{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:8px;display:flex;flex-direction:column;gap:8px;cursor:pointer;text-align:center;color:var(--ant-color-text-secondary)} +.style-pick:hover{border-color:var(--ant-color-primary)} +.style-pick.active{border:2px solid var(--ant-color-primary);background:var(--ant-color-bg-layout);color:var(--ant-color-primary)} +.style-pick-thumb{height:78px;background:var(--ant-color-bg-layout);display:grid;place-items:center;overflow:hidden} .style-pick-thumb img{width:100%;height:100%;object-fit:contain} -.style-pick-thumb.none{color:#aaa;font-size:13px} -.style-pick span{font-size:11px;line-height:1.3} +.style-pick-thumb.none{color:var(--ant-color-text-disabled);font-size:var(--ant-font-size-sm)} +.style-pick span{font-size:var(--ant-font-size-sm);line-height:1.3} /* ========================================================================== */ /* Company workspace standard — measured from the WISE-IoT service desk UI. */ @@ -224,108 +224,97 @@ /* remaining feature pages are migrated to shared company components. */ /* ========================================================================== */ :root{ - --company-primary:#008cd6; - --company-primary-hover:#0078b8; - --company-nav-active:#c3e4f6; - --company-text:#323233; - --company-muted:#89898a; - --company-border:#d9d9d9; - --company-line:#e5e5e5; - --company-surface:#fff; - --company-soft:#f5f5f5; - --company-success:#42d067; - --company-warning:#ff990b; - --blue:var(--company-primary); - --blue2:var(--company-primary); - --line:var(--company-border); - --soft:var(--company-soft); - --text:var(--company-text); - --muted:var(--company-muted); + + + + + + } -html,body{font-family:Roboto,"Noto Sans SC","Microsoft YaHei",Arial,sans-serif;font-size:14px;line-height:1.5;color:var(--company-text);background:#fff} -.app-shell{min-height:100vh;padding-top:56px;padding-left:200px;background:#fff} -.topbar{height:56px;border-top:4px solid var(--company-primary);border-bottom:1px solid #c8c8c8;background:#fff;background-image:none;box-shadow:none;padding:0 20px;gap:10px} -.topbar>strong{font-size:22px;color:#0b4f76;letter-spacing:-.3px}.topbar .brand-mark{font-size:20px;color:var(--company-primary)} -.top-actions{gap:14px}.top-actions a{color:var(--company-primary);text-decoration:none}.top-actions small{font-size:10px;color:#666} -.hamburger{font-size:18px;color:#666}.divider{height:22px} -.side-nav{top:56px;width:200px;background:#f5f5f5;border-right:1px solid #ddd} -.module-switch{padding:0;border-bottom:1px solid #ddd;display:flex;flex-direction:column;gap:0} -.module-switch>button{height:50px;border:0;border-radius:0;background:transparent;padding:0 20px;gap:10px;font-size:14px;font-weight:500} -.module-switch>button>b{width:18px;height:auto;background:transparent;color:#777} -.module-switch>button>span{display:block;font-weight:500}.module-switch>button small{display:none} -.module-switch>button:hover{background:#e9f3f8}.module-switch>button.active{background:var(--company-nav-active);color:var(--company-primary)} -.module-switch>button.active>b{background:transparent;color:var(--company-primary)} -.side-nav>small{font-size:12px;color:#6f6f70;padding:18px 20px 6px;letter-spacing:0;text-transform:none} -.side-nav>button{height:44px;padding:0 20px;border-left:0;font-size:14px;gap:10px} -.side-nav>button.active{background:var(--company-nav-active);color:var(--company-primary);border-left:0;font-weight:600} -.side-nav>button em{width:20px;height:20px;font-size:11px} -.site-switcher{height:32px;width:calc(100% - 32px);margin:6px 16px;border-color:var(--company-border);border-radius:4px;font-size:13px} -.side-help{margin:auto 16px 16px;border:0;border-top:1px solid #ddd;background:transparent;padding:14px 4px 0} -.workspace{min-height:calc(100vh - 56px);padding-bottom:72px;background:#fff}.crumb{display:none} -.page-heading{min-height:64px;padding:10px 24px;background:#f3f3f3;border-bottom:1px solid var(--company-border)} -.page-heading h1{font-size:24px;line-height:36px;font-weight:700;margin:0;color:var(--company-text)} -.page-heading p{font-size:13px;color:var(--company-muted);margin:0}.page-heading>div:last-child{display:flex;gap:8px} -.content{padding:0 24px 24px;background:#fff} -.button.ant-btn{min-width:112px;height:32px;margin:0;border-radius:4px;padding:0 24px;font-size:14px;font-weight:600;box-shadow:none} -.button.ant-btn-primary{background:var(--company-primary);border-color:var(--company-primary)}.button.ant-btn-primary:hover{background:var(--company-primary-hover)!important;border-color:var(--company-primary-hover)!important} -.button.ant-btn-default,.button.secondary{background:#fff;color:#5f5f60;border-color:#c8c8c8}.button.ant-btn-default:hover,.button.secondary:hover{color:var(--company-primary)!important;border-color:var(--company-primary)!important;background:#fff!important} -.steps{height:64px;border-top:0;border-bottom:1px solid var(--company-border);padding:0 24px;background:#fff}.steps button{padding:0 20px;font-size:14px}.steps button>i{width:26px;height:26px}.steps button.active>i{background:var(--company-primary);border-color:var(--company-primary)} -.panel{border:1px solid var(--company-border);border-radius:0;background:#fff;margin:16px 0;box-shadow:none}.panel-head{min-height:48px;padding:0 16px;background:#fff}.panel-head>strong{font-size:16px}.panel-body{padding:16px} -.company-status-tabs{height:56px;display:flex;align-items:flex-end;border-bottom:1px solid var(--company-border);gap:0;padding-top:8px} -.company-status-tabs button{height:48px;min-width:120px;padding:0 24px;border:0;border-bottom:3px solid transparent;background:#fff;color:var(--company-muted);font-size:15px} -.company-status-tabs button span{margin-right:8px}.company-status-tabs button b{display:inline-grid;place-items:center;min-width:24px;height:20px;padding:0 6px;border-radius:10px;background:#eee;color:#999;font-size:12px} -.company-status-tabs button.active{color:var(--company-primary);border-bottom-color:var(--company-primary);font-weight:600}.company-status-tabs button.active b{background:#dff4eb;color:#25a85b} +html,body{font-family:var(--ant-font-family);font-size:var(--ant-font-size);line-height:1.5;color:var(--ant-color-text-base);background:var(--ant-color-bg-container)} +.app-shell{min-height:100vh;padding-top:56px;padding-left:200px;background:var(--ant-color-bg-container)} +.topbar{height:56px;border-top:4px solid var(--ant-color-primary);border-bottom:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);background-image:none;box-shadow:none;padding:0 20px;gap:12px} +.topbar>strong{font-size:var(--ant-font-size-heading-3);color:var(--ant-color-primary);letter-spacing:-.3px}.topbar .brand-mark{font-size:var(--ant-font-size-heading-4);color:var(--ant-color-primary)} +.top-actions{gap:16px}.top-actions a{color:var(--ant-color-primary);text-decoration:none}.top-actions small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)} +.hamburger{font-size:var(--ant-font-size);color:var(--ant-color-text-secondary)}.divider{height:22px} +.side-nav{top:56px;width:200px;background:var(--ant-color-bg-layout);border-right:1px solid var(--ant-color-border)} +.module-switch{padding:0;border-bottom:1px solid var(--ant-color-border);display:flex;flex-direction:column;gap:0} +.module-switch>button{height:50px;border:0;border-radius:0;background:transparent;padding:0 20px;gap:12px;font-size:var(--ant-font-size);font-weight:600} +.module-switch>button>b{width:18px;height:auto;background:transparent;color:var(--ant-color-text-secondary)} +.module-switch>button>span{display:block;font-weight:600}.module-switch>button small{display:none} +.module-switch>button:hover{background:var(--ant-color-bg-layout)}.module-switch>button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)} +.module-switch>button.active>b{background:transparent;color:var(--ant-color-primary)} +.side-nav>small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);padding:20px 20px 8px;letter-spacing:0;text-transform:none} +.side-nav>button{height:44px;padding:0 20px;border-left:0;font-size:var(--ant-font-size);gap:12px} +.side-nav>button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary);border-left:0;font-weight:600} +.side-nav>button em{width:20px;height:20px;font-size:var(--ant-font-size-sm)} +.site-switcher{height:32px;width:calc(100% - 32px);margin:8px 16px;border-color:var(--ant-color-border);border-radius:var(--ant-border-radius);font-size:var(--ant-font-size-sm)} +.side-help{margin:auto 16px 16px;border:0;border-top:1px solid var(--ant-color-border);background:transparent;padding:16px 4px 0} +.workspace{min-height:calc(100vh - 56px);padding-bottom:72px;background:var(--ant-color-bg-container)}.crumb{display:none} +.page-heading{min-height:64px;padding:12px 24px;background:var(--ant-color-bg-layout);border-bottom:1px solid var(--ant-color-border)} +.page-heading h1{font-size:var(--ant-font-size-heading-3);line-height:36px;font-weight:600;margin:0;color:var(--ant-color-text-base)} +.page-heading p{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);margin:0}.page-heading>div:last-child{display:flex;gap:8px} +.content{padding:0 24px 24px;background:var(--ant-color-bg-container)} +.button.ant-btn{min-width:112px;height:32px;margin:0;border-radius:var(--ant-border-radius);padding:0 24px;font-size:var(--ant-font-size);font-weight:600;box-shadow:none} +.button.ant-btn-primary{background:var(--ant-color-primary);border-color:var(--ant-color-primary)}.button.ant-btn-primary:hover{background:var(--ant-color-primary-hover)!important;border-color:var(--ant-color-primary-hover)!important} +.button.ant-btn-default,.button.secondary{background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);border-color:var(--ant-color-border)}.button.ant-btn-default:hover,.button.secondary:hover{color:var(--ant-color-primary)!important;border-color:var(--ant-color-primary)!important;background:var(--ant-color-bg-container)!important} +.steps{height:64px;border-top:0;border-bottom:1px solid var(--ant-color-border);padding:0 24px;background:var(--ant-color-bg-container)}.steps button{padding:0 20px;font-size:var(--ant-font-size)}.steps button>i{width:26px;height:26px}.steps button.active>i{background:var(--ant-color-primary);border-color:var(--ant-color-primary)} +.panel{border:1px solid var(--ant-color-border);border-radius:0;background:var(--ant-color-bg-container);margin:16px 0;box-shadow:none}.panel-head{min-height:48px;padding:0 16px;background:var(--ant-color-bg-container)}.panel-head>strong{font-size:var(--ant-font-size)}.panel-body{padding:16px} +.company-status-tabs{height:56px;display:flex;align-items:flex-end;border-bottom:1px solid var(--ant-color-border);gap:0;padding-top:8px} +.company-status-tabs button{height:48px;min-width:120px;padding:0 24px;border:0;border-bottom:3px solid transparent;background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);font-size:var(--ant-font-size)} +.company-status-tabs button span{margin-right:8px}.company-status-tabs button b{display:inline-grid;place-items:center;min-width:24px;height:20px;padding:0 8px;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} +.company-status-tabs button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary);font-weight:600}.company-status-tabs button.active b{background:var(--ant-color-fill-secondary);color:var(--ant-color-success)} .company-list-panel{margin-top:16px}.company-list-panel>.panel-body{padding:0 16px 12px} -.company-filterbar{height:auto;min-height:56px;padding:12px 0;gap:8px}.company-filterbar .search-field{width:240px;height:32px;border:1px solid var(--company-border);border-radius:4px;padding:0 10px;background:#fff}.company-filterbar .search-field:focus-within{border-color:var(--company-primary)} -.company-filterbar select{height:32px;min-width:160px;border:1px solid var(--company-border);border-radius:4px;background:#fff;padding:0 28px 0 10px} +.company-filterbar{height:auto;min-height:56px;padding:12px 0;gap:8px}.company-filterbar .search-field{width:240px;height:32px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 12px;background:var(--ant-color-bg-container)}.company-filterbar .search-field:focus-within{border-color:var(--ant-color-primary)} +.company-filterbar select{height:32px;min-width:160px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);padding:0 28px 0 12px} .filter-actions{margin-left:auto;display:flex;gap:8px}.filter-actions .button{min-width:96px} -.company-table{table-layout:fixed}.company-table th{height:44px;background:#f7f7f7;font-size:14px;font-weight:600;padding:0 12px}.company-table td{height:50px;padding:8px 12px;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.company-table tbody tr{cursor:pointer}.company-table tbody tr:hover td{background:#f1f8fc}.company-table th:first-child,.company-table td:first-child{width:44px;overflow:visible;text-overflow:clip}.company-table th:last-child,.company-table td:last-child{width:70px;text-align:center} -.company-record-link{font-size:14px}.company-record-link b{color:var(--company-primary)} -.status.ant-tag{height:24px;line-height:21px;border-radius:12px;padding:0 10px;margin:0;font-size:13px}.status.ok{color:var(--company-success);background:rgb(66 208 103 / 20%);border-color:var(--company-success)}.status.warn{color:var(--company-warning);background:rgb(255 153 11 / 20%);border-color:var(--company-warning)}.status.bad{color:#f05b49;background:rgb(240 91 73 / 16%);border-color:#f05b49}.status.muted{color:#777;background:#f3f3f3;border-color:#c9c9c9} -.pagination{height:56px;padding:12px 0 0;gap:0}.pagination span{border:1px solid var(--company-border);height:32px;line-height:30px;padding:0 12px;margin-right:8px}.pagination button,.pagination select{height:32px;border:1px solid var(--company-border);background:#fff}.pagination button{width:34px}.pagination button.active{background:#fff;color:var(--company-text)}.pagination select{margin-left:8px;padding:0 10px} -.company-detail .detail-status{margin-bottom:20px}.company-detail h3{font-size:16px;margin:18px 0 8px}.company-detail dl{display:grid;grid-template-columns:110px 1fr;margin:0}.company-detail dt,.company-detail dd{margin:0;padding:12px 0;border-bottom:1px solid #eee}.company-detail dt{color:var(--company-muted)} -.ant-drawer .ant-drawer-header{min-height:64px;border-bottom:1px solid var(--company-border)}.ant-drawer .ant-drawer-title{font-size:20px;font-weight:700}.ant-drawer .ant-drawer-body{padding:20px 24px} +.company-table{table-layout:fixed}.company-table th{height:44px;background:var(--ant-color-bg-layout);font-size:var(--ant-font-size);font-weight:600;padding:0 12px}.company-table td{height:50px;padding:8px 12px;font-size:var(--ant-font-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.company-table tbody tr{cursor:pointer}.company-table tbody tr:hover td{background:var(--ant-color-bg-layout)}.company-table th:first-child,.company-table td:first-child{width:44px;overflow:visible;text-overflow:clip}.company-table th:last-child,.company-table td:last-child{width:70px;text-align:center} +.company-record-link{font-size:var(--ant-font-size)}.company-record-link b{color:var(--ant-color-primary)} +.status.ant-tag{height:24px;line-height:21px;border-radius:var(--ant-border-radius);padding:0 12px;margin:0;font-size:var(--ant-font-size-sm)}.status.ok{color:var(--ant-color-success);background:var(--ant-color-success-bg);border-color:var(--ant-color-success)}.status.warn{color:var(--ant-color-warning);background:var(--ant-color-warning-bg);border-color:var(--ant-color-warning)}.status.bad{color:var(--ant-color-error);background:var(--ant-color-error-bg);border-color:var(--ant-color-error)}.status.muted{color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout);border-color:var(--ant-color-border)} +.pagination{height:56px;padding:12px 0 0;gap:0}.pagination span{border:1px solid var(--ant-color-border);height:32px;line-height:30px;padding:0 12px;margin-right:8px}.pagination button,.pagination select{height:32px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.pagination button{width:34px}.pagination button.active{background:var(--ant-color-bg-container);color:var(--ant-color-text-base)}.pagination select{margin-left:8px;padding:0 12px} +.company-detail .detail-status{margin-bottom:20px}.company-detail h3{font-size:var(--ant-font-size);margin:20px 0 8px}.company-detail dl{display:grid;grid-template-columns:110px 1fr;margin:0}.company-detail dt,.company-detail dd{margin:0;padding:12px 0;border-bottom:1px solid var(--ant-color-border)}.company-detail dt{color:var(--ant-color-text-secondary)} +.ant-drawer .ant-drawer-header{min-height:64px;border-bottom:1px solid var(--ant-color-border)}.ant-drawer .ant-drawer-title{font-size:var(--ant-font-size-heading-4);font-weight:600}.ant-drawer .ant-drawer-body{padding:20px 24px} .company-form-page{display:grid;grid-template-columns:220px minmax(0,860px);gap:32px;align-items:start;padding-top:20px} -.form-section-nav{position:sticky;top:76px;display:grid;grid-template-columns:32px 1fr;padding:4px 0;color:var(--company-text)}.form-section-nav>i.form-section-nav-dot{width:8px;height:8px;border-radius:50%;background:var(--company-primary);justify-self:center;align-self:center}.form-section-nav>span{font-size:16px;font-weight:600;line-height:24px;margin-bottom:10px}.form-section-nav>a{grid-column:2;color:#555;text-decoration:none;padding:8px 0 8px 12px;border-left:1px solid #ddd}.form-section-nav>a:hover{color:var(--company-primary)} -.single-column-form{width:100%}.single-column-form .panel{margin:0}.single-column-form .panel-body{padding:20px 24px 32px}.single-column-form .form-grid{display:grid;grid-template-columns:1fr!important;gap:20px}.single-column-form .form-grid>*{grid-column:1!important}.single-column-form .field{max-width:680px;gap:8px}.single-column-form .field>span{font-size:14px}.single-column-form .field input,.single-column-form .field select{height:40px;border-radius:4px;padding:0 12px}.single-column-form .field textarea{min-height:112px;border-radius:4px;padding:10px 12px}.single-column-form .field textarea.small{min-height:88px}.single-column-form .field small{font-size:12px;color:var(--company-muted)} -.domain-select{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center}.domain-select .text-button{margin:0}.domain-add{max-width:520px}.domain-add .button{min-width:88px}.field-assist{display:flex;align-items:flex-end;justify-content:flex-start;gap:12px;margin-top:4px}.field-assist .button{flex:none;min-width:140px}.form-section-heading{max-width:680px;border-top:1px solid var(--company-border);padding-top:20px;margin-top:4px}.form-section-heading h3{font-size:16px;margin:0 0 4px}.form-section-heading p{margin:0;color:var(--company-muted);font-size:13px}.form-guidance{max-width:680px;padding:12px 14px;background:#f5f8fa;border-left:3px solid var(--company-primary);display:flex;flex-direction:column;gap:5px}.form-guidance span{color:#666;font-size:13px}.save-indicator{color:var(--company-muted);font-size:13px} -.upload{height:96px;border-color:#bfc7cd;background:#fafafa;border-radius:4px}.upload b{font-size:20px}.upload span{font-size:14px}.upload small{font-size:12px} -.ai-assist-intro{display:flex;gap:14px;padding:16px;background:#f3f8fb;border:1px solid #d9eaf3}.ai-assist-intro>.anticon{font-size:24px;color:var(--company-primary)}.ai-assist-intro h3{font-size:16px;margin:0 0 6px}.ai-assist-intro p{margin:0;color:#666;line-height:1.7}.ai-assist-drawer .field>span{font-size:16px;font-weight:500}.drawer-actions{display:flex;gap:8px;margin:18px 0}.drawer-actions .button{min-width:120px} -.result-header{min-height:72px;border:0;border-bottom:1px solid var(--company-border);padding:12px 0;margin:0}.result-header h2{font-size:20px}.result-header .site-icon{border-radius:4px;background:var(--company-primary);color:#fff;border:0;font-size:16px}.result-actions{display:flex;gap:8px}.result-actions .button{min-width:112px} -.kpi-row{border-bottom:1px solid var(--company-border);gap:0;margin:0 0 16px}.kpi-row>div{height:72px;border:0;border-right:1px solid #eee;padding:12px 16px}.kpi-row>div:last-child{border-right:0}.kpi-row span{color:var(--company-muted)}.kpi-row b{font-size:22px} -.result-layout{grid-template-columns:1fr}.result-pages{display:grid;grid-template-columns:1fr;gap:0}.result-pages article{display:grid;grid-template-columns:300px 1fr;min-height:180px;border:0;border-bottom:1px solid var(--company-border);padding:16px 0}.result-pages article>div:last-child{padding:0 20px}.result-pages h3{font-size:16px;margin:14px 0 8px}.result-pages p{font-size:13px;line-height:1.6}.result-pages footer{gap:8px}.result-pages footer .button{min-width:96px;height:32px;margin:0}.dashboard-thumb-live{min-height:160px;border:1px solid var(--company-border);background:#f5f5f5} -.text-button{color:var(--company-primary);font-size:14px}.modal,.login-card{border-radius:4px}.modal{box-shadow:0 6px 24px #0002}.toast{top:68px;border-radius:4px;background:#323233} -.ai-fab{box-shadow:0 4px 12px #0003}.ai-dialog{border-radius:4px}.ai-dialog header{background:var(--company-primary)} +.form-section-nav{position:sticky;top:76px;display:grid;grid-template-columns:32px 1fr;padding:4px 0;color:var(--ant-color-text-base)}.form-section-nav>i.form-section-nav-dot{width:8px;height:8px;border-radius:50%;background:var(--ant-color-primary);justify-self:center;align-self:center}.form-section-nav>span{font-size:var(--ant-font-size);font-weight:600;line-height:24px;margin-bottom:12px}.form-section-nav>a{grid-column:2;color:var(--ant-color-text-secondary);text-decoration:none;padding:8px 0 8px 12px;border-left:1px solid var(--ant-color-border)}.form-section-nav>a:hover{color:var(--ant-color-primary)} +.single-column-form{width:100%}.single-column-form .panel{margin:0}.single-column-form .panel-body{padding:20px 24px 32px}.single-column-form .form-grid{display:grid;grid-template-columns:1fr!important;gap:20px}.single-column-form .form-grid>*{grid-column:1!important}.single-column-form .field{max-width:680px;gap:8px}.single-column-form .field>span{font-size:var(--ant-font-size)}.single-column-form .field input,.single-column-form .field select{height:40px;border-radius:var(--ant-border-radius);padding:0 12px}.single-column-form .field textarea{min-height:112px;border-radius:var(--ant-border-radius);padding:12px 12px}.single-column-form .field textarea.small{min-height:88px}.single-column-form .field small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)} +.domain-select{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center}.domain-select .text-button{margin:0}.domain-add{max-width:520px}.domain-add .button{min-width:88px}.field-assist{display:flex;align-items:flex-end;justify-content:flex-start;gap:12px;margin-top:4px}.field-assist .button{flex:none;min-width:140px}.form-section-heading{max-width:680px;border-top:1px solid var(--ant-color-border);padding-top:20px;margin-top:4px}.form-section-heading h3{font-size:var(--ant-font-size);margin:0 0 4px}.form-section-heading p{margin:0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.form-guidance{max-width:680px;padding:12px 16px;background:var(--ant-color-bg-layout);border-left:3px solid var(--ant-color-primary);display:flex;flex-direction:column;gap:4px}.form-guidance span{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.save-indicator{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} +.upload{height:96px;border-color:var(--ant-color-border);background:var(--ant-color-bg-layout);border-radius:var(--ant-border-radius)}.upload b{font-size:var(--ant-font-size-heading-4)}.upload span{font-size:var(--ant-font-size)}.upload small{font-size:var(--ant-font-size-sm)} +.ai-assist-intro{display:flex;gap:16px;padding:16px;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border)}.ai-assist-intro>.anticon{font-size:var(--ant-font-size-heading-3);color:var(--ant-color-primary)}.ai-assist-intro h3{font-size:var(--ant-font-size);margin:0 0 8px}.ai-assist-intro p{margin:0;color:var(--ant-color-text-secondary);line-height:1.7}.ai-assist-drawer .field>span{font-size:var(--ant-font-size);font-weight:600}.drawer-actions{display:flex;gap:8px;margin:20px 0}.drawer-actions .button{min-width:120px} +.result-header{min-height:72px;border:0;border-bottom:1px solid var(--ant-color-border);padding:12px 0;margin:0}.result-header h2{font-size:var(--ant-font-size-heading-4)}.result-header .site-icon{border-radius:var(--ant-border-radius);background:var(--ant-color-primary);color:var(--ant-color-text-light-solid);border:0;font-size:var(--ant-font-size)}.result-actions{display:flex;gap:8px}.result-actions .button{min-width:112px} +.kpi-row{border-bottom:1px solid var(--ant-color-border);gap:0;margin:0 0 16px}.kpi-row>div{height:72px;border:0;border-right:1px solid var(--ant-color-border);padding:12px 16px}.kpi-row>div:last-child{border-right:0}.kpi-row span{color:var(--ant-color-text-secondary)}.kpi-row b{font-size:var(--ant-font-size-heading-3)} +.result-layout{grid-template-columns:1fr}.result-pages{display:grid;grid-template-columns:1fr;gap:0}.result-pages article{display:grid;grid-template-columns:300px 1fr;min-height:180px;border:0;border-bottom:1px solid var(--ant-color-border);padding:16px 0}.result-pages article>div:last-child{padding:0 20px}.result-pages h3{font-size:var(--ant-font-size);margin:16px 0 8px}.result-pages p{font-size:var(--ant-font-size-sm);line-height:1.6}.result-pages footer{gap:8px}.result-pages footer .button{min-width:96px;height:32px;margin:0}.dashboard-thumb-live{min-height:160px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout)} +.text-button{color:var(--ant-color-primary);font-size:var(--ant-font-size)}.modal,.login-card{border-radius:var(--ant-border-radius)}.modal{box-shadow:0 6px 24px color-mix(in srgb,var(--ant-color-text-base) 13%,transparent)}.toast{top:68px;border-radius:var(--ant-border-radius);background:var(--ant-color-text-base)} +.ai-fab{box-shadow:0 4px 12px color-mix(in srgb,var(--ant-color-text-base) 20%,transparent)}.ai-dialog{border-radius:var(--ant-border-radius)}.ai-dialog header{background:var(--ant-color-primary)} @media(max-width:1200px){.company-form-page{grid-template-columns:180px minmax(0,1fr);gap:20px}.single-column-form .field,.form-section-heading,.form-guidance{max-width:100%}} -@media(max-width:900px){.app-shell{padding-left:0}.side-nav{display:none}.workspace{min-width:0}.company-form-page{grid-template-columns:1fr}.form-section-nav{display:none}.content{padding:0 16px 20px}.page-heading{padding:10px 16px}.company-status-tabs{overflow-x:auto}.company-status-tabs button{min-width:100px}.company-filterbar{align-items:stretch;flex-wrap:wrap}.filter-actions{margin-left:0;width:100%}.result-pages article{grid-template-columns:1fr}.sticky-actions{left:0}} +@media(max-width:900px){.app-shell{padding-left:0}.side-nav{display:none}.workspace{min-width:0}.company-form-page{grid-template-columns:1fr}.form-section-nav{display:none}.content{padding:0 16px 20px}.page-heading{padding:12px 16px}.company-status-tabs{overflow-x:auto}.company-status-tabs button{min-width:100px}.company-filterbar{align-items:stretch;flex-wrap:wrap}.filter-actions{margin-left:0;width:100%}.result-pages article{grid-template-columns:1fr}.sticky-actions{left:0}} /* Company navigation IA: global menu contains business modules only. */ .side-nav{display:none!important} .app-shell{padding-left:200px} -.company-side-nav{position:fixed;z-index:35;top:56px;bottom:0;left:0;width:200px;background:#f0f0f0;border-right:1px solid #ddd;display:flex;flex-direction:column;color:#323233;font-family:"Noto Sans SC","Microsoft YaHei",sans-serif} -.side-menu{padding:0;overflow:auto;flex:1}.menu-section{margin:0}.menu-section button{width:100%;border:0;background:transparent;color:inherit;text-align:left;font-family:inherit;font-weight:500} -.menu-section-title{height:56px;padding:0 20px;display:flex;align-items:center;justify-content:space-between;font-size:19px;line-height:56px} -.menu-section-title>span{display:block}.menu-section-title>.anticon{font-size:11px;color:#323233} -.menu-section-title:hover{background:#e5e5e5}.menu-section.current>.menu-section-title{color:#323233;font-weight:500} -.menu-section-items button{height:50px;padding:0 20px 0 40px;display:flex;align-items:center;font-size:17px;line-height:50px;color:#323233} -.menu-section-items button:hover{background:#dcecf5;color:var(--company-primary)} -.menu-section-items button.active{background:#c3e4f6;color:var(--company-primary);font-weight:500} -.extension-menu-items{padding-bottom:2px}.extension-menu-item{height:50px;padding:0 20px 0 40px;display:flex;align-items:center;font-size:17px;line-height:50px;color:#323233;font-weight:500;cursor:default}.extension-submenu-title{justify-content:space-between;cursor:pointer}.extension-submenu-title>.anticon{font-size:11px;margin-right:1px}.extension-third-menu>div{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:#323233;font-size:17px;line-height:50px;font-weight:500;cursor:default}.extension-menu-section .extension-menu-item:hover,.extension-menu-section .extension-third-menu>div:hover{background:transparent;color:inherit} -.extension-third-menu>button{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:#323233;font-size:17px;line-height:50px;font-weight:500;cursor:pointer;border:0;background:transparent;width:100%;text-align:left;font-family:inherit} -.extension-menu-section .extension-third-menu>button.clickable:hover{background:#e8f4fb;color:var(--company-primary)} -.extension-menu-section .extension-third-menu>button.clickable.active{background:#d7eef9;color:var(--company-primary);font-weight:500} -.company-side-footer{position:relative;margin:auto 16px 16px;padding:14px 4px 0;border-top:1px solid #ddd;display:flex;flex-direction:column;gap:8px;font-size:11px} -.company-side-footer>b{color:#515a6e}.company-side-footer>button{height:26px;padding:0;border:0;background:transparent;display:flex;align-items:center;justify-content:space-between;color:#89898a;text-align:left} -.company-model-menu{position:absolute;left:0;right:0;bottom:30px;padding:6px;background:#fff;border:1px solid #d9d9d9;box-shadow:0 4px 12px #00000018} -.company-model-menu button{width:100%;height:32px;border:0;background:#fff;display:flex;justify-content:space-between;align-items:center;padding:0 8px}.company-model-menu button:hover{background:#f5f5f5}.company-model-menu span{color:var(--company-primary);font-size:11px} +.company-side-nav{position:fixed;z-index:35;top:56px;bottom:0;left:0;width:200px;background:var(--ant-color-bg-layout);border-right:1px solid var(--ant-color-border);display:flex;flex-direction:column;color:var(--ant-color-text-base);font-family:var(--ant-font-family)} +.side-menu{padding:0;overflow:auto;flex:1}.menu-section{margin:0}.menu-section button{width:100%;border:0;background:transparent;color:inherit;text-align:left;font-family:var(--ant-font-family);font-weight:600} +.menu-section-title{height:56px;padding:0 20px;display:flex;align-items:center;justify-content:space-between;font-size:var(--ant-font-size-heading-4);line-height:56px} +.menu-section-title>span{display:block}.menu-section-title>.anticon{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-base)} +.menu-section-title:hover{background:var(--ant-color-fill-secondary)}.menu-section.current>.menu-section-title{color:var(--ant-color-text-base);font-weight:600} +.menu-section-items button{height:50px;padding:0 20px 0 40px;display:flex;align-items:center;font-size:var(--ant-font-size);line-height:50px;color:var(--ant-color-text-base)} +.menu-section-items button:hover{background:var(--ant-color-fill-secondary);color:var(--ant-color-primary)} +.menu-section-items button.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary);font-weight:600} +.extension-menu-items{padding-bottom:4px}.extension-menu-item{height:50px;padding:0 20px 0 40px;display:flex;align-items:center;font-size:var(--ant-font-size);line-height:50px;color:var(--ant-color-text-base);font-weight:600;cursor:default}.extension-submenu-title{justify-content:space-between;cursor:pointer}.extension-submenu-title>.anticon{font-size:var(--ant-font-size-sm);margin-right:4px}.extension-third-menu>div{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:var(--ant-color-text-base);font-size:var(--ant-font-size);line-height:50px;font-weight:600;cursor:default}.extension-menu-section .extension-menu-item:hover,.extension-menu-section .extension-third-menu>div:hover{background:transparent;color:inherit} +.extension-third-menu>button{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:var(--ant-color-text-base);font-size:var(--ant-font-size);line-height:50px;font-weight:600;cursor:pointer;border:0;background:transparent;width:100%;text-align:left;font-family:var(--ant-font-family)} +.extension-menu-section .extension-third-menu>button.clickable:hover{background:var(--ant-color-bg-layout);color:var(--ant-color-primary)} +.extension-menu-section .extension-third-menu>button.clickable.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary);font-weight:600} +.company-side-footer{position:relative;margin:auto 16px 16px;padding:16px 4px 0;border-top:1px solid var(--ant-color-border);display:flex;flex-direction:column;gap:8px;font-size:var(--ant-font-size-sm)} +.company-side-footer>b{color:var(--ant-color-primary)}.company-side-footer>button{height:26px;padding:0;border:0;background:transparent;display:flex;align-items:center;justify-content:space-between;color:var(--ant-color-text-secondary);text-align:left} +.company-model-menu{position:absolute;left:0;right:0;bottom:30px;padding:8px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);box-shadow:none} +.company-model-menu button{width:100%;height:32px;border:0;background:var(--ant-color-bg-container);display:flex;justify-content:space-between;align-items:center;padding:0 8px}.company-model-menu button:hover{background:var(--ant-color-bg-layout)}.company-model-menu span{color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)} .sticky-actions{left:200px} @media(max-width:720px){.company-side-nav{display:none}.app-shell{padding-left:0}.sticky-actions{left:0}} -.site-edit-switcher{display:flex;align-items:center;gap:10px;color:var(--company-muted);font-size:14px}.site-edit-switcher select{width:220px;height:34px;border:1px solid var(--company-border);background:#fff;border-radius:2px;padding:0 30px 0 10px;color:#323233}.site-edit-switcher select:focus{outline:1px solid var(--company-primary);border-color:var(--company-primary)} -.site-edit-tabs{height:64px;background:#fff;border-top:1px solid var(--company-border);border-bottom:1px solid var(--company-border);display:flex;padding:0 24px;gap:0}.site-edit-tabs>button{height:64px;flex:1;min-width:0;border:0;border-bottom:3px solid transparent;background:#fff;color:#6f6f70;display:flex;align-items:center;gap:10px;padding:0 20px;font-size:14px;text-align:left}.site-edit-tabs>button i{font-style:normal;width:26px;height:26px;border:1px solid #c9cfd3;border-radius:50%;display:grid;place-items:center;background:#fff}.site-edit-tabs>button:hover{color:var(--company-primary);background:#fafcfd}.site-edit-tabs>button.active{color:var(--company-primary);border-bottom-color:var(--company-primary);font-weight:600}.site-edit-tabs>button.active i{background:var(--company-primary);border-color:var(--company-primary);color:#fff}.site-step-blank{min-height:calc(100vh - 286px);background:#fff} -.asset-config-shell{min-width:0}.asset-config-tabs{height:66px;display:flex;align-items:flex-end;border:1px solid var(--company-border);border-bottom:0;background:#fff;padding:0 18px;gap:34px}.asset-config-tabs>button{height:65px;min-width:210px;padding:10px 4px 8px;border:0;border-bottom:3px solid transparent;background:transparent;text-align:left;display:flex;flex-direction:column;justify-content:center;gap:4px;color:#777}.asset-config-tabs>button span{font-size:16px;font-weight:600}.asset-config-tabs>button small{font-size:12px;color:#999}.asset-config-tabs>button.active{color:var(--company-primary);border-bottom-color:var(--company-primary)}.asset-config-tabs>button.active small{color:#666}.quick-asset-config{border-top:1px solid var(--company-border);padding-top:14px}.manual-asset-list{border-top:1px solid var(--company-border);padding-top:14px}.manual-asset-list>.panel{margin:0}.manual-asset-filter{padding:0 0 14px;margin-bottom:0}.asset-category{border-top:1px solid var(--company-border);margin:0 -12px}.asset-category>header{height:46px;display:flex;align-items:center;gap:9px;padding:0 14px;background:#f7f7f7}.asset-category>header strong{font-size:14px}.asset-category>header span{color:#888;font-size:12px}.asset-category .company-table{margin:0}.asset-category .company-table th:first-child,.asset-category .company-table td:first-child{padding-left:38px}.asset-group-dialog{width:540px}.dialog-form{display:flex;flex-direction:column;gap:18px;margin:20px 0}.dialog-form input,.dialog-form select{height:38px;border:1px solid var(--company-border);padding:0 10px;background:#fff} -.manual-asset-editor{border-top:1px solid var(--company-border);padding-top:0;background:#fff}.asset-editor-title{height:64px;border:1px solid var(--company-border);border-top:0;display:flex;align-items:center;padding:0 16px;gap:18px}.asset-editor-title>.text-button{margin:0;padding-right:18px;border-right:1px solid #ddd}.asset-editor-title>div{flex:1;display:flex;align-items:baseline;gap:12px}.asset-editor-title h2{font-size:18px;margin:0}.asset-editor-title>div>span{color:#888}.asset-editor-title>.button{margin:0}.asset-editor-workbench{min-height:620px;border:1px solid var(--company-border);border-top:0;display:grid;grid-template-columns:250px 1fr}.asset-editor-side{border-right:1px solid var(--company-border);background:#fafafa}.asset-editor-side>.field{padding:16px;border-bottom:1px solid var(--company-border)}.asset-editor-side>.field input{background:#fff}.asset-batch-entry{width:100%;height:54px;border:0;border-bottom:1px solid var(--company-border);background:#fff;text-align:left;padding:0 16px;font-size:15px}.asset-batch-entry:hover{color:var(--company-primary);background:#f5fbfe}.asset-template-panel{padding:16px;display:flex;flex-direction:column;gap:10px}.asset-template-panel>strong{font-size:16px}.asset-template-panel>select{height:34px;border:1px solid var(--company-border);background:#fff;padding:0 8px}.asset-template-panel>button{min-height:58px;border:1px solid #dce2e6;background:#fff;display:grid;grid-template-columns:24px 1fr;grid-template-rows:1fr 1fr;text-align:left;padding:8px;column-gap:6px}.asset-template-panel>button>span{grid-row:1/3;color:var(--company-primary);align-self:center}.asset-template-panel>button>b{font-size:13px}.asset-template-panel>button>small{font-size:11px;color:#888}.asset-template-panel>button:hover{border-color:var(--company-primary)}.asset-tree-workspace{min-width:0;background:#f7f8f9}.asset-editor-toolbar{height:52px;border-bottom:1px solid var(--company-border);background:#fff;padding:0 12px;display:flex;align-items:center;justify-content:space-between}.asset-editor-toolbar>div{display:flex;align-items:center;gap:8px}.asset-editor-toolbar .button{margin:0;min-width:auto}.asset-tree-search{width:210px;height:30px;border:1px solid var(--company-border);background:#fff;display:flex;align-items:center;padding:0 8px;color:#999}.asset-tree-search input{border:0;outline:0;width:100%;padding-left:7px}.asset-tree-canvas{min-height:567px;padding:28px;overflow:auto}.asset-tree-root-card{width:220px;min-height:54px;margin:0 auto 24px;border:1px solid #b9c3c9;border-left:4px solid var(--company-primary);background:#fff;box-shadow:0 2px 6px #00000014;padding:9px 12px;display:flex;flex-direction:column;gap:3px;position:relative}.asset-tree-root-card:after{content:"";position:absolute;left:50%;bottom:-25px;height:24px;border-left:1px solid #9ecbe0}.asset-tree-root-card small{color:#888}.asset-node-tree{display:flex;justify-content:center;align-items:flex-start;gap:18px}.asset-tree-branch{position:relative;display:flex;flex-direction:column;align-items:center}.asset-node-card{width:190px;min-height:50px;border:1px solid #cbd3d8;background:#fff;box-shadow:0 2px 5px #00000014;display:grid;grid-template-columns:24px 1fr 22px;grid-template-rows:1fr 1fr;text-align:left;padding:7px 8px;column-gap:5px;position:relative}.asset-node-card>span{grid-row:1/3;color:var(--company-primary);align-self:center}.asset-node-card>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-node-card>small{color:#888;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-node-card>em{grid-column:3;grid-row:1/3;align-self:center;justify-self:end;font-style:normal;width:20px;height:20px;border-radius:50%;background:#eee;display:grid;place-items:center;color:#777}.asset-node-card:hover,.asset-node-card.selected{border-color:var(--company-primary);box-shadow:0 0 0 1px var(--company-primary)}.asset-tree-children{margin-top:28px;padding-top:0;display:flex;align-items:flex-start;justify-content:center;gap:14px;position:relative}.asset-tree-children:before{content:"";position:absolute;left:50%;top:-28px;height:28px;border-left:1px solid #9ecbe0}.asset-tree-children>.asset-tree-branch:before{content:"";position:absolute;left:50%;top:-14px;height:14px;border-left:1px solid #9ecbe0}.asset-tree-children>.asset-tree-branch:not(:only-child):after{content:"";position:absolute;top:-14px;left:-7px;right:-7px;border-top:1px solid #9ecbe0}.asset-tree-empty{width:420px;margin:60px auto;text-align:center;display:flex;flex-direction:column;gap:8px;color:#888}.asset-tree-empty b{color:#555}.node-drawer-tabs{height:45px;border-bottom:1px solid var(--company-border);display:flex;margin:-8px 0 20px}.node-drawer-tabs button{border:0;border-bottom:3px solid transparent;background:#fff;padding:0 18px;font-size:14px}.node-drawer-tabs button.active{color:var(--company-primary);border-bottom-color:var(--company-primary)}.node-drawer-form{display:flex;flex-direction:column;gap:18px}.node-drawer-form input,.node-drawer-form select,.node-drawer-form textarea{width:100%;border:1px solid var(--company-border);padding:8px;background:#fff}.node-drawer-form input,.node-drawer-form select{height:38px}.node-drawer-form textarea{min-height:110px}.node-config-list>header,.node-config-list>div{display:grid;grid-template-columns:1fr 1fr 90px;gap:8px;margin-bottom:8px}.node-config-list.binding>header,.node-config-list.binding>div{grid-template-columns:1fr 1fr}.node-config-list>header{color:#777;font-size:12px}.node-config-list input{height:36px;border:1px solid var(--company-border);padding:0 8px}.node-config-list>.button{margin:6px 0 0}.batch-create-dialog{width:min(760px,calc(100vw - 40px))}.batch-create-dialog .node-drawer-tabs{margin:10px 0 18px}.batch-table>header,.batch-table>div{display:grid;grid-template-columns:1.4fr 90px 1.4fr 32px;gap:8px;margin-bottom:8px}.batch-table>header{color:#777;font-size:12px}.batch-table input{height:36px;border:1px solid var(--company-border);padding:0 8px}.batch-table>.button{margin:6px 0 10px}.manual-excel-upload{height:180px;border:1px dashed #aebbc3;background:#fafcfd;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer}.manual-excel-upload>b{font-size:28px;color:var(--company-primary)}.manual-excel-upload>span{font-size:15px}.manual-excel-upload>small{color:#888} -@media(max-width:1100px){.asset-editor-workbench{grid-template-columns:220px 1fr}.asset-node-card{width:160px}.asset-tree-children{flex-direction:column}.asset-tree-children>.asset-tree-branch:after{display:none}.asset-config-tabs{gap:18px}.asset-config-tabs>button{min-width:180px}} +.site-edit-switcher{display:flex;align-items:center;gap:12px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size)}.site-edit-switcher select{width:220px;height:34px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);padding:0 32px 0 12px;color:var(--ant-color-text-base)}.site-edit-switcher select:focus{outline:1px solid var(--ant-color-primary);border-color:var(--ant-color-primary)} +.site-edit-tabs{height:64px;background:var(--ant-color-bg-container);border-top:1px solid var(--ant-color-border);border-bottom:1px solid var(--ant-color-border);display:flex;padding:0 24px;gap:0}.site-edit-tabs>button{height:64px;flex:1;min-width:0;border:0;border-bottom:3px solid transparent;background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);display:flex;align-items:center;gap:12px;padding:0 20px;font-size:var(--ant-font-size);text-align:left}.site-edit-tabs>button i{font-style:normal;width:26px;height:26px;border:1px solid var(--ant-color-border);border-radius:50%;display:grid;place-items:center;background:var(--ant-color-bg-container)}.site-edit-tabs>button:hover{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.site-edit-tabs>button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary);font-weight:600}.site-edit-tabs>button.active i{background:var(--ant-color-primary);border-color:var(--ant-color-primary);color:var(--ant-color-text-light-solid)}.site-step-blank{min-height:calc(100vh - 286px);background:var(--ant-color-bg-container)} +.asset-config-shell{min-width:0}.asset-config-tabs{height:66px;display:flex;align-items:flex-end;border:1px solid var(--ant-color-border);border-bottom:0;background:var(--ant-color-bg-container);padding:0 20px;gap:36px}.asset-config-tabs>button{height:65px;min-width:210px;padding:12px 4px 8px;border:0;border-bottom:3px solid transparent;background:transparent;text-align:left;display:flex;flex-direction:column;justify-content:center;gap:4px;color:var(--ant-color-text-secondary)}.asset-config-tabs>button span{font-size:var(--ant-font-size);font-weight:600}.asset-config-tabs>button small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.asset-config-tabs>button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary)}.asset-config-tabs>button.active small{color:var(--ant-color-text-secondary)}.quick-asset-config{border-top:1px solid var(--ant-color-border);padding-top:16px}.manual-asset-list{border-top:1px solid var(--ant-color-border);padding-top:16px}.manual-asset-list>.panel{margin:0}.manual-asset-filter{padding:0 0 16px;margin-bottom:0}.asset-category{border-top:1px solid var(--ant-color-border);margin:0 -12px}.asset-category>header{height:46px;display:flex;align-items:center;gap:8px;padding:0 16px;background:var(--ant-color-bg-layout)}.asset-category>header strong{font-size:var(--ant-font-size)}.asset-category>header span{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.asset-category .company-table{margin:0}.asset-category .company-table th:first-child,.asset-category .company-table td:first-child{padding-left:40px}.asset-group-dialog{width:540px}.dialog-form{display:flex;flex-direction:column;gap:20px;margin:20px 0}.dialog-form input,.dialog-form select{height:38px;border:1px solid var(--ant-color-border);padding:0 12px;background:var(--ant-color-bg-container)} +.manual-asset-editor{border-top:1px solid var(--ant-color-border);padding-top:0;background:var(--ant-color-bg-container)}.asset-editor-title{height:64px;border:1px solid var(--ant-color-border);border-top:0;display:flex;align-items:center;padding:0 16px;gap:20px}.asset-editor-title>.text-button{margin:0;padding-right:20px;border-right:1px solid var(--ant-color-border)}.asset-editor-title>div{flex:1;display:flex;align-items:baseline;gap:12px}.asset-editor-title h2{font-size:var(--ant-font-size);margin:0}.asset-editor-title>div>span{color:var(--ant-color-text-secondary)}.asset-editor-title>.button{margin:0}.asset-editor-workbench{min-height:620px;border:1px solid var(--ant-color-border);border-top:0;display:grid;grid-template-columns:250px 1fr}.asset-editor-side{border-right:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout)}.asset-editor-side>.field{padding:16px;border-bottom:1px solid var(--ant-color-border)}.asset-editor-side>.field input{background:var(--ant-color-bg-container)}.asset-batch-entry{width:100%;height:54px;border:0;border-bottom:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);text-align:left;padding:0 16px;font-size:var(--ant-font-size)}.asset-batch-entry:hover{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.asset-template-panel{padding:16px;display:flex;flex-direction:column;gap:12px}.asset-template-panel>strong{font-size:var(--ant-font-size)}.asset-template-panel>select{height:34px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 8px}.asset-template-panel>button{min-height:58px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:grid;grid-template-columns:24px 1fr;grid-template-rows:1fr 1fr;text-align:left;padding:8px;column-gap:8px}.asset-template-panel>button>span{grid-row:1/3;color:var(--ant-color-primary);align-self:center}.asset-template-panel>button>b{font-size:var(--ant-font-size-sm)}.asset-template-panel>button>small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.asset-template-panel>button:hover{border-color:var(--ant-color-primary)}.asset-tree-workspace{min-width:0;background:var(--ant-color-bg-layout)}.asset-editor-toolbar{height:52px;border-bottom:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 12px;display:flex;align-items:center;justify-content:space-between}.asset-editor-toolbar>div{display:flex;align-items:center;gap:8px}.asset-editor-toolbar .button{margin:0;min-width:auto}.asset-tree-search{width:210px;height:30px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;align-items:center;padding:0 8px;color:var(--ant-color-text-secondary)}.asset-tree-search input{border:0;outline:0;width:100%;padding-left:8px}.asset-tree-canvas{min-height:567px;padding:28px;overflow:auto}.asset-tree-root-card{width:220px;min-height:54px;margin:0 auto 24px;border:1px solid var(--ant-color-border);border-left:4px solid var(--ant-color-primary);background:var(--ant-color-bg-container);box-shadow:none;padding:8px 12px;display:flex;flex-direction:column;gap:4px;position:relative}.asset-tree-root-card:after{content:"";position:absolute;left:50%;bottom:-25px;height:24px;border-left:1px solid var(--ant-color-primary-bg)}.asset-tree-root-card small{color:var(--ant-color-text-secondary)}.asset-node-tree{display:flex;justify-content:center;align-items:flex-start;gap:20px}.asset-tree-branch{position:relative;display:flex;flex-direction:column;align-items:center}.asset-node-card{width:190px;min-height:50px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);box-shadow:none;display:grid;grid-template-columns:24px 1fr 22px;grid-template-rows:1fr 1fr;text-align:left;padding:8px 8px;column-gap:4px;position:relative}.asset-node-card>span{grid-row:1/3;color:var(--ant-color-primary);align-self:center}.asset-node-card>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-node-card>small{color:var(--ant-color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-node-card>em{grid-column:3;grid-row:1/3;align-self:center;justify-self:end;font-style:normal;width:20px;height:20px;border-radius:50%;background:var(--ant-color-bg-layout);display:grid;place-items:center;color:var(--ant-color-text-secondary)}.asset-node-card:hover,.asset-node-card.selected{border-color:var(--ant-color-primary);box-shadow:none}.asset-tree-children{margin-top:28px;padding-top:0;display:flex;align-items:flex-start;justify-content:center;gap:16px;position:relative}.asset-tree-children:before{content:"";position:absolute;left:50%;top:-28px;height:28px;border-left:1px solid var(--ant-color-primary-bg)}.asset-tree-children>.asset-tree-branch:before{content:"";position:absolute;left:50%;top:-14px;height:14px;border-left:1px solid var(--ant-color-primary-bg)}.asset-tree-children>.asset-tree-branch:not(:only-child):after{content:"";position:absolute;top:-14px;left:-7px;right:-7px;border-top:1px solid var(--ant-color-primary-bg)}.asset-tree-empty{width:420px;margin:60px auto;text-align:center;display:flex;flex-direction:column;gap:8px;color:var(--ant-color-text-secondary)}.asset-tree-empty b{color:var(--ant-color-text-secondary)}.node-drawer-tabs{height:45px;border-bottom:1px solid var(--ant-color-border);display:flex;margin:-8px 0 20px}.node-drawer-tabs button{border:0;border-bottom:3px solid transparent;background:var(--ant-color-bg-container);padding:0 20px;font-size:var(--ant-font-size)}.node-drawer-tabs button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary)}.node-drawer-form{display:flex;flex-direction:column;gap:20px}.node-drawer-form input,.node-drawer-form select,.node-drawer-form textarea{width:100%;border:1px solid var(--ant-color-border);padding:8px;background:var(--ant-color-bg-container)}.node-drawer-form input,.node-drawer-form select{height:38px}.node-drawer-form textarea{min-height:110px}.node-config-list>header,.node-config-list>div{display:grid;grid-template-columns:1fr 1fr 90px;gap:8px;margin-bottom:8px}.node-config-list.binding>header,.node-config-list.binding>div{grid-template-columns:1fr 1fr}.node-config-list>header{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.node-config-list input{height:36px;border:1px solid var(--ant-color-border);padding:0 8px}.node-config-list>.button{margin:8px 0 0}.batch-create-dialog{width:min(760px,calc(100vw - 40px))}.batch-create-dialog .node-drawer-tabs{margin:12px 0 20px}.batch-table>header,.batch-table>div{display:grid;grid-template-columns:1.4fr 90px 1.4fr 32px;gap:8px;margin-bottom:8px}.batch-table>header{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.batch-table input{height:36px;border:1px solid var(--ant-color-border);padding:0 8px}.batch-table>.button{margin:8px 0 12px}.manual-excel-upload{height:180px;border:1px dashed var(--ant-color-border);background:var(--ant-color-bg-layout);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer}.manual-excel-upload>b{font-size:var(--ant-font-size-heading-2);color:var(--ant-color-primary)}.manual-excel-upload>span{font-size:var(--ant-font-size)}.manual-excel-upload>small{color:var(--ant-color-text-secondary)} +@media(max-width:1100px){.asset-editor-workbench{grid-template-columns:220px 1fr}.asset-node-card{width:160px}.asset-tree-children{flex-direction:column}.asset-tree-children>.asset-tree-branch:after{display:none}.asset-config-tabs{gap:20px}.asset-config-tabs>button{min-width:180px}} /* Resource center list pages */ .resource-list-panel>.panel-body{padding:0 16px 12px;overflow-x:auto} @@ -333,191 +322,195 @@ html,body{font-family:Roboto,"Noto Sans SC","Microsoft YaHei",Arial,sans-serif;f .resource-table th:nth-child(3),.resource-table td:nth-child(3){width:76px}.resource-table th:nth-child(4),.resource-table td:nth-child(4),.resource-table th:nth-child(5),.resource-table td:nth-child(5),.resource-table th:nth-child(6),.resource-table td:nth-child(6){width:70px;text-align:center} .resource-table th:nth-child(7),.resource-table td:nth-child(7){width:96px}.resource-table th:nth-child(8),.resource-table td:nth-child(8){width:180px} .domain-resource-table th:first-child,.domain-resource-table td:first-child{width:260px;min-width:260px;text-align:left}.domain-resource-table .company-record-link{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left} -.resource-detail>p{margin:8px 0;color:#666;line-height:1.8;white-space:pre-wrap}.resource-detail-image{display:block;width:100%;max-height:220px;object-fit:contain;border:1px solid var(--company-border);background:#f5f5f5;margin-bottom:20px} +.resource-detail>p{margin:8px 0;color:var(--ant-color-text-secondary);line-height:1.8;white-space:pre-wrap}.resource-detail-image{display:block;width:100%;max-height:220px;object-fit:contain;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);margin-bottom:20px} .device-resource-table{min-width:820px}.device-resource-table th:nth-child(1),.device-resource-table td:nth-child(1){width:280px;min-width:280px;text-align:left}.device-resource-table th:nth-child(2),.device-resource-table td:nth-child(2){width:90px;text-align:center}.device-resource-table th:nth-child(3),.device-resource-table td:nth-child(3){width:110px;text-align:left}.device-resource-table th:nth-child(4),.device-resource-table td.domain-cell{width:240px;min-width:180px;text-align:left;white-space:normal}.device-resource-table th:nth-child(5),.device-resource-table td:nth-child(5){width:64px;text-align:center}.device-resource-table .company-record-link{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left} -.domain-tag-list{display:flex;flex-wrap:wrap;align-items:center;gap:6px} -.ant-tag.tag-new{display:inline-flex;align-items:center;height:24px;line-height:21px;border-radius:12px;padding:0 10px;font-size:13px;white-space:nowrap;margin:0} -.resource-name-cell{display:flex;align-items:center;gap:12px;min-width:0}.resource-name-cell>img,.resource-placeholder{flex:none;width:48px;height:36px;border:1px solid var(--company-border);background:#f5f5f5;object-fit:cover;border-radius:2px}.resource-placeholder{display:grid;place-items:center;color:#999}.resource-name-cell .company-record-link{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left} -.resource-point-list{border-top:1px solid #eee}.resource-point-list>div{height:40px;border-bottom:1px solid #eee;display:flex;align-items:center;justify-content:space-between}.resource-point-list span{color:var(--company-muted)}.resource-point-list>p{color:var(--company-muted)} -.resource-back{height:44px;display:flex;align-items:center;border-bottom:1px solid var(--company-border);margin:0 0 16px}.resource-back .text-button{margin:0} -.style-resource-panel{margin-top:16px}.style-resource-table{min-width:820px}.style-resource-table th:nth-child(1),.style-resource-table td:nth-child(1){width:260px;min-width:260px;text-align:left}.style-resource-table th:nth-child(2),.style-resource-table td:nth-child(2){width:140px}.style-resource-table th:nth-child(3),.style-resource-table td:nth-child(3){width:190px}.style-resource-table th:nth-child(4),.style-resource-table td:nth-child(4){width:130px}.style-resource-table th:nth-child(5),.style-resource-table td:nth-child(5){width:64px;text-align:center}.style-resource-table .company-record-link{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.style-list-thumbnail{display:block;width:96px;height:54px;object-fit:cover;border:1px solid var(--company-border);background:#f5f5f5;border-radius:2px} -.style-drawer>img{display:block;width:100%;max-height:440px;object-fit:contain;background:#f5f5f5;border:1px solid var(--company-border)}.style-drawer dl{display:grid;grid-template-columns:110px 1fr;margin-top:20px}.style-drawer dt,.style-drawer dd{margin:0;padding:12px 0;border-bottom:1px solid #eee}.style-drawer dt{color:var(--company-muted)} +.domain-tag-list{display:flex;flex-wrap:wrap;align-items:center;gap:8px} +.ant-tag.tag-new{display:inline-flex;align-items:center;height:24px;line-height:21px;border-radius:var(--ant-border-radius);padding:0 12px;font-size:var(--ant-font-size-sm);white-space:nowrap;margin:0} +.resource-name-cell{display:flex;align-items:center;gap:12px;min-width:0}.resource-name-cell>img,.resource-placeholder{flex:none;width:48px;height:36px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);object-fit:cover;border-radius:var(--ant-border-radius)}.resource-placeholder{display:grid;place-items:center;color:var(--ant-color-text-secondary)}.resource-name-cell .company-record-link{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left} +.resource-point-list{border-top:1px solid var(--ant-color-border)}.resource-point-list>div{height:40px;border-bottom:1px solid var(--ant-color-border);display:flex;align-items:center;justify-content:space-between}.resource-point-list span{color:var(--ant-color-text-secondary)}.resource-point-list>p{color:var(--ant-color-text-secondary)} +.resource-back{height:44px;display:flex;align-items:center;border-bottom:1px solid var(--ant-color-border);margin:0 0 16px}.resource-back .text-button{margin:0} +.style-resource-panel{margin-top:16px}.style-resource-table{min-width:820px}.style-resource-table th:nth-child(1),.style-resource-table td:nth-child(1){width:260px;min-width:260px;text-align:left}.style-resource-table th:nth-child(2),.style-resource-table td:nth-child(2){width:140px}.style-resource-table th:nth-child(3),.style-resource-table td:nth-child(3){width:190px}.style-resource-table th:nth-child(4),.style-resource-table td:nth-child(4){width:130px}.style-resource-table th:nth-child(5),.style-resource-table td:nth-child(5){width:64px;text-align:center}.style-resource-table .company-record-link{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.style-list-thumbnail{display:block;width:96px;height:54px;object-fit:cover;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);border-radius:var(--ant-border-radius)} +.style-drawer>img{display:block;width:100%;max-height:440px;object-fit:contain;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border)}.style-drawer dl{display:grid;grid-template-columns:110px 1fr;margin-top:20px}.style-drawer dt,.style-drawer dd{margin:0;padding:12px 0;border-bottom:1px solid var(--ant-color-border)}.style-drawer dt{color:var(--ant-color-text-secondary)} /* 生成过程只读终端 */ -.gen-right{display:flex;flex-direction:column;gap:14px} +.gen-right{display:flex;flex-direction:column;gap:16px} .console-panel .panel-body{padding:0} -.gen-console{height:300px;max-height:42vh;overflow-y:auto;background:#0f1722;color:#cfe3f0;font:12px/1.5 "SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;padding:10px 12px} +.gen-console{height:300px;max-height:42vh;overflow-y:auto;background:var(--ant-color-text-base);color:var(--ant-color-primary);font:12px/1.5 "SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;padding:12px 12px} .gen-console pre{margin:0;white-space:pre-wrap;word-break:break-word} .gen-console pre:empty:before{content:""} -.modal-console{margin-top:12px;border:1px solid #1c2a38;border-radius:4px;overflow:hidden} -.modal-console-head{background:#0f1722;color:#9fd0e6;font-size:12px;padding:6px 10px;border-bottom:1px solid #1c2a38} -.modal-console-body{background:#0f1722;color:#cfe3f0;font:12px/1.5 "SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;margin:0;padding:10px 12px;max-height:240px;overflow:auto;white-space:pre-wrap;word-break:break-word} +.modal-console{margin-top:12px;border:1px solid var(--ant-color-primary);border-radius:var(--ant-border-radius);overflow:hidden} +.modal-console-head{background:var(--ant-color-text-base);color:var(--ant-color-primary-bg);font-size:var(--ant-font-size-sm);padding:8px 12px;border-bottom:1px solid var(--ant-color-primary)} +.modal-console-body{background:var(--ant-color-text-base);color:var(--ant-color-primary);font:12px/1.5 "SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;margin:0;padding:12px 12px;max-height:240px;overflow:auto;white-space:pre-wrap;word-break:break-word} /* ===== 视图切换(列表/卡片) ===== */ -.view-toggle{display:inline-flex;border:1px solid var(--line);border-radius:3px;overflow:hidden} -.view-toggle button{border:0;background:#fff;color:#666;height:28px;padding:0 12px;font-size:11px} -.view-toggle button+button{border-left:1px solid var(--line)} -.view-toggle button.active{background:var(--blue);color:#fff} +.view-toggle{display:inline-flex;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);overflow:hidden} +.view-toggle button{border:0;background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);height:28px;padding:0 12px;font-size:var(--ant-font-size-sm)} +.view-toggle button+button{border-left:1px solid var(--ant-color-border)} +.view-toggle button.active{background:var(--ant-color-primary);color:var(--ant-color-text-light-solid)} /* ===== 领域方案卡片视图 ===== */ -.domain-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(245px,1fr));gap:12px;padding:6px 0} -.domain-card{border:1px solid var(--line);border-top:3px solid var(--blue);background:#fff;padding:14px;display:flex;flex-direction:column;gap:9px;cursor:pointer;transition:.15s} -.domain-card:hover{box-shadow:0 6px 18px #0001;border-top-color:var(--blue2)} +.domain-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(245px,1fr));gap:12px;padding:8px 0} +.domain-card{border:1px solid var(--ant-color-border);border-top:3px solid var(--ant-color-primary);background:var(--ant-color-bg-container);padding:16px;display:flex;flex-direction:column;gap:8px;cursor:pointer;transition:.15s} +.domain-card:hover{box-shadow:none;border-top-color:var(--ant-color-primary-active)} .domain-card>header{display:flex;align-items:center;justify-content:space-between;gap:8px} -.domain-card h3{font-size:15px;margin:0} -.domain-card .badge{display:inline-block;align-self:flex-start;background:var(--pale);color:var(--blue2);border:1px solid #cfeaf6;border-radius:10px;padding:1px 10px;font-size:10px} -.domain-card .meta{display:flex;gap:14px;color:#888;font-size:11px} -.domain-card .meta b{color:#333;font-size:13px;margin-right:3px} +.domain-card h3{font-size:var(--ant-font-size);margin:0} +.domain-card .badge{display:inline-block;align-self:flex-start;background:var(--ant-color-primary-bg);color:var(--ant-color-primary-active);border:1px solid var(--ant-color-primary);border-radius:var(--ant-border-radius);padding:4px 12px;font-size:var(--ant-font-size-sm)} +.domain-card .meta{display:flex;gap:16px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} +.domain-card .meta b{color:var(--ant-color-text-base);font-size:var(--ant-font-size-sm);margin-right:4px} /* 领域方案 7 步向导 */ -.placeholder-block{display:flex;flex-direction:column;gap:12px;padding:6px 2px} -.badge.todo{display:inline-block;align-self:flex-start;background:#fff4d8;color:#b37400;border:1px solid #f6bc44;border-radius:10px;padding:2px 10px;font-size:10px} +.placeholder-block{display:flex;flex-direction:column;gap:12px;padding:8px 4px} +.badge.todo{display:inline-block;align-self:flex-start;background:var(--ant-color-primary-bg);color:var(--ant-color-error);border:1px solid var(--ant-color-error-bg);border-radius:var(--ant-border-radius);padding:4px 12px;font-size:var(--ant-font-size-sm)} /* Cube 页面来源徽标 */ -.badge.src-upload{display:inline-flex;align-items:center;gap:2px;background:#e7f5fc;color:#007cc3;border:1px solid #b9e0f4;border-radius:10px;padding:2px 9px;font-size:10px} -.badge.src-ai{display:inline-flex;align-items:center;gap:2px;background:#f3e8ff;color:#7a3cc0;border:1px solid #dcc4f3;border-radius:10px;padding:2px 9px;font-size:10px} -.badge.src-manual{display:inline-flex;align-items:center;gap:2px;background:#f1f2f3;color:#6b7177;border:1px solid #dfe2e4;border-radius:10px;padding:2px 9px;font-size:10px} +.badge.src-upload{display:inline-flex;align-items:center;gap:4px;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);border:1px solid var(--ant-color-primary-bg);border-radius:var(--ant-border-radius);padding:4px 8px;font-size:var(--ant-font-size-sm)} +.badge.src-ai{display:inline-flex;align-items:center;gap:4px;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);border:1px solid var(--ant-color-primary);border-radius:var(--ant-border-radius);padding:4px 8px;font-size:var(--ant-font-size-sm)} +.badge.src-manual{display:inline-flex;align-items:center;gap:4px;background:var(--ant-color-bg-layout);color:var(--ant-color-text-secondary);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:4px 8px;font-size:var(--ant-font-size-sm)} /* 扩展菜单可点击项 */ .extension-menu-section .extension-menu-item.clickable{cursor:pointer} -.extension-menu-section .extension-menu-item.clickable:hover{background:#e8f4fb;color:var(--company-primary)} -.extension-menu-section .extension-menu-item.clickable.active{background:#d7eef9;color:var(--company-primary);font-weight:500} +.extension-menu-section .extension-menu-item.clickable:hover{background:var(--ant-color-bg-layout);color:var(--ant-color-primary)} +.extension-menu-section .extension-menu-item.clickable.active{background:var(--ant-color-primary-bg);color:var(--ant-color-primary);font-weight:600} /* 仪表盘页面 */ -.dashboard-page{min-height:calc(100vh - 56px);padding:20px;background:#f7f8f9;display:flex;align-items:flex-start;justify-content:center} -.dashboard-page img{display:block;max-width:100%;height:auto;background:#fff;box-shadow:0 4px 12px #00000012;border:1px solid #e3e6e8;border-radius:4px} -.domain-preview-canvas{background:#1e2630;height:64vh;border-radius:6px;overflow:auto} +.dashboard-page{min-height:calc(100vh - 56px);padding:20px;background:var(--ant-color-bg-layout);display:flex;align-items:flex-start;justify-content:center} +.dashboard-page img{display:block;max-width:100%;height:auto;background:var(--ant-color-bg-container);box-shadow:none;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius)} +.domain-preview-canvas{background:var(--ant-color-text-base);height:64vh;border-radius:var(--ant-border-radius);overflow:auto} .domain-preview-canvas .dashboard-thumb-live{min-height:0} -.domain-preview-feedback{margin-top:14px} -.domain-preview-feedback textarea{width:100%;border:1px solid #cfd3d7;border-radius:3px;padding:9px;resize:vertical;line-height:1.6;margin-top:6px} +.domain-preview-feedback{margin-top:16px} +.domain-preview-feedback textarea{width:100%;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px;resize:vertical;line-height:1.6;margin-top:8px} .domain-review-pages{display:grid;grid-template-columns:1fr;gap:12px} -.domain-review-page{border:1px solid #e0e3e5;background:#fff;overflow:hidden;transition:border-color .15s,box-shadow .15s} -.domain-review-page:hover{border-color:var(--blue);box-shadow:0 2px 8px #008fd21f} +.domain-review-page{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);overflow:hidden;transition:border-color .15s,box-shadow .15s} +.domain-review-page:hover{border-color:var(--ant-color-primary);box-shadow:none} .domain-review-page .dashboard-thumb-live{border-bottom:0;min-height:240px} -.domain-review-page>div{padding:9px 11px;display:flex;align-items:center;justify-content:space-between;gap:8px} -.domain-review-page h4{margin:0;font-size:13px} -.domain-review-page .review-zoom{font-size:10px;color:#008ed2;white-space:nowrap} +.domain-review-page>div{padding:8px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px} +.domain-review-page h4{margin:0;font-size:var(--ant-font-size-sm)} +.domain-review-page .review-zoom{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary);white-space:nowrap} -.domain-card .card-actions{display:flex;gap:14px;margin-top:2px;padding-top:8px;border-top:1px solid #f0f2f3} +.domain-card .card-actions{display:flex;gap:16px;margin-top:4px;padding-top:8px;border-top:1px solid var(--ant-color-border)} /* ===== 设备模版 ===== */ .device-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px;padding:4px 0} -.device-card{border:1px solid var(--line);background:#fff;padding:14px} -.device-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px} -.device-card-head b{font-size:14px} -.cp-list{margin-top:10px} -.cp-list>b{display:flex;align-items:center;gap:8px;font-size:12px} -.cp-list .data-table{margin-top:6px} +.device-card{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:16px} +.device-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px} +.device-card-head b{font-size:var(--ant-font-size)} +.cp-list{margin-top:12px} +.cp-list>b{display:flex;align-items:center;gap:8px;font-size:var(--ant-font-size-sm)} +.cp-list .data-table{margin-top:8px} .chk{display:flex;flex-wrap:wrap;gap:8px} -.chk-item{display:inline-flex;align-items:center;gap:5px;font-size:12px;background:#f6f8f9;border:1px solid #e6e9eb;border-radius:3px;padding:4px 9px;cursor:pointer} -.chk-item input{margin:0;accent-color:var(--blue)} +.chk-item{display:inline-flex;align-items:center;gap:4px;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:4px 8px;cursor:pointer} +.chk-item input{margin:0;accent-color:var(--ant-color-primary)} /* ===== 方案详情:选用设备模版 ===== */ .device-picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px} -.picker-item{display:flex;align-items:center;gap:9px;border:1px solid var(--line);background:#fff;border-radius:4px;padding:9px 11px;cursor:pointer} -.picker-item.on{border-color:var(--blue);background:#f4fbff} -.picker-item input{margin:0;accent-color:var(--blue)} -.picker-name{font-weight:bold;font-size:12px} -.picker-doms{margin-left:auto;color:#888;font-size:10px;max-width:42%;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.picker-item{display:flex;align-items:center;gap:8px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);border-radius:var(--ant-border-radius);padding:8px 12px;cursor:pointer} +.picker-item.on{border-color:var(--ant-color-primary);background:var(--ant-color-bg-layout)} +.picker-item input{margin:0;accent-color:var(--ant-color-primary)} +.picker-name{font-weight:600;font-size:var(--ant-font-size-sm)} +.picker-doms{margin-left:auto;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);max-width:42%;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} /* ===== 设备模版:图片与采集点编辑 ===== */ -.device-list{display:grid;grid-template-columns:1fr;gap:14px;padding:4px 0} -.device-img-field{margin-top:6px;border:1px dashed #c4ccd2;border-radius:6px;width:160px;height:160px;background:#f7f9fa;display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative} -.device-img-field:hover{border-color:var(--blue);background:#f0f8fc} +.device-list{display:grid;grid-template-columns:1fr;gap:16px;padding:4px 0} +.device-img-field{margin-top:8px;border:1px dashed var(--ant-color-border);border-radius:var(--ant-border-radius);width:160px;height:160px;background:var(--ant-color-bg-layout);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative} +.device-img-field:hover{border-color:var(--ant-color-primary);background:var(--ant-color-bg-layout)} .device-img-field img{width:100%;height:100%;object-fit:cover;display:block} -.device-img-field .device-img-empty{color:#9aa1a5;font-size:12px;text-align:center;padding:0 8px} -.cp-list-head{display:flex;align-items:center;justify-content:space-between;margin:10px 0 6px} +.device-img-field .device-img-empty{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);text-align:center;padding:0 8px} +.cp-list-head{display:flex;align-items:center;justify-content:space-between;margin:12px 0 8px} .cp-list-head span{display:flex;gap:12px} -.cp-editor td{padding:4px 6px;vertical-align:middle} -.cp-editor input,.cp-editor select{width:100%;border:1px solid var(--line);border-radius:3px;height:30px;padding:0 7px;background:#fff;font-size:11px} -.cp-editor input:focus,.cp-editor select:focus{outline:1px solid var(--blue)} -.cp-range-custom{margin-top:5px} +.cp-editor td{padding:4px 8px;vertical-align:middle} +.cp-editor input,.cp-editor select{width:100%;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:30px;padding:0 8px;background:var(--ant-color-bg-container);font-size:var(--ant-font-size-sm)} +.cp-editor input:focus,.cp-editor select:focus{outline:1px solid var(--ant-color-primary)} +.cp-range-custom{margin-top:4px} +/* ===== 设备模板:报警规则 ===== */ +.alarm-rule-block{margin-top:20px;border-top:1px solid var(--ant-color-border);padding-top:8px}.alarm-rule-head{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:16px}.alarm-rule-head>b{font-size:var(--ant-font-size)}.alarm-rule-head>div{display:flex;align-items:center;gap:12px}.alarm-rule-head .button{height:32px;min-width:74px;margin:0}.alarm-rule-search{width:210px;height:32px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);display:flex;align-items:center;gap:8px;padding:0 8px}.alarm-rule-search:focus-within{border-color:var(--ant-color-primary)}.alarm-rule-search input{width:100%;border:0;outline:0;background:transparent}.alarm-rule-table{margin-top:0!important;border-top:1px solid var(--ant-color-border)}.alarm-rule-table th{height:40px;border-bottom:2px solid var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.alarm-rule-table td{height:48px;font-size:var(--ant-font-size-sm)}.alarm-rule-table input[type=checkbox]{accent-color:var(--ant-color-primary)}.alarm-name-link{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-base)}.alarm-name-link:hover{color:var(--ant-color-primary)}.alarm-description-cell{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alarm-switch{width:25px;height:16px;padding:0;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-fill-secondary);position:relative;vertical-align:middle}.alarm-switch i{position:absolute;left:2px;top:2px;width:10px;height:10px;border-radius:50%;background:var(--ant-color-bg-container);transition:left .15s}.alarm-switch.on{border-color:var(--ant-color-primary);background:var(--ant-color-primary)}.alarm-switch.on i{left:11px}.alarm-row-actions{display:flex;align-items:center;gap:4px}.alarm-row-actions .ant-btn{width:30px;height:30px;padding:0;color:var(--ant-color-primary);font-size:var(--ant-font-size)}.alarm-row-actions .ant-btn-dangerous{color:var(--ant-color-error)} +.alarm-rule-drawer .ant-drawer-header{min-height:56px;padding:0 24px;border-bottom:1px solid var(--ant-color-border)}.alarm-rule-drawer .ant-drawer-title{font-size:var(--ant-font-size);font-weight:600}.alarm-rule-drawer .ant-drawer-body{padding:28px 32px 32px;overflow:auto;background:var(--ant-color-bg-container)}.alarm-rule-drawer .ant-drawer-footer{height:56px;padding:12px 24px;border-top:1px solid var(--ant-color-border)}.alarm-rule-form{display:flex;flex-direction:column;gap:28px}.alarm-rule-form section>h3{margin:0 0 20px;padding-left:16px;border-left:4px solid var(--ant-color-primary);font-size:var(--ant-font-size);line-height:19px}.alarm-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 40px;padding:0 20px}.alarm-form-grid label{display:grid;grid-template-columns:100px minmax(0,1fr);align-items:center;gap:0}.alarm-form-grid label.wide{grid-column:1/-1}.alarm-form-grid label>span{text-align:right;padding-right:16px;color:var(--ant-color-text-secondary)}.alarm-form-grid i,.alarm-sensitivity i{font-style:normal;color:var(--ant-color-error)}.alarm-form-grid input,.alarm-form-grid select{width:100%;height:34px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);padding:0 12px;outline:0}.alarm-form-grid input:focus,.alarm-form-grid select:focus{border-color:var(--ant-color-primary)}.alarm-sensitivity{display:flex;align-items:center;gap:12px;padding:0 28px}.alarm-sensitivity>span{margin-right:8px}.alarm-sensitivity label{display:flex;align-items:center;gap:8px}.alarm-sensitivity input[type=radio]{accent-color:var(--ant-color-primary)}.alarm-sensitivity input[type=number]{width:55px;height:34px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 8px}.alarm-sensitivity input:disabled{background:var(--ant-color-bg-layout);color:var(--ant-color-text-disabled)}.alarm-sensitivity em{font-style:normal;color:var(--ant-color-text-secondary);margin-right:16px}.alarm-trigger-panel{border:1px solid var(--ant-color-border);margin:0 20px;min-height:250px}.alarm-trigger-panel>header{height:48px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid var(--ant-color-border)}.alarm-trigger-panel>header b{font-size:var(--ant-font-size)}.alarm-trigger-panel>header>span{display:flex;align-items:center;gap:8px}.alarm-trigger-panel>header .button{height:32px;min-width:72px;margin:0}.alarm-trigger-table{table-layout:fixed}.alarm-trigger-table th{border-bottom:2px solid var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.alarm-trigger-table th:nth-child(1){width:120px}.alarm-trigger-table th:nth-child(2){width:125px}.alarm-trigger-table th:nth-child(3){width:110px}.alarm-trigger-table th:nth-child(4){width:160px}.alarm-trigger-table th:nth-child(5){width:90px}.alarm-trigger-table th:nth-child(6){width:auto}.alarm-trigger-table th:nth-child(7){width:64px}.alarm-trigger-table td{height:48px;padding:8px 8px}.alarm-trigger-table input,.alarm-trigger-table select{width:100%;height:30px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 8px;outline:0}.alarm-trigger-table input:focus,.alarm-trigger-table select:focus{border-color:var(--ant-color-primary)}.alarm-trigger-empty{height:130px;display:grid;place-items:center;color:var(--ant-color-text-secondary)} +@media(max-width:900px){.alarm-rule-drawer .ant-drawer-content-wrapper{width:100vw!important}.alarm-form-grid{grid-template-columns:1fr}.alarm-form-grid label.wide{grid-column:auto}.alarm-sensitivity{flex-wrap:wrap}.alarm-rule-table{min-width:900px}.alarm-rule-block{overflow:auto}} /* ===== 设备模版:列表视图 ===== */ -.list-toolbar{margin-bottom:10px} -.list-toolbar .search{border:1px solid var(--line);border-radius:3px;height:32px;padding:0 10px;width:320px;background:#fff} -.list-toolbar .search:focus{outline:1px solid var(--blue)} +.list-toolbar{margin-bottom:12px} +.list-toolbar .search{border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:32px;padding:0 12px;width:320px;background:var(--ant-color-bg-container)} +.list-toolbar .search:focus{outline:1px solid var(--ant-color-primary)} .device-tpl-list tbody tr{cursor:pointer} -.device-tpl-list tbody tr:hover{background:#f5f9fb} -.tpl-thumb{width:48px;height:34px;object-fit:cover;border:1px solid var(--line);border-radius:3px;display:block;background:#f2f5f7} -.tpl-thumb-empty{color:#c2c8cc} +.device-tpl-list tbody tr:hover{background:var(--ant-color-bg-layout)} +.tpl-thumb{width:48px;height:34px;object-fit:cover;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);display:block;background:var(--ant-color-bg-layout)} +.tpl-thumb-empty{color:var(--ant-color-text-disabled)} /* ===== 自定义确认 / 输入弹窗(替代原生 confirm/prompt,居中显示) ===== */ -.dlg-backdrop{position:fixed;inset:0;z-index:90;background:#00000059;display:flex;align-items:center;justify-content:center;padding:20px} -.dlg-box{background:#fff;border:1px solid #d2d6da;border-radius:8px;box-shadow:0 12px 36px #0003;width:min(420px,100%);max-width:100%;padding:20px 22px} -.dlg-box p{margin:0 0 18px;font-size:13px;line-height:1.6;color:#333;white-space:pre-wrap;word-break:break-word} -.dlg-box input{width:100%;border:1px solid var(--line);border-radius:4px;height:32px;padding:0 9px;font-size:13px} -.dlg-box input:focus{outline:1px solid var(--blue)} -.dlg-actions{display:flex;justify-content:flex-end;gap:10px} +.dlg-backdrop{position:fixed;inset:0;z-index:90;background:color-mix(in srgb,var(--ant-color-bg-mask) 35%,transparent);display:flex;align-items:center;justify-content:center;padding:20px} +.dlg-box{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);box-shadow:0 12px 36px color-mix(in srgb,var(--ant-color-text-base) 20%,transparent);width:min(420px,100%);max-width:100%;padding:20px 24px} +.dlg-box p{margin:0 0 20px;font-size:var(--ant-font-size-sm);line-height:1.6;color:var(--ant-color-text-base);white-space:pre-wrap;word-break:break-word} +.dlg-box input{width:100%;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);height:32px;padding:0 8px;font-size:var(--ant-font-size-sm)} +.dlg-box input:focus{outline:1px solid var(--ant-color-primary)} +.dlg-actions{display:flex;justify-content:flex-end;gap:12px} .dlg-actions .button{margin-left:0} /* 领域方案库 · 管理领域 */ .domain-manage-list{display:flex;flex-direction:column;gap:8px} -.domain-manage-row{display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:#fff} -.domain-manage-name{font-weight:600;color:#333} -.domain-manage-row .muted{font-size:11px} -.text-button.danger{color:#d92d20} +.domain-manage-row{display:flex;align-items:center;gap:12px;padding:8px 12px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container)} +.domain-manage-name{font-weight:600;color:var(--ant-color-text-base)} +.domain-manage-row .muted{font-size:var(--ant-font-size-sm)} +.text-button.danger{color:var(--ant-color-error)} .text-button.danger:hover{text-decoration:underline} -.domain-create-dialog h2{margin:0 0 6px;font-size:20px}.domain-create-dialog p{margin:0 0 16px;color:var(--company-muted)}.domain-create-dialog .dlg-actions{margin-top:20px}.domain-create-dialog .button{min-width:96px;margin:0} -.system-settings-page{max-width:920px;padding-top:16px}.system-settings-page>.panel{margin:0}.system-settings-page .panel-head{height:52px}.settings-form{max-width:680px;display:flex;flex-direction:column;gap:20px;padding:8px 8px 16px}.settings-form .field{gap:8px}.settings-form .field>span{font-size:14px}.settings-form input,.settings-form select{width:100%;height:40px;border:1px solid var(--company-border);border-radius:4px;padding:0 12px;background:#fff}.settings-form input[readonly]{background:#f5f5f5;color:#666}.settings-note{padding:14px 16px;background:#f5f8fa;border-left:3px solid var(--company-primary);display:flex;flex-direction:column;gap:4px}.settings-note span{color:#666}.settings-actions{display:flex;justify-content:flex-start}.settings-actions .button{margin:0}.settings-table-wrap{overflow-x:auto}.settings-domain-table{table-layout:auto;min-width:680px}.settings-domain-table th:first-child,.settings-domain-table td:first-child{width:260px;min-width:260px;text-align:left}.settings-domain-table th:nth-child(2),.settings-domain-table td:nth-child(2){width:auto}.settings-domain-table th:nth-child(3),.settings-domain-table td:nth-child(3){width:130px}.settings-domain-table th:nth-child(4),.settings-domain-table td:nth-child(4){width:100px;text-align:center}.settings-domain-table .text-button{margin:0} +.domain-create-dialog h2{margin:0 0 8px;font-size:var(--ant-font-size-heading-4)}.domain-create-dialog p{margin:0 0 16px;color:var(--ant-color-text-secondary)}.domain-create-dialog .dlg-actions{margin-top:20px}.domain-create-dialog .button{min-width:96px;margin:0} +.system-settings-page{max-width:920px;padding-top:16px}.system-settings-page>.panel{margin:0}.system-settings-page .panel-head{height:52px}.settings-form{max-width:680px;display:flex;flex-direction:column;gap:20px;padding:8px 8px 16px}.settings-form .field{gap:8px}.settings-form .field>span{font-size:var(--ant-font-size)}.settings-form input,.settings-form select{width:100%;height:40px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 12px;background:var(--ant-color-bg-container)}.settings-form input[readonly]{background:var(--ant-color-bg-layout);color:var(--ant-color-text-secondary)}.settings-note{padding:16px 16px;background:var(--ant-color-bg-layout);border-left:3px solid var(--ant-color-primary);display:flex;flex-direction:column;gap:4px}.settings-note span{color:var(--ant-color-text-secondary)}.settings-actions{display:flex;justify-content:flex-start}.settings-actions .button{margin:0}.settings-table-wrap{overflow-x:auto}.settings-domain-table{table-layout:auto;min-width:680px}.settings-domain-table th:first-child,.settings-domain-table td:first-child{width:260px;min-width:260px;text-align:left}.settings-domain-table th:nth-child(2),.settings-domain-table td:nth-child(2){width:auto}.settings-domain-table th:nth-child(3),.settings-domain-table td:nth-child(3){width:130px}.settings-domain-table th:nth-child(4),.settings-domain-table td:nth-child(4){width:100px;text-align:center}.settings-domain-table .text-button{margin:0} /* 领域方案库 · 左侧导航栏「领域分类」行内编辑(删除× / 新增+) */ .domain-nav-row{display:flex;align-items:stretch;flex-wrap:nowrap} -.domain-nav-row>button:not(.domain-nav-del):not(.domain-nav-ok){flex:1;min-width:0;text-align:left;height:41px;border:0;background:transparent;padding:0 14px;display:flex;align-items:center;color:#333;font-size:13px;white-space:nowrap} +.domain-nav-row>button:not(.domain-nav-del):not(.domain-nav-ok){flex:1;min-width:0;text-align:left;height:41px;border:0;background:transparent;padding:0 16px;display:flex;align-items:center;color:var(--ant-color-text-base);font-size:var(--ant-font-size-sm);white-space:nowrap} .domain-nav-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} -.domain-nav-row>button b{width:18px;color:#8a9298;margin-right:6px;font-weight:normal;flex:0 0 auto} -.domain-nav-row>button:hover{background:rgba(0,0,0,.04)} -.domain-nav-row.active{background:rgba(0,140,214,.1)} -.domain-nav-row>button.active:not(.domain-nav-del):not(.domain-nav-ok){background:rgba(0,140,214,.1);color:#008cd6;font-weight:bold} -.domain-nav-row.active>button b,.domain-nav-row>button.active b{color:#009fe3} -.domain-nav-del{border:0;background:transparent;width:30px;color:#b0b6ba;font-size:15px;line-height:1;flex:0 0 auto} -.domain-nav-del:hover{color:var(--red);background:#fdecea} -.domain-nav-ok{border:0;background:transparent;width:30px;color:#1f9d5f;font-size:14px;flex:0 0 auto} -.domain-nav-ok:hover{background:#eafaef} +.domain-nav-row>button b{width:18px;color:var(--ant-color-text-secondary);margin-right:8px;font-weight:400;flex:0 0 auto} +.domain-nav-row>button:hover{background:var(--ant-color-fill-quaternary)} +.domain-nav-row.active{background:var(--ant-color-primary-bg)} +.domain-nav-row>button.active:not(.domain-nav-del):not(.domain-nav-ok){background:var(--ant-color-primary-bg);color:var(--ant-color-primary);font-weight:600} +.domain-nav-row.active>button b,.domain-nav-row>button.active b{color:var(--ant-color-primary)} +.domain-nav-del{border:0;background:transparent;width:30px;color:var(--ant-color-text-disabled);font-size:var(--ant-font-size);line-height:1;flex:0 0 auto} +.domain-nav-del:hover{color:var(--ant-color-error);background:var(--ant-color-bg-layout)} +.domain-nav-ok{border:0;background:transparent;width:30px;color:var(--ant-color-success);font-size:var(--ant-font-size);flex:0 0 auto} +.domain-nav-ok:hover{background:var(--ant-color-bg-layout)} .domain-nav-add-cta{display:block} -.domain-nav-add{height:34px;border:0;background:transparent;text-align:left;padding:0 14px;display:flex;align-items:center;color:#009fe3;font-size:12px;width:100%} -.domain-nav-add:hover{background:rgba(0,140,214,.1)} -.domain-nav-add b{margin-right:6px} -.domain-nav-row.add{align-items:center;padding:4px 6px} -.domain-nav-input{flex:1;min-width:0;margin:0 4px;height:28px;border:1px solid #cfd4d9;border-radius:3px;padding:0 8px;font-size:12px;background:#fff} -.domain-nav-input:focus{outline:1px solid var(--blue);border-color:var(--blue)} +.domain-nav-add{height:34px;border:0;background:transparent;text-align:left;padding:0 16px;display:flex;align-items:center;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm);width:100%} +.domain-nav-add:hover{background:var(--ant-color-primary-bg)} +.domain-nav-add b{margin-right:8px} +.domain-nav-row.add{align-items:center;padding:4px 8px} +.domain-nav-input{flex:1;min-width:0;margin:0 4px;height:28px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:0 8px;font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-container)} +.domain-nav-input:focus{outline:1px solid var(--ant-color-primary);border-color:var(--ant-color-primary)} /* ===== 方案打包 / 方案概览(v0.32) ===== */ .gen-overview{display:block} .gen-overview .panel{margin-bottom:0} -.overview-info{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;padding:4px 2px 14px;border-bottom:1px solid var(--line);margin-bottom:12px} -.overview-info>div{display:flex;flex-direction:column;gap:3px} -.overview-info span{font-size:10px;color:#8b9094;font-weight:bold;letter-spacing:.3px} -.overview-info b{font-size:14px;color:#2b2f33} +.overview-info{display:grid;grid-template-columns:1fr 1fr;gap:12px 20px;padding:4px 4px 16px;border-bottom:1px solid var(--ant-color-border);margin-bottom:12px} +.overview-info>div{display:flex;flex-direction:column;gap:4px} +.overview-info span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);font-weight:600;letter-spacing:.3px} +.overview-info b{font-size:var(--ant-font-size);color:var(--ant-color-text-base)} .overview-info .overview-desc{grid-column:1 / -1} -.overview-info .overview-desc p{margin:0;font-size:12px;color:#555;line-height:1.6;background:#f8fafb;border:1px solid #eef1f3;border-radius:4px;padding:7px 9px} +.overview-info .overview-desc p{margin:0;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.6;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);padding:8px 8px} .overview-tabs{margin:0 0 12px} -.overview-tabs button{padding:0 14px;font-size:12px} +.overview-tabs button{padding:0 16px;font-size:var(--ant-font-size-sm)} .overview-body{min-height:120px} -.overview-body .muted{padding:10px 2px} +.overview-body .muted{padding:12px 4px} .dev-list{display:flex;flex-direction:column;gap:8px} -.dev-row{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff} -.dev-row-head{width:100%;border:0;background:transparent;display:flex;align-items:center;gap:10px;padding:11px 13px;text-align:left;cursor:pointer} -.dev-row-head:hover{background:#f6fafe} -.dev-row-head b{font-size:13px;flex:1} -.dev-count{font-size:11px;color:#008ed2;background:#e7f3f8;border-radius:10px;padding:1px 9px} -.dev-caret{color:#9aa1a5;font-size:11px} -.dev-detail{border-top:1px solid #eef1f3;padding:11px 13px;background:#fbfcfd} -.dev-desc{margin:0 0 8px;font-size:12px;color:#555;line-height:1.7} -.dev-cp b{font-size:11px;color:#333;display:block;margin-bottom:4px} -.dev-cp ul{margin:0;padding-left:18px;color:#666;font-size:11px;line-height:1.8} -.doc-list{display:flex;flex-direction:column;gap:7px} -.doc-item{display:flex;align-items:baseline;gap:10px;padding:9px 11px;border:1px solid var(--line);border-radius:6px;background:#fff} -.doc-item b{font-size:13px;flex:1} -.doc-item .muted{font-size:11px;white-space:nowrap} -.ops-placeholder{display:flex;flex-direction:column;gap:10px;padding:18px;border:1px dashed #cfd6da;border-radius:8px;background:#fafbfc} +.dev-row{border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);overflow:hidden;background:var(--ant-color-bg-container)} +.dev-row-head{width:100%;border:0;background:transparent;display:flex;align-items:center;gap:12px;padding:12px 12px;text-align:left;cursor:pointer} +.dev-row-head:hover{background:var(--ant-color-bg-layout)} +.dev-row-head b{font-size:var(--ant-font-size-sm);flex:1} +.dev-count{font-size:var(--ant-font-size-sm);color:var(--ant-color-primary);background:var(--ant-color-bg-layout);border-radius:var(--ant-border-radius);padding:4px 8px} +.dev-caret{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} +.dev-detail{border-top:1px solid var(--ant-color-border);padding:12px 12px;background:var(--ant-color-bg-layout)} +.dev-desc{margin:0 0 8px;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.7} +.dev-cp b{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-base);display:block;margin-bottom:4px} +.dev-cp ul{margin:0;padding-left:20px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.8} +.doc-list{display:flex;flex-direction:column;gap:8px} +.doc-item{display:flex;align-items:baseline;gap:12px;padding:8px 12px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container)} +.doc-item b{font-size:var(--ant-font-size-sm);flex:1} +.doc-item .muted{font-size:var(--ant-font-size-sm);white-space:nowrap} +.ops-placeholder{display:flex;flex-direction:column;gap:12px;padding:20px;border:1px dashed var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout)} .ops-placeholder .status{align-self:flex-start} -.ops-placeholder p{margin:0;font-size:12px;color:#777;line-height:1.7} +.ops-placeholder p{margin:0;font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.7} /* ===== 方案打包示意图弹窗(v0.32) ===== */ .pkg-modal{width:560px} -.pkg-body{padding:18px} -.pkg-body .hint{margin:0 0 14px} -.pkg-box{display:flex;justify-content:center;padding:6px 0 16px} +.pkg-body{padding:20px} +.pkg-body .hint{margin:0 0 16px} +.pkg-box{display:flex;justify-content:center;padding:8px 0 16px} .pkg-svg{width:240px;height:auto;filter:drop-shadow(0 8px 16px rgba(120,80,20,.18))} -.pkg-items{display:grid;grid-template-columns:1fr 1fr;gap:10px} -.pkg-item{display:flex;align-items:flex-start;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 1px 3px #0000000a} -.pkg-item:hover{border-color:#9ed3ec;box-shadow:0 2px 8px #008fd21f} -.pkg-icon{width:34px;height:34px;flex:0 0 auto;border-radius:7px;background:linear-gradient(135deg,#e8f4fb,#d6ecf7);color:#008ed2;display:grid;place-items:center;font-size:17px} -.pkg-item-text{display:flex;flex-direction:column;gap:3px;min-width:0} -.pkg-item-text b{font-size:13px;color:#2b2f33} -.pkg-item-text small{font-size:10px;color:#888;line-height:1.5} +.pkg-items{display:grid;grid-template-columns:1fr 1fr;gap:12px} +.pkg-item{display:flex;align-items:flex-start;gap:12px;padding:12px 12px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);box-shadow:none} +.pkg-item:hover{border-color:var(--ant-color-primary-bg);box-shadow:none} +.pkg-icon{width:34px;height:34px;flex:0 0 auto;border-radius:var(--ant-border-radius);background:linear-gradient(135deg,var(--ant-color-bg-layout),var(--ant-color-primary-bg));color:var(--ant-color-primary);display:grid;place-items:center;font-size:var(--ant-font-size)} +.pkg-item-text{display:flex;flex-direction:column;gap:4px;min-width:0} +.pkg-item-text b{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-base)} +.pkg-item-text small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary);line-height:1.5} /* WISE-IoT Desk header — aligned to the reference application's native header. */ @@ -544,18 +537,43 @@ html,body{font-family:Roboto,"Noto Sans SC","Microsoft YaHei",Arial,sans-serif;f @media(max-width:560px){.wise-logo-link{display:none}.wise-product-switch{margin-left:4px}.wise-header-actions>button:nth-child(1),.wise-header-actions>button:nth-child(2){display:none}} /* 当前站点资产组编辑器:直接进入详情,不再经过资产组列表。 */ -.asset-editor-loading{min-height:680px;border:1px solid var(--company-border);border-top:0;background:#fff;display:flex;align-items:center;justify-content:center;gap:14px;color:#666}.asset-editor-loading.error{color:#c4382c} -.manual-asset-editor{border-top:1px solid var(--company-border);background:#fff}.asset-editor-title{height:58px;border:1px solid var(--company-border);border-top:0;padding:0 20px}.asset-editor-title>div{display:flex;align-items:baseline;gap:18px}.asset-editor-title h2{font-size:20px;font-weight:600;color:#222}.asset-editor-title>div>span{font-size:13px;color:#777}.asset-editor-workbench{min-height:680px;height:calc(100vh - 306px);grid-template-columns:232px minmax(720px,1fr);border-color:var(--company-border)} -.asset-editor-side{background:#fff;border-right:1px solid var(--company-border)}.asset-editor-side>.field{padding:14px 20px 15px}.asset-editor-side>.field>span{font-size:15px;font-weight:600;color:#222;margin-bottom:9px}.asset-editor-side>.field input{height:36px;border:1px solid #cfd5da;padding:0 9px}.asset-batch-entry{height:72px;padding:0 20px;font-size:15px;color:#222}.asset-batch-entry:hover{color:var(--company-primary);background:#f1f9fd}.asset-template-panel{padding:14px 20px;gap:12px}.asset-template-panel>strong{font-size:16px;font-weight:600;color:#222}.asset-template-panel>select{height:34px}.asset-template-panel>button{min-height:50px;border:0;background:transparent;grid-template-columns:24px 1fr;padding:7px 6px}.asset-template-panel>button:hover{background:#eef8fd;border:0}.asset-template-panel>button>span{font-size:18px}.asset-template-panel>button>small{color:#8a8a8a} -.asset-tree-workspace{background:#fff;display:flex;flex-direction:column;min-height:0}.asset-editor-toolbar{height:49px;min-height:49px;padding:0 14px;position:relative}.asset-editor-toolbar>div{gap:2px}.asset-tool-group,.asset-canvas-tools{display:flex;align-items:center}.asset-tool-button.ant-btn{width:34px;min-width:34px;height:32px;padding:0;border-radius:2px;color:#7f8a91;font-size:17px}.asset-tool-button.ant-btn:not(:disabled){color:var(--company-primary)}.asset-tool-button.ant-btn:hover:not(:disabled){color:#0078b9;background:#eef8fd}.asset-tool-button.primary.ant-btn{color:var(--company-primary)}.asset-tool-divider{height:22px;border-left:1px solid #d9dde0;margin:0 5px}.asset-view-switch{position:absolute;left:50%;transform:translateX(-50%);height:32px;border:1px solid #cfd5da;display:flex!important;gap:0!important}.asset-view-switch button{width:38px;border:0;border-right:1px solid #cfd5da;background:#fff;color:#7b8790;font-size:16px}.asset-view-switch button:last-child{border-right:0}.asset-view-switch button.active{color:var(--company-primary);background:#edf8fd}.asset-tree-search{width:172px;height:30px;margin-left:8px;color:#8b969d}.asset-tree-search input{font-size:12px} -.asset-tree-canvas{flex:1;min-height:625px;padding:44px;overflow:auto;background:#fbfbfb;cursor:grab;touch-action:none;user-select:none}.asset-tree-canvas.dragging{cursor:grabbing}.asset-tree-stage{width:max-content;min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;transform-origin:center center;transition:transform .12s ease}.dragging .asset-tree-stage{transition:none}.asset-node-tree{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:26px;min-width:max-content}.asset-tree-branch{display:flex;flex-direction:row;align-items:center;position:relative}.asset-node-card{width:174px;min-height:42px;grid-template-columns:24px 1fr 22px;grid-template-rows:1fr 1fr;padding:6px 7px;border:0;border-radius:2px;box-shadow:0 2px 7px #00000025;background:#fff;cursor:pointer}.asset-node-card>span{font-size:18px}.asset-node-card>b{font-size:13px;font-weight:500;color:#5d6469}.asset-node-card>small{font-size:11px;color:#92999d}.asset-node-card>button{grid-column:3;grid-row:1/3;align-self:center;justify-self:end;width:19px;height:19px;border:0;border-radius:50%;padding:0;background:#c4c8ca;color:#fff;display:grid;place-items:center;font-size:10px}.asset-node-card>button:hover{background:var(--company-primary)}.asset-node-card:hover,.asset-node-card.selected{border:0;box-shadow:0 0 0 1px var(--company-primary),0 2px 7px #00000025}.asset-node-card.matched{box-shadow:0 0 0 2px #f5a623,0 2px 7px #00000025}.asset-tree-children{margin:0 0 0 34px;padding:0 0 0 34px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:17px;position:relative}.asset-tree-children:before{left:0;top:21px;bottom:21px;height:auto;border-left:1px solid #159bd3}.asset-tree-children>.asset-tree-branch:before{content:"";position:absolute;left:-34px;top:50%;width:34px;height:0;border-top:1px solid #159bd3}.asset-tree-children>.asset-tree-branch:not(:only-child):after{display:none}.asset-tree-branch>.asset-node-card+.asset-tree-children:after{content:"";position:absolute;left:-34px;top:50%;width:34px;border-top:1px solid #159bd3}.asset-tree-empty{margin:80px auto;color:#8a8a8a}.asset-tree-empty b{font-weight:600} -.asset-node-list{flex:1;min-height:625px;overflow:auto;background:#fff}.asset-node-list-head,.asset-node-list>button{height:43px;display:grid;grid-template-columns:minmax(260px,1.5fr) 120px minmax(180px,1fr) 90px;align-items:center;text-align:left;border:0;border-bottom:1px solid #e4e7e9;padding:0 16px;background:#fff;color:#555}.asset-node-list-head{height:40px;background:#f4f6f7;font-size:12px;font-weight:600;color:#616b71}.asset-node-list>button:hover,.asset-node-list>button.selected{background:#eef8fd}.asset-node-list>button.selected{box-shadow:inset 3px 0 var(--company-primary)}.asset-node-list>button>span:first-child{color:#333} +.asset-editor-loading{min-height:680px;border:1px solid var(--ant-color-border);border-top:0;background:var(--ant-color-bg-container);display:flex;align-items:center;justify-content:center;gap:16px;color:var(--ant-color-text-secondary)}.asset-editor-loading.error{color:var(--ant-color-error)} +.manual-asset-editor{border-top:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.asset-editor-title{height:58px;border:1px solid var(--ant-color-border);border-top:0;padding:0 20px}.asset-editor-title>div{display:flex;align-items:baseline;gap:20px}.asset-editor-title h2{font-size:var(--ant-font-size-heading-4);font-weight:600;color:var(--ant-color-text-base)}.asset-editor-title>div>span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.asset-editor-workbench{min-height:680px;height:calc(100vh - 306px);grid-template-columns:232px minmax(720px,1fr);border-color:var(--ant-color-border)} +.asset-editor-side{background:var(--ant-color-bg-container);border-right:1px solid var(--ant-color-border)}.asset-editor-side>.field{padding:16px 20px 16px}.asset-editor-side>.field>span{font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base);margin-bottom:8px}.asset-editor-side>.field input{height:36px;border:1px solid var(--ant-color-border);padding:0 8px}.asset-batch-entry{height:72px;padding:0 20px;font-size:var(--ant-font-size);color:var(--ant-color-text-base)}.asset-batch-entry:hover{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.asset-template-panel{padding:16px 20px;gap:12px}.asset-template-panel>strong{font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base)}.asset-template-panel>select{height:34px}.asset-template-panel>button{min-height:50px;border:0;background:transparent;grid-template-columns:24px 1fr;padding:8px 8px}.asset-template-panel>button:hover{background:var(--ant-color-bg-layout);border:0}.asset-template-panel>button>span{font-size:var(--ant-font-size)}.asset-template-panel>button>small{color:var(--ant-color-text-secondary)} +.asset-tree-workspace{background:var(--ant-color-bg-container);display:flex;flex-direction:column;min-height:0}.asset-editor-toolbar{height:49px;min-height:49px;padding:0 16px;position:relative}.asset-editor-toolbar>div{gap:4px}.asset-tool-group,.asset-canvas-tools{display:flex;align-items:center}.asset-tool-button.ant-btn{width:34px;min-width:34px;height:32px;padding:0;border-radius:var(--ant-border-radius);color:var(--ant-color-text-secondary);font-size:var(--ant-font-size)}.asset-tool-button.ant-btn:not(:disabled){color:var(--ant-color-primary)}.asset-tool-button.ant-btn:hover:not(:disabled){color:var(--ant-color-primary-hover);background:var(--ant-color-bg-layout)}.asset-tool-button.primary.ant-btn{color:var(--ant-color-primary)}.asset-tool-divider{height:22px;border-left:1px solid var(--ant-color-border);margin:0 4px}.asset-view-switch{position:absolute;left:50%;transform:translateX(-50%);height:32px;border:1px solid var(--ant-color-border);display:flex!important;gap:0!important}.asset-view-switch button{width:38px;border:0;border-right:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);font-size:var(--ant-font-size)}.asset-view-switch button:last-child{border-right:0}.asset-view-switch button.active{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.asset-tree-search{width:172px;height:30px;margin-left:8px;color:var(--ant-color-text-secondary)}.asset-tree-search input{font-size:var(--ant-font-size-sm)} +.asset-tree-canvas{flex:1;min-height:625px;padding:44px;overflow:auto;background:var(--ant-color-bg-layout);cursor:grab;touch-action:none;user-select:none}.asset-tree-canvas.dragging{cursor:grabbing}.asset-tree-stage{width:max-content;min-width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;transform-origin:center center;transition:transform .12s ease}.dragging .asset-tree-stage{transition:none}.asset-node-tree{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:28px;min-width:max-content}.asset-tree-branch{display:flex;flex-direction:row;align-items:center;position:relative}.asset-node-card{width:174px;min-height:42px;grid-template-columns:24px 1fr 22px;grid-template-rows:1fr 1fr;padding:8px 8px;border:0;border-radius:var(--ant-border-radius);box-shadow:none;background:var(--ant-color-bg-container);cursor:pointer}.asset-node-card>span{font-size:var(--ant-font-size)}.asset-node-card>b{font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary)}.asset-node-card>small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.asset-node-card>button{grid-column:3;grid-row:1/3;align-self:center;justify-self:end;width:19px;height:19px;border:0;border-radius:50%;padding:0;background:var(--ant-color-text-disabled);color:var(--ant-color-text-light-solid);display:grid;place-items:center;font-size:var(--ant-font-size-sm)}.asset-node-card>button:hover{background:var(--ant-color-primary)}.asset-node-card:hover,.asset-node-card.selected{border:0;box-shadow:none}.asset-node-card.matched{box-shadow:none}.asset-tree-children{margin:0 0 0 36px;padding:0 0 0 36px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:16px;position:relative}.asset-tree-children:before{left:0;top:21px;bottom:21px;height:auto;border-left:1px solid var(--ant-color-primary)}.asset-tree-children>.asset-tree-branch:before{content:"";position:absolute;left:-34px;top:50%;width:34px;height:0;border-top:1px solid var(--ant-color-primary)}.asset-tree-children>.asset-tree-branch:not(:only-child):after{display:none}.asset-tree-branch>.asset-node-card+.asset-tree-children:after{content:"";position:absolute;left:-34px;top:50%;width:34px;border-top:1px solid var(--ant-color-primary)}.asset-tree-empty{margin:80px auto;color:var(--ant-color-text-secondary)}.asset-tree-empty b{font-weight:600} +.asset-node-list{flex:1;min-height:625px;overflow:auto;background:var(--ant-color-bg-container)}.asset-node-list-head,.asset-node-list>button{height:43px;display:grid;grid-template-columns:minmax(260px,1.5fr) 120px minmax(180px,1fr) 90px;align-items:center;text-align:left;border:0;border-bottom:1px solid var(--ant-color-border);padding:0 16px;background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary)}.asset-node-list-head{height:40px;background:var(--ant-color-bg-layout);font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary)}.asset-node-list>button:hover,.asset-node-list>button.selected{background:var(--ant-color-bg-layout)}.asset-node-list>button.selected{box-shadow:none}.asset-node-list>button>span:first-child{color:var(--ant-color-text-base)} @media(max-width:1100px){.asset-editor-workbench{grid-template-columns:210px minmax(660px,1fr)}.asset-editor-title span{display:none}.asset-tree-search{width:130px}.asset-zoom-value{display:none}} /* Asset 节点配置抽屉:对齐原资产设定的三 Tab 信息架构。 */ -.asset-node-drawer .ant-drawer-header{min-height:56px;padding:0 24px;border-bottom:1px solid #d7dade}.asset-node-drawer .ant-drawer-title{font-size:16px;font-weight:500;color:#222}.asset-node-drawer .ant-drawer-body{padding:0;overflow:auto}.asset-node-drawer .ant-drawer-footer{height:56px;padding:11px 24px;border-top:1px solid #d7dade;background:#fff}.node-drawer-footer{display:flex;justify-content:flex-end;align-items:center;gap:8px}.node-drawer-footer .button{margin:0} -.asset-node-drawer .node-drawer-tabs{height:49px;margin:0;padding-left:20px;gap:0;border-bottom:1px solid #d7dade}.asset-node-drawer .node-drawer-tabs button{height:49px;padding:0 20px;border-right:1px solid #d7dade;border-bottom:3px solid transparent;color:#777}.asset-node-drawer .node-drawer-tabs button:first-child{padding-left:0;margin-right:20px}.asset-node-drawer .node-drawer-tabs button.active{color:#555;border-bottom-color:var(--company-primary)} -.node-config-page{padding:24px 24px 48px;display:flex;flex-direction:column;gap:38px}.node-config-section>h3{height:22px;line-height:22px;margin:0 0 24px;padding-left:17px;border-left:4px solid var(--company-primary);font-size:16px;font-weight:600;color:#333}.node-config-section>h4,.binding-parameter-head h4{margin:0 0 12px;font-size:16px;color:#3f4549}.node-id-row{display:grid;grid-template-columns:105px 1fr;align-items:center;max-width:420px;margin:0 0 20px 47px;color:#777}.node-id-row b{font-weight:400;color:#56606a}.node-basic-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 36px}.node-basic-grid .field,.node-property-grid .field{display:grid;grid-template-columns:105px minmax(0,1fr);align-items:center;gap:12px}.node-basic-grid .field>span,.node-property-grid .field>span{font-size:14px;font-weight:400;color:#666;text-align:right}.node-basic-grid .field input,.node-basic-grid .field select,.node-property-grid .field input{width:100%;height:34px;padding:0 10px;border:1px solid #ced5da}.node-basic-grid .field:nth-child(5){grid-column:1/-1}.node-image-row{display:flex;align-items:flex-start;gap:12px;margin-left:20px}.node-image-preview{width:108px;height:108px;border:1px solid #cbd2d7;background:#fafafa;display:grid;place-items:center;overflow:hidden;color:#9da8ae;font-size:36px;cursor:pointer}.node-image-preview img{width:100%;height:100%;object-fit:contain}.node-image-row>div{display:flex;flex-direction:column;align-items:flex-start;gap:5px}.node-upload-link{color:var(--company-primary);font-size:14px;cursor:pointer}.node-image-row small{font-size:12px;color:#aaa}.node-image-row .text-button{margin:3px 0 0}.node-config-section .ant-qrcode{margin-left:20px;padding:0;background:#fff} -.node-property-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 36px}.node-property-grid .field{min-width:0}.node-property-grid .field:nth-last-child(2){grid-column:auto}.node-property-grid input[type="date"]{color:#666} -.binding-page{gap:28px}.edge-component-table{border:1px solid #d5dade;max-height:200px;overflow:auto}.edge-component-table>header,.edge-component-table>div{min-height:45px;display:grid;grid-template-columns:1.2fr 1fr 1fr 1.2fr 88px;align-items:center;padding:0 8px;border-bottom:1px solid #dfe3e6}.edge-component-table>header{min-height:38px;background:#f4f5f6;border-bottom:2px solid var(--company-primary);font-size:12px;font-weight:600;color:#444}.edge-component-table>div:last-child{border-bottom:0}.edge-component-table>div.active{background:#f1f9fd}.edge-component-table b{font-weight:400}.edge-component-table>div>span:last-child{display:flex;justify-content:flex-end;gap:7px}.edge-component-table button{width:28px;height:28px;border:0;background:transparent;color:var(--company-primary);font-size:17px}.edge-component-table button:hover{background:#e8f6fc}.binding-component-tabs{height:42px;display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}.binding-component-tabs button{height:34px;padding:0 20px;border:0;border-right:1px solid #d7dade;background:#fff;color:#a0a6aa}.binding-component-tabs button:last-child{border-right:0}.binding-component-tabs button.active{color:var(--company-primary);font-weight:600}.binding-parameter-head{display:flex;align-items:center;justify-content:space-between;border:1px solid #d5dade;border-bottom:0;padding:8px 12px}.binding-parameter-head h4{margin:0}.binding-parameter-head .button{height:30px;margin:0}.binding-parameter-table{border:1px solid #d5dade;overflow:auto}.binding-parameter-table>header,.binding-parameter-table>div:not(.binding-empty){min-width:760px;display:grid;grid-template-columns:1fr 1.2fr 70px 64px 1fr 1.2fr 42px;align-items:center;gap:6px;padding:0 8px}.binding-parameter-table>header{height:38px;background:#f4f5f6;border-bottom:2px solid var(--company-primary);font-size:12px;font-weight:600}.binding-parameter-table>div:not(.binding-empty){min-height:44px;border-bottom:1px solid #e1e4e6}.binding-parameter-table input{width:100%;height:30px;border:1px solid #d3d8dc;padding:0 6px}.binding-parameter-table .trash{color:#d84b3f}.binding-empty{height:120px;display:grid;place-items:center;color:#999}.binding-import-backdrop{z-index:1300}.binding-import-dialog{width:min(620px,calc(100vw - 48px))} +.asset-node-drawer .ant-drawer-header{min-height:56px;padding:0 24px;border-bottom:1px solid var(--ant-color-border)}.asset-node-drawer .ant-drawer-title{font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base)}.asset-node-drawer .ant-drawer-body{padding:0;overflow:auto}.asset-node-drawer .ant-drawer-footer{height:56px;padding:12px 24px;border-top:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.node-drawer-footer{display:flex;justify-content:flex-end;align-items:center;gap:8px}.node-drawer-footer .button{margin:0} +.asset-node-drawer .node-drawer-tabs{height:49px;margin:0;padding-left:20px;gap:0;border-bottom:1px solid var(--ant-color-border)}.asset-node-drawer .node-drawer-tabs button{height:49px;padding:0 20px;border-right:1px solid var(--ant-color-border);border-bottom:3px solid transparent;color:var(--ant-color-text-secondary)}.asset-node-drawer .node-drawer-tabs button:first-child{padding-left:0;margin-right:20px}.asset-node-drawer .node-drawer-tabs button.active{color:var(--ant-color-text-secondary);border-bottom-color:var(--ant-color-primary)} +.node-config-page{padding:24px 24px 48px;display:flex;flex-direction:column;gap:40px}.node-config-section>h3{height:22px;line-height:22px;margin:0 0 24px;padding-left:16px;border-left:4px solid var(--ant-color-primary);font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base)}.node-config-section>h4,.binding-parameter-head h4{margin:0 0 12px;font-size:var(--ant-font-size);color:var(--ant-color-text-secondary)}.node-id-row{display:grid;grid-template-columns:105px 1fr;align-items:center;max-width:420px;margin:0 0 20px 48px;color:var(--ant-color-text-secondary)}.node-id-row b{font-weight:400;color:var(--ant-color-text-secondary)}.node-basic-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 36px}.node-basic-grid .field,.node-property-grid .field{display:grid;grid-template-columns:105px minmax(0,1fr);align-items:center;gap:12px}.node-basic-grid .field>span,.node-property-grid .field>span{font-size:var(--ant-font-size);font-weight:400;color:var(--ant-color-text-secondary);text-align:right}.node-basic-grid .field input,.node-basic-grid .field select,.node-property-grid .field input{width:100%;height:34px;padding:0 12px;border:1px solid var(--ant-color-border)}.node-basic-grid .field:nth-child(5){grid-column:1/-1}.node-image-row{display:flex;align-items:flex-start;gap:12px;margin-left:20px}.node-image-preview{width:108px;height:108px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);display:grid;place-items:center;overflow:hidden;color:var(--ant-color-text-disabled);font-size:var(--ant-font-size-heading-2);cursor:pointer}.node-image-preview img{width:100%;height:100%;object-fit:contain}.node-image-row>div{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.node-upload-link{color:var(--ant-color-primary);font-size:var(--ant-font-size);cursor:pointer}.node-image-row small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-disabled)}.node-image-row .text-button{margin:4px 0 0}.node-config-section .ant-qrcode{margin-left:20px;padding:0;background:var(--ant-color-bg-container)} +.node-property-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 36px}.node-property-grid .field{min-width:0}.node-property-grid .field:nth-last-child(2){grid-column:auto}.node-property-grid input[type="date"]{color:var(--ant-color-text-secondary)} +.binding-page{gap:28px}.edge-component-table{border:1px solid var(--ant-color-border);max-height:200px;overflow:auto}.edge-component-table>header,.edge-component-table>div{min-height:45px;display:grid;grid-template-columns:1.2fr 1fr 1fr 1.2fr 88px;align-items:center;padding:0 8px;border-bottom:1px solid var(--ant-color-border)}.edge-component-table>header{min-height:38px;background:var(--ant-color-bg-layout);border-bottom:2px solid var(--ant-color-primary);font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary)}.edge-component-table>div:last-child{border-bottom:0}.edge-component-table>div.active{background:var(--ant-color-bg-layout)}.edge-component-table b{font-weight:400}.edge-component-table>div>span:last-child{display:flex;justify-content:flex-end;gap:8px}.edge-component-table button{width:28px;height:28px;border:0;background:transparent;color:var(--ant-color-primary);font-size:var(--ant-font-size)}.edge-component-table button:hover{background:var(--ant-color-bg-layout)}.binding-component-tabs{height:42px;display:flex;align-items:flex-end;justify-content:center;margin-bottom:12px}.binding-component-tabs button{height:34px;padding:0 20px;border:0;border-right:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);color:var(--ant-color-text-disabled)}.binding-component-tabs button:last-child{border-right:0}.binding-component-tabs button.active{color:var(--ant-color-primary);font-weight:600}.binding-parameter-head{display:flex;align-items:center;justify-content:space-between;border:1px solid var(--ant-color-border);border-bottom:0;padding:8px 12px}.binding-parameter-head h4{margin:0}.binding-parameter-head .button{height:30px;margin:0}.binding-parameter-table{border:1px solid var(--ant-color-border);overflow:auto}.binding-parameter-table>header,.binding-parameter-table>div:not(.binding-empty){min-width:760px;display:grid;grid-template-columns:1fr 1.2fr 70px 64px 1fr 1.2fr 42px;align-items:center;gap:8px;padding:0 8px}.binding-parameter-table>header{height:38px;background:var(--ant-color-bg-layout);border-bottom:2px solid var(--ant-color-primary);font-size:var(--ant-font-size-sm);font-weight:600}.binding-parameter-table>div:not(.binding-empty){min-height:44px;border-bottom:1px solid var(--ant-color-border)}.binding-parameter-table input{width:100%;height:30px;border:1px solid var(--ant-color-border);padding:0 8px}.binding-parameter-table .trash{color:var(--ant-color-error)}.binding-empty{height:120px;display:grid;place-items:center;color:var(--ant-color-text-secondary)}.binding-import-backdrop{z-index:1300}.binding-import-dialog{width:min(620px,calc(100vw - 48px))} @media(max-width:1200px){.asset-node-drawer .ant-drawer-content-wrapper{width:78vw!important}.node-basic-grid,.node-property-grid{grid-template-columns:1fr}.node-basic-grid .field:nth-child(5){grid-column:auto}}@media(max-width:760px){.asset-node-drawer .ant-drawer-content-wrapper{width:100vw!important}.node-basic-grid .field,.node-property-grid .field{grid-template-columns:90px minmax(0,1fr)}.node-config-page{padding:20px 16px}.edge-component-table>header,.edge-component-table>div{grid-template-columns:1.2fr 1fr 1fr 72px}.edge-component-table>header>span:nth-child(4),.edge-component-table>div>span:nth-child(4){display:none}} + +/* 领域方案:从分步编辑调整为领域能力展示。 */ +.domain-showcase-page{display:flex;flex-direction:column;gap:16px}.domain-showcase-intro{min-height:92px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-top:3px solid var(--ant-color-primary);display:grid;grid-template-columns:150px 1fr auto;align-items:center;padding:16px 20px;gap:24px}.domain-showcase-intro>div:first-child{display:flex;align-items:baseline;gap:8px;color:var(--ant-color-text-secondary)}.domain-showcase-intro>div:first-child b{font-size:var(--ant-font-size-heading-2);color:var(--ant-color-text-base)}.domain-showcase-intro>p{margin:0;padding-left:24px;border-left:1px solid var(--ant-color-border);color:var(--ant-color-text-secondary);line-height:1.8}.domain-showcase-total{display:flex;gap:20px}.domain-showcase-total span{display:flex;flex-direction:column;gap:4px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.domain-showcase-total b{color:var(--ant-color-text-base);font-size:var(--ant-font-size)}.domain-showcase-filter{height:52px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);display:flex;align-items:center;gap:12px;padding:12px 12px}.domain-showcase-filter label{width:300px;height:32px;border:1px solid var(--ant-color-border);display:flex;align-items:center;padding:0 12px;color:var(--ant-color-text-secondary)}.domain-showcase-filter label:focus-within{border-color:var(--ant-color-primary)}.domain-showcase-filter input{width:100%;height:30px;border:0;outline:0;padding-left:8px}.domain-showcase-filter select{height:32px;min-width:180px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 32px 0 12px}.domain-showcase-filter>span{margin-left:auto;color:var(--ant-color-text-secondary)}.domain-showcase-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.domain-showcase-card{min-height:340px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-top:3px solid var(--ant-color-primary);padding:20px;display:flex;flex-direction:column;cursor:pointer;transition:box-shadow .15s,border-color .15s}.domain-showcase-card:hover{border-color:var(--ant-color-primary-bg);box-shadow:none}.domain-showcase-card.violet{border-top-color:var(--ant-color-primary)}.domain-showcase-card.green{border-top-color:var(--ant-color-success)}.domain-showcase-card.gray{border-top-color:var(--ant-color-border)}.domain-showcase-card>header{height:42px;display:flex;align-items:flex-start;justify-content:space-between}.domain-showcase-card>header>div:last-child{display:flex;align-items:center;gap:8px}.domain-showcase-mark{font-size:var(--ant-font-size-sm);font-weight:600;letter-spacing:1px;color:var(--ant-color-primary);background:var(--ant-color-bg-layout);padding:8px 8px}.violet .domain-showcase-mark{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.green .domain-showcase-mark{color:var(--ant-color-success);background:var(--ant-color-bg-layout)}.gray .domain-showcase-mark{color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout)}.domain-showcase-card h2{font-size:var(--ant-font-size);margin:16px 0 8px;color:var(--ant-color-text-base)}.domain-showcase-card>p{height:44px;margin:0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm);line-height:1.75;overflow:hidden}.domain-showcase-capabilities{display:grid;grid-template-columns:1fr 1fr;margin-top:16px;border:1px solid var(--ant-color-border)}.domain-showcase-capabilities>span{min-height:62px;padding:12px;display:grid;grid-template-columns:22px 1fr;grid-template-rows:auto auto;align-items:center;border-right:1px solid var(--ant-color-border);border-bottom:1px solid var(--ant-color-border)}.domain-showcase-capabilities>span:nth-child(2n){border-right:0}.domain-showcase-capabilities>span:nth-last-child(-n+2){border-bottom:0}.domain-showcase-capabilities svg{grid-row:1/3;color:var(--ant-color-primary);font-size:var(--ant-font-size)}.domain-showcase-capabilities b{font-size:var(--ant-font-size-sm)}.domain-showcase-capabilities small{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.domain-showcase-card>footer{margin-top:auto;padding-top:16px;display:flex;align-items:center;justify-content:space-between;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.domain-showcase-card>footer button{height:30px;border:0;background:transparent;color:var(--ant-color-primary);padding:0;font-weight:600}.domain-showcase-card>footer button:hover{text-decoration:underline} + +.domain-capability-detail{display:flex;flex-direction:column;gap:12px}.domain-capability-back{align-self:flex-start;border:0;background:transparent;color:var(--ant-color-primary);padding:0;height:28px}.domain-capability-head{min-height:156px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);border-top:3px solid var(--ant-color-primary);padding:24px;display:grid;grid-template-columns:76px 1fr auto;gap:20px;align-items:center}.domain-capability-head.violet{border-top-color:var(--ant-color-primary)}.domain-capability-head.green{border-top-color:var(--ant-color-success)}.domain-capability-head.gray{border-top-color:var(--ant-color-border)}.domain-capability-code{width:76px;height:76px;display:grid;place-items:center;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);font-weight:600;font-size:var(--ant-font-size-sm);letter-spacing:.8px}.domain-capability-head.violet .domain-capability-code{color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.domain-capability-head.green .domain-capability-code{color:var(--ant-color-success);background:var(--ant-color-bg-layout)}.domain-capability-head.gray .domain-capability-code{color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout)}.domain-capability-copy>div{display:flex;align-items:center;gap:8px}.domain-capability-copy>div>span:last-child{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.domain-capability-copy h2{margin:8px 0 4px;font-size:var(--ant-font-size-heading-3)}.domain-capability-copy p{margin:0;color:var(--ant-color-text-secondary);line-height:1.6}.domain-capability-copy small{display:block;margin-top:8px;color:var(--ant-color-text-secondary)}.domain-capability-actions{display:flex;align-items:center;gap:4px}.domain-capability-summary{height:66px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);display:grid;grid-template-columns:repeat(4,1fr)}.domain-capability-summary span{display:flex;align-items:baseline;justify-content:center;gap:8px;border-right:1px solid var(--ant-color-border);color:var(--ant-color-text-secondary)}.domain-capability-summary span:last-child{border-right:0}.domain-capability-summary b{font-size:var(--ant-font-size-heading-3);color:var(--ant-color-text-base)}.domain-capability-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.domain-capability-card{min-height:286px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);display:flex;flex-direction:column}.domain-capability-card>header{height:72px;padding:12px 16px;border-bottom:1px solid var(--ant-color-border);display:grid;grid-template-columns:38px 1fr auto;align-items:center;gap:12px}.domain-capability-icon{width:36px;height:36px;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center;font-size:var(--ant-font-size-heading-4)}.domain-capability-card>header h3{margin:0 0 4px;font-size:var(--ant-font-size)}.domain-capability-card>header p{margin:0;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.domain-capability-card>header>strong{font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary);background:var(--ant-color-bg-layout);padding:4px 8px}.domain-capability-body{min-height:158px;padding:16px;background:var(--ant-color-bg-layout)}.domain-capability-card>footer{height:50px;margin-top:auto;border-top:1px solid var(--ant-color-border);display:flex;align-items:center;justify-content:flex-end;padding:0 12px;gap:8px}.domain-capability-card>footer button{height:29px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);color:var(--ant-color-text-secondary);padding:0 12px}.domain-capability-card>footer button:first-child{color:var(--ant-color-primary);border-color:var(--ant-color-primary-bg)}.domain-capability-card>footer button.capability-edit-button{margin-right:auto}.domain-capability-card>footer button:hover{border-color:var(--ant-color-primary);color:var(--ant-color-primary)}.capability-device-tags{display:flex;flex-wrap:wrap;gap:8px}.capability-device-tags span{height:28px;display:flex;align-items:center;gap:8px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:0 8px;color:var(--ant-color-text-secondary)}.capability-device-tags b{min-width:18px;height:18px;line-height:18px;text-align:center;border-radius:var(--ant-border-radius);background:var(--ant-color-bg-layout);color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.capability-mini-tree{margin-top:16px;height:62px;display:flex;align-items:center;position:relative;padding-left:4px}.capability-mini-tree>i{width:10px;height:10px;border:2px solid var(--ant-color-primary);border-radius:50%;margin-right:8px}.capability-mini-tree>b{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:8px 12px;font-size:var(--ant-font-size-sm)}.capability-mini-tree>span{position:relative;margin-left:28px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:8px 8px;font-size:var(--ant-font-size-sm)}.capability-mini-tree>span:before{content:"";position:absolute;left:-29px;top:50%;width:28px;border-top:1px solid var(--ant-color-primary)}.capability-page-pair{display:grid;grid-template-columns:1fr 1fr;gap:16px;height:128px}.mini-dashboard,.mini-twin{position:relative;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout);padding:20px 8px 8px;display:grid;grid-template-columns:1.2fr .8fr;gap:4px}.mini-dashboard:before{content:"仪表板";position:absolute;left:8px;top:5px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.mini-dashboard i{background:var(--ant-color-primary)}.mini-dashboard i:nth-child(2),.mini-dashboard i:nth-child(3){background:var(--ant-color-primary-bg)}.mini-twin{overflow:hidden;background:linear-gradient(160deg,var(--ant-color-bg-layout),var(--ant-color-bg-layout))}.mini-twin:before{content:"SC 数字孪生";position:absolute;left:8px;top:5px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.mini-twin i{width:38px;height:27px;background:var(--ant-color-primary);transform:skewY(-18deg);align-self:end;box-shadow:none}.mini-twin span{position:absolute;right:7px;bottom:5px;color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.capability-file-list{display:flex;flex-direction:column;gap:8px}.capability-file-list span{height:36px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;align-items:center;padding:0 8px;color:var(--ant-color-text-secondary)}.capability-file-list b{width:24px;height:24px;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);display:grid;place-items:center;margin-right:8px;font-size:var(--ant-font-size-sm)}.capability-menu-preview{width:180px;min-height:126px;background:var(--ant-color-bg-layout);border:1px solid var(--ant-color-border);display:flex;flex-direction:column;padding:8px;margin:auto}.capability-menu-preview>b{height:27px;background:var(--ant-color-bg-container);padding:8px 8px;font-size:var(--ant-font-size-sm)}.capability-menu-preview>span{height:22px;padding:4px 12px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.capability-menu-preview>span:first-of-type{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)} + +.domain-capability-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.domain-capability-card{height:calc(100vh - 450px);min-height:500px;max-height:680px}.domain-capability-card>header{height:auto;min-height:82px;padding:12px 16px;grid-template-columns:38px minmax(0,1fr)}.domain-capability-card>header>strong{grid-column:1/-1;justify-self:end}.domain-capability-body.capability-empty-slot{flex:1;min-height:0;padding:0;background:var(--ant-color-bg-container)}.domain-capability-body.capability-asset-content,.domain-capability-body.capability-page-content,.domain-capability-body.capability-twin-content,.domain-capability-body.capability-knowledge-content{flex:1;min-height:0;padding:16px;background:var(--ant-color-bg-container);overflow-y:auto;scrollbar-gutter:stable}.capability-section-title{height:30px;display:flex;align-items:flex-start;justify-content:space-between;border-bottom:1px solid var(--ant-color-border);margin-bottom:12px}.capability-section-title b{font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base)}.capability-section-title span{color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.device-template-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:8px}.device-template-tile{aspect-ratio:1/1;min-height:88px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:8px;text-align:center;transition:border-color .15s,box-shadow .15s}.device-template-tile:hover{border-color:var(--ant-color-primary-bg);box-shadow:none}.device-template-tile>span{width:38px;height:38px;display:grid;place-items:center;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);font-size:var(--ant-font-size-heading-4)}.device-template-tile>b{width:100%;font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.extension-page-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.extension-page-tile{min-width:0;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);overflow:hidden}.extension-page-tile .dashboard-thumb-live{height:92px;min-height:92px;border:0;border-bottom:1px solid var(--ant-color-border);background:var(--ant-color-bg-layout)}.extension-page-tile>b{display:block;height:34px;line-height:34px;padding:0 8px;font-size:var(--ant-font-size-sm);font-weight:600;color:var(--ant-color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.extension-page-tile:hover{border-color:var(--ant-color-primary-bg);box-shadow:none}.twin-scene-card-list{display:flex;flex-direction:column;gap:12px}.twin-scene-card{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);overflow:hidden}.twin-scene-card .sc-scene{height:145px}.twin-scene-card .sc-scene:after{height:72px;bottom:7px}.twin-scene-card .sc-scene i{transform:scale(.7);transform-origin:left bottom}.twin-scene-card>div:last-child{height:42px;display:flex;align-items:center;justify-content:space-between;padding:0 12px}.twin-scene-card b{font-size:var(--ant-font-size-sm);font-weight:600}.twin-scene-card small{font-size:var(--ant-font-size-sm);color:var(--ant-color-success);background:var(--ant-color-bg-layout);padding:4px 8px}.knowledge-group+.knowledge-group{margin-top:20px}.knowledge-item-list{display:flex;flex-direction:column;gap:8px}.knowledge-item{min-height:55px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:12px;padding:8px}.knowledge-type{width:34px;height:34px;display:grid;place-items:center;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);font-size:var(--ant-font-size)}.knowledge-type.link{background:var(--ant-color-bg-layout);color:var(--ant-color-primary)}.knowledge-item>div{min-width:0;display:flex;flex-direction:column;gap:4px}.knowledge-item b{font-size:var(--ant-font-size-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.knowledge-item small{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.knowledge-item:hover{border-color:var(--ant-color-primary-bg)}.device-template-empty{min-height:150px;display:grid;place-items:center;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)} + +.capability-preview-modal{width:min(1040px,94vw);max-width:94vw}.capability-preview-modal>.modal-body{min-height:520px;padding:20px}.capability-assets-preview,.capability-knowledge-preview{display:grid;grid-template-columns:1.2fr .8fr;gap:16px}.capability-assets-preview>section,.capability-knowledge-preview>section{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:16px}.capability-assets-preview h3,.capability-knowledge-preview h3{margin:0 0 12px;font-size:var(--ant-font-size)}.capability-full-tree{min-height:380px;background:var(--ant-color-bg-layout);padding:24px}.capability-full-tree>b{display:block;width:180px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:12px 12px;margin-bottom:20px}.capability-full-tree>div{margin:0 0 12px 36px;border-left:1px solid var(--ant-color-primary);padding-left:24px;position:relative}.capability-full-tree>div:before{content:"";position:absolute;left:0;top:13px;width:20px;border-top:1px solid var(--ant-color-primary)}.capability-full-tree span{display:block;width:170px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:8px 8px}.capability-full-tree small{display:block;margin:4px 0 0 12px;color:var(--ant-color-text-secondary)}.capability-preview-tabs{height:44px;display:flex;border-bottom:1px solid var(--ant-color-border);margin-bottom:16px}.capability-preview-tabs button{height:44px;border:0;border-bottom:3px solid transparent;background:var(--ant-color-bg-container);padding:0 20px;color:var(--ant-color-text-secondary)}.capability-preview-tabs button.active{color:var(--ant-color-primary);border-bottom-color:var(--ant-color-primary)}.capability-preview-tabs b{font-size:var(--ant-font-size-sm);background:var(--ant-color-bg-layout);padding:4px 8px;border-radius:var(--ant-border-radius);margin-left:4px}.capability-dashboard-grid,.capability-twin-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.capability-dashboard-grid article,.capability-twin-grid article{border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.capability-dashboard-grid .dashboard-thumb-live{height:230px!important;min-height:230px;background:var(--ant-color-bg-layout)}.capability-dashboard-grid article>div:last-child,.capability-twin-grid article>div:last-child{padding:12px 12px;display:flex;flex-direction:column;gap:4px}.capability-dashboard-grid article span,.capability-twin-grid article span{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.sc-scene{height:230px;position:relative;overflow:hidden;background:linear-gradient(#edf5f7,#d9e5e8);perspective:500px}.sc-scene:after{content:"";position:absolute;left:8%;right:8%;bottom:18px;height:105px;background:linear-gradient(160deg,#b7cbd1,#eef4f5);transform:rotateX(58deg);border:1px solid #9fb7bf}.sc-scene i{position:absolute;z-index:2;width:75px;height:62px;background:#779aa5;border:1px solid #63828c;box-shadow:9px -9px #aec4ca}.sc-scene i:nth-child(1){left:20%;bottom:68px}.sc-scene i:nth-child(2){left:43%;bottom:86px;background:#7daeb9}.sc-scene i:nth-child(3){left:62%;bottom:57px;width:56px;height:76px}.sc-scene i:nth-child(4){left:76%;bottom:96px;width:40px;height:45px;background:#51a7c6}.sc-scene>span{position:absolute;z-index:3;right:12px;top:10px;background:#ffffffdd;color:#477783;padding:4px 8px;font-size:10px}.capability-knowledge-preview>section>div{height:58px;border-bottom:1px solid var(--ant-color-border);display:flex;align-items:center;gap:12px}.capability-knowledge-preview>section>div>svg{font-size:var(--ant-font-size-heading-4);color:var(--ant-color-primary)}.capability-knowledge-preview>section>div>span:last-child{display:flex;flex-direction:column;gap:4px}.capability-knowledge-preview small{color:var(--ant-color-text-secondary)}.file-type{width:38px;height:27px;display:grid!important;place-items:center;background:var(--ant-color-bg-layout);color:var(--ant-color-primary);font-size:var(--ant-font-size-sm)}.capability-menu-full{display:grid;grid-template-columns:230px 1fr;min-height:500px;border:1px solid var(--ant-color-border)}.capability-menu-full aside{background:var(--ant-color-bg-layout);border-right:1px solid var(--ant-color-border);padding:12px}.capability-menu-full aside>b{display:block;padding:12px 8px;border-bottom:1px solid var(--ant-color-border)}.capability-menu-full aside>div{display:flex;flex-direction:column}.capability-menu-full aside strong{padding:12px 8px;font-weight:600}.capability-menu-full aside span{padding:8px 24px;color:var(--ant-color-text-secondary)}.capability-menu-full aside>div:first-of-type strong{background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.capability-menu-full>section{background:var(--ant-color-bg-layout)}.menu-screen-title{height:48px;background:var(--ant-color-bg-container);border-bottom:1px solid var(--ant-color-border);padding:16px 20px;font-weight:600}.menu-screen-canvas{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:24px}.menu-screen-canvas i{height:170px;background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);box-shadow:none}.menu-screen-canvas i:nth-child(2){box-shadow:none}.menu-screen-canvas i:nth-child(3){box-shadow:none}.menu-screen-canvas i:nth-child(4){box-shadow:none} + +.domain-import-page{max-width:980px}.domain-import-layout{display:grid;grid-template-columns:1fr 1fr;gap:24px;padding:8px}.domain-import-drop{min-height:310px;border:1px dashed var(--ant-color-primary-bg);background:var(--ant-color-bg-layout);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:28px;cursor:pointer}.domain-import-drop:hover,.domain-import-drop.selected{border-color:var(--ant-color-primary);background:var(--ant-color-bg-layout)}.domain-import-drop>svg{font-size:var(--ant-font-size-heading-2);color:var(--ant-color-primary)}.domain-import-drop>b{font-size:var(--ant-font-size)}.domain-import-drop>span{max-width:320px;color:var(--ant-color-text-secondary);line-height:1.7}.domain-import-form{display:flex;flex-direction:column;gap:16px}.domain-import-form .field input,.domain-import-form .field select,.domain-import-form .field textarea{width:100%}.domain-package-check{margin:20px 8px 0;padding:16px;background:var(--ant-color-bg-layout);display:flex;align-items:center;gap:8px}.domain-package-check>b{margin-right:12px}.domain-package-check>span{background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border);padding:8px 8px;color:var(--ant-color-text-secondary)}.domain-import-actions{display:flex;justify-content:flex-end;margin:16px 0 4px}.domain-maintain-modal{width:min(720px,92vw)}.domain-maintain-note{margin-top:20px;padding:12px 16px;background:var(--ant-color-bg-layout);border-left:3px solid var(--ant-color-primary);color:var(--ant-color-text-secondary)}.capability-package-modal{width:min(660px,92vw)}.capability-package-modal>.modal-body>div{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}.capability-package-modal>.modal-body>div>span{min-height:70px;border:1px solid var(--ant-color-border);padding:12px;display:grid;grid-template-columns:28px 1fr;grid-template-rows:auto auto;align-items:center}.capability-package-modal svg{grid-row:1/3;color:var(--ant-color-primary);font-size:var(--ant-font-size-heading-4)}.capability-package-modal small{color:var(--ant-color-text-secondary)} +@media(max-width:1320px){.domain-showcase-grid{grid-template-columns:1fr 1fr}.domain-showcase-intro{grid-template-columns:130px 1fr}.domain-showcase-total{grid-column:1/-1;border-top:1px solid var(--ant-color-border);padding-top:12px}.domain-capability-grid{grid-template-columns:1fr 1fr}.domain-capability-card{height:390px;min-height:0}.domain-capability-body.capability-empty-slot{min-height:0}.domain-capability-mini-tree>span:nth-last-child(n+4){display:none}} +@media(max-width:900px){.domain-showcase-grid,.domain-capability-grid,.capability-assets-preview,.capability-knowledge-preview,.domain-import-layout{grid-template-columns:1fr}.domain-showcase-intro{grid-template-columns:1fr}.domain-showcase-intro>p{padding:0;border:0}.domain-capability-head{grid-template-columns:62px 1fr}.domain-capability-code{width:62px;height:62px}.domain-capability-actions{grid-column:1/-1;justify-content:flex-end}.domain-capability-summary{grid-template-columns:1fr 1fr;height:auto}.domain-capability-summary span{min-height:55px;border-bottom:1px solid var(--ant-color-border)}.domain-capability-summary span:nth-child(2n){border-right:0}.capability-dashboard-grid,.capability-twin-grid{grid-template-columns:1fr}} +.capability-dashboard-grid article span,.capability-twin-grid article span{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;line-height:1.55} +@media(max-width:600px){.domain-showcase-filter{height:auto;flex-wrap:wrap}.domain-showcase-filter label,.domain-showcase-filter select{width:100%;min-width:0}.domain-showcase-filter>span{width:100%;text-align:right}.domain-capability-head{grid-template-columns:1fr;padding:16px}.domain-capability-code{width:auto;height:38px;justify-self:start;padding:0 12px}.domain-capability-actions{width:100%;flex-direction:column}.domain-capability-actions .button{width:100%;margin:0}.domain-capability-card>header{grid-template-columns:38px 1fr}.domain-capability-card>header>strong{grid-column:2}.capability-mini-tree>span:nth-of-type(n+2){display:none}.capability-menu-full{grid-template-columns:1fr}.capability-menu-full>section{display:none}.capability-package-modal>.modal-body>div{grid-template-columns:1fr}.domain-package-check{align-items:flex-start;flex-wrap:wrap}.capability-preview-modal>.modal-body{padding:12px}} + +/* 领域扩展仪表板管理:用领域下拉框替代分类树。 */ +.domain-dashboard-manager{display:flex;flex-direction:column;gap:12px}.dashboard-manager-panel{min-height:620px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container)}.dashboard-manager-toolbar{height:54px;border-bottom:1px solid var(--ant-color-border);display:grid;grid-template-columns:300px 1fr auto;align-items:center}.dashboard-manager-toolbar>label{height:100%;display:flex;align-items:center;gap:12px;padding:0 12px;border-right:1px solid var(--ant-color-border)}.dashboard-manager-toolbar>label span{font-weight:600;white-space:nowrap}.dashboard-manager-toolbar select{height:32px;min-width:190px;border:1px solid var(--ant-color-border);background:var(--ant-color-bg-container);padding:0 28px 0 8px}.dashboard-manager-toolbar>strong{padding-left:20px;font-size:var(--ant-font-size)}.dashboard-manager-actions{display:flex;align-items:center;gap:8px;padding-right:12px}.dashboard-manager-actions .button{margin:0;min-width:72px}.dashboard-manager-search{width:220px;height:32px;border:1px solid var(--ant-color-border);display:flex!important;align-items:center;gap:8px;padding:0 8px!important}.dashboard-manager-search input{width:100%;height:28px;border:0;outline:0}.dashboard-manager-grid{display:grid;grid-template-columns:repeat(2,minmax(280px,354px));gap:24px;padding:20px 24px;align-content:start}.dashboard-manager-grid article{height:124px;border:1px solid var(--ant-color-border);border-radius:var(--ant-border-radius);background:var(--ant-color-bg-container);padding:16px 44px 12px 16px;position:relative}.dashboard-manager-grid h3{margin:0 0 12px;font-size:var(--ant-font-size);font-weight:600}.dashboard-manager-grid p{margin:0 0 8px;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-sm)}.dashboard-card-more{position:absolute;right:8px;top:10px;width:30px;height:30px;border:0;background:transparent;color:var(--ant-color-text-secondary);font-size:var(--ant-font-size-heading-4)}.dashboard-card-more:hover{background:var(--ant-color-bg-layout);color:var(--ant-color-primary)} +@media(max-width:1100px){.dashboard-manager-toolbar{height:auto;grid-template-columns:1fr}.dashboard-manager-toolbar>label{height:50px;border-right:0;border-bottom:1px solid var(--ant-color-border)}.dashboard-manager-toolbar>strong{height:44px;display:flex;align-items:center;padding-left:12px}.dashboard-manager-actions{padding:0 12px 12px}.dashboard-manager-grid{grid-template-columns:1fr 1fr}}@media(max-width:720px){.dashboard-manager-actions{flex-wrap:wrap}.dashboard-manager-search{width:100%}.dashboard-manager-grid{grid-template-columns:1fr;padding:12px}} + +/* 仪表板资源页视觉密度:宽屏四列,等宽卡片,不保留分类树的空白。 */ +.dashboard-manager-panel{min-height:calc(100vh - 154px);background:var(--ant-color-bg-layout);border-color:var(--ant-color-border)}.dashboard-manager-toolbar{height:56px;grid-template-columns:286px 1fr;background:var(--ant-color-bg-container)}.dashboard-manager-toolbar>label{padding:0 16px;gap:12px}.dashboard-manager-toolbar>label span{font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base)}.dashboard-manager-toolbar select{height:32px;min-width:176px;border-color:var(--ant-color-border);border-radius:var(--ant-border-radius);color:var(--ant-color-text-secondary)}.dashboard-manager-actions{justify-self:end;gap:8px;padding-right:12px}.dashboard-manager-actions .button{height:32px;min-width:72px;padding:0 12px;border-radius:var(--ant-border-radius);font-weight:600}.dashboard-manager-search{width:210px;height:32px;background:var(--ant-color-bg-container);border-color:var(--ant-color-border);border-radius:var(--ant-border-radius);color:var(--ant-color-text-secondary)}.dashboard-manager-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:20px 20px;padding:20px 20px;align-items:start}.dashboard-manager-grid article{width:auto;height:124px;border-color:var(--ant-color-border);border-radius:var(--ant-border-radius);padding:16px 44px 12px 16px;box-shadow:none;transition:border-color .15s,box-shadow .15s}.dashboard-manager-grid article:hover{border-color:var(--ant-color-primary-hover);box-shadow:none}.dashboard-manager-grid h3{margin:0 0 12px;font-size:var(--ant-font-size);font-weight:600;color:var(--ant-color-text-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-manager-grid p{font-size:var(--ant-font-size-sm);color:var(--ant-color-text-secondary)}.dashboard-card-more{right:8px;top:9px;transform:rotate(90deg)}.dashboard-card-more:hover{background:transparent;color:var(--ant-color-primary)} +@media(max-width:1550px){.dashboard-manager-grid{grid-template-columns:repeat(3,minmax(0,1fr))}} +@media(max-width:1120px){.dashboard-manager-toolbar{height:auto;grid-template-columns:1fr}.dashboard-manager-toolbar>label{height:50px;border-right:0;border-bottom:1px solid var(--ant-color-border)}.dashboard-manager-actions{justify-self:stretch;padding:0 12px 12px}.dashboard-manager-grid{grid-template-columns:repeat(2,minmax(0,1fr))}} +@media(max-width:720px){.dashboard-manager-actions{flex-wrap:wrap}.dashboard-manager-search{width:100%}.dashboard-manager-grid{grid-template-columns:1fr;padding:12px}} diff --git a/app/layout.tsx b/app/layout.tsx index 62e24cd..48cb8c5 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,6 +1,13 @@ import type { Metadata } from "next"; import "antd/dist/reset.css"; import "./globals.css"; +import "./site-workspace.css"; +import "./ui-system.css"; +import "./ui-layout-compat.css"; +import "../src/antd.less"; +import "../src/theme/overrides.css"; +import "../src/styles.less"; +import "./brand-layout.css"; import CompanyTheme from "./company-theme"; export const metadata: Metadata = {title:"iStation StationBuilder",description:"iStation 团队内部 AI 站点与领域方案生成工具",other:{"codex-preview":"development"},icons:{icon:"/favicon.svg",shortcut:"/favicon.svg"}}; diff --git a/app/page.tsx b/app/page.tsx index 3992e4d..7993cf1 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,25 +1,34 @@ "use client"; +import { UiButton, UiInput, UiSelect, UiTable, UiTabbedRegion, UiActions, UiOverlay } from "./ui-system"; +import BrandSideMenu from "../src/components/menu"; +import BrandSearchInput from "../src/components/search-input"; +import BrandPagination from "../src/components/pagination"; +import { Input as UiAntInput, Card, Form, App as AntApp } from "antd"; +const UiTextArea = UiAntInput.TextArea; + import { useEffect, useMemo, useRef, useState, type PointerEvent as ReactPointerEvent } from "react"; import { Button as AntButton, Drawer, Dropdown, QRCode, Tag } from "antd"; +import { StationHierarchyWorkspace, SiteConfigurationContext, SitePageSelection, SiteMenuConfiguration } from "./site-workspace"; import { AimOutlined, ApartmentOutlined, BarsOutlined, BlockOutlined, CaretDownOutlined, CaretRightOutlined, ControlOutlined, CopyOutlined, DeleteOutlined, DownloadOutlined, EditOutlined, EllipsisOutlined, EyeOutlined, LinkOutlined, PlusOutlined, PlusSquareOutlined, RobotOutlined, SearchOutlined, SnippetsOutlined, UploadOutlined, ZoomInOutlined, ZoomOutOutlined } from "@ant-design/icons"; -type PageKey = "login" | "projects" | "siteEdit" | "basic" | "assets" | "pageConfig" | "functions" | "generate" | "result" | "preview" | "domains" | "domainDetail" | "styleLibrary" | "deviceTemplates" | "toolSettings" | "domainSettings" | "dashboard" | "report-dashboard" | "report-doc" | "basic-components" | "func-components" | "filters" | "datasource" | "monitor-dashboard" | "twin-model" | "ops-template" | "knowledge-template"; +type PageKey = "login" | "projects" | "siteEdit" | "basic" | "assets" | "opsflow" | "pageConfig" | "functions" | "generate" | "result" | "preview" | "domains" | "domainDetail" | "styleLibrary" | "deviceTemplates" | "toolSettings" | "domainSettings" | "dashboard" | "report-dashboard" | "report-doc" | "basic-components" | "func-components" | "filters" | "datasource" | "monitor-dashboard" | "twin-model" | "ops-template" | "knowledge-template"; type ModalKey = "" | "feedback" | "download" | "history" | "prompt" | "completePrompt"; const meta: Record = { login:{label:"内部登录",icon:"◇",subtitle:"使用公司账号登录"}, - projects:{label:"站点列表",icon:"▦",subtitle:"创建、查找和管理站点生成项目"}, + projects:{label:"站点管理",icon:"▦",subtitle:"先建立上下级站点,再按模板配置各站点"}, siteEdit:{label:"站点编辑",icon:"",subtitle:"维护已建站点的基本属性与参考资料"}, - basic:{label:"站点基本属性",icon:"▤",subtitle:"描述站点业务背景,信息越完整,生成结果越符合预期"}, - assets:{label:"站点资产设置",icon:"▧",subtitle:"通过快速配置或手动配置建立场站资产结构"}, - pageConfig:{label:"页面配置",icon:"",subtitle:""}, - functions:{label:"菜单设置",icon:"☷",subtitle:"选择 MU 标准页面,定义 Cube 扩展页面及菜单结构"}, + basic:{label:"站点信息",icon:"▤",subtitle:"维护站点基本信息与参考资料"}, + assets:{label:"资产设置",icon:"▧",subtitle:"在一个工作区完成资产结构、设备节点、属性与数据绑定"}, + opsflow:{label:"运维流程配置",icon:"",subtitle:""}, + pageConfig:{label:"页面配置",icon:"",subtitle:"选择站点所需的标准功能页面、领域仪表板及数字孪生场景"}, + functions:{label:"菜单配置",icon:"☷",subtitle:"设置应用基本信息,配置第四步已选择页面的菜单"}, generate:{label:"生成确认",icon:"↻",subtitle:"确认生成范围,调用 Cube Skill 生成页面和模拟数据"}, result:{label:"站点结果",icon:"◫",subtitle:"集中查看、预览、校验并下载站点交付物"}, preview:{label:"Cube 页面预览",icon:"▣",subtitle:"检查单个 Cube 页面效果,并通过反馈快速重新生成"}, - domains:{label:"领域方案",icon:"◆",subtitle:"管理可复用的领域标准方案及其版本与配置内容"}, - domainDetail:{label:"方案详情",icon:"◇",subtitle:"查看领域资产、运维流程、Cube 页面、菜单及知识内容"}, + domains:{label:"领域方案",icon:"◆",subtitle:"查看已沉淀的领域能力,并按需预览、下载或导入方案"}, + domainDetail:{label:"方案详情",icon:"◇",subtitle:"集中查看领域方案包含的资产、页面、知识与菜单能力"}, deviceTemplates:{label:"设备模板",icon:"⬡",subtitle:"管理设备模板及采集点配置,供领域方案和站点复用"}, styleLibrary:{label:"页面样式",icon:"❖",subtitle:"管理可复用的 Cube 页面视觉样式与预览资源"}, toolSettings:{label:"内部工具配置",icon:"",subtitle:"配置 StationBuilder 使用的内部能力、AI 服务和默认模型"}, @@ -51,16 +60,18 @@ const MODELS = [ ]; // ---- types ---- -type SiteSummary = { id:number; name:string; domain:string; status:string; device_count:number; mu_count:number; cube_count:number; gen_count:number; updated_at:string; created_at:string; parent_id?:number|null; }; +type SiteSummary = { id:number; name:string; domain:string; status:string; device_count:number; mu_count:number; cube_count:number; gen_count:number; updated_at:string; created_at:string; parent_id?:number|null; template_id?:number|null; template_name?:string; template_applied_at?:string|null; }; type Asset = { id?:number; type:string; count:number; rule:string; sort_order:number; }; type Cube = { id?:number; name:string; content:string; status?:string; gen_file_id?:number|null; gen_filename?:string; generated_at?:string; prompt?:string; sort_order:number; }; type MenuItem = { id?:number; parent_id:number|null; label:string; page_type:"mu"|"cube"|""; ref_id?:number|string; sort_order:number; }; type ReferenceFile = { id:number; filename:string; mime:string; size:number; created_at:string; }; type SiteDetail = { id:number; name:string; domain:string; description:string; supplement:string; status:string; + template_id?:number|null; template_name?:string; template_applied_at?:string|null; + page_config?:{dashboard_ids:number[];twin_ids:string[];standard_pages_initialized?:boolean}|null; style_id?: number | null; parent_id?: number | null; - app_name?: string; app_icon?: string; app_icon_filename?: string; + app_name?: string; app_icon?: string; app_icon_filename?: string; app_color_scheme?: string; created_at:string; updated_at:string; assets: Asset[]; cubes: Cube[]; mu: string[]; menu: MenuItem[]; files: ReferenceFile[]; }; @@ -70,8 +81,8 @@ type PageStyle = { id:number; name:string; created_at?:string }; type DomainAsset = { id?:number; device_template_id:number; device_name:string; count:number; rule:string; sort_order:number }; type DomainPage = { id:number; name:string; description:string; json_text:string; status:string; gen_filename?:string|null; prompt?:string|null; source?:string|null; sort_order:number }; type DomainStepKey = "basic" | "assets" | "functions" | "opsflow" | "knowledge" | "generate" | "expert"; -type SiteEditSection = "basic" | "assets" | "pageConfig" | "functions" | "generate"; -const SITE_EDIT_STEPS:SiteEditSection[] = ["basic","assets","pageConfig","functions","generate"]; +type SiteEditSection = "basic" | "assets" | "opsflow" | "pageConfig" | "functions"; +const SITE_EDIT_STEPS:SiteEditSection[] = ["basic","assets","opsflow","pageConfig","functions"]; type ManualAssetBinding = {source:string;name?:string;point:string;collect_type?:string;group?:string;device_name?:string;unit?:string;precision?:string;mapping?:string;description?:string}; type ManualAssetNode = { id:string; name:string; alias?:string; asset_type?:string; image_data?:string; node_type:"group"|"device"; template_name:string; description:string; properties:Array<{name:string;value:string;unit:string}>; bindings:ManualAssetBinding[]; children:ManualAssetNode[] }; type ManualAssetGroup = { id:number; site_id:number; name:string; category:string; template_name:string; structure:ManualAssetNode[]; created_at:string; updated_at:string }; @@ -79,16 +90,17 @@ type ManualAssetGroup = { id:number; site_id:number; name:string; category:strin // ---- helpers ---- function Status({children}:{children:React.ReactNode}){const v=String(children);const tone=/不可用|失败|异常|failed/.test(v)?"bad":/完成|正常|成功|通过|推荐|可用|已配置|已生成|已上传|generated/.test(v)?"ok":/生成中|校验中|告警|running/.test(v)?"warn":"muted";return {children}} function Button({children,secondary,onClick,disabled,title}:{children:React.ReactNode;secondary?:boolean;onClick?:()=>void;disabled?:boolean;title?:string}){return {children}} -function Panel({title,tools,children,className=""}:{title?:string;tools?:React.ReactNode;children:React.ReactNode;className?:string}){return
{title&&
{title}
{tools}
}
{children}
} -function Field({label,required,hint,children}:{label:string;required?:boolean;hint?:string;children:React.ReactNode}){return } +Button.uiPrimaryAction = true; +function Panel({title,tools,children,className=""}:{title?:string;tools?:React.ReactNode;children:React.ReactNode;className?:string}){return {title}:undefined} extra={title&&tools?{tools}:undefined} classNames={{header:"panel-head",body:"panel-body"}}>{children}} +function Field({label,required,hint,children}:{label:string;required?:boolean;hint?:string;children:React.ReactNode}){return {children}} function domainTagColor(name:string){ - const map:Record={"数据中心":"#009fe3","智慧水务":"#00b96b","燃气":"#ff990b","水务 · 自来水厂":"#42d067","新能源":"#7c3aed","其他":"#888888"}; + const map:Record={"数据中心":"blue","智慧水务":"cyan","燃气":"orange","水务 · 自来水厂":"green","新能源":"purple","其他":"default"}; if(map[name]) return map[name]; - const palette=["#009fe3","#00b96b","#ff990b","#42d067","#7c3aed","#f05b49","#008cd6","#e58c35","#6d5ee9","#25a85b"]; + const palette=["blue","cyan","orange","green","purple","red"]; let hash=0; for(let i=0;i{name};} +function DomainTag({name}:{name:string}){return {name};} async function fetchDb(path:string, opts?:RequestInit){ const res = await fetch(`/api/db${path}`, opts); @@ -145,13 +157,14 @@ function buildMuLeaves(nodes:MuNode[], parent=""): {key:string, label:string, di function countChars(v:string){ return Array.from(v||"").length; } // ---- main ---- -export default function Home(){ +export default function Home(){ const { message } = AntApp.useApp(); const [page,setPage]=useState("projects"); const [projectNavOpen,setProjectNavOpen]=useState(true); const [extensionNavOpen,setExtensionNavOpen]=useState(true); const [resourceNavOpen,setResourceNavOpen]=useState(true); + const [navCollapsed,setNavCollapsed]=useState(false); const [systemNavOpen,setSystemNavOpen]=useState(true); - const [toast,setToast]=useState(""); + const [modal,setModal]=useState(""); const [promptData,setPromptData]=useState<{name:string;text:string}|null>(null); const [model,setModel]=useState("Hy3"); @@ -214,12 +227,17 @@ export default function Home(){ const [pageStyles,setPageStyles]=useState([]); const [openDomainTemplateId,setOpenDomainTemplateId]=useState(null); const [domainFilter,setDomainFilter]=useState(null); + const [deviceTemplateDomain,setDeviceTemplateDomain]=useState(()=>{ try{return new URLSearchParams(window.location.search).get("domain")||"";}catch{return "";} }); const [domainOptions,setDomainOptions]=useState<{id:number;name:string}[]>([]); const [addingDomain,setAddingDomain]=useState(false); const [newDomainName,setNewDomainName]=useState(""); const [view,setView]=useState<"table"|"card">("table"); const [siteEditSection,setSiteEditSection]=useState("basic"); + const assetSaveRef=useRefPromise)>(null); + const pageSaveRef=useRefPromise)>(null); + const menuSaveRef=useRefPromise)>(null); + const [configurationSaving,setConfigurationSaving]=useState(false); const [assetConfigMode,setAssetConfigMode]=useState<"quick"|"manual">("quick"); const [pageConfigTab,setPageConfigTab]=useState<"ops"|"dashboard"|"twin">("ops"); const PAGE_CONFIG_LABEL:Record={ops:"设备运维",dashboard:"仪表板",twin:"数字孪生场景"}; @@ -229,7 +247,7 @@ export default function Home(){ const [refining,setRefining]=useState(false); const [refineLog,setRefineLog]=useState(""); - const notify=(m:string)=>{setToast(m);window.setTimeout(()=>setToast(""),2200);}; + const notify=(m:string)=>{void message.info(m,2.2);}; const viewPrompt=async(cubeId:number|undefined,name:string,content?:string)=>{ const sid = site?.id ?? siteId; @@ -439,6 +457,7 @@ export default function Home(){ }; const go=async(target:PageKey, sid?:number|"new")=>{ try{ + if(page==="siteEdit"&&(target!==page||(typeof sid==="number"&&sid!==siteId))){if(siteEditSection==="assets"&&assetSaveRef.current)await assetSaveRef.current();if(siteEditSection==="functions"&&menuSaveRef.current)await menuSaveRef.current();} if(target==="siteEdit")setSiteEditSection("basic"); // 显式要求新建站点:始终创建空白站点,避免复用/误建 if(sid==="new"){ await createSite(); setPage(target); window.history.replaceState({}, "", "?page="+target); return; } @@ -454,7 +473,7 @@ export default function Home(){ curId = first.id; } // 详情类页面必须依附于已选站点:无站点时不自动建站,回站点列表并提示 - const needsSite = ["siteEdit","basic","assets","pageConfig","functions","generate","result","preview"].includes(target); + const needsSite = ["siteEdit","basic","assets","opsflow","pageConfig","functions","generate","result","preview"].includes(target); if(needsSite && !curId){ setPage("projects"); window.history.replaceState({}, "", "?page=projects"); @@ -471,6 +490,48 @@ export default function Home(){ notify("操作失败: "+(e?.message||e)); } }; + const createSiteFromDomainTemplate=async(templateId:number)=>{ + if(!(await confirmUnsaved())) return; + const created=await fetchDb(`/domain-templates/${templateId}/create-site`,{method:"POST",headers:{"Content-Type":"application/json"}}) as SiteDetail; + if(!created?.id) throw new Error("未返回有效的站点编号"); + setSites(prev=>[created as any,...prev]); + setSite(created);setSiteId(created.id);setDirty(false); + setSiteEditSection("basic");setPage("siteEdit"); + window.history.replaceState({},"",`?page=siteEdit&id=${created.id}`); + notify("已根据领域模板创建草稿站点,可继续调整配置"); + fetchDb("/sites").then(data=>setSites(data as SiteSummary[])).catch(()=>{}); + }; + const saveHierarchySite=async(values:any,id?:number)=>{ + const saved=await fetchDb(id?`/sites/${id}`:"/sites",{method:id?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(values)}); + setSites(await fetchDb("/sites"));if(site?.id===id)setSite(saved);return saved; + }; + const saveCurrentConfiguration=async()=>{ + if(saving)throw new Error("基本信息正在保存,请稍后重试"); + const section=page==="siteEdit"?siteEditSection:page; + if(section==="assets"&&assetSaveRef.current)await assetSaveRef.current(); + if(section==="pageConfig"&&pageSaveRef.current)await pageSaveRef.current(); + if(section==="functions"&&menuSaveRef.current)await menuSaveRef.current(); + if(dirty&&site)await fetchDb(`/sites/${site.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(site)}); + setDirty(false);setSites(await fetchDb("/sites")); + }; + const saveConfigurationDraft=async()=>{if(configurationSaving)return;setConfigurationSaving(true);try{await saveCurrentConfiguration();notify("草稿已保存");}catch(error:any){notify("保存失败:"+error.message);}finally{setConfigurationSaving(false);}}; + const changeConfigurationStep=async(section:SiteEditSection)=>{ + if(configurationSaving)return;setConfigurationSaving(true);try{await saveCurrentConfiguration();if(page==="siteEdit")setSiteEditSection(section);else await go(section,site?.id);}catch(error:any){notify("请先完成保存:"+error.message);}finally{setConfigurationSaving(false);} + }; + const backToHierarchy=async()=>{if(configurationSaving)return;setConfigurationSaving(true);try{await saveCurrentConfiguration();await go("projects");}catch(error:any){notify("请先完成保存:"+error.message);}finally{setConfigurationSaving(false);}}; + const nextConfigurationStep=async()=>{const section=page==="siteEdit"?siteEditSection:page as SiteEditSection;const index=SITE_EDIT_STEPS.indexOf(section);if(index<4)return changeConfigurationStep(SITE_EDIT_STEPS[index+1]);if(configurationSaving)return;setConfigurationSaving(true);try{await saveCurrentConfiguration();await go("generate",site?.id);}catch(error:any){notify("请先完成保存:"+error.message);}finally{setConfigurationSaving(false);}}; + const applyTemplateToSite=async(templateId:number,replace:boolean)=>{ + if(!site)return;const applied=await fetchDb(`/sites/${site.id}/apply-template`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template_id:templateId,replace})}); + setSite(applied);setDirty(false);setSites(await fetchDb("/sites"));if(page==="siteEdit")setSiteEditSection("assets");else await go("assets",site.id);notify("模板已应用,可在当前工作区调整资产"); + }; + const savePageConfiguration=async(config:any)=>{ + if(!site)return;const saved=await fetchDb(`/sites/${site.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({page_config:config})});setSite(saved); + }; + const openDomainDeviceTemplates=(domainName:string)=>{ + setDeviceTemplateDomain(domainName); + setPage("deviceTemplates"); + window.history.replaceState({},"",`?page=deviceTemplates&domain=${encodeURIComponent(domainName)}`); + }; useEffect(()=>{ if(loading||routeAppliedRef.current)return; @@ -508,10 +569,10 @@ export default function Home(){ const saveMu=async(selected:string[])=>{ if(!site) return; - setSite({...site, mu:selected}); try{ - await fetchDb(`/sites/${site.id}/mu`, {method:"PUT", headers:{"Content-Type":"application/json"}, body:JSON.stringify({selected})}); - }catch(e:any){ notify("MU 选择保存失败: "+e.message); } + const saved=await fetchDb(`/sites/${site.id}/mu`, {method:"PUT", headers:{"Content-Type":"application/json"}, body:JSON.stringify({selected})}) as SiteDetail; + setSite(saved); + }catch(e:any){ notify("MU 选择保存失败: "+e.message); throw e; } }; const addDomain=async(name:string)=>{ @@ -588,72 +649,72 @@ export default function Home(){ const children=(sites.filter(s=>s.parent_id===siteId)); return {ancestors,children,current}; },[sites,siteId]); - const manualAssetActive = assetConfigMode==="manual" && (page==="assets" || (page==="siteEdit"&&siteEditSection==="assets")); + const manualAssetActive = (page==="assets" || (page==="siteEdit"&&siteEditSection==="assets")); - return
+ return
- + setNavCollapsed(value=>!value)}> event.preventDefault()}>WISE-IoT - +
-