--- name: kumo-design description: Cloudflare product design guidance. Use when designing, implementing, or reviewing Cloudflare dashboard interfaces, Kumo UI, responsive styling, dialogs, or frontend tests. --- # Cloudflare Design Apply these rules when designing, implementing, or reviewing Cloudflare product interfaces. Follow recommended examples and avoid patterns marked as examples to avoid. ## Rules ### `content-text-size` Use 14px for content text All content text—body, buttons, data, other interactables—must be 14px in size. 16px and above are restricted to headings and subheadings. **Good** ```tsx Content text ``` **Avoid** ```tsx Content text ``` ### `heading-case` Always sentence case headings Never capitalize or uppercase headings. Product names must be title-cased. **Good** ```tsx Recent requests ``` **Avoid** ```tsx Recent Requests ``` ```tsx Recent requests ``` ### `font-tracking` Never change the font's tracking Do not use the `tracking-*` classes to change the spacing between characters. **Good** ```tsx Worker Metrics ``` **Avoid** ```tsx Worker Metrics ``` ### `font-weight` Never use `font-bold` Use `font-semibold` for headings and `font-medium` for bold inline text. **Good** ```tsx Account settings required ``` **Avoid** ```tsx Account settings required ``` ### `related-text-spacing` Put related text closer together Related text should have smaller spacing around it than the content it belongs to. **Good** ```tsx
Web Analytics Measure site traffic without changing your code.
``` **Avoid** ```tsx
Web Analytics Measure site traffic without changing your code.
``` ### `text-spacing` Optically align spacing around text Spacing around text should take into account its line height. Typically this means vertical spacing should be slightly smaller than horizontal. **Good** ```tsx ... ``` **Avoid** ```tsx ... ``` ### `hover-color-transitions` Never transition colors for hover states Color changes on hover must be immediate. Transitions on fast interactions make the UI feel sluggish. **Good** ```tsx ``` **Avoid** ```tsx ``` ### `shadow-borders` Never use borders with drop shadows Use `ring ring-kumo-line` to create a transparent border that maintains sharp edges. **Good** ```tsx ... ``` **Avoid** ```tsx ... ``` ### `concentric-border-radius` Use concentric border radii When borders or rings are 8px or less apart, their corner radii must be mathematically concentric: outer radius = inner radius + padding. **Good** ```tsx
...
``` **Avoid** ```tsx
...
``` ### `icon-alignment` Align icons with the first line of text Inline icons must be optically the same size as and be center-aligned with text. Use `h-lh flex items-center` for multi-line alignment. **Good** ```tsx
Text that may wrap onto multiple lines
``` **Avoid** ```tsx
Text that may wrap onto multiple lines
``` ```tsx
Text that may wrap onto multiple lines
``` ### `inline-monospace-size` Reduce the font size of inline monospaced text Monospaced text should have a slightly smaller font size (~0.9em) when mixed with regular text. **Good** ```tsx Edit wrangler.toml to continue. ``` **Avoid** ```tsx Edit wrangler.toml to continue. ``` ### `sticky-borders` Use `border` to separate sticky elements from the content **Good** ```tsx
...
``` **Avoid** ```tsx
...
``` ### `collapse-content-size` Maintain content size during collapse animations Collapsible content must maintain its content size while closing to avoid its content shifting during animations. **Good** ```tsx
...
``` **Avoid** ```tsx
...
``` ### `layer-card-nesting` Never stack `LayerCard` on top of one another **Good** ```tsx
Recent requests ...
``` **Avoid** ```tsx Recent requests ... ``` ### `dialog-rendering` Never conditionally render dialogs Conditionally rendering dialogs disables their open/close animation. Use the `open` prop to determine if a dialog should be visible or not. **Good** ```tsx Edit Worker Update this Worker's settings. ``` **Avoid** ```tsx { open && ( Edit Worker ); } ```