zilliz-design-system 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +210 -0
- package/LICENSE +21 -0
- package/README.md +474 -0
- package/foundations/assets/fonts/geist-mono-latin-ext-v5.woff2 +0 -0
- package/foundations/assets/fonts/geist-mono-latin-v5.woff2 +0 -0
- package/foundations/assets/fonts/geist-sans-latin-ext-v5.woff2 +0 -0
- package/foundations/assets/fonts/geist-sans-latin-v5.woff2 +0 -0
- package/foundations/tokens/fonts.css +5 -0
- package/foundations/tokens/primitives.css +187 -0
- package/foundations/tokens/print.css +20 -0
- package/foundations/tokens/semantic.css +51 -0
- package/foundations/tokens-studio/$metadata.json +9 -0
- package/foundations/tokens-studio/$themes.json +14 -0
- package/foundations/tokens-studio/README.md +58 -0
- package/foundations/tokens-studio/primitives/color.json +109 -0
- package/foundations/tokens-studio/primitives/typography.json +56 -0
- package/foundations/tokens-studio/semantic/color.json +42 -0
- package/foundations/tokens-studio/semantic/typography.json +25 -0
- package/foundations/tokens-studio/themes/dark.json +42 -0
- package/package.json +50 -0
- package/website/README.md +41 -0
- package/website/zilliz/DESIGN.md +191 -0
- package/website/zilliz/layout.css +71 -0
- package/website/zilliz/skin/dark.css +140 -0
- package/website/zilliz/skin/light.css +65 -0
- package/website/zilliz/styles-light.css +13 -0
- package/website/zilliz/styles.css +10 -0
package/README.md
ADDED
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# Zilliz Design System
|
|
2
|
+
|
|
3
|
+
The Zilliz website (`website/zilliz/`) holds all the content. `cloud/` has a filled-in light
|
|
4
|
+
skin awaiting design sign-off; the other three lines are empty shells.
|
|
5
|
+
|
|
6
|
+
## Install the published package
|
|
7
|
+
|
|
8
|
+
The public package is `zilliz-design-system`. Consumers must pin an exact version:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm add -E zilliz-design-system@1.0.0
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Do not use `latest`, `^`, `~`, Git branches, or raw commits. Supported CSS imports include:
|
|
15
|
+
|
|
16
|
+
```css
|
|
17
|
+
@import 'zilliz-design-system/website/zilliz/styles.css';
|
|
18
|
+
@import 'zilliz-design-system/website/zilliz/styles-light.css';
|
|
19
|
+
@import 'zilliz-design-system/foundations/tokens/semantic.css';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The Tokens Studio package is exported below `zilliz-design-system/tokens-studio/`.
|
|
23
|
+
`package.json` contains the complete public export map.
|
|
24
|
+
|
|
25
|
+
### Release process
|
|
26
|
+
|
|
27
|
+
Package releases use Semantic Versioning and are immutable. Normal pull requests never
|
|
28
|
+
publish. To release, merge the version change to `main`, create an annotated `vX.Y.Z` tag,
|
|
29
|
+
and publish a GitHub Release from that tag. `.github/workflows/release.yml` verifies the
|
|
30
|
+
tag/version match, validates the package, installs its packed tarball in a clean fixture,
|
|
31
|
+
and publishes to the public npm registry.
|
|
32
|
+
|
|
33
|
+
The npm trusted publisher is configured on the `zilliz-design-system` package and must name
|
|
34
|
+
repository `zilliztech/zilliz-design-system` and workflow `release.yml`. If the publisher is
|
|
35
|
+
not yet configured or publish permission is unavailable, stop the release; do not silently
|
|
36
|
+
switch registries or add a personal publishing token.
|
|
37
|
+
|
|
38
|
+
Consumer repositories update through their own manually triggered synchronization workflow.
|
|
39
|
+
That workflow pins a requested exact version, runs consumer tests/builds, and opens a pull
|
|
40
|
+
request for design and engineering review. It never merges the pull request automatically.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Architecture
|
|
45
|
+
|
|
46
|
+
**Vertical lines are dependency direction. Everything depends downward.**
|
|
47
|
+
|
|
48
|
+
**L2 is five separate boxes, one per line — they share nothing with each other**, including
|
|
49
|
+
behaviour. What sits here is each line's *spec*; the components that ship live in that
|
|
50
|
+
line's own repo.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Milvus site Zilliz site Doc Zilliz Cloud Collateral
|
|
54
|
+
│ │ │ │ │
|
|
55
|
+
┌──────┴─────┐ ┌─────┴──────┐ ┌────┴──────┐ ┌──────┴───────┐ ┌─────┴───────┐
|
|
56
|
+
L2 │ milvus/ │ │ zilliz/ │ │ doc/ │ │ cloud/ │ │ collateral/ │
|
|
57
|
+
spec│ Hero │ │ FeatureCard│ │ Code block│ │ DataTable │ │ slide │
|
|
58
|
+
│ LogoWall │ │ CtaCardBand│ │ API ref │ │ Sidebar │ │ whitepaper │
|
|
59
|
+
│ │ │ │ │ │ │ Empty state │ │ booth │
|
|
60
|
+
│ │ │ │ │ │ │ │ │ meetup KV │
|
|
61
|
+
│ │ │ │ │ │ │ │ │ arch diagram│
|
|
62
|
+
└──────┬─────┘ └─────┬──────┘ └────┬──────┘ └──────┬───────┘ └─────┬───────┘
|
|
63
|
+
│ │ │ │ │
|
|
64
|
+
┌──────┴─────────────┴─────────────┴───────────────┴───────────────┴───────┐
|
|
65
|
+
│ L1 foundations MUST be unified, one source │
|
|
66
|
+
│ color semantics . type scale . spacing . radius . motion │
|
|
67
|
+
│ logo / icon sources . voice . print colour (CMYK / Pantone) │
|
|
68
|
+
│ interaction + a11y rules (written standard, not shared code) │
|
|
69
|
+
│ -> CSS vars | JSON (DTCG) | .ase swatch | CC Library │
|
|
70
|
+
└──────────────────────────────────────────────────────────────────────────┘
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**L1 is the only layer that must be unified** — 80% of consistency comes from it, and no
|
|
74
|
+
product line needs a different brand blue.
|
|
75
|
+
|
|
76
|
+
> **Five product lines, six directories.** The table below lists the five lines; the repo
|
|
77
|
+
> holds six directories — one shared layer (`foundations`) plus one per line.
|
|
78
|
+
> "Directory" below always means one of those six.
|
|
79
|
+
|
|
80
|
+
### The five consumers
|
|
81
|
+
|
|
82
|
+
The L2 column is each line's directory **in this repo**, which holds its spec — not the
|
|
83
|
+
repo its code ships from.
|
|
84
|
+
|
|
85
|
+
| Consumer | L1 | L2 spec | Its constraint |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| Milvus site | ✓ required | `website/milvus/` | Open-source community register, deliberately distinct from the commercial site |
|
|
88
|
+
| Zilliz site | ✓ required | `website/zilliz/` | 60px hero, 100px sections, optimised for conversion |
|
|
89
|
+
| Doc | ✓ required | `website/doc/` | No system of its own; one small set of patterns |
|
|
90
|
+
| Zilliz Cloud | ✓ required | `cloud/` | 32px table rows, density, state machines, keyboard reachability |
|
|
91
|
+
| Collateral | ✓ + print tokens | `collateral/` | Slides / whitepapers / booth / meetup art / architecture diagrams; needs its own print colour standard |
|
|
92
|
+
|
|
93
|
+
**L2 is deliberately not shared.** The site optimises for conversion and the SaaS optimises
|
|
94
|
+
for information density — opposite constraints. Forcing them onto one `Button` grows twelve
|
|
95
|
+
variants until nobody dares touch it. Adobe, Brad Frost and EightShapes all draw the line in
|
|
96
|
+
the same place: **unifying tokens is a net gain, unifying components is a liability.**
|
|
97
|
+
|
|
98
|
+
**The three web properties are grouped under `website/` but their L2 is not merged.** They
|
|
99
|
+
share L1; their component appearance and behaviour stay independent. The grouping exists only
|
|
100
|
+
because they are all web and share a toolchain.
|
|
101
|
+
|
|
102
|
+
### What this repo is the source of truth for — and what it is not
|
|
103
|
+
|
|
104
|
+
**It owns design values. It does not own how a line's features hang together.** That second
|
|
105
|
+
kind of knowledge is derived from each line's own code and stays in that line's own repo.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
109
|
+
│ zilliztech/zilliz-design-system SOURCE OF TRUTH for design values │
|
|
110
|
+
│ │
|
|
111
|
+
│ foundations/tokens/ -> CSS vars | JSON (DTCG) | .ase swatch │
|
|
112
|
+
│ DESIGN.md -> WHAT IT LOOKS LIKE │
|
|
113
|
+
│ foundations/templates/ -> how a line writes its own registry │
|
|
114
|
+
└──────────┬────────────────────────┬───────────────────────┬──────────────┘
|
|
115
|
+
│ import │ read │ publish / mirror
|
|
116
|
+
▼ ▼ ▼
|
|
117
|
+
┌──────────────────────────┐ ┌────────────────────┐ ┌─────────────────────────┐
|
|
118
|
+
│ EACH LINE'S OWN REPO │ │ AI agent │ │ Figma / CC Library │
|
|
119
|
+
│ zilliz.com . cloud │ │ reads it before │ │ where designers │
|
|
120
|
+
│ milvus . docs │ │ writing any UI │ │ pick values │
|
|
121
|
+
│ │ │ │ │ MIRROR, not source │
|
|
122
|
+
│ its components import │ └────────────────────┘ └─────────────────────────┘
|
|
123
|
+
│ the tokens │
|
|
124
|
+
│ │
|
|
125
|
+
│ dependency-registry.md │ SOURCE OF TRUTH for that line's own flows.
|
|
126
|
+
│ -> WHAT BREAKS IF YOU │ An agent derives it from THAT repo's code and
|
|
127
|
+
│ CHANGE X │ it is maintained there. It never lives in the
|
|
128
|
+
└──────────┬───────────────┘ design system repo.
|
|
129
|
+
│
|
|
130
|
+
┌───────┴────────┐
|
|
131
|
+
▼ ▼
|
|
132
|
+
no drift "changing onboarding
|
|
133
|
+
across the hits these 5 screens"
|
|
134
|
+
five lines
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Figma and CC Library are mirrors of this repo, not the other way round.** The values a
|
|
138
|
+
designer picks in Figma come from `foundations/tokens/`; a token changes in the repo only.
|
|
139
|
+
See `SYNC.md`.
|
|
140
|
+
|
|
141
|
+
The two markdown files are projections for agents at different levels of abstraction, and
|
|
142
|
+
**they live in different repos because they answer to different owners**. `DESIGN.md` gives
|
|
143
|
+
an agent the persistent memory of the design system it otherwise lacks, and is maintained
|
|
144
|
+
here. The dependency registry answers what breaks if you change X, at flow and screen level
|
|
145
|
+
and **deliberately not descending to UI components** — it is built from a line's own code
|
|
146
|
+
by the people who work in that code. This repo ships only the template. Both are plain
|
|
147
|
+
markdown with **no build pipeline**.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Directory structure
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
zilliz-design-system/
|
|
155
|
+
│
|
|
156
|
+
├── README.md this file
|
|
157
|
+
├── DESIGN.md the agent-readable form of L1
|
|
158
|
+
├── SKILL.md Agent Skills entry point
|
|
159
|
+
├── sources.md source repos + screen map
|
|
160
|
+
├── SYNC.md how values travel in and out of this repo
|
|
161
|
+
│
|
|
162
|
+
├── foundations/ L1 · must be unified
|
|
163
|
+
│ ├── tokens/
|
|
164
|
+
│ │ ├── primitives.css colour / type / spacing / radius / shadow / motion scales
|
|
165
|
+
│ │ ├── semantic.css role names. The only layer components may reference
|
|
166
|
+
│ │ ├── fonts.css Geist @font-face
|
|
167
|
+
│ │ └── print.css CMYK / Pantone (empty — values must be set by a human)
|
|
168
|
+
│ ├── tokens-studio/ W3C DTCG Dark-mode color + typography import package
|
|
169
|
+
│ ├── assets/
|
|
170
|
+
│ │ ├── fonts/ Geist / Geist Mono woff2
|
|
171
|
+
│ │ └── logos/ 312 logos from all four repos, sorted by what
|
|
172
|
+
│ │ ├── README.md a logo is — index, provenance, tinting contract
|
|
173
|
+
│ │ ├── build-browser.py generates the searchable browser page
|
|
174
|
+
│ │ ├── manifest.json machine-readable index
|
|
175
|
+
│ │ ├── zilliz/ products/ ours — never recoloured
|
|
176
|
+
│ │ ├── customers/ global cn jp color
|
|
177
|
+
│ │ ├── partners/ cloud tech
|
|
178
|
+
│ │ └── competitors/ integrations/ sdk/ social/ media/ compliance/ badges/
|
|
179
|
+
│ ├── voice.md voice and copy rules (shared across lines)
|
|
180
|
+
│ ├── interaction.md interaction + a11y rules every line must meet
|
|
181
|
+
│ ├── icon.md 1–1.5px stroke / currentColor / 8–20px
|
|
182
|
+
│ ├── templates/ how to write DESIGN.md and the dependency registry
|
|
183
|
+
│ ├── guidelines/ 23 Colors / Type / Spacing / Brand specimen cards
|
|
184
|
+
│ └── dist/ tokens.css | tokens.json | brand.ase (to be built)
|
|
185
|
+
│
|
|
186
|
+
├── website/ L2 spec · the three web properties
|
|
187
|
+
│ ├── zilliz/ Zilliz website [spec complete]
|
|
188
|
+
│ │ ├── DESIGN.md
|
|
189
|
+
│ │ ├── styles.css entry point — consumers link only this
|
|
190
|
+
│ │ ├── skin/dark.css roles -> dark values + this line's own --z-*
|
|
191
|
+
│ │ ├── skin/light.css roles -> warm off-white light values
|
|
192
|
+
│ │ ├── styles-light.css light entry point (same chain, light skin)
|
|
193
|
+
│ │ ├── layout.css container / rhythm / control sizing / one-off type
|
|
194
|
+
│ │ ├── layout.md the rules and reasoning behind those values
|
|
195
|
+
│ │ ├── tokens.archived.md [archived] pre-migration tokens -> where each went
|
|
196
|
+
│ │ ├── imagery.md isometric renders at 70% opacity
|
|
197
|
+
│ │ ├── dataviz.md the three benchmark greyscale tiers
|
|
198
|
+
│ │ ├── components/ core cards controls data layout (24)
|
|
199
|
+
│ │ ├── ui_kits/website/ click-through home + customers prototype
|
|
200
|
+
│ │ └── assets/ customers testimonials features cta compliance illustrations
|
|
201
|
+
│ ├── milvus/ Milvus website [empty shell]
|
|
202
|
+
│ │ ├── DESIGN.md
|
|
203
|
+
│ │ └── skin/ to be filled in
|
|
204
|
+
│ └── doc/ Doc [empty shell]
|
|
205
|
+
│
|
|
206
|
+
├── cloud/ L2 spec · Zilliz Cloud (SaaS) [empty shell]
|
|
207
|
+
│ ├── DESIGN.md
|
|
208
|
+
│ └── skin/light.css values filled in, pending design sign-off
|
|
209
|
+
└── collateral/ L2 spec · marketing collateral [empty shell]
|
|
210
|
+
slides / whitepapers / booth / meetup art
|
|
211
|
+
architecture diagrams
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Which layers live here, and which live in the business repos
|
|
217
|
+
|
|
218
|
+
**Not one line in this repo is deployed to production.** It produces values and rules —
|
|
219
|
+
the business repos consume them.
|
|
220
|
+
|
|
221
|
+
| What | Maintained where | Form | Who changes it |
|
|
222
|
+
| --- | --- | --- | --- |
|
|
223
|
+
| **L1 foundations** | This repo | CSS custom properties today; `tokens.json` + `.ase` swatches once `dist/` is built | Design, review required |
|
|
224
|
+
| **L1 interaction rules** | This repo | `interaction.md` — acceptance criteria each line implements itself, **no shared code** | Design + Eng, review required |
|
|
225
|
+
| **L2 spec** | This repo | One `DESIGN.md` + `skin/*.css` per line, plus layout / imagery / dataviz rules and a **reference implementation** (`components/`, `ui_kits/`) for design and agents to read | Line design autonomy |
|
|
226
|
+
| **L2 implementation** | **The business repos** | The component code, pages, routes and business logic that actually ship | Line engineering autonomy |
|
|
227
|
+
| **L2 dependency registry** | **The business repos** | `dependency-registry.md`, derived by an agent from that repo's code. This repo ships only the template | Line PM + engineering |
|
|
228
|
+
| **Collateral** | This repo | Print colour standard + Do's & Don'ts + the source of truth templates draw from (finished pieces do not enter the repo) | Design |
|
|
229
|
+
|
|
230
|
+
⚠️ **The 24 components in `website/zilliz/components/` are a reference implementation, not
|
|
231
|
+
production code.** Production code lives in `zilliztech/zilliz.com`. The versions here exist
|
|
232
|
+
so design can see what the spec looks like, so agents have something to write UI against,
|
|
233
|
+
and so token changes have something to run visual regression on.
|
|
234
|
+
|
|
235
|
+
**Not one line of component code moves out of the business repos** — the only change is
|
|
236
|
+
swapping hard-coded colours and sizes for L1 values. That is what Phase 1's "swap tokens,
|
|
237
|
+
touch no components" means.
|
|
238
|
+
|
|
239
|
+
### How this repo connects to a line's component library
|
|
240
|
+
|
|
241
|
+
**L2 is split across both sides.** A line's *spec* — its `DESIGN.md`, its `skin/*.css`, its
|
|
242
|
+
layout / imagery / dataviz rules — is maintained here. The components that actually ship are
|
|
243
|
+
maintained in that line's own repo and stay there. **Values are the only thing that crosses.**
|
|
244
|
+
|
|
245
|
+
⚠️ **Today that crossing is manual.** There is no `package.json` in this repo, nothing is
|
|
246
|
+
published, and `foundations/dist/` is empty — its build script is still on the Phase 0
|
|
247
|
+
checklist. Right now "consuming L1" means a person reads a value out of
|
|
248
|
+
`foundations/tokens/` and writes it into their own code, or a page links
|
|
249
|
+
`website/zilliz/styles.css` straight from a checkout.
|
|
250
|
+
|
|
251
|
+
The intended mechanism, once `dist/` exists:
|
|
252
|
+
|
|
253
|
+
| Layer | What a business repo takes | What it does with it |
|
|
254
|
+
| --- | --- | --- |
|
|
255
|
+
| **L1** | `tokens.css` / `tokens.json` | Its components reference `--ds-*` role names instead of hex values. **This is all of Phase 1.** |
|
|
256
|
+
| **L1 rules** | `voice.md` / `icon.md` / `interaction.md` | Written standards its own code is held to; nothing is imported |
|
|
257
|
+
| **L2** | **Nothing** | A line's `DESIGN.md` and `skin/` are read by its designers and agents; no code imports them |
|
|
258
|
+
|
|
259
|
+
**Nothing enforces any of this yet** — no lint rule, no CI check, no version contract tying
|
|
260
|
+
a business repo to a token version. That gap is the deliberate cost of L2 autonomy at the
|
|
261
|
+
component level, but the L1 half of it is worth closing; it is on the list below.
|
|
262
|
+
|
|
263
|
+
### Which layer each Agent Skill file belongs to
|
|
264
|
+
|
|
265
|
+
| File | Layer | Notes |
|
|
266
|
+
| --- | --- | --- |
|
|
267
|
+
| The root `DESIGN.md` | **L1** | Ramps, type scale, spacing, radii, role list; declares `omitted` for components |
|
|
268
|
+
| A line's `DESIGN.md` | **L2** | That line's role values + the `components` section + its own Do's & Don'ts |
|
|
269
|
+
| `dependency-registry.md` | **L2**, in each line's own repo | Per line, never merged, derived from that line's code. See below |
|
|
270
|
+
|
|
271
|
+
**Behaviour has no place in DESIGN.md** — the official spec's `components` section carries only
|
|
272
|
+
visual properties (`backgroundColor` / `textColor` / `typography` / `rounded` / `padding` /
|
|
273
|
+
`size` / `height` / `width`) and cannot express behaviour. That is expected, not a defect.
|
|
274
|
+
|
|
275
|
+
#### The dependency registry is L2, on the business-repo side
|
|
276
|
+
|
|
277
|
+
It is per line and never merged — which is exactly what L2 means. It is not *implementation*;
|
|
278
|
+
it is a third thing living on the same side of the boundary, in the line's own repo, for
|
|
279
|
+
three reasons:
|
|
280
|
+
|
|
281
|
+
1. **It is derived from that repo's code.** An agent builds it by scanning the line's own
|
|
282
|
+
codebase, and rescanning after a change is what keeps it current. It cannot be derived
|
|
283
|
+
from anywhere else, so it cannot usefully live anywhere else
|
|
284
|
+
2. **It records feature entanglement, not design knowledge** — a different thing from tokens
|
|
285
|
+
and component appearance
|
|
286
|
+
3. **Its scope is a single product line** — `scope: cluster-create` is Cloud's; Doc has its
|
|
287
|
+
own. They are independent, and there is no reason to merge them
|
|
288
|
+
|
|
289
|
+
**PRD is the query, not the data entry.** A requirement arrives, an impact pass runs against
|
|
290
|
+
the registry, and the result goes to design, PM and QA. Nobody fills in a column at review
|
|
291
|
+
time.
|
|
292
|
+
|
|
293
|
+
This repo provides only the **[template](./foundations/templates/dependency-registry.template.md)**.
|
|
294
|
+
Each line copies it, puts it in its own repo, and maintains it there.
|
|
295
|
+
|
|
296
|
+
⚠️ `cloud/dependency-registry.seed.md` is **staged**: 13 entries derived from the real
|
|
297
|
+
`cloud-client` code are captured there, to be moved into the Cloud business repo once there
|
|
298
|
+
is a place for them. It does not stay here.
|
|
299
|
+
|
|
300
|
+
Templates: [`foundations/templates/`](./foundations/templates/).
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Tokens · target shape
|
|
305
|
+
|
|
306
|
+
**Two layers, one rule: a component may only reference `--ds-*` — never a raw ramp value,
|
|
307
|
+
never a hard-coded hex.** The 24 existing components are mid-migration and still reference
|
|
308
|
+
`--z-*`; `skin/dark.css` bridges the two sets of names until Phase 1 ends. **The rule binds
|
|
309
|
+
every new component.**
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
foundations/tokens/primitives.css colour / type / spacing / radius / shadow / motion — values only, no usage
|
|
313
|
+
foundations/tokens/semantic.css role names — usage only, no values
|
|
314
|
+
↓ each line assigns
|
|
315
|
+
website/zilliz/skin/dark.css Zilliz website, dark
|
|
316
|
+
website/zilliz/skin/light.css Zilliz website, light (warm off-white ground)
|
|
317
|
+
cloud/skin/light.css Zilliz Cloud, light
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The dark and light skins **implement the same role names** with different values — a
|
|
321
|
+
component never needs to know which skin it is running under. The entry points are
|
|
322
|
+
`styles.css` (dark) and `styles-light.css` (light).
|
|
323
|
+
|
|
324
|
+
Import order is precedence, as set in `website/zilliz/styles.css`:
|
|
325
|
+
`fonts -> primitives -> semantic -> skin/dark -> layout`.
|
|
326
|
+
|
|
327
|
+
### The role list
|
|
328
|
+
|
|
329
|
+
| Group | Roles |
|
|
330
|
+
| --- | --- |
|
|
331
|
+
| **Surfaces** | `surface-page` `surface-raised` `surface-overlay` `surface-sunken` `surface-hover` `surface-active` `surface-tab-group` |
|
|
332
|
+
| **Text** | `text-primary` `text-secondary` `text-tertiary` `text-muted` `text-faint` `text-inverse` `text-code` |
|
|
333
|
+
| **Borders** | `border-subtle` `border-default` `border-strong` `border-hover` **`border-focus`** |
|
|
334
|
+
| **Accent** | `accent` `accent-hover` `accent-subtle` `accent-on` `accent-glow` |
|
|
335
|
+
| **Status** | `danger` `warning` `success` `info` — shared across lines, identical values |
|
|
336
|
+
|
|
337
|
+
`border-focus` is **new**. Exactly one focus ring exists today — `FeatureCard`'s, added
|
|
338
|
+
during the upstream alignment (`layout.css` `.z-feature-card:focus-visible`). Every other
|
|
339
|
+
component still has none.
|
|
340
|
+
|
|
341
|
+
### Why the semantic layer is necessary
|
|
342
|
+
|
|
343
|
+
The old `tokens/colors.css` already had 7 semantic aliases at the bottom, but all of them
|
|
344
|
+
were hard-bound to dark:
|
|
345
|
+
|
|
346
|
+
```css
|
|
347
|
+
--z-bg-page: var(--z-black); /* #0e0e0e */
|
|
348
|
+
--z-accent: var(--z-cyan); /* #97fdff */
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
The same file also held the legacy blues the SaaS product uses (`--z-digital-blue: #175fff`,
|
|
352
|
+
`--z-btn-blue: #3f46ff`) alongside the light neutrals (`--z-gray-1..4`) — **the site does not
|
|
353
|
+
use them; they were simply carried over wholesale from `variables.css`.** That is what "two
|
|
354
|
+
systems sharing one variable table and each taking half of it" looks like in practice.
|
|
355
|
+
|
|
356
|
+
The role layer exists so that dark and light **each implement the same set of names**, and
|
|
357
|
+
component code never has to know which line it is running on.
|
|
358
|
+
|
|
359
|
+
### Three splits, already done
|
|
360
|
+
|
|
361
|
+
| Was | Split into |
|
|
362
|
+
| --- | --- |
|
|
363
|
+
| `tokens/colors.css` | Ramps -> `foundations/tokens/primitives.css` (24 `--z-neutral-*` steps + 3 `--z-cyan-*`); the **decisions** — `#0e0e0e`, cyan, `#1a1a1a` — -> `website/zilliz/skin/dark.css` |
|
|
364
|
+
| `tokens/typography.css` | `new-h1…h6` / `new-body1…6` / weights / tracking -> `primitives.css`; the one-off sizes such as `--z-hero-title-*` -> `website/zilliz/layout.css` (rules in `layout.md`) |
|
|
365
|
+
| `tokens/spacing.css` | `--z-gap-*` `--z-radius-*` -> `primitives.css`; `--z-container-max` `--z-section-y` `--z-header-h` `--z-*-pad` -> `website/zilliz/layout.css` |
|
|
366
|
+
|
|
367
|
+
From `tokens/effects.css`, the **shadows and durations** (`--z-shadow-*` / `--z-dur-*`) went
|
|
368
|
+
into `primitives.css`; **all 9 gradients** stayed in `website/zilliz/skin/dark.css` — they are
|
|
369
|
+
specific marketing visual decisions.
|
|
370
|
+
|
|
371
|
+
### Two deviations from the original plan
|
|
372
|
+
|
|
373
|
+
1. **`website/zilliz/layout.css` is a new file.** The original plan folded the layout
|
|
374
|
+
constants into `layout.md`, but 24 components reference variables like
|
|
375
|
+
`--z-container-max`, and **CSS cannot reference markdown**. So the values live in
|
|
376
|
+
`layout.css` and the rules and reasoning live in `layout.md`. Both exist.
|
|
377
|
+
|
|
378
|
+
2. **`website/zilliz/skin/dark.css` keeps the full set of old `--z-*` names**, because
|
|
379
|
+
components are frozen until the end of Phase 1 and still reference them: 20 of the 22
|
|
380
|
+
component files use `--z-*`, and 15 of those already use `--ds-*` alongside it. The skin
|
|
381
|
+
bridges both sets until the migration finishes.
|
|
382
|
+
Wherever L1 already has the step, the skin only aliases it
|
|
383
|
+
(`--z-surface-2: var(--z-neutral-905)`); literal values appear only where the value is
|
|
384
|
+
genuinely this line's own decision.
|
|
385
|
+
**145 of the 161 pre-migration `--z-*` names still resolve** (verified); the other 16
|
|
386
|
+
are the retired legacy light palette. Three of the 145 changed value during the upstream
|
|
387
|
+
alignment. Full mapping: [`website/zilliz/tokens.archived.md`](./website/zilliz/tokens.archived.md).
|
|
388
|
+
New components use `--ds-*` only.
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Why there is no shared behaviour layer
|
|
393
|
+
|
|
394
|
+
An earlier draft had a third layer between foundations and the product lines: one headless
|
|
395
|
+
library of Dialog / Select / Tabs behaviour that every line would import. **It was evaluated
|
|
396
|
+
and dropped.**
|
|
397
|
+
|
|
398
|
+
**Behaviour is not unifiable enough to be worth it.** Doc's tooltip and Cloud's tooltip
|
|
399
|
+
differ in hover delay, in what dismisses them and in whether they can hold interactive
|
|
400
|
+
content — real differences, not styling. Forcing them onto one implementation grows the
|
|
401
|
+
twelve-variant component this system exists to avoid, which is the same argument that keeps
|
|
402
|
+
appearance out of the shared layer. Three further facts pointed the same way: the highest
|
|
403
|
+
value candidates (Dialog, Select, Tooltip) exist on no line today, so it would have been new
|
|
404
|
+
code rather than an extraction; nothing in the split was clean, with `Collapse`'s
|
|
405
|
+
`aria-expanded` generic while its 500ms transition is the site's; and skipping it costs
|
|
406
|
+
nothing at the foundations level. Adobe's Consonant makes the same call.
|
|
407
|
+
|
|
408
|
+
**Each line writes its own components, behaviour included.**
|
|
409
|
+
|
|
410
|
+
⚠️ **But part of behaviour is not a matter of taste.** Focus order, keyboard reachability
|
|
411
|
+
and ARIA semantics are identical wherever they appear, are hard to get right, and getting
|
|
412
|
+
them wrong is a defect rather than a difference of style. Dropping the shared layer must not
|
|
413
|
+
drop those. They are now an **L1 written standard**:
|
|
414
|
+
**[`foundations/interaction.md`](./foundations/interaction.md)** — acceptance criteria each
|
|
415
|
+
line implements itself and is measured against. No shared code, one shared bar.
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Status by line
|
|
420
|
+
|
|
421
|
+
| Line | What it is | L1 | L2 spec | Notes |
|
|
422
|
+
| --- | --- | --- | --- | --- |
|
|
423
|
+
| **website/zilliz** | Zilliz website | ✅ split out | **complete** | 24 components + 2 screen prototypes + all assets |
|
|
424
|
+
| **website/milvus** | Milvus website | to be wired up | empty shell | Open-source register is deliberately distinct from the commercial site; not folded into `website/zilliz/` |
|
|
425
|
+
| **website/doc** | Doc | to be wired up | empty shell | Will consume L1 plus a small pattern set of its own |
|
|
426
|
+
| **cloud** | Zilliz Cloud (SaaS) | to be wired up | `DESIGN.md` + light skin only | `skin/light.css` has real values pending design sign-off; 13 registry entries staged. Phase 1 swaps tokens only; components untouched |
|
|
427
|
+
| **collateral** | Marketing collateral | values TBD | empty shell | Slides / whitepapers / booth / meetup art / architecture diagrams; `#97fdff` is outside the CMYK gamut and needs a human-set value plus a press proof |
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## To do
|
|
432
|
+
|
|
433
|
+
**Phase 0**
|
|
434
|
+
|
|
435
|
+
- [x] `foundations/voice.md` — **zero engineering work, usable by every line today**
|
|
436
|
+
- [x] `foundations/tokens/semantic.css` — the role list (values filled in per line)
|
|
437
|
+
- [x] `website/zilliz/skin/dark.css` — mapping complete, every value taken from the pre-migration `colors.css`
|
|
438
|
+
- [x] `foundations/tokens-studio/` — importable Dark-mode color and typography foundations for Figma
|
|
439
|
+
- [x] `tokens/{colors,typography,spacing,effects}.css` split three ways per the table above
|
|
440
|
+
- [x] The root `DESIGN.md` (L1 only, `omitted` for components) + `website/zilliz/DESIGN.md`
|
|
441
|
+
- [x] 13 dependency-registry entries captured from real code (staged in `cloud/dependency-registry.seed.md`)
|
|
442
|
+
- [ ] Move those entries into the Zilliz Cloud business repo — **needs a location from Eng**
|
|
443
|
+
- [x] The light ramps (`--z-warm-*` / `--z-ink-*` / `--z-blue-*` / `--z-teal-*`) + `website/zilliz/skin/light.css` + `cloud/skin/light.css`
|
|
444
|
+
- [ ] `cloud/skin/light.css` **pending design sign-off** — the values were derived from the site's light skin, not extracted from the existing SaaS UI
|
|
445
|
+
- [ ] Fill in `website/milvus/skin/` — the shell exists; **the relationship between the Milvus and Zilliz brand colours is undecided**
|
|
446
|
+
- [ ] Set the values in `foundations/tokens/print.css` — **needs a press proof; not solvable in code**
|
|
447
|
+
- [ ] The `foundations/dist/` build script (tokens.css / tokens.json / brand.ase)
|
|
448
|
+
- [ ] **Decide how a business repo actually consumes L1** — package name, versioning and
|
|
449
|
+
whether anything enforces it. Nothing is published today and nothing checks adherence
|
|
450
|
+
|
|
451
|
+
**Needs cleanup (flagged only; content untouched for now)**
|
|
452
|
+
|
|
453
|
+
- [ ] `foundations/icon.md` — the footer social icons are Simple Icons CDN substitutes, not the brand's own paths
|
|
454
|
+
- [ ] `sources.md` — `/zilliz-agent` does not exist anywhere in the 3,905-file repo snapshot; the screen map marks it *(not built)*
|
|
455
|
+
- [ ] Near-duplicate steps in the `primitives.css` ramps (`neutral-600`/`595`, `815`/`810`, `865`/`864`) — consolidate in Phase 1
|
|
456
|
+
- [x] The legacy blue **values** are promoted to L1 as `--z-blue-*` (the light skins' accent); only the old-name aliases remain in the dark skin
|
|
457
|
+
- [x] The legacy light set (`--z-gray-*` cold greys + the old blue names) is **retired wholesale**, preserved verbatim in `website/zilliz/tokens.archived.md`. There is now exactly one light palette
|
|
458
|
+
|
|
459
|
+
**Out of scope**
|
|
460
|
+
|
|
461
|
+
- Do not push changes back to upstream `zilliz.com`
|
|
462
|
+
- Do not merge L2
|
|
463
|
+
- Do not touch components before Phase 1 ends
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Sources
|
|
468
|
+
|
|
469
|
+
Full version in [`sources.md`](./sources.md). Summary:
|
|
470
|
+
|
|
471
|
+
- **Distilled from**: `keirazhang-droid/zilliz.com` @ `main`, reading `packages/zilliz.com` and `packages/components/styles`
|
|
472
|
+
- **Upstream public repo**: `zilliztech/zilliz.com` — **no changes are pushed back**
|
|
473
|
+
- **Last sync**: 2026-08-19T12:06Z
|
|
474
|
+
- **`/zilliz-agent` was not built** — no matching route, page part or i18n namespace exists in the 3,905-file repo snapshot
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/* Self-hosted Geist / Geist Mono (latin subsets), copied from zilliz.com public/fonts */
|
|
2
|
+
@font-face{font-family:'Geist';font-style:normal;font-weight:400 700;font-display:swap;src:url('../assets/fonts/geist-sans-latin-v5.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|
|
3
|
+
@font-face{font-family:'Geist';font-style:normal;font-weight:400 700;font-display:swap;src:url('../assets/fonts/geist-sans-latin-ext-v5.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
|
|
4
|
+
@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400 700;font-display:swap;src:url('../assets/fonts/geist-mono-latin-v5.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|
|
5
|
+
@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400 700;font-display:swap;src:url('../assets/fonts/geist-mono-latin-ext-v5.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
|