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 | /* Token names; sites import this file on its own into their Tailwind. */ |
| 16 | @import "./theme.css"; |
| 17 |
| 18 | @source "../components"; |
| 19 | @source "../provider.tsx"; |
| 20 | @source "../site-provider.tsx"; |
| 21 | @source "../patterns"; |
| 22 | @source "../hooks"; |
| 23 | @source "../lib"; |
| 24 | /* App source is scanned per-app by the registration-time build (Phase 4 |
| 25 | ships first-party bundles; source-upload builds land in Phase 5+). */ |
| 26 |
| 27 | /* Ship the same Latin Geist face as Coline. The CLI inlines this local asset. */ |
| 28 | @font-face { |
| 29 | font-family: "Geist"; |
| 30 | font-style: normal; |
| 31 | font-weight: 100 900; |
| 32 | font-display: swap; |
| 33 | src: url("./fonts/geist-latin.woff2") format("woff2"); |
| 34 | } |
| 35 |
| 36 |
| 37 | :root { |
| 38 | --background: oklch(1 0 0); |
| 39 | --foreground: oklch(0.141 0.005 285.823); |
| 40 | --card: oklch(1 0 0); |
| 41 | --card-foreground: oklch(0.141 0.005 285.823); |
| 42 | --popover: oklch(1 0 0); |
| 43 | --popover-foreground: oklch(0.141 0.005 285.823); |
| 44 | --primary: oklch(0.21 0.006 285.885); |
| 45 | --primary-foreground: oklch(0.985 0 0); |
| 46 | --secondary: oklch(0.967 0.001 286.375); |
| 47 | --secondary-foreground: oklch(0.21 0.006 285.885); |
| 48 | --muted: oklch(0.967 0.001 286.375); |
| 49 | --muted-foreground: oklch(0.552 0.016 285.938); |
| 50 | --accent: oklch(0.967 0.001 286.375); |
| 51 | --accent-foreground: oklch(0.21 0.006 285.885); |
| 52 | --destructive: oklch(0.577 0.245 27.325); |
| 53 | --border: oklch(0.92 0.004 286.32); |
| 54 | --input: oklch(0.92 0.004 286.32); |
| 55 | --ring: oklch(0.705 0.015 286.067); |
| 56 | --radius: 0.625rem; |
| 57 | --status-positive: #10b981; |
| 58 | --status-positive-fg: #059669; |
| 59 | --status-attention: #f59e0b; |
| 60 | --status-attention-fg: #d97706; |
| 61 | --status-risk: #f43f5e; |
| 62 | --status-risk-fg: #e11d48; |
| 63 | --action: oklch(0.6 0.19 255); |
| 64 | --chart-1: oklch(0.62 0.17 255); |
| 65 | --chart-2: oklch(0.66 0.15 155); |
| 66 | --chart-3: oklch(0.76 0.15 75); |
| 67 | --chart-4: oklch(0.64 0.2 300); |
| 68 | --chart-5: oklch(0.63 0.21 25); |
| 69 | } |
| 70 |
| 71 | .dark { |
| 72 | --background: oklch(0.141 0.005 285.823); |
| 73 | --foreground: oklch(0.985 0 0); |
| 74 | --card: oklch(0.21 0.006 285.885); |
| 75 | --card-foreground: oklch(0.985 0 0); |
| 76 | --popover: oklch(0.21 0.006 285.885); |
| 77 | --popover-foreground: oklch(0.985 0 0); |
| 78 | --primary: oklch(0.92 0.004 286.32); |
| 79 | --primary-foreground: oklch(0.21 0.006 285.885); |
| 80 | --secondary: oklch(0.274 0.006 286.033); |
| 81 | --secondary-foreground: oklch(0.985 0 0); |
| 82 | --muted: oklch(0.274 0.006 286.033); |
| 83 | --muted-foreground: oklch(0.705 0.015 286.067); |
| 84 | --accent: oklch(0.274 0.006 286.033); |
| 85 | --accent-foreground: oklch(0.985 0 0); |
| 86 | --destructive: oklch(0.704 0.191 22.216); |
| 87 | --border: oklch(1 0 0 / 10%); |
| 88 | --input: oklch(1 0 0 / 15%); |
| 89 | --ring: oklch(0.552 0.016 285.938); |
| 90 | --status-positive-fg: #34d399; |
| 91 | --status-attention-fg: #fbbf24; |
| 92 | --status-risk-fg: #fb7185; |
| 93 | --action: oklch(0.7 0.15 255); |
| 94 | } |
| 95 |
| 96 | @media (prefers-reduced-motion: reduce) { |
| 97 | *, |
| 98 | *::before, |
| 99 | *::after { |
| 100 | animation-duration: 0.01ms !important; |
| 101 | animation-iteration-count: 1 !important; |
| 102 | transition-duration: 0.01ms !important; |
| 103 | } |
| 104 | } |
| 105 |
| 106 | ::selection { |
| 107 | background: color-mix(in oklch, var(--action) 24%, transparent); |
| 108 | } |
| 109 |
| 110 | body { |
| 111 | margin: 0; |
| 112 | background: var(--background); |
| 113 | color: var(--foreground); |
| 114 | font-family: |
| 115 | "Geist", |
| 116 | ui-sans-serif, |
| 117 | system-ui, |
| 118 | -apple-system, |
| 119 | "Segoe UI", |
| 120 | sans-serif; |
| 121 | -webkit-font-smoothing: antialiased; |
| 122 | } |
| 123 |