123 lines
3.9 KiB
CSS
123 lines
3.9 KiB
CSS
/* Cloudflare Kumo UI — OpenDesign semantic bindings.
|
|||
|
|
* Official sources:
|
||
|
|
* - https://kumo-ui.com/colors/
|
||
|
|
* - https://github.com/cloudflare/kumo/tree/0c5832575c99988917b81cd752002e10f3dc9c7a
|
||
|
|
* - packages/kumo/scripts/theme-generator/config.ts at that commit
|
||
|
|
*
|
||
|
|
* Upstream token values are adapted from @cloudflare/kumo 2.9.2,
|
||
|
|
* Copyright (c) 2026 Cloudflare, Inc., licensed under the MIT License.
|
||
|
|
* This is an OpenDesign curated integration, not an official Cloudflare package.
|
||
|
|
*/
|
||
|
|
|
||
|
|
:root {
|
||
|
|
/* Kumo canvas, component base, and recessed surface. */
|
||
|
|
--bg: oklch(98.75% 0 0);
|
||
|
|
--surface: #ffffff;
|
||
|
|
--surface-warm: oklch(96% 0 0);
|
||
|
|
|
||
|
|
/* Kumo default and subtle text. B-slots collapse where Kumo has no matching tier. */
|
||
|
|
--fg: oklch(21% 0.006 285.885);
|
||
|
|
--fg-2: var(--fg);
|
||
|
|
--muted: oklch(55.6% 0 0);
|
||
|
|
--meta: var(--muted);
|
||
|
|
|
||
|
|
/* Kumo line and hairline roles. */
|
||
|
|
--border: oklch(14.5% 0 0 / 0.1);
|
||
|
|
--border-soft: oklch(93.5% 0 0);
|
||
|
|
|
||
|
|
/* Kumo brand background and its documented hover state. */
|
||
|
|
--accent: oklch(0.5772 0.2324 260);
|
||
|
|
--accent-on: #ffffff;
|
||
|
|
--accent-hover: oklch(48.8% 0.243 264.376);
|
||
|
|
--accent-active: var(--accent-hover);
|
||
|
|
|
||
|
|
/* Kumo solid semantic indicators. */
|
||
|
|
--success: oklch(59.6% 0.145 163.225);
|
||
|
|
--warn: oklch(73.9% 0.177 58.2);
|
||
|
|
--danger: oklch(63.7% 0.237 25.331);
|
||
|
|
|
||
|
|
/* Inter is used by Kumo's official documentation and Figma resources. */
|
||
|
|
--font-display: "Inter", ui-sans-serif, system-ui, sans-serif;
|
||
|
|
--font-body: "Inter", ui-sans-serif, system-ui, sans-serif;
|
||
|
|
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||
|
|
|
||
|
|
/* Kumo's compact 12/13/14/16 scale, extended with its inherited Tailwind heading steps. */
|
||
|
|
--text-xs: 12px;
|
||
|
|
--text-sm: 13px;
|
||
|
|
--text-base: 14px;
|
||
|
|
--text-lg: 16px;
|
||
|
|
--text-xl: 20px;
|
||
|
|
--text-2xl: 24px;
|
||
|
|
--text-3xl: 30px;
|
||
|
|
--text-4xl: 36px;
|
||
|
|
--leading-body: 1.5;
|
||
|
|
--leading-tight: 1.2;
|
||
|
|
--tracking-display: 0;
|
||
|
|
|
||
|
|
/* OpenDesign compatibility bindings aligned to Kumo's 4px utility rhythm. */
|
||
|
|
--space-1: 4px;
|
||
|
|
--space-2: 8px;
|
||
|
|
--space-3: 12px;
|
||
|
|
--space-4: 16px;
|
||
|
|
--space-5: 20px;
|
||
|
|
--space-6: 24px;
|
||
|
|
--space-8: 32px;
|
||
|
|
--space-12: 48px;
|
||
|
|
--section-y-desktop: 64px;
|
||
|
|
--section-y-tablet: 48px;
|
||
|
|
--section-y-phone: 32px;
|
||
|
|
|
||
|
|
/* Kumo control radii map to Tailwind sm/md/lg; pills stay fully rounded. */
|
||
|
|
--radius-sm: 4px;
|
||
|
|
--radius-md: 6px;
|
||
|
|
--radius-lg: 8px;
|
||
|
|
--radius-pill: 9999px;
|
||
|
|
|
||
|
|
/* Ring-led elevation mirrors Kumo LayerCard composition. */
|
||
|
|
--elev-flat: none;
|
||
|
|
--elev-ring: 0 0 0 1px var(--border);
|
||
|
|
--elev-raised: 0 1px 2px 0 oklch(0% 0 0 / 0.08);
|
||
|
|
--focus-ring: 0 0 0 2px oklch(15% 0 0);
|
||
|
|
|
||
|
|
/* 150ms states/dialogs and the 250ms sidebar motion are upstream values. */
|
||
|
|
--motion-fast: 150ms;
|
||
|
|
--motion-base: 250ms;
|
||
|
|
--ease-standard: cubic-bezier(0.77, 0, 0.175, 1);
|
||
|
|
|
||
|
|
/* OpenDesign layout bindings preserve Kumo's compact dashboard density. */
|
||
|
|
--container-max: 1200px;
|
||
|
|
--container-gutter-desktop: 24px;
|
||
|
|
--container-gutter-tablet: 16px;
|
||
|
|
--container-gutter-phone: 12px;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Kumo uses data-mode="dark". The data-theme selector keeps generated Open
|
||
|
|
* Design artifacts compatible with the repository's standard theme hook. */
|
||
|
|
[data-theme="dark"],
|
||
|
|
[data-mode="dark"] {
|
||
|
|
--bg: oklch(10% 0 0);
|
||
|
|
--surface: oklch(17% 0 0);
|
||
|
|
--surface-warm: oklch(15% 0 0);
|
||
|
|
--fg: oklch(97% 0 0);
|
||
|
|
--fg-2: var(--fg);
|
||
|
|
--muted: oklch(70.8% 0 0);
|
||
|
|
--meta: var(--muted);
|
||
|
|
--border: oklch(32% 0 0);
|
||
|
|
--border-soft: oklch(26.9% 0 0);
|
||
|
|
--accent: color-mix(in oklch, oklch(0.5772 0.2324 260), black 10%);
|
||
|
|
--accent-on: #ffffff;
|
||
|
|
--accent-hover: oklch(48.8% 0.243 264.376);
|
||
|
|
--accent-active: var(--accent-hover);
|
||
|
|
--success: oklch(76.5% 0.177 163.223);
|
||
|
|
--warn: oklch(64.5% 0.168 50);
|
||
|
|
--danger: oklch(57.7% 0.245 27.325);
|
||
|
|
--elev-raised: 0 1px 2px 0 oklch(0% 0 0 / 0.3);
|
||
|
|
--focus-ring: 0 0 0 2px oklch(93.5% 0 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
@media (prefers-reduced-motion: reduce) {
|
||
|
|
:root {
|
||
|
|
--motion-fast: 0ms;
|
||
|
|
--motion-base: 0ms;
|
||
|
|
}
|
||
|
|
}
|