diff --git a/README.md b/README.md index 39111fe..582d2ab 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Google / Slack 的提供方回调仍是 Foundry 后端地址;后端的项目 - 底部按钮、账户菜单和设置面板使用 Foundry `profile.avatar_url` 提供的 Google 头像;无头像或图片加载失败时显示姓名首字。 - 新建页面使用 Foundry Core 的 `POST /workspaces/{workspace}/materials`,提交 `kind: board`、默认名称“未命名图谱”和内容版本;由后端生成 ID。没有空间时先创建“个人空间”,成功后跳转到图谱的独立地址。 - 本地演示提供示例图谱、搜索、新建和浏览器保存,支持图谱独立地址与刷新。 -- 图形编辑、连接线、分享、Agent、收藏及完整布局持久化尚未接入。图谱页面目前只显示已保存的名称和空白图谱区域;演示数据不写入线上。 +- 图形编辑、连接线、分享、Agent、收藏及完整布局持久化尚未接入。图谱页面移除顶部标题栏,画布覆盖整个视口,侧栏和快捷浮框覆盖其上;演示数据不写入线上。 - 本地演示仅用于查看界面,不提供后端认证与权限。 Figma 原始 Logo、人物插画与图标已下载到 public/assets,不依赖临时 Figma URL。品牌保持啡跃 Endoleap;shadcn Button / Dialog 使用官方 registry 源码。依赖版本固定,package-lock.json 可用于 npm ci。 @@ -73,3 +73,11 @@ API 测试使用本机临时后端和独立前端进程,检查会话 Cookie、 性能分析、实测耗时和修复说明见 [PERFORMANCE.md](PERFORMANCE.md)。 流程回归可在支持 TypeScript 类型擦除的 Node 版本执行:`node --experimental-strip-types --test tests/workspace.test.mjs`。 + +## 品牌资源 + +`public/brand/` 原样复用旧 PROMPT 仓库 `Zayden-Jung/probably-rendering-one-more-pixel-tonight` 的 `packages/brand/assets/`,来源提交 `47467874841ea7f7b4b362d4ec0e66f236c6a7d6`。 + +共 88 个原始资源:6 套 PNG(logo/icon/mono 的 light 与 dark 版本,每套 16、24、32、48、64、128、180、192、256、512、1024、2048px),8 个 SVG,以及 8 个应用图标文件(含 3 种 ICO、Apple Touch 和 PWA PNG)。所有文件与来源 Git blob 哈希一致。 + +收起侧栏后的浮框使用 Logo 返回 `/`;展开侧栏后仍保留新建页面按钮。首页与账户页品牌组件使用原始 SVG,根布局声明 ICO、深浅色 PNG favicon 和 Apple Touch 图标。 diff --git a/VALIDATION.md b/VALIDATION.md index 117a19c..e2da26c 100644 --- a/VALIDATION.md +++ b/VALIDATION.md @@ -48,3 +48,12 @@ - Foundry 主线已保存 OAuth picture 并通过 profile.avatar_url 返回,本次补齐前端类型和头像渲染,无需修改后端。图片失败或缺失时回退首字,图片使用 no-referrer。 - 类型检查与 6 项 workspace 测试通过;隔离临时目录的 Webpack 生产构建及 API 冒烟检查通过,新增头像 URL 透传、资料修改后保留头像的检查。 - 沿用用户“不访问浏览器,由用户试用反馈”的要求,未运行本次浏览器视觉、动画及真实 Google 头像加载验收;未修改真实账户资料。 + +## 全屏画布与原始品牌资源(2026-11-06) + +- 删除图谱顶部标题栏及相关 CSS;画布 `position: fixed; inset: 0; height: 100dvh`,侧栏和浮框保留在更高层级,加载与错误消息以浮层显示。 +- 收起侧栏后,将原新建按钮位置替换为 Logo 链接,目标为主页 `/`;Logo 提供 1x/2x/3x PNG,展开侧栏的新建按钮不变。 +- 从旧 PROMPT 提交 `47467874841ea7f7b4b362d4ec0e66f236c6a7d6` 复制 88 个原始 PNG/ICO/SVG,逐一核对 Git blob 哈希完全一致;PNG 尺寸为 16px 至 2048px。 +- 全局 Brand 组件与根布局 favicon/Apple Touch 元信息使用迁入资源。 +- 按用户约定不访问浏览器,视觉与点击交互由用户试用反馈;自动检查覆盖资源 HTTP 响应和字节一致性、图标元信息及既有接口流程。 +- 本次类型检查、隔离 Webpack 生产构建、6 项 workspace 测试及扩展 API 冒烟检查均通过;88 个品牌资源的 HTTP 状态和响应字节与本地原文件一致。 diff --git a/public/brand/icons/app-square-1024.png b/public/brand/icons/app-square-1024.png new file mode 100644 index 0000000..c29d715 Binary files /dev/null and b/public/brand/icons/app-square-1024.png differ diff --git a/public/brand/icons/apple-touch-icon.png b/public/brand/icons/apple-touch-icon.png new file mode 100644 index 0000000..f396f82 Binary files /dev/null and b/public/brand/icons/apple-touch-icon.png differ diff --git a/public/brand/icons/avatar-circle-1024.png b/public/brand/icons/avatar-circle-1024.png new file mode 100644 index 0000000..654b40e Binary files /dev/null and b/public/brand/icons/avatar-circle-1024.png differ diff --git a/public/brand/icons/favicon-light.ico b/public/brand/icons/favicon-light.ico new file mode 100644 index 0000000..11744ca Binary files /dev/null and b/public/brand/icons/favicon-light.ico differ diff --git a/public/brand/icons/favicon-transparent.ico b/public/brand/icons/favicon-transparent.ico new file mode 100644 index 0000000..8c48d77 Binary files /dev/null and b/public/brand/icons/favicon-transparent.ico differ diff --git a/public/brand/icons/favicon.ico b/public/brand/icons/favicon.ico new file mode 100644 index 0000000..3039609 Binary files /dev/null and b/public/brand/icons/favicon.ico differ diff --git a/public/brand/icons/pwa-192.png b/public/brand/icons/pwa-192.png new file mode 100644 index 0000000..b5fff1f Binary files /dev/null and b/public/brand/icons/pwa-192.png differ diff --git a/public/brand/icons/pwa-512.png b/public/brand/icons/pwa-512.png new file mode 100644 index 0000000..9e50774 Binary files /dev/null and b/public/brand/icons/pwa-512.png differ diff --git a/public/brand/png/icon-dark/endoleap-1024.png b/public/brand/png/icon-dark/endoleap-1024.png new file mode 100644 index 0000000..29930b4 Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-1024.png differ diff --git a/public/brand/png/icon-dark/endoleap-128.png b/public/brand/png/icon-dark/endoleap-128.png new file mode 100644 index 0000000..327dfac Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-128.png differ diff --git a/public/brand/png/icon-dark/endoleap-16.png b/public/brand/png/icon-dark/endoleap-16.png new file mode 100644 index 0000000..a55e874 Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-16.png differ diff --git a/public/brand/png/icon-dark/endoleap-180.png b/public/brand/png/icon-dark/endoleap-180.png new file mode 100644 index 0000000..e9e87bf Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-180.png differ diff --git a/public/brand/png/icon-dark/endoleap-192.png b/public/brand/png/icon-dark/endoleap-192.png new file mode 100644 index 0000000..8156f85 Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-192.png differ diff --git a/public/brand/png/icon-dark/endoleap-2048.png b/public/brand/png/icon-dark/endoleap-2048.png new file mode 100644 index 0000000..de5fe7a Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-2048.png differ diff --git a/public/brand/png/icon-dark/endoleap-24.png b/public/brand/png/icon-dark/endoleap-24.png new file mode 100644 index 0000000..31c5124 Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-24.png differ diff --git a/public/brand/png/icon-dark/endoleap-256.png b/public/brand/png/icon-dark/endoleap-256.png new file mode 100644 index 0000000..5c4caac Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-256.png differ diff --git a/public/brand/png/icon-dark/endoleap-32.png b/public/brand/png/icon-dark/endoleap-32.png new file mode 100644 index 0000000..c53f3fe Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-32.png differ diff --git a/public/brand/png/icon-dark/endoleap-48.png b/public/brand/png/icon-dark/endoleap-48.png new file mode 100644 index 0000000..7b93350 Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-48.png differ diff --git a/public/brand/png/icon-dark/endoleap-512.png b/public/brand/png/icon-dark/endoleap-512.png new file mode 100644 index 0000000..278475c Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-512.png differ diff --git a/public/brand/png/icon-dark/endoleap-64.png b/public/brand/png/icon-dark/endoleap-64.png new file mode 100644 index 0000000..916350c Binary files /dev/null and b/public/brand/png/icon-dark/endoleap-64.png differ diff --git a/public/brand/png/icon-light/endoleap-1024.png b/public/brand/png/icon-light/endoleap-1024.png new file mode 100644 index 0000000..82fca6d Binary files /dev/null and b/public/brand/png/icon-light/endoleap-1024.png differ diff --git a/public/brand/png/icon-light/endoleap-128.png b/public/brand/png/icon-light/endoleap-128.png new file mode 100644 index 0000000..60f51a6 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-128.png differ diff --git a/public/brand/png/icon-light/endoleap-16.png b/public/brand/png/icon-light/endoleap-16.png new file mode 100644 index 0000000..443e7ab Binary files /dev/null and b/public/brand/png/icon-light/endoleap-16.png differ diff --git a/public/brand/png/icon-light/endoleap-180.png b/public/brand/png/icon-light/endoleap-180.png new file mode 100644 index 0000000..bb90075 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-180.png differ diff --git a/public/brand/png/icon-light/endoleap-192.png b/public/brand/png/icon-light/endoleap-192.png new file mode 100644 index 0000000..667d8ab Binary files /dev/null and b/public/brand/png/icon-light/endoleap-192.png differ diff --git a/public/brand/png/icon-light/endoleap-2048.png b/public/brand/png/icon-light/endoleap-2048.png new file mode 100644 index 0000000..3e856e9 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-2048.png differ diff --git a/public/brand/png/icon-light/endoleap-24.png b/public/brand/png/icon-light/endoleap-24.png new file mode 100644 index 0000000..7d348b5 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-24.png differ diff --git a/public/brand/png/icon-light/endoleap-256.png b/public/brand/png/icon-light/endoleap-256.png new file mode 100644 index 0000000..74d0e29 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-256.png differ diff --git a/public/brand/png/icon-light/endoleap-32.png b/public/brand/png/icon-light/endoleap-32.png new file mode 100644 index 0000000..f26f0c4 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-32.png differ diff --git a/public/brand/png/icon-light/endoleap-48.png b/public/brand/png/icon-light/endoleap-48.png new file mode 100644 index 0000000..ad11c46 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-48.png differ diff --git a/public/brand/png/icon-light/endoleap-512.png b/public/brand/png/icon-light/endoleap-512.png new file mode 100644 index 0000000..9cb74f5 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-512.png differ diff --git a/public/brand/png/icon-light/endoleap-64.png b/public/brand/png/icon-light/endoleap-64.png new file mode 100644 index 0000000..9d0ced7 Binary files /dev/null and b/public/brand/png/icon-light/endoleap-64.png differ diff --git a/public/brand/png/logo-dark/endoleap-1024.png b/public/brand/png/logo-dark/endoleap-1024.png new file mode 100644 index 0000000..b1c7b5a Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-1024.png differ diff --git a/public/brand/png/logo-dark/endoleap-128.png b/public/brand/png/logo-dark/endoleap-128.png new file mode 100644 index 0000000..b6cbae6 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-128.png differ diff --git a/public/brand/png/logo-dark/endoleap-16.png b/public/brand/png/logo-dark/endoleap-16.png new file mode 100644 index 0000000..9daea7e Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-16.png differ diff --git a/public/brand/png/logo-dark/endoleap-180.png b/public/brand/png/logo-dark/endoleap-180.png new file mode 100644 index 0000000..ab2ceb2 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-180.png differ diff --git a/public/brand/png/logo-dark/endoleap-192.png b/public/brand/png/logo-dark/endoleap-192.png new file mode 100644 index 0000000..4d26fa9 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-192.png differ diff --git a/public/brand/png/logo-dark/endoleap-2048.png b/public/brand/png/logo-dark/endoleap-2048.png new file mode 100644 index 0000000..879e552 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-2048.png differ diff --git a/public/brand/png/logo-dark/endoleap-24.png b/public/brand/png/logo-dark/endoleap-24.png new file mode 100644 index 0000000..13763d3 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-24.png differ diff --git a/public/brand/png/logo-dark/endoleap-256.png b/public/brand/png/logo-dark/endoleap-256.png new file mode 100644 index 0000000..dcf14ab Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-256.png differ diff --git a/public/brand/png/logo-dark/endoleap-32.png b/public/brand/png/logo-dark/endoleap-32.png new file mode 100644 index 0000000..cc51bc8 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-32.png differ diff --git a/public/brand/png/logo-dark/endoleap-48.png b/public/brand/png/logo-dark/endoleap-48.png new file mode 100644 index 0000000..2304776 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-48.png differ diff --git a/public/brand/png/logo-dark/endoleap-512.png b/public/brand/png/logo-dark/endoleap-512.png new file mode 100644 index 0000000..4bbc063 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-512.png differ diff --git a/public/brand/png/logo-dark/endoleap-64.png b/public/brand/png/logo-dark/endoleap-64.png new file mode 100644 index 0000000..9fc6521 Binary files /dev/null and b/public/brand/png/logo-dark/endoleap-64.png differ diff --git a/public/brand/png/logo-light/endoleap-1024.png b/public/brand/png/logo-light/endoleap-1024.png new file mode 100644 index 0000000..5656d7e Binary files /dev/null and b/public/brand/png/logo-light/endoleap-1024.png differ diff --git a/public/brand/png/logo-light/endoleap-128.png b/public/brand/png/logo-light/endoleap-128.png new file mode 100644 index 0000000..3299787 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-128.png differ diff --git a/public/brand/png/logo-light/endoleap-16.png b/public/brand/png/logo-light/endoleap-16.png new file mode 100644 index 0000000..02d70a1 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-16.png differ diff --git a/public/brand/png/logo-light/endoleap-180.png b/public/brand/png/logo-light/endoleap-180.png new file mode 100644 index 0000000..16a9516 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-180.png differ diff --git a/public/brand/png/logo-light/endoleap-192.png b/public/brand/png/logo-light/endoleap-192.png new file mode 100644 index 0000000..7999bf5 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-192.png differ diff --git a/public/brand/png/logo-light/endoleap-2048.png b/public/brand/png/logo-light/endoleap-2048.png new file mode 100644 index 0000000..cb762c6 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-2048.png differ diff --git a/public/brand/png/logo-light/endoleap-24.png b/public/brand/png/logo-light/endoleap-24.png new file mode 100644 index 0000000..92384d5 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-24.png differ diff --git a/public/brand/png/logo-light/endoleap-256.png b/public/brand/png/logo-light/endoleap-256.png new file mode 100644 index 0000000..7e8c9ea Binary files /dev/null and b/public/brand/png/logo-light/endoleap-256.png differ diff --git a/public/brand/png/logo-light/endoleap-32.png b/public/brand/png/logo-light/endoleap-32.png new file mode 100644 index 0000000..4d84ec5 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-32.png differ diff --git a/public/brand/png/logo-light/endoleap-48.png b/public/brand/png/logo-light/endoleap-48.png new file mode 100644 index 0000000..2e9ab78 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-48.png differ diff --git a/public/brand/png/logo-light/endoleap-512.png b/public/brand/png/logo-light/endoleap-512.png new file mode 100644 index 0000000..9dee33d Binary files /dev/null and b/public/brand/png/logo-light/endoleap-512.png differ diff --git a/public/brand/png/logo-light/endoleap-64.png b/public/brand/png/logo-light/endoleap-64.png new file mode 100644 index 0000000..d5cb3b0 Binary files /dev/null and b/public/brand/png/logo-light/endoleap-64.png differ diff --git a/public/brand/png/mono-dark/endoleap-1024.png b/public/brand/png/mono-dark/endoleap-1024.png new file mode 100644 index 0000000..8ed88d4 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-1024.png differ diff --git a/public/brand/png/mono-dark/endoleap-128.png b/public/brand/png/mono-dark/endoleap-128.png new file mode 100644 index 0000000..17f3556 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-128.png differ diff --git a/public/brand/png/mono-dark/endoleap-16.png b/public/brand/png/mono-dark/endoleap-16.png new file mode 100644 index 0000000..86acb72 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-16.png differ diff --git a/public/brand/png/mono-dark/endoleap-180.png b/public/brand/png/mono-dark/endoleap-180.png new file mode 100644 index 0000000..c8d4194 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-180.png differ diff --git a/public/brand/png/mono-dark/endoleap-192.png b/public/brand/png/mono-dark/endoleap-192.png new file mode 100644 index 0000000..9f7ac8e Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-192.png differ diff --git a/public/brand/png/mono-dark/endoleap-2048.png b/public/brand/png/mono-dark/endoleap-2048.png new file mode 100644 index 0000000..91af518 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-2048.png differ diff --git a/public/brand/png/mono-dark/endoleap-24.png b/public/brand/png/mono-dark/endoleap-24.png new file mode 100644 index 0000000..5ec09f6 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-24.png differ diff --git a/public/brand/png/mono-dark/endoleap-256.png b/public/brand/png/mono-dark/endoleap-256.png new file mode 100644 index 0000000..65d3f55 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-256.png differ diff --git a/public/brand/png/mono-dark/endoleap-32.png b/public/brand/png/mono-dark/endoleap-32.png new file mode 100644 index 0000000..8311812 Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-32.png differ diff --git a/public/brand/png/mono-dark/endoleap-48.png b/public/brand/png/mono-dark/endoleap-48.png new file mode 100644 index 0000000..b23244a Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-48.png differ diff --git a/public/brand/png/mono-dark/endoleap-512.png b/public/brand/png/mono-dark/endoleap-512.png new file mode 100644 index 0000000..ce2d05d Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-512.png differ diff --git a/public/brand/png/mono-dark/endoleap-64.png b/public/brand/png/mono-dark/endoleap-64.png new file mode 100644 index 0000000..79a02ce Binary files /dev/null and b/public/brand/png/mono-dark/endoleap-64.png differ diff --git a/public/brand/png/mono-light/endoleap-1024.png b/public/brand/png/mono-light/endoleap-1024.png new file mode 100644 index 0000000..ceeb609 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-1024.png differ diff --git a/public/brand/png/mono-light/endoleap-128.png b/public/brand/png/mono-light/endoleap-128.png new file mode 100644 index 0000000..9c1c3e3 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-128.png differ diff --git a/public/brand/png/mono-light/endoleap-16.png b/public/brand/png/mono-light/endoleap-16.png new file mode 100644 index 0000000..4d0e2a0 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-16.png differ diff --git a/public/brand/png/mono-light/endoleap-180.png b/public/brand/png/mono-light/endoleap-180.png new file mode 100644 index 0000000..15dd690 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-180.png differ diff --git a/public/brand/png/mono-light/endoleap-192.png b/public/brand/png/mono-light/endoleap-192.png new file mode 100644 index 0000000..2c9f397 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-192.png differ diff --git a/public/brand/png/mono-light/endoleap-2048.png b/public/brand/png/mono-light/endoleap-2048.png new file mode 100644 index 0000000..bbbcce0 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-2048.png differ diff --git a/public/brand/png/mono-light/endoleap-24.png b/public/brand/png/mono-light/endoleap-24.png new file mode 100644 index 0000000..dc35cc8 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-24.png differ diff --git a/public/brand/png/mono-light/endoleap-256.png b/public/brand/png/mono-light/endoleap-256.png new file mode 100644 index 0000000..896221a Binary files /dev/null and b/public/brand/png/mono-light/endoleap-256.png differ diff --git a/public/brand/png/mono-light/endoleap-32.png b/public/brand/png/mono-light/endoleap-32.png new file mode 100644 index 0000000..f695ca0 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-32.png differ diff --git a/public/brand/png/mono-light/endoleap-48.png b/public/brand/png/mono-light/endoleap-48.png new file mode 100644 index 0000000..bec9be8 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-48.png differ diff --git a/public/brand/png/mono-light/endoleap-512.png b/public/brand/png/mono-light/endoleap-512.png new file mode 100644 index 0000000..b049efd Binary files /dev/null and b/public/brand/png/mono-light/endoleap-512.png differ diff --git a/public/brand/png/mono-light/endoleap-64.png b/public/brand/png/mono-light/endoleap-64.png new file mode 100644 index 0000000..1b016d7 Binary files /dev/null and b/public/brand/png/mono-light/endoleap-64.png differ diff --git a/public/brand/svg/app-square.svg b/public/brand/svg/app-square.svg new file mode 100644 index 0000000..2f34007 --- /dev/null +++ b/public/brand/svg/app-square.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/avatar-circle.svg b/public/brand/svg/avatar-circle.svg new file mode 100644 index 0000000..892d2a5 --- /dev/null +++ b/public/brand/svg/avatar-circle.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/icon-dark.svg b/public/brand/svg/icon-dark.svg new file mode 100644 index 0000000..f9a6cdb --- /dev/null +++ b/public/brand/svg/icon-dark.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/icon-light.svg b/public/brand/svg/icon-light.svg new file mode 100644 index 0000000..4e06146 --- /dev/null +++ b/public/brand/svg/icon-light.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/logo-dark.svg b/public/brand/svg/logo-dark.svg new file mode 100644 index 0000000..0b3b51e --- /dev/null +++ b/public/brand/svg/logo-dark.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/logo-light.svg b/public/brand/svg/logo-light.svg new file mode 100644 index 0000000..aa9bf36 --- /dev/null +++ b/public/brand/svg/logo-light.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/mono-dark.svg b/public/brand/svg/mono-dark.svg new file mode 100644 index 0000000..ad668c8 --- /dev/null +++ b/public/brand/svg/mono-dark.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/public/brand/svg/mono-light.svg b/public/brand/svg/mono-light.svg new file mode 100644 index 0000000..05e254f --- /dev/null +++ b/public/brand/svg/mono-light.svg @@ -0,0 +1 @@ +Endoleap Mocha logo v1.2 \ No newline at end of file diff --git a/src/app/dashboard/dashboard.tsx b/src/app/dashboard/dashboard.tsx index dffab3c..5c2dfc7 100644 --- a/src/app/dashboard/dashboard.tsx +++ b/src/app/dashboard/dashboard.tsx @@ -148,7 +148,11 @@ export default function DashboardSidebar() { exit={{ opacity: 0, y: reduceMotion ? 0 : -6 }} transition={{ duration: reduceMotion ? 0 : 0.14 }}> toggleSidebar(false)} /> - {createButton} + + + {error &&

{error}

} )} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a1684d6..b9fe8ab 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,6 +5,14 @@ import "@/styles/globals.css"; export const metadata: Metadata = { title: "啡跃 Endoleap · 让灵感有形", description: "收藏灵感、连接知识,在自己的创作空间让想法慢慢成形。", + icons: { + icon: [ + { url: "/brand/icons/favicon.ico", type: "image/x-icon", sizes: "any" }, + { url: "/brand/png/icon-light/endoleap-32.png", type: "image/png", sizes: "32x32", media: "(prefers-color-scheme: light)" }, + { url: "/brand/png/icon-dark/endoleap-32.png", type: "image/png", sizes: "32x32", media: "(prefers-color-scheme: dark)" }, + ], + apple: [{ url: "/brand/icons/apple-touch-icon.png", sizes: "180x180", type: "image/png" }], + }, }; export default function RootLayout({ children }: { children: ReactNode }) { diff --git a/src/components/brand.tsx b/src/components/brand.tsx index deae253..9e8ed2d 100644 --- a/src/components/brand.tsx +++ b/src/components/brand.tsx @@ -7,7 +7,7 @@ export function Brand({ light = false }: { light?: boolean }) { aria-label="啡跃 Endoleap 首页" > - {error ?

{error}

: board ? ( - <> -

{board.title}

{demo && 演示}
-
- - ) :

正在打开图谱…

} +
+
+ {error ?

{error}

+ : !board &&

正在打开图谱…

}
); } diff --git a/src/components/workspace/workspace.module.css b/src/components/workspace/workspace.module.css index 2865bc1..d0bc957 100644 --- a/src/components/workspace/workspace.module.css +++ b/src/components/workspace/workspace.module.css @@ -105,12 +105,14 @@ .settingsActions button { padding: 6px 12px; border: 1px solid #e2ddd6; border-radius: 6px; font-size: 13px; } .settingsActions button[type="submit"] { background: #37352f; color: white; border-color: #37352f; } .settingsActions button:disabled { opacity: 0.5; cursor: not-allowed; } -.graph { flex: 1; min-width: 0; display: flex; flex-direction: column; min-height: 100dvh; } -.graphHeader { display: flex; align-items: center; gap: 10px; padding: 20px 24px 20px 110px; min-height: 64px; border-bottom: 1px solid #efede8; font-size: 13px; } -.graphHeader h1 { margin: 0; font-size: 14px; font-weight: 500; } -.graphHeader span { color: #aaa299; } -.graphSurface { flex: 1; background-image: radial-gradient(#b8aea245 1px, transparent 1px); background-size: 22px 22px; } -.graphStatus { padding: 80px 24px; color: #9a948c; text-align: center; font-size: 13px; } +.graph { position: fixed; inset: 0; z-index: 0; display: flex; width: 100%; height: 100dvh; background: #fffefb; } +.graphSurface { width: 100%; height: 100%; background-image: radial-gradient(#b8aea245 1px, transparent 1px); background-size: 22px 22px; } +.graphStatus { position: absolute; left: 50%; top: 72px; transform: translateX(-50%); max-width: calc(100vw - 48px); padding: 8px 12px; border-radius: 6px; background: #fffefbe6; color: #9a948c; text-align: center; font-size: 13px; } @keyframes account-enter { from { opacity: 0; transform: translateY(4px) scale(0.985); } to { opacity: 1; transform: translateY(0) scale(1); } } -@media (max-width: 600px) { .shell { --sidebar-width: 240px; } .graphHeader { padding: 20px 14px; } } +@media (max-width: 600px) { .shell { --sidebar-width: 240px; } } @media (prefers-reduced-motion: reduce) { .accountPopup:popover-open { animation: none; } } + +.logoLink { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 28px; height: 24px; padding: 4px 6px; border-radius: 5px; } +.logoLink img { display: block; width: 16px; height: 16px; } +.logoLink:hover { background: #e9e7e3; } +.logoLink:focus-visible { outline: 2px solid #9d7d66; outline-offset: 2px; } diff --git a/tests/api-smoke.mjs b/tests/api-smoke.mjs index 03588a0..7012963 100644 --- a/tests/api-smoke.mjs +++ b/tests/api-smoke.mjs @@ -3,6 +3,7 @@ import { createServer } from "node:http"; import { spawn } from "node:child_process"; import { once } from "node:events"; import { fileURLToPath } from "node:url"; +import { readdir, readFile } from "node:fs/promises"; const host = "http://127.0.0.1:3005"; const graphs = new Map(); let mockProfile = { @@ -95,6 +96,16 @@ try { assert.match(html, /啡跃 Endoleap · 让灵感有形/); assert.match(html, /name="description"/); assert.match(html, /name="viewport"/); + assert(html.includes('/brand/icons/favicon.ico')); + assert(html.includes('/brand/icons/apple-touch-icon.png')); + } + const brandRoot = new URL("../public/brand/", import.meta.url); + const assets = (await readdir(brandRoot, { recursive: true })).filter((file) => /\.(png|ico|svg)$/.test(file)); + assert.equal(assets.length, 88); + for (const asset of assets) { + const response = await fetch(host + "/brand/" + asset); + assert.equal(response.status, 200, asset); + assert.deepEqual(Buffer.from(await response.arrayBuffer()), await readFile(new URL(asset, brandRoot)), asset); } assert.equal((await fetch(host + "/missing-page")).status, 404); const res = await fetch(host + "/api/foundry/auth/login", { @@ -195,7 +206,7 @@ try { assert.equal(await logout.text(), ""); assert.match(logout.headers.get("set-cookie"), /Max-Age=0/); console.log( - "PASS: avatar and profile updates, App Router pages and metadata, body validation, method and query filtering, OAuth redirects, logout, session cookie, token removal, authenticated proxy, invalid session, cross-origin rejection, path allowlist, OAuth validation", + "PASS: 88 original brand assets, favicon metadata, avatar and profile updates, App Router pages and metadata, body validation, method and query filtering, OAuth redirects, logout, session cookie, token removal, authenticated proxy, invalid session, cross-origin rejection, path allowlist, OAuth validation", ); } finally { const exited = once(app, "exit");