|
| 1 | +/* Inter — the Motif (UniFi) body typeface. */ |
| 2 | +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"); |
| 3 | + |
| 4 | +@import "tailwindcss"; |
| 5 | +@import "@nuxt/ui"; |
| 6 | + |
| 7 | +/* -------------------------------------------------------------------------- * |
| 8 | + * Motif design tokens |
| 9 | + * |
| 10 | + * Color scales reconstructed from the UniFi Network design system |
| 11 | + * (extracted-styles/motif-theme.{css,json}). Nuxt UI's color aliases below |
| 12 | + * point at these, so every component's bg / text / border / ring derives from |
| 13 | + * the Motif palette automatically. |
| 14 | + * |
| 15 | + * motif-blue primary hue 214 — global-primary |
| 16 | + * motif-gray neutral hue 214 / 8% — the signature UniFi cool gray |
| 17 | + * motif-green success hue 138 — data-positive |
| 18 | + * motif-red error hue 358 — data-destructive |
| 19 | + * motif-amber warning hue 37 — data-notice |
| 20 | + * motif-aqua info hue 198 — data-down / aqua |
| 21 | + * |
| 22 | + * `static` forces Tailwind v4 to emit every token: Nuxt UI references these |
| 23 | + * via `var(--color-motif-*)` (not utility classes), so usage-based tree-shaking |
| 24 | + * would otherwise drop them and the theme would resolve to empty. |
| 25 | + * -------------------------------------------------------------------------- */ |
| 26 | +@theme static { |
| 27 | + --font-sans: "Inter", "Lato", ui-sans-serif, system-ui, -apple-system, |
| 28 | + "Segoe UI", Arial, sans-serif; |
| 29 | + |
| 30 | + /* primary — Motif blue (global-primary light=500, dark=400) */ |
| 31 | + --color-motif-blue-50: hsl(214 100% 97%); |
| 32 | + --color-motif-blue-100: hsl(214 100% 92%); |
| 33 | + --color-motif-blue-200: hsl(214 100% 85%); |
| 34 | + --color-motif-blue-300: hsl(214 100% 75%); |
| 35 | + --color-motif-blue-400: hsl(214 100% 64%); |
| 36 | + --color-motif-blue-500: hsl(214 100% 50%); |
| 37 | + --color-motif-blue-600: hsl(214 100% 42%); |
| 38 | + --color-motif-blue-700: hsl(215 88% 36%); |
| 39 | + --color-motif-blue-800: hsl(213 88% 26%); |
| 40 | + --color-motif-blue-900: hsl(213 88% 16%); |
| 41 | + --color-motif-blue-950: hsl(213 88% 12%); |
| 42 | + |
| 43 | + /* neutral — Motif cool gray (hue 214 / 8%) */ |
| 44 | + --color-motif-gray-50: hsl(214 8% 98%); |
| 45 | + --color-motif-gray-100: hsl(214 8% 96%); |
| 46 | + --color-motif-gray-200: hsl(214 8% 88%); |
| 47 | + --color-motif-gray-300: hsl(214 8% 82%); |
| 48 | + --color-motif-gray-400: hsl(214 8% 65%); |
| 49 | + --color-motif-gray-500: hsl(214 8% 54%); |
| 50 | + --color-motif-gray-600: hsl(214 8% 44%); |
| 51 | + --color-motif-gray-700: hsl(214 8% 34%); |
| 52 | + --color-motif-gray-800: hsl(214 8% 20%); |
| 53 | + --color-motif-gray-900: hsl(214 8% 12%); |
| 54 | + --color-motif-gray-950: hsl(214 8% 8%); |
| 55 | + |
| 56 | + /* success — Motif green (data-positive) */ |
| 57 | + --color-motif-green-50: hsl(138 60% 95%); |
| 58 | + --color-motif-green-100: hsl(138 60% 90%); |
| 59 | + --color-motif-green-200: hsl(138 60% 81%); |
| 60 | + --color-motif-green-300: hsl(138 59% 71%); |
| 61 | + --color-motif-green-400: hsl(138 59% 61%); |
| 62 | + --color-motif-green-500: hsl(138 59% 51%); |
| 63 | + --color-motif-green-600: hsl(138 56% 41%); |
| 64 | + --color-motif-green-700: hsl(138 56% 33%); |
| 65 | + --color-motif-green-800: hsl(138 57% 25%); |
| 66 | + --color-motif-green-900: hsl(138 56% 18%); |
| 67 | + --color-motif-green-950: hsl(138 56% 12%); |
| 68 | + |
| 69 | + /* error — Motif red (data-destructive) */ |
| 70 | + --color-motif-red-50: hsl(357 82% 96%); |
| 71 | + --color-motif-red-100: hsl(359 86% 92%); |
| 72 | + --color-motif-red-200: hsl(358 86% 83%); |
| 73 | + --color-motif-red-300: hsl(359 86% 75%); |
| 74 | + --color-motif-red-400: hsl(358 86% 67%); |
| 75 | + --color-motif-red-500: hsl(359 86% 58%); |
| 76 | + --color-motif-red-600: hsl(358 61% 47%); |
| 77 | + --color-motif-red-700: hsl(359 61% 38%); |
| 78 | + --color-motif-red-800: hsl(359 61% 29%); |
| 79 | + --color-motif-red-900: hsl(358 62% 20%); |
| 80 | + --color-motif-red-950: hsl(358 62% 14%); |
| 81 | + |
| 82 | + /* warning — Motif amber/orange (data-notice) */ |
| 83 | + --color-motif-amber-50: hsl(37 91% 95%); |
| 84 | + --color-motif-amber-100: hsl(37 91% 91%); |
| 85 | + --color-motif-amber-200: hsl(37 91% 82%); |
| 86 | + --color-motif-amber-300: hsl(37 91% 73%); |
| 87 | + --color-motif-amber-400: hsl(37 91% 64%); |
| 88 | + --color-motif-amber-500: hsl(37 91% 55%); |
| 89 | + --color-motif-amber-600: hsl(37 75% 44%); |
| 90 | + --color-motif-amber-700: hsl(37 75% 36%); |
| 91 | + --color-motif-amber-800: hsl(37 74% 27%); |
| 92 | + --color-motif-amber-900: hsl(37 74% 20%); |
| 93 | + --color-motif-amber-950: hsl(37 74% 14%); |
| 94 | + |
| 95 | + /* info — Motif aqua (data-down) */ |
| 96 | + --color-motif-aqua-50: hsl(198 100% 96%); |
| 97 | + --color-motif-aqua-100: hsl(198 100% 93%); |
| 98 | + --color-motif-aqua-200: hsl(198 97% 85%); |
| 99 | + --color-motif-aqua-300: hsl(198 98% 78%); |
| 100 | + --color-motif-aqua-400: hsl(198 97% 71%); |
| 101 | + --color-motif-aqua-500: hsl(198 98% 63%); |
| 102 | + --color-motif-aqua-600: hsl(198 58% 51%); |
| 103 | + --color-motif-aqua-700: hsl(198 56% 41%); |
| 104 | + --color-motif-aqua-800: hsl(198 57% 32%); |
| 105 | + --color-motif-aqua-900: hsl(198 56% 22%); |
| 106 | + --color-motif-aqua-950: hsl(198 56% 16%); |
| 107 | +} |
| 108 | + |
| 109 | +/* Motif uses a 4px corner radius across the board (radius-global / -btn). */ |
| 110 | +:root { |
| 111 | + --ui-radius: 0.25rem; |
| 112 | +} |
| 113 | + |
| 114 | +/* Match the UniFi canvas: a faint cool-gray page behind white surfaces. */ |
| 115 | +body { |
| 116 | + background-color: var(--ui-bg-muted); |
| 117 | +} |
0 commit comments