@mokuyoaxis/dsh-iris 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dsh/skills/iris-compose-media/SKILL.md +10 -5
- package/.dsh/skills/iris-compose-media/references/workflows.md +7 -1
- package/.dsh/skills/iris-verify-ui/SKILL.md +2 -1
- package/CHANGELOG.md +99 -1
- package/README.en.md +124 -31
- package/README.md +124 -31
- package/bin/dsh-iris.js +593 -13
- package/docs/AGENT_QUICKSTART.md +39 -0
- package/docs/ARCHITECTURE.md +87 -64
- package/docs/ARTIFACT_LIBRARY.md +5 -5
- package/docs/ARTIFACT_MANIFEST.md +60 -0
- package/docs/CLI_MANAGEMENT.md +181 -0
- package/docs/COMPOSITE_VISION.md +35 -0
- package/docs/CORE_RUNTIME_CONTRACT.md +84 -0
- package/docs/DSH_CORE_MIGRATION.md +135 -0
- package/docs/DSH_RC2_ADAPTATION.md +38 -0
- package/docs/FAULT_INJECTION.md +12 -2
- package/docs/HEADLESS_CLI.md +223 -0
- package/docs/HOST_ADAPTER_CONTRACT.md +36 -17
- package/docs/HOST_DOCTOR.md +4 -2
- package/docs/MODEL_PORT_CONTRACT.md +305 -0
- package/docs/OCR_MODEL.md +39 -0
- package/docs/PROMPT_OPTIMIZER.md +47 -0
- package/docs/PROVIDER_ADAPTER_CONTRACT.md +53 -10
- package/docs/PROVIDER_HEALTH.md +22 -5
- package/docs/PROVIDER_RUNTIME_HARNESS.md +33 -0
- package/docs/PROVIDER_SUBMISSION_CONTRACT.md +2 -2
- package/docs/ROADMAP.md +49 -83
- package/docs/SECURITY.md +8 -7
- package/docs/TASK_SEMANTICS.md +2 -2
- package/docs/VISION_CLI.md +132 -0
- package/docs/VISION_MODEL.md +51 -0
- package/docs/WORKBENCH_ARTIFACTS.md +67 -0
- package/docs/assets/logo/README.md +55 -0
- package/docs/assets/logo/iris-bubble-concept.svg +67 -0
- package/docs/assets/logo/iris-bubble.svg +14 -0
- package/docs/assets/logo/iris-interim-flower.png +0 -0
- package/docs/assets/logo/iris-logo-mono-inverse.svg +78 -0
- package/docs/assets/logo/iris-logo-mono.svg +78 -0
- package/docs/assets/logo/iris-logo.svg +78 -0
- package/docs/assets/logo/iris-mark-mono-inverse.svg +42 -0
- package/docs/assets/logo/iris-mark-mono.svg +42 -0
- package/docs/assets/logo/iris-mark.svg +42 -0
- package/docs/file-access-across-environments.md +8 -5
- package/docs/releases/0.2.0.md +48 -0
- package/docs/releases/0.2.1.md +56 -0
- package/lib/actions.js +520 -591
- package/lib/adapters.js +184 -36
- package/lib/api.js +200 -11
- package/lib/chromium-browser.js +117 -0
- package/lib/client.js +1390 -105
- package/lib/command-service.js +534 -0
- package/lib/composite-vision-routing.js +42 -0
- package/lib/config.js +143 -51
- package/lib/core-artifact-store.js +630 -0
- package/lib/core-artifacts.js +4 -0
- package/lib/core-attention.js +103 -0
- package/lib/core-contract.js +105 -0
- package/lib/core-doctor.js +41 -0
- package/lib/core-lease-recovery.js +170 -0
- package/lib/core-maintenance.js +213 -0
- package/lib/core-runtime.js +232 -0
- package/lib/core-tasks.js +567 -0
- package/lib/core-user-projection.js +193 -0
- package/lib/doctor.js +92 -33
- package/lib/dsh-core-adapter.js +653 -0
- package/lib/dsh-host-adapter.js +58 -7
- package/lib/dsh-text-model-adapter.js +222 -0
- package/lib/dsh-vision-model-adapter.js +75 -0
- package/lib/generation-input.js +126 -0
- package/lib/guard.js +3 -3
- package/lib/headless-vision.js +181 -0
- package/lib/host-runtime.js +1 -0
- package/lib/http-vision-model-adapter.js +187 -0
- package/lib/image-edit-input.js +34 -0
- package/lib/index.js +323 -188
- package/lib/locate.js +86 -28
- package/lib/media-probe.js +2 -1
- package/lib/model-call-runtime.js +45 -0
- package/lib/model-invoker.js +220 -0
- package/lib/model-port-contract.js +341 -0
- package/lib/models.js +105 -14
- package/lib/ocr-model-routing.js +26 -0
- package/lib/ocr.js +110 -64
- package/lib/prompt-optimizer-config.js +2 -1
- package/lib/prompt-optimizer-core.js +121 -0
- package/lib/prompt-optimizer.js +37 -193
- package/lib/provider-adapter.js +49 -23
- package/lib/provider-adapters.js +165 -26
- package/lib/provider-catalog.js +183 -0
- package/lib/provider-config-service.js +236 -0
- package/lib/provider-contract.js +74 -4
- package/lib/provider-health.js +80 -1
- package/lib/provider-protocol.js +74 -2
- package/lib/provider-task-runner.js +370 -0
- package/lib/summarize.js +31 -20
- package/lib/summary-input.js +52 -0
- package/lib/task-wait.js +40 -0
- package/lib/tasks.js +16 -4
- package/lib/video-input.js +30 -0
- package/lib/vision-core.js +42 -0
- package/lib/vision-image-input.js +83 -0
- package/lib/vision-input.js +31 -0
- package/lib/vision-model-routing.js +180 -0
- package/lib/vision.js +31 -9
- package/lib/workbench-artifacts.js +52 -0
- package/lib/workbench-management.js +151 -0
- package/lib/workbench-zip.js +39 -0
- package/package.json +8 -8
- package/user_guide.md +71 -26
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 单图视觉调用
|
|
2
|
+
|
|
3
|
+
状态:**Iris 0.2.1**。本文说明共享单图视觉调用。
|
|
4
|
+
|
|
5
|
+
## 使用与变化
|
|
6
|
+
|
|
7
|
+
Agent 的 `iris_look_at_image` / `iris_relook_attachment`、工作台的看图/重看,以及用户显式确认的视觉实测,改为消费共享 VisionModel Port。不自动生成媒体任务或保存 Core 产物。
|
|
8
|
+
|
|
9
|
+
`iris_look_at_image` 与看图动作现可用 `artifact_id` 代替 `image_path`,直接读取当前 DSH profile 的 Core 图片,二者必须二选一。图片的 MIME、原字节和内容哈希由共享读取器核对,不要求原文件或临时导出、不写入 Core;生成图片、HTML 截图、裁剪、视频帧均可使用。自持模型成功时无需为 Core 输入另存 DSH 附件;DSH 候选仍通过既有附件桥接。工具文字保留 Core ID,动作 JSON 带 `artifactId`。工作台原表单继续输入文件路径,动作 API 可直接传 ID。独立 CLI 的同一用法见 [视觉 CLI](VISION_CLI.md)。
|
|
10
|
+
|
|
11
|
+
Iris 按已配置的视觉模型顺序选择自持后端,最后考虑 DSH 默认视觉模型。DSH 必须明确提供 Provider、模型及图片输入能力;默认文本模型、未知元数据和身份漂移在生成前拒绝。自持成功时不查询 DSH 元数据或为回退额外保存附件。
|
|
12
|
+
|
|
13
|
+
只有明确认证/权限拒绝、速率/额度拒绝、正常完成但正文为空,以及本地能力不可用,才允许进入下一个候选。已收到部分正文、截断、工具调用、内容阻断、网络/协议错误、取消或超时都会停止操作。正常空结果后的切换可能已经产生上一模型的费用。
|
|
14
|
+
|
|
15
|
+
SSE `[DONE]`、EOF 或已经出现文字不代表完成。自持 Chat Completions 必须提供正常的 `finish_reason: stop`;DSH 必须提供可验证的正常 `finish`。正文超限和 token 截断明确失败,不再截取前若干字返回成功。DSH 的 `block-end` 替换同一块的 delta,思考正文不进入回答。
|
|
16
|
+
|
|
17
|
+
## 预算与图片
|
|
18
|
+
|
|
19
|
+
| 限制 | 默认值 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| 整体时间 | 120 秒,覆盖文件/Artifact/附件读取、元数据、桥接及所有候选 |
|
|
22
|
+
| 输入文字 | 32 KiB UTF-8 |
|
|
23
|
+
| 原图片读取 | 20 MiB,PNG/JPEG/WebP/GIF 字节;本地看图工具沿用 PNG/JPEG/WebP 格式限制 |
|
|
24
|
+
| 自持看图、定位与 OCR 每块发送副本 | 默认 8 MiB,可按账号/模型覆盖;最长边限制可选 |
|
|
25
|
+
| 输出正文 | 6,000 个 UTF-16 code units,超限失败 |
|
|
26
|
+
| 生成次数 | 最多为本次有限候选表的长度,每个候选只调用一次;不可用候选不计生成次数 |
|
|
27
|
+
| 显式视觉实测 | 默认 15 秒,只调用指定的一个自持模型,不使用 DSH 回退 |
|
|
28
|
+
|
|
29
|
+
视觉能力探针使用 128×128 纯红 PNG。旧的 1×1 图片会被部分模型的最小尺寸检查拒绝,不能据此判断模型不支持视觉。
|
|
30
|
+
|
|
31
|
+
图片以字节与 MIME 进入共享层,Core 读取先核验原图哈希。看图、重看和生成后自述会在发送前按实际账号 × 模型准备副本:小图原字节透传,超预算 PNG/JPEG/WebP 从原图等比缩小,保留 MIME 并应用 EXIF 方向,不写入 Core、不替换原图。动画图片需要缩放时明确拒绝,避免静默只取第一帧。原图下载与工作台展示继续使用原 Artifact。
|
|
32
|
+
|
|
33
|
+
Provider 和 `models[]` 均可选 `visionInput: {maxBytes, maxDimension}`;正整数分别表示编码图片字节上限和最长边像素。优先级为模型逐字段覆盖账号,再继承默认 8 MiB。`null` 恢复继承,不迁移旧配置,也不自动探测供应商上限。8 MiB 是客户端默认发送预算,不表示所有模型都接受该大小。CLI 和工作台设置见 [配置管理](CLI_MANAGEMENT.md#看图输入预算)。
|
|
34
|
+
|
|
35
|
+
DSH rc.2 会压缩宿主附件。看图、OCR 和定位允许这种宿主规范化,并检查引用哈希、实际 MIME、字节数及原始/归一化尺寸;随后仍使用同次 `saveImage()` 返回的引用。损坏或不匹配的引用会在模型调用前拒绝。OCR 在切片后应用预算,记录真正输入的尺寸;定位明确约定模型坐标域,处理缩放和 EXIF 方向后返回原图像素。详见 [OCR](OCR_MODEL.md) 和 [定位](COMPOSITE_VISION.md)。默认宿主候选应用客户端 8 MiB 预算,宿主自身仍可能进一步缩小图片。
|
|
36
|
+
|
|
37
|
+
大小拒绝使用 `IRIS_MODEL_IMAGE_TOO_LARGE`;已知上限时显示实际字节数及上限。上游明确的 400 图片大小消息仅提取数值,不展示原始供应商正文;其他 400 是输入拒绝,429 仍按限流/额度分类。一次调用不会因大小拒绝自动压缩重发或切换模型。
|
|
38
|
+
|
|
39
|
+
预先取消时不读取图片、不做桥接、不调用模型。在途取消/超时会向模型、读取及元数据传递 abort,并结束底层迭代。DSH rc.2 的 `saveImage()` 没有取消参数:本地等待仍有界,迟到保存可能留下宿主附件,之后不会启动生成。Host 附件属于宿主数据,不是 Core Artifact;不自动删除它们。取消也不证明远端执行或计费已停止。
|
|
40
|
+
|
|
41
|
+
## 开发与验证边界
|
|
42
|
+
|
|
43
|
+
`vision-core.js` 只消费显式请求与 Model Ports;`vision-model-routing.js` 拥有配置选型、文件解析和结果/健康投影;HTTP 与 DSH 适配器拥有协议和图片桥接。安全错误只包含稳定代码、调用事实和受控状态,不能包含 Prompt、图片、Key、端点或原始异常。
|
|
44
|
+
|
|
45
|
+
两类视觉协议复用 Model Port conformance;HTTP 额外检查 SSE 分帧、UTF-8、终态及正文上限,DSH 额外检查附件字节、元数据与迟到桥接。实际安装的 rc.2 Runtime/Attachments 另用离线模型源验收;包外验收使用无 DSH/Cordis 的安装副本。
|
|
46
|
+
|
|
47
|
+
2026-10-02 使用现有 DashScope `qwen3-vl-flash` 做了隔离实测:HTTP Port、DSH 原生 PiAiAdapter 与实际 Runtime、Agent 看图/重看、工作台看图/重看、截断拒绝和收到正文后的取消均通过。DSH 的通用 OpenAI 兼容路由在本次测试中需显式设置 `compat.maxTokensField: max_tokens`,才能让 DashScope 执行输出 token 上限;这是测试路由的宿主配置,没有修改个人 profile。
|
|
48
|
+
|
|
49
|
+
[长图 OCR](OCR_MODEL.md)、[定位、拼图摘要与自述](COMPOSITE_VISION.md) 均已消费共享端口与整次预算;各自另验分块、bbox 解析、一张拼图一次生成及可选 Core 转写。legacy `vision.js` / Host `visionModel.analyze()` 兼容实现仍保留,现有业务入口不再调用。Model Port 的迁移切片本身不新增公开 SDK export 或生产依赖;0.2.1 提供 [视觉 CLI](VISION_CLI.md) 和可选 `visionInput`。复杂图像质量与 Android 浏览器仍需独立验证。
|
|
50
|
+
|
|
51
|
+
契约与迁移说明见 [Model Port](MODEL_PORT_CONTRACT.md) 和 [DSH → Core](DSH_CORE_MIGRATION.md)。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 工作台作品浏览、识别与管理
|
|
2
|
+
|
|
3
|
+
状态:**Iris 0.2.1**。
|
|
4
|
+
|
|
5
|
+
Iris 工作台的作品库统一展示 Core 和旧版作品,包括图片、视频、音频和文本。默认按时间倒序排列,每页 24 个;使用上一页、下一页浏览全部作品。媒体类型、作品来源和产物类型可组合筛选,匹配总数与 Core/旧版计数均按当前筛选计算。切换筛选回到第一页,刷新保留页码和筛选;尾页因作品数量减少而超界时,回到最后一页。
|
|
6
|
+
|
|
7
|
+
Core 的原始输入 `host-input` 不出现在作品库。不可读取的 Core 条目局部跳过并提示;Core 整体暂时不可用时仍可浏览旧版作品,此时计数只含可读取来源。图片提供预览,视频、音频提供播放器,文本可以打开原文件。
|
|
8
|
+
|
|
9
|
+
## 从图片卡看图与 OCR
|
|
10
|
+
|
|
11
|
+
Core 图片卡的“看图”“OCR”按钮直接读取原 Artifact。点击即按默认配置运行,不需要复制路径、导出图片或转换格式。
|
|
12
|
+
|
|
13
|
+
- 看图默认详细描述,可在“更多选项”填写问题并重新识别。
|
|
14
|
+
- OCR 默认块高 1200、重叠 120 像素,可在“更多选项”修改;结果明确标记完成、部分完成或失败。
|
|
15
|
+
- 结果面板保留图片预览,正文可复制或下载为浏览器本地 `.txt` 文件。
|
|
16
|
+
- “取消识别”、关闭结果或切换分析会取消在途请求;迟到响应不会覆盖后续分析。
|
|
17
|
+
- 关闭结果保留作品页码和筛选,不自动写回对话或启动生成任务。
|
|
18
|
+
|
|
19
|
+
支持 Core PNG/JPEG/WebP/GIF。模型沿用当前 Iris 视觉能力分配及既有候选规则;主动点击识别会请求模型,浏览列表不会。旧版图片保留打开和既有工具的文件路径输入;旧版作品 ID 与 Core ID 不混用。
|
|
20
|
+
|
|
21
|
+
看图、OCR 每块输入和定位按实际账号/模型准备发送副本,默认 8 MiB;大图保留 Core 原文件,只等比缩小发给模型的 PNG/JPEG/WebP。可在账号详情或模型行设置大小预算、最长边及恢复继承,见 [视觉输入预算](CLI_MANAGEMENT.md#看图输入预算)。展示、详情和下载仍读取原图;OCR 保留切片规则,结果标明缩小时的细字风险;定位返回已换算的原图像素。更新插件后需重新加载 DSH 后端并刷新客户端。
|
|
22
|
+
|
|
23
|
+
## 从图片卡改图
|
|
24
|
+
|
|
25
|
+
Core 静态 PNG/JPEG/WebP 图片卡增加“改图”。填写修改指令,可显式选择支持聊天生图的模型,或按现有候选顺序选择。面板只读取模型配置,不自动实测;只列出 `openai-chat-images` 生图模型,冷却/额度耗尽项不可选择。
|
|
26
|
+
|
|
27
|
+
点击“生成修改版”才调用模型,原图保留,修改版作为关联原图的新 Core 作品显示。成功后提供新 Artifact 链接、刷新作品库,保留筛选和页码;新作品可继续看图/OCR、编辑、下载和管理。来源最多 20 MiB;大图只处理发送副本,预算设置也可在聊天生图模型行编辑。
|
|
28
|
+
|
|
29
|
+
“停止等待”、关闭面板或切换分析会中止在途等待,迟到响应不覆盖新面板。远端可能已受理,须在任务区查看结果,不会自动再次生成。编辑任务的手动重试要求重新输入修改指令并确认原图 ID;只支持一次带图请求,不保存聊天历史或提供蒙版。详见 [CLI 改图](CLI_MANAGEMENT.md#artifact-聊天改图)。
|
|
30
|
+
|
|
31
|
+
## 查询与完整性
|
|
32
|
+
|
|
33
|
+
工作台使用同源 `GET /iris/api/works`,参数为 `offset`、`limit`(默认 24,最多 60)、`media_type`(all/image/video/audio/text)、`source`(all/core/legacy)和 `kind`(all 或具体产物类型)。服务端先过滤、按时间及来源/ID 稳定排序,再统一分页,返回 `items/total/offset/limit/kinds/counts`;客户端不再拼接两个已经分页的结果。
|
|
34
|
+
|
|
35
|
+
目录查询复用已提交的 Manifest 与派生 Index,只读取元数据和文件大小,不反复读取视频等媒体的完整字节、不重建索引或取得 Core writer 租约。打开媒体、看图/OCR、CLI inspect/list/export 保留原有完整内容哈希核验;目录里显示的哈希不表示本次浏览已经重新核验了全部文件内容。
|
|
36
|
+
|
|
37
|
+
OCR 动作 JSON 附 `status/totalChunks/successfulChunks/failedChunks/skippedChunks`,便于界面表达完整度。识别正文不自动保存为 Core Artifact。
|
|
38
|
+
|
|
39
|
+
## 选择、详情与批量下载
|
|
40
|
+
|
|
41
|
+
勾选作品卡或点击“选择本页”,显式选择最多 200 项。翻页和刷新保留选择,本页重复项不会重复加入;切换筛选清空选择。超过上限的整页选择会被拒绝,不截断或隐式选择所有匹配作品。
|
|
42
|
+
|
|
43
|
+
“复制选中 ID”每行一个 ID;旧版 ID 仍不能作为 Core Artifact 输入。“下载选中作品”把 Core 与旧版作品合为一个 ZIP,单次原文件合计最多 128 MiB。包内按 `core/<artifact_id>.<扩展名>` 和 `legacy/<作品ID>.<扩展名>` 命名,`works.json` 记录原文件名、来源、ID、MIME、字节数及 SHA-256,不携带本机路径、授权链接或提示词。所有选中项先预检,文件缺失或 Core 哈希失败时不返回部分 ZIP;保留原字节,不重编码图片或压缩媒体。可取消准备中的下载,大文件可继续使用 [CLI 批量导出](CLI_MANAGEMENT.md)。
|
|
44
|
+
|
|
45
|
+
每张卡的“详情”显示基本字段;Core 另展示完整 SHA-256、关联和尺寸/时间等安全元数据,并实际核验内容哈希。旧版只核验文件存在,不声称具有历史内容哈希。
|
|
46
|
+
|
|
47
|
+
## Core 回收区
|
|
48
|
+
|
|
49
|
+
Core 卡的“移入回收区”或“删除选中 Core 作品”先打开只读删除预览,再明确确认执行。批量删除只接受全部为 Core 的选中项;旧版保留原有单项永久删除与清空语义。
|
|
50
|
+
|
|
51
|
+
预览列出文件数、大小和引用阻塞。作品被任务记录引用时,可逐项明确勾选同时移除相关的已结束任务记录,再重新预览;未结束或结果未知任务不能勾选。任务仍关联未选中的其他作品、后续重试或外部产物关系时继续阻止删除,不自动级联或扩大选中集。
|
|
52
|
+
|
|
53
|
+
确认后复用 `core.delete` Command,将文件放入同一 Core 根的可恢复隔离目录。执行时重新核对事实和引用,成功返回事务 ID。“Core 回收区”列出删除与 CLI 清理事务;可明确确认恢复准备中、已隔离或中断的事务,恢复核对原哈希且不覆盖原位置冲突。已恢复/已回退事务保留记录但不能再次恢复。
|
|
54
|
+
|
|
55
|
+
隔离保留字节,不立即释放磁盘空间,也没有永久清空回收区入口。相同事务可使用 [CLI 管理命令](CLI_MANAGEMENT.md) 检查和恢复。这里只管理当前 DSH profile 的 Core,浏览/下载不请求模型。
|
|
56
|
+
|
|
57
|
+
新增内部同源入口:`GET /iris/api/works/{core|legacy}/:id`、`POST /iris/api/works/download`(`items:[{source,id}]`)、`POST /iris/api/works/delete`(`artifact_ids/task_ids/confirm_delete`)、`GET /iris/api/works/transactions`、`POST /iris/api/works/restore`(`transaction_id/confirm_restore:true`)。删除省略确认时只返回预览;执行与恢复必须显式确认,均沿用既有 Host/浏览器来源守卫。
|
|
58
|
+
|
|
59
|
+
## 验收状态与后续
|
|
60
|
+
|
|
61
|
+
0.2.1 已实现作品管理与图片卡改图。2026-10-09 的实现快照通过 163 个测试文件、263 文件 lint 与已安装 DSH rc.2 服务 31 项隔离检查;新增真实网关改图已分别通过 DSH 工具与工作台入口交付新 Artifact,来源哈希保持不变。正式版本包另执行仓库外安装与跨平台 CI,证据范围见 [迁移验证说明](DSH_CORE_MIGRATION.md#验证证据与限制)。
|
|
62
|
+
|
|
63
|
+
作品管理第二轮的历史快照(2026-10-08)通过 145 个测试文件、240 文件 lint、rc.2 服务 30 项,以及包外 100 命令和 140 文件候选包安装验证。程序化证据覆盖分页/过滤、客户端组件交互、ZIP 原字节与 CRC、删除引用保护、隔离/冲突恢复及工作台事务由独立 CLI 恢复。历史快照不代表最终 0.2.1 包已验收,详见 [迁移验证说明](DSH_CORE_MIGRATION.md#验证证据与限制)。
|
|
64
|
+
|
|
65
|
+
真实浏览器/移动端排版、播放器、剪贴板和下载体验仍待逐项验收;用户已有绘图/识图/TTS 的试用反馈不等于新作品卡和回收区已全部目视通过。后续拟以第三轮补这些检查、真实附件链路和异步重启/CLI 接管,当前尚未执行。收藏、标签和搜索列在 [后续路线图](ROADMAP.md#后续功能方向)。
|
|
66
|
+
|
|
67
|
+
更新本地插件后需重新加载 DSH 后端并刷新客户端,确保新路由和工具参数实际生效。
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# IRIS 视觉资产
|
|
2
|
+
|
|
3
|
+
悬浮泡泡目前采用 `iris-bubble.svg` 曲线鸢尾花(2026-09-30 概念替换)。2026-09-15 的像素块(cell)Logo 与图标集保留作为历史设计资产。旧 `docs/assets/iris-wordmark.svg` 已不再使用,源码文件暂留作历史兼容。
|
|
4
|
+
|
|
5
|
+
**当前 README 头图为 `iris-interim-flower.png`**(2026-09-17):维护者自生成素材裁剪的灰度线稿鸢尾花,仅取花形、已去除源图中的第三方字标;属临时展示标。泡泡的新概念图标与正式品牌 Logo 分别评审,未把本次泡泡替换视为完整品牌定稿。
|
|
6
|
+
|
|
7
|
+
## 悬浮泡泡概念
|
|
8
|
+
|
|
9
|
+
- [矢量图标](iris-bubble.svg):64×64 逻辑画布,透明背景、曲线花瓣、紫色层次、金色花心与青绿叶片;推荐以 26px 图元放入现有 44px 按钮。
|
|
10
|
+
- [概念展示](iris-bubble-concept.svg):放大花形、实际按钮尺寸与四种健康状态的并列预览。
|
|
11
|
+
- `lib/client.js` 的 `IRIS_MARK_PARTS` 保持相同的路径顺序与实色;内联 SVG 没有外部资源、字体、滤镜或 ID 引用。
|
|
12
|
+
- 本次只替换按钮图元;Android 浏览器的实际渲染仍需目视确认。
|
|
13
|
+
|
|
14
|
+
## 历史像素资产
|
|
15
|
+
|
|
16
|
+
设计语言:质朴、纯矩形像素块、无渐变无圆角;母题为鸢尾花(浅色旗瓣、深色垂瓣、橙色髯毛、细茎)+ 3×5 像素字 IRIS。全部资产由 `scripts/gen-logo.mjs` 从像素矩阵生成——**矩阵即设计源**,修改请先改矩阵再重新生成,保证可编辑可复现。
|
|
17
|
+
|
|
18
|
+
## 文件
|
|
19
|
+
|
|
20
|
+
| 文件 | 用途 |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `iris-logo.svg`(208×80) | 主锁定标志:彩色图形标 + 字标,浅色底适用(README、文档头) |
|
|
23
|
+
| `iris-logo-mono.svg` | 单色墨(`#1E1E24`),浅底单色场景 |
|
|
24
|
+
| `iris-logo-mono-inverse.svg` | 单色反白(`#F5F3FF`),深色底场景 |
|
|
25
|
+
| `iris-mark.svg`(88×96) | 历史紧凑型像素图形标,含 1 cell 留白 |
|
|
26
|
+
| `iris-mark-mono.svg` / `iris-mark-mono-inverse.svg` | 图形标的单色与反白版 |
|
|
27
|
+
|
|
28
|
+
## 几何
|
|
29
|
+
|
|
30
|
+
- 基准单元 cell = 8 逻辑像素;`shape-rendering="crispEdges"`,缩放时保持锐利像素边缘。
|
|
31
|
+
- 图形标 9 列 × 10 行;字标每字 3×5 cell、字间距 1 cell;图形标与字标之间 2 cell;字标垂直居中于图形标。
|
|
32
|
+
- 旧 UI 内联版本曾采用同一剪影的反白像素块;当前泡泡使用上方曲线图标。
|
|
33
|
+
|
|
34
|
+
## 最小尺寸与留白
|
|
35
|
+
|
|
36
|
+
- 锁定标志最小宽度 **104px(13 cell)**;再小请改用图形标。
|
|
37
|
+
- 图形标最小 **16px**(cell ≥ 1.6px),低于此尺寸仅保留剪影亦可辨识。
|
|
38
|
+
- 四周留白 ≥ 1 cell(图形标文件已内置 1 cell,锁定标志需自行留出)。
|
|
39
|
+
- 不要拉伸、旋转、加渐变/阴影/描边,不要改配色(深浅色场景请换用对应版本,不要叠滤色变)。
|
|
40
|
+
|
|
41
|
+
## 配色
|
|
42
|
+
|
|
43
|
+
| 角色 | 色值 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| 旗瓣 | `#8C77EE` |
|
|
46
|
+
| 垂瓣 | `#3F32A8` |
|
|
47
|
+
| 花心(髯毛) | `#F0B23E` |
|
|
48
|
+
| 茎 | `#4A9E6F` |
|
|
49
|
+
| 字标 | `#26204F` |
|
|
50
|
+
| 单色墨 | `#1E1E24` |
|
|
51
|
+
| 反白 | `#F5F3FF` |
|
|
52
|
+
|
|
53
|
+
## 许可证
|
|
54
|
+
|
|
55
|
+
原创美术资产,随仓库以 MIT License 发布;像素资产的来源矩阵在 `scripts/gen-logo.mjs`,新泡泡图标的矢量源在 `iris-bubble.svg`。再分发请保留来源与许可证。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="520" viewBox="0 0 960 520" role="img" aria-label="Iris floating flower concept">
|
|
2
|
+
<title>Iris floating flower — bubble concept</title>
|
|
3
|
+
<desc>Curved iris icon, enlarged silhouette and actual 44 pixel buttons with unconfigured, configured, verified and failed states.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<g id="flower">
|
|
6
|
+
<path fill="#7db9a4" d="M30.5 39h3v18h-3z"/>
|
|
7
|
+
<path fill="#7db9a4" d="M32 55C24 55 20 50 19 44C26 45 31 48 32 55Z"/>
|
|
8
|
+
<path fill="#9cd1b7" d="M32 54C40 53 44 49 45 43C38 44 33 48 32 54Z"/>
|
|
9
|
+
<path fill="#b5a0f3" d="M29 31C18 30 11 22 15 14C24 13 30 20 29 31Z"/>
|
|
10
|
+
<path fill="#b5a0f3" d="M35 31C46 30 53 22 49 14C40 13 34 20 35 31Z"/>
|
|
11
|
+
<path fill="#e0d4ff" d="M32 7C24 13 23 23 32 34C41 23 40 13 32 7Z"/>
|
|
12
|
+
<path fill="#9b80df" d="M31 31C22 24 11 28 8 36C12 45 24 47 31 34Z"/>
|
|
13
|
+
<path fill="#9b80df" d="M33 31C42 24 53 28 56 36C52 45 40 47 33 34Z"/>
|
|
14
|
+
<path fill="#c4aff6" d="M32 29C24 35 23 44 32 50C41 44 40 35 32 29Z"/>
|
|
15
|
+
<path fill="#f2ce83" d="M32 31C29 32 28 34 29 36L32 40L35 36C36 34 35 32 32 31Z"/>
|
|
16
|
+
</g>
|
|
17
|
+
</defs>
|
|
18
|
+
<rect width="960" height="520" rx="24" fill="#f4f1f9"/>
|
|
19
|
+
<g font-family="sans-serif">
|
|
20
|
+
<text x="48" y="58" fill="#352950" font-size="28" font-weight="700" letter-spacing="4">IRIS</text>
|
|
21
|
+
<text x="48" y="85" fill="#786b8b" font-size="13" letter-spacing="2">FLOATING FLOWER / CONCEPT 02</text>
|
|
22
|
+
<text x="912" y="58" text-anchor="end" fill="#786b8b" font-size="12">SVG · 2026.09.30</text>
|
|
23
|
+
<rect x="32" y="112" width="400" height="376" rx="20" fill="#24212e"/>
|
|
24
|
+
<circle cx="232" cy="286" r="116" fill="#302b3c" stroke="#484056"/>
|
|
25
|
+
<use href="#flower" transform="translate(136 190) scale(3)"/>
|
|
26
|
+
<text x="232" y="449" text-anchor="middle" fill="#c4b5df" font-size="12" letter-spacing="2">CURVED PETALS · AMBER HEART</text>
|
|
27
|
+
<rect x="452" y="112" width="476" height="376" rx="20" fill="#ffffff"/>
|
|
28
|
+
<text x="482" y="151" fill="#352950" font-size="16" font-weight="600">44 px button · 26 px flower</text>
|
|
29
|
+
<text x="482" y="174" fill="#786b8b" font-size="12">Existing health ring and task badge</text>
|
|
30
|
+
<rect x="480" y="193" width="420" height="146" rx="14" fill="#26262e"/>
|
|
31
|
+
<g opacity=".55">
|
|
32
|
+
<circle cx="538" cy="256" r="22" fill="#32323c" stroke="#3a3a44"/>
|
|
33
|
+
<use href="#flower" transform="translate(525 243) scale(.40625)"/>
|
|
34
|
+
</g>
|
|
35
|
+
<circle cx="638" cy="256" r="25" fill="none" stroke="#6f9df6" opacity=".16" stroke-width="5"/>
|
|
36
|
+
<circle cx="638" cy="256" r="22" fill="#32323c" stroke="#6f9df6"/>
|
|
37
|
+
<use href="#flower" transform="translate(625 243) scale(.40625)"/>
|
|
38
|
+
<circle cx="738" cy="256" r="25" fill="none" stroke="#6fcf6f" opacity=".20" stroke-width="5"/>
|
|
39
|
+
<circle cx="738" cy="256" r="22" fill="#32323c" stroke="#6fcf6f"/>
|
|
40
|
+
<use href="#flower" transform="translate(725 243) scale(.40625)"/>
|
|
41
|
+
<g opacity=".72">
|
|
42
|
+
<circle cx="838" cy="256" r="25" fill="none" stroke="#b9656d" opacity=".16" stroke-width="5"/>
|
|
43
|
+
<circle cx="838" cy="256" r="22" fill="#32323c" stroke="#b9656d"/>
|
|
44
|
+
<use href="#flower" transform="translate(825 243) scale(.40625)"/>
|
|
45
|
+
</g>
|
|
46
|
+
<g fill="#bab3c7" font-size="10" text-anchor="middle">
|
|
47
|
+
<text x="538" y="306">UNCONFIGURED</text>
|
|
48
|
+
<text x="638" y="306">CONFIGURED</text>
|
|
49
|
+
<text x="738" y="306">VERIFIED</text>
|
|
50
|
+
<text x="838" y="306">FAILED</text>
|
|
51
|
+
</g>
|
|
52
|
+
<text x="482" y="377" fill="#786b8b" font-size="12">At 2×</text>
|
|
53
|
+
<circle cx="578" cy="409" r="44" fill="#32323c" stroke="#6f9df6" stroke-width="2"/>
|
|
54
|
+
<use href="#flower" transform="translate(552 383) scale(.8125)"/>
|
|
55
|
+
<circle cx="612" cy="377" r="16" fill="#d9a941"/>
|
|
56
|
+
<text x="612" y="382" text-anchor="middle" fill="#1a1a1e" font-size="15" font-weight="700">2</text>
|
|
57
|
+
<g transform="translate(672 393)">
|
|
58
|
+
<circle r="8" fill="#e0d4ff"/>
|
|
59
|
+
<circle cx="30" r="8" fill="#b5a0f3"/>
|
|
60
|
+
<circle cx="60" r="8" fill="#9b80df"/>
|
|
61
|
+
<circle cx="90" r="8" fill="#f2ce83"/>
|
|
62
|
+
<circle cx="120" r="8" fill="#7db9a4"/>
|
|
63
|
+
</g>
|
|
64
|
+
<text x="664" y="427" fill="#786b8b" font-size="12">Lilac · lavender · amber · sage</text>
|
|
65
|
+
<text x="482" y="469" fill="#93869f" font-size="11">Bubble icon proposal · brand wordmark reviewed separately</text>
|
|
66
|
+
</g>
|
|
67
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="Iris" focusable="false">
|
|
2
|
+
<title>Iris — 曲线鸢尾花</title>
|
|
3
|
+
<desc>悬浮泡泡的概念图标:三片旗瓣、舒展垂瓣、金色花心与青绿叶片,透明背景。</desc>
|
|
4
|
+
<path fill="#7db9a4" d="M30.5 39h3v18h-3z"/>
|
|
5
|
+
<path fill="#7db9a4" d="M32 55C24 55 20 50 19 44C26 45 31 48 32 55Z"/>
|
|
6
|
+
<path fill="#9cd1b7" d="M32 54C40 53 44 49 45 43C38 44 33 48 32 54Z"/>
|
|
7
|
+
<path fill="#b5a0f3" d="M29 31C18 30 11 22 15 14C24 13 30 20 29 31Z"/>
|
|
8
|
+
<path fill="#b5a0f3" d="M35 31C46 30 53 22 49 14C40 13 34 20 35 31Z"/>
|
|
9
|
+
<path fill="#e0d4ff" d="M32 7C24 13 23 23 32 34C41 23 40 13 32 7Z"/>
|
|
10
|
+
<path fill="#9b80df" d="M31 31C22 24 11 28 8 36C12 45 24 47 31 34Z"/>
|
|
11
|
+
<path fill="#9b80df" d="M33 31C42 24 53 28 56 36C52 45 40 47 33 34Z"/>
|
|
12
|
+
<path fill="#c4aff6" d="M32 29C24 35 23 44 32 50C41 44 40 35 32 29Z"/>
|
|
13
|
+
<path fill="#f2ce83" d="M32 31C29 32 28 34 29 36L32 40L35 36C36 34 35 32 32 31Z"/>
|
|
14
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="208" height="80" viewBox="0 0 208 80" role="img" aria-label="IRIS 标志(单色反白)" shape-rendering="crispEdges">
|
|
2
|
+
<title>IRIS 标志(单色反白)</title>
|
|
3
|
+
<desc>像素块鸢尾花与 IRIS 像素字标,反白,深底色适用</desc>
|
|
4
|
+
<rect x="32" y="0" width="8" height="8" fill="#F5F3FF"/>
|
|
5
|
+
<rect x="24" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
6
|
+
<rect x="32" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
7
|
+
<rect x="40" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
8
|
+
<rect x="16" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
9
|
+
<rect x="24" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
10
|
+
<rect x="32" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
11
|
+
<rect x="40" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
12
|
+
<rect x="48" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
13
|
+
<rect x="16" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
14
|
+
<rect x="24" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
15
|
+
<rect x="32" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
16
|
+
<rect x="40" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
17
|
+
<rect x="48" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
18
|
+
<rect x="0" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
19
|
+
<rect x="24" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
20
|
+
<rect x="32" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
21
|
+
<rect x="40" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
22
|
+
<rect x="64" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
23
|
+
<rect x="0" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
24
|
+
<rect x="8" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
25
|
+
<rect x="24" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
26
|
+
<rect x="32" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
27
|
+
<rect x="40" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
28
|
+
<rect x="56" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
29
|
+
<rect x="64" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
30
|
+
<rect x="8" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
31
|
+
<rect x="16" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
32
|
+
<rect x="32" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
33
|
+
<rect x="48" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
34
|
+
<rect x="56" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
35
|
+
<rect x="16" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
36
|
+
<rect x="24" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
37
|
+
<rect x="32" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
38
|
+
<rect x="40" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
39
|
+
<rect x="48" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
40
|
+
<rect x="32" y="64" width="8" height="8" fill="#F5F3FF"/>
|
|
41
|
+
<rect x="32" y="72" width="8" height="8" fill="#F5F3FF"/>
|
|
42
|
+
<rect x="88" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
43
|
+
<rect x="96" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
44
|
+
<rect x="104" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
45
|
+
<rect x="96" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
46
|
+
<rect x="96" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
47
|
+
<rect x="96" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
48
|
+
<rect x="88" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
49
|
+
<rect x="96" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
50
|
+
<rect x="104" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
51
|
+
<rect x="120" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
52
|
+
<rect x="128" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
53
|
+
<rect x="120" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
54
|
+
<rect x="136" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
55
|
+
<rect x="120" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
56
|
+
<rect x="128" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
57
|
+
<rect x="120" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
58
|
+
<rect x="136" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
59
|
+
<rect x="120" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
60
|
+
<rect x="136" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
61
|
+
<rect x="152" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
62
|
+
<rect x="160" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
63
|
+
<rect x="168" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
64
|
+
<rect x="160" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
65
|
+
<rect x="160" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
66
|
+
<rect x="160" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
67
|
+
<rect x="152" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
68
|
+
<rect x="160" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
69
|
+
<rect x="168" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
70
|
+
<rect x="192" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
71
|
+
<rect x="200" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
72
|
+
<rect x="184" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
73
|
+
<rect x="192" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
74
|
+
<rect x="200" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
75
|
+
<rect x="200" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
76
|
+
<rect x="184" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
77
|
+
<rect x="192" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
78
|
+
</svg>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="208" height="80" viewBox="0 0 208 80" role="img" aria-label="IRIS 标志(单色)" shape-rendering="crispEdges">
|
|
2
|
+
<title>IRIS 标志(单色)</title>
|
|
3
|
+
<desc>像素块鸢尾花与 IRIS 像素字标,单色墨,浅底色适用</desc>
|
|
4
|
+
<rect x="32" y="0" width="8" height="8" fill="#1E1E24"/>
|
|
5
|
+
<rect x="24" y="8" width="8" height="8" fill="#1E1E24"/>
|
|
6
|
+
<rect x="32" y="8" width="8" height="8" fill="#1E1E24"/>
|
|
7
|
+
<rect x="40" y="8" width="8" height="8" fill="#1E1E24"/>
|
|
8
|
+
<rect x="16" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
9
|
+
<rect x="24" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
10
|
+
<rect x="32" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
11
|
+
<rect x="40" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
12
|
+
<rect x="48" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
13
|
+
<rect x="16" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
14
|
+
<rect x="24" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
15
|
+
<rect x="32" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
16
|
+
<rect x="40" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
17
|
+
<rect x="48" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
18
|
+
<rect x="0" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
19
|
+
<rect x="24" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
20
|
+
<rect x="32" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
21
|
+
<rect x="40" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
22
|
+
<rect x="64" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
23
|
+
<rect x="0" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
24
|
+
<rect x="8" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
25
|
+
<rect x="24" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
26
|
+
<rect x="32" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
27
|
+
<rect x="40" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
28
|
+
<rect x="56" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
29
|
+
<rect x="64" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
30
|
+
<rect x="8" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
31
|
+
<rect x="16" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
32
|
+
<rect x="32" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
33
|
+
<rect x="48" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
34
|
+
<rect x="56" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
35
|
+
<rect x="16" y="56" width="8" height="8" fill="#1E1E24"/>
|
|
36
|
+
<rect x="24" y="56" width="8" height="8" fill="#1E1E24"/>
|
|
37
|
+
<rect x="32" y="56" width="8" height="8" fill="#1E1E24"/>
|
|
38
|
+
<rect x="40" y="56" width="8" height="8" fill="#1E1E24"/>
|
|
39
|
+
<rect x="48" y="56" width="8" height="8" fill="#1E1E24"/>
|
|
40
|
+
<rect x="32" y="64" width="8" height="8" fill="#1E1E24"/>
|
|
41
|
+
<rect x="32" y="72" width="8" height="8" fill="#1E1E24"/>
|
|
42
|
+
<rect x="88" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
43
|
+
<rect x="96" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
44
|
+
<rect x="104" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
45
|
+
<rect x="96" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
46
|
+
<rect x="96" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
47
|
+
<rect x="96" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
48
|
+
<rect x="88" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
49
|
+
<rect x="96" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
50
|
+
<rect x="104" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
51
|
+
<rect x="120" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
52
|
+
<rect x="128" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
53
|
+
<rect x="120" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
54
|
+
<rect x="136" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
55
|
+
<rect x="120" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
56
|
+
<rect x="128" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
57
|
+
<rect x="120" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
58
|
+
<rect x="136" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
59
|
+
<rect x="120" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
60
|
+
<rect x="136" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
61
|
+
<rect x="152" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
62
|
+
<rect x="160" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
63
|
+
<rect x="168" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
64
|
+
<rect x="160" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
65
|
+
<rect x="160" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
66
|
+
<rect x="160" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
67
|
+
<rect x="152" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
68
|
+
<rect x="160" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
69
|
+
<rect x="168" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
70
|
+
<rect x="192" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
71
|
+
<rect x="200" y="16" width="8" height="8" fill="#1E1E24"/>
|
|
72
|
+
<rect x="184" y="24" width="8" height="8" fill="#1E1E24"/>
|
|
73
|
+
<rect x="192" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
74
|
+
<rect x="200" y="32" width="8" height="8" fill="#1E1E24"/>
|
|
75
|
+
<rect x="200" y="40" width="8" height="8" fill="#1E1E24"/>
|
|
76
|
+
<rect x="184" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
77
|
+
<rect x="192" y="48" width="8" height="8" fill="#1E1E24"/>
|
|
78
|
+
</svg>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="208" height="80" viewBox="0 0 208 80" role="img" aria-label="IRIS 标志(彩色)" shape-rendering="crispEdges">
|
|
2
|
+
<title>IRIS 标志(彩色)</title>
|
|
3
|
+
<desc>像素块鸢尾花与 IRIS 像素字标,浅底色适用</desc>
|
|
4
|
+
<rect x="32" y="0" width="8" height="8" fill="#8C77EE"/>
|
|
5
|
+
<rect x="24" y="8" width="8" height="8" fill="#8C77EE"/>
|
|
6
|
+
<rect x="32" y="8" width="8" height="8" fill="#8C77EE"/>
|
|
7
|
+
<rect x="40" y="8" width="8" height="8" fill="#8C77EE"/>
|
|
8
|
+
<rect x="16" y="16" width="8" height="8" fill="#8C77EE"/>
|
|
9
|
+
<rect x="24" y="16" width="8" height="8" fill="#8C77EE"/>
|
|
10
|
+
<rect x="32" y="16" width="8" height="8" fill="#8C77EE"/>
|
|
11
|
+
<rect x="40" y="16" width="8" height="8" fill="#8C77EE"/>
|
|
12
|
+
<rect x="48" y="16" width="8" height="8" fill="#8C77EE"/>
|
|
13
|
+
<rect x="16" y="24" width="8" height="8" fill="#8C77EE"/>
|
|
14
|
+
<rect x="24" y="24" width="8" height="8" fill="#8C77EE"/>
|
|
15
|
+
<rect x="32" y="24" width="8" height="8" fill="#8C77EE"/>
|
|
16
|
+
<rect x="40" y="24" width="8" height="8" fill="#8C77EE"/>
|
|
17
|
+
<rect x="48" y="24" width="8" height="8" fill="#8C77EE"/>
|
|
18
|
+
<rect x="0" y="32" width="8" height="8" fill="#3F32A8"/>
|
|
19
|
+
<rect x="24" y="32" width="8" height="8" fill="#8C77EE"/>
|
|
20
|
+
<rect x="32" y="32" width="8" height="8" fill="#8C77EE"/>
|
|
21
|
+
<rect x="40" y="32" width="8" height="8" fill="#8C77EE"/>
|
|
22
|
+
<rect x="64" y="32" width="8" height="8" fill="#3F32A8"/>
|
|
23
|
+
<rect x="0" y="40" width="8" height="8" fill="#3F32A8"/>
|
|
24
|
+
<rect x="8" y="40" width="8" height="8" fill="#3F32A8"/>
|
|
25
|
+
<rect x="24" y="40" width="8" height="8" fill="#8C77EE"/>
|
|
26
|
+
<rect x="32" y="40" width="8" height="8" fill="#F0B23E"/>
|
|
27
|
+
<rect x="40" y="40" width="8" height="8" fill="#8C77EE"/>
|
|
28
|
+
<rect x="56" y="40" width="8" height="8" fill="#3F32A8"/>
|
|
29
|
+
<rect x="64" y="40" width="8" height="8" fill="#3F32A8"/>
|
|
30
|
+
<rect x="8" y="48" width="8" height="8" fill="#3F32A8"/>
|
|
31
|
+
<rect x="16" y="48" width="8" height="8" fill="#3F32A8"/>
|
|
32
|
+
<rect x="32" y="48" width="8" height="8" fill="#F0B23E"/>
|
|
33
|
+
<rect x="48" y="48" width="8" height="8" fill="#3F32A8"/>
|
|
34
|
+
<rect x="56" y="48" width="8" height="8" fill="#3F32A8"/>
|
|
35
|
+
<rect x="16" y="56" width="8" height="8" fill="#3F32A8"/>
|
|
36
|
+
<rect x="24" y="56" width="8" height="8" fill="#3F32A8"/>
|
|
37
|
+
<rect x="32" y="56" width="8" height="8" fill="#4A9E6F"/>
|
|
38
|
+
<rect x="40" y="56" width="8" height="8" fill="#3F32A8"/>
|
|
39
|
+
<rect x="48" y="56" width="8" height="8" fill="#3F32A8"/>
|
|
40
|
+
<rect x="32" y="64" width="8" height="8" fill="#4A9E6F"/>
|
|
41
|
+
<rect x="32" y="72" width="8" height="8" fill="#4A9E6F"/>
|
|
42
|
+
<rect x="88" y="16" width="8" height="8" fill="#26204F"/>
|
|
43
|
+
<rect x="96" y="16" width="8" height="8" fill="#26204F"/>
|
|
44
|
+
<rect x="104" y="16" width="8" height="8" fill="#26204F"/>
|
|
45
|
+
<rect x="96" y="24" width="8" height="8" fill="#26204F"/>
|
|
46
|
+
<rect x="96" y="32" width="8" height="8" fill="#26204F"/>
|
|
47
|
+
<rect x="96" y="40" width="8" height="8" fill="#26204F"/>
|
|
48
|
+
<rect x="88" y="48" width="8" height="8" fill="#26204F"/>
|
|
49
|
+
<rect x="96" y="48" width="8" height="8" fill="#26204F"/>
|
|
50
|
+
<rect x="104" y="48" width="8" height="8" fill="#26204F"/>
|
|
51
|
+
<rect x="120" y="16" width="8" height="8" fill="#26204F"/>
|
|
52
|
+
<rect x="128" y="16" width="8" height="8" fill="#26204F"/>
|
|
53
|
+
<rect x="120" y="24" width="8" height="8" fill="#26204F"/>
|
|
54
|
+
<rect x="136" y="24" width="8" height="8" fill="#26204F"/>
|
|
55
|
+
<rect x="120" y="32" width="8" height="8" fill="#26204F"/>
|
|
56
|
+
<rect x="128" y="32" width="8" height="8" fill="#26204F"/>
|
|
57
|
+
<rect x="120" y="40" width="8" height="8" fill="#26204F"/>
|
|
58
|
+
<rect x="136" y="40" width="8" height="8" fill="#26204F"/>
|
|
59
|
+
<rect x="120" y="48" width="8" height="8" fill="#26204F"/>
|
|
60
|
+
<rect x="136" y="48" width="8" height="8" fill="#26204F"/>
|
|
61
|
+
<rect x="152" y="16" width="8" height="8" fill="#26204F"/>
|
|
62
|
+
<rect x="160" y="16" width="8" height="8" fill="#26204F"/>
|
|
63
|
+
<rect x="168" y="16" width="8" height="8" fill="#26204F"/>
|
|
64
|
+
<rect x="160" y="24" width="8" height="8" fill="#26204F"/>
|
|
65
|
+
<rect x="160" y="32" width="8" height="8" fill="#26204F"/>
|
|
66
|
+
<rect x="160" y="40" width="8" height="8" fill="#26204F"/>
|
|
67
|
+
<rect x="152" y="48" width="8" height="8" fill="#26204F"/>
|
|
68
|
+
<rect x="160" y="48" width="8" height="8" fill="#26204F"/>
|
|
69
|
+
<rect x="168" y="48" width="8" height="8" fill="#26204F"/>
|
|
70
|
+
<rect x="192" y="16" width="8" height="8" fill="#26204F"/>
|
|
71
|
+
<rect x="200" y="16" width="8" height="8" fill="#26204F"/>
|
|
72
|
+
<rect x="184" y="24" width="8" height="8" fill="#26204F"/>
|
|
73
|
+
<rect x="192" y="32" width="8" height="8" fill="#26204F"/>
|
|
74
|
+
<rect x="200" y="32" width="8" height="8" fill="#26204F"/>
|
|
75
|
+
<rect x="200" y="40" width="8" height="8" fill="#26204F"/>
|
|
76
|
+
<rect x="184" y="48" width="8" height="8" fill="#26204F"/>
|
|
77
|
+
<rect x="192" y="48" width="8" height="8" fill="#26204F"/>
|
|
78
|
+
</svg>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="88" height="96" viewBox="-8 -8 88 96" role="img" aria-label="IRIS 图形标(单色反白)" shape-rendering="crispEdges">
|
|
2
|
+
<title>IRIS 图形标(单色反白)</title>
|
|
3
|
+
<desc>像素块鸢尾花图形标,反白</desc>
|
|
4
|
+
<rect x="32" y="0" width="8" height="8" fill="#F5F3FF"/>
|
|
5
|
+
<rect x="24" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
6
|
+
<rect x="32" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
7
|
+
<rect x="40" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
8
|
+
<rect x="16" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
9
|
+
<rect x="24" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
10
|
+
<rect x="32" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
11
|
+
<rect x="40" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
12
|
+
<rect x="48" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
13
|
+
<rect x="16" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
14
|
+
<rect x="24" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
15
|
+
<rect x="32" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
16
|
+
<rect x="40" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
17
|
+
<rect x="48" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
18
|
+
<rect x="0" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
19
|
+
<rect x="24" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
20
|
+
<rect x="32" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
21
|
+
<rect x="40" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
22
|
+
<rect x="64" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
23
|
+
<rect x="0" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
24
|
+
<rect x="8" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
25
|
+
<rect x="24" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
26
|
+
<rect x="32" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
27
|
+
<rect x="40" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
28
|
+
<rect x="56" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
29
|
+
<rect x="64" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
30
|
+
<rect x="8" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
31
|
+
<rect x="16" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
32
|
+
<rect x="32" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
33
|
+
<rect x="48" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
34
|
+
<rect x="56" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
35
|
+
<rect x="16" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
36
|
+
<rect x="24" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
37
|
+
<rect x="32" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
38
|
+
<rect x="40" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
39
|
+
<rect x="48" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
40
|
+
<rect x="32" y="64" width="8" height="8" fill="#F5F3FF"/>
|
|
41
|
+
<rect x="32" y="72" width="8" height="8" fill="#F5F3FF"/>
|
|
42
|
+
</svg>
|