| version | alpha | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| name | Kilo Cloud | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| description | Dark-first, utilitarian developer surface for Kilo Code — the open-source AI coding agent. Near-black backgrounds, white-at-low-alpha borders. The Kilo yellow-green is the primary action color — it's the brand and the CTA at once. Blue is a legacy link/inline-accent role only. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rounded |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
Trustworthy infra tool, not a marketing site. Kilo Cloud is the developer-facing web product around Kilo Code, an open-source AI coding agent that lives primarily as a VS Code / JetBrains extension. The cloud surface manages organizations, usage and billing, headless agent sessions, and developer ops. The aesthetic is dark-first, near-black, utilitarian — dense tables, calm chrome, low ornamentation. Speak to developers in second person, plain English, with concrete nouns.
The single concession to atmosphere is the cloud-agent chat surface — terminal-styled mono, a thin yellow-green focus glow, glass on sticky chrome. Everywhere else: utility over delight.
Three rules to ground every screen.
- Never pure black, never a gradient. Background is
#121212. Cards step up to#2B2B2B. The lift comes from a one-step background change plus a 10%-white border, not from drop shadows or blur. - Borders are white at low alpha. This is the single most characteristic move.
#FFFFFF1Aon every card,#FFFFFF2Eon every input. No solid grey borders. - Yellow acts. Greys carry everything else. The Kilo yellow-green (
#EDFF00) is the primary action color — brand and CTA collapsed into one swatch. Use it exactly once per surface for the thing the user is here to do, and again atmospherically for the logo tile, focus ring, text selection, and agent-surface glow. Secondary actions are dark gray. Blue is a legacy link role only — never a button background.
Foundations are a four-step near-black ladder. background → surface → surface-raised → muted. Compose UI by stacking surfaces against background; the visual hierarchy is built from value steps, not color shifts. Cards sit on background. Popovers sit on cards. Inputs sit inside cards but drop down into translucency (input-bg is white-on-card at 4% — a recess, not a lift).
background(#121212) — the app canvas. Always behind everything. Never gradient, never patterned.surface(#2B2B2B) — cards, sidebar, dialogs, sticky chrome. The default container.surface-raised(#333333) — popovers, tooltips, menus. One step above cards.muted(#3D3D3D) — hover states on rows and ghost buttons. Inactive tab backgrounds.
Foreground is a three-step white ladder. Body text is near-white (#FAFAFA), not pure white — pure white vibrates against #121212. Use foreground-muted (#A3A3A3) for secondary text, captions, and metadata. foreground-subtle (#7A7A7A) is for disabled and tertiary copy only.
Borders carry the elevation. White at 10% alpha for the default border, 18% for inputs and focused chrome. Because borders are translucent, they read correctly on every surface step without needing per-context overrides. Never use a solid grey for borders.
Action hierarchy is colored, not sized.
primary(#EDFF00) — the Kilo yellow-green. The primary action color and the brand mark — they're the same swatch. Used exactly once per surface for the thing the user is here to do (Create session, Save, Install, Continue). Hover darkens to#D6E600(not lighter, not translucent). The on-color is near-black (#1F1F1F); white text on yellow fails AA.secondary(#3D3D3D) — dark-gray with white text and a 10%-white border. The workhorse. Use freely.ghost— underlined white text, no chrome at rest. The decoration is the affordance:text-decoration-color: rgba(255,255,255,0.35)at rest, opaque on hover. For inline links, table-row actions, and dialog Cancel buttons.destructive(red-500) — red fill, white text. Only inside dialogs and confirm flows. Never on a primary listing screen.link(#3B82F6) — legacy blue, inline only. Used for links inside running prose. Never a button background, never a section accent.
Status colors follow one rigid pattern. Every status badge is bg-{color}-500/20 text-{color}-400 ring-1 ring-{color}-500/20. The translucent fill + matching ring + brighter foreground is the system's most recognizable micro-pattern. Color assignments are fixed by domain, not by mood:
| Color | Domain |
|---|---|
| Blue | Cloud sessions (neutral default) |
| Purple | VS Code Extension |
| Zinc | CLI |
| Emerald | Slack |
| Orange | Agent Manager |
| Green | Success, "new" badges |
| Yellow | Warnings |
| Red | Destructive, errors |
Do not invent new status hues. Do not use status colors outside this badge pattern (e.g. don't use red-500 as a button background — use destructive semantics through the dialog system).
Two faces, with discipline. Inter for all UI. Roboto Mono for code, terminal output, agent tool readouts, dollar amounts in dense tables, and timestamps. Never mix mono into prose UI for emphasis — emphasis is weight (500/600), not face.
Default body is 14px / 1.5. This is the floor for everything that isn't a heading or a label. Page titles use tracking-tight (-0.015em) — Inter at 24px+ is too wide-set without it. Eyebrows are uppercase + tracking-wide (0.06em).
Heading scale is compact. This is a dashboard, not a marketing page. Page-level h1 is 30px / 700. The display size (48px) is reserved for empty-state hero moments and onboarding — not normal app chrome.
Casing is sentence case for everything user-visible. Buttons, nav, section titles, badges. Title Case is wrong. The exceptions are the eyebrow style (uppercase tracking-wide) and the rare role badge (KILO ADMIN).
Numbers in dense data lean mono. Dollar amounts, latencies, token counts, timestamps in the audit log — all Roboto Mono. This is functional, not decorative: mono digits align across rows.
Shell is sidebar + main, both dark, with a sticky topbar. Sidebar is fixed 256px expanded, 48px icon-only collapsed. The toggle is cmd/ctrl+B. State persists via cookie.
- Topbar —
56pxtall,border-b(the 10%-white border), single breadcrumb on the left, sidebar toggle on the right. Sticky. - Page content —
w-full flex-1under the topbar. Page-level padding is24px. - Card stacks — dashboards are vertical stacks of
Cardcomponents withgap-y-6(24px). No multi-column page-level grids; multi-column lives inside a card.
Spacing is a 4px ladder. Pull from the spacing scale; do not invent intermediate values. 2/3/4/6 (8/12/16/24px) covers ~90% of layout decisions. 8/10/12 (32/40/48px) is for section gaps and empty-state breathing room. Anything tighter than 2 is a bug — except for 0-5 (2px) which exists for icon-text optical alignment.
Density is compact. Buttons are 36px tall by default, 32px for the small variant. Inputs match buttons at 36px. Table rows are 48px. Cards get 24px of inner padding. This is a tool that admins live in for hours; sparseness wastes their time.
Lift is a value step, not a shadow. Cards aren't elevated by drop-shadow — they're elevated by being one step lighter than background plus a 10%-white border. This is the system's signature. Reach for shadows only when an element genuinely floats above the page (popover, tooltip, dialog).
shadow-xs— used on inputs to suggest a recessed depth. Whisper-soft.shadow— used on default cards in rare cases (focus, drag).shadow-md— popovers, tooltips, dropdowns.shadow-lg— dialogs over thebg-black/80overlay.
Glass is reserved for sticky chrome. backdrop-blur-xl only on the topbar lockup or persistent overlays. Never on cards or content surfaces — translucent content surfaces become unreadable in dense tables.
The agent surface gets one extra move: the brand glow. A thin yellow-green inner shadow on focused composers and live-streaming chrome (0 0 24px {colors.brand}/35%). Does not appear in dashboards, billing, or admin.
Five radii, applied by role.
rounded.sm(6px) — controls. Buttons, inputs, badges, status pills, menu items.rounded.md(8px) — popovers, dropdowns, secondary surfaces.rounded.lg(10px) — cards in non-dashboard contexts (auth, marketing).rounded.xl(14px) — the dashboardCard. The most common surface.rounded.full— avatars and the rare pill nav.
Never round above xl for a card; never round below sm for a control. The system gets its calm cohesion from radius consistency.
The token table above defines the canonical surface. Notes on application:
Buttons. button-primary is the yellow CTA with near-black text — one per surface. button-secondary is the dark-gray workhorse on cards. button-ghost is underlined white text with no chrome at rest — for inline links, table-row actions, and dialog Cancel. button-destructive is red, only inside dialogs. Press states are not represented by transforms — buttons don't shrink or scale. Disabled is opacity-50 + pointer-events-none. Focus is the brand-glow ring (#EDFF00 at 35% alpha) on :focus-visible only — never on hover.
Card. Always surface background, always 10%-white border, always rounded.xl, always 24px padding. The header gets pb-2 (less bottom padding) so the title sits closer to its content.
Input. Translucent fill (input-bg), 18%-white border, rounded.sm, 36px tall. Focus state adds the brand yellow-green halo via :focus-visible — never via hover. Errors flip the border to destructive and surface a description below.
Status badges. The translucent /20 pattern is non-negotiable. Layout: gap-1 between icon and label, label in sentence case, icon in size-3 (12px) — smaller than other inline icons because the badge itself is small.
Sidebar. Fixed 256px. Section headers are eyebrow-style uppercase + tracking-wide. Active row gets accent background, inactive rows get accent only on hover. Icon at size-4, label at body-strong. The Kilo logo lives at the top in a 40×40 brand tile.
Topbar. Single breadcrumb, no logo (the logo lives in the sidebar). Right side gets the sidebar toggle, a search omnibox, and an avatar. Never put primary actions in the topbar — those belong in the page body.
Dialog. bg-black/80 overlay, centered card, max width 28rem for confirms / 40rem for forms. Close button is a ghost icon button in the top-right. Primary action is on the right of the footer, secondary on the left of that; cancel is a ghost button on the left of the footer.
Terminal / agent. background color (not surface — terminals stay flush with the canvas), Roboto Mono, text-sm. Streaming output is rendered with a blinking caret. Tool-call cards inside the chat are surface cards with a 12-px icon + tool name eyebrow + a one-line summary.
Do
- Stack value, not color. Build hierarchy by stepping
background → surface → surface-raised, not by tinting. - Use the brand yellow for the primary action. One per surface. Earn it.
- Use translucent borders everywhere. White at 10% / 18% — never solid grey.
- Use Roboto Mono for numbers in dense data. Tables, billing, audit logs, latencies.
- Stick to sentence case for all user-visible copy. Including buttons.
- Use Lucide for every icon. 1.5–2px stroke, 16px in buttons / badges, 16–20px elsewhere.
- Apply the translucent /20 pattern for every status badge. No exceptions.
- Let cards lift via border + value step. Reach for shadows only for floating chrome.
Don't
- Don't use pure black or gradients for backgrounds. Always
#121212, always flat. - Don't put more than one yellow button on a screen. If you feel the urge, the second one is a
button-secondary. The yellow has to stay scarce to keep its meaning. - Don't use blue as a button background. Blue is reserved for inline links inside running prose. The primary action is yellow.
- Don't introduce new status hues. The eight assigned colors cover the entire taxonomy.
- Don't use emoji in product chrome. Lucide only. Emoji are reserved for user-authored content.
- Don't add per-element drop shadows to cards. The border + value step does the lift.
- Don't mix Inter and Roboto Mono in the same line of running text. Mono in tables, code, terminals — never as inline emphasis.
- Don't use Title Case anywhere user-facing. Sentence case throughout.
- Don't tint borders to convey state. State changes background (
mutedon hover), not the border color.