The Coline design system: accessible React components for Coline Apps, themed live by the host workspace, and for Coline Sites in light and dark. Tailwind v4 stylesheet included. MIT.
| 7 |
| * the sandbox bridge overwrites them with the host's live theme |
| 8 | * (ColineAppProvider.applyTheme), so components consume tokens only and |
| 9 | * the host owns appearance. |
| 10 | */ |
| 11 |
| 12 | @import "tailwindcss"; |
| 13 | @import "tw-animate-css"; |
| 14 | @import "./controls.css"; |
| 15 | @import "./patterns.css"; |
| 16 |
| 17 | @source "../components"; |
| 18 | @source "../provider.tsx"; |
| 19 | @source "../patterns"; |
| 20 | /* App source is scanned per-app by the registration-time build (Phase 4 |
| 21 | ships first-party bundles; source-upload builds land in Phase 5+). */ |
| 22 |
| 23 | /* Ship the same Latin Geist face as Coline. The CLI inlines this local asset. */ |
| 24 | @font-face { |
| 25 | font-family: "Geist"; |
| 26 | font-style: normal; |
| 27 | font-weight: 100 900; |
| 28 | font-display: swap; |
| 29 | src: url("./fonts/geist-latin.woff2") format("woff2"); |
| 30 | } |
| 31 |
| 32 | @custom-variant dark (&:is(.dark *)); |
| 33 |
| 34 | @theme inline { |
| 35 | --font-sans: "Geist", ui-sans-serif, system-ui, sans-serif; |
| 36 | --color-background: var(--background); |
| 37 | --color-foreground: var(--foreground); |
| 38 | --color-card: var(--card); |
| 39 | --color-card-foreground: var(--card-foreground); |
| 40 | --color-popover: var(--popover); |
| 41 | --color-popover-foreground: var(--popover-foreground); |
| 42 | --color-primary: var(--primary); |
| 43 | --color-primary-foreground: var(--primary-foreground); |
| 44 | --color-secondary: var(--secondary); |
| 45 | --color-secondary-foreground: var(--secondary-foreground); |
| 46 | --color-muted: var(--muted); |
| 47 | --color-muted-foreground: var(--muted-foreground); |
| 48 | --color-accent: var(--accent); |
| 49 | --color-accent-foreground: var(--accent-foreground); |
| 50 | --color-destructive: var(--destructive); |
| 51 | --color-border: var(--border); |
| 52 | --color-input: var(--input); |
| 53 | --color-ring: var(--ring); |
| 54 | --radius-sm: calc(var(--radius) - 4px); |
| 55 | --radius-md: calc(var(--radius) - 2px); |
| 56 | --radius-lg: var(--radius); |
| 57 | --radius-xl: calc(var(--radius) + 4px); |
| 58 | --radius-2xl: calc(var(--radius) + 8px); |
| 59 | --radius-3xl: calc(var(--radius) + 12px); |
| 60 | --radius-4xl: calc(var(--radius) + 16px); |
| 61 | } |
| 62 |
| 63 | :root { |
| 64 | --background: oklch(1 0 0); |
| 65 | --foreground: oklch(0.141 0.005 285.823); |
| 66 | --card: oklch(1 0 0); |
| 67 | --card-foreground: oklch(0.141 0.005 285.823); |
| 68 | --popover: oklch(1 0 0); |
| 69 | --popover-foreground: oklch(0.141 0.005 285.823); |
| 70 | --primary: oklch(0.21 0.006 285.885); |
| 71 | --primary-foreground: oklch(0.985 0 0); |
| 72 | --secondary: oklch(0.967 0.001 286.375); |
| 73 | --secondary-foreground: oklch(0.21 0.006 285.885); |
| 74 | --muted: oklch(0.967 0.001 286.375); |
| 75 | --muted-foreground: oklch(0.552 0.016 285.938); |
| 76 | --accent: oklch(0.967 0.001 286.375); |
| 77 | --accent-foreground: oklch(0.21 0.006 285.885); |
| 78 | --destructive: oklch(0.577 0.245 27.325); |
| 79 | --border: oklch(0.92 0.004 286.32); |
| 80 | --input: oklch(0.92 0.004 286.32); |
| 81 | --ring: oklch(0.705 0.015 286.067); |
| 82 | --radius: 0.625rem; |
| 83 | } |
| 84 |
| 85 | .dark { |
| 86 | --background: oklch(0.141 0.005 285.823); |
| 87 | --foreground: oklch(0.985 0 0); |
| 88 | --card: oklch(0.21 0.006 285.885); |
| 89 | --card-foreground: oklch(0.985 0 0); |
| 90 | --popover: oklch(0.21 0.006 285.885); |
| 91 | --popover-foreground: oklch(0.985 0 0); |
| 92 | --primary: oklch(0.92 0.004 286.32); |
| 93 | --primary-foreground: oklch(0.21 0.006 285.885); |
| 94 | --secondary: oklch(0.274 0.006 286.033); |
| 95 | --secondary-foreground: oklch(0.985 0 0); |
| 96 | --muted: oklch(0.274 0.006 286.033); |
| 97 | --muted-foreground: oklch(0.705 0.015 286.067); |
| 98 | --accent: oklch(0.274 0.006 286.033); |
| 99 | --accent-foreground: oklch(0.985 0 0); |
| 100 | --destructive: oklch(0.704 0.191 22.216); |
| 101 | --border: oklch(1 0 0 / 10%); |
| 102 | --input: oklch(1 0 0 / 15%); |
| 103 | --ring: oklch(0.552 0.016 285.938); |
| 104 | } |
| 105 |
| 106 | body { |
| 107 | margin: 0; |
| 108 | background: var(--background); |
| 109 | color: var(--foreground); |
| 110 | font-family: |
| 111 | "Geist", |
| 112 | ui-sans-serif, |
| 113 | system-ui, |
| 114 | -apple-system, |
| 115 | "Segoe UI", |
| 116 | sans-serif; |
| 117 | -webkit-font-smoothing: antialiased; |
| 118 | } |
| 119 |