mirror of
https://github.com/supabase/supabase.git
synced 2026-09-22 13:37:53 +08:00
512201dcd0
## What kind of change does this PR introduce? Chore. ## What is the current behaviour? Classic Dark remains available across the shared theme library and several apps. Studio now supports System, Dark, and Light as its theme modes, but still carries compatibility paths for Classic Dark. ## What is the new behaviour? - Removes Classic Dark from shared theme options, application commands, stylesheets, previews, examples, and replay handling. - Deletes the Classic Dark and faux Classic Dark stylesheets. - Removes the now-unused Classic Dark branches from Studio theme colour controls. - Migrates `classic-dark` to `dark` so first rendered frame renders Dark (not Light) | After | | --- | | <img width="1458" height="1778" alt="CleanShot 2026-09-18 at 11 07 40@2x" src="https://github.com/user-attachments/assets/679bf87f-a3c1-4599-ad2f-292d98d0b856" /> | ## To test 1. In Studio, open Account Preferences → Appearance. Confirm the available themes are System, Dark, and Light, and that theme colour controls still work in each resolved mode. 2. Set the `theme` local storage value to `classic-dark`, then reload Studio. Confirm it renders as Dark immediately and the stored value becomes `dark`. 3. Open the theme switcher in Design System, Learn, and UI Library. Confirm Classic Dark is no longer available and Light, Dark, and System still apply correctly. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Changes** * Removed the Classic Dark theme option from theme menus and settings across the application. * Classic Dark selections are automatically migrated to the standard Dark theme. * Updated theme documentation and demonstrations to list only System, Light, and Dark. * Removed Classic Dark styling and preview support; existing Dark, Light, and System themes remain available. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
446 lines
9.3 KiB
CSS
446 lines
9.3 KiB
CSS
@import 'config/tailwind.config.css';
|
|
@import 'config/typography.css';
|
|
|
|
@source '../pages/**/*.{js,ts,jsx,tsx}';
|
|
@source '../components/**/*.{js,ts,jsx,tsx}';
|
|
@source './../../../packages/ui/src/**/*.{tsx,ts,js}';
|
|
@source './../../../packages/ui-patterns/src/**/*.{tsx,ts,js}';
|
|
|
|
@theme inline {
|
|
--font-heading: var(--font-heading, var(--font-sans));
|
|
}
|
|
|
|
@theme {
|
|
--text-grid: 13px;
|
|
|
|
--color-typography-body-light: var(--foreground-light);
|
|
--color-typography-body-dark: var(--foreground-light);
|
|
--color-typography-body-secondary-light: var(--foreground-lighter);
|
|
--color-typography-body-secondary-dark: var(--foreground-lighter);
|
|
--color-typography-body-strong-light: var(--foreground-default);
|
|
--color-typography-body-strong-dark: var(--foreground-default);
|
|
--color-typography-body-faded-light: var(--foreground-muted);
|
|
--color-typography-body-faded-dark: var(--foreground-muted);
|
|
|
|
--color-table-body-light: var(--background-default);
|
|
--color-table-body-dark: var(--background-default);
|
|
--color-table-header-light: var(--background-surface-100);
|
|
--color-table-header-dark: var(--background-surface-100);
|
|
--color-table-footer-light: var(--background-surface-100);
|
|
--color-table-footer-dark: var(--background-surface-100);
|
|
--color-table-border-light: var(--border-default);
|
|
--color-table-border-dark: var(--border-default);
|
|
|
|
--color-panel-body-light: var(--background-surface-100);
|
|
--color-panel-body-dark: var(--background-surface-100);
|
|
--color-panel-header-light: var(--background-surface-100);
|
|
--color-panel-header-dark: var(--background-surface-100);
|
|
--color-panel-footer-light: var(--background-surface-100);
|
|
--color-panel-footer-dark: var(--background-surface-100);
|
|
--color-panel-border-light: var(--border-default);
|
|
--color-panel-border-dark: var(--border-default);
|
|
--color-panel-border-interior-light: var(--border-muted);
|
|
--color-panel-border-interior-dark: var(--border-muted);
|
|
--color-panel-border-hover-light: var(--border-muted);
|
|
--color-panel-border-hover-dark: var(--border-muted);
|
|
|
|
--animate-shimmer: shimmer 2s infinite linear;
|
|
--animate-badge-shimmer: badge-shimmer 3s ease-in-out infinite;
|
|
--animate-badge-pulse: badge-pulse 3s ease-in-out infinite;
|
|
--animate-chevron-up: chevron-up 2s ease-in-out infinite;
|
|
--animate-sway: sway 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
--animate-marketplace-featured-progress: marketplace-featured-progress linear forwards;
|
|
|
|
/* font sizing and weights optimized for Inter */
|
|
--text-sm: 0.8125rem;
|
|
--text-base: 0.9375rem;
|
|
--text-lg: 1rem;
|
|
--text-xl: 1.125rem;
|
|
--text-2xl: 1.375rem;
|
|
--text-3xl: 1.75rem;
|
|
--text-4xl: 2.125rem;
|
|
--text-5xl: 2.875rem;
|
|
--text-6xl: 3.625rem;
|
|
--text-7xl: 4.375rem;
|
|
--text-8xl: 5.875rem;
|
|
--text-9xl: 7.875rem;
|
|
--font-weight-normal: 450;
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% {
|
|
background-position: -1000px 0;
|
|
}
|
|
100% {
|
|
background-position: 1000px 0;
|
|
}
|
|
}
|
|
|
|
@keyframes badge-shimmer {
|
|
0% {
|
|
transform: rotate(-45deg) translateX(-100%);
|
|
opacity: 0;
|
|
}
|
|
10% {
|
|
opacity: 1;
|
|
}
|
|
40% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
transform: rotate(-45deg) translateX(100%);
|
|
opacity: 0;
|
|
}
|
|
100% {
|
|
transform: rotate(-45deg) translateX(100%);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes badge-pulse {
|
|
0%,
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
|
|
@keyframes chevron-up {
|
|
0%,
|
|
100% {
|
|
opacity: 0.2;
|
|
}
|
|
50% {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes sway {
|
|
0%,
|
|
100% {
|
|
transform: rotate(-10deg) scale(1.5) translateY(4rem);
|
|
}
|
|
50% {
|
|
transform: rotate(10deg) scale(1.5) translateY(2rem);
|
|
}
|
|
}
|
|
|
|
@keyframes marketplace-featured-progress {
|
|
from {
|
|
transform: scaleX(0);
|
|
}
|
|
to {
|
|
transform: scaleX(1);
|
|
}
|
|
}
|
|
|
|
:root {
|
|
--sidebar-background: var(--background-dash-sidebar);
|
|
--sidebar-foreground: var(--foreground-default);
|
|
--sidebar-primary: var(--foreground-default);
|
|
--sidebar-primary-foreground: var(--warning);
|
|
--sidebar-accent: var(--background-selection);
|
|
--sidebar-accent-foreground: var(--foreground-default);
|
|
--sidebar-border: var(--border-default);
|
|
--sidebar-ring: var(--ring);
|
|
--header-height: 3rem;
|
|
}
|
|
|
|
[data-theme='dark'],
|
|
.dark {
|
|
--sidebar-background: var(--background-dash-sidebar);
|
|
--sidebar-foreground: var(--foreground-default);
|
|
--sidebar-primary: var(--foreground-default);
|
|
--sidebar-primary-foreground: var(--warning);
|
|
--sidebar-accent: var(--background-selection);
|
|
--sidebar-accent-foreground: var(--foreground-default);
|
|
--sidebar-border: var(--border-default);
|
|
--sidebar-ring: var(--ring);
|
|
}
|
|
|
|
@layer base {
|
|
*,
|
|
::after,
|
|
::before,
|
|
::backdrop,
|
|
::file-selector-button {
|
|
border-color: var(--border-default, currentColor);
|
|
}
|
|
}
|
|
|
|
html,
|
|
body,
|
|
#__next,
|
|
.main {
|
|
@apply bg-dash-sidebar relative;
|
|
@apply text-foreground;
|
|
@apply overflow-x-clip;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-font-smoothing: antialiased;
|
|
overscroll-behavior: none;
|
|
font-weight: 450;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
@layer base {
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6 {
|
|
@apply font-heading;
|
|
}
|
|
}
|
|
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6 {
|
|
@apply font-semibold;
|
|
}
|
|
|
|
.form-group .form-text,
|
|
.Form .form-text {
|
|
@apply text-foreground-lighter;
|
|
}
|
|
|
|
.form-group input,
|
|
.form-group input[type='text'],
|
|
.form-group input[type='email'],
|
|
.form-group input[type='url'],
|
|
.form-group input[type='password'],
|
|
.form-group input[type='number'],
|
|
.form-group input[type='date'],
|
|
.form-group input[type='datetime-local'],
|
|
.form-group input[type='month'],
|
|
.form-group input[type='search'],
|
|
.form-group input[type='tel'],
|
|
.form-group input[type='time'],
|
|
.form-group input[type='week'],
|
|
.form-group input[multiple],
|
|
.form-group textarea,
|
|
.form-group select,
|
|
input.form-control,
|
|
.form-control input,
|
|
.form-control textarea {
|
|
@apply block;
|
|
@apply box-border;
|
|
/* @apply w-full ; */
|
|
@apply rounded-md;
|
|
@apply shadow-xs;
|
|
@apply text-foreground;
|
|
@apply border;
|
|
@apply bg-studio;
|
|
@apply border-strong border;
|
|
/* Prefer shared focus-ring over legacy green box-shadow / ring-current stacks */
|
|
@apply focus-ring;
|
|
}
|
|
|
|
.form-group input,
|
|
.form-group select,
|
|
.form-group textarea {
|
|
@apply px-4 py-2;
|
|
}
|
|
|
|
/* icons in date / time inputs */
|
|
.dark input[type='date']::-webkit-calendar-picker-indicator,
|
|
.dark input[type='datetime-local']::-webkit-calendar-picker-indicator,
|
|
.dark input[type='time']::-webkit-calendar-picker-indicator {
|
|
filter: invert(0.8);
|
|
}
|
|
|
|
input.is-invalid {
|
|
@apply bg-red-100;
|
|
@apply border border-red-700;
|
|
@apply focus-ring focus-visible:ring-destructive;
|
|
@apply placeholder:text-red-600;
|
|
}
|
|
|
|
input::placeholder {
|
|
@apply text-foreground-lighter;
|
|
}
|
|
|
|
.form-group input::placeholder {
|
|
@apply text-foreground-lighter;
|
|
}
|
|
|
|
.billing-input-fixed {
|
|
@apply w-full appearance-none rounded-sm border bg-gray-700 py-2 px-3 leading-tight text-gray-300 shadow-sm;
|
|
}
|
|
|
|
.input-mono {
|
|
input,
|
|
textarea {
|
|
@apply font-mono;
|
|
}
|
|
}
|
|
|
|
.input-sm {
|
|
input,
|
|
textarea {
|
|
@apply text-sm;
|
|
}
|
|
}
|
|
|
|
.input-xs {
|
|
input,
|
|
textarea {
|
|
@apply text-xs;
|
|
}
|
|
}
|
|
|
|
input[type='radio'] {
|
|
@apply p-0;
|
|
}
|
|
|
|
input[type='number'] {
|
|
-moz-appearance: textfield; /* Firefox, Not included in tailwind styles reset */
|
|
}
|
|
|
|
/* TODO: It doesnt' work, need to check */
|
|
.hide-scrollbar {
|
|
scrollbar-width: none; /* Firefox */
|
|
-ms-overflow-style: none; /* Internet Explorer 10+ */
|
|
}
|
|
|
|
.hide-scrollbar::-webkit-scrollbar {
|
|
width: 0;
|
|
height: 0;
|
|
display: none;
|
|
}
|
|
|
|
div[data-radix-portal]:not(.portal--toast) {
|
|
z-index: 2147483646 !important;
|
|
}
|
|
|
|
.billing-compute-radio {
|
|
label {
|
|
@apply items-center justify-between;
|
|
&:last-child {
|
|
opacity: 100 !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
.recharts-tooltip-cursor {
|
|
@apply fill-transparent;
|
|
}
|
|
|
|
.expandable-tr {
|
|
display: grid;
|
|
grid-template-columns: repeat(5, 1fr);
|
|
}
|
|
|
|
.expanded-row-content {
|
|
display: grid;
|
|
grid-column: 1/-1;
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.multi-select {
|
|
button {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
html {
|
|
color-scheme: dark;
|
|
}
|
|
}
|
|
|
|
.text-area-resize-none {
|
|
textarea {
|
|
@apply resize-none;
|
|
}
|
|
}
|
|
|
|
.capitalize-sentence:first-letter {
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.input-clear {
|
|
input {
|
|
@apply pr-7;
|
|
}
|
|
}
|
|
|
|
/* to do: remove this CSS and do the same thing in a reusable tooltip component */
|
|
[data-radix-popper-content-wrapper] {
|
|
@apply z-50!;
|
|
}
|
|
|
|
.settings-container {
|
|
@apply mx-auto max-w-4xl xl:max-w-6xl;
|
|
}
|
|
|
|
.react-grid-item.react-grid-placeholder {
|
|
@apply bg-brand-500!;
|
|
}
|
|
|
|
.react-grid-item > .react-resizable-handle::after {
|
|
content: '';
|
|
position: absolute;
|
|
right: 3px !important;
|
|
bottom: 3px !important;
|
|
width: 6px !important;
|
|
height: 6px !important;
|
|
@apply border-strong! dark:border-r-2! dark:border-b-2! dark:border-overlay!;
|
|
}
|
|
|
|
@keyframes typewriter {
|
|
from {
|
|
width: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes blink-caret {
|
|
50% {
|
|
border-color: transparent;
|
|
}
|
|
}
|
|
|
|
/* Zoomable image (react-medium-image-zoom) */
|
|
|
|
[data-rmiz-modal]:focus,
|
|
[data-rmiz-modal-overlay]:focus {
|
|
outline: none !important;
|
|
}
|
|
|
|
[data-rmiz-modal-overlay],
|
|
[data-rmiz-modal-img] {
|
|
transition-timing-function: cubic-bezier(0.24, 0.25, 0.05, 1) !important;
|
|
}
|
|
|
|
[data-rmiz-modal-overlay='visible'] {
|
|
@apply bg-background!;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
[data-rmiz-modal-img] {
|
|
image-rendering: high-quality;
|
|
}
|
|
|
|
.prose.text-sm ol > li::before {
|
|
top: 0.05rem;
|
|
}
|
|
|
|
.prose.text-sm ul > li::before {
|
|
top: 0.65rem;
|
|
}
|
|
|
|
.prose :where(strong, b):not(:where([class~='not-prose'], [class~='not-prose'] *)),
|
|
strong,
|
|
b {
|
|
@apply font-bold;
|
|
}
|