diff --git a/.gitea/workflows/brand.yml b/.gitea/workflows/brand.yml
new file mode 100644
index 0000000..da4a5aa
--- /dev/null
+++ b/.gitea/workflows/brand.yml
@@ -0,0 +1,27 @@
+name: Endoleap brand checks
+on:
+ pull_request:
+ branches: [main]
+ paths:
+ - 'packages/brand/**'
+ - 'pnpm-workspace.yaml'
+ - 'package.json'
+ - 'AGENTS.md'
+ - '.gitea/workflows/brand.yml'
+ push:
+ branches: [main]
+ paths:
+ - 'packages/brand/**'
+ - 'pnpm-workspace.yaml'
+ - '.gitea/workflows/brand.yml'
+concurrency:
+ group: brand-${{ gitea.event.pull_request.number || gitea.ref }}
+ cancel-in-progress: true
+jobs:
+ verify:
+ runs-on: ces-control
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v4
+ - name: Verify brand assets, Tailwind compilation and typed exports in Docker
+ run: docker build -f packages/brand/Dockerfile -t "endoleap-brand-check:${{ gitea.sha }}" .
diff --git a/.gitignore b/.gitignore
index 35010c3..4b21ab0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,7 @@ __pycache__/
*.webp
*.gif
*.avif
+
+# Approved, versioned brand resources are package source assets.
+!packages/brand/assets/**/*.png
+!packages/brand/docs/logo-preview.png
diff --git a/AGENTS.md b/AGENTS.md
index df8585b..26c295d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -14,3 +14,10 @@ This block is written and re-added by `next dev` — verify at `node_modules/nex
- 页面改动必须先 push,等待 ces-control 的 CI/CD 成功部署,再直接访问服务器检查效果。
- 不启动本地网页预览,不使用 localhost / 127.0.0.1 页面进行视觉验收,也不把本地预览链接交付给用户。
- 类型检查、单元测试等不提供网页预览的检查可以本地执行;完整运行检查由 Docker CI 完成。
+
+## 啡跃 Endoleap 品牌与主题
+
+- 共享品牌包位于 [`packages/brand`](packages/brand/README.md)。修改品牌色、主题或标志前,阅读包内的 [品牌边界](packages/brand/docs/overview.md)、[配色与交互规范](packages/brand/docs/colors.md)、[Tailwind / shadcn 接入](packages/brand/docs/integration.md) 和 [Logo 规则](packages/brand/docs/logo.md)。不在仓库根 docs 重复维护一套品牌规范。
+- 四套正式主题为 home-light、home-dark、canvas-light、canvas-dark;不创建 drafts,不恢复 proposed 命名。画布 Light / Dark 背景保持中性近白 / 近黑,用户素材与作品不整体染色。
+- 基础色只在 tokens/palette.json 定义,主题引用色板键;Logo 轮廓只在 tokens/geometry.json 定义。保持 CSS、类型声明、资产与清单一致,不通过图片模型重画已固定的图形。
+- 本地仅运行不生成产物的轻量读取检查。品牌导出、Tailwind/TypeScript 编译和 SVG 栅格化检查必须通过已确认的 ces-control Docker CI 执行,不在本机启动预览或构建。
diff --git a/package.json b/package.json
index 18fd5d8..598e48b 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,8 @@
"dev:studio": "pnpm --filter @prompt/studio dev",
"build": "pnpm -r build",
"typecheck": "pnpm -r typecheck",
- "test": "pnpm --filter @prompt/waterfall-wiki test"
+ "test": "pnpm --filter @prompt/waterfall-wiki test",
+ "test:brand": "pnpm --filter @endoleap/brand test",
+ "build:brand": "pnpm --filter @endoleap/brand build"
}
}
diff --git a/packages/brand/Dockerfile b/packages/brand/Dockerfile
new file mode 100644
index 0000000..e512558
--- /dev/null
+++ b/packages/brand/Dockerfile
@@ -0,0 +1,12 @@
+FROM node:24-bookworm-slim
+WORKDIR /repo
+RUN corepack enable && corepack prepare pnpm@11.25.0 --activate
+COPY packages/brand/package.json packages/brand/pnpm-lock.yaml ./
+RUN pnpm install --frozen-lockfile --ignore-scripts
+COPY packages/brand/ ./
+RUN pnpm test && pnpm build && pnpm test:tailwind && pnpm test:types
+RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-venv \
+ && rm -rf /var/lib/apt/lists/* \
+ && python3 -m venv /opt/brand-python \
+ && /opt/brand-python/bin/pip install --only-binary=:all: Pillow==13.0.0 resvg-py==0.5.0
+RUN /opt/brand-python/bin/python tests/assets.py
diff --git a/packages/brand/README.md b/packages/brand/README.md
new file mode 100644
index 0000000..e960459
--- /dev/null
+++ b/packages/brand/README.md
@@ -0,0 +1,41 @@
+# 啡跃 Endoleap 品牌包
+
+本包把已选定的「摩卡奶霜」配色、四套正式主题和固定轮廓 Logo 放在同一个 workspace 包中。它提供 Tailwind CSS v4 / shadcn/ui 的主题接口及静态图片,不安装组件,也不自动重设应用页面。
+
+## 文档入口
+
+- [品牌与包边界](docs/overview.md)
+- [配色、组件状态与深色主题](docs/colors.md)
+- [Tailwind CSS、shadcn/ui 与包导入](docs/integration.md)
+- [Logo、平台图片与修改流程](docs/logo.md)
+
+`tokens/palette.json` 是色值来源;四份主题 JSON 引用色板键;`tokens/geometry.json` 是唯一 Logo 路径来源。`src/themes.css` 是可直接导入的源样式,一致性由测试核对;`dist/` 仅在远程 CI 构建,不提交。
+
+```css
+@import "tailwindcss";
+@import "@endoleap/brand/themes.css";
+@import "@endoleap/brand/tailwind.css";
+```
+
+```tsx
+// 在主题根节点选择正式主题;应用负责持久化和切换。
+
+
+
+```
+
+主题名:`home-light`、`home-dark`、`canvas-light`、`canvas-dark`。没有 `drafts`、`proposed` 或隐式跟随系统的规则。`.dark` 兼容默认首页深色;显式 `data-theme` 优先。使用 `dark:` 工具类时,一个文档根节点只选择一个明暗主题,不在 `.dark` 祖先下嵌套浅色 `dark:` 变体。
+
+## 验证
+
+可进行的本地轻量检查:`node --test packages/brand/tests/brand.test.mjs`。它只读取源码和资产,检查主题、对比度、SVG 路径及 PNG/ICO 文件头,不编译和输出产物。
+
+完整验证在已确认的 ces-control Docker runner 执行:
+
+```sh
+docker build -f packages/brand/Dockerfile -t endoleap-brand-check .
+```
+
+包含真实 Tailwind 编译、TypeScript 导入检查、品牌导出和 72 个 PNG 与 SVG 逐像素比较。不要在本机运行该 Docker 构建或 `build` / `test:tailwind` / `test:types` / `test:assets`。
diff --git a/packages/brand/assets/icons/app-square-1024.png b/packages/brand/assets/icons/app-square-1024.png
new file mode 100644
index 0000000..c29d715
Binary files /dev/null and b/packages/brand/assets/icons/app-square-1024.png differ
diff --git a/packages/brand/assets/icons/apple-touch-icon.png b/packages/brand/assets/icons/apple-touch-icon.png
new file mode 100644
index 0000000..f396f82
Binary files /dev/null and b/packages/brand/assets/icons/apple-touch-icon.png differ
diff --git a/packages/brand/assets/icons/avatar-circle-1024.png b/packages/brand/assets/icons/avatar-circle-1024.png
new file mode 100644
index 0000000..654b40e
Binary files /dev/null and b/packages/brand/assets/icons/avatar-circle-1024.png differ
diff --git a/packages/brand/assets/icons/favicon-light.ico b/packages/brand/assets/icons/favicon-light.ico
new file mode 100644
index 0000000..11744ca
Binary files /dev/null and b/packages/brand/assets/icons/favicon-light.ico differ
diff --git a/packages/brand/assets/icons/favicon-transparent.ico b/packages/brand/assets/icons/favicon-transparent.ico
new file mode 100644
index 0000000..8c48d77
Binary files /dev/null and b/packages/brand/assets/icons/favicon-transparent.ico differ
diff --git a/packages/brand/assets/icons/favicon.ico b/packages/brand/assets/icons/favicon.ico
new file mode 100644
index 0000000..3039609
Binary files /dev/null and b/packages/brand/assets/icons/favicon.ico differ
diff --git a/packages/brand/assets/icons/pwa-192.png b/packages/brand/assets/icons/pwa-192.png
new file mode 100644
index 0000000..b5fff1f
Binary files /dev/null and b/packages/brand/assets/icons/pwa-192.png differ
diff --git a/packages/brand/assets/icons/pwa-512.png b/packages/brand/assets/icons/pwa-512.png
new file mode 100644
index 0000000..9e50774
Binary files /dev/null and b/packages/brand/assets/icons/pwa-512.png differ
diff --git a/packages/brand/assets/manifest.json b/packages/brand/assets/manifest.json
new file mode 100644
index 0000000..3681c07
--- /dev/null
+++ b/packages/brand/assets/manifest.json
@@ -0,0 +1,71 @@
+{
+ "version": "1.2",
+ "brand": "啡跃 Endoleap",
+ "colors": {
+ "mocha": "#A47764",
+ "brown": "#49372E",
+ "cream": "#FFF6EF"
+ },
+ "geometry": "tokens/geometry.json",
+ "svg_files": [
+ "assets/svg/logo-light.svg",
+ "assets/svg/logo-dark.svg",
+ "assets/svg/mono-dark.svg",
+ "assets/svg/mono-light.svg",
+ "assets/svg/icon-dark.svg",
+ "assets/svg/icon-light.svg",
+ "assets/svg/app-square.svg",
+ "assets/svg/avatar-circle.svg"
+ ],
+ "png_sizes": [
+ 16,
+ 24,
+ 32,
+ 48,
+ 64,
+ 128,
+ 180,
+ 192,
+ 256,
+ 512,
+ 1024,
+ 2048
+ ],
+ "ico_sizes": [
+ 16,
+ 24,
+ 32,
+ 48,
+ 64,
+ 128,
+ 256
+ ],
+ "variants": {
+ "logo-light": {
+ "rim": "#A47764",
+ "bowl": "#49372E"
+ },
+ "logo-dark": {
+ "rim": "#A47764",
+ "bowl": "#FFF6EF"
+ },
+ "mono-dark": {
+ "rim": "#49372E",
+ "bowl": "#49372E"
+ },
+ "mono-light": {
+ "rim": "#FFF6EF",
+ "bowl": "#FFF6EF"
+ },
+ "icon-dark": {
+ "rim": "#A47764",
+ "bowl": "#FFF6EF",
+ "background": "#49372E"
+ },
+ "icon-light": {
+ "rim": "#A47764",
+ "bowl": "#49372E",
+ "background": "#FFF6EF"
+ }
+ }
+}
diff --git a/packages/brand/assets/png/icon-dark/endoleap-1024.png b/packages/brand/assets/png/icon-dark/endoleap-1024.png
new file mode 100644
index 0000000..29930b4
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-128.png b/packages/brand/assets/png/icon-dark/endoleap-128.png
new file mode 100644
index 0000000..327dfac
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-128.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-16.png b/packages/brand/assets/png/icon-dark/endoleap-16.png
new file mode 100644
index 0000000..a55e874
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-16.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-180.png b/packages/brand/assets/png/icon-dark/endoleap-180.png
new file mode 100644
index 0000000..e9e87bf
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-180.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-192.png b/packages/brand/assets/png/icon-dark/endoleap-192.png
new file mode 100644
index 0000000..8156f85
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-192.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-2048.png b/packages/brand/assets/png/icon-dark/endoleap-2048.png
new file mode 100644
index 0000000..de5fe7a
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-24.png b/packages/brand/assets/png/icon-dark/endoleap-24.png
new file mode 100644
index 0000000..31c5124
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-24.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-256.png b/packages/brand/assets/png/icon-dark/endoleap-256.png
new file mode 100644
index 0000000..5c4caac
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-256.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-32.png b/packages/brand/assets/png/icon-dark/endoleap-32.png
new file mode 100644
index 0000000..c53f3fe
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-32.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-48.png b/packages/brand/assets/png/icon-dark/endoleap-48.png
new file mode 100644
index 0000000..7b93350
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-48.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-512.png b/packages/brand/assets/png/icon-dark/endoleap-512.png
new file mode 100644
index 0000000..278475c
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-512.png differ
diff --git a/packages/brand/assets/png/icon-dark/endoleap-64.png b/packages/brand/assets/png/icon-dark/endoleap-64.png
new file mode 100644
index 0000000..916350c
Binary files /dev/null and b/packages/brand/assets/png/icon-dark/endoleap-64.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-1024.png b/packages/brand/assets/png/icon-light/endoleap-1024.png
new file mode 100644
index 0000000..82fca6d
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-128.png b/packages/brand/assets/png/icon-light/endoleap-128.png
new file mode 100644
index 0000000..60f51a6
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-128.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-16.png b/packages/brand/assets/png/icon-light/endoleap-16.png
new file mode 100644
index 0000000..443e7ab
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-16.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-180.png b/packages/brand/assets/png/icon-light/endoleap-180.png
new file mode 100644
index 0000000..bb90075
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-180.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-192.png b/packages/brand/assets/png/icon-light/endoleap-192.png
new file mode 100644
index 0000000..667d8ab
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-192.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-2048.png b/packages/brand/assets/png/icon-light/endoleap-2048.png
new file mode 100644
index 0000000..3e856e9
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-24.png b/packages/brand/assets/png/icon-light/endoleap-24.png
new file mode 100644
index 0000000..7d348b5
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-24.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-256.png b/packages/brand/assets/png/icon-light/endoleap-256.png
new file mode 100644
index 0000000..74d0e29
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-256.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-32.png b/packages/brand/assets/png/icon-light/endoleap-32.png
new file mode 100644
index 0000000..f26f0c4
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-32.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-48.png b/packages/brand/assets/png/icon-light/endoleap-48.png
new file mode 100644
index 0000000..ad11c46
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-48.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-512.png b/packages/brand/assets/png/icon-light/endoleap-512.png
new file mode 100644
index 0000000..9cb74f5
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-512.png differ
diff --git a/packages/brand/assets/png/icon-light/endoleap-64.png b/packages/brand/assets/png/icon-light/endoleap-64.png
new file mode 100644
index 0000000..9d0ced7
Binary files /dev/null and b/packages/brand/assets/png/icon-light/endoleap-64.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-1024.png b/packages/brand/assets/png/logo-dark/endoleap-1024.png
new file mode 100644
index 0000000..b1c7b5a
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-128.png b/packages/brand/assets/png/logo-dark/endoleap-128.png
new file mode 100644
index 0000000..b6cbae6
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-128.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-16.png b/packages/brand/assets/png/logo-dark/endoleap-16.png
new file mode 100644
index 0000000..9daea7e
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-16.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-180.png b/packages/brand/assets/png/logo-dark/endoleap-180.png
new file mode 100644
index 0000000..ab2ceb2
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-180.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-192.png b/packages/brand/assets/png/logo-dark/endoleap-192.png
new file mode 100644
index 0000000..4d26fa9
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-192.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-2048.png b/packages/brand/assets/png/logo-dark/endoleap-2048.png
new file mode 100644
index 0000000..879e552
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-24.png b/packages/brand/assets/png/logo-dark/endoleap-24.png
new file mode 100644
index 0000000..13763d3
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-24.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-256.png b/packages/brand/assets/png/logo-dark/endoleap-256.png
new file mode 100644
index 0000000..dcf14ab
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-256.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-32.png b/packages/brand/assets/png/logo-dark/endoleap-32.png
new file mode 100644
index 0000000..cc51bc8
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-32.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-48.png b/packages/brand/assets/png/logo-dark/endoleap-48.png
new file mode 100644
index 0000000..2304776
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-48.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-512.png b/packages/brand/assets/png/logo-dark/endoleap-512.png
new file mode 100644
index 0000000..4bbc063
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-512.png differ
diff --git a/packages/brand/assets/png/logo-dark/endoleap-64.png b/packages/brand/assets/png/logo-dark/endoleap-64.png
new file mode 100644
index 0000000..9fc6521
Binary files /dev/null and b/packages/brand/assets/png/logo-dark/endoleap-64.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-1024.png b/packages/brand/assets/png/logo-light/endoleap-1024.png
new file mode 100644
index 0000000..5656d7e
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-128.png b/packages/brand/assets/png/logo-light/endoleap-128.png
new file mode 100644
index 0000000..3299787
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-128.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-16.png b/packages/brand/assets/png/logo-light/endoleap-16.png
new file mode 100644
index 0000000..02d70a1
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-16.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-180.png b/packages/brand/assets/png/logo-light/endoleap-180.png
new file mode 100644
index 0000000..16a9516
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-180.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-192.png b/packages/brand/assets/png/logo-light/endoleap-192.png
new file mode 100644
index 0000000..7999bf5
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-192.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-2048.png b/packages/brand/assets/png/logo-light/endoleap-2048.png
new file mode 100644
index 0000000..cb762c6
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-24.png b/packages/brand/assets/png/logo-light/endoleap-24.png
new file mode 100644
index 0000000..92384d5
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-24.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-256.png b/packages/brand/assets/png/logo-light/endoleap-256.png
new file mode 100644
index 0000000..7e8c9ea
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-256.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-32.png b/packages/brand/assets/png/logo-light/endoleap-32.png
new file mode 100644
index 0000000..4d84ec5
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-32.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-48.png b/packages/brand/assets/png/logo-light/endoleap-48.png
new file mode 100644
index 0000000..2e9ab78
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-48.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-512.png b/packages/brand/assets/png/logo-light/endoleap-512.png
new file mode 100644
index 0000000..9dee33d
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-512.png differ
diff --git a/packages/brand/assets/png/logo-light/endoleap-64.png b/packages/brand/assets/png/logo-light/endoleap-64.png
new file mode 100644
index 0000000..d5cb3b0
Binary files /dev/null and b/packages/brand/assets/png/logo-light/endoleap-64.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-1024.png b/packages/brand/assets/png/mono-dark/endoleap-1024.png
new file mode 100644
index 0000000..8ed88d4
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-128.png b/packages/brand/assets/png/mono-dark/endoleap-128.png
new file mode 100644
index 0000000..17f3556
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-128.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-16.png b/packages/brand/assets/png/mono-dark/endoleap-16.png
new file mode 100644
index 0000000..86acb72
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-16.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-180.png b/packages/brand/assets/png/mono-dark/endoleap-180.png
new file mode 100644
index 0000000..c8d4194
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-180.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-192.png b/packages/brand/assets/png/mono-dark/endoleap-192.png
new file mode 100644
index 0000000..9f7ac8e
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-192.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-2048.png b/packages/brand/assets/png/mono-dark/endoleap-2048.png
new file mode 100644
index 0000000..91af518
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-24.png b/packages/brand/assets/png/mono-dark/endoleap-24.png
new file mode 100644
index 0000000..5ec09f6
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-24.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-256.png b/packages/brand/assets/png/mono-dark/endoleap-256.png
new file mode 100644
index 0000000..65d3f55
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-256.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-32.png b/packages/brand/assets/png/mono-dark/endoleap-32.png
new file mode 100644
index 0000000..8311812
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-32.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-48.png b/packages/brand/assets/png/mono-dark/endoleap-48.png
new file mode 100644
index 0000000..b23244a
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-48.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-512.png b/packages/brand/assets/png/mono-dark/endoleap-512.png
new file mode 100644
index 0000000..ce2d05d
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-512.png differ
diff --git a/packages/brand/assets/png/mono-dark/endoleap-64.png b/packages/brand/assets/png/mono-dark/endoleap-64.png
new file mode 100644
index 0000000..79a02ce
Binary files /dev/null and b/packages/brand/assets/png/mono-dark/endoleap-64.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-1024.png b/packages/brand/assets/png/mono-light/endoleap-1024.png
new file mode 100644
index 0000000..ceeb609
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-1024.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-128.png b/packages/brand/assets/png/mono-light/endoleap-128.png
new file mode 100644
index 0000000..9c1c3e3
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-128.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-16.png b/packages/brand/assets/png/mono-light/endoleap-16.png
new file mode 100644
index 0000000..4d0e2a0
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-16.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-180.png b/packages/brand/assets/png/mono-light/endoleap-180.png
new file mode 100644
index 0000000..15dd690
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-180.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-192.png b/packages/brand/assets/png/mono-light/endoleap-192.png
new file mode 100644
index 0000000..2c9f397
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-192.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-2048.png b/packages/brand/assets/png/mono-light/endoleap-2048.png
new file mode 100644
index 0000000..bbbcce0
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-2048.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-24.png b/packages/brand/assets/png/mono-light/endoleap-24.png
new file mode 100644
index 0000000..dc35cc8
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-24.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-256.png b/packages/brand/assets/png/mono-light/endoleap-256.png
new file mode 100644
index 0000000..896221a
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-256.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-32.png b/packages/brand/assets/png/mono-light/endoleap-32.png
new file mode 100644
index 0000000..f695ca0
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-32.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-48.png b/packages/brand/assets/png/mono-light/endoleap-48.png
new file mode 100644
index 0000000..bec9be8
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-48.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-512.png b/packages/brand/assets/png/mono-light/endoleap-512.png
new file mode 100644
index 0000000..b049efd
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-512.png differ
diff --git a/packages/brand/assets/png/mono-light/endoleap-64.png b/packages/brand/assets/png/mono-light/endoleap-64.png
new file mode 100644
index 0000000..1b016d7
Binary files /dev/null and b/packages/brand/assets/png/mono-light/endoleap-64.png differ
diff --git a/packages/brand/assets/svg/app-square.svg b/packages/brand/assets/svg/app-square.svg
new file mode 100644
index 0000000..2f34007
--- /dev/null
+++ b/packages/brand/assets/svg/app-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/avatar-circle.svg b/packages/brand/assets/svg/avatar-circle.svg
new file mode 100644
index 0000000..892d2a5
--- /dev/null
+++ b/packages/brand/assets/svg/avatar-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/icon-dark.svg b/packages/brand/assets/svg/icon-dark.svg
new file mode 100644
index 0000000..f9a6cdb
--- /dev/null
+++ b/packages/brand/assets/svg/icon-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/icon-light.svg b/packages/brand/assets/svg/icon-light.svg
new file mode 100644
index 0000000..4e06146
--- /dev/null
+++ b/packages/brand/assets/svg/icon-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/logo-dark.svg b/packages/brand/assets/svg/logo-dark.svg
new file mode 100644
index 0000000..0b3b51e
--- /dev/null
+++ b/packages/brand/assets/svg/logo-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/logo-light.svg b/packages/brand/assets/svg/logo-light.svg
new file mode 100644
index 0000000..aa9bf36
--- /dev/null
+++ b/packages/brand/assets/svg/logo-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/mono-dark.svg b/packages/brand/assets/svg/mono-dark.svg
new file mode 100644
index 0000000..ad668c8
--- /dev/null
+++ b/packages/brand/assets/svg/mono-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/assets/svg/mono-light.svg b/packages/brand/assets/svg/mono-light.svg
new file mode 100644
index 0000000..05e254f
--- /dev/null
+++ b/packages/brand/assets/svg/mono-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/brand/docs/colors.md b/packages/brand/docs/colors.md
new file mode 100644
index 0000000..42f35f0
--- /dev/null
+++ b/packages/brand/docs/colors.md
@@ -0,0 +1,71 @@
+# 色彩与组件规范
+
+## 基础色与背景分工
+
+| 色彩 | HEX | 用途 |
+| --- | --- | --- |
+| 摩卡 | `#A47764` | `brand-mocha`,Logo 杯口与装饰 |
+| 深棕 | `#49372E` | 浅底 Logo 杯腹、标准图标底 |
+| 深摩卡 | `#78523F` | Light 主操作与连线 |
+| 奶霜 | `#FFF6EF` | 首页 Light 底色、反白 Logo |
+| 陶橙 | `#E07242` | `brand-orange`,小面积装饰,不替代状态色 |
+| 浅燕麦 | `#EDE9D0` | `brand-oat`,首页轻量选中区域 |
+
+品牌摩卡不适合在所有浅色底上当普通小字。Light 按钮使用更深的摩卡;正文和辅助文字分别使用 `foreground`、`muted-foreground`。`accent` 在 shadcn/ui 中表示交互高亮背景,因此映射到轻量 `selection`,与装饰色 `brand-mocha` 分开。
+
+| 正式主题 | 工作背景 | 面板 | 主按钮 | 按钮文字 |
+| --- | --- | --- | --- | --- |
+| `home-light` | `#FFF6EF` | `#FFFCF9` | `#78523F` | `#FFFFFF` |
+| `home-dark` | `#1C1816` | `#27211E` | `#D1AA92` | `#211A17` |
+| `canvas-light` | `#FAFAFA` | `#FFFFFF` | `#78523F` | `#FFFFFF` |
+| `canvas-dark` | `#141414` | `#202020` | `#D1AA92` | `#211A17` |
+
+四套主题使用相同 token 契约,完整值在对应 JSON;通过 JS `getTheme(name)` 可获得解析后的只读值。JSON 引用色板键,避免在不同主题重复维护 HEX。
+
+## 首页
+
+导航与 Hero 使用 `background`;标题 `foreground-strong`,正文 `foreground`,说明 `muted-foreground`。演示面板和功能卡片使用 `card` / `card-foreground`。嵌套分组使用 `muted` / `muted-foreground`,不继承浅底上可能对比不足的说明色。
+
+推荐套餐使用 `selection` 背景加文字标记;深色 CTA 区块须成对使用反白文字。陶橙仅作少量点缀,浅燕麦只用于局部区块,不给所有卡片统一染色。
+
+## 画布
+
+- 无限背景使用 `background`,点阵 `grid`,工具栏和侧栏 `surface`;弹层 `popover` / `popover-foreground`。
+- Light / Dark 均保持中性近白 / 近黑。品牌色集中在操作、连接、焦点和选中态。
+- 普通节点用 `border`;选中节点用 2px `selection-border` 和控制点。不要把节点正文、图片或用户绘图填成选中色。
+- 工具选中采用 `selection` 底与 `primary` 图标;连线采用 `connector`;加号端口使用 `primary` 底和 `primary-foreground` 图标。
+- 图片、视频、用户作品和导入 SVG 保留原色。深色工作区内的白色作品画板仍为白色,导出不包含界面网格或品牌背景。
+
+## 交互状态
+
+| 组件 | Default | Hover | Pressed / Selected |
+| --- | --- | --- | --- |
+| 主按钮 | `primary` | `primary-hover` | `primary-active` |
+| 次按钮 | `secondary` | `secondary-hover` | `secondary-active` |
+| 菜单、列表项 | `surface` | `row-hover` / `accent` | `selection` |
+| 文本链接 | `link` 并加下划线 | 保持可辨认 | 不仅靠颜色表达 |
+| 输入框 | `surface`、`foreground`、`input` 边界 | 强化边界 | `ring` 外轮廓 |
+
+主、次按钮始终使用对应 `*-foreground`,不要在 hover 时遗留原文字颜色。`focus-visible` 使用 2px `ring` 与 2px 外偏移。输入错误保留 `danger` 边界、说明和错误图标;键盘焦点作为独立外轮廓继续显示。
+
+禁用使用 `disabled-background` / `disabled-foreground`,同时提供真正的 disabled 语义并停止 hover。禁用色不用于正常说明。加载保持原按钮主题并增加文字或进度标记,不用错误色表示。
+
+## shadcn/ui 语义对照
+
+`card` → 默认内容面板;`popover` → 浮层;`muted` → 低强调表面;`accent` → hover/选中表面;`destructive` → 危险动作;`input` → 必须可见的控件边界;`ring` → 焦点;`sidebar-*` → 侧栏完整配对;`chart-1` 至 `chart-5` → 每个主题自己的图表色。
+
+每种表面都有对应前景色,包含 `destructive-foreground`。`radius` 为 `0.625rem`,Tailwind 的 `rounded-sm/md/lg/xl` 按统一比例派生。
+
+## 状态色与图表
+
+成功、警告、错误、信息分别使用 `success`、`warning`、`danger`、`info`,并与 `*-background` 配对。同时提供文字或图标,勿单靠颜色解释。陶橙是品牌装饰色,不自动意味着警告。
+
+同一指标保持相同系列颜色;多系列同时增加图例、标记或线型。Light 和 Dark 的 `chart-*` 分别配置,不能把浅底图表色原样搬到深底。精细图表仍需检查真实线宽、相邻色与背景。
+
+`border`、`grid` 是低强调分隔/装饰;必要控件边界采用更清晰的 `input`。阴影使用 `shadow` token;模态遮罩使用 `scrim`,对话框与文字不随背景一起降低透明度。
+
+## 验收范围
+
+静态检查覆盖语义前景/背景、主按钮三态与必要控件边界。普通文字目标 ≥4.5:1,必要非文字控件目标 ≥3:1;不是整站无障碍认证。照片叠字、透明混色、图表相邻色与真实交互另验。用户素材和模板内容不属于 UI 换色范围。
+
+依据:[W3C 文字对比度](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum)、[非文字对比度](https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast)。
diff --git a/packages/brand/docs/integration.md b/packages/brand/docs/integration.md
new file mode 100644
index 0000000..a0349bf
--- /dev/null
+++ b/packages/brand/docs/integration.md
@@ -0,0 +1,59 @@
+# Tailwind CSS / shadcn/ui 接入
+
+## Workspace 依赖
+
+在消费应用的 `package.json` 声明 `"@endoleap/brand": "workspace:*"`,按仓库独立锁文件策略更新该应用锁文件。包为私有内部资源,无需 npm 发布、React peer dependency 或运行时主题库。
+
+当前 Studio / Wiki Dockerfile 把单个应用复制为孤立项目;增加 workspace 依赖时,必须一并调整 Docker 构建上下文和工作目录,复制根 workspace 配置、消费应用与 `packages/brand`,使 `workspace:*` 的相对位置保持有效。不要只加依赖后仍保留孤立安装流程。本 PR 不迁移这两套应用构建。
+
+## Tailwind CSS v4
+
+```css
+@import "tailwindcss";
+@import "@endoleap/brand/themes.css";
+@import "@endoleap/brand/tailwind.css";
+```
+
+`themes.css` 提供原生变量;`tailwind.css` 以 `@theme inline` 映射为 `bg-background`、`text-foreground`、`border-input`、`ring-ring` 等工具类,并声明 `.dark` / 显式 dark 主题变体。仅使用普通 CSS 时只导入前者。
+
+```tsx
+
+
+
+```
+
+在页面根节点选择 `home-light` / `home-dark` / `canvas-light` / `canvas-dark`;不要将官网背景变量继承成编辑器画板内容。`.dark` 无显式主题时回退到 `home-dark`。使用 `dark:` 工具类时保持一个根明暗上下文,不在 `.dark` 祖先下混用嵌套浅色变体;嵌套不同表面优先使用相同语义工具类。
+
+## shadcn/ui
+
+消费应用在自己的 `components.json` 保留 `tailwind.cssVariables: true`,`tailwind.css` 指向导入上述品牌样式的全局 CSS 文件。应用自行选择已有风格、图标库和组件路径,不把配置文件放到品牌资源包,也不运行 `init` 覆盖已有全局样式。
+
+本包已提供 background/card/popover、各 foreground、primary/secondary/muted/accent、destructive、border/input/ring、chart-1…5、完整 sidebar 变量与 radius。`accent` 是交互表面;装饰摩卡请用 `brand-mocha` / `bg-brand-mocha`。无需在每个组件复制色值。
+
+这表示主题兼容,不表示 shadcn 组件或动画样式已安装。组件自己的依赖、动画及 className 合并工具由应用现有架构负责。
+
+## JS / TypeScript
+
+```ts
+import { getTheme, type ThemeName } from '@endoleap/brand/tokens';
+const name: ThemeName = 'canvas-dark';
+const lineColor = getTheme(name).connector;
+```
+
+CSS 与 JS 主题名称一致。ESM 使用 JSON import attributes;包提供类型声明,TypeScript 消费方需支持 JSON 模块解析。CSS 中使用主题变量,Canvas/WebGL 中使用解析值;切换主题后由渲染器重画 UI,不能修改用户文档颜色。
+
+## 静态图片
+
+SVG 可通过包文件路径由构建器处理。favicon、Apple Touch 与 PWA 图片需要在应用资源准备阶段复制到应用的 public 根目录,再由页面元信息引用。例如 favicon 源是 `@endoleap/brand/assets/icons/favicon.ico`。必须显式指定文件映射,不复制整个资产包到 public,也不提交人为维护的第二套图形源。
+
+应用有 basePath 时,按应用现有部署方式确认浏览器 URL;不要把内部包路径当作公开 URL。平台 manifest、主题切换和实际网页接入不由品牌包自动注入。
+
+## 版本与兼容范围
+
+适配本仓库 Tailwind v4.3 与 CSS 变量式 shadcn/ui。Tailwind v3 需要另写 config 映射,本包不宣称已测试 v3。
+
+官方依据:[Tailwind theme variables](https://tailwindcss.com/docs/theme)、[shadcn/ui theming](https://ui.shadcn.com/docs/theming)。
diff --git a/packages/brand/docs/logo-preview.png b/packages/brand/docs/logo-preview.png
new file mode 100644
index 0000000..6b4a106
Binary files /dev/null and b/packages/brand/docs/logo-preview.png differ
diff --git a/packages/brand/docs/logo.md b/packages/brand/docs/logo.md
new file mode 100644
index 0000000..4f0555c
--- /dev/null
+++ b/packages/brand/docs/logo.md
@@ -0,0 +1,35 @@
+# Logo 规范与资源
+
+
+
+杯口摩卡 `#A47764`;浅底杯腹深棕 `#49372E`;深底杯腹奶霜 `#FFF6EF`;标准图标背景深棕 `#49372E`。对应引用位于 `tokens/logo.json`,色值从 `tokens/palette.json` 解析。陶橙、浅燕麦不加入标准 Logo。
+
+## 资源选择
+
+| 文件(相对于 assets) | 使用场景 |
+| --- | --- |
+| `svg/logo-light.svg` | 白色或奶霜背景上的透明双色标志 |
+| `svg/logo-dark.svg` | 近黑或深棕背景上的透明反白标志 |
+| `svg/mono-dark.svg`、`mono-light.svg` | 单色印刷、水印和受限展示 |
+| `svg/icon-dark.svg`、`icon-light.svg` | 有圆角容器的图标 |
+| `svg/app-square.svg` | 平台后续按蒙版裁切的方形源 |
+| `svg/avatar-circle.svg` | 圆形头像 |
+| `icons/favicon.ico` | 默认深棕 favicon |
+| `icons/favicon-transparent.ico` | 已知浅色背景下的透明 favicon |
+| `icons/favicon-light.ico` | 奶霜底 favicon |
+| `icons/apple-touch-icon.png` | 180px 方形平台图片 |
+| `icons/pwa-192.png`、`pwa-512.png` | PWA 候选图片,应用自行配置 manifest |
+
+`png/<版本>/endoleap-<尺寸>.png` 提供六组版本,每组包含 16、24、32、48、64、128、180、192、256、512、1024、2048px。三款 ICO 均内含 16、24、32、48、64、128、256px 的 PNG 帧。
+
+平台图片不等于完整原生安装图标配置;平台蒙版、safe zone、资源目录与元信息由消费应用配置。字标未包含在本包内,应用产品名称应使用正常文本和现有排版。
+
+## 一致性与修改规则
+
+唯一轮廓来源是 `tokens/geometry.json`,包含 rim / bowl 两条路径及其 transform。所有 SVG 共用完全相同的路径、坐标和比例,仅填色或背景容器不同。PNG 和 ICO 从对应 SVG 逐尺寸渲染;不能通过图片模型重新生成某个尺寸,也不能手工拉伸某个版本。
+
+修改颜色时同步 `palette.json`、Logo 色板引用和正式资源;修改形状时仅修改几何母版,再在 ces-control 导出所有受影响的文件。标准尺寸画布为 820×820 viewBox,标志与四周留白保持当前母版坐标。已有固定 PNG 可以从本次批准的素材直接迁入;后续渲染由远程 CI 验证。
+
+`assets/manifest.json` 列出颜色、版本、SVG 路径、PNG 与 ICO 尺寸;静态测试核对结构和轮廓,远程 Docker 使用固定版本的 resvg/Pillow 逐像素核对 PNG。不要把探索稿、ZIP、截图、提示词或本机路径当成正式源文件。
+
+提交 PR 时说明变动是填色、容器还是几何;附选定版本对照并记录受影响应用。不得直接推 main 或替用户合并。
diff --git a/packages/brand/docs/overview.md b/packages/brand/docs/overview.md
new file mode 100644
index 0000000..4b927a8
--- /dev/null
+++ b/packages/brand/docs/overview.md
@@ -0,0 +1,22 @@
+# 品牌与包边界
+
+中文名:**啡跃**。英文名:**Endoleap**。当前色彩方向为摩卡奶霜;Logo 是用户选定的「悬浮杯口」,形状固定,配色按背景切换。
+
+本包采用一个包、多个目录,颜色与 Logo 由相同的基础色板约束。消费方通过 `@endoleap/brand/themes.css`、`@endoleap/brand/tailwind.css`、`@endoleap/brand/tokens` 和 `@endoleap/brand/assets/*` 按需引用。
+
+| 路径 | 职责 |
+| --- | --- |
+| `tokens/palette.json` | 全部基础色与长度值;每个色值只有一个键 |
+| `tokens/home-light.json`、`home-dark.json` | 官网明暗语义色 |
+| `tokens/canvas-light.json`、`canvas-dark.json` | 编辑器明暗语义色 |
+| `tokens/logo.json` | Logo 各部分的色板引用 |
+| `tokens/geometry.json` | 两条固定路径及坐标 |
+| `src/` | 可直接导入的 CSS、ESM 和类型声明 |
+| `assets/` | 正式 SVG、PNG、ICO、清单 |
+| `docs/` | 包内唯一品牌规范入口 |
+
+深色主题已正式确认纳入本包,直接位于 `tokens/`。应用是否启用深色、如何存储偏好由应用决定;导入 CSS 不自动修改页面背景、用户作品或系统偏好。
+
+本 PR 的交付范围是共享包、文档和远程验证。现有 Studio / Wiki 页面还没有接入新包,不声称网站已经更名、换色或替换 favicon。应用接入时,按 [集成说明](integration.md) 更新其依赖及 Docker 复制规则,并另做服务器视觉验收。
+
+探索截图、图片模型提示词和 ZIP 交付包不属于运行资源。正式资产通过 Git 历史保留版本,不在包内堆积旧版目录。
diff --git a/packages/brand/package.json b/packages/brand/package.json
new file mode 100644
index 0000000..75e4082
--- /dev/null
+++ b/packages/brand/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@endoleap/brand",
+ "version": "1.2.0",
+ "private": true,
+ "type": "module",
+ "sideEffects": [
+ "./src/*.css"
+ ],
+ "exports": {
+ "./themes.css": "./src/themes.css",
+ "./tailwind.css": "./src/tailwind.css",
+ "./tokens": {
+ "types": "./src/tokens.d.ts",
+ "import": "./src/tokens.mjs"
+ },
+ "./assets/*": "./assets/*",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "test": "node --test tests/brand.test.mjs",
+ "build": "node scripts/build.mjs",
+ "test:tailwind": "node tests/tailwind.mjs",
+ "test:types": "tsc -p tests/tsconfig.json",
+ "test:assets": "python3 tests/assets.py"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "4.3.3",
+ "tailwindcss": "4.3.3",
+ "postcss": "8.5.6",
+ "typescript": "5.9.3"
+ },
+ "packageManager": "pnpm@11.25.0"
+}
diff --git a/packages/brand/pnpm-lock.yaml b/packages/brand/pnpm-lock.yaml
new file mode 100644
index 0000000..26695f8
--- /dev/null
+++ b/packages/brand/pnpm-lock.yaml
@@ -0,0 +1,440 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@tailwindcss/postcss':
+ specifier: 4.3.3
+ version: 4.3.3
+ postcss:
+ specifier: 8.5.6
+ version: 8.5.6
+ tailwindcss:
+ specifier: 4.3.3
+ version: 4.3.3
+ typescript:
+ specifier: 5.9.3
+ version: 5.9.3
+
+packages:
+
+ '@alloc/quick-lru@5.3.0':
+ resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==}
+ engines: {node: '>=10'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.6.0':
+ resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@tailwindcss/node@4.3.3':
+ resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==}
+
+ '@tailwindcss/oxide-android-arm64@4.3.3':
+ resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.3.3':
+ resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.3.3':
+ resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.3.3':
+ resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3':
+ resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.3':
+ resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.3':
+ resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.3':
+ resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.3.3':
+ resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.3.3':
+ resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.3':
+ resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.3':
+ resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.3.3':
+ resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/postcss@4.3.3':
+ resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ enhanced-resolve@5.26.0:
+ resolution: {integrity: sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==}
+ engines: {node: '>=10.13.0'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ jiti@2.7.0:
+ resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
+ hasBin: true
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ nanoid@3.3.20:
+ resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ postcss@8.5.32:
+ resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ source-map-js@1.2.2:
+ resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==}
+ engines: {node: '>=0.10.0'}
+
+ tailwindcss@4.3.3:
+ resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==}
+
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+snapshots:
+
+ '@alloc/quick-lru@5.3.0': {}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.6.0
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.6.0': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.6.0
+
+ '@tailwindcss/node@4.3.3':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.26.0
+ jiti: 2.7.0
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.2
+ tailwindcss: 4.3.3
+
+ '@tailwindcss/oxide-android-arm64@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.3':
+ optional: true
+
+ '@tailwindcss/oxide@4.3.3':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.3.3
+ '@tailwindcss/oxide-darwin-arm64': 4.3.3
+ '@tailwindcss/oxide-darwin-x64': 4.3.3
+ '@tailwindcss/oxide-freebsd-x64': 4.3.3
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3
+ '@tailwindcss/oxide-linux-arm64-musl': 4.3.3
+ '@tailwindcss/oxide-linux-x64-gnu': 4.3.3
+ '@tailwindcss/oxide-linux-x64-musl': 4.3.3
+ '@tailwindcss/oxide-wasm32-wasi': 4.3.3
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3
+ '@tailwindcss/oxide-win32-x64-msvc': 4.3.3
+
+ '@tailwindcss/postcss@4.3.3':
+ dependencies:
+ '@alloc/quick-lru': 5.3.0
+ '@tailwindcss/node': 4.3.3
+ '@tailwindcss/oxide': 4.3.3
+ postcss: 8.5.32
+ tailwindcss: 4.3.3
+
+ detect-libc@2.1.2: {}
+
+ enhanced-resolve@5.26.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
+
+ graceful-fs@4.2.11: {}
+
+ jiti@2.7.0: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.6.0
+
+ nanoid@3.3.20: {}
+
+ picocolors@1.1.1: {}
+
+ postcss@8.5.32:
+ dependencies:
+ nanoid: 3.3.20
+ picocolors: 1.1.1
+ source-map-js: 1.2.2
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.20
+ picocolors: 1.1.1
+ source-map-js: 1.2.2
+
+ source-map-js@1.2.2: {}
+
+ tailwindcss@4.3.3: {}
+
+ tapable@2.3.3: {}
+
+ typescript@5.9.3: {}
diff --git a/packages/brand/scripts/build.mjs b/packages/brand/scripts/build.mjs
new file mode 100644
index 0000000..4345857
--- /dev/null
+++ b/packages/brand/scripts/build.mjs
@@ -0,0 +1,8 @@
+// Execute only on the authorized ces-control runner. Source exports work without a local build.
+import { mkdir, writeFile, copyFile } from 'node:fs/promises';
+import { themes, palette } from '../src/tokens.mjs';
+const root = new URL('../', import.meta.url);
+await mkdir(new URL('dist/', root), { recursive: true });
+for (const name of ['themes.css', 'tailwind.css']) await copyFile(new URL(`src/${name}`, root), new URL(`dist/${name}`, root));
+await writeFile(new URL('dist/tokens.json', root), JSON.stringify({ palette, themes }, null, 2) + '\n');
+console.log('Brand CSS and resolved JSON exported to dist/.');
diff --git a/packages/brand/src/tailwind.css b/packages/brand/src/tailwind.css
new file mode 100644
index 0000000..550e6a2
--- /dev/null
+++ b/packages/brand/src/tailwind.css
@@ -0,0 +1,73 @@
+/* Import after tailwindcss. Both .dark and explicit dark theme selectors are supported. */
+@custom-variant dark (&:where(.dark, .dark *, [data-theme="home-dark"], [data-theme="home-dark"] *, [data-theme="canvas-dark"], [data-theme="canvas-dark"] *));
+@theme inline {
+ --color-background: var(--background);
+ --color-surface: var(--surface);
+ --color-foreground: var(--foreground);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-accent: var(--accent);
+ --color-selection: var(--selection);
+ --color-border: var(--border);
+ --color-surface-raised: var(--surface-raised);
+ --color-surface-muted: var(--surface-muted);
+ --color-foreground-strong: var(--foreground-strong);
+ --color-primary-hover: var(--primary-hover);
+ --color-primary-active: var(--primary-active);
+ --color-secondary: var(--secondary);
+ --color-secondary-hover: var(--secondary-hover);
+ --color-secondary-active: var(--secondary-active);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-link: var(--link);
+ --color-focus-ring: var(--focus-ring);
+ --color-control-border: var(--control-border);
+ --color-row-hover: var(--row-hover);
+ --color-disabled-background: var(--disabled-background);
+ --color-disabled-foreground: var(--disabled-foreground);
+ --color-success: var(--success);
+ --color-success-background: var(--success-background);
+ --color-warning: var(--warning);
+ --color-warning-background: var(--warning-background);
+ --color-danger: var(--danger);
+ --color-danger-hover: var(--danger-hover);
+ --color-danger-background: var(--danger-background);
+ --color-info: var(--info);
+ --color-info-background: var(--info-background);
+ --color-surface-muted-foreground: var(--surface-muted-foreground);
+ --color-brand-mocha: var(--brand-mocha);
+ --color-brand-orange: var(--brand-orange);
+ --color-brand-cream: var(--brand-cream);
+ --color-brand-oat: var(--brand-oat);
+ --color-orange-foreground: var(--orange-foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-muted: var(--muted);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-destructive-foreground: var(--destructive-foreground);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+ --color-connector: var(--connector);
+ --color-selection-border: var(--selection-border);
+ --color-grid: var(--grid);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --radius-sm: calc(var(--radius) * 0.6);
+ --radius-md: calc(var(--radius) * 0.8);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) * 1.4);
+}
diff --git a/packages/brand/src/themes.css b/packages/brand/src/themes.css
new file mode 100644
index 0000000..61f144e
--- /dev/null
+++ b/packages/brand/src/themes.css
@@ -0,0 +1,451 @@
+/* Canonical values: tokens/palette.json and tokens/*.json. CI checks this source stylesheet. */
+:root {
+ --el-cream: #FFF6EF;
+ --el-color-2: #FFFCF9;
+ --el-espresso: #49372E;
+ --el-color-4: #68574D;
+ --el-deep-mocha: #78523F;
+ --el-color-6: #FFFFFF;
+ --el-oat: #EDE9D0;
+ --el-color-8: #DDCFC4;
+ --el-color-9: #F1E8E0;
+ --el-color-10: #38281F;
+ --el-color-11: #674634;
+ --el-color-12: #573B2D;
+ --el-color-13: #F0E6DD;
+ --el-color-14: #E8D8CA;
+ --el-color-15: #DFCCBA;
+ --el-color-16: #9A8879;
+ --el-color-17: #F5ECE3;
+ --el-color-18: #E7E1D8;
+ --el-color-19: #92867A;
+ --el-color-20: #41684B;
+ --el-color-21: #EAF1E8;
+ --el-color-22: #805A16;
+ --el-color-23: #FBF0D4;
+ --el-color-24: #A33E32;
+ --el-color-25: #8B3026;
+ --el-color-26: #F9EAE5;
+ --el-color-27: #48667D;
+ --el-color-28: #EAF0F4;
+ --el-color-29: rgba(59, 41, 35, 0.08);
+ --el-color-30: rgba(41, 38, 35, 0.40);
+ --el-mocha: #A47764;
+ --el-terracotta: #E07242;
+ --el-color-33: #A84E2C;
+ --el-color-34: 0.625rem;
+ --el-color-35: #D9D9D9;
+ --el-color-36: #55704D;
+ --el-color-37: #805A7B;
+ --el-canvas-white: #FAFAFA;
+ --el-color-39: #292623;
+ --el-color-40: #6D665F;
+ --el-color-41: #F2E8E1;
+ --el-color-42: #DDD9D2;
+ --el-color-43: #F3F1EE;
+ --el-color-44: #201D1A;
+ --el-color-45: #EBE6DF;
+ --el-color-46: #E1D8CD;
+ --el-color-47: #F6F3EF;
+ --el-color-48: #EFEEEB;
+ --el-color-49: #95908A;
+ --el-color-50: rgba(41, 38, 35, 0.08);
+ --el-canvas-black: #141414;
+ --el-color-52: #202020;
+ --el-color-53: #282828;
+ --el-color-54: #252525;
+ --el-color-55: #EEEEEE;
+ --el-color-56: #B9B4AE;
+ --el-color-57: #D1AA92;
+ --el-color-58: #DEBDA8;
+ --el-color-59: #BE967B;
+ --el-color-60: #211A17;
+ --el-color-61: #3A302B;
+ --el-color-62: #2C2926;
+ --el-color-63: #37312C;
+ --el-color-64: #44392F;
+ --el-color-65: #3B3B3B;
+ --el-color-66: #81756A;
+ --el-color-67: #333333;
+ --el-color-68: #292522;
+ --el-color-69: #292929;
+ --el-color-70: #77736E;
+ --el-color-71: #A4C2A1;
+ --el-color-72: #243127;
+ --el-color-73: #E3C381;
+ --el-color-74: #362F20;
+ --el-color-75: #F0A395;
+ --el-color-76: #F6B5AA;
+ --el-color-77: #3B2724;
+ --el-color-78: #A6C6DC;
+ --el-color-79: #23303B;
+ --el-color-80: rgba(0, 0, 0, 0.30);
+ --el-color-81: rgba(0, 0, 0, 0.60);
+ --el-color-82: #E8AE92;
+ --el-color-83: #D9AE8F;
+ --el-color-84: #C8A7CD;
+ --el-color-85: #1C1816;
+ --el-color-86: #27211E;
+ --el-color-87: #302720;
+ --el-color-88: #302823;
+}
+
+.dark, [data-theme="home-dark"] {
+ color-scheme: dark;
+ --background: var(--el-color-85);
+ --surface: var(--el-color-86);
+ --surface-raised: var(--el-color-87);
+ --surface-muted: var(--el-color-88);
+ --foreground: var(--el-color-55);
+ --foreground-strong: var(--el-color-6);
+ --muted-foreground: var(--el-color-56);
+ --primary: var(--el-color-57);
+ --primary-hover: var(--el-color-58);
+ --primary-active: var(--el-color-59);
+ --primary-foreground: var(--el-color-60);
+ --accent: var(--el-color-61);
+ --secondary: var(--el-color-62);
+ --secondary-hover: var(--el-color-63);
+ --secondary-active: var(--el-color-64);
+ --secondary-foreground: var(--el-color-55);
+ --selection: var(--el-color-61);
+ --selection-border: var(--el-color-57);
+ --connector: var(--el-color-57);
+ --border: var(--el-color-65);
+ --control-border: var(--el-color-66);
+ --grid: var(--el-color-67);
+ --focus-ring: var(--el-color-57);
+ --link: var(--el-color-57);
+ --row-hover: var(--el-color-68);
+ --disabled-background: var(--el-color-69);
+ --disabled-foreground: var(--el-color-70);
+ --success: var(--el-color-71);
+ --success-background: var(--el-color-72);
+ --warning: var(--el-color-73);
+ --warning-background: var(--el-color-74);
+ --danger: var(--el-color-75);
+ --danger-hover: var(--el-color-76);
+ --danger-background: var(--el-color-77);
+ --info: var(--el-color-78);
+ --info-background: var(--el-color-79);
+ --shadow: var(--el-color-80);
+ --scrim: var(--el-color-81);
+ --surface-muted-foreground: var(--el-color-56);
+ --brand-mocha: var(--el-mocha);
+ --brand-orange: var(--el-terracotta);
+ --brand-cream: var(--el-cream);
+ --brand-oat: var(--el-oat);
+ --orange-foreground: var(--el-color-82);
+ --card: var(--el-color-86);
+ --card-foreground: var(--el-color-55);
+ --popover: var(--el-color-87);
+ --popover-foreground: var(--el-color-55);
+ --muted: var(--el-color-88);
+ --accent-foreground: var(--el-color-55);
+ --destructive: var(--el-color-75);
+ --destructive-foreground: var(--el-color-60);
+ --input: var(--el-color-66);
+ --ring: var(--el-color-57);
+ --sidebar: var(--el-color-86);
+ --sidebar-foreground: var(--el-color-55);
+ --sidebar-primary: var(--el-color-57);
+ --sidebar-primary-foreground: var(--el-color-60);
+ --sidebar-accent: var(--el-color-61);
+ --sidebar-accent-foreground: var(--el-color-55);
+ --sidebar-border: var(--el-color-65);
+ --sidebar-ring: var(--el-color-57);
+ --radius: var(--el-color-34);
+ --chart-1: var(--el-color-57);
+ --chart-2: var(--el-color-78);
+ --chart-3: var(--el-color-71);
+ --chart-4: var(--el-color-83);
+ --chart-5: var(--el-color-84);
+}
+
+[data-theme="canvas-dark"] {
+ color-scheme: dark;
+ --background: var(--el-canvas-black);
+ --surface: var(--el-color-52);
+ --surface-raised: var(--el-color-53);
+ --surface-muted: var(--el-color-54);
+ --foreground: var(--el-color-55);
+ --foreground-strong: var(--el-color-6);
+ --muted-foreground: var(--el-color-56);
+ --primary: var(--el-color-57);
+ --primary-hover: var(--el-color-58);
+ --primary-active: var(--el-color-59);
+ --primary-foreground: var(--el-color-60);
+ --accent: var(--el-color-61);
+ --secondary: var(--el-color-62);
+ --secondary-hover: var(--el-color-63);
+ --secondary-active: var(--el-color-64);
+ --secondary-foreground: var(--el-color-55);
+ --selection: var(--el-color-61);
+ --selection-border: var(--el-color-57);
+ --connector: var(--el-color-57);
+ --border: var(--el-color-65);
+ --control-border: var(--el-color-66);
+ --grid: var(--el-color-67);
+ --focus-ring: var(--el-color-57);
+ --link: var(--el-color-57);
+ --row-hover: var(--el-color-68);
+ --disabled-background: var(--el-color-69);
+ --disabled-foreground: var(--el-color-70);
+ --success: var(--el-color-71);
+ --success-background: var(--el-color-72);
+ --warning: var(--el-color-73);
+ --warning-background: var(--el-color-74);
+ --danger: var(--el-color-75);
+ --danger-hover: var(--el-color-76);
+ --danger-background: var(--el-color-77);
+ --info: var(--el-color-78);
+ --info-background: var(--el-color-79);
+ --shadow: var(--el-color-80);
+ --scrim: var(--el-color-81);
+ --surface-muted-foreground: var(--el-color-56);
+ --brand-mocha: var(--el-mocha);
+ --brand-orange: var(--el-terracotta);
+ --brand-cream: var(--el-cream);
+ --brand-oat: var(--el-oat);
+ --orange-foreground: var(--el-color-82);
+ --card: var(--el-color-52);
+ --card-foreground: var(--el-color-55);
+ --popover: var(--el-color-53);
+ --popover-foreground: var(--el-color-55);
+ --muted: var(--el-color-54);
+ --accent-foreground: var(--el-color-55);
+ --destructive: var(--el-color-75);
+ --destructive-foreground: var(--el-color-60);
+ --input: var(--el-color-66);
+ --ring: var(--el-color-57);
+ --sidebar: var(--el-color-52);
+ --sidebar-foreground: var(--el-color-55);
+ --sidebar-primary: var(--el-color-57);
+ --sidebar-primary-foreground: var(--el-color-60);
+ --sidebar-accent: var(--el-color-61);
+ --sidebar-accent-foreground: var(--el-color-55);
+ --sidebar-border: var(--el-color-65);
+ --sidebar-ring: var(--el-color-57);
+ --radius: var(--el-color-34);
+ --chart-1: var(--el-color-57);
+ --chart-2: var(--el-color-78);
+ --chart-3: var(--el-color-71);
+ --chart-4: var(--el-color-83);
+ --chart-5: var(--el-color-84);
+}
+
+:root:not([data-theme]):not(.dark), [data-theme="home-light"] {
+ color-scheme: light;
+ --background: var(--el-cream);
+ --surface: var(--el-color-2);
+ --foreground: var(--el-espresso);
+ --muted-foreground: var(--el-color-4);
+ --primary: var(--el-deep-mocha);
+ --primary-foreground: var(--el-color-6);
+ --accent: var(--el-oat);
+ --selection: var(--el-oat);
+ --border: var(--el-color-8);
+ --surface-raised: var(--el-color-6);
+ --surface-muted: var(--el-color-9);
+ --foreground-strong: var(--el-color-10);
+ --primary-hover: var(--el-color-11);
+ --primary-active: var(--el-color-12);
+ --secondary: var(--el-color-13);
+ --secondary-hover: var(--el-color-14);
+ --secondary-active: var(--el-color-15);
+ --secondary-foreground: var(--el-espresso);
+ --link: var(--el-deep-mocha);
+ --focus-ring: var(--el-deep-mocha);
+ --control-border: var(--el-color-16);
+ --row-hover: var(--el-color-17);
+ --disabled-background: var(--el-color-18);
+ --disabled-foreground: var(--el-color-19);
+ --success: var(--el-color-20);
+ --success-background: var(--el-color-21);
+ --warning: var(--el-color-22);
+ --warning-background: var(--el-color-23);
+ --danger: var(--el-color-24);
+ --danger-hover: var(--el-color-25);
+ --danger-background: var(--el-color-26);
+ --info: var(--el-color-27);
+ --info-background: var(--el-color-28);
+ --shadow: var(--el-color-29);
+ --scrim: var(--el-color-30);
+ --surface-muted-foreground: var(--el-color-4);
+ --brand-mocha: var(--el-mocha);
+ --brand-orange: var(--el-terracotta);
+ --brand-cream: var(--el-cream);
+ --brand-oat: var(--el-oat);
+ --orange-foreground: var(--el-color-33);
+ --card: var(--el-color-2);
+ --card-foreground: var(--el-espresso);
+ --popover: var(--el-color-6);
+ --popover-foreground: var(--el-espresso);
+ --muted: var(--el-color-9);
+ --accent-foreground: var(--el-espresso);
+ --destructive: var(--el-color-24);
+ --destructive-foreground: var(--el-color-6);
+ --input: var(--el-color-16);
+ --ring: var(--el-deep-mocha);
+ --sidebar: var(--el-color-2);
+ --sidebar-foreground: var(--el-espresso);
+ --sidebar-primary: var(--el-deep-mocha);
+ --sidebar-primary-foreground: var(--el-color-6);
+ --sidebar-accent: var(--el-oat);
+ --sidebar-accent-foreground: var(--el-espresso);
+ --sidebar-border: var(--el-color-8);
+ --sidebar-ring: var(--el-deep-mocha);
+ --radius: var(--el-color-34);
+ --connector: var(--el-deep-mocha);
+ --selection-border: var(--el-deep-mocha);
+ --grid: var(--el-color-35);
+ --chart-1: var(--el-deep-mocha);
+ --chart-2: var(--el-color-27);
+ --chart-3: var(--el-color-36);
+ --chart-4: var(--el-mocha);
+ --chart-5: var(--el-color-37);
+}
+
+[data-theme="canvas-light"] {
+ color-scheme: light;
+ --background: var(--el-canvas-white);
+ --surface: var(--el-color-6);
+ --foreground: var(--el-color-39);
+ --muted-foreground: var(--el-color-40);
+ --primary: var(--el-deep-mocha);
+ --primary-foreground: var(--el-color-6);
+ --connector: var(--el-deep-mocha);
+ --selection: var(--el-color-41);
+ --border: var(--el-color-42);
+ --grid: var(--el-color-35);
+ --surface-raised: var(--el-color-6);
+ --surface-muted: var(--el-color-43);
+ --foreground-strong: var(--el-color-44);
+ --primary-hover: var(--el-color-11);
+ --primary-active: var(--el-color-12);
+ --secondary: var(--el-color-43);
+ --secondary-hover: var(--el-color-45);
+ --secondary-active: var(--el-color-46);
+ --secondary-foreground: var(--el-espresso);
+ --link: var(--el-deep-mocha);
+ --focus-ring: var(--el-deep-mocha);
+ --control-border: var(--el-color-16);
+ --selection-border: var(--el-deep-mocha);
+ --row-hover: var(--el-color-47);
+ --disabled-background: var(--el-color-48);
+ --disabled-foreground: var(--el-color-49);
+ --success: var(--el-color-20);
+ --success-background: var(--el-color-21);
+ --warning: var(--el-color-22);
+ --warning-background: var(--el-color-23);
+ --danger: var(--el-color-24);
+ --danger-hover: var(--el-color-25);
+ --danger-background: var(--el-color-26);
+ --info: var(--el-color-27);
+ --info-background: var(--el-color-28);
+ --shadow: var(--el-color-50);
+ --scrim: var(--el-color-30);
+ --surface-muted-foreground: var(--el-color-40);
+ --accent: var(--el-color-41);
+ --brand-mocha: var(--el-mocha);
+ --brand-orange: var(--el-terracotta);
+ --brand-cream: var(--el-cream);
+ --brand-oat: var(--el-oat);
+ --orange-foreground: var(--el-color-33);
+ --card: var(--el-color-6);
+ --card-foreground: var(--el-color-39);
+ --popover: var(--el-color-6);
+ --popover-foreground: var(--el-color-39);
+ --muted: var(--el-color-43);
+ --accent-foreground: var(--el-color-39);
+ --destructive: var(--el-color-24);
+ --destructive-foreground: var(--el-color-6);
+ --input: var(--el-color-16);
+ --ring: var(--el-deep-mocha);
+ --sidebar: var(--el-color-6);
+ --sidebar-foreground: var(--el-color-39);
+ --sidebar-primary: var(--el-deep-mocha);
+ --sidebar-primary-foreground: var(--el-color-6);
+ --sidebar-accent: var(--el-color-41);
+ --sidebar-accent-foreground: var(--el-color-39);
+ --sidebar-border: var(--el-color-42);
+ --sidebar-ring: var(--el-deep-mocha);
+ --radius: var(--el-color-34);
+ --chart-1: var(--el-deep-mocha);
+ --chart-2: var(--el-color-27);
+ --chart-3: var(--el-color-36);
+ --chart-4: var(--el-mocha);
+ --chart-5: var(--el-color-37);
+}
+
+:root.dark:not([data-theme]) {
+ color-scheme: dark;
+ --background: var(--el-color-85);
+ --surface: var(--el-color-86);
+ --surface-raised: var(--el-color-87);
+ --surface-muted: var(--el-color-88);
+ --foreground: var(--el-color-55);
+ --foreground-strong: var(--el-color-6);
+ --muted-foreground: var(--el-color-56);
+ --primary: var(--el-color-57);
+ --primary-hover: var(--el-color-58);
+ --primary-active: var(--el-color-59);
+ --primary-foreground: var(--el-color-60);
+ --accent: var(--el-color-61);
+ --secondary: var(--el-color-62);
+ --secondary-hover: var(--el-color-63);
+ --secondary-active: var(--el-color-64);
+ --secondary-foreground: var(--el-color-55);
+ --selection: var(--el-color-61);
+ --selection-border: var(--el-color-57);
+ --connector: var(--el-color-57);
+ --border: var(--el-color-65);
+ --control-border: var(--el-color-66);
+ --grid: var(--el-color-67);
+ --focus-ring: var(--el-color-57);
+ --link: var(--el-color-57);
+ --row-hover: var(--el-color-68);
+ --disabled-background: var(--el-color-69);
+ --disabled-foreground: var(--el-color-70);
+ --success: var(--el-color-71);
+ --success-background: var(--el-color-72);
+ --warning: var(--el-color-73);
+ --warning-background: var(--el-color-74);
+ --danger: var(--el-color-75);
+ --danger-hover: var(--el-color-76);
+ --danger-background: var(--el-color-77);
+ --info: var(--el-color-78);
+ --info-background: var(--el-color-79);
+ --shadow: var(--el-color-80);
+ --scrim: var(--el-color-81);
+ --surface-muted-foreground: var(--el-color-56);
+ --brand-mocha: var(--el-mocha);
+ --brand-orange: var(--el-terracotta);
+ --brand-cream: var(--el-cream);
+ --brand-oat: var(--el-oat);
+ --orange-foreground: var(--el-color-82);
+ --card: var(--el-color-86);
+ --card-foreground: var(--el-color-55);
+ --popover: var(--el-color-87);
+ --popover-foreground: var(--el-color-55);
+ --muted: var(--el-color-88);
+ --accent-foreground: var(--el-color-55);
+ --destructive: var(--el-color-75);
+ --destructive-foreground: var(--el-color-60);
+ --input: var(--el-color-66);
+ --ring: var(--el-color-57);
+ --sidebar: var(--el-color-86);
+ --sidebar-foreground: var(--el-color-55);
+ --sidebar-primary: var(--el-color-57);
+ --sidebar-primary-foreground: var(--el-color-60);
+ --sidebar-accent: var(--el-color-61);
+ --sidebar-accent-foreground: var(--el-color-55);
+ --sidebar-border: var(--el-color-65);
+ --sidebar-ring: var(--el-color-57);
+ --radius: var(--el-color-34);
+ --chart-1: var(--el-color-57);
+ --chart-2: var(--el-color-78);
+ --chart-3: var(--el-color-71);
+ --chart-4: var(--el-color-83);
+ --chart-5: var(--el-color-84);
+}
diff --git a/packages/brand/src/tokens.d.ts b/packages/brand/src/tokens.d.ts
new file mode 100644
index 0000000..8218c39
--- /dev/null
+++ b/packages/brand/src/tokens.d.ts
@@ -0,0 +1,8 @@
+import type values from '../tokens/home-light.json';
+export type ThemeName = 'home-light' | 'canvas-light' | 'home-dark' | 'canvas-dark';
+export type ColorToken = keyof typeof values;
+export declare const palette: Readonly>;
+export declare const references: Readonly>>>;
+export declare const themeNames: readonly ThemeName[];
+export declare const themes: Readonly>>>;
+export declare function getTheme(name: ThemeName): Readonly>;
diff --git a/packages/brand/src/tokens.mjs b/packages/brand/src/tokens.mjs
new file mode 100644
index 0000000..504dc24
--- /dev/null
+++ b/packages/brand/src/tokens.mjs
@@ -0,0 +1,13 @@
+import palette from '../tokens/palette.json' with { type: 'json' };
+import homeLight from '../tokens/home-light.json' with { type: 'json' };
+import canvasLight from '../tokens/canvas-light.json' with { type: 'json' };
+import homeDark from '../tokens/home-dark.json' with { type: 'json' };
+import canvasDark from '../tokens/canvas-dark.json' with { type: 'json' };
+export { palette };
+export const references = { 'home-light': homeLight, 'canvas-light': canvasLight, 'home-dark': homeDark, 'canvas-dark': canvasDark };
+export const themeNames = Object.freeze(Object.keys(references));
+export const themes = Object.freeze(Object.fromEntries(themeNames.map(name => [name, Object.freeze(Object.fromEntries(Object.entries(references[name]).map(([key, ref]) => [key, palette[ref]])))])));
+export function getTheme(name) {
+ if (!Object.hasOwn(themes, name)) throw new RangeError(`Unknown Endoleap theme: ${name}`);
+ return themes[name];
+}
diff --git a/packages/brand/tests/assets.py b/packages/brand/tests/assets.py
new file mode 100644
index 0000000..e4dc982
--- /dev/null
+++ b/packages/brand/tests/assets.py
@@ -0,0 +1,15 @@
+"""Render the committed SVGs only in remote CI and compare their actual pixels."""
+from pathlib import Path
+import io, json
+from PIL import Image
+import resvg_py
+
+root = Path(__file__).resolve().parents[1]
+manifest = json.loads((root / 'assets/manifest.json').read_text())
+for variant in manifest['variants']:
+ svg = (root / f'assets/svg/{variant}.svg').read_text()
+ for size in manifest['png_sizes']:
+ actual = Image.open(io.BytesIO(resvg_py.svg_to_bytes(svg_string=svg, width=size, height=size, shape_rendering='geometric_precision'))).convert('RGBA')
+ stored = Image.open(root / f'assets/png/{variant}/endoleap-{size}.png').convert('RGBA')
+ assert actual.tobytes() == stored.tobytes(), (variant, size)
+print('72 PNG assets exactly match their committed fixed-path SVGs.')
diff --git a/packages/brand/tests/brand.test.mjs b/packages/brand/tests/brand.test.mjs
new file mode 100644
index 0000000..3439635
--- /dev/null
+++ b/packages/brand/tests/brand.test.mjs
@@ -0,0 +1,91 @@
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import { readFile, readdir } from 'node:fs/promises';
+import { palette, references, themes, themeNames, getTheme } from '../src/tokens.mjs';
+
+const file = name => readFile(new URL(`../${name}`, import.meta.url));
+const json = async name => JSON.parse(await file(name));
+const luminance = hex => hex.match(/[\da-f]{2}/gi).map(v => parseInt(v, 16) / 255)
+ .map(v => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4)
+ .reduce((a, v, i) => a + v * [.2126, .7152, .0722][i], 0);
+const contrast = (a, b) => (Math.max(luminance(a), luminance(b)) + .05) / (Math.min(luminance(a), luminance(b)) + .05);
+
+test('four production themes resolve every palette reference and expose the same contract', () => {
+ assert.deepEqual([...themeNames].sort(), ['canvas-dark', 'canvas-light', 'home-dark', 'home-light']);
+ const keys = Object.keys(references['home-light']).sort();
+ for (const name of themeNames) {
+ assert.deepEqual(Object.keys(references[name]).sort(), keys);
+ for (const ref of Object.values(references[name])) assert.ok(Object.hasOwn(palette, ref), `${name}: ${ref}`);
+ for (const key of ['card', 'popover', 'accent', 'input', 'ring', 'destructive', 'chart-5', 'sidebar', 'sidebar-ring']) assert.ok(keys.includes(key));
+ assert.equal(themes[name]['accent'], themes[name].selection);
+ assert.notEqual(themes[name].accent, themes[name]['brand-mocha']);
+ }
+ assert.equal(getTheme('canvas-light').background, '#FAFAFA');
+ assert.equal(getTheme('canvas-dark').background, '#141414');
+ assert.throws(() => getTheme('canvas-dark-proposed'), RangeError);
+ assert.throws(() => getTheme('toString'), RangeError);
+});
+
+test('committed CSS and Tailwind bridge match the canonical tokens', async () => {
+ const css = (await file('src/themes.css')).toString();
+ const bridge = (await file('src/tailwind.css')).toString();
+ for (const [key, value] of Object.entries(palette)) assert.ok(css.includes(`--el-${key}: ${value};`), key);
+ for (const name of themeNames) {
+ const marker = `[data-theme="${name}"]`;
+ const block = css.slice(css.indexOf(marker)).split('}')[0];
+ for (const [key, ref] of Object.entries(references[name])) assert.ok(block.includes(`--${key}: var(--el-${ref});`), `${name}/${key}`);
+ }
+ for (const key of Object.keys(references['home-light'])) {
+ if (!['radius', 'shadow', 'scrim'].includes(key)) assert.ok(bridge.includes(`--color-${key}: var(--${key});`), key);
+ }
+ assert.ok(css.includes(':root:not([data-theme]):not(.dark)'));
+ assert.ok(bridge.includes('@theme inline'));
+});
+
+test('semantic foreground/background pairs and required controls have sufficient contrast', () => {
+ for (const [name, t] of Object.entries(themes)) {
+ for (const base of ['primary', 'secondary', 'muted', 'accent', 'card', 'popover', 'sidebar', 'sidebar-primary', 'sidebar-accent', 'destructive']) {
+ assert.ok(contrast(t[base], t[`${base}-foreground`]) >= 4.5, `${name}/${base}`);
+ }
+ assert.ok(contrast(t.background, t.foreground) >= 4.5, name);
+ for (const state of ['primary-hover', 'primary-active']) assert.ok(contrast(t[state], t['primary-foreground']) >= 4.5, `${name}/${state}`);
+ for (const fg of ['input', 'ring']) for (const bg of ['background', 'card']) assert.ok(contrast(t[fg], t[bg]) >= 3, `${name}/${fg}/${bg}`);
+ }
+});
+
+test('all eight SVG variants preserve the approved paths and reference colors', async () => {
+ const geometry = await json('tokens/geometry.json');
+ const logo = await json('tokens/logo.json');
+ for (const filename of await readdir(new URL('../assets/svg/', import.meta.url))) {
+ const svg = (await file(`assets/svg/${filename}`)).toString();
+ assert.equal((svg.match(/ {
+ const manifest = await json('assets/manifest.json');
+ for (const variant of Object.keys(manifest.variants)) for (const size of manifest.png_sizes) {
+ const png = await file(`assets/png/${variant}/endoleap-${size}.png`);
+ assert.equal(png.subarray(1, 4).toString(), 'PNG');
+ assert.equal(png.readUInt32BE(16), size); assert.equal(png.readUInt32BE(20), size);
+ }
+ for (const [name, variant] of [['favicon.ico', 'icon-dark'], ['favicon-transparent.ico', 'logo-light'], ['favicon-light.ico', 'icon-light']]) {
+ const ico = await file(`assets/icons/${name}`);
+ assert.equal(ico.readUInt16LE(0), 0); assert.equal(ico.readUInt16LE(2), 1);
+ assert.equal(ico.readUInt16LE(4), manifest.ico_sizes.length);
+ for (const [i, size] of manifest.ico_sizes.entries()) {
+ const p = 6 + i * 16;
+ assert.equal(ico[p] || 256, size); assert.equal(ico[p + 1] || 256, size);
+ const length = ico.readUInt32LE(p + 8), offset = ico.readUInt32LE(p + 12);
+ assert.deepEqual(ico.subarray(offset, offset + length), await file(`assets/png/${variant}/endoleap-${size}.png`));
+ }
+ }
+});
diff --git a/packages/brand/tests/tailwind.mjs b/packages/brand/tests/tailwind.mjs
new file mode 100644
index 0000000..7d1e75a
--- /dev/null
+++ b/packages/brand/tests/tailwind.mjs
@@ -0,0 +1,13 @@
+// Real Tailwind compilation belongs to remote Docker CI, never the local check command.
+import assert from 'node:assert/strict';
+import { readFile } from 'node:fs/promises';
+import postcss from 'postcss';
+import tailwind from '@tailwindcss/postcss';
+const root = new URL('../', import.meta.url);
+const source = `@import "tailwindcss";\n${await readFile(new URL('src/tailwind.css', root), 'utf8')}\n@source inline("bg-background text-foreground bg-card text-card-foreground bg-primary text-primary-foreground bg-accent text-accent-foreground border-input ring-ring bg-sidebar text-sidebar-foreground rounded-lg dark:bg-background bg-brand-mocha");`;
+const result = await postcss([tailwind({ base: root.pathname })]).process(source, { from: new URL('fixture.css', root).pathname });
+for (const token of ['background', 'card', 'primary', 'accent', 'sidebar', 'brand-mocha']) assert.ok(result.css.includes(`background-color: var(--${token})`), token);
+assert.ok(result.css.includes('border-color: var(--input)'));
+assert.ok(result.css.includes('var(--ring)'));
+assert.ok(!result.css.includes('@theme inline'));
+console.log('Tailwind v4 compiled standard shadcn, sidebar, brand, radius and dark utilities.');
diff --git a/packages/brand/tests/tokens.test.mts b/packages/brand/tests/tokens.test.mts
new file mode 100644
index 0000000..3a01994
--- /dev/null
+++ b/packages/brand/tests/tokens.test.mts
@@ -0,0 +1,8 @@
+import { getTheme, themes, type ThemeName, type ColorToken } from '@endoleap/brand/tokens';
+const name: ThemeName = 'canvas-dark';
+const token: ColorToken = 'sidebar-accent-foreground';
+const color: string = getTheme(name)[token];
+const primary: string = themes['home-light'].primary;
+void [color, primary];
+// @ts-expect-error retired draft identifier must not leak into the public API.
+getTheme('canvas-dark-proposed');
diff --git a/packages/brand/tests/tsconfig.json b/packages/brand/tests/tsconfig.json
new file mode 100644
index 0000000..7415e26
--- /dev/null
+++ b/packages/brand/tests/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "resolveJsonModule": true,
+ "strict": true,
+ "noEmit": true,
+ "skipLibCheck": false
+ },
+ "files": ["tokens.test.mts"]
+}
diff --git a/packages/brand/tokens/canvas-dark.json b/packages/brand/tokens/canvas-dark.json
new file mode 100644
index 0000000..b894ffa
--- /dev/null
+++ b/packages/brand/tokens/canvas-dark.json
@@ -0,0 +1,70 @@
+{
+ "background": "canvas-black",
+ "surface": "color-52",
+ "surface-raised": "color-53",
+ "surface-muted": "color-54",
+ "foreground": "color-55",
+ "foreground-strong": "color-6",
+ "muted-foreground": "color-56",
+ "primary": "color-57",
+ "primary-hover": "color-58",
+ "primary-active": "color-59",
+ "primary-foreground": "color-60",
+ "accent": "color-61",
+ "secondary": "color-62",
+ "secondary-hover": "color-63",
+ "secondary-active": "color-64",
+ "secondary-foreground": "color-55",
+ "selection": "color-61",
+ "selection-border": "color-57",
+ "connector": "color-57",
+ "border": "color-65",
+ "control-border": "color-66",
+ "grid": "color-67",
+ "focus-ring": "color-57",
+ "link": "color-57",
+ "row-hover": "color-68",
+ "disabled-background": "color-69",
+ "disabled-foreground": "color-70",
+ "success": "color-71",
+ "success-background": "color-72",
+ "warning": "color-73",
+ "warning-background": "color-74",
+ "danger": "color-75",
+ "danger-hover": "color-76",
+ "danger-background": "color-77",
+ "info": "color-78",
+ "info-background": "color-79",
+ "shadow": "color-80",
+ "scrim": "color-81",
+ "surface-muted-foreground": "color-56",
+ "brand-mocha": "mocha",
+ "brand-orange": "terracotta",
+ "brand-cream": "cream",
+ "brand-oat": "oat",
+ "orange-foreground": "color-82",
+ "card": "color-52",
+ "card-foreground": "color-55",
+ "popover": "color-53",
+ "popover-foreground": "color-55",
+ "muted": "color-54",
+ "accent-foreground": "color-55",
+ "destructive": "color-75",
+ "destructive-foreground": "color-60",
+ "input": "color-66",
+ "ring": "color-57",
+ "sidebar": "color-52",
+ "sidebar-foreground": "color-55",
+ "sidebar-primary": "color-57",
+ "sidebar-primary-foreground": "color-60",
+ "sidebar-accent": "color-61",
+ "sidebar-accent-foreground": "color-55",
+ "sidebar-border": "color-65",
+ "sidebar-ring": "color-57",
+ "radius": "color-34",
+ "chart-1": "color-57",
+ "chart-2": "color-78",
+ "chart-3": "color-71",
+ "chart-4": "color-83",
+ "chart-5": "color-84"
+}
diff --git a/packages/brand/tokens/canvas-light.json b/packages/brand/tokens/canvas-light.json
new file mode 100644
index 0000000..28edf6a
--- /dev/null
+++ b/packages/brand/tokens/canvas-light.json
@@ -0,0 +1,70 @@
+{
+ "background": "canvas-white",
+ "surface": "color-6",
+ "foreground": "color-39",
+ "muted-foreground": "color-40",
+ "primary": "deep-mocha",
+ "primary-foreground": "color-6",
+ "connector": "deep-mocha",
+ "selection": "color-41",
+ "border": "color-42",
+ "grid": "color-35",
+ "surface-raised": "color-6",
+ "surface-muted": "color-43",
+ "foreground-strong": "color-44",
+ "primary-hover": "color-11",
+ "primary-active": "color-12",
+ "secondary": "color-43",
+ "secondary-hover": "color-45",
+ "secondary-active": "color-46",
+ "secondary-foreground": "espresso",
+ "link": "deep-mocha",
+ "focus-ring": "deep-mocha",
+ "control-border": "color-16",
+ "selection-border": "deep-mocha",
+ "row-hover": "color-47",
+ "disabled-background": "color-48",
+ "disabled-foreground": "color-49",
+ "success": "color-20",
+ "success-background": "color-21",
+ "warning": "color-22",
+ "warning-background": "color-23",
+ "danger": "color-24",
+ "danger-hover": "color-25",
+ "danger-background": "color-26",
+ "info": "color-27",
+ "info-background": "color-28",
+ "shadow": "color-50",
+ "scrim": "color-30",
+ "surface-muted-foreground": "color-40",
+ "accent": "color-41",
+ "brand-mocha": "mocha",
+ "brand-orange": "terracotta",
+ "brand-cream": "cream",
+ "brand-oat": "oat",
+ "orange-foreground": "color-33",
+ "card": "color-6",
+ "card-foreground": "color-39",
+ "popover": "color-6",
+ "popover-foreground": "color-39",
+ "muted": "color-43",
+ "accent-foreground": "color-39",
+ "destructive": "color-24",
+ "destructive-foreground": "color-6",
+ "input": "color-16",
+ "ring": "deep-mocha",
+ "sidebar": "color-6",
+ "sidebar-foreground": "color-39",
+ "sidebar-primary": "deep-mocha",
+ "sidebar-primary-foreground": "color-6",
+ "sidebar-accent": "color-41",
+ "sidebar-accent-foreground": "color-39",
+ "sidebar-border": "color-42",
+ "sidebar-ring": "deep-mocha",
+ "radius": "color-34",
+ "chart-1": "deep-mocha",
+ "chart-2": "color-27",
+ "chart-3": "color-36",
+ "chart-4": "mocha",
+ "chart-5": "color-37"
+}
diff --git a/packages/brand/tokens/geometry.json b/packages/brand/tokens/geometry.json
new file mode 100644
index 0000000..d5c3d9a
--- /dev/null
+++ b/packages/brand/tokens/geometry.json
@@ -0,0 +1,10 @@
+{
+ "rim": {
+ "d": "M0.000 0.000 C0.000 0.000 55.000 0.000 55.000 0.000 C55.000 0.000 55.000 1.000 55.000 1.000 C55.000 1.000 66.000 1.000 66.000 1.000 C66.000 1.000 66.000 2.000 66.000 2.000 C66.000 2.000 74.000 2.000 74.000 2.000 C74.000 2.000 74.000 3.000 74.000 3.000 C74.000 3.000 81.000 3.000 81.000 3.000 C81.000 3.000 81.000 4.000 81.000 4.000 C81.000 4.000 86.000 4.000 86.000 4.000 C86.000 4.000 86.000 5.000 86.000 5.000 C86.000 5.000 92.000 5.000 92.000 5.000 C92.000 5.000 92.000 6.000 92.000 6.000 C92.000 6.000 104.000 8.000 104.000 8.000 C104.000 8.000 104.000 9.000 104.000 9.000 C104.000 9.000 107.000 9.000 107.000 9.000 C107.000 9.000 107.000 10.000 107.000 10.000 C107.000 10.000 116.000 12.000 116.000 12.000 C116.000 12.000 116.000 13.000 116.000 13.000 C116.000 13.000 118.000 13.000 118.000 13.000 C118.000 13.000 118.000 14.000 118.000 14.000 C118.000 14.000 121.000 14.000 121.000 14.000 C121.000 14.000 121.000 15.000 121.000 15.000 C121.000 15.000 123.000 15.000 123.000 15.000 C123.000 15.000 123.000 16.000 123.000 16.000 C123.000 16.000 125.000 16.000 125.000 16.000 C125.000 16.000 125.000 17.000 125.000 17.000 C125.000 17.000 127.000 17.000 127.000 17.000 C127.000 17.000 127.000 18.000 127.000 18.000 C127.000 18.000 129.000 18.000 129.000 18.000 C129.000 18.000 128.000 18.500 129.000 19.000 C130.000 19.500 134.000 20.500 135.000 21.000 C136.000 21.500 134.500 21.667 135.000 22.000 C135.500 22.333 137.333 22.500 138.000 23.000 C138.667 23.500 138.500 24.667 139.000 25.000 C139.500 25.333 140.333 24.500 141.000 25.000 C141.667 25.500 142.333 27.500 143.000 28.000 C143.667 28.500 145.000 28.000 145.000 28.000 C145.000 28.000 143.500 27.500 145.000 29.000 C146.500 30.500 152.500 35.333 154.000 37.000 C155.500 38.667 154.000 39.000 154.000 39.000 C154.000 39.000 154.667 38.500 155.000 39.000 C155.333 39.500 155.500 41.333 156.000 42.000 C156.500 42.667 157.667 42.500 158.000 43.000 C158.333 43.500 158.000 45.000 158.000 45.000 C158.000 45.000 159.000 45.000 159.000 45.000 C159.000 45.000 159.000 47.000 159.000 47.000 C159.000 47.000 160.000 47.000 160.000 47.000 C160.000 47.000 160.000 49.000 160.000 49.000 C160.000 49.000 161.000 49.000 161.000 49.000 C161.000 49.000 162.000 55.000 162.000 55.000 C162.000 55.000 163.000 55.000 163.000 55.000 C163.000 55.000 164.000 73.000 164.000 73.000 C164.000 73.000 163.000 73.000 163.000 73.000 C163.000 73.000 163.000 79.000 163.000 79.000 C163.000 79.000 162.000 79.000 162.000 79.000 C162.000 79.000 162.000 83.000 162.000 83.000 C162.000 83.000 161.000 83.000 161.000 83.000 C161.000 83.000 160.000 89.000 160.000 89.000 C160.000 89.000 159.000 89.000 159.000 89.000 C159.000 89.000 159.000 91.000 159.000 91.000 C159.000 91.000 158.000 91.000 158.000 91.000 C158.000 91.000 158.000 93.000 158.000 93.000 C158.000 93.000 157.000 93.000 157.000 93.000 C157.000 93.000 157.000 96.000 157.000 96.000 C157.000 96.000 156.000 96.000 156.000 96.000 C156.000 96.000 156.333 97.500 156.000 98.000 C155.667 98.500 154.667 97.833 154.000 99.000 C153.333 100.167 152.667 103.833 152.000 105.000 C151.333 106.167 150.333 105.500 150.000 106.000 C149.667 106.500 150.333 107.500 150.000 108.000 C149.667 108.500 148.333 108.500 148.000 109.000 C147.667 109.500 148.333 110.500 148.000 111.000 C147.667 111.500 146.333 111.500 146.000 112.000 C145.667 112.500 146.500 113.333 146.000 114.000 C145.500 114.667 143.500 115.333 143.000 116.000 C142.500 116.667 143.667 117.167 143.000 118.000 C142.333 118.833 139.667 120.167 139.000 121.000 C138.333 121.833 140.333 121.500 139.000 123.000 C137.667 124.500 132.333 128.500 131.000 130.000 C129.667 131.500 131.000 132.000 131.000 132.000 C131.000 132.000 132.667 129.333 130.000 132.000 C127.333 134.667 117.833 145.333 115.000 148.000 C112.167 150.667 113.000 148.000 113.000 148.000 C113.000 148.000 113.000 149.000 113.000 149.000 C113.000 149.000 113.500 147.500 112.000 149.000 C110.500 150.500 105.667 156.500 104.000 158.000 C102.333 159.500 103.167 157.000 102.000 158.000 C100.833 159.000 98.167 163.000 97.000 164.000 C95.833 165.000 96.000 163.167 95.000 164.000 C94.000 164.833 92.000 168.167 91.000 169.000 C90.000 169.833 89.833 168.333 89.000 169.000 C88.167 169.667 86.833 172.333 86.000 173.000 C85.167 173.667 84.833 172.333 84.000 173.000 C83.167 173.667 81.833 176.333 81.000 177.000 C80.167 177.667 79.667 176.500 79.000 177.000 C78.333 177.500 77.667 179.500 77.000 180.000 C76.333 180.500 75.833 179.333 75.000 180.000 C74.167 180.667 72.833 183.333 72.000 184.000 C71.167 184.667 70.500 183.667 70.000 184.000 C69.500 184.333 69.500 185.667 69.000 186.000 C68.500 186.333 67.667 185.500 67.000 186.000 C66.333 186.500 65.667 188.500 65.000 189.000 C64.333 189.500 63.000 189.000 63.000 189.000 C63.000 189.000 63.000 190.000 63.000 190.000 C63.000 190.000 62.333 189.667 62.000 190.000 C61.667 190.333 61.500 191.667 61.000 192.000 C60.500 192.333 59.667 191.500 59.000 192.000 C58.333 192.500 57.667 194.500 57.000 195.000 C56.333 195.500 55.000 195.000 55.000 195.000 C55.000 195.000 55.500 195.667 55.000 196.000 C54.500 196.333 52.833 196.333 52.000 197.000 C51.167 197.667 50.667 199.500 50.000 200.000 C49.333 200.500 48.500 199.667 48.000 200.000 C47.500 200.333 47.500 201.667 47.000 202.000 C46.500 202.333 45.500 201.667 45.000 202.000 C44.500 202.333 44.500 203.667 44.000 204.000 C43.500 204.333 42.500 203.667 42.000 204.000 C41.500 204.333 41.500 205.667 41.000 206.000 C40.500 206.333 39.000 206.000 39.000 206.000 C39.000 206.000 39.500 206.667 39.000 207.000 C38.500 207.333 36.667 207.500 36.000 208.000 C35.333 208.500 35.833 209.500 35.000 210.000 C34.167 210.500 31.833 210.500 31.000 211.000 C30.167 211.500 30.500 212.667 30.000 213.000 C29.500 213.333 28.000 213.000 28.000 213.000 C28.000 213.000 28.500 213.667 28.000 214.000 C27.500 214.333 25.667 214.500 25.000 215.000 C24.333 215.500 25.167 216.333 24.000 217.000 C22.833 217.667 19.167 218.333 18.000 219.000 C16.833 219.667 17.500 220.667 17.000 221.000 C16.500 221.333 15.500 220.667 15.000 221.000 C14.500 221.333 15.167 222.333 14.000 223.000 C12.833 223.667 9.167 224.333 8.000 225.000 C6.833 225.667 7.500 226.667 7.000 227.000 C6.500 227.333 5.000 227.000 5.000 227.000 C5.000 227.000 6.000 227.500 5.000 228.000 C4.000 228.500 0.167 229.333 -1.000 230.000 C-2.167 230.667 -1.500 231.667 -2.000 232.000 C-2.500 232.333 -4.000 232.000 -4.000 232.000 C-4.000 232.000 -4.000 233.000 -4.000 233.000 C-4.000 233.000 -6.000 233.000 -6.000 233.000 C-6.000 233.000 -6.000 234.000 -6.000 234.000 C-6.000 234.000 -8.000 234.000 -8.000 234.000 C-8.000 234.000 -8.000 235.000 -8.000 235.000 C-8.000 235.000 -10.000 235.000 -10.000 235.000 C-10.000 235.000 -10.000 236.000 -10.000 236.000 C-10.000 236.000 -12.000 236.000 -12.000 236.000 C-12.000 236.000 -12.000 237.000 -12.000 237.000 C-12.000 237.000 -14.000 237.000 -14.000 237.000 C-14.000 237.000 -14.000 238.000 -14.000 238.000 C-14.000 238.000 -16.000 238.000 -16.000 238.000 C-16.000 238.000 -16.000 239.000 -16.000 239.000 C-16.000 239.000 -18.000 239.000 -18.000 239.000 C-18.000 239.000 -18.000 240.000 -18.000 240.000 C-18.000 240.000 -20.000 240.000 -20.000 240.000 C-20.000 240.000 -20.000 241.000 -20.000 241.000 C-20.000 241.000 -23.000 241.000 -23.000 241.000 C-23.000 241.000 -23.000 242.000 -23.000 242.000 C-23.000 242.000 -25.000 242.000 -25.000 242.000 C-25.000 242.000 -25.000 243.000 -25.000 243.000 C-25.000 243.000 -27.000 243.000 -27.000 243.000 C-27.000 243.000 -27.000 244.000 -27.000 244.000 C-27.000 244.000 -29.000 244.000 -29.000 244.000 C-29.000 244.000 -29.000 245.000 -29.000 245.000 C-29.000 245.000 -32.000 245.000 -32.000 245.000 C-32.000 245.000 -32.000 246.000 -32.000 246.000 C-32.000 246.000 -34.000 246.000 -34.000 246.000 C-34.000 246.000 -34.000 247.000 -34.000 247.000 C-34.000 247.000 -37.000 247.000 -37.000 247.000 C-37.000 247.000 -37.000 248.000 -37.000 248.000 C-37.000 248.000 -39.000 248.000 -39.000 248.000 C-39.000 248.000 -39.000 249.000 -39.000 249.000 C-39.000 249.000 -42.000 249.000 -42.000 249.000 C-42.000 249.000 -42.000 250.000 -42.000 250.000 C-42.000 250.000 -44.000 250.000 -44.000 250.000 C-44.000 250.000 -44.000 251.000 -44.000 251.000 C-44.000 251.000 -47.000 251.000 -47.000 251.000 C-47.000 251.000 -47.000 252.000 -47.000 252.000 C-47.000 252.000 -50.000 252.000 -50.000 252.000 C-50.000 252.000 -50.000 253.000 -50.000 253.000 C-50.000 253.000 -53.000 253.000 -53.000 253.000 C-53.000 253.000 -53.000 254.000 -53.000 254.000 C-53.000 254.000 -55.000 254.000 -55.000 254.000 C-55.000 254.000 -55.000 255.000 -55.000 255.000 C-55.000 255.000 -62.000 256.000 -62.000 256.000 C-62.000 256.000 -62.000 257.000 -62.000 257.000 C-62.000 257.000 -65.000 257.000 -65.000 257.000 C-65.000 257.000 -65.000 258.000 -65.000 258.000 C-65.000 258.000 -68.000 258.000 -68.000 258.000 C-68.000 258.000 -68.000 259.000 -68.000 259.000 C-68.000 259.000 -72.000 259.000 -72.000 259.000 C-72.000 259.000 -72.000 260.000 -72.000 260.000 C-72.000 260.000 -75.000 260.000 -75.000 260.000 C-75.000 260.000 -75.000 261.000 -75.000 261.000 C-75.000 261.000 -79.000 261.000 -79.000 261.000 C-79.000 261.000 -79.000 262.000 -79.000 262.000 C-79.000 262.000 -83.000 262.000 -83.000 262.000 C-83.000 262.000 -83.000 263.000 -83.000 263.000 C-83.000 263.000 -87.000 263.000 -87.000 263.000 C-87.000 263.000 -87.000 264.000 -87.000 264.000 C-87.000 264.000 -91.000 264.000 -91.000 264.000 C-91.000 264.000 -91.000 265.000 -91.000 265.000 C-91.000 265.000 -95.000 265.000 -95.000 265.000 C-95.000 265.000 -95.000 266.000 -95.000 266.000 C-95.000 266.000 -100.000 266.000 -100.000 266.000 C-100.000 266.000 -100.000 267.000 -100.000 267.000 C-100.000 267.000 -106.000 267.000 -106.000 267.000 C-106.000 267.000 -106.000 268.000 -106.000 268.000 C-106.000 268.000 -111.000 268.000 -111.000 268.000 C-111.000 268.000 -111.000 269.000 -111.000 269.000 C-111.000 269.000 -117.000 269.000 -117.000 269.000 C-117.000 269.000 -117.000 270.000 -117.000 270.000 C-117.000 270.000 -153.000 273.000 -153.000 273.000 C-153.000 273.000 -153.000 271.000 -153.000 271.000 C-153.000 271.000 -151.500 271.333 -151.000 271.000 C-150.500 270.667 -150.500 269.333 -150.000 269.000 C-149.500 268.667 -148.000 269.000 -148.000 269.000 C-148.000 269.000 -148.000 268.000 -148.000 268.000 C-148.000 268.000 -146.000 268.000 -146.000 268.000 C-146.000 268.000 -146.000 267.000 -146.000 267.000 C-146.000 267.000 -144.000 267.000 -144.000 267.000 C-144.000 267.000 -144.000 266.000 -144.000 266.000 C-144.000 266.000 -142.000 266.000 -142.000 266.000 C-142.000 266.000 -142.000 265.000 -142.000 265.000 C-142.000 265.000 -140.000 265.000 -140.000 265.000 C-140.000 265.000 -140.000 264.000 -140.000 264.000 C-140.000 264.000 -138.000 264.000 -138.000 264.000 C-138.000 264.000 -138.000 263.000 -138.000 263.000 C-138.000 263.000 -136.000 263.000 -136.000 263.000 C-136.000 263.000 -136.000 262.000 -136.000 262.000 C-136.000 262.000 -134.000 262.000 -134.000 262.000 C-134.000 262.000 -134.000 261.000 -134.000 261.000 C-134.000 261.000 -132.000 261.000 -132.000 261.000 C-132.000 261.000 -132.000 260.000 -132.000 260.000 C-132.000 260.000 -130.000 260.000 -130.000 260.000 C-130.000 260.000 -130.000 259.000 -130.000 259.000 C-130.000 259.000 -128.000 259.000 -128.000 259.000 C-128.000 259.000 -128.000 258.000 -128.000 258.000 C-128.000 258.000 -126.000 258.000 -126.000 258.000 C-126.000 258.000 -126.000 257.000 -126.000 257.000 C-126.000 257.000 -123.000 257.000 -123.000 257.000 C-123.000 257.000 -123.000 256.000 -123.000 256.000 C-123.000 256.000 -121.000 256.000 -121.000 256.000 C-121.000 256.000 -121.000 255.000 -121.000 255.000 C-121.000 255.000 -119.000 255.000 -119.000 255.000 C-119.000 255.000 -119.000 254.000 -119.000 254.000 C-119.000 254.000 -117.000 254.000 -117.000 254.000 C-117.000 254.000 -117.000 253.000 -117.000 253.000 C-117.000 253.000 -114.000 253.000 -114.000 253.000 C-114.000 253.000 -114.000 252.000 -114.000 252.000 C-114.000 252.000 -112.000 252.000 -112.000 252.000 C-112.000 252.000 -112.000 251.000 -112.000 251.000 C-112.000 251.000 -110.000 251.000 -110.000 251.000 C-110.000 251.000 -110.000 250.000 -110.000 250.000 C-110.000 250.000 -108.000 250.000 -108.000 250.000 C-108.000 250.000 -108.000 249.000 -108.000 249.000 C-108.000 249.000 -105.000 249.000 -105.000 249.000 C-105.000 249.000 -105.000 248.000 -105.000 248.000 C-105.000 248.000 -103.000 248.000 -103.000 248.000 C-103.000 248.000 -103.000 247.000 -103.000 247.000 C-103.000 247.000 -101.000 247.000 -101.000 247.000 C-101.000 247.000 -101.000 246.000 -101.000 246.000 C-101.000 246.000 -99.000 246.000 -99.000 246.000 C-99.000 246.000 -99.000 245.000 -99.000 245.000 C-99.000 245.000 -97.000 245.000 -97.000 245.000 C-97.000 245.000 -97.000 244.000 -97.000 244.000 C-97.000 244.000 -95.000 244.000 -95.000 244.000 C-95.000 244.000 -95.000 243.000 -95.000 243.000 C-95.000 243.000 -93.000 243.000 -93.000 243.000 C-93.000 243.000 -93.000 242.000 -93.000 242.000 C-93.000 242.000 -91.000 242.000 -91.000 242.000 C-91.000 242.000 -91.000 241.000 -91.000 241.000 C-91.000 241.000 -89.000 241.000 -89.000 241.000 C-89.000 241.000 -89.000 240.000 -89.000 240.000 C-89.000 240.000 -87.000 240.000 -87.000 240.000 C-87.000 240.000 -87.000 239.000 -87.000 239.000 C-87.000 239.000 -85.000 239.000 -85.000 239.000 C-85.000 239.000 -85.000 238.000 -85.000 238.000 C-85.000 238.000 -83.000 238.000 -83.000 238.000 C-83.000 238.000 -83.000 237.000 -83.000 237.000 C-83.000 237.000 -81.000 237.000 -81.000 237.000 C-81.000 237.000 -81.000 236.000 -81.000 236.000 C-81.000 236.000 -79.000 236.000 -79.000 236.000 C-79.000 236.000 -79.000 235.000 -79.000 235.000 C-79.000 235.000 -77.000 235.000 -77.000 235.000 C-77.000 235.000 -78.000 234.500 -77.000 234.000 C-76.000 233.500 -72.167 232.667 -71.000 232.000 C-69.833 231.333 -70.500 230.333 -70.000 230.000 C-69.500 229.667 -68.000 230.000 -68.000 230.000 C-68.000 230.000 -69.000 229.500 -68.000 229.000 C-67.000 228.500 -63.167 227.667 -62.000 227.000 C-60.833 226.333 -61.833 225.500 -61.000 225.000 C-60.167 224.500 -57.833 224.500 -57.000 224.000 C-56.167 223.500 -56.500 222.333 -56.000 222.000 C-55.500 221.667 -54.000 222.000 -54.000 222.000 C-54.000 222.000 -54.000 221.000 -54.000 221.000 C-54.000 221.000 -52.500 221.333 -52.000 221.000 C-51.500 220.667 -51.833 219.500 -51.000 219.000 C-50.167 218.500 -47.833 218.500 -47.000 218.000 C-46.167 217.500 -46.833 216.500 -46.000 216.000 C-45.167 215.500 -42.000 215.000 -42.000 215.000 C-42.000 215.000 -42.500 214.333 -42.000 214.000 C-41.500 213.667 -39.667 213.500 -39.000 213.000 C-38.333 212.500 -38.833 211.500 -38.000 211.000 C-37.167 210.500 -34.000 210.000 -34.000 210.000 C-34.000 210.000 -34.500 209.333 -34.000 209.000 C-33.500 208.667 -31.667 208.500 -31.000 208.000 C-30.333 207.500 -30.833 206.500 -30.000 206.000 C-29.167 205.500 -26.833 205.500 -26.000 205.000 C-25.167 204.500 -25.500 203.333 -25.000 203.000 C-24.500 202.667 -23.500 203.333 -23.000 203.000 C-22.500 202.667 -22.500 201.333 -22.000 201.000 C-21.500 200.667 -20.500 201.333 -20.000 201.000 C-19.500 200.667 -19.500 199.333 -19.000 199.000 C-18.500 198.667 -17.500 199.333 -17.000 199.000 C-16.500 198.667 -16.500 197.333 -16.000 197.000 C-15.500 196.667 -14.500 197.333 -14.000 197.000 C-13.500 196.667 -13.500 195.333 -13.000 195.000 C-12.500 194.667 -11.500 195.333 -11.000 195.000 C-10.500 194.667 -10.500 193.333 -10.000 193.000 C-9.500 192.667 -8.500 193.333 -8.000 193.000 C-7.500 192.667 -7.500 191.333 -7.000 191.000 C-6.500 190.667 -5.667 191.500 -5.000 191.000 C-4.333 190.500 -3.667 188.500 -3.000 188.000 C-2.333 187.500 -1.500 188.333 -1.000 188.000 C-0.500 187.667 -0.500 186.333 0.000 186.000 C0.500 185.667 1.333 186.500 2.000 186.000 C2.667 185.500 3.333 183.500 4.000 183.000 C4.667 182.500 5.500 183.333 6.000 183.000 C6.500 182.667 6.500 181.333 7.000 181.000 C7.500 180.667 8.333 181.500 9.000 181.000 C9.667 180.500 10.333 178.500 11.000 178.000 C11.667 177.500 12.333 178.500 13.000 178.000 C13.667 177.500 14.333 175.500 15.000 175.000 C15.667 174.500 16.333 175.500 17.000 175.000 C17.667 174.500 18.333 172.500 19.000 172.000 C19.667 171.500 20.333 172.500 21.000 172.000 C21.667 171.500 22.333 169.500 23.000 169.000 C23.667 168.500 24.167 169.667 25.000 169.000 C25.833 168.333 27.167 165.667 28.000 165.000 C28.833 164.333 30.000 165.000 30.000 165.000 C30.000 165.000 30.000 164.000 30.000 164.000 C30.000 164.000 30.333 164.667 31.000 164.000 C31.667 163.333 33.167 160.667 34.000 160.000 C34.833 159.333 34.833 161.000 36.000 160.000 C37.167 159.000 39.833 155.000 41.000 154.000 C42.167 153.000 43.000 154.000 43.000 154.000 C43.000 154.000 39.333 156.667 43.000 153.000 C46.667 149.333 61.333 135.833 65.000 132.000 C68.667 128.167 64.333 130.833 65.000 130.000 C65.667 129.167 68.333 127.833 69.000 127.000 C69.667 126.167 68.667 125.500 69.000 125.000 C69.333 124.500 70.667 124.500 71.000 124.000 C71.333 123.500 70.667 122.500 71.000 122.000 C71.333 121.500 72.667 121.500 73.000 121.000 C73.333 120.500 72.667 119.500 73.000 119.000 C73.333 118.500 74.667 118.500 75.000 118.000 C75.333 117.500 75.000 116.000 75.000 116.000 C75.000 116.000 76.000 116.000 76.000 116.000 C76.000 116.000 76.000 114.000 76.000 114.000 C76.000 114.000 77.000 114.000 77.000 114.000 C77.000 114.000 77.000 112.000 77.000 112.000 C77.000 112.000 78.000 112.000 78.000 112.000 C78.000 112.000 78.000 109.000 78.000 109.000 C78.000 109.000 79.000 109.000 79.000 109.000 C79.000 109.000 79.000 106.000 79.000 106.000 C79.000 106.000 80.000 106.000 80.000 106.000 C80.000 106.000 80.000 100.000 80.000 100.000 C80.000 100.000 81.000 100.000 81.000 100.000 C81.000 100.000 80.000 91.000 80.000 91.000 C80.000 91.000 79.500 92.000 79.000 91.000 C78.500 90.000 77.500 86.000 77.000 85.000 C76.500 84.000 77.000 86.000 76.000 85.000 C75.000 84.000 72.167 80.000 71.000 79.000 C69.833 78.000 69.500 79.333 69.000 79.000 C68.500 78.667 68.500 77.333 68.000 77.000 C67.500 76.667 66.000 77.000 66.000 77.000 C66.000 77.000 66.000 76.000 66.000 76.000 C66.000 76.000 64.000 76.000 64.000 76.000 C64.000 76.000 64.000 75.000 64.000 75.000 C64.000 75.000 62.000 75.000 62.000 75.000 C62.000 75.000 62.000 74.000 62.000 74.000 C62.000 74.000 60.000 74.000 60.000 74.000 C60.000 74.000 60.000 73.000 60.000 73.000 C60.000 73.000 53.000 72.000 53.000 72.000 C53.000 72.000 53.000 71.000 53.000 71.000 C53.000 71.000 50.000 71.000 50.000 71.000 C50.000 71.000 50.000 70.000 50.000 70.000 C50.000 70.000 45.000 70.000 45.000 70.000 C45.000 70.000 45.000 69.000 45.000 69.000 C45.000 69.000 39.000 69.000 39.000 69.000 C39.000 69.000 39.000 68.000 39.000 68.000 C39.000 68.000 31.000 68.000 31.000 68.000 C31.000 68.000 31.000 67.000 31.000 67.000 C31.000 67.000 -14.000 67.000 -14.000 67.000 C-14.000 67.000 -14.000 68.000 -14.000 68.000 C-14.000 68.000 -26.000 68.000 -26.000 68.000 C-26.000 68.000 -26.000 69.000 -26.000 69.000 C-26.000 69.000 -34.000 69.000 -34.000 69.000 C-34.000 69.000 -34.000 70.000 -34.000 70.000 C-34.000 70.000 -55.000 72.000 -55.000 72.000 C-55.000 72.000 -55.000 73.000 -55.000 73.000 C-55.000 73.000 -67.000 74.000 -67.000 74.000 C-67.000 74.000 -67.000 75.000 -67.000 75.000 C-67.000 75.000 -72.000 75.000 -72.000 75.000 C-72.000 75.000 -72.000 76.000 -72.000 76.000 C-72.000 76.000 -87.000 78.000 -87.000 78.000 C-87.000 78.000 -87.000 79.000 -87.000 79.000 C-87.000 79.000 -91.000 79.000 -91.000 79.000 C-91.000 79.000 -91.000 80.000 -91.000 80.000 C-91.000 80.000 -96.000 80.000 -96.000 80.000 C-96.000 80.000 -96.000 81.000 -96.000 81.000 C-96.000 81.000 -100.000 81.000 -100.000 81.000 C-100.000 81.000 -100.000 82.000 -100.000 82.000 C-100.000 82.000 -105.000 82.000 -105.000 82.000 C-105.000 82.000 -105.000 83.000 -105.000 83.000 C-105.000 83.000 -109.000 83.000 -109.000 83.000 C-109.000 83.000 -109.000 84.000 -109.000 84.000 C-109.000 84.000 -121.000 86.000 -121.000 86.000 C-121.000 86.000 -121.000 87.000 -121.000 87.000 C-121.000 87.000 -124.000 87.000 -124.000 87.000 C-124.000 87.000 -124.000 88.000 -124.000 88.000 C-124.000 88.000 -136.000 90.000 -136.000 90.000 C-136.000 90.000 -136.000 91.000 -136.000 91.000 C-136.000 91.000 -139.000 91.000 -139.000 91.000 C-139.000 91.000 -139.000 92.000 -139.000 92.000 C-139.000 92.000 -143.000 92.000 -143.000 92.000 C-143.000 92.000 -143.000 93.000 -143.000 93.000 C-143.000 93.000 -146.000 93.000 -146.000 93.000 C-146.000 93.000 -146.000 94.000 -146.000 94.000 C-146.000 94.000 -150.000 94.000 -150.000 94.000 C-150.000 94.000 -150.000 95.000 -150.000 95.000 C-150.000 95.000 -153.000 95.000 -153.000 95.000 C-153.000 95.000 -153.000 96.000 -153.000 96.000 C-153.000 96.000 -157.000 96.000 -157.000 96.000 C-157.000 96.000 -157.000 97.000 -157.000 97.000 C-157.000 97.000 -160.000 97.000 -160.000 97.000 C-160.000 97.000 -160.000 98.000 -160.000 98.000 C-160.000 98.000 -163.000 98.000 -163.000 98.000 C-163.000 98.000 -163.000 99.000 -163.000 99.000 C-163.000 99.000 -166.000 99.000 -166.000 99.000 C-166.000 99.000 -166.000 100.000 -166.000 100.000 C-166.000 100.000 -170.000 100.000 -170.000 100.000 C-170.000 100.000 -170.000 101.000 -170.000 101.000 C-170.000 101.000 -173.000 101.000 -173.000 101.000 C-173.000 101.000 -173.000 102.000 -173.000 102.000 C-173.000 102.000 -176.000 102.000 -176.000 102.000 C-176.000 102.000 -176.000 103.000 -176.000 103.000 C-176.000 103.000 -179.000 103.000 -179.000 103.000 C-179.000 103.000 -179.000 104.000 -179.000 104.000 C-179.000 104.000 -182.000 104.000 -182.000 104.000 C-182.000 104.000 -182.000 105.000 -182.000 105.000 C-182.000 105.000 -185.000 105.000 -185.000 105.000 C-185.000 105.000 -185.000 106.000 -185.000 106.000 C-185.000 106.000 -189.000 106.000 -189.000 106.000 C-189.000 106.000 -189.000 107.000 -189.000 107.000 C-189.000 107.000 -191.000 107.000 -191.000 107.000 C-191.000 107.000 -191.000 108.000 -191.000 108.000 C-191.000 108.000 -194.000 108.000 -194.000 108.000 C-194.000 108.000 -194.000 109.000 -194.000 109.000 C-194.000 109.000 -197.000 109.000 -197.000 109.000 C-197.000 109.000 -197.000 110.000 -197.000 110.000 C-197.000 110.000 -200.000 110.000 -200.000 110.000 C-200.000 110.000 -200.000 111.000 -200.000 111.000 C-200.000 111.000 -203.000 111.000 -203.000 111.000 C-203.000 111.000 -203.000 112.000 -203.000 112.000 C-203.000 112.000 -212.000 114.000 -212.000 114.000 C-212.000 114.000 -212.000 115.000 -212.000 115.000 C-212.000 115.000 -214.000 115.000 -214.000 115.000 C-214.000 115.000 -214.000 116.000 -214.000 116.000 C-214.000 116.000 -220.000 117.000 -220.000 117.000 C-220.000 117.000 -220.000 118.000 -220.000 118.000 C-220.000 118.000 -222.000 118.000 -222.000 118.000 C-222.000 118.000 -222.000 119.000 -222.000 119.000 C-222.000 119.000 -228.000 120.000 -228.000 120.000 C-228.000 120.000 -228.000 121.000 -228.000 121.000 C-228.000 121.000 -230.000 121.000 -230.000 121.000 C-230.000 121.000 -230.000 122.000 -230.000 122.000 C-230.000 122.000 -236.000 123.000 -236.000 123.000 C-236.000 123.000 -236.000 124.000 -236.000 124.000 C-236.000 124.000 -241.000 125.000 -241.000 125.000 C-241.000 125.000 -241.000 126.000 -241.000 126.000 C-241.000 126.000 -243.000 126.000 -243.000 126.000 C-243.000 126.000 -243.000 127.000 -243.000 127.000 C-243.000 127.000 -246.000 127.000 -246.000 127.000 C-246.000 127.000 -246.000 128.000 -246.000 128.000 C-246.000 128.000 -248.000 128.000 -248.000 128.000 C-248.000 128.000 -248.000 129.000 -248.000 129.000 C-248.000 129.000 -250.000 129.000 -250.000 129.000 C-250.000 129.000 -250.000 130.000 -250.000 130.000 C-250.000 130.000 -253.000 130.000 -253.000 130.000 C-253.000 130.000 -253.000 131.000 -253.000 131.000 C-253.000 131.000 -255.000 131.000 -255.000 131.000 C-255.000 131.000 -255.000 132.000 -255.000 132.000 C-255.000 132.000 -258.000 132.000 -258.000 132.000 C-258.000 132.000 -258.000 133.000 -258.000 133.000 C-258.000 133.000 -260.000 133.000 -260.000 133.000 C-260.000 133.000 -260.000 134.000 -260.000 134.000 C-260.000 134.000 -262.000 134.000 -262.000 134.000 C-262.000 134.000 -262.000 135.000 -262.000 135.000 C-262.000 135.000 -264.000 135.000 -264.000 135.000 C-264.000 135.000 -264.000 136.000 -264.000 136.000 C-264.000 136.000 -267.000 136.000 -267.000 136.000 C-267.000 136.000 -267.000 137.000 -267.000 137.000 C-267.000 137.000 -269.000 137.000 -269.000 137.000 C-269.000 137.000 -269.000 138.000 -269.000 138.000 C-269.000 138.000 -271.000 138.000 -271.000 138.000 C-271.000 138.000 -271.000 139.000 -271.000 139.000 C-271.000 139.000 -273.000 139.000 -273.000 139.000 C-273.000 139.000 -273.000 140.000 -273.000 140.000 C-273.000 140.000 -275.000 140.000 -275.000 140.000 C-275.000 140.000 -275.000 141.000 -275.000 141.000 C-275.000 141.000 -278.000 141.000 -278.000 141.000 C-278.000 141.000 -278.000 142.000 -278.000 142.000 C-278.000 142.000 -280.000 142.000 -280.000 142.000 C-280.000 142.000 -280.000 143.000 -280.000 143.000 C-280.000 143.000 -282.000 143.000 -282.000 143.000 C-282.000 143.000 -282.000 144.000 -282.000 144.000 C-282.000 144.000 -284.000 144.000 -284.000 144.000 C-284.000 144.000 -284.000 145.000 -284.000 145.000 C-284.000 145.000 -286.000 145.000 -286.000 145.000 C-286.000 145.000 -286.000 146.000 -286.000 146.000 C-286.000 146.000 -288.000 146.000 -288.000 146.000 C-288.000 146.000 -287.000 146.500 -288.000 147.000 C-289.000 147.500 -292.833 148.333 -294.000 149.000 C-295.167 149.667 -294.500 150.667 -295.000 151.000 C-295.500 151.333 -297.000 151.000 -297.000 151.000 C-297.000 151.000 -296.000 151.500 -297.000 152.000 C-298.000 152.500 -301.833 153.333 -303.000 154.000 C-304.167 154.667 -303.167 155.500 -304.000 156.000 C-304.833 156.500 -307.167 156.500 -308.000 157.000 C-308.833 157.500 -308.167 158.500 -309.000 159.000 C-309.833 159.500 -312.167 159.500 -313.000 160.000 C-313.833 160.500 -313.500 161.667 -314.000 162.000 C-314.500 162.333 -315.500 161.667 -316.000 162.000 C-316.500 162.333 -316.500 163.667 -317.000 164.000 C-317.500 164.333 -318.500 163.667 -319.000 164.000 C-319.500 164.333 -319.500 165.667 -320.000 166.000 C-320.500 166.333 -321.333 165.500 -322.000 166.000 C-322.667 166.500 -323.333 168.500 -324.000 169.000 C-324.667 169.500 -325.500 168.667 -326.000 169.000 C-326.500 169.333 -326.500 170.667 -327.000 171.000 C-327.500 171.333 -328.000 170.167 -329.000 171.000 C-330.000 171.833 -332.000 175.167 -333.000 176.000 C-334.000 176.833 -335.000 176.000 -335.000 176.000 C-335.000 176.000 -333.333 175.333 -335.000 177.000 C-336.667 178.667 -343.333 184.167 -345.000 186.000 C-346.667 187.833 -345.000 188.000 -345.000 188.000 C-345.000 188.000 -346.000 188.000 -346.000 188.000 C-346.000 188.000 -345.667 188.667 -346.000 189.000 C-346.333 189.333 -347.667 189.500 -348.000 190.000 C-348.333 190.500 -347.667 191.500 -348.000 192.000 C-348.333 192.500 -349.667 192.500 -350.000 193.000 C-350.333 193.500 -350.000 195.000 -350.000 195.000 C-350.000 195.000 -351.000 195.000 -351.000 195.000 C-351.000 195.000 -351.000 197.000 -351.000 197.000 C-351.000 197.000 -352.000 197.000 -352.000 197.000 C-352.000 197.000 -352.000 199.000 -352.000 199.000 C-352.000 199.000 -353.000 199.000 -353.000 199.000 C-353.000 199.000 -353.000 202.000 -353.000 202.000 C-353.000 202.000 -354.000 202.000 -354.000 202.000 C-354.000 202.000 -354.000 207.000 -354.000 207.000 C-354.000 207.000 -355.000 207.000 -355.000 207.000 C-355.000 207.000 -355.000 216.000 -355.000 216.000 C-355.000 216.000 -354.000 216.000 -354.000 216.000 C-354.000 216.000 -354.000 220.000 -354.000 220.000 C-354.000 220.000 -353.000 220.000 -353.000 220.000 C-353.000 220.000 -353.000 222.000 -353.000 222.000 C-353.000 222.000 -352.500 221.000 -352.000 222.000 C-351.500 223.000 -350.667 226.833 -350.000 228.000 C-349.333 229.167 -348.333 228.500 -348.000 229.000 C-347.667 229.500 -348.000 231.000 -348.000 231.000 C-348.000 231.000 -349.000 229.000 -347.000 231.000 C-345.000 233.000 -338.167 241.000 -336.000 243.000 C-333.833 245.000 -334.667 242.500 -334.000 243.000 C-333.333 243.500 -332.667 245.500 -332.000 246.000 C-331.333 246.500 -330.667 245.500 -330.000 246.000 C-329.333 246.500 -328.667 248.500 -328.000 249.000 C-327.333 249.500 -326.500 248.667 -326.000 249.000 C-325.500 249.333 -325.500 250.667 -325.000 251.000 C-324.500 251.333 -323.000 251.000 -323.000 251.000 C-323.000 251.000 -323.500 251.667 -323.000 252.000 C-322.500 252.333 -320.667 252.500 -320.000 253.000 C-319.333 253.500 -319.833 254.500 -319.000 255.000 C-318.167 255.500 -315.833 255.500 -315.000 256.000 C-314.167 256.500 -314.500 257.667 -314.000 258.000 C-313.500 258.333 -312.000 258.000 -312.000 258.000 C-312.000 258.000 -312.000 259.000 -312.000 259.000 C-312.000 259.000 -310.000 259.000 -310.000 259.000 C-310.000 259.000 -310.000 260.000 -310.000 260.000 C-310.000 260.000 -308.000 260.000 -308.000 260.000 C-308.000 260.000 -309.000 260.500 -308.000 261.000 C-307.000 261.500 -303.167 262.333 -302.000 263.000 C-300.833 263.667 -301.500 264.667 -301.000 265.000 C-300.500 265.333 -299.000 265.000 -299.000 265.000 C-299.000 265.000 -299.000 266.000 -299.000 266.000 C-299.000 266.000 -297.000 266.000 -297.000 266.000 C-297.000 266.000 -297.000 267.000 -297.000 267.000 C-297.000 267.000 -294.000 267.000 -294.000 267.000 C-294.000 267.000 -294.000 268.000 -294.000 268.000 C-294.000 268.000 -292.000 268.000 -292.000 268.000 C-292.000 268.000 -292.000 269.000 -292.000 269.000 C-292.000 269.000 -290.000 269.000 -290.000 269.000 C-290.000 269.000 -290.000 270.000 -290.000 270.000 C-290.000 270.000 -288.000 270.000 -288.000 270.000 C-288.000 270.000 -288.000 271.000 -288.000 271.000 C-288.000 271.000 -286.000 271.000 -286.000 271.000 C-286.000 271.000 -286.000 272.000 -286.000 272.000 C-286.000 272.000 -283.000 272.000 -283.000 272.000 C-283.000 272.000 -283.000 273.000 -283.000 273.000 C-283.000 273.000 -281.000 273.000 -281.000 273.000 C-281.000 273.000 -281.000 274.000 -281.000 274.000 C-281.000 274.000 -279.000 274.000 -279.000 274.000 C-279.000 274.000 -279.000 275.000 -279.000 275.000 C-279.000 275.000 -273.000 276.000 -273.000 276.000 C-273.000 276.000 -273.000 277.000 -273.000 277.000 C-273.000 277.000 -268.000 278.000 -268.000 278.000 C-268.000 278.000 -268.000 279.000 -268.000 279.000 C-268.000 279.000 -266.000 279.000 -266.000 279.000 C-266.000 279.000 -266.000 280.000 -266.000 280.000 C-266.000 280.000 -263.000 280.000 -263.000 280.000 C-263.000 280.000 -263.000 281.000 -263.000 281.000 C-263.000 281.000 -260.000 281.000 -260.000 281.000 C-260.000 281.000 -260.000 282.000 -260.000 282.000 C-260.000 282.000 -257.000 282.000 -257.000 282.000 C-257.000 282.000 -257.000 283.000 -257.000 283.000 C-257.000 283.000 -254.000 283.000 -254.000 283.000 C-254.000 283.000 -254.000 284.000 -254.000 284.000 C-254.000 284.000 -251.000 284.000 -251.000 284.000 C-251.000 284.000 -251.000 285.000 -251.000 285.000 C-251.000 285.000 -248.000 285.000 -248.000 285.000 C-248.000 285.000 -248.000 286.000 -248.000 286.000 C-248.000 286.000 -245.000 286.000 -245.000 286.000 C-245.000 286.000 -245.000 287.000 -245.000 287.000 C-245.000 287.000 -242.000 287.000 -242.000 287.000 C-242.000 287.000 -242.000 288.000 -242.000 288.000 C-242.000 288.000 -238.000 288.000 -238.000 288.000 C-238.000 288.000 -238.000 289.000 -238.000 289.000 C-238.000 289.000 -234.000 289.000 -234.000 289.000 C-234.000 289.000 -234.000 290.000 -234.000 290.000 C-234.000 290.000 -231.000 290.000 -231.000 290.000 C-231.000 290.000 -231.000 291.000 -231.000 291.000 C-231.000 291.000 -227.000 291.000 -227.000 291.000 C-227.000 291.000 -227.000 292.000 -227.000 292.000 C-227.000 292.000 -223.000 292.000 -223.000 292.000 C-223.000 292.000 -223.000 293.000 -223.000 293.000 C-223.000 293.000 -219.000 293.000 -219.000 293.000 C-219.000 293.000 -219.000 294.000 -219.000 294.000 C-219.000 294.000 -214.000 294.000 -214.000 294.000 C-214.000 294.000 -214.000 295.000 -214.000 295.000 C-214.000 295.000 -210.000 295.000 -210.000 295.000 C-210.000 295.000 -210.000 296.000 -210.000 296.000 C-210.000 296.000 -205.000 296.000 -205.000 296.000 C-205.000 296.000 -205.000 297.000 -205.000 297.000 C-205.000 297.000 -200.000 297.000 -200.000 297.000 C-200.000 297.000 -200.000 298.000 -200.000 298.000 C-200.000 298.000 -189.000 299.000 -189.000 299.000 C-189.000 299.000 -189.000 300.000 -189.000 300.000 C-189.000 300.000 -176.000 301.000 -176.000 301.000 C-176.000 301.000 -176.000 302.000 -176.000 302.000 C-176.000 302.000 -168.000 302.000 -168.000 302.000 C-168.000 302.000 -168.000 303.000 -168.000 303.000 C-168.000 303.000 -149.000 304.000 -149.000 304.000 C-149.000 304.000 -149.000 306.000 -149.000 306.000 C-149.000 306.000 -154.000 306.000 -154.000 306.000 C-154.000 306.000 -154.000 307.000 -154.000 307.000 C-154.000 307.000 -159.000 307.000 -159.000 307.000 C-159.000 307.000 -159.000 308.000 -159.000 308.000 C-159.000 308.000 -165.000 308.000 -165.000 308.000 C-165.000 308.000 -165.000 309.000 -165.000 309.000 C-165.000 309.000 -172.000 309.000 -172.000 309.000 C-172.000 309.000 -172.000 310.000 -172.000 310.000 C-172.000 310.000 -179.000 310.000 -179.000 310.000 C-179.000 310.000 -179.000 311.000 -179.000 311.000 C-179.000 311.000 -186.000 311.000 -186.000 311.000 C-186.000 311.000 -186.000 312.000 -186.000 312.000 C-186.000 312.000 -195.000 312.000 -195.000 312.000 C-195.000 312.000 -195.000 313.000 -195.000 313.000 C-195.000 313.000 -218.000 314.000 -218.000 314.000 C-218.000 314.000 -218.000 315.000 -218.000 315.000 C-218.000 315.000 -241.000 315.000 -241.000 315.000 C-241.000 315.000 -241.000 316.000 -241.000 316.000 C-241.000 316.000 -243.000 316.000 -243.000 316.000 C-243.000 316.000 -243.000 315.000 -243.000 315.000 C-243.000 315.000 -246.000 315.000 -246.000 315.000 C-246.000 315.000 -246.000 316.000 -246.000 316.000 C-246.000 316.000 -248.000 316.000 -248.000 316.000 C-248.000 316.000 -248.000 315.000 -248.000 315.000 C-248.000 315.000 -249.000 315.000 -249.000 315.000 C-249.000 315.000 -249.000 316.000 -249.000 316.000 C-249.000 316.000 -250.000 316.000 -250.000 316.000 C-250.000 316.000 -250.000 315.000 -250.000 315.000 C-250.000 315.000 -255.000 316.000 -255.000 316.000 C-255.000 316.000 -255.000 315.000 -255.000 315.000 C-255.000 315.000 -296.000 314.000 -296.000 314.000 C-296.000 314.000 -296.000 313.000 -296.000 313.000 C-296.000 313.000 -307.000 313.000 -307.000 313.000 C-307.000 313.000 -307.000 312.000 -307.000 312.000 C-307.000 312.000 -316.000 312.000 -316.000 312.000 C-316.000 312.000 -316.000 311.000 -316.000 311.000 C-316.000 311.000 -324.000 311.000 -324.000 311.000 C-324.000 311.000 -324.000 310.000 -324.000 310.000 C-324.000 310.000 -331.000 310.000 -331.000 310.000 C-331.000 310.000 -331.000 309.000 -331.000 309.000 C-331.000 309.000 -337.000 309.000 -337.000 309.000 C-337.000 309.000 -337.000 308.000 -337.000 308.000 C-337.000 308.000 -344.000 308.000 -344.000 308.000 C-344.000 308.000 -344.000 307.000 -344.000 307.000 C-344.000 307.000 -355.000 306.000 -355.000 306.000 C-355.000 306.000 -355.000 305.000 -355.000 305.000 C-355.000 305.000 -360.000 305.000 -360.000 305.000 C-360.000 305.000 -360.000 304.000 -360.000 304.000 C-360.000 304.000 -364.000 304.000 -364.000 304.000 C-364.000 304.000 -364.000 303.000 -364.000 303.000 C-364.000 303.000 -369.000 303.000 -369.000 303.000 C-369.000 303.000 -369.000 302.000 -369.000 302.000 C-369.000 302.000 -373.000 302.000 -373.000 302.000 C-373.000 302.000 -373.000 301.000 -373.000 301.000 C-373.000 301.000 -385.000 299.000 -385.000 299.000 C-385.000 299.000 -385.000 298.000 -385.000 298.000 C-385.000 298.000 -388.000 298.000 -388.000 298.000 C-388.000 298.000 -388.000 297.000 -388.000 297.000 C-388.000 297.000 -392.000 297.000 -392.000 297.000 C-392.000 297.000 -392.000 296.000 -392.000 296.000 C-392.000 296.000 -395.000 296.000 -395.000 296.000 C-395.000 296.000 -395.000 295.000 -395.000 295.000 C-395.000 295.000 -399.000 295.000 -399.000 295.000 C-399.000 295.000 -399.000 294.000 -399.000 294.000 C-399.000 294.000 -402.000 294.000 -402.000 294.000 C-402.000 294.000 -402.000 293.000 -402.000 293.000 C-402.000 293.000 -411.000 291.000 -411.000 291.000 C-411.000 291.000 -411.000 290.000 -411.000 290.000 C-411.000 290.000 -416.000 289.000 -416.000 289.000 C-416.000 289.000 -416.000 288.000 -416.000 288.000 C-416.000 288.000 -419.000 288.000 -419.000 288.000 C-419.000 288.000 -419.000 287.000 -419.000 287.000 C-419.000 287.000 -421.000 287.000 -421.000 287.000 C-421.000 287.000 -421.000 286.000 -421.000 286.000 C-421.000 286.000 -423.000 286.000 -423.000 286.000 C-423.000 286.000 -423.000 285.000 -423.000 285.000 C-423.000 285.000 -426.000 285.000 -426.000 285.000 C-426.000 285.000 -426.000 284.000 -426.000 284.000 C-426.000 284.000 -428.000 284.000 -428.000 284.000 C-428.000 284.000 -428.000 283.000 -428.000 283.000 C-428.000 283.000 -430.000 283.000 -430.000 283.000 C-430.000 283.000 -430.000 282.000 -430.000 282.000 C-430.000 282.000 -432.000 282.000 -432.000 282.000 C-432.000 282.000 -432.000 281.000 -432.000 281.000 C-432.000 281.000 -434.000 281.000 -434.000 281.000 C-434.000 281.000 -433.000 280.500 -434.000 280.000 C-435.000 279.500 -438.833 278.667 -440.000 278.000 C-441.167 277.333 -440.500 276.333 -441.000 276.000 C-441.500 275.667 -442.500 276.333 -443.000 276.000 C-443.500 275.667 -443.500 274.333 -444.000 274.000 C-444.500 273.667 -445.500 274.333 -446.000 274.000 C-446.500 273.667 -446.500 272.333 -447.000 272.000 C-447.500 271.667 -448.333 272.500 -449.000 272.000 C-449.667 271.500 -450.333 269.500 -451.000 269.000 C-451.667 268.500 -453.000 269.000 -453.000 269.000 C-453.000 269.000 -451.833 269.167 -453.000 268.000 C-454.167 266.833 -458.833 263.333 -460.000 262.000 C-461.167 260.667 -459.667 260.500 -460.000 260.000 C-460.333 259.500 -461.667 259.500 -462.000 259.000 C-462.333 258.500 -461.667 257.500 -462.000 257.000 C-462.333 256.500 -463.667 256.667 -464.000 256.000 C-464.333 255.333 -464.000 253.000 -464.000 253.000 C-464.000 253.000 -465.000 253.000 -465.000 253.000 C-465.000 253.000 -466.000 248.000 -466.000 248.000 C-466.000 248.000 -467.000 248.000 -467.000 248.000 C-467.000 248.000 -467.000 243.000 -467.000 243.000 C-467.000 243.000 -468.000 243.000 -468.000 243.000 C-468.000 243.000 -468.000 237.000 -468.000 237.000 C-468.000 237.000 -467.000 237.000 -467.000 237.000 C-467.000 237.000 -466.000 226.000 -466.000 226.000 C-466.000 226.000 -465.000 226.000 -465.000 226.000 C-465.000 226.000 -465.000 223.000 -465.000 223.000 C-465.000 223.000 -464.000 223.000 -464.000 223.000 C-464.000 223.000 -464.000 221.000 -464.000 221.000 C-464.000 221.000 -463.000 221.000 -463.000 221.000 C-463.000 221.000 -463.000 218.000 -463.000 218.000 C-463.000 218.000 -462.500 219.000 -462.000 218.000 C-461.500 217.000 -460.500 213.000 -460.000 212.000 C-459.500 211.000 -459.333 212.500 -459.000 212.000 C-458.667 211.500 -458.500 209.667 -458.000 209.000 C-457.500 208.333 -456.333 208.500 -456.000 208.000 C-455.667 207.500 -456.000 206.000 -456.000 206.000 C-456.000 206.000 -455.000 206.000 -455.000 206.000 C-455.000 206.000 -455.333 204.500 -455.000 204.000 C-454.667 203.500 -453.333 203.500 -453.000 203.000 C-452.667 202.500 -453.000 201.000 -453.000 201.000 C-453.000 201.000 -452.000 201.000 -452.000 201.000 C-452.000 201.000 -452.500 200.500 -452.000 200.000 C-451.500 199.500 -449.500 198.667 -449.000 198.000 C-448.500 197.333 -449.667 196.833 -449.000 196.000 C-448.333 195.167 -445.667 193.833 -445.000 193.000 C-444.333 192.167 -446.500 192.667 -445.000 191.000 C-443.500 189.333 -437.500 184.667 -436.000 183.000 C-434.500 181.333 -436.000 181.000 -436.000 181.000 C-436.000 181.000 -436.167 182.167 -435.000 181.000 C-433.833 179.833 -430.333 175.167 -429.000 174.000 C-427.667 172.833 -428.833 175.667 -427.000 174.000 C-425.167 172.333 -419.833 165.667 -418.000 164.000 C-416.167 162.333 -417.000 164.833 -416.000 164.000 C-415.000 163.167 -413.000 159.833 -412.000 159.000 C-411.000 158.167 -410.000 159.000 -410.000 159.000 C-410.000 159.000 -410.000 158.000 -410.000 158.000 C-410.000 158.000 -409.667 158.667 -409.000 158.000 C-408.333 157.333 -406.833 154.667 -406.000 154.000 C-405.167 153.333 -404.833 154.667 -404.000 154.000 C-403.167 153.333 -401.833 150.667 -401.000 150.000 C-400.167 149.333 -399.667 150.500 -399.000 150.000 C-398.333 149.500 -397.667 147.500 -397.000 147.000 C-396.333 146.500 -395.667 147.500 -395.000 147.000 C-394.333 146.500 -393.667 144.500 -393.000 144.000 C-392.333 143.500 -391.000 144.000 -391.000 144.000 C-391.000 144.000 -391.000 143.000 -391.000 143.000 C-391.000 143.000 -390.333 143.333 -390.000 143.000 C-389.667 142.667 -389.500 141.333 -389.000 141.000 C-388.500 140.667 -387.667 141.500 -387.000 141.000 C-386.333 140.500 -385.667 138.500 -385.000 138.000 C-384.333 137.500 -383.500 138.333 -383.000 138.000 C-382.500 137.667 -382.500 136.333 -382.000 136.000 C-381.500 135.667 -380.667 136.500 -380.000 136.000 C-379.333 135.500 -378.667 133.500 -378.000 133.000 C-377.333 132.500 -376.500 133.333 -376.000 133.000 C-375.500 132.667 -375.500 131.333 -375.000 131.000 C-374.500 130.667 -373.500 131.333 -373.000 131.000 C-372.500 130.667 -372.500 129.333 -372.000 129.000 C-371.500 128.667 -370.500 129.333 -370.000 129.000 C-369.500 128.667 -369.500 127.333 -369.000 127.000 C-368.500 126.667 -367.500 127.333 -367.000 127.000 C-366.500 126.667 -366.500 125.333 -366.000 125.000 C-365.500 124.667 -364.000 125.000 -364.000 125.000 C-364.000 125.000 -364.500 124.333 -364.000 124.000 C-363.500 123.667 -361.667 123.500 -361.000 123.000 C-360.333 122.500 -360.833 121.500 -360.000 121.000 C-359.167 120.500 -356.000 120.000 -356.000 120.000 C-356.000 120.000 -356.500 119.333 -356.000 119.000 C-355.500 118.667 -353.667 118.500 -353.000 118.000 C-352.333 117.500 -352.833 116.500 -352.000 116.000 C-351.167 115.500 -348.833 115.500 -348.000 115.000 C-347.167 114.500 -347.833 113.500 -347.000 113.000 C-346.167 112.500 -343.833 112.500 -343.000 112.000 C-342.167 111.500 -342.833 110.500 -342.000 110.000 C-341.167 109.500 -338.833 109.500 -338.000 109.000 C-337.167 108.500 -338.167 107.667 -337.000 107.000 C-335.833 106.333 -332.167 105.667 -331.000 105.000 C-329.833 104.333 -331.167 103.667 -330.000 103.000 C-328.833 102.333 -325.167 101.667 -324.000 101.000 C-322.833 100.333 -323.500 99.333 -323.000 99.000 C-322.500 98.667 -321.000 99.000 -321.000 99.000 C-321.000 99.000 -321.000 98.000 -321.000 98.000 C-321.000 98.000 -319.000 98.000 -319.000 98.000 C-319.000 98.000 -320.000 97.500 -319.000 97.000 C-318.000 96.500 -314.167 95.667 -313.000 95.000 C-311.833 94.333 -312.500 93.333 -312.000 93.000 C-311.500 92.667 -310.000 93.000 -310.000 93.000 C-310.000 93.000 -310.000 92.000 -310.000 92.000 C-310.000 92.000 -308.000 92.000 -308.000 92.000 C-308.000 92.000 -308.000 91.000 -308.000 91.000 C-308.000 91.000 -306.000 91.000 -306.000 91.000 C-306.000 91.000 -306.000 90.000 -306.000 90.000 C-306.000 90.000 -304.000 90.000 -304.000 90.000 C-304.000 90.000 -304.000 89.000 -304.000 89.000 C-304.000 89.000 -302.000 89.000 -302.000 89.000 C-302.000 89.000 -302.000 88.000 -302.000 88.000 C-302.000 88.000 -300.000 88.000 -300.000 88.000 C-300.000 88.000 -300.000 87.000 -300.000 87.000 C-300.000 87.000 -298.000 87.000 -298.000 87.000 C-298.000 87.000 -298.000 86.000 -298.000 86.000 C-298.000 86.000 -296.000 86.000 -296.000 86.000 C-296.000 86.000 -296.000 85.000 -296.000 85.000 C-296.000 85.000 -294.000 85.000 -294.000 85.000 C-294.000 85.000 -294.000 84.000 -294.000 84.000 C-294.000 84.000 -292.000 84.000 -292.000 84.000 C-292.000 84.000 -292.000 83.000 -292.000 83.000 C-292.000 83.000 -290.000 83.000 -290.000 83.000 C-290.000 83.000 -290.000 82.000 -290.000 82.000 C-290.000 82.000 -288.000 82.000 -288.000 82.000 C-288.000 82.000 -288.000 81.000 -288.000 81.000 C-288.000 81.000 -286.000 81.000 -286.000 81.000 C-286.000 81.000 -286.000 80.000 -286.000 80.000 C-286.000 80.000 -284.000 80.000 -284.000 80.000 C-284.000 80.000 -284.000 79.000 -284.000 79.000 C-284.000 79.000 -282.000 79.000 -282.000 79.000 C-282.000 79.000 -282.000 78.000 -282.000 78.000 C-282.000 78.000 -280.000 78.000 -280.000 78.000 C-280.000 78.000 -280.000 77.000 -280.000 77.000 C-280.000 77.000 -278.000 77.000 -278.000 77.000 C-278.000 77.000 -278.000 76.000 -278.000 76.000 C-278.000 76.000 -275.000 76.000 -275.000 76.000 C-275.000 76.000 -275.000 75.000 -275.000 75.000 C-275.000 75.000 -273.000 75.000 -273.000 75.000 C-273.000 75.000 -273.000 74.000 -273.000 74.000 C-273.000 74.000 -271.000 74.000 -271.000 74.000 C-271.000 74.000 -271.000 73.000 -271.000 73.000 C-271.000 73.000 -269.000 73.000 -269.000 73.000 C-269.000 73.000 -269.000 72.000 -269.000 72.000 C-269.000 72.000 -267.000 72.000 -267.000 72.000 C-267.000 72.000 -267.000 71.000 -267.000 71.000 C-267.000 71.000 -265.000 71.000 -265.000 71.000 C-265.000 71.000 -265.000 70.000 -265.000 70.000 C-265.000 70.000 -262.000 70.000 -262.000 70.000 C-262.000 70.000 -262.000 69.000 -262.000 69.000 C-262.000 69.000 -260.000 69.000 -260.000 69.000 C-260.000 69.000 -260.000 68.000 -260.000 68.000 C-260.000 68.000 -258.000 68.000 -258.000 68.000 C-258.000 68.000 -258.000 67.000 -258.000 67.000 C-258.000 67.000 -256.000 67.000 -256.000 67.000 C-256.000 67.000 -256.000 66.000 -256.000 66.000 C-256.000 66.000 -253.000 66.000 -253.000 66.000 C-253.000 66.000 -253.000 65.000 -253.000 65.000 C-253.000 65.000 -251.000 65.000 -251.000 65.000 C-251.000 65.000 -251.000 64.000 -251.000 64.000 C-251.000 64.000 -249.000 64.000 -249.000 64.000 C-249.000 64.000 -249.000 63.000 -249.000 63.000 C-249.000 63.000 -246.000 63.000 -246.000 63.000 C-246.000 63.000 -246.000 62.000 -246.000 62.000 C-246.000 62.000 -244.000 62.000 -244.000 62.000 C-244.000 62.000 -244.000 61.000 -244.000 61.000 C-244.000 61.000 -242.000 61.000 -242.000 61.000 C-242.000 61.000 -242.000 60.000 -242.000 60.000 C-242.000 60.000 -239.000 60.000 -239.000 60.000 C-239.000 60.000 -239.000 59.000 -239.000 59.000 C-239.000 59.000 -237.000 59.000 -237.000 59.000 C-237.000 59.000 -237.000 58.000 -237.000 58.000 C-237.000 58.000 -234.000 58.000 -234.000 58.000 C-234.000 58.000 -234.000 57.000 -234.000 57.000 C-234.000 57.000 -232.000 57.000 -232.000 57.000 C-232.000 57.000 -232.000 56.000 -232.000 56.000 C-232.000 56.000 -230.000 56.000 -230.000 56.000 C-230.000 56.000 -230.000 55.000 -230.000 55.000 C-230.000 55.000 -224.000 54.000 -224.000 54.000 C-224.000 54.000 -224.000 53.000 -224.000 53.000 C-224.000 53.000 -219.000 52.000 -219.000 52.000 C-219.000 52.000 -219.000 51.000 -219.000 51.000 C-219.000 51.000 -217.000 51.000 -217.000 51.000 C-217.000 51.000 -217.000 50.000 -217.000 50.000 C-217.000 50.000 -211.000 49.000 -211.000 49.000 C-211.000 49.000 -211.000 48.000 -211.000 48.000 C-211.000 48.000 -209.000 48.000 -209.000 48.000 C-209.000 48.000 -209.000 47.000 -209.000 47.000 C-209.000 47.000 -206.000 47.000 -206.000 47.000 C-206.000 47.000 -206.000 46.000 -206.000 46.000 C-206.000 46.000 -197.000 44.000 -197.000 44.000 C-197.000 44.000 -197.000 43.000 -197.000 43.000 C-197.000 43.000 -195.000 43.000 -195.000 43.000 C-195.000 43.000 -195.000 42.000 -195.000 42.000 C-195.000 42.000 -192.000 42.000 -192.000 42.000 C-192.000 42.000 -192.000 41.000 -192.000 41.000 C-192.000 41.000 -189.000 41.000 -189.000 41.000 C-189.000 41.000 -189.000 40.000 -189.000 40.000 C-189.000 40.000 -186.000 40.000 -186.000 40.000 C-186.000 40.000 -186.000 39.000 -186.000 39.000 C-186.000 39.000 -183.000 39.000 -183.000 39.000 C-183.000 39.000 -183.000 38.000 -183.000 38.000 C-183.000 38.000 -180.000 38.000 -180.000 38.000 C-180.000 38.000 -180.000 37.000 -180.000 37.000 C-180.000 37.000 -177.000 37.000 -177.000 37.000 C-177.000 37.000 -177.000 36.000 -177.000 36.000 C-177.000 36.000 -174.000 36.000 -174.000 36.000 C-174.000 36.000 -174.000 35.000 -174.000 35.000 C-174.000 35.000 -170.000 35.000 -170.000 35.000 C-170.000 35.000 -170.000 34.000 -170.000 34.000 C-170.000 34.000 -167.000 34.000 -167.000 34.000 C-167.000 34.000 -167.000 33.000 -167.000 33.000 C-167.000 33.000 -164.000 33.000 -164.000 33.000 C-164.000 33.000 -164.000 32.000 -164.000 32.000 C-164.000 32.000 -161.000 32.000 -161.000 32.000 C-161.000 32.000 -161.000 31.000 -161.000 31.000 C-161.000 31.000 -158.000 31.000 -158.000 31.000 C-158.000 31.000 -158.000 30.000 -158.000 30.000 C-158.000 30.000 -154.000 30.000 -154.000 30.000 C-154.000 30.000 -154.000 29.000 -154.000 29.000 C-154.000 29.000 -151.000 29.000 -151.000 29.000 C-151.000 29.000 -151.000 28.000 -151.000 28.000 C-151.000 28.000 -147.000 28.000 -147.000 28.000 C-147.000 28.000 -147.000 27.000 -147.000 27.000 C-147.000 27.000 -144.000 27.000 -144.000 27.000 C-144.000 27.000 -144.000 26.000 -144.000 26.000 C-144.000 26.000 -140.000 26.000 -140.000 26.000 C-140.000 26.000 -140.000 25.000 -140.000 25.000 C-140.000 25.000 -137.000 25.000 -137.000 25.000 C-137.000 25.000 -137.000 24.000 -137.000 24.000 C-137.000 24.000 -133.000 24.000 -133.000 24.000 C-133.000 24.000 -133.000 23.000 -133.000 23.000 C-133.000 23.000 -129.000 23.000 -129.000 23.000 C-129.000 23.000 -129.000 22.000 -129.000 22.000 C-129.000 22.000 -125.000 22.000 -125.000 22.000 C-125.000 22.000 -125.000 21.000 -125.000 21.000 C-125.000 21.000 -121.000 21.000 -121.000 21.000 C-121.000 21.000 -121.000 20.000 -121.000 20.000 C-121.000 20.000 -117.000 20.000 -117.000 20.000 C-117.000 20.000 -117.000 19.000 -117.000 19.000 C-117.000 19.000 -113.000 19.000 -113.000 19.000 C-113.000 19.000 -113.000 18.000 -113.000 18.000 C-113.000 18.000 -109.000 18.000 -109.000 18.000 C-109.000 18.000 -109.000 17.000 -109.000 17.000 C-109.000 17.000 -105.000 17.000 -105.000 17.000 C-105.000 17.000 -105.000 16.000 -105.000 16.000 C-105.000 16.000 -100.000 16.000 -100.000 16.000 C-100.000 16.000 -100.000 15.000 -100.000 15.000 C-100.000 15.000 -96.000 15.000 -96.000 15.000 C-96.000 15.000 -96.000 14.000 -96.000 14.000 C-96.000 14.000 -91.000 14.000 -91.000 14.000 C-91.000 14.000 -91.000 13.000 -91.000 13.000 C-91.000 13.000 -86.000 13.000 -86.000 13.000 C-86.000 13.000 -86.000 12.000 -86.000 12.000 C-86.000 12.000 -81.000 12.000 -81.000 12.000 C-81.000 12.000 -81.000 11.000 -81.000 11.000 C-81.000 11.000 -76.000 11.000 -76.000 11.000 C-76.000 11.000 -76.000 10.000 -76.000 10.000 C-76.000 10.000 -71.000 10.000 -71.000 10.000 C-71.000 10.000 -71.000 9.000 -71.000 9.000 C-71.000 9.000 -65.000 9.000 -65.000 9.000 C-65.000 9.000 -65.000 8.000 -65.000 8.000 C-65.000 8.000 -59.000 8.000 -59.000 8.000 C-59.000 8.000 -59.000 7.000 -59.000 7.000 C-59.000 7.000 -53.000 7.000 -53.000 7.000 C-53.000 7.000 -53.000 6.000 -53.000 6.000 C-53.000 6.000 -47.000 6.000 -47.000 6.000 C-47.000 6.000 -47.000 5.000 -47.000 5.000 C-47.000 5.000 -32.000 4.000 -32.000 4.000 C-32.000 4.000 -32.000 3.000 -32.000 3.000 C-32.000 3.000 -13.000 2.000 -13.000 2.000 C-13.000 2.000 -13.000 1.000 -13.000 1.000 C-13.000 1.000 0.000 1.000 0.000 1.000 C0.000 1.000 0.000 0.000 0.000 0.000 Z",
+ "transform": "translate(522,43)"
+ },
+ "bowl": {
+ "d": "M0.000 0.000 C0.000 0.000 5.000 0.000 5.000 0.000 C5.000 0.000 4.500 0.500 5.000 1.000 C5.500 1.500 7.500 1.833 8.000 3.000 C8.500 4.167 8.000 8.000 8.000 8.000 C8.000 8.000 9.000 8.000 9.000 8.000 C9.000 8.000 8.000 19.000 8.000 19.000 C8.000 19.000 7.000 19.000 7.000 19.000 C7.000 19.000 7.000 25.000 7.000 25.000 C7.000 25.000 6.000 25.000 6.000 25.000 C6.000 25.000 5.000 33.000 5.000 33.000 C5.000 33.000 4.000 33.000 4.000 33.000 C4.000 33.000 4.000 36.000 4.000 36.000 C4.000 36.000 3.000 36.000 3.000 36.000 C3.000 36.000 3.000 39.000 3.000 39.000 C3.000 39.000 2.000 39.000 2.000 39.000 C2.000 39.000 2.000 42.000 2.000 42.000 C2.000 42.000 1.000 42.000 1.000 42.000 C1.000 42.000 1.000 45.000 1.000 45.000 C1.000 45.000 0.000 45.000 0.000 45.000 C0.000 45.000 -2.000 54.000 -2.000 54.000 C-2.000 54.000 -3.000 54.000 -3.000 54.000 C-3.000 54.000 -4.000 59.000 -4.000 59.000 C-4.000 59.000 -5.000 59.000 -5.000 59.000 C-5.000 59.000 -5.000 61.000 -5.000 61.000 C-5.000 61.000 -6.000 61.000 -6.000 61.000 C-6.000 61.000 -6.000 64.000 -6.000 64.000 C-6.000 64.000 -7.000 64.000 -7.000 64.000 C-7.000 64.000 -7.000 66.000 -7.000 66.000 C-7.000 66.000 -8.000 66.000 -8.000 66.000 C-8.000 66.000 -8.000 68.000 -8.000 68.000 C-8.000 68.000 -9.000 68.000 -9.000 68.000 C-9.000 68.000 -9.000 71.000 -9.000 71.000 C-9.000 71.000 -10.000 71.000 -10.000 71.000 C-10.000 71.000 -10.000 73.000 -10.000 73.000 C-10.000 73.000 -11.000 73.000 -11.000 73.000 C-11.000 73.000 -11.000 75.000 -11.000 75.000 C-11.000 75.000 -12.000 75.000 -12.000 75.000 C-12.000 75.000 -12.000 77.000 -12.000 77.000 C-12.000 77.000 -13.000 77.000 -13.000 77.000 C-13.000 77.000 -13.000 80.000 -13.000 80.000 C-13.000 80.000 -14.000 80.000 -14.000 80.000 C-14.000 80.000 -14.000 82.000 -14.000 82.000 C-14.000 82.000 -14.500 81.000 -15.000 82.000 C-15.500 83.000 -16.333 86.833 -17.000 88.000 C-17.667 89.167 -18.667 88.500 -19.000 89.000 C-19.333 89.500 -19.000 91.000 -19.000 91.000 C-19.000 91.000 -20.000 91.000 -20.000 91.000 C-20.000 91.000 -20.000 93.000 -20.000 93.000 C-20.000 93.000 -21.000 93.000 -21.000 93.000 C-21.000 93.000 -21.000 95.000 -21.000 95.000 C-21.000 95.000 -22.000 95.000 -22.000 95.000 C-22.000 95.000 -22.000 97.000 -22.000 97.000 C-22.000 97.000 -22.500 96.000 -23.000 97.000 C-23.500 98.000 -24.333 101.833 -25.000 103.000 C-25.667 104.167 -26.333 102.833 -27.000 104.000 C-27.667 105.167 -28.333 108.833 -29.000 110.000 C-29.667 111.167 -30.667 110.500 -31.000 111.000 C-31.333 111.500 -31.000 113.000 -31.000 113.000 C-31.000 113.000 -32.000 113.000 -32.000 113.000 C-32.000 113.000 -31.667 114.500 -32.000 115.000 C-32.333 115.500 -33.500 115.167 -34.000 116.000 C-34.500 116.833 -34.500 119.167 -35.000 120.000 C-35.500 120.833 -36.667 120.500 -37.000 121.000 C-37.333 121.500 -36.667 122.500 -37.000 123.000 C-37.333 123.500 -38.667 123.500 -39.000 124.000 C-39.333 124.500 -38.667 125.500 -39.000 126.000 C-39.333 126.500 -40.667 126.500 -41.000 127.000 C-41.333 127.500 -40.667 128.500 -41.000 129.000 C-41.333 129.500 -42.667 129.500 -43.000 130.000 C-43.333 130.500 -42.667 131.500 -43.000 132.000 C-43.333 132.500 -44.667 132.500 -45.000 133.000 C-45.333 133.500 -44.667 134.500 -45.000 135.000 C-45.333 135.500 -46.667 135.500 -47.000 136.000 C-47.333 136.500 -46.667 137.500 -47.000 138.000 C-47.333 138.500 -48.667 138.500 -49.000 139.000 C-49.333 139.500 -48.667 140.500 -49.000 141.000 C-49.333 141.500 -50.667 141.500 -51.000 142.000 C-51.333 142.500 -50.500 143.333 -51.000 144.000 C-51.500 144.667 -53.500 145.333 -54.000 146.000 C-54.500 146.667 -53.500 147.333 -54.000 148.000 C-54.500 148.667 -56.500 149.333 -57.000 150.000 C-57.500 150.667 -56.500 151.333 -57.000 152.000 C-57.500 152.667 -59.500 153.333 -60.000 154.000 C-60.500 154.667 -59.500 155.333 -60.000 156.000 C-60.500 156.667 -62.500 157.333 -63.000 158.000 C-63.500 158.667 -62.333 159.167 -63.000 160.000 C-63.667 160.833 -66.333 162.167 -67.000 163.000 C-67.667 163.833 -66.333 164.167 -67.000 165.000 C-67.667 165.833 -70.333 167.167 -71.000 168.000 C-71.667 168.833 -69.833 168.667 -71.000 170.000 C-72.167 171.333 -76.833 174.667 -78.000 176.000 C-79.167 177.333 -76.000 175.833 -78.000 178.000 C-80.000 180.167 -88.000 186.833 -90.000 189.000 C-92.000 191.167 -90.000 191.000 -90.000 191.000 C-90.000 191.000 -89.333 189.333 -91.000 191.000 C-92.667 192.667 -98.167 199.333 -100.000 201.000 C-101.833 202.667 -99.833 199.000 -102.000 201.000 C-104.167 203.000 -110.833 211.000 -113.000 213.000 C-115.167 215.000 -115.000 213.000 -115.000 213.000 C-115.000 213.000 -115.000 214.000 -115.000 214.000 C-115.000 214.000 -115.167 213.167 -116.000 214.000 C-116.833 214.833 -119.000 218.167 -120.000 219.000 C-121.000 219.833 -120.833 218.000 -122.000 219.000 C-123.167 220.000 -125.833 224.000 -127.000 225.000 C-128.167 226.000 -128.167 224.333 -129.000 225.000 C-129.833 225.667 -131.167 228.333 -132.000 229.000 C-132.833 229.667 -133.333 228.500 -134.000 229.000 C-134.667 229.500 -135.333 231.500 -136.000 232.000 C-136.667 232.500 -137.333 231.500 -138.000 232.000 C-138.667 232.500 -139.333 234.500 -140.000 235.000 C-140.667 235.500 -141.167 234.333 -142.000 235.000 C-142.833 235.667 -144.167 238.333 -145.000 239.000 C-145.833 239.667 -146.500 238.667 -147.000 239.000 C-147.500 239.333 -147.500 240.667 -148.000 241.000 C-148.500 241.333 -149.500 240.667 -150.000 241.000 C-150.500 241.333 -150.500 242.667 -151.000 243.000 C-151.500 243.333 -152.333 242.500 -153.000 243.000 C-153.667 243.500 -154.333 245.500 -155.000 246.000 C-155.667 246.500 -156.500 245.667 -157.000 246.000 C-157.500 246.333 -157.500 247.667 -158.000 248.000 C-158.500 248.333 -160.000 248.000 -160.000 248.000 C-160.000 248.000 -159.500 248.667 -160.000 249.000 C-160.500 249.333 -162.333 249.500 -163.000 250.000 C-163.667 250.500 -163.167 251.500 -164.000 252.000 C-164.833 252.500 -167.167 252.500 -168.000 253.000 C-168.833 253.500 -168.500 254.667 -169.000 255.000 C-169.500 255.333 -171.000 255.000 -171.000 255.000 C-171.000 255.000 -170.500 255.667 -171.000 256.000 C-171.500 256.333 -173.333 256.500 -174.000 257.000 C-174.667 257.500 -174.167 258.500 -175.000 259.000 C-175.833 259.500 -178.167 259.500 -179.000 260.000 C-179.833 260.500 -178.833 261.333 -180.000 262.000 C-181.167 262.667 -184.833 263.333 -186.000 264.000 C-187.167 264.667 -186.500 265.667 -187.000 266.000 C-187.500 266.333 -189.000 266.000 -189.000 266.000 C-189.000 266.000 -188.000 266.500 -189.000 267.000 C-190.000 267.500 -193.833 268.333 -195.000 269.000 C-196.167 269.667 -195.500 270.667 -196.000 271.000 C-196.500 271.333 -198.000 271.000 -198.000 271.000 C-198.000 271.000 -198.000 272.000 -198.000 272.000 C-198.000 272.000 -200.000 272.000 -200.000 272.000 C-200.000 272.000 -200.000 273.000 -200.000 273.000 C-200.000 273.000 -202.000 273.000 -202.000 273.000 C-202.000 273.000 -202.000 274.000 -202.000 274.000 C-202.000 274.000 -204.000 274.000 -204.000 274.000 C-204.000 274.000 -204.000 275.000 -204.000 275.000 C-204.000 275.000 -206.000 275.000 -206.000 275.000 C-206.000 275.000 -206.000 276.000 -206.000 276.000 C-206.000 276.000 -208.000 276.000 -208.000 276.000 C-208.000 276.000 -208.000 277.000 -208.000 277.000 C-208.000 277.000 -210.000 277.000 -210.000 277.000 C-210.000 277.000 -210.000 278.000 -210.000 278.000 C-210.000 278.000 -212.000 278.000 -212.000 278.000 C-212.000 278.000 -212.000 279.000 -212.000 279.000 C-212.000 279.000 -214.000 279.000 -214.000 279.000 C-214.000 279.000 -214.000 280.000 -214.000 280.000 C-214.000 280.000 -217.000 280.000 -217.000 280.000 C-217.000 280.000 -217.000 281.000 -217.000 281.000 C-217.000 281.000 -219.000 281.000 -219.000 281.000 C-219.000 281.000 -219.000 282.000 -219.000 282.000 C-219.000 282.000 -221.000 282.000 -221.000 282.000 C-221.000 282.000 -221.000 283.000 -221.000 283.000 C-221.000 283.000 -223.000 283.000 -223.000 283.000 C-223.000 283.000 -223.000 284.000 -223.000 284.000 C-223.000 284.000 -225.000 284.000 -225.000 284.000 C-225.000 284.000 -225.000 285.000 -225.000 285.000 C-225.000 285.000 -227.000 285.000 -227.000 285.000 C-227.000 285.000 -227.000 286.000 -227.000 286.000 C-227.000 286.000 -230.000 286.000 -230.000 286.000 C-230.000 286.000 -230.000 287.000 -230.000 287.000 C-230.000 287.000 -232.000 287.000 -232.000 287.000 C-232.000 287.000 -232.000 288.000 -232.000 288.000 C-232.000 288.000 -235.000 288.000 -235.000 288.000 C-235.000 288.000 -235.000 289.000 -235.000 289.000 C-235.000 289.000 -237.000 289.000 -237.000 289.000 C-237.000 289.000 -237.000 290.000 -237.000 290.000 C-237.000 290.000 -239.000 290.000 -239.000 290.000 C-239.000 290.000 -239.000 291.000 -239.000 291.000 C-239.000 291.000 -242.000 291.000 -242.000 291.000 C-242.000 291.000 -242.000 292.000 -242.000 292.000 C-242.000 292.000 -244.000 292.000 -244.000 292.000 C-244.000 292.000 -244.000 293.000 -244.000 293.000 C-244.000 293.000 -250.000 294.000 -250.000 294.000 C-250.000 294.000 -250.000 295.000 -250.000 295.000 C-250.000 295.000 -252.000 295.000 -252.000 295.000 C-252.000 295.000 -252.000 296.000 -252.000 296.000 C-252.000 296.000 -255.000 296.000 -255.000 296.000 C-255.000 296.000 -255.000 297.000 -255.000 297.000 C-255.000 297.000 -258.000 297.000 -258.000 297.000 C-258.000 297.000 -258.000 298.000 -258.000 298.000 C-258.000 298.000 -261.000 298.000 -261.000 298.000 C-261.000 298.000 -261.000 299.000 -261.000 299.000 C-261.000 299.000 -264.000 299.000 -264.000 299.000 C-264.000 299.000 -264.000 300.000 -264.000 300.000 C-264.000 300.000 -267.000 300.000 -267.000 300.000 C-267.000 300.000 -267.000 301.000 -267.000 301.000 C-267.000 301.000 -270.000 301.000 -270.000 301.000 C-270.000 301.000 -270.000 302.000 -270.000 302.000 C-270.000 302.000 -273.000 302.000 -273.000 302.000 C-273.000 302.000 -273.000 303.000 -273.000 303.000 C-273.000 303.000 -276.000 303.000 -276.000 303.000 C-276.000 303.000 -276.000 304.000 -276.000 304.000 C-276.000 304.000 -280.000 304.000 -280.000 304.000 C-280.000 304.000 -280.000 305.000 -280.000 305.000 C-280.000 305.000 -283.000 305.000 -283.000 305.000 C-283.000 305.000 -283.000 306.000 -283.000 306.000 C-283.000 306.000 -287.000 306.000 -287.000 306.000 C-287.000 306.000 -287.000 307.000 -287.000 307.000 C-287.000 307.000 -291.000 307.000 -291.000 307.000 C-291.000 307.000 -291.000 308.000 -291.000 308.000 C-291.000 308.000 -294.000 308.000 -294.000 308.000 C-294.000 308.000 -294.000 309.000 -294.000 309.000 C-294.000 309.000 -303.000 310.000 -303.000 310.000 C-303.000 310.000 -303.000 311.000 -303.000 311.000 C-303.000 311.000 -307.000 311.000 -307.000 311.000 C-307.000 311.000 -307.000 312.000 -307.000 312.000 C-307.000 312.000 -311.000 312.000 -311.000 312.000 C-311.000 312.000 -311.000 313.000 -311.000 313.000 C-311.000 313.000 -317.000 313.000 -317.000 313.000 C-317.000 313.000 -317.000 314.000 -317.000 314.000 C-317.000 314.000 -328.000 315.000 -328.000 315.000 C-328.000 315.000 -328.000 316.000 -328.000 316.000 C-328.000 316.000 -334.000 316.000 -334.000 316.000 C-334.000 316.000 -334.000 317.000 -334.000 317.000 C-334.000 317.000 -352.000 318.000 -352.000 318.000 C-352.000 318.000 -352.000 319.000 -352.000 319.000 C-352.000 319.000 -367.000 319.000 -367.000 319.000 C-367.000 319.000 -367.000 320.000 -367.000 320.000 C-367.000 320.000 -396.000 320.000 -396.000 320.000 C-396.000 320.000 -396.000 319.000 -396.000 319.000 C-396.000 319.000 -410.000 319.000 -410.000 319.000 C-410.000 319.000 -410.000 318.000 -410.000 318.000 C-410.000 318.000 -420.000 318.000 -420.000 318.000 C-420.000 318.000 -420.000 317.000 -420.000 317.000 C-420.000 317.000 -438.000 315.000 -438.000 315.000 C-438.000 315.000 -438.000 314.000 -438.000 314.000 C-438.000 314.000 -447.000 313.000 -447.000 313.000 C-447.000 313.000 -447.000 312.000 -447.000 312.000 C-447.000 312.000 -455.000 311.000 -455.000 311.000 C-455.000 311.000 -455.000 310.000 -455.000 310.000 C-455.000 310.000 -458.000 310.000 -458.000 310.000 C-458.000 310.000 -458.000 309.000 -458.000 309.000 C-458.000 309.000 -462.000 309.000 -462.000 309.000 C-462.000 309.000 -462.000 308.000 -462.000 308.000 C-462.000 308.000 -465.000 308.000 -465.000 308.000 C-465.000 308.000 -465.000 307.000 -465.000 307.000 C-465.000 307.000 -468.000 307.000 -468.000 307.000 C-468.000 307.000 -468.000 306.000 -468.000 306.000 C-468.000 306.000 -471.000 306.000 -471.000 306.000 C-471.000 306.000 -471.000 305.000 -471.000 305.000 C-471.000 305.000 -480.000 303.000 -480.000 303.000 C-480.000 303.000 -480.000 302.000 -480.000 302.000 C-480.000 302.000 -482.000 302.000 -482.000 302.000 C-482.000 302.000 -482.000 301.000 -482.000 301.000 C-482.000 301.000 -485.000 301.000 -485.000 301.000 C-485.000 301.000 -485.000 300.000 -485.000 300.000 C-485.000 300.000 -487.000 300.000 -487.000 300.000 C-487.000 300.000 -487.000 299.000 -487.000 299.000 C-487.000 299.000 -489.000 299.000 -489.000 299.000 C-489.000 299.000 -489.000 298.000 -489.000 298.000 C-489.000 298.000 -491.000 298.000 -491.000 298.000 C-491.000 298.000 -491.000 297.000 -491.000 297.000 C-491.000 297.000 -494.000 297.000 -494.000 297.000 C-494.000 297.000 -494.000 296.000 -494.000 296.000 C-494.000 296.000 -496.000 296.000 -496.000 296.000 C-496.000 296.000 -496.000 295.000 -496.000 295.000 C-496.000 295.000 -498.000 295.000 -498.000 295.000 C-498.000 295.000 -498.000 294.000 -498.000 294.000 C-498.000 294.000 -500.000 294.000 -500.000 294.000 C-500.000 294.000 -500.000 293.000 -500.000 293.000 C-500.000 293.000 -502.000 293.000 -502.000 293.000 C-502.000 293.000 -502.000 292.000 -502.000 292.000 C-502.000 292.000 -504.000 292.000 -504.000 292.000 C-504.000 292.000 -504.000 291.000 -504.000 291.000 C-504.000 291.000 -506.000 291.000 -506.000 291.000 C-506.000 291.000 -506.000 290.000 -506.000 290.000 C-506.000 290.000 -508.000 290.000 -508.000 290.000 C-508.000 290.000 -507.000 289.500 -508.000 289.000 C-509.000 288.500 -512.833 287.667 -514.000 287.000 C-515.167 286.333 -513.833 285.667 -515.000 285.000 C-516.167 284.333 -520.000 283.500 -521.000 283.000 C-522.000 282.500 -520.500 282.333 -521.000 282.000 C-521.500 281.667 -523.333 281.500 -524.000 281.000 C-524.667 280.500 -524.167 279.500 -525.000 279.000 C-525.833 278.500 -528.167 278.500 -529.000 278.000 C-529.833 277.500 -529.500 276.333 -530.000 276.000 C-530.500 275.667 -531.500 276.333 -532.000 276.000 C-532.500 275.667 -532.500 274.333 -533.000 274.000 C-533.500 273.667 -534.500 274.333 -535.000 274.000 C-535.500 273.667 -535.500 272.333 -536.000 272.000 C-536.500 271.667 -537.333 272.500 -538.000 272.000 C-538.667 271.500 -539.333 269.500 -540.000 269.000 C-540.667 268.500 -541.333 269.500 -542.000 269.000 C-542.667 268.500 -543.333 266.500 -544.000 266.000 C-544.667 265.500 -545.333 266.500 -546.000 266.000 C-546.667 265.500 -547.333 263.500 -548.000 263.000 C-548.667 262.500 -549.167 263.667 -550.000 263.000 C-550.833 262.333 -552.167 259.667 -553.000 259.000 C-553.833 258.333 -553.833 260.000 -555.000 259.000 C-556.167 258.000 -558.833 254.000 -560.000 253.000 C-561.167 252.000 -562.000 253.000 -562.000 253.000 C-562.000 253.000 -558.167 255.833 -562.000 252.000 C-565.833 248.167 -581.167 234.000 -585.000 230.000 C-588.833 226.000 -585.000 228.000 -585.000 228.000 C-585.000 228.000 -586.000 228.000 -586.000 228.000 C-586.000 228.000 -585.000 228.000 -586.000 227.000 C-587.000 226.000 -591.000 223.167 -592.000 222.000 C-593.000 220.833 -591.167 221.000 -592.000 220.000 C-592.833 219.000 -596.167 217.000 -597.000 216.000 C-597.833 215.000 -597.000 214.000 -597.000 214.000 C-597.000 214.000 -598.000 214.000 -598.000 214.000 C-598.000 214.000 -597.667 213.333 -598.000 213.000 C-598.333 212.667 -599.667 212.500 -600.000 212.000 C-600.333 211.500 -599.333 210.833 -600.000 210.000 C-600.667 209.167 -603.333 207.833 -604.000 207.000 C-604.667 206.167 -603.667 205.500 -604.000 205.000 C-604.333 204.500 -605.667 204.500 -606.000 204.000 C-606.333 203.500 -605.500 202.667 -606.000 202.000 C-606.500 201.333 -608.500 200.667 -609.000 200.000 C-609.500 199.333 -608.667 198.500 -609.000 198.000 C-609.333 197.500 -610.667 197.500 -611.000 197.000 C-611.333 196.500 -610.667 195.500 -611.000 195.000 C-611.333 194.500 -612.667 194.500 -613.000 194.000 C-613.333 193.500 -613.000 192.000 -613.000 192.000 C-613.000 192.000 -613.667 192.500 -614.000 192.000 C-614.333 191.500 -614.500 189.667 -615.000 189.000 C-615.500 188.333 -616.500 188.833 -617.000 188.000 C-617.500 187.167 -617.500 184.833 -618.000 184.000 C-618.500 183.167 -619.667 183.500 -620.000 183.000 C-620.333 182.500 -619.667 181.500 -620.000 181.000 C-620.333 180.500 -621.333 181.167 -622.000 180.000 C-622.667 178.833 -623.333 175.167 -624.000 174.000 C-624.667 172.833 -625.667 173.500 -626.000 173.000 C-626.333 172.500 -626.000 171.000 -626.000 171.000 C-626.000 171.000 -627.000 171.000 -627.000 171.000 C-627.000 171.000 -627.000 169.000 -627.000 169.000 C-627.000 169.000 -627.500 170.000 -628.000 169.000 C-628.500 168.000 -629.333 164.167 -630.000 163.000 C-630.667 161.833 -631.500 163.000 -632.000 162.000 C-632.500 161.000 -633.000 157.000 -633.000 157.000 C-633.000 157.000 -634.000 157.000 -634.000 157.000 C-634.000 157.000 -634.000 155.000 -634.000 155.000 C-634.000 155.000 -635.000 155.000 -635.000 155.000 C-635.000 155.000 -635.000 153.000 -635.000 153.000 C-635.000 153.000 -636.000 153.000 -636.000 153.000 C-636.000 153.000 -636.000 151.000 -636.000 151.000 C-636.000 151.000 -637.000 151.000 -637.000 151.000 C-637.000 151.000 -637.000 149.000 -637.000 149.000 C-637.000 149.000 -638.000 149.000 -638.000 149.000 C-638.000 149.000 -638.000 147.000 -638.000 147.000 C-638.000 147.000 -639.000 147.000 -639.000 147.000 C-639.000 147.000 -639.000 145.000 -639.000 145.000 C-639.000 145.000 -640.000 145.000 -640.000 145.000 C-640.000 145.000 -640.000 142.000 -640.000 142.000 C-640.000 142.000 -641.000 142.000 -641.000 142.000 C-641.000 142.000 -641.000 140.000 -641.000 140.000 C-641.000 140.000 -642.000 140.000 -642.000 140.000 C-642.000 140.000 -642.000 137.000 -642.000 137.000 C-642.000 137.000 -643.000 137.000 -643.000 137.000 C-643.000 137.000 -643.000 135.000 -643.000 135.000 C-643.000 135.000 -644.000 135.000 -644.000 135.000 C-644.000 135.000 -645.000 129.000 -645.000 129.000 C-645.000 129.000 -646.000 129.000 -646.000 129.000 C-646.000 129.000 -646.000 127.000 -646.000 127.000 C-646.000 127.000 -647.000 127.000 -647.000 127.000 C-647.000 127.000 -647.000 124.000 -647.000 124.000 C-647.000 124.000 -648.000 124.000 -648.000 124.000 C-648.000 124.000 -648.000 121.000 -648.000 121.000 C-648.000 121.000 -649.000 121.000 -649.000 121.000 C-649.000 121.000 -649.000 118.000 -649.000 118.000 C-649.000 118.000 -650.000 118.000 -650.000 118.000 C-650.000 118.000 -650.000 114.000 -650.000 114.000 C-650.000 114.000 -651.000 114.000 -651.000 114.000 C-651.000 114.000 -652.000 107.000 -652.000 107.000 C-652.000 107.000 -653.000 107.000 -653.000 107.000 C-653.000 107.000 -653.000 103.000 -653.000 103.000 C-653.000 103.000 -654.000 103.000 -654.000 103.000 C-654.000 103.000 -656.000 88.000 -656.000 88.000 C-656.000 88.000 -657.000 88.000 -657.000 88.000 C-657.000 88.000 -657.000 76.000 -657.000 76.000 C-657.000 76.000 -658.000 76.000 -658.000 76.000 C-658.000 76.000 -657.000 56.000 -657.000 56.000 C-657.000 56.000 -656.000 56.000 -656.000 56.000 C-656.000 56.000 -656.000 52.000 -656.000 52.000 C-656.000 52.000 -655.000 52.000 -655.000 52.000 C-655.000 52.000 -654.667 48.833 -654.000 48.000 C-653.333 47.167 -651.000 47.000 -651.000 47.000 C-651.000 47.000 -651.333 48.500 -651.000 49.000 C-650.667 49.500 -649.333 49.500 -649.000 50.000 C-648.667 50.500 -649.333 51.500 -649.000 52.000 C-648.667 52.500 -647.333 52.500 -647.000 53.000 C-646.667 53.500 -647.500 54.333 -647.000 55.000 C-646.500 55.667 -644.500 56.333 -644.000 57.000 C-643.500 57.667 -644.500 58.333 -644.000 59.000 C-643.500 59.667 -641.500 60.333 -641.000 61.000 C-640.500 61.667 -641.000 63.000 -641.000 63.000 C-641.000 63.000 -641.500 61.500 -640.000 63.000 C-638.500 64.500 -633.667 70.500 -632.000 72.000 C-630.333 73.500 -631.333 70.833 -630.000 72.000 C-628.667 73.167 -625.333 77.833 -624.000 79.000 C-622.667 80.167 -622.500 78.667 -622.000 79.000 C-621.500 79.333 -621.500 80.667 -621.000 81.000 C-620.500 81.333 -619.667 80.500 -619.000 81.000 C-618.333 81.500 -617.667 83.500 -617.000 84.000 C-616.333 84.500 -615.500 83.667 -615.000 84.000 C-614.500 84.333 -614.500 85.667 -614.000 86.000 C-613.500 86.333 -612.500 85.667 -612.000 86.000 C-611.500 86.333 -611.500 87.667 -611.000 88.000 C-610.500 88.333 -609.000 88.000 -609.000 88.000 C-609.000 88.000 -609.500 88.667 -609.000 89.000 C-608.500 89.333 -606.667 89.500 -606.000 90.000 C-605.333 90.500 -606.167 91.333 -605.000 92.000 C-603.833 92.667 -600.167 93.333 -599.000 94.000 C-597.833 94.667 -598.500 95.667 -598.000 96.000 C-597.500 96.333 -596.000 96.000 -596.000 96.000 C-596.000 96.000 -596.000 97.000 -596.000 97.000 C-596.000 97.000 -594.000 97.000 -594.000 97.000 C-594.000 97.000 -594.000 98.000 -594.000 98.000 C-594.000 98.000 -592.000 98.000 -592.000 98.000 C-592.000 98.000 -592.000 99.000 -592.000 99.000 C-592.000 99.000 -590.000 99.000 -590.000 99.000 C-590.000 99.000 -590.000 100.000 -590.000 100.000 C-590.000 100.000 -588.000 100.000 -588.000 100.000 C-588.000 100.000 -588.000 101.000 -588.000 101.000 C-588.000 101.000 -586.000 101.000 -586.000 101.000 C-586.000 101.000 -586.000 102.000 -586.000 102.000 C-586.000 102.000 -584.000 102.000 -584.000 102.000 C-584.000 102.000 -584.000 103.000 -584.000 103.000 C-584.000 103.000 -582.000 103.000 -582.000 103.000 C-582.000 103.000 -582.000 104.000 -582.000 104.000 C-582.000 104.000 -580.000 104.000 -580.000 104.000 C-580.000 104.000 -580.000 105.000 -580.000 105.000 C-580.000 105.000 -578.000 105.000 -578.000 105.000 C-578.000 105.000 -578.000 106.000 -578.000 106.000 C-578.000 106.000 -576.000 106.000 -576.000 106.000 C-576.000 106.000 -576.000 107.000 -576.000 107.000 C-576.000 107.000 -573.000 107.000 -573.000 107.000 C-573.000 107.000 -573.000 108.000 -573.000 108.000 C-573.000 108.000 -571.000 108.000 -571.000 108.000 C-571.000 108.000 -571.000 109.000 -571.000 109.000 C-571.000 109.000 -568.000 109.000 -568.000 109.000 C-568.000 109.000 -568.000 110.000 -568.000 110.000 C-568.000 110.000 -566.000 110.000 -566.000 110.000 C-566.000 110.000 -566.000 111.000 -566.000 111.000 C-566.000 111.000 -563.000 111.000 -563.000 111.000 C-563.000 111.000 -563.000 112.000 -563.000 112.000 C-563.000 112.000 -561.000 112.000 -561.000 112.000 C-561.000 112.000 -561.000 113.000 -561.000 113.000 C-561.000 113.000 -558.000 113.000 -558.000 113.000 C-558.000 113.000 -558.000 114.000 -558.000 114.000 C-558.000 114.000 -556.000 114.000 -556.000 114.000 C-556.000 114.000 -556.000 115.000 -556.000 115.000 C-556.000 115.000 -553.000 115.000 -553.000 115.000 C-553.000 115.000 -553.000 116.000 -553.000 116.000 C-553.000 116.000 -550.000 116.000 -550.000 116.000 C-550.000 116.000 -550.000 117.000 -550.000 117.000 C-550.000 117.000 -547.000 117.000 -547.000 117.000 C-547.000 117.000 -547.000 118.000 -547.000 118.000 C-547.000 118.000 -543.000 118.000 -543.000 118.000 C-543.000 118.000 -543.000 119.000 -543.000 119.000 C-543.000 119.000 -540.000 119.000 -540.000 119.000 C-540.000 119.000 -540.000 120.000 -540.000 120.000 C-540.000 120.000 -537.000 120.000 -537.000 120.000 C-537.000 120.000 -537.000 121.000 -537.000 121.000 C-537.000 121.000 -533.000 121.000 -533.000 121.000 C-533.000 121.000 -533.000 122.000 -533.000 122.000 C-533.000 122.000 -530.000 122.000 -530.000 122.000 C-530.000 122.000 -530.000 123.000 -530.000 123.000 C-530.000 123.000 -526.000 123.000 -526.000 123.000 C-526.000 123.000 -526.000 124.000 -526.000 124.000 C-526.000 124.000 -522.000 124.000 -522.000 124.000 C-522.000 124.000 -522.000 125.000 -522.000 125.000 C-522.000 125.000 -518.000 125.000 -518.000 125.000 C-518.000 125.000 -518.000 126.000 -518.000 126.000 C-518.000 126.000 -506.000 128.000 -506.000 128.000 C-506.000 128.000 -506.000 129.000 -506.000 129.000 C-506.000 129.000 -501.000 129.000 -501.000 129.000 C-501.000 129.000 -501.000 130.000 -501.000 130.000 C-501.000 130.000 -496.000 130.000 -496.000 130.000 C-496.000 130.000 -496.000 131.000 -496.000 131.000 C-496.000 131.000 -491.000 131.000 -491.000 131.000 C-491.000 131.000 -491.000 132.000 -491.000 132.000 C-491.000 132.000 -485.000 132.000 -485.000 132.000 C-485.000 132.000 -485.000 133.000 -485.000 133.000 C-485.000 133.000 -479.000 133.000 -479.000 133.000 C-479.000 133.000 -479.000 134.000 -479.000 134.000 C-479.000 134.000 -472.000 134.000 -472.000 134.000 C-472.000 134.000 -472.000 135.000 -472.000 135.000 C-472.000 135.000 -465.000 135.000 -465.000 135.000 C-465.000 135.000 -465.000 136.000 -465.000 136.000 C-465.000 136.000 -457.000 136.000 -457.000 136.000 C-457.000 136.000 -457.000 137.000 -457.000 137.000 C-457.000 137.000 -434.000 138.000 -434.000 138.000 C-434.000 138.000 -434.000 139.000 -434.000 139.000 C-434.000 139.000 -413.000 139.000 -413.000 139.000 C-413.000 139.000 -413.000 140.000 -413.000 140.000 C-413.000 140.000 -359.000 139.000 -359.000 139.000 C-359.000 139.000 -359.000 138.000 -359.000 138.000 C-359.000 138.000 -346.000 138.000 -346.000 138.000 C-346.000 138.000 -346.000 137.000 -346.000 137.000 C-346.000 137.000 -335.000 137.000 -335.000 137.000 C-335.000 137.000 -335.000 136.000 -335.000 136.000 C-335.000 136.000 -325.000 136.000 -325.000 136.000 C-325.000 136.000 -325.000 135.000 -325.000 135.000 C-325.000 135.000 -301.000 133.000 -301.000 133.000 C-301.000 133.000 -301.000 132.000 -301.000 132.000 C-301.000 132.000 -287.000 131.000 -287.000 131.000 C-287.000 131.000 -287.000 130.000 -287.000 130.000 C-287.000 130.000 -281.000 130.000 -281.000 130.000 C-281.000 130.000 -281.000 129.000 -281.000 129.000 C-281.000 129.000 -275.000 129.000 -275.000 129.000 C-275.000 129.000 -275.000 128.000 -275.000 128.000 C-275.000 128.000 -270.000 128.000 -270.000 128.000 C-270.000 128.000 -270.000 127.000 -270.000 127.000 C-270.000 127.000 -265.000 127.000 -265.000 127.000 C-265.000 127.000 -265.000 126.000 -265.000 126.000 C-265.000 126.000 -259.000 126.000 -259.000 126.000 C-259.000 126.000 -259.000 125.000 -259.000 125.000 C-259.000 125.000 -249.000 124.000 -249.000 124.000 C-249.000 124.000 -249.000 123.000 -249.000 123.000 C-249.000 123.000 -245.000 123.000 -245.000 123.000 C-245.000 123.000 -245.000 122.000 -245.000 122.000 C-245.000 122.000 -240.000 122.000 -240.000 122.000 C-240.000 122.000 -240.000 121.000 -240.000 121.000 C-240.000 121.000 -236.000 121.000 -236.000 121.000 C-236.000 121.000 -236.000 120.000 -236.000 120.000 C-236.000 120.000 -232.000 120.000 -232.000 120.000 C-232.000 120.000 -232.000 119.000 -232.000 119.000 C-232.000 119.000 -228.000 119.000 -228.000 119.000 C-228.000 119.000 -228.000 118.000 -228.000 118.000 C-228.000 118.000 -224.000 118.000 -224.000 118.000 C-224.000 118.000 -224.000 117.000 -224.000 117.000 C-224.000 117.000 -220.000 117.000 -220.000 117.000 C-220.000 117.000 -220.000 116.000 -220.000 116.000 C-220.000 116.000 -208.000 114.000 -208.000 114.000 C-208.000 114.000 -208.000 113.000 -208.000 113.000 C-208.000 113.000 -205.000 113.000 -205.000 113.000 C-205.000 113.000 -205.000 112.000 -205.000 112.000 C-205.000 112.000 -201.000 112.000 -201.000 112.000 C-201.000 112.000 -201.000 111.000 -201.000 111.000 C-201.000 111.000 -198.000 111.000 -198.000 111.000 C-198.000 111.000 -198.000 110.000 -198.000 110.000 C-198.000 110.000 -195.000 110.000 -195.000 110.000 C-195.000 110.000 -195.000 109.000 -195.000 109.000 C-195.000 109.000 -191.000 109.000 -191.000 109.000 C-191.000 109.000 -191.000 108.000 -191.000 108.000 C-191.000 108.000 -188.000 108.000 -188.000 108.000 C-188.000 108.000 -188.000 107.000 -188.000 107.000 C-188.000 107.000 -185.000 107.000 -185.000 107.000 C-185.000 107.000 -185.000 106.000 -185.000 106.000 C-185.000 106.000 -182.000 106.000 -182.000 106.000 C-182.000 106.000 -182.000 105.000 -182.000 105.000 C-182.000 105.000 -179.000 105.000 -179.000 105.000 C-179.000 105.000 -179.000 104.000 -179.000 104.000 C-179.000 104.000 -176.000 104.000 -176.000 104.000 C-176.000 104.000 -176.000 103.000 -176.000 103.000 C-176.000 103.000 -167.000 101.000 -167.000 101.000 C-167.000 101.000 -167.000 100.000 -167.000 100.000 C-167.000 100.000 -165.000 100.000 -165.000 100.000 C-165.000 100.000 -165.000 99.000 -165.000 99.000 C-165.000 99.000 -159.000 98.000 -159.000 98.000 C-159.000 98.000 -159.000 97.000 -159.000 97.000 C-159.000 97.000 -157.000 97.000 -157.000 97.000 C-157.000 97.000 -157.000 96.000 -157.000 96.000 C-157.000 96.000 -154.000 96.000 -154.000 96.000 C-154.000 96.000 -154.000 95.000 -154.000 95.000 C-154.000 95.000 -152.000 95.000 -152.000 95.000 C-152.000 95.000 -152.000 94.000 -152.000 94.000 C-152.000 94.000 -149.000 94.000 -149.000 94.000 C-149.000 94.000 -149.000 93.000 -149.000 93.000 C-149.000 93.000 -147.000 93.000 -147.000 93.000 C-147.000 93.000 -147.000 92.000 -147.000 92.000 C-147.000 92.000 -144.000 92.000 -144.000 92.000 C-144.000 92.000 -144.000 91.000 -144.000 91.000 C-144.000 91.000 -142.000 91.000 -142.000 91.000 C-142.000 91.000 -142.000 90.000 -142.000 90.000 C-142.000 90.000 -139.000 90.000 -139.000 90.000 C-139.000 90.000 -139.000 89.000 -139.000 89.000 C-139.000 89.000 -137.000 89.000 -137.000 89.000 C-137.000 89.000 -137.000 88.000 -137.000 88.000 C-137.000 88.000 -135.000 88.000 -135.000 88.000 C-135.000 88.000 -135.000 87.000 -135.000 87.000 C-135.000 87.000 -133.000 87.000 -133.000 87.000 C-133.000 87.000 -133.000 86.000 -133.000 86.000 C-133.000 86.000 -131.000 86.000 -131.000 86.000 C-131.000 86.000 -131.000 85.000 -131.000 85.000 C-131.000 85.000 -128.000 85.000 -128.000 85.000 C-128.000 85.000 -128.000 84.000 -128.000 84.000 C-128.000 84.000 -126.000 84.000 -126.000 84.000 C-126.000 84.000 -126.000 83.000 -126.000 83.000 C-126.000 83.000 -124.000 83.000 -124.000 83.000 C-124.000 83.000 -124.000 82.000 -124.000 82.000 C-124.000 82.000 -122.000 82.000 -122.000 82.000 C-122.000 82.000 -122.000 81.000 -122.000 81.000 C-122.000 81.000 -120.000 81.000 -120.000 81.000 C-120.000 81.000 -120.000 80.000 -120.000 80.000 C-120.000 80.000 -118.000 80.000 -118.000 80.000 C-118.000 80.000 -118.000 79.000 -118.000 79.000 C-118.000 79.000 -116.000 79.000 -116.000 79.000 C-116.000 79.000 -116.000 78.000 -116.000 78.000 C-116.000 78.000 -114.000 78.000 -114.000 78.000 C-114.000 78.000 -114.000 77.000 -114.000 77.000 C-114.000 77.000 -112.000 77.000 -112.000 77.000 C-112.000 77.000 -112.000 76.000 -112.000 76.000 C-112.000 76.000 -110.000 76.000 -110.000 76.000 C-110.000 76.000 -111.000 75.500 -110.000 75.000 C-109.000 74.500 -105.167 73.667 -104.000 73.000 C-102.833 72.333 -103.500 71.333 -103.000 71.000 C-102.500 70.667 -101.000 71.000 -101.000 71.000 C-101.000 71.000 -101.000 70.000 -101.000 70.000 C-101.000 70.000 -99.000 70.000 -99.000 70.000 C-99.000 70.000 -100.000 69.500 -99.000 69.000 C-98.000 68.500 -94.167 67.667 -93.000 67.000 C-91.833 66.333 -92.500 65.333 -92.000 65.000 C-91.500 64.667 -90.000 65.000 -90.000 65.000 C-90.000 65.000 -90.000 64.000 -90.000 64.000 C-90.000 64.000 -88.500 64.333 -88.000 64.000 C-87.500 63.667 -87.833 62.500 -87.000 62.000 C-86.167 61.500 -83.833 61.500 -83.000 61.000 C-82.167 60.500 -82.833 59.500 -82.000 59.000 C-81.167 58.500 -78.833 58.500 -78.000 58.000 C-77.167 57.500 -77.500 56.333 -77.000 56.000 C-76.500 55.667 -75.500 56.333 -75.000 56.000 C-74.500 55.667 -74.500 54.333 -74.000 54.000 C-73.500 53.667 -72.500 54.333 -72.000 54.000 C-71.500 53.667 -71.500 52.333 -71.000 52.000 C-70.500 51.667 -69.500 52.333 -69.000 52.000 C-68.500 51.667 -68.500 50.333 -68.000 50.000 C-67.500 49.667 -66.500 50.333 -66.000 50.000 C-65.500 49.667 -65.500 48.333 -65.000 48.000 C-64.500 47.667 -63.500 48.333 -63.000 48.000 C-62.500 47.667 -62.500 46.333 -62.000 46.000 C-61.500 45.667 -60.500 46.333 -60.000 46.000 C-59.500 45.667 -59.500 44.333 -59.000 44.000 C-58.500 43.667 -57.667 44.500 -57.000 44.000 C-56.333 43.500 -55.667 41.500 -55.000 41.000 C-54.333 40.500 -53.500 41.333 -53.000 41.000 C-52.500 40.667 -52.500 39.333 -52.000 39.000 C-51.500 38.667 -50.000 39.000 -50.000 39.000 C-50.000 39.000 -50.000 38.000 -50.000 38.000 C-50.000 38.000 -49.333 38.333 -49.000 38.000 C-48.667 37.667 -48.500 36.333 -48.000 36.000 C-47.500 35.667 -46.667 36.500 -46.000 36.000 C-45.333 35.500 -44.667 33.500 -44.000 33.000 C-43.333 32.500 -42.833 33.667 -42.000 33.000 C-41.167 32.333 -39.833 29.667 -39.000 29.000 C-38.167 28.333 -38.000 29.833 -37.000 29.000 C-36.000 28.167 -34.000 24.833 -33.000 24.000 C-32.000 23.167 -31.833 24.667 -31.000 24.000 C-30.167 23.333 -28.833 20.667 -28.000 20.000 C-27.167 19.333 -27.000 20.833 -26.000 20.000 C-25.000 19.167 -23.000 15.833 -22.000 15.000 C-21.000 14.167 -20.000 15.000 -20.000 15.000 C-20.000 15.000 -20.000 14.000 -20.000 14.000 C-20.000 14.000 -19.667 14.667 -19.000 14.000 C-18.333 13.333 -16.833 10.667 -16.000 10.000 C-15.167 9.333 -14.833 10.667 -14.000 10.000 C-13.167 9.333 -11.833 6.667 -11.000 6.000 C-10.167 5.333 -9.500 6.333 -9.000 6.000 C-8.500 5.667 -8.500 4.333 -8.000 4.000 C-7.500 3.667 -6.000 4.000 -6.000 4.000 C-6.000 4.000 -6.000 3.000 -6.000 3.000 C-6.000 3.000 -4.000 3.000 -4.000 3.000 C-4.000 3.000 -4.000 2.000 -4.000 2.000 C-4.000 2.000 -2.000 2.000 -2.000 2.000 C-2.000 2.000 -2.000 1.000 -2.000 1.000 C-2.000 1.000 0.000 1.000 0.000 1.000 C0.000 1.000 0.000 0.000 0.000 0.000 Z",
+ "transform": "translate(694,284)"
+ }
+}
\ No newline at end of file
diff --git a/packages/brand/tokens/home-dark.json b/packages/brand/tokens/home-dark.json
new file mode 100644
index 0000000..8223398
--- /dev/null
+++ b/packages/brand/tokens/home-dark.json
@@ -0,0 +1,70 @@
+{
+ "background": "color-85",
+ "surface": "color-86",
+ "surface-raised": "color-87",
+ "surface-muted": "color-88",
+ "foreground": "color-55",
+ "foreground-strong": "color-6",
+ "muted-foreground": "color-56",
+ "primary": "color-57",
+ "primary-hover": "color-58",
+ "primary-active": "color-59",
+ "primary-foreground": "color-60",
+ "accent": "color-61",
+ "secondary": "color-62",
+ "secondary-hover": "color-63",
+ "secondary-active": "color-64",
+ "secondary-foreground": "color-55",
+ "selection": "color-61",
+ "selection-border": "color-57",
+ "connector": "color-57",
+ "border": "color-65",
+ "control-border": "color-66",
+ "grid": "color-67",
+ "focus-ring": "color-57",
+ "link": "color-57",
+ "row-hover": "color-68",
+ "disabled-background": "color-69",
+ "disabled-foreground": "color-70",
+ "success": "color-71",
+ "success-background": "color-72",
+ "warning": "color-73",
+ "warning-background": "color-74",
+ "danger": "color-75",
+ "danger-hover": "color-76",
+ "danger-background": "color-77",
+ "info": "color-78",
+ "info-background": "color-79",
+ "shadow": "color-80",
+ "scrim": "color-81",
+ "surface-muted-foreground": "color-56",
+ "brand-mocha": "mocha",
+ "brand-orange": "terracotta",
+ "brand-cream": "cream",
+ "brand-oat": "oat",
+ "orange-foreground": "color-82",
+ "card": "color-86",
+ "card-foreground": "color-55",
+ "popover": "color-87",
+ "popover-foreground": "color-55",
+ "muted": "color-88",
+ "accent-foreground": "color-55",
+ "destructive": "color-75",
+ "destructive-foreground": "color-60",
+ "input": "color-66",
+ "ring": "color-57",
+ "sidebar": "color-86",
+ "sidebar-foreground": "color-55",
+ "sidebar-primary": "color-57",
+ "sidebar-primary-foreground": "color-60",
+ "sidebar-accent": "color-61",
+ "sidebar-accent-foreground": "color-55",
+ "sidebar-border": "color-65",
+ "sidebar-ring": "color-57",
+ "radius": "color-34",
+ "chart-1": "color-57",
+ "chart-2": "color-78",
+ "chart-3": "color-71",
+ "chart-4": "color-83",
+ "chart-5": "color-84"
+}
diff --git a/packages/brand/tokens/home-light.json b/packages/brand/tokens/home-light.json
new file mode 100644
index 0000000..11be174
--- /dev/null
+++ b/packages/brand/tokens/home-light.json
@@ -0,0 +1,70 @@
+{
+ "background": "cream",
+ "surface": "color-2",
+ "foreground": "espresso",
+ "muted-foreground": "color-4",
+ "primary": "deep-mocha",
+ "primary-foreground": "color-6",
+ "accent": "oat",
+ "selection": "oat",
+ "border": "color-8",
+ "surface-raised": "color-6",
+ "surface-muted": "color-9",
+ "foreground-strong": "color-10",
+ "primary-hover": "color-11",
+ "primary-active": "color-12",
+ "secondary": "color-13",
+ "secondary-hover": "color-14",
+ "secondary-active": "color-15",
+ "secondary-foreground": "espresso",
+ "link": "deep-mocha",
+ "focus-ring": "deep-mocha",
+ "control-border": "color-16",
+ "row-hover": "color-17",
+ "disabled-background": "color-18",
+ "disabled-foreground": "color-19",
+ "success": "color-20",
+ "success-background": "color-21",
+ "warning": "color-22",
+ "warning-background": "color-23",
+ "danger": "color-24",
+ "danger-hover": "color-25",
+ "danger-background": "color-26",
+ "info": "color-27",
+ "info-background": "color-28",
+ "shadow": "color-29",
+ "scrim": "color-30",
+ "surface-muted-foreground": "color-4",
+ "brand-mocha": "mocha",
+ "brand-orange": "terracotta",
+ "brand-cream": "cream",
+ "brand-oat": "oat",
+ "orange-foreground": "color-33",
+ "card": "color-2",
+ "card-foreground": "espresso",
+ "popover": "color-6",
+ "popover-foreground": "espresso",
+ "muted": "color-9",
+ "accent-foreground": "espresso",
+ "destructive": "color-24",
+ "destructive-foreground": "color-6",
+ "input": "color-16",
+ "ring": "deep-mocha",
+ "sidebar": "color-2",
+ "sidebar-foreground": "espresso",
+ "sidebar-primary": "deep-mocha",
+ "sidebar-primary-foreground": "color-6",
+ "sidebar-accent": "oat",
+ "sidebar-accent-foreground": "espresso",
+ "sidebar-border": "color-8",
+ "sidebar-ring": "deep-mocha",
+ "radius": "color-34",
+ "connector": "deep-mocha",
+ "selection-border": "deep-mocha",
+ "grid": "color-35",
+ "chart-1": "deep-mocha",
+ "chart-2": "color-27",
+ "chart-3": "color-36",
+ "chart-4": "mocha",
+ "chart-5": "color-37"
+}
diff --git a/packages/brand/tokens/logo.json b/packages/brand/tokens/logo.json
new file mode 100644
index 0000000..145ce7f
--- /dev/null
+++ b/packages/brand/tokens/logo.json
@@ -0,0 +1,6 @@
+{
+ "rim": "mocha",
+ "bowl-light": "espresso",
+ "bowl-dark": "cream",
+ "icon-background": "espresso"
+}
diff --git a/packages/brand/tokens/palette.json b/packages/brand/tokens/palette.json
new file mode 100644
index 0000000..3f744e1
--- /dev/null
+++ b/packages/brand/tokens/palette.json
@@ -0,0 +1,90 @@
+{
+ "cream": "#FFF6EF",
+ "color-2": "#FFFCF9",
+ "espresso": "#49372E",
+ "color-4": "#68574D",
+ "deep-mocha": "#78523F",
+ "color-6": "#FFFFFF",
+ "oat": "#EDE9D0",
+ "color-8": "#DDCFC4",
+ "color-9": "#F1E8E0",
+ "color-10": "#38281F",
+ "color-11": "#674634",
+ "color-12": "#573B2D",
+ "color-13": "#F0E6DD",
+ "color-14": "#E8D8CA",
+ "color-15": "#DFCCBA",
+ "color-16": "#9A8879",
+ "color-17": "#F5ECE3",
+ "color-18": "#E7E1D8",
+ "color-19": "#92867A",
+ "color-20": "#41684B",
+ "color-21": "#EAF1E8",
+ "color-22": "#805A16",
+ "color-23": "#FBF0D4",
+ "color-24": "#A33E32",
+ "color-25": "#8B3026",
+ "color-26": "#F9EAE5",
+ "color-27": "#48667D",
+ "color-28": "#EAF0F4",
+ "color-29": "rgba(59, 41, 35, 0.08)",
+ "color-30": "rgba(41, 38, 35, 0.40)",
+ "mocha": "#A47764",
+ "terracotta": "#E07242",
+ "color-33": "#A84E2C",
+ "color-34": "0.625rem",
+ "color-35": "#D9D9D9",
+ "color-36": "#55704D",
+ "color-37": "#805A7B",
+ "canvas-white": "#FAFAFA",
+ "color-39": "#292623",
+ "color-40": "#6D665F",
+ "color-41": "#F2E8E1",
+ "color-42": "#DDD9D2",
+ "color-43": "#F3F1EE",
+ "color-44": "#201D1A",
+ "color-45": "#EBE6DF",
+ "color-46": "#E1D8CD",
+ "color-47": "#F6F3EF",
+ "color-48": "#EFEEEB",
+ "color-49": "#95908A",
+ "color-50": "rgba(41, 38, 35, 0.08)",
+ "canvas-black": "#141414",
+ "color-52": "#202020",
+ "color-53": "#282828",
+ "color-54": "#252525",
+ "color-55": "#EEEEEE",
+ "color-56": "#B9B4AE",
+ "color-57": "#D1AA92",
+ "color-58": "#DEBDA8",
+ "color-59": "#BE967B",
+ "color-60": "#211A17",
+ "color-61": "#3A302B",
+ "color-62": "#2C2926",
+ "color-63": "#37312C",
+ "color-64": "#44392F",
+ "color-65": "#3B3B3B",
+ "color-66": "#81756A",
+ "color-67": "#333333",
+ "color-68": "#292522",
+ "color-69": "#292929",
+ "color-70": "#77736E",
+ "color-71": "#A4C2A1",
+ "color-72": "#243127",
+ "color-73": "#E3C381",
+ "color-74": "#362F20",
+ "color-75": "#F0A395",
+ "color-76": "#F6B5AA",
+ "color-77": "#3B2724",
+ "color-78": "#A6C6DC",
+ "color-79": "#23303B",
+ "color-80": "rgba(0, 0, 0, 0.30)",
+ "color-81": "rgba(0, 0, 0, 0.60)",
+ "color-82": "#E8AE92",
+ "color-83": "#D9AE8F",
+ "color-84": "#C8A7CD",
+ "color-85": "#1C1816",
+ "color-86": "#27211E",
+ "color-87": "#302720",
+ "color-88": "#302823"
+}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index d182f19..a1d6e04 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,6 +1,7 @@
packages:
- apps/waterfall-wiki
- apps/studio
+ - packages/brand
# Each application owns its lockfile, so releases stay independent.
sharedWorkspaceLockfile: false
allowBuilds: