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/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
@@ -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}