mirror of
https://github.com/supabase/supabase.git
synced 2026-09-22 13:37:53 +08:00
a31ca2bad0
## What kind of change does this PR introduce? Bug fix and design-system update. Resolves DEPR-316. Follow-up rename (`text-brand` → `text-primary`) is in a dedicated PR (https://github.com/supabase/supabase/pull/50564) stacked on this one. ## What is the current behavior? `text-brand` resolves to the canonical bright brand green in places that need readable text, which fails WCAG AA on light surfaces. A separate `text-brand-display` token adds another green for large type. ## What is the new behavior? - `text-brand` maps to accessible `--primary` (light mode darkened to meet ~4.5:1 AA) - `--hue` / `--primary-hue` aligned to 157.5 - `text-brand-display` removed; former display callsites use `text-brand` - Bright fills/borders stay on `brand-default` - Design-system colour and typography docs updated | Before | After | | --- | --- | | <img width="514" height="112" alt="CleanShot 2026-09-02 at 11 13 09@2x" src="https://github.com/user-attachments/assets/4e0138a9-a32d-4e4c-a426-90736706e1e7" /> | <img width="512" height="138" alt="CleanShot 2026-09-21 at 11 42 05@2x" src="https://github.com/user-attachments/assets/164cc5b1-a0c5-4e93-95f1-80016641a114" /> | | <img width="864" height="266" alt="CleanShot 2026-09-02 at 11 13 53@2x" src="https://github.com/user-attachments/assets/3c1ca53f-bf9e-431e-bc15-816b4a275b8e" /> | <img width="882" height="248" alt="CleanShot 2026-09-21 at 11 41 37@2x" src="https://github.com/user-attachments/assets/24828e7b-ed6b-44cb-b9dc-becc3398bdfc" /> | | <img width="782" height="692" alt="CleanShot 2026-09-02 at 11 16 30@2x" src="https://github.com/user-attachments/assets/fc871977-77bc-47fb-9e0e-9284e0ecd5cc" /> | <img width="730" height="690" alt="CleanShot 2026-09-21 at 11 42 52@2x" src="https://github.com/user-attachments/assets/bf479515-d5f9-471e-b82d-f097c0f4b56c" /> | | <img width="480" height="306" alt="CleanShot 2026-09-02 at 11 18 53@2x" src="https://github.com/user-attachments/assets/03f341f4-f02e-44f8-a2b2-8c31670d0427" /> | <img width="470" height="300" alt="CleanShot 2026-09-21 at 11 43 19@2x" src="https://github.com/user-attachments/assets/9df18217-d5e6-48b8-ba0b-579d2664b94b" /> | | <img width="960" height="300" alt="CleanShot 2026-09-02 at 11 32 04@2x" src="https://github.com/user-attachments/assets/6b1d9373-7a71-4247-81ff-26441604b09d" /> | <img width="980" height="306" alt="CleanShot 2026-09-21 at 11 44 13@2x" src="https://github.com/user-attachments/assets/41ad4784-02ec-4b29-b860-32af9fa79aa8" /> | | <img width="924" height="214" alt="CleanShot 2026-09-02 at 11 34 44@2x" src="https://github.com/user-attachments/assets/1de661fe-c7b6-499b-a94f-e4737436ec79" /> | <img width="752" height="162" alt="CleanShot 2026-09-21 at 11 44 56@2x" src="https://github.com/user-attachments/assets/1811890f-0660-4445-84e9-447720954fa1" /> | ## To test Test each callsite **in light mode** (dark mode is largely unchanged). ### WWW - [Homepage](https://zone-www-dot-com-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/): “Scale to millions” uses readable brand text (display token is gone) - [Careers](https://zone-www-dot-com-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/careers): small “Careers” eyebrow readable; green dividers stay bright `brand-default` - [Contact](https://zone-www-dot-com-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/contact-us): email / policy links use readable brand text - [Regions](https://zone-www-dot-com-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/regions): “Ask about early access to BYOC” readable ### Docs - [Docs homepage](https://docs-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/docs): “DOCS” wordmark and resource links readable - [Database overview](https://docs-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/docs/guides/database/overview): nav / footer brand links readable - [JavaScript reference](https://docs-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/docs/reference/javascript/introduction): active sidebar treatment readable ### Design system - [Typography](https://design-system-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/docs/typography): documents `text-brand` only (no display) - [Colour usage](https://design-system-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/docs/color-usage): `text-brand` vs `bg-brand-default` - [Design-system homepage](https://design-system-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/): brand text examples across themes ### Studio - [Auth providers](https://studio-staging-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/dashboard/project/_/auth/providers): enabled provider badge text readable; status dot stays bright - [Database policies](https://studio-staging-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/dashboard/project/_/database/policies?new=true): template hover text more legible - [Database connections](https://studio-staging-git-dnywh-depr-316-brand-text-tokens-supabase.vercel.app/dashboard/project/_/observability/connections): “Live” status readable; animated dot stays bright green --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
440 lines
7.4 KiB
CSS
440 lines
7.4 KiB
CSS
@reference "./globals.css";
|
|
/* Brought over from platform to be cleaned if needed */
|
|
|
|
/* Form panels */
|
|
|
|
.Form,
|
|
.Form button {
|
|
animation: fade 200ms ease-out;
|
|
}
|
|
|
|
.Form .form-control,
|
|
.Form select {
|
|
min-width: 250px;
|
|
width: calc(67% - 0.5rem);
|
|
margin-left: 0.5rem;
|
|
}
|
|
|
|
.Form .form-group,
|
|
.Form .checkbox {
|
|
@apply w-full;
|
|
}
|
|
|
|
.form-group {
|
|
@apply mb-2 p-0 leading-5 border-0 bg-transparent;
|
|
font-size: 15px;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
/* TO DO: REMOVE */
|
|
.form-group label {
|
|
@apply inline-block text-foreground-light text-sm py-2;
|
|
width: 33%;
|
|
align-self: top;
|
|
}
|
|
|
|
.Form .checkbox .form-check-label {
|
|
@apply flex items-center;
|
|
}
|
|
|
|
.Form .checkbox .form-check-label input[type='checkbox'] {
|
|
@apply mr-4;
|
|
width: auto;
|
|
}
|
|
|
|
.Form input[type='checkbox'] {
|
|
min-width: inherit;
|
|
width: inherit;
|
|
}
|
|
|
|
.Form .form-text,
|
|
.Form .form-error {
|
|
@apply block text-sm text-foreground-lighter my-1;
|
|
display: block;
|
|
margin-left: calc(33% + 0.5rem);
|
|
width: 100%;
|
|
}
|
|
|
|
.Form .form-error {
|
|
@apply text-red-400;
|
|
}
|
|
|
|
.Form .text-danger {
|
|
@apply text-red-900;
|
|
}
|
|
|
|
.Form .form-help {
|
|
@apply text-border-muted;
|
|
}
|
|
|
|
.Form hr {
|
|
@apply mt-4 mb-4;
|
|
}
|
|
|
|
.section-block {
|
|
@apply p-0 rounded-sm bg-surface-100 border border-overlay;
|
|
}
|
|
|
|
.section-block--header {
|
|
@apply border-b border-overlay;
|
|
}
|
|
|
|
.section-block--header h1,
|
|
.section-block--header h2,
|
|
.section-block--header h3,
|
|
.section-block--header h4 {
|
|
@apply m-0;
|
|
}
|
|
|
|
.section-block--header p {
|
|
@apply text-gray-300;
|
|
}
|
|
|
|
.section-block--footer {
|
|
@apply border-overlay bg-surface-100;
|
|
}
|
|
|
|
.section-block--footer button:not(.mr-0) {
|
|
@apply mr-2;
|
|
}
|
|
|
|
/*
|
|
Table
|
|
*/
|
|
|
|
.table-container table {
|
|
@apply w-full;
|
|
border-collapse: separate;
|
|
border-spacing: 0;
|
|
}
|
|
|
|
.table-container table span {
|
|
@apply truncate;
|
|
}
|
|
|
|
.table-container thead th {
|
|
@apply text-foreground-light font-normal text-sm;
|
|
@apply bg-surface-200;
|
|
@apply border-t border-b border-default;
|
|
}
|
|
|
|
.table-container thead th:first-child {
|
|
@apply rounded-sm rounded-r-none rounded-b-none;
|
|
@apply border-l;
|
|
}
|
|
|
|
.table-container thead th:last-child {
|
|
@apply pr-6 rounded-sm rounded-l-none rounded-b-none;
|
|
@apply border-r;
|
|
}
|
|
|
|
.table-container tbody tr {
|
|
@apply bg-surface-100;
|
|
}
|
|
|
|
.table-container tbody .tr--link {
|
|
@apply cursor-pointer transition-colors;
|
|
}
|
|
|
|
.table-container tbody .tr--link:hover {
|
|
@apply bg-surface-200;
|
|
}
|
|
|
|
.table-container tbody td {
|
|
@apply border-b p-3 px-4 text-sm text-gray-1100 border-default;
|
|
}
|
|
|
|
.table-container tbody td:first-child {
|
|
@apply pl-4 border-b border-l border-default;
|
|
}
|
|
|
|
.table-container tbody td:last-child {
|
|
@apply pr-4 border-b border-r border-default;
|
|
}
|
|
|
|
.table-container tbody tr:last-child td:first-child {
|
|
@apply rounded-sm rounded-r-none rounded-t-none;
|
|
}
|
|
|
|
.table-container tbody tr:last-child td:last-child {
|
|
@apply rounded-sm rounded-l-none rounded-t-none;
|
|
}
|
|
|
|
.table-container--borderless thead th {
|
|
border-top: none;
|
|
}
|
|
|
|
.table-container--borderless thead th:first-child {
|
|
border-left: none;
|
|
}
|
|
|
|
.table-container--borderless thead th:last-child {
|
|
border-right: none;
|
|
}
|
|
|
|
.table-container--borderless tbody td:first-child {
|
|
border-left: none;
|
|
}
|
|
|
|
.table-container--borderless tbody td:last-child {
|
|
border-right: none;
|
|
}
|
|
|
|
.table-container--borderless tbody tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
|
|
/* Docs */
|
|
.Docs {
|
|
&--inner-wrapper {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--background-alternative-default) 50%,
|
|
var(--background-surface-100) 50%
|
|
);
|
|
width: 100%;
|
|
}
|
|
|
|
.dark &--inner-wrapper {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--background-surface-100) 50%,
|
|
var(--background-default) 50%
|
|
);
|
|
}
|
|
|
|
/* h1, */
|
|
/* h2, */
|
|
/* h3 { */
|
|
/* @apply p-4 m-0; */
|
|
/* } */
|
|
|
|
.doc-heading {
|
|
@apply text-foreground capitalize mt-4 px-6 w-1/2;
|
|
hyphens: auto;
|
|
max-width: 50%;
|
|
}
|
|
|
|
.doc-section {
|
|
@apply border-b flex border-default;
|
|
}
|
|
|
|
&.Docs--table-editor .doc-section--introduction {
|
|
.text {
|
|
width: 85%;
|
|
}
|
|
}
|
|
|
|
&.Docs--table-editor .doc-section--introduction {
|
|
.text {
|
|
width: 85%;
|
|
}
|
|
}
|
|
|
|
&.Docs--table-editor .doc-section--client-libraries {
|
|
flex-direction: column;
|
|
margin-bottom: 40px;
|
|
|
|
.text,
|
|
.code {
|
|
width: 100%;
|
|
max-width: none;
|
|
}
|
|
.code {
|
|
margin-bottom: 20px;
|
|
}
|
|
}
|
|
|
|
.doc-section article:first-child {
|
|
@apply prose prose-docs prose-sm max-w-none;
|
|
}
|
|
|
|
&.Docs--table-editor .doc-section__table-name {
|
|
@apply mt-4;
|
|
}
|
|
|
|
.code-column {
|
|
@apply p-4 px-6 w-1/2;
|
|
max-width: 50%;
|
|
|
|
/* a:not(.btn-primary):not(.btn-secondary) { */
|
|
/* @apply text-green-500; */
|
|
/* } */
|
|
|
|
a {
|
|
@apply transition;
|
|
}
|
|
|
|
a:hover {
|
|
@apply text-brand-600;
|
|
}
|
|
|
|
p:last-child {
|
|
padding-bottom: 0;
|
|
}
|
|
}
|
|
|
|
.code {
|
|
@apply flex-1 p-2 px-6 w-1/2 pb-4;
|
|
max-width: 50%;
|
|
|
|
h4 {
|
|
@apply uppercase font-normal m-1 p-0 text-sm text-foreground-light;
|
|
}
|
|
|
|
h4:not(:first-child) {
|
|
@apply mt-6;
|
|
}
|
|
|
|
code {
|
|
@apply m-1 p-0;
|
|
background-color: none;
|
|
}
|
|
|
|
.is-highlighted {
|
|
@apply text-brand;
|
|
}
|
|
}
|
|
.codeblock-container + .codeblock-container {
|
|
@apply mt-12;
|
|
}
|
|
}
|
|
|
|
::-moz-selection {
|
|
/* Code for Firefox */
|
|
@apply bg-brand-default;
|
|
color: #333 !important;
|
|
}
|
|
|
|
::selection {
|
|
background-color: #6ee7b7;
|
|
color: #333 !important;
|
|
}
|
|
|
|
.has-hidden-children {
|
|
.visible-child {
|
|
transition: opacity 0.2s ease;
|
|
opacity: 100;
|
|
}
|
|
.hidden-child {
|
|
transition: opacity 0.2s ease;
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
.has-hidden-children:hover {
|
|
.visible-child {
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
.hidden-child {
|
|
opacity: 100;
|
|
}
|
|
}
|
|
|
|
.SQLTabNav {
|
|
overflow-x: auto;
|
|
overflow-y: hidden !important;
|
|
|
|
&::-webkit-scrollbar {
|
|
display: none !important;
|
|
}
|
|
|
|
/* for Firefox */
|
|
scrollbar-width: none; /* auto | thin | none | <length>; */
|
|
}
|
|
|
|
.radix-tooltip-arrow {
|
|
polygon {
|
|
@apply fill-background-alternative [[data-theme*=dark]_&]:fill-background-alternative;
|
|
/* fill: #eeeeee; */
|
|
}
|
|
}
|
|
|
|
.pitr-listbox {
|
|
@apply md:gap-x-2;
|
|
}
|
|
|
|
.roles-toggle {
|
|
label {
|
|
@apply mt-1;
|
|
}
|
|
}
|
|
|
|
.thin-scrollbars {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--foreground-muted) var(--background-alternative-default);
|
|
|
|
.dark & {
|
|
scrollbar-color: var(--foreground-lighter) var(--background-surface-100);
|
|
}
|
|
|
|
::-webkit-scrollbar {
|
|
background: var(--background-default);
|
|
height: 3px;
|
|
width: 0px;
|
|
border-radius: 0;
|
|
|
|
.dark & {
|
|
background: var(--border-control);
|
|
}
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
-webkit-box-shadow: inset 0 0 6px var(--border-control);
|
|
-webkit-border-radius: 5px;
|
|
border-radius: 5px;
|
|
|
|
.dark & {
|
|
-webkit-box-shadow: inset 0 0 6px var(--border-stronger);
|
|
}
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
-webkit-border-radius: 5px;
|
|
border-radius: 5px;
|
|
background: var(--foreground-muted);
|
|
|
|
.dark & {
|
|
-webkit-box-shadow: inset 0 0 6px var(--color-slate-1200);
|
|
}
|
|
}
|
|
}
|
|
|
|
.form-field-markdown {
|
|
a {
|
|
@apply text-brand transition opacity-75 hover:opacity-100 underline;
|
|
}
|
|
}
|
|
|
|
.view-icon {
|
|
rect {
|
|
@apply fill-blue-500 stroke-blue-500;
|
|
}
|
|
path,
|
|
circle {
|
|
@apply stroke-blue-900 fill-blue-500;
|
|
}
|
|
}
|
|
|
|
.table-icon {
|
|
rect {
|
|
@apply fill-green-1000 stroke-green-500;
|
|
}
|
|
line {
|
|
@apply stroke-green-500;
|
|
}
|
|
}
|
|
|
|
.recharts-cartesian-axis-tick {
|
|
text {
|
|
@apply text-xs;
|
|
}
|
|
}
|
|
.recharts-reference-line {
|
|
line {
|
|
@apply stroke-foreground-lighter;
|
|
}
|
|
}
|