Files
supabase/apps/learn/styles/globals.css
T
7fce0a12d9 feat(design-system): first pass at db report chart colours (#46787)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

This is a first draft at introducing semantic colours to our
Observability charts. This moves away from just random colours being
assigned to prop after prop. They're only scoped to the Database reports
right now, but if it flows nice, we can open it up to the other reports
too.

This also aims to tone down some of the harsher colours in our charts,
such as the orange which sometimes can look like a warning metric/prop.

| Before | After |
|--------|--------|
| <img width="839" height="336" alt="Screenshot 2026-06-10 at 09 14 56"
src="https://github.com/user-attachments/assets/222747c5-973b-4165-aa53-df7b93412ad3"
/> | <img width="950" height="341" alt="Screenshot 2026-09-14 at 18 14
47"
src="https://github.com/user-attachments/assets/836f3ddd-4a97-4064-b8cf-3a3b435417ac"
/> |

cc @supabase/design for additional thoughts.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added semantic chart color roles with light and dark theme variants
for consistent visualizations.
* Standardized colors and fills across database, networking, storage,
and connection charts.
  * Maximum-value lines now use configured chart colors when available.
  * Added chart palette reference and stress-test examples.
* Added stacked bar charts, customizable margins, and gradient-filled
line charts.
* Improved multi-series bar chart focus and date-range footer alignment.

* **Documentation**
* Documented the chart palette, theme variants, accessibility guidance,
and usage recommendations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Gildas Garcia <1122076+djhi@users.noreply.github.com>
2026-09-16 09:18:40 +01:00

215 lines
6.6 KiB
CSS

@import 'config/tailwind.config.css';
@import './../../../packages/ui/build/css/themes/classic-dark.css';
@source '../app/**/*.{ts,tsx}';
@source './../../../packages/ui/src/**/*.{tsx,ts,js}';
@source './../../../packages/ui-patterns/src/**/*.{tsx,ts,js}';
@theme {
/* added to get max-w-site */
--container-site: 128rem;
--radius-lg: var(--radius);
--radius-md: calc(var(--radius) - 2px);
--radius-sm: calc(var(--radius) - 4px);
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
}
@layer base {
:root {
--background: hsl(0 0% 100%);
--foreground: hsl(224 71.4% 4.1%);
--card: hsl(0 0% 100%);
--card-foreground: hsl(224 71.4% 4.1%);
--popover: hsl(0 0% 100%);
--popover-foreground: hsl(224 71.4% 4.1%);
--primary: hsl(220.9 39.3% 11%);
--primary-foreground: hsl(210 20% 98%);
--secondary: hsl(220 14.3% 95.9%);
--secondary-foreground: hsl(220.9 39.3% 11%);
--muted: hsl(220 14.3% 95.9%);
--muted-foreground: hsl(220 8.9% 46.1%);
--accent: hsl(220 14.3% 95.9%);
--accent-foreground: hsl(220.9 39.3% 11%);
--destructive: hsl(0 84.2% 60.2%);
--destructive-foreground: hsl(0 84.2% 60.2%);
--border: hsl(220 13% 91%);
--input: hsl(220 13% 91%);
--ring: hsl(220 13% 70.8%);
--radius: 0.625rem;
--sidebar: hsl(210 20% 98.5%);
--sidebar-foreground: hsl(224 71.4% 4.1%);
--sidebar-primary: hsl(220.9 39.3% 11%);
--sidebar-primary-foreground: hsl(210 20% 98%);
--sidebar-accent: hsl(220 14.3% 95.9%);
--sidebar-accent-foreground: hsl(220.9 39.3% 11%);
--sidebar-border: hsl(220 13% 91%);
--sidebar-ring: hsl(220 13% 70.8%);
}
.dark {
--background: hsl(224 71.4% 4.1%);
--foreground: hsl(210 20% 98%);
--card: hsl(224 71.4% 4.1%);
--card-foreground: hsl(210 20% 98%);
--popover: hsl(224 71.4% 4.1%);
--popover-foreground: hsl(210 20% 98%);
--primary: hsl(210 20% 98%);
--primary-foreground: hsl(220.9 39.3% 11%);
--secondary: hsl(215 27.9% 16.9%);
--secondary-foreground: hsl(210 20% 98%);
--muted: hsl(215 27.9% 16.9%);
--muted-foreground: hsl(217.9 10.6% 64.9%);
--accent: hsl(215 27.9% 16.9%);
--accent-foreground: hsl(210 20% 98%);
--destructive: hsl(0 62.8% 30.6%);
--destructive-foreground: hsl(0 84.2% 60.2%);
--border: hsl(215 27.9% 16.9%);
--input: hsl(215 27.9% 16.9%);
--ring: hsl(217.9 10.6% 55.6%);
--sidebar: hsl(220.9 39.3% 11%);
--sidebar-foreground: hsl(210 20% 98%);
--sidebar-primary: hsl(220 70% 50%);
--sidebar-primary-foreground: hsl(210 20% 98%);
--sidebar-accent: hsl(215 27.9% 16.9%);
--sidebar-accent-foreground: hsl(210 20% 98%);
--sidebar-border: hsl(215 27.9% 16.9%);
--sidebar-ring: hsl(220 13% 43.9%);
}
}
@layer base {
* {
@apply border-border;
}
html {
@apply scroll-smooth;
}
body {
@apply bg-default text-foreground;
/* font-feature-settings: "rlig" 1, "calt" 1; */
font-synthesis-weight: none;
text-rendering: optimizeLegibility;
}
}
@layer utilities {
.step {
counter-increment: step;
}
.step:before {
@apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background;
@apply ml-[-50px] mt-[-4px];
content: counter(step);
}
.chunk-container {
@apply shadow-none;
}
.chunk-container::after {
content: '';
@apply absolute -inset-4 shadow-xl rounded-xl border;
}
}
@media (max-width: 640px) {
.container {
@apply px-4;
}
}
.preview {
--background: hsl(0 0% 100%);
--foreground: hsl(0 0% 14.5%);
--card: hsl(0 0% 100%);
--card-foreground: hsl(0 0% 14.5%);
--popover: hsl(0 0% 100%);
--popover-foreground: hsl(0 0% 14.5%);
--primary: hsl(0 0% 20.5%);
--primary-foreground: hsl(0 0% 98.5%);
--secondary: hsl(0 0% 97%);
--secondary-foreground: hsl(0 0% 20.5%);
--muted: hsl(0 0% 97%);
--muted-foreground: hsl(0 0% 55.6%);
--accent: hsl(0 0% 97%);
--accent-foreground: hsl(0 0% 20.5%);
--destructive: hsl(27.3 24.5% 57.7%);
--destructive-foreground: hsl(27.3 24.5% 57.7%);
--border: hsl(0 0% 92.2%);
--input: hsl(0 0% 92.2%);
--ring: hsl(0 0% 70.8%);
--chart-1: 41.1 22.2% 64.6%;
--chart-2: 184.7 11.8% 60%;
--chart-3: 227.4 7% 39.8%;
--chart-4: 84.4 18.9% 82.8%;
--chart-5: 70.1 18.8% 76.9%;
--radius: 0.625rem;
--sidebar: hsl(0 0% 98.5%);
--sidebar-foreground: hsl(0 0% 14.5%);
--sidebar-primary: hsl(0 0% 20.5%);
--sidebar-primary-foreground: hsl(0 0% 98.5%);
--sidebar-accent: hsl(0 0% 97%);
--sidebar-accent-foreground: hsl(0 0% 20.5%);
--sidebar-border: hsl(0 0% 92.2%);
--sidebar-ring: hsl(0 0% 70.8%);
}
[data-theme='dark'] .preview,
[data-theme='classic-dark'] .preview {
--background: hsl(0 0% 14.5%);
--foreground: hsl(0 0% 98.5%);
--card: hsl(0 0% 0%);
--card-foreground: hsl(0 0% 98.5%);
--popover: hsl(0 0% 14.5%);
--popover-foreground: hsl(0 0% 98.5%);
--primary: hsl(0 0% 98.5%);
--primary-foreground: hsl(0 0% 20.5%);
--secondary: hsl(0 0% 26.9%);
--secondary-foreground: hsl(0 0% 98.5%);
--muted: hsl(0 0% 26.9%);
--muted-foreground: hsl(0 0% 70.8%);
--accent: hsl(0 0% 26.9%);
--accent-foreground: hsl(0 0% 98.5%);
--destructive: hsl(25.7 14.1% 39.6%);
--destructive-foreground: hsl(25.3 23.7% 63.7%);
--border: hsl(0 0% 26.9%);
--input: hsl(0 0% 26.9%);
--ring: hsl(0 0% 55.6%);
--chart-1: 264.4 24.3% 48.8%;
--chart-2: 162.5 17% 69.6%;
--chart-3: 70.1 18.8% 76.9%;
--chart-4: 303.9 26.5% 62.7%;
--chart-5: 16.4 24.6% 64.5%;
--sidebar: hsl(0 0% 20.5%);
--sidebar-foreground: hsl(0 0% 98.5%);
--sidebar-primary: hsl(264.4 24.3% 48.8%);
--sidebar-primary-foreground: hsl(0 0% 98.5%);
--sidebar-accent: hsl(0 0% 26.9%);
--sidebar-accent-foreground: hsl(0 0% 98.5%);
--sidebar-border: hsl(0 0% 26.9%);
--sidebar-ring: hsl(0 0% 43.9%);
}
.preview * {
@apply border-border outline-ring/50;
}