| version | 0.2.0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| name | Kilo Cloud | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| description | Dark-first, utilitarian developer surface for Kilo Code. Near-black layered surfaces and low-alpha white borders carry hierarchy. Kilo yellow-green is both brand and primary action color. Blue is reserved for links and the Cloud status domain. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| color |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| statusDomain |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| radius |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
Trustworthy infrastructure tool, not a generic SaaS dashboard. Kilo Cloud is the developer-facing product around Kilo Code. It manages organizations, usage and billing, agent sessions, and developer operations. Product UI is dark-first, compact, and utilitarian: dense tables, calm chrome, low ornamentation, and concrete language.
The cloud-agent surface may use terminal typography, syntax color, a restrained brand focus glow, and inset surfaces. Elsewhere, utility takes precedence over decoration.
Three rules ground every screen.
- Build depth with the surface ladder. Use
surface.backgroundfor the app canvas,surface.raisedfor cards and shell chrome,surface.overlayfor floating UI, andsurface.insetfor terminal or recessed regions. Usesurface.hoverandsurface.selectedonly for interaction states. - Use low-alpha white borders.
border.defaultis standard chrome;border.strongdistinguishes inputs and emphasized boundaries. Do not introduce solid gray borders. - Yellow acts; neutrals carry everything else.
brand.primaryis both brand and primary action color. Use one primary action per surface. Blue is for inline links and the Cloud status domain, not button backgrounds.
The six surface tokens have fixed roles:
| Token | Value | Role |
|---|---|---|
surface.inset |
#101010 |
Terminal, code, and recessed regions |
surface.background |
#151515 |
App canvas |
surface.raised |
#202020 |
Cards, sidebar, dialogs, persistent chrome |
surface.overlay |
#333333 |
Popovers, dropdowns, tooltips |
surface.hover |
#3A3A3A |
Pointer and ghost-control hover |
surface.selected |
#454545 |
Selected rows, active neutral controls |
Stack surfaces by role. Do not substitute arbitrary grays, gradients, or per-component surface colors. Floating UI may use a restrained shadow, but normal hierarchy comes from surface changes and borders.
foreground.defaultis default text.foreground.mutedis secondary copy and metadata.foreground.subtleis tertiary or disabled copy. Confirm contrast before using it for essential information.foreground.onSecondaryis text on neutral action surfaces.foreground.onDestructiveis text on destructive fills.border.defaultis the standard 10%-white boundary.border.strongis the 18%-white emphasized boundary.border.inputBgis a recessed input fill, not a border color.
Never use color alone to communicate state. Pair status color with labels, icons, or other visible structure.
brand.primary (#F7F586) is scarce and load-bearing. Reserve it for the logo, one primary CTA per surface, and deliberate brand moments. Use brand.foreground (#1F1F1F) on primary fills. Hover darkens to brand.primaryHover (#E6E475). Keyboard focus uses brand.primaryRing (#F7F58659) or the semantic focus-ring token supplied by the implementation.
Secondary actions use neutral surfaces and foreground.onSecondary. Ghost actions have no fill at rest and use surface.hover on hover. Destructive actions use red only when semantics are destructive; prefer reversible undo flows over confirmation dialogs when possible.
Status colors are assigned by domain, never by mood:
| Domain | Family |
|---|---|
| Cloud | Blue |
| VS Code | Purple |
| CLI | Gray |
| Slack | Teal |
| Agent Manager | Orange |
| Success | Green |
| Warning | Yellow |
| Destructive | Red |
Use the 500 step as the base swatch, 400 for dark-surface foreground emphasis, 300 for lighter emphasis, and 600 for darker interaction or high-emphasis states. Status badges may compose a low-alpha 500 background and border with 400 text. Preserve a non-color cue and verify contrast in context.
Do not invent status hues or substitute emerald for teal or zinc for gray. Blue remains acceptable for inline links, but not primary action fills.
Use syntax tokens only in code, terminal, and editor-like surfaces:
syntax.plainfor unclassified source text.syntax.commentfor comments and de-emphasized code.syntax.keyword,syntax.string,syntax.number,syntax.function,syntax.type,syntax.property,syntax.constant, andsyntax.operatorfor their matching grammar scopes.
Diffs use diff.addText on diff.addSurface and diff.deleteText on diff.deleteSurface. Always retain +/- markers or equivalent structure so additions and deletions do not depend on color alone.
Use Inter for UI and Roboto Mono for code, identifiers, terminal output, timestamps, and dense numerical data. Do not introduce another family. JetBrains Mono may remain on existing editor-specific surfaces, but it is not part of this token contract.
The product scale is intentionally compact:
title: page titles,24px / 600 / 1.2.heading: section and card headings,18px / 600 / 1.25.bodyLg: lead or emphasized prose,16px / 400 / 1.5.body: default product copy,14px / 400 / 1.5.label: controls, compact metadata, and badges,12px / 500 / 1.4.eyebrow: short uppercase category labels,11px / 500 / 1.2, with0.08emtracking.code: code and terminal text,14px / 400 / 1.5.
Use sentence case for user-visible copy. Eyebrows are the exception because the token explicitly transforms them to uppercase. Use tabular-nums for values aligned in columns. Do not use monospace as prose emphasis.
Use the supplied 4px-based spacing ladder. spacing.2, spacing.3, spacing.4, and spacing.6 cover most product layout. spacing.8, spacing.10, and spacing.12 create section separation. spacing.0_5 and spacing.1_5 are for tight optical adjustments and compact component internals, not general page layout.
- Topbar height is
56px; useborder.defaultalong its lower edge. - Expanded sidebar width is
256px; use the existing sidebar primitive for responsive collapse. - Default page padding and card padding are
24px. - Default controls are
36pxtall; small and large variants may use32pxand40px. - Table rows target
48pxin dense desktop UI. - Prefer
gapover ad hoc margins. - Never nest cards. Use spacing, dividers, headings, or inset regions for internal grouping.
Product UI must reflow at narrow widths. Test around 375px, 768–1024px, and 1440px. Required actions cannot depend on hover. On touch surfaces, preserve at least a 44px target even when the visual control is compact.
Use radius by role:
radius.nonefor edge-to-edge or intentionally square regions.radius.sm(4px) for tight chips and compact inline elements.radius.md(8px) for buttons and inputs.radius.lg(10px) for popovers and medium containers.radius.xl(14px) for cards and dialogs.radius.fullfor badges, avatars, and status pills.
Do not introduce one-off radii. Follow existing shadcn primitives when their semantic radius already matches these roles.
Buttons. Primary uses brand.primary with brand.foreground, once per surface. Secondary uses surface.overlay, foreground.onSecondary, and border.default. Ghost uses no fill at rest and surface.hover on hover. Destructive uses status.red500, darkening to status.red600. Do not scale buttons on press.
Cards. Use surface.raised, border.default, radius.xl, and 24px padding. Cards represent distinct content or interaction boundaries, not every grouping.
Inputs. Use border.inputBg, border.strong, radius.md, and visible labels. Focus must remain visible. Errors pair a red boundary or icon with explanatory text connected through aria-describedby.
Status badges. Use the fixed domain mapping, a full radius, and typography.label. Include text or an icon so meaning survives color-vision differences.
Sidebar. Use surface.raised, sidebar semantic tokens where available, and foreground.muted for inactive items. Active rows use surface.selected; hover uses surface.hover. Use the existing responsive sidebar or Sheet behavior instead of creating another mobile navigation tree.
Topbar. Use surface.background, border.default, and a 56px height. Keep primary page actions in page content rather than persistent chrome.
Overlays. Popovers and menus use surface.overlay; dialogs use surface.raised. Build them with existing Radix and shadcn primitives for focus trapping, keyboard navigation, dismissal, portals, and stacking.
Terminal and code. Use surface.inset, typography.code, and the syntax palette. Disable ligatures where exact glyph representation matters. Diff views use the dedicated diff tokens.
Every interactive component must account for default, hover, focus-visible, active, disabled, loading, error, and success states where relevant. Hover is supplementary. Focus indicators need at least 3:1 contrast against adjacent colors and must not be removed without a replacement.
Product motion is short and functional. Use opacity and transform transitions around 100–200ms for direct feedback and 200–300ms for overlays or state changes. Reuse the established strong ease-out curve. Avoid bounce, elastic motion, and casual animation of layout properties.
Brand flourishes belong only in deliberate brand moments. Respect prefers-reduced-motion; preserve function while removing nonessential movement. Use existing Radix/shadcn transitions for dialogs, dropdowns, sheets, and tooltips.
Kilo voice is clear, technical, calm, and direct. Use concrete verbs and specific nouns. Buttons use verb + object (Save changes, Create workspace, Delete project) rather than Submit, OK, or Yes. Error copy states what happened and what the user can do next. Do not use hype, jokes in errors, emoji in product chrome, or inconsistent terminology.
Do
- Use semantic implementation tokens that map to this contract before raw hex values.
- Build hierarchy with the six-role surface ladder and low-alpha borders.
- Keep brand yellow-green scarce and reserve it for primary action and brand roles.
- Use fixed domain mappings for statuses.
- Use syntax and diff colors only on code-oriented surfaces.
- Use Inter for UI, Roboto Mono for code and aligned technical data.
- Preserve keyboard, screen-reader, reduced-motion, touch, and responsive behavior.
Don't
- Use pure black, gradients, or arbitrary surface grays.
- Put multiple yellow primary buttons on one surface.
- Use blue as a primary button background.
- Rename teal to emerald or gray to zinc in the token contract.
- Invent status colors, spacing values, radii, or typography roles.
- Nest cards or use shadows as the default source of depth.
- Depend on color, hover, placeholders, or icon shape alone to convey meaning.