+
Authenticator app
TOTP via auth app
-
diff --git a/apps/www/app/(products)/database/_components/FeaturesSection.tsx b/apps/www/app/(products)/database/_components/FeaturesSection.tsx
index 2edd765bfdd..96b6d36b861 100644
--- a/apps/www/app/(products)/database/_components/FeaturesSection.tsx
+++ b/apps/www/app/(products)/database/_components/FeaturesSection.tsx
@@ -478,7 +478,9 @@ function RealtimeSkeleton() {
key={msg.id}
className={cn(
'transition-colors duration-500',
- tableFlashId === msg.id ? 'bg-brand/15 dark:bg-brand/5' : 'bg-surface-75'
+ tableFlashId === msg.id
+ ? 'bg-brand-default/15 dark:bg-brand-default/5'
+ : 'bg-surface-75'
)}
>
@@ -546,9 +548,9 @@ function RealtimeSkeleton() {
className={cn(
'max-w-[75%] px-3 py-1.5 rounded-xl text-xs leading-snug transition-colors duration-500',
isAlice
- ? 'bg-brand/15 text-foreground rounded-br-sm'
+ ? 'bg-brand-default/15 text-foreground rounded-br-sm'
: 'bg-surface-300 text-foreground rounded-bl-sm',
- chatFlashId === msg.id && 'ring-1 ring-brand/30'
+ chatFlashId === msg.id && 'ring-1 ring-brand-default/30'
)}
>
{msg.text}
diff --git a/apps/www/app/(products)/database/_components/Illustrations/SpreadsheetIllustration.tsx b/apps/www/app/(products)/database/_components/Illustrations/SpreadsheetIllustration.tsx
index f37f71250a0..3d139ce391f 100644
--- a/apps/www/app/(products)/database/_components/Illustrations/SpreadsheetIllustration.tsx
+++ b/apps/www/app/(products)/database/_components/Illustrations/SpreadsheetIllustration.tsx
@@ -140,7 +140,7 @@ export function SpreadsheetIllustration() {
@@ -245,9 +247,9 @@ function DatabaseChangesSkeleton() {
className={cn(
'max-w-[75%] px-3 py-1.5 rounded-xl text-xs leading-snug transition-colors duration-500',
isAlice
- ? 'bg-brand/15 text-foreground rounded-br-sm'
+ ? 'bg-brand-default/15 text-foreground rounded-br-sm'
: 'bg-surface-300 text-foreground rounded-bl-sm',
- chatFlashId === msg.id && 'ring-1 ring-brand/30'
+ chatFlashId === msg.id && 'ring-1 ring-brand-default/30'
)}
>
{msg.text}
@@ -626,7 +628,7 @@ function BroadcastSkeleton() {
key={i}
className={cn(
'absolute bottom-6 z-10 flex h-10 w-10 -translate-x-1/2 items-center justify-center rounded-xl border bg-surface-100 shadow-xs dark:shadow-sm transition-all duration-300',
- isFlashing ? 'border-brand text-brand' : 'border-border text-foreground-muted'
+ isFlashing ? 'border-brand-default text-brand' : 'border-border text-foreground-muted'
)}
style={{ left: `${xPercent}%` }}
>
diff --git a/apps/www/app/(products)/storage/_components/FeaturesSection.tsx b/apps/www/app/(products)/storage/_components/FeaturesSection.tsx
index 57d933117e5..55379f28805 100644
--- a/apps/www/app/(products)/storage/_components/FeaturesSection.tsx
+++ b/apps/www/app/(products)/storage/_components/FeaturesSection.tsx
@@ -38,7 +38,7 @@ function InteroperableSkeleton() {
{[0, 1].map((i) => (
(
(
-
+
Category
{category.name}
@@ -379,7 +379,7 @@ function PartnerDetails({
}
target="_blank"
rel="noreferrer"
- className="text-brand-link hover:underline transition-colors"
+ className="text-brand hover:underline transition-colors"
>
{(() => {
try {
@@ -402,7 +402,7 @@ function PartnerDetails({
href={activeListing.docsUrl}
target="_blank"
rel="noreferrer"
- className="text-brand-link hover:underline transition-colors"
+ className="text-brand hover:underline transition-colors"
>
Learn
diff --git a/apps/www/app/state-of-startups/StateOfStartups2026Content.tsx b/apps/www/app/state-of-startups/StateOfStartups2026Content.tsx
index 6c88ce226c6..a167e279cf8 100644
--- a/apps/www/app/state-of-startups/StateOfStartups2026Content.tsx
+++ b/apps/www/app/state-of-startups/StateOfStartups2026Content.tsx
@@ -97,9 +97,8 @@ function FloatingTableOfContents({
href={`#chapter-${chapterIndex + 1}`}
onClick={() => setIsTocOpen(false)}
className={cn(
- 'block px-6 py-2 text-xs transition-colors font-mono uppercase tracking-wider text-center text-foreground-light hover:text-brand-link hover:bg-brand-300/25',
- chapterIndex + 1 === activeChapter &&
- 'bg-brand-300/40 text-brand-link dark:text-brand'
+ 'block px-6 py-2 text-xs transition-colors font-mono uppercase tracking-wider text-center text-foreground-light hover:text-brand hover:bg-brand-300/25',
+ chapterIndex + 1 === activeChapter && 'bg-brand-300/40 text-brand'
)}
>
{chapter.shortTitle}
@@ -227,7 +226,7 @@ export default function StateOfStartups2026Content() {
{chapterIndex + 1}
diff --git a/apps/www/app/state-of-startups/components/CohortToggle.tsx b/apps/www/app/state-of-startups/components/CohortToggle.tsx
index 302e4150a1f..5e619a543d3 100644
--- a/apps/www/app/state-of-startups/components/CohortToggle.tsx
+++ b/apps/www/app/state-of-startups/components/CohortToggle.tsx
@@ -29,7 +29,7 @@ export function CohortToggle({ eyebrow, options, value, onValueChange }: CohortT
onClick={() => onValueChange(option.label)}
className={`px-3 py-1 text-xs font-mono uppercase tracking-wider border rounded-full transition-colors ${
isActive
- ? 'border-brand-500/40 bg-brand-300/40 text-brand-link dark:text-brand'
+ ? 'border-brand-500/40 bg-brand-300/40 text-brand'
: 'border-overlay text-foreground-light hover:text-foreground hover:bg-surface-100'
}`}
>
diff --git a/apps/www/app/state-of-startups/components/DecorativeProgressBar.tsx b/apps/www/app/state-of-startups/components/DecorativeProgressBar.tsx
index c032444d73e..b2a77a140c2 100644
--- a/apps/www/app/state-of-startups/components/DecorativeProgressBar.tsx
+++ b/apps/www/app/state-of-startups/components/DecorativeProgressBar.tsx
@@ -11,7 +11,7 @@ interface ProgressBarProps {
export function ProgressBar({
className = 'h-4',
backgroundClassName = 'bg-foreground-muted/80',
- foregroundClassName = 'bg-brand',
+ foregroundClassName = 'bg-brand-default',
animationDelay,
reverse = false,
}: ProgressBarProps) {
@@ -62,7 +62,7 @@ const PROGRESS_BARS = [
{
height: 'h-8',
bgColor: 'bg-foreground-muted/50',
- fgColor: 'bg-brand',
+ fgColor: 'bg-brand-default',
animationDelay: '0.3s',
},
{
diff --git a/apps/www/app/state-of-startups/components/ParticipantsCarousel.tsx b/apps/www/app/state-of-startups/components/ParticipantsCarousel.tsx
index a5f7ff15a83..ecfa5ce21a6 100644
--- a/apps/www/app/state-of-startups/components/ParticipantsCarousel.tsx
+++ b/apps/www/app/state-of-startups/components/ParticipantsCarousel.tsx
@@ -68,7 +68,7 @@ export function ParticipantsCarousel({ participants }: { participants: Participa
href={participant.url}
target="_blank"
rel="noopener noreferrer"
- className="text-xs md:text-sm font-mono tracking-widest uppercase text-foreground-lighter hover:text-brand-link transition-colors whitespace-nowrap"
+ className="text-xs md:text-sm font-mono tracking-widest uppercase text-foreground-lighter hover:text-brand transition-colors whitespace-nowrap"
>
{participant.company}
diff --git a/apps/www/app/state-of-startups/components/SectionCallout.tsx b/apps/www/app/state-of-startups/components/SectionCallout.tsx
index 641700a83b9..7efee4330ae 100644
--- a/apps/www/app/state-of-startups/components/SectionCallout.tsx
+++ b/apps/www/app/state-of-startups/components/SectionCallout.tsx
@@ -13,15 +13,13 @@ export function SectionCallout({ eyebrow, body, href, cta, external }: SectionCa
return (
-
- {eyebrow}
-
+
{eyebrow}
{body}
{cta}
diff --git a/apps/www/app/state-of-startups/components/SurveyChannelMixChart.tsx b/apps/www/app/state-of-startups/components/SurveyChannelMixChart.tsx
index 0b7b9fc65b8..ce32832fa40 100644
--- a/apps/www/app/state-of-startups/components/SurveyChannelMixChart.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyChannelMixChart.tsx
@@ -74,7 +74,7 @@ export function SurveyChannelMixChart({
}}
/>
diff --git a/apps/www/app/state-of-startups/components/SurveyChapter.tsx b/apps/www/app/state-of-startups/components/SurveyChapter.tsx
index 6d087ef9dbe..99e88af612e 100644
--- a/apps/www/app/state-of-startups/components/SurveyChapter.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyChapter.tsx
@@ -56,9 +56,7 @@ export function SurveyChapter({
{/* Text content */}
-
+
{shortTitle}
diff --git a/apps/www/app/state-of-startups/components/SurveyChapterSection.tsx b/apps/www/app/state-of-startups/components/SurveyChapterSection.tsx
index 766829481f5..bf69229f118 100644
--- a/apps/www/app/state-of-startups/components/SurveyChapterSection.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyChapterSection.tsx
@@ -49,7 +49,7 @@ export function SurveyChapterSection({ section }: { section: SurveySection }) {
return { [cohortToggle.key]: option.filter }
}, [cohortToggle, cohortLabel])
- const eyebrowColor = 'text-brand-link dark:text-brand'
+ const eyebrowColor = 'text-brand'
// A section can be compared across years only if it has any 2025 data. New-in-
// 2026 questions (share of codebase, auth, agents, MCP, the AI-codebase
diff --git a/apps/www/app/state-of-startups/components/SurveyChart.tsx b/apps/www/app/state-of-startups/components/SurveyChart.tsx
index 0ee76f6b201..1a61e4e57ec 100644
--- a/apps/www/app/state-of-startups/components/SurveyChart.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyChart.tsx
@@ -25,8 +25,8 @@ interface SurveyChartProps {
maxBars?: number
}
-const accentBarFg = 'bg-brand'
-const accentBarText = 'text-brand-link dark:text-brand'
+const accentBarFg = 'bg-brand-default'
+const accentBarText = 'text-brand'
export function SurveyChart({
title,
diff --git a/apps/www/app/state-of-startups/components/SurveyChartShell.tsx b/apps/www/app/state-of-startups/components/SurveyChartShell.tsx
index e3ac8344e94..a38caf39a58 100644
--- a/apps/www/app/state-of-startups/components/SurveyChartShell.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyChartShell.tsx
@@ -63,7 +63,7 @@ export function ChartLegend({
diff --git a/apps/www/app/state-of-startups/components/SurveyPullQuoteCarousel.tsx b/apps/www/app/state-of-startups/components/SurveyPullQuoteCarousel.tsx
index 287c2ba4c8e..468de274c09 100644
--- a/apps/www/app/state-of-startups/components/SurveyPullQuoteCarousel.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyPullQuoteCarousel.tsx
@@ -120,7 +120,7 @@ export function SurveyPullQuoteCarousel({ quotes }: { quotes: CarouselPullQuote[
}}
>
(
{q.theme && (
-
+
{q.theme}
)}
diff --git a/apps/www/app/state-of-startups/components/SurveyRankedAnswersPair.tsx b/apps/www/app/state-of-startups/components/SurveyRankedAnswersPair.tsx
index b8d04e67cd6..e0288526d56 100644
--- a/apps/www/app/state-of-startups/components/SurveyRankedAnswersPair.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyRankedAnswersPair.tsx
@@ -9,7 +9,7 @@ export function SurveyRankedAnswersPair({
}) {
const accent = useAccent()
- const accentBlocks = ['bg-brand', 'bg-brand-500', 'bg-brand-300']
+ const accentBlocks = ['bg-brand-default', 'bg-brand-500', 'bg-brand-300']
const accentRankText = 'text-brand'
diff --git a/apps/www/app/state-of-startups/components/SurveyStatCard.tsx b/apps/www/app/state-of-startups/components/SurveyStatCard.tsx
index 41a30578a64..d7ce992614f 100644
--- a/apps/www/app/state-of-startups/components/SurveyStatCard.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyStatCard.tsx
@@ -27,7 +27,7 @@ export function SurveyStatCard({ label, query, value, cohortFilter }: SurveyStat
const cardRef = useRef(null)
const { year } = useYear()
- const accentBg = 'bg-brand'
+ const accentBg = 'bg-brand-default'
const accentText = 'text-brand'
// A static `value` wins; otherwise resolve from the embedded dataset for the
diff --git a/apps/www/app/state-of-startups/components/SurveySummarizedAnswer.tsx b/apps/www/app/state-of-startups/components/SurveySummarizedAnswer.tsx
index 6187fe3bb8b..2262aa28a82 100644
--- a/apps/www/app/state-of-startups/components/SurveySummarizedAnswer.tsx
+++ b/apps/www/app/state-of-startups/components/SurveySummarizedAnswer.tsx
@@ -14,7 +14,7 @@ export function SurveySummarizedAnswer({ label, answers }: { label: string; answ
const [isBlinking, setIsBlinking] = useState(false)
const accent = useAccent()
- const accentBg = 'bg-brand'
+ const accentBg = 'bg-brand-default'
useEffect(() => {
if (answers.length <= 1) return
diff --git a/apps/www/app/state-of-startups/components/SurveyWordCloud.tsx b/apps/www/app/state-of-startups/components/SurveyWordCloud.tsx
index 6b36f148760..f639c04e2c3 100644
--- a/apps/www/app/state-of-startups/components/SurveyWordCloud.tsx
+++ b/apps/www/app/state-of-startups/components/SurveyWordCloud.tsx
@@ -18,7 +18,7 @@ export function SurveyWordCloud({
const [scramblingTexts, setScramblingTexts] = useState([])
const accent = useAccent()
- const accentBg = 'bg-brand'
+ const accentBg = 'bg-brand-default'
// Calculate the range within the current context
const counts = answers.map((answer) => answer.count)
diff --git a/apps/www/app/state-of-startups/register/RegisterContent.tsx b/apps/www/app/state-of-startups/register/RegisterContent.tsx
index e10d6a90760..edf8c3d7479 100644
--- a/apps/www/app/state-of-startups/register/RegisterContent.tsx
+++ b/apps/www/app/state-of-startups/register/RegisterContent.tsx
@@ -198,7 +198,7 @@ function PreviousResultsCta() {
of
-
+
Startups
diff --git a/apps/www/components/Contribute/Hero.tsx b/apps/www/components/Contribute/Hero.tsx
index d8405b52a8b..850fe4f6805 100644
--- a/apps/www/components/Contribute/Hero.tsx
+++ b/apps/www/components/Contribute/Hero.tsx
@@ -4,7 +4,7 @@ import { Button } from 'ui'
export function Hero() {
return (
-
+
Supabase Contribute
diff --git a/apps/www/components/Contribute/markdownComponents.tsx b/apps/www/components/Contribute/markdownComponents.tsx
index 59dfa69cfa2..fcf1402299c 100644
--- a/apps/www/components/Contribute/markdownComponents.tsx
+++ b/apps/www/components/Contribute/markdownComponents.tsx
@@ -19,7 +19,7 @@ export const markdownComponents: Components = {
a: ({ node, ...props }) => (
diff --git a/apps/www/components/EnterpriseFormQuotes.tsx b/apps/www/components/EnterpriseFormQuotes.tsx
index a6d20804047..3d1e1e548cc 100644
--- a/apps/www/components/EnterpriseFormQuotes.tsx
+++ b/apps/www/components/EnterpriseFormQuotes.tsx
@@ -104,7 +104,7 @@ const EnterpriseFormQuotes = ({
99.7 ? 'opacity-0' : 'opacity-100'
)}
style={{ x: `${progress! - 100}%` }}
diff --git a/apps/www/components/Events/new/EventList.tsx b/apps/www/components/Events/new/EventList.tsx
index caa20d147f7..3116163fbcc 100644
--- a/apps/www/components/Events/new/EventList.tsx
+++ b/apps/www/components/Events/new/EventList.tsx
@@ -63,7 +63,7 @@ export function EventList() {
diff --git a/apps/www/components/Footer/index.tsx b/apps/www/components/Footer/index.tsx
index 6fc423a4475..f7fc62333dd 100644
--- a/apps/www/components/Footer/index.tsx
+++ b/apps/www/components/Footer/index.tsx
@@ -89,7 +89,7 @@ const Footer = (props: Props) => {
We protect your data.
-
+
More on Security
@@ -168,7 +168,7 @@ const Footer = (props: Props) => {
{newsletterStatus === 'success' ? (
-
Thanks for subscribing!
+
Thanks for subscribing!
You'll hear from us when we publish our next newsletter issue.
diff --git a/apps/www/components/LaunchWeek/11/LW11Meetups.tsx b/apps/www/components/LaunchWeek/11/LW11Meetups.tsx
index f3a0e04410e..05abfc9d384 100644
--- a/apps/www/components/LaunchWeek/11/LW11Meetups.tsx
+++ b/apps/www/components/LaunchWeek/11/LW11Meetups.tsx
@@ -118,7 +118,7 @@ const LW11Meetups = ({ meetups }: { meetups?: Meetup[] }) => {
)}
>
{liveNow && (
-
+
)}
{meetup.title}
{i !== meets.length - 1 && ', '}
@@ -138,7 +138,7 @@ const LW11Meetups = ({ meetups }: { meetups?: Meetup[] }) => {
)}
>
{liveNow && (
-
+
)}
{meetup.title}
{i !== meets.length - 1 && ', '}
diff --git a/apps/www/components/LaunchWeek/11/Releases/LW11StickyNav.tsx b/apps/www/components/LaunchWeek/11/Releases/LW11StickyNav.tsx
index 0957d7c0c0d..766c502b681 100644
--- a/apps/www/components/LaunchWeek/11/Releases/LW11StickyNav.tsx
+++ b/apps/www/components/LaunchWeek/11/Releases/LW11StickyNav.tsx
@@ -86,7 +86,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
diff --git a/apps/www/components/LaunchWeek/12/LWMeetups.tsx b/apps/www/components/LaunchWeek/12/LWMeetups.tsx
index e39039aa145..a7e8ad7a4ce 100644
--- a/apps/www/components/LaunchWeek/12/LWMeetups.tsx
+++ b/apps/www/components/LaunchWeek/12/LWMeetups.tsx
@@ -111,7 +111,7 @@ const LWMeetups = ({ meetups, className }: { meetups?: Meetup[]; className?: str
)}
>
{liveNow && (
-
+
)}
{meetup.title}
diff --git a/apps/www/components/LaunchWeek/12/Releases/LWStickyNav.tsx b/apps/www/components/LaunchWeek/12/Releases/LWStickyNav.tsx
index d70fbb261fc..9d0aeae4256 100644
--- a/apps/www/components/LaunchWeek/12/Releases/LWStickyNav.tsx
+++ b/apps/www/components/LaunchWeek/12/Releases/LWStickyNav.tsx
@@ -69,7 +69,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
diff --git a/apps/www/components/LaunchWeek/13/Releases/LWStickyNav.tsx b/apps/www/components/LaunchWeek/13/Releases/LWStickyNav.tsx
index 4e11106646e..ed69bb05c9d 100644
--- a/apps/www/components/LaunchWeek/13/Releases/LWStickyNav.tsx
+++ b/apps/www/components/LaunchWeek/13/Releases/LWStickyNav.tsx
@@ -90,7 +90,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
@@ -115,7 +115,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
diff --git a/apps/www/components/LaunchWeek/14/Releases/LWStickyNav.tsx b/apps/www/components/LaunchWeek/14/Releases/LWStickyNav.tsx
index 63293c6130a..16144cb5c52 100644
--- a/apps/www/components/LaunchWeek/14/Releases/LWStickyNav.tsx
+++ b/apps/www/components/LaunchWeek/14/Releases/LWStickyNav.tsx
@@ -90,7 +90,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
@@ -115,7 +115,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
diff --git a/apps/www/components/LaunchWeek/15/LW15Meetups.tsx b/apps/www/components/LaunchWeek/15/LW15Meetups.tsx
index 45f2944dd50..c14b489d869 100644
--- a/apps/www/components/LaunchWeek/15/LW15Meetups.tsx
+++ b/apps/www/components/LaunchWeek/15/LW15Meetups.tsx
@@ -152,7 +152,7 @@ const LW15Meetups = ({ className, meetups = [] }: PropsWithChildren
) => {
)}
>
{liveNow && (
-
+
)}
{getMeetupCity(meetup)}
diff --git a/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx b/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx
index 96dd8cf9b1f..bd46ab48c59 100644
--- a/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx
+++ b/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx
@@ -25,7 +25,7 @@ export const LaunchSection = (props: WeekDayProps) => {
{/* END timeline dot */}
@@ -63,7 +63,7 @@ export const LaunchSection = (props: WeekDayProps) => {
nextDayNotShipped
? 'launch-week-timeline-border--approaching'
: props.shipped
- ? 'border-brand'
+ ? 'border-brand-default'
: 'border-purple-700',
className,
].join(' ')}
@@ -151,7 +151,7 @@ export const LaunchSection = (props: WeekDayProps) => {
md:pl-8
lg:pl-8
`,
- props.shipped ? 'border-brand' : 'border-purple-700',
+ props.shipped ? 'border-brand-default' : 'border-purple-700',
props.shippingHasStarted && 'lg:col-span-6',
!lastIndex && 'pb-8 lg:pb-16',
].join(' ')}
diff --git a/apps/www/components/LaunchWeek/X/LWXMeetups.tsx b/apps/www/components/LaunchWeek/X/LWXMeetups.tsx
index 5e3b71f36b8..7099bdaf9c2 100644
--- a/apps/www/components/LaunchWeek/X/LWXMeetups.tsx
+++ b/apps/www/components/LaunchWeek/X/LWXMeetups.tsx
@@ -114,7 +114,7 @@ const LWXMeetups = ({ meetups }: { meetups?: Meetup[] }) => {
)}
>
{liveNow && (
-
+
)}
{meetup.title}
{i !== meets.length - 1 && ', '}
diff --git a/apps/www/components/LaunchWeek/X/Releases/LWXStickyNav.tsx b/apps/www/components/LaunchWeek/X/Releases/LWXStickyNav.tsx
index f3470aa2d8f..d8e5fb6d742 100644
--- a/apps/www/components/LaunchWeek/X/Releases/LWXStickyNav.tsx
+++ b/apps/www/components/LaunchWeek/X/Releases/LWXStickyNav.tsx
@@ -81,7 +81,7 @@ const LWXStickyNav: FC = () => {
{day.isToday && (
)}
diff --git a/apps/www/components/Nav/MenuItem.tsx b/apps/www/components/Nav/MenuItem.tsx
index 7dbfaf6ef0f..ff1bbca8942 100644
--- a/apps/www/components/Nav/MenuItem.tsx
+++ b/apps/www/components/Nav/MenuItem.tsx
@@ -63,7 +63,7 @@ const MenuItem = React.forwardRef<
{title}
diff --git a/apps/www/components/Nav/index.tsx b/apps/www/components/Nav/index.tsx
index 42cdb740aa2..ac46655b3a5 100644
--- a/apps/www/components/Nav/index.tsx
+++ b/apps/www/components/Nav/index.tsx
@@ -152,7 +152,7 @@ const Nav = ({ hideNavbar, stickyNavbar = true }: Props) => {
{menuItem.title}
@@ -180,7 +180,7 @@ const Nav = ({ hideNavbar, stickyNavbar = true }: Props) => {
diff --git a/apps/www/components/Panel/Panel.tsx b/apps/www/components/Panel/Panel.tsx
index 31012aae46e..96274a15c6c 100644
--- a/apps/www/components/Panel/Panel.tsx
+++ b/apps/www/components/Panel/Panel.tsx
@@ -85,7 +85,7 @@ const Panel = ({
'group/panel relative rounded-lg md:rounded-xl p-px bg-surface-75 bg-linear-to-b from-border to-border/50 dark:to-surface-100 transition-all hover:shadow-md',
!trackCursor && hasActiveOnHover
? activeColor === 'brand'
- ? 'hover:bg-none hover:bg-brand!'
+ ? 'hover:bg-none hover:bg-brand-default!'
: 'hover:bg-none hover:bg-border-stronger!'
: '',
outerClassName
diff --git a/apps/www/components/Pricing/PricingFAQs.tsx b/apps/www/components/Pricing/PricingFAQs.tsx
index c05fb9bdbf9..c2e3d1fa878 100644
--- a/apps/www/components/Pricing/PricingFAQs.tsx
+++ b/apps/www/components/Pricing/PricingFAQs.tsx
@@ -35,7 +35,7 @@ const PricingFAQs = () => {
Open a support ticket
{' '}
diff --git a/apps/www/components/ProductIcon.tsx b/apps/www/components/ProductIcon.tsx
index 21878ed6de3..c8d3fd15626 100644
--- a/apps/www/components/ProductIcon.tsx
+++ b/apps/www/components/ProductIcon.tsx
@@ -11,17 +11,17 @@ function ProductIcon({ icon, color }: ProductIcon) {
case 'green':
return {
container: 'bg-brand-600 text-brand-100',
- svg: 'stroke-brand',
+ svg: 'stroke-brand-default',
}
case 'alt':
return {
container: 'bg-brand-200 text-brand',
- svg: 'stroke-brand',
+ svg: 'stroke-brand-default',
}
case 'gray':
return {
container: 'bg- text-brand',
- svg: 'stroke-brand',
+ svg: 'stroke-brand-default',
}
case 'black':
default:
@@ -38,7 +38,7 @@ function ProductIcon({ icon, color }: ProductIcon) {
'inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md',
!color || color === 'black' ? 'bg-foreground text-background-alternative' : '',
color && color === 'gray' ? 'bg-border-strong text-foreground-light' : '',
- color && color === 'green' ? 'bg-brand text-brand-100' : '',
+ color && color === 'green' ? 'bg-brand-default text-brand-100' : '',
color && color === 'alt' ? 'bg-alternative text-brand' : '',
// color && color === 'alt' ? 'bg-surface-300 text-brand' : '',
].join(' ')}
@@ -49,7 +49,7 @@ function ProductIcon({ icon, color }: ProductIcon) {
!color || color === 'black' ? 'stroke-background' : '',
color && color === 'gray' ? 'stroke-foreground-light' : '',
color && color === 'green' ? 'stroke-brand-200' : '',
- color && color === 'alt' ? 'stroke-brand' : '',
+ color && color === 'alt' ? 'stroke-brand-default' : '',
].join(' ')}
xmlns="http://www.w3.org/2000/svg"
fill="none"
diff --git a/apps/www/components/Products/RealtimeVisual.tsx b/apps/www/components/Products/RealtimeVisual.tsx
index 64b3d622d98..a0e17a903fa 100644
--- a/apps/www/components/Products/RealtimeVisual.tsx
+++ b/apps/www/components/Products/RealtimeVisual.tsx
@@ -164,10 +164,10 @@ const RealtimeVisual: React.FC = ({ className }) => {
// transition: 'transform 0.1s ease-out', // Smooth transition
}}
>
-
{/* Gradient to hide animation under text to maintain readability */}
diff --git a/apps/www/components/Regions/RegionsMap.tsx b/apps/www/components/Regions/RegionsMap.tsx
index d5315544cd3..6186cbd25f9 100644
--- a/apps/www/components/Regions/RegionsMap.tsx
+++ b/apps/www/components/Regions/RegionsMap.tsx
@@ -109,7 +109,7 @@ export const RegionsMap = ({
onMouseLeave={() => onRegionHover(undefined)}
onClick={() => onRegionSelect(region.code)}
>
- {isSelected && }
+ {isSelected && }
diff --git a/apps/www/components/ScrollProgress.tsx b/apps/www/components/ScrollProgress.tsx
index f83809715a8..f5a8ebe39ee 100644
--- a/apps/www/components/ScrollProgress.tsx
+++ b/apps/www/components/ScrollProgress.tsx
@@ -35,7 +35,7 @@ const ScrollProgress = () => {
return (
{
{customer.author}, {customer.role}
{customer.url && (
-
+
diff --git a/apps/www/components/Sections/TimedTabsSection.tsx b/apps/www/components/Sections/TimedTabsSection.tsx
index 3c8d17eac58..ef700dec426 100644
--- a/apps/www/components/Sections/TimedTabsSection.tsx
+++ b/apps/www/components/Sections/TimedTabsSection.tsx
@@ -33,7 +33,7 @@ const Tab = ({ isActive, label, paragraph, onClick, progress, intervalDuration }
{isActive && (
99.7 ? 'opacity-0' : 'opacity-100',
].join(' ')}
style={{ x: `${progress! - 100}%` }}
diff --git a/apps/www/components/SubprocessorUpdatesForm.tsx b/apps/www/components/SubprocessorUpdatesForm.tsx
index b89dff34769..c2369c4a2ad 100644
--- a/apps/www/components/SubprocessorUpdatesForm.tsx
+++ b/apps/www/components/SubprocessorUpdatesForm.tsx
@@ -66,7 +66,7 @@ const SubprocessorUpdatesForm = () => {
with our{' '}
diff --git a/apps/www/components/SurveyResults/DecorativeProgressBar.tsx b/apps/www/components/SurveyResults/DecorativeProgressBar.tsx
index c228c689c18..f7022f8f5b1 100644
--- a/apps/www/components/SurveyResults/DecorativeProgressBar.tsx
+++ b/apps/www/components/SurveyResults/DecorativeProgressBar.tsx
@@ -9,7 +9,7 @@ interface ProgressBarProps {
export function ProgressBar({
className = 'h-4',
backgroundClassName = 'bg-foreground-muted/80',
- foregroundClassName = 'bg-brand',
+ foregroundClassName = 'bg-brand-default',
animationDelay,
reverse = false,
}: ProgressBarProps) {
@@ -59,7 +59,7 @@ export function DecorativeProgressBar({
{
height: 'h-4',
bgColor: 'bg-foreground-muted/80',
- fgColor: 'bg-brand',
+ fgColor: 'bg-brand-default',
animationDelay: '0s',
},
{
diff --git a/apps/www/components/SurveyResults/StateOfStartupsHeader.tsx b/apps/www/components/SurveyResults/StateOfStartupsHeader.tsx
index bd3d5a618a8..1a9edcf973c 100644
--- a/apps/www/components/SurveyResults/StateOfStartupsHeader.tsx
+++ b/apps/www/components/SurveyResults/StateOfStartupsHeader.tsx
@@ -113,12 +113,12 @@ export function StateOfStartupsHeader({ showProgressBars = true }: StateOfStartu
/>
-
+
{shortTitle}
diff --git a/apps/www/components/SurveyResults/SurveyChapterSection.tsx b/apps/www/components/SurveyResults/SurveyChapterSection.tsx
index 975ae9551fb..3f877a46ee0 100644
--- a/apps/www/components/SurveyResults/SurveyChapterSection.tsx
+++ b/apps/www/components/SurveyResults/SurveyChapterSection.tsx
@@ -67,7 +67,7 @@ export function SurveyChapterSection({
-
+
{title}
diff --git a/apps/www/components/SurveyResults/SurveyChart.tsx b/apps/www/components/SurveyResults/SurveyChart.tsx
index ed831b50a1f..9400997daa5 100644
--- a/apps/www/components/SurveyResults/SurveyChart.tsx
+++ b/apps/www/components/SurveyResults/SurveyChart.tsx
@@ -377,7 +377,7 @@ export function SurveyChart({
className={`mb-2 flex flex-row justify-between text-sm font-mono uppercase tracking-widest tabular-nums transition-colors duration-300 ${
shouldAnimateBars
? item.value === maxValue
- ? 'text-brand-link dark:text-brand'
+ ? 'text-brand'
: 'text-foreground'
: 'text-foreground-muted'
}`}
@@ -418,7 +418,7 @@ export function SurveyChart({
>
{/* Foreground pattern for the filled portion */}
(
{/* Foreground pattern for the filled portion */}
{/* Foreground pattern for the filled portion */}
{/* Foreground pattern for the filled portion */}
-
+
{bubble.stat.value}
{bubble.stat.label}
diff --git a/apps/www/components/Wrapped/Pages/ProductAnnouncements.tsx b/apps/www/components/Wrapped/Pages/ProductAnnouncements.tsx
index bf1112e762a..d559fcfcf25 100644
--- a/apps/www/components/Wrapped/Pages/ProductAnnouncements.tsx
+++ b/apps/www/components/Wrapped/Pages/ProductAnnouncements.tsx
@@ -344,7 +344,7 @@ function MonthSection({ month }: { month: Month }) {
{month.name}
{month.isLaunchWeek && (
-
+
Launch Week
)}
diff --git a/apps/www/data/partners/index.tsx b/apps/www/data/partners/index.tsx
index ff01b28cfe5..4eb558f294e 100644
--- a/apps/www/data/partners/index.tsx
+++ b/apps/www/data/partners/index.tsx
@@ -15,7 +15,7 @@ export default {
image: (
{
{stat.name}
{stat.value}/s
diff --git a/apps/www/pages/careers.tsx b/apps/www/pages/careers.tsx
index 5ba598e4b93..89ccd7085b9 100644
--- a/apps/www/pages/careers.tsx
+++ b/apps/www/pages/careers.tsx
@@ -155,9 +155,9 @@ const CareerPage = ({
return (
-
+
{company.number}
@@ -194,7 +194,7 @@ const CareerPage = ({
to stay connected to our team, and our community.
-
+
We deeply believe in the efficacy of collaborative open source
diff --git a/apps/www/pages/contact-us.tsx b/apps/www/pages/contact-us.tsx
index 4d2e207ba53..1bd9b6456c1 100644
--- a/apps/www/pages/contact-us.tsx
+++ b/apps/www/pages/contact-us.tsx
@@ -22,7 +22,7 @@ const ContactSection = ({
{email}
@@ -87,7 +87,7 @@ const ContactUs = ({}: Props) => {
description={
<>
To report suspected violations of our{' '}
-
+
Acceptable Use Policy
, including spam, phishing, malware, or unlawful activity involving Supabase
@@ -116,7 +116,7 @@ const ContactUs = ({}: Props) => {
legal@supabase.com
diff --git a/apps/www/pages/features/[slug].tsx b/apps/www/pages/features/[slug].tsx
index 8261e77f4af..8950f551759 100644
--- a/apps/www/pages/features/[slug].tsx
+++ b/apps/www/pages/features/[slug].tsx
@@ -132,7 +132,7 @@ const FeaturePage: React.FC
= ({ feature, prevFeature, nextFea
{
className="group flex flex-col items-center text-center gap-4 px-8 py-6"
key={i}
>
-
+
{item.icon ? item.icon : }
diff --git a/apps/www/pages/regions.tsx b/apps/www/pages/regions.tsx
index c47dfdc9f59..23ef0346d59 100644
--- a/apps/www/pages/regions.tsx
+++ b/apps/www/pages/regions.tsx
@@ -128,7 +128,7 @@ const RegionsPage = () => {
Need the database in your own cloud?{' '}
-
+
Ask about early access to BYOC
.
diff --git a/apps/www/pages/state-of-startups-2025.tsx b/apps/www/pages/state-of-startups-2025.tsx
index cf8521371df..f0b7b7ca99d 100644
--- a/apps/www/pages/state-of-startups-2025.tsx
+++ b/apps/www/pages/state-of-startups-2025.tsx
@@ -151,9 +151,8 @@ function StateOfStartupsPage() {
href={`#chapter-${chapterIndex + 1}`}
onClick={() => setIsTocOpen(false)}
className={cn(
- 'block px-6 py-2 text-xs transition-colors font-mono uppercase tracking-wider text-center text-foreground-light hover:text-brand-link hover:bg-brand-300/25',
- chapterIndex + 1 === activeChapter &&
- 'bg-brand-300/40 text-brand-link dark:text-brand'
+ 'block px-6 py-2 text-xs transition-colors font-mono uppercase tracking-wider text-center text-foreground-light hover:text-brand hover:bg-brand-300/25',
+ chapterIndex + 1 === activeChapter && 'bg-brand-300/40 text-brand'
)}
>
{chapter.shortTitle}
@@ -205,7 +204,7 @@ function StateOfStartupsPage() {
{chapterIndex + 1}
@@ -278,7 +277,7 @@ const ParticipantsList = () => {
href={participant.url}
target="_blank"
rel="noopener noreferrer"
- className="text-xs md:text-sm font-mono text-center tracking-widest uppercase text-foreground-lighter hover:text-brand-link transition-colors"
+ className="text-xs md:text-sm font-mono text-center tracking-widest uppercase text-foreground-lighter hover:text-brand transition-colors"
>
{participant.company}
diff --git a/apps/www/styles/globals.css b/apps/www/styles/globals.css
index b2893a73bf4..0eb58785337 100644
--- a/apps/www/styles/globals.css
+++ b/apps/www/styles/globals.css
@@ -260,7 +260,7 @@ h6:not(.overwrite) {
}
.heading-gradient-brand {
- @apply text-[#3ECF8E00] bg-clip-text bg-linear-to-b from-brand to-brand/80;
+ @apply text-[#3ECF8E00] bg-clip-text bg-linear-to-b from-brand-default to-brand-default/80;
}
.toc-animate {
diff --git a/packages/config/css/theme.css b/packages/config/css/theme.css
index e83273b4b1b..553f69c935c 100644
--- a/packages/config/css/theme.css
+++ b/packages/config/css/theme.css
@@ -74,8 +74,9 @@
--color-brand-400: hsl(var(--brand-400));
--color-brand-500: hsl(var(--brand-500));
--color-brand-600: hsl(var(--brand-600));
- --color-brand: hsl(var(--brand-default));
- --color-brand-link: hsl(var(--brand-link));
+ /* text-brand uses accessible --primary; fills use brand-default. */
+ --color-brand: var(--primary);
+ --color-brand-default: hsl(var(--brand-default));
--color-_secondary-200: hsl(var(--secondary-200));
--color-_secondary-400: hsl(var(--secondary-400));
--color-_secondary: hsl(var(--secondary-default));
@@ -332,7 +333,7 @@
--color-border-destructive: var(--border-destructive);
--color-border-warning: var(--border-warning);
--color-border-info: var(--border-info);
- --color-border-brand: var(--border-brand);
+ --color-border-brand-default: var(--border-brand-default);
/*
* This will generate colors only for border utilities
* i.e. bg-muted and they'll only have border-color: var(--border-muted) rule
diff --git a/packages/dev-tools/DevToolbar.tsx b/packages/dev-tools/DevToolbar.tsx
index eccace58905..287ad47549e 100644
--- a/packages/dev-tools/DevToolbar.tsx
+++ b/packages/dev-tools/DevToolbar.tsx
@@ -85,7 +85,7 @@ function EventRow({ event }: { event: DevTelemetryEvent }) {
{disclaimer && (
-
+
{children}
,
diff --git a/packages/marketing/src/go/sections/HeroSection.tsx b/packages/marketing/src/go/sections/HeroSection.tsx
index 9a641dd063e..791c991e675 100644
--- a/packages/marketing/src/go/sections/HeroSection.tsx
+++ b/packages/marketing/src/go/sections/HeroSection.tsx
@@ -33,7 +33,7 @@ export default function HeroSection({
>
{section.subtitle && (
-
+
{section.subtitle}
)}
diff --git a/packages/marketing/src/go/sections/TextBodySection.tsx b/packages/marketing/src/go/sections/TextBodySection.tsx
index 6b0fceb75e6..3fe1e58e69a 100644
--- a/packages/marketing/src/go/sections/TextBodySection.tsx
+++ b/packages/marketing/src/go/sections/TextBodySection.tsx
@@ -37,7 +37,7 @@ const components: Components = {
export default function TextBodySection({ section }: { section: GoTextBodySection }) {
return (
-
+
{section.content}
)
diff --git a/packages/ui-patterns/src/Admonition/Admonition.tsx b/packages/ui-patterns/src/Admonition/Admonition.tsx
index 7d341971247..a7f3f6ba2ab 100644
--- a/packages/ui-patterns/src/Admonition/Admonition.tsx
+++ b/packages/ui-patterns/src/Admonition/Admonition.tsx
@@ -51,7 +51,7 @@ export const Admonition = forwardRef<
'overflow-hidden text-sm leading-normal',
layout === 'responsive' && '@container',
type === 'success' && [
- 'bg-brand-400/15 dark:bg-brand/10',
+ 'bg-brand-400/15 dark:bg-brand-default/10',
'border-brand-400 dark:border-brand-500',
],
className
diff --git a/packages/ui-patterns/src/Admonition/AdmonitionIcons.tsx b/packages/ui-patterns/src/Admonition/AdmonitionIcons.tsx
index 9fb01f60895..e2dee6783e9 100644
--- a/packages/ui-patterns/src/Admonition/AdmonitionIcons.tsx
+++ b/packages/ui-patterns/src/Admonition/AdmonitionIcons.tsx
@@ -14,7 +14,7 @@ type IconVisual = 'default' | 'warning' | 'destructive' | 'success'
const ICON_BADGE_CLASS: Record = {
default: 'text-background bg-foreground-muted',
- success: 'text-white dark:text-brand-link bg-brand dark:bg-brand-500/50',
+ success: 'text-white dark:text-brand bg-brand-default dark:bg-brand-500/50',
warning: 'text-warning-200 bg-warning-600',
destructive: 'text-destructive-200 bg-destructive-600',
}
diff --git a/packages/ui-patterns/src/Chart/index.tsx b/packages/ui-patterns/src/Chart/index.tsx
index 6ede284c26c..e6237fc8b29 100644
--- a/packages/ui-patterns/src/Chart/index.tsx
+++ b/packages/ui-patterns/src/Chart/index.tsx
@@ -269,7 +269,7 @@ const ChartMetric = React.forwardRef(
{
color: '#bf79db',
},
'hljs-string': {
- color: `hsl(var(--brand-link))`,
+ color: 'var(--primary)',
},
'hljs-bullet': {
color: '#3ECF8E',
diff --git a/packages/ui-patterns/src/ComputeBadge/index.tsx b/packages/ui-patterns/src/ComputeBadge/index.tsx
index 71cdda04a7a..fde989f06e8 100644
--- a/packages/ui-patterns/src/ComputeBadge/index.tsx
+++ b/packages/ui-patterns/src/ComputeBadge/index.tsx
@@ -29,12 +29,12 @@ export function ComputeBadge({ infraComputeSize, className, icon, ...props }: Co
? 'bg-surface-75 group-data-[state=open]:bg-surface-75/20 text-foreground-light border border-strong'
: smallCompute
? 'bg-surface-75/50 group-data-[state=open]:bg-surface-75/75 text-foreground-light border border-strong'
- : 'bg-brand/10 group-data-[state=open]:bg-brand/20 text-brand-600 border border-brand-500',
+ : 'bg-brand-default/10 group-data-[state=open]:bg-brand-default/20 text-brand-600 border border-brand-500',
// Hover card interaction styles
'group-data-[state=open]:ring-2',
smallCompute
? 'group-data-[state=open]:ring-foreground-muted/20'
- : 'group-data-[state=open]:ring-brand/20',
+ : 'group-data-[state=open]:ring-brand-default/20',
className
)}
{...props}
diff --git a/packages/ui-patterns/src/GlassPanel/index.tsx b/packages/ui-patterns/src/GlassPanel/index.tsx
index 75251a6bdcd..d4c62473863 100644
--- a/packages/ui-patterns/src/GlassPanel/index.tsx
+++ b/packages/ui-patterns/src/GlassPanel/index.tsx
@@ -148,7 +148,7 @@ export const GlassPanel = ({
{children && {children} }
- {showLink && Learn more }
+ {showLink && Learn more }
)
diff --git a/packages/ui-patterns/src/McpUrlBuilder/components/InstructionBlocks.tsx b/packages/ui-patterns/src/McpUrlBuilder/components/InstructionBlocks.tsx
index 8709f2e6adf..31ab7eff76f 100644
--- a/packages/ui-patterns/src/McpUrlBuilder/components/InstructionBlocks.tsx
+++ b/packages/ui-patterns/src/McpUrlBuilder/components/InstructionBlocks.tsx
@@ -61,7 +61,7 @@ function reactRenderers(onCopy: (type?: McpOnCopyCallback) => void): Renderers {
href={node.url}
target="_blank"
rel="noopener noreferrer"
- className="text-brand-link hover:underline"
+ className="text-brand hover:underline"
>
{children}
diff --git a/packages/ui-patterns/src/McpUrlBuilder/components/McpConfigurationDisplay.tsx b/packages/ui-patterns/src/McpUrlBuilder/components/McpConfigurationDisplay.tsx
index 0a8feb04d6f..ef3fa0d8e3b 100644
--- a/packages/ui-patterns/src/McpUrlBuilder/components/McpConfigurationDisplay.tsx
+++ b/packages/ui-patterns/src/McpUrlBuilder/components/McpConfigurationDisplay.tsx
@@ -106,7 +106,7 @@ export function McpConfigurationDisplay({
href={selectedClient.docsUrl}
target="_blank"
rel="noopener noreferrer"
- className="text-brand-link hover:underline inline-flex items-center"
+ className="text-brand hover:underline inline-flex items-center"
>
View setup guide
@@ -117,7 +117,7 @@ export function McpConfigurationDisplay({
href={selectedClient.externalDocsUrl}
target="_blank"
rel="noopener noreferrer"
- className="text-brand-link hover:underline inline-flex items-center"
+ className="text-brand hover:underline inline-flex items-center"
>
View {selectedClient.label} docs
diff --git a/packages/ui-patterns/src/Toc/toc.tsx b/packages/ui-patterns/src/Toc/toc.tsx
index 442b2d3963d..2aa299244c9 100644
--- a/packages/ui-patterns/src/Toc/toc.tsx
+++ b/packages/ui-patterns/src/Toc/toc.tsx
@@ -131,7 +131,7 @@ function TOCItem({ item }: { item: TOCItemType }) {
= 4 && 'ps-8'
diff --git a/packages/ui/build/css/source/semantic.css b/packages/ui/build/css/source/semantic.css
index 4e9f65d9f09..fd148cce386 100644
--- a/packages/ui/build/css/source/semantic.css
+++ b/packages/ui/build/css/source/semantic.css
@@ -14,10 +14,10 @@
* theme can run, say, a cool-gray surface against the green brand:
* --surface-hue tints backgrounds, text and borders (the neutral ramp)
* --primary-hue is the brand hue that --primary is built from
- * Both default to --hue (Supabase green ≈159° in OKLCH), so a theme that only
+ * Both default to --hue (Supabase green ≈157.5° in OKLCH), so a theme that only
* sets --hue keeps surfaces and brand locked together as before; override
* either one to let them diverge. */
- --hue: 159;
+ --hue: 157.5;
--surface-hue: var(--hue);
--primary-hue: var(--hue);
/* Root defaults mirror the dark theme (the app's default appearance). */
@@ -104,7 +104,7 @@
* (matching the "no additional charge" badge); like the others it pulls a touch
* with the brand --primary-hue but clamps so it always reads violet.
*/
- --brand-hue-reference: 159;
+ --brand-hue-reference: 157.5;
--status-hue-pull: 0.15;
--warning-hue: clamp(
65,
@@ -158,12 +158,8 @@
--popover: oklch(from var(--background) calc(l + var(--elevation-step) * var(--elevation-2)) c h);
--popover-foreground: var(--foreground);
- /* Primary is the brand-derived accent: a fixed, vivid Supabase green on
- --primary-hue, mode-invariant and decoupled from the --chroma knob so it
- holds its identity even as neutrals desaturate. NOTE: the `brand` utility
- (--color-brand in theme.css) is deliberately NOT this — it maps to the
- per-theme --brand-default scale (master behavior) while we resolve how
- `brand` is used across the interface. */
+ /* Primary is the accessible functional green (text, controls). Bright
+ expressive fills use brand-default. Light theme overrides --primary for AA text. */
--primary: oklch(0.76 0.15 var(--primary-hue));
--primary-foreground: oklch(
min(var(--surface), var(--foreground-lightness)) calc(var(--chroma) * 0.45) var(--primary-hue)
@@ -247,7 +243,7 @@
--border-destructive: oklch(from var(--destructive) l c h / 30%);
--border-warning: oklch(from var(--warning) l c h / 30%);
--border-info: oklch(from var(--info) l c h / 30%);
- --border-brand: oklch(from var(--primary) l c h / 30%);
+ --border-brand-default: oklch(from var(--primary) l c h / 30%);
--border: oklch(
from var(--foreground) l calc(c * 0.54) h / calc(2% + 20% * var(--contrast-border))
diff --git a/packages/ui/build/css/themes/dark.css b/packages/ui/build/css/themes/dark.css
index d8dd2bd5ee0..e09068e135a 100644
--- a/packages/ui/build/css/themes/dark.css
+++ b/packages/ui/build/css/themes/dark.css
@@ -1,7 +1,7 @@
[data-theme='dark'],
.dark {
--helpers-os-appearance: Dark;
- --hue: 159;
+ --hue: 157.5;
--chroma: 0.005;
--surface: 0.19;
--elevation-step: 0.025;
@@ -22,7 +22,6 @@
--secondary-default: 247.8deg 100% 70%;
--secondary-400: 248.3deg 54.5% 25.9%;
--secondary-200: 248deg 53.6% 11%;
- --brand-link: 155deg 100% 38.6%;
--brand-default: 153.1deg 60.2% 52.7%;
--brand-600: 154.9deg 59.5% 70%;
--brand-500: 154.9deg 100% 19.2%;
diff --git a/packages/ui/build/css/themes/light.css b/packages/ui/build/css/themes/light.css
index 8f8a7e42e71..69c1e35af88 100644
--- a/packages/ui/build/css/themes/light.css
+++ b/packages/ui/build/css/themes/light.css
@@ -1,7 +1,7 @@
[data-theme='light'],
.light {
--helpers-os-appearance: Light;
- --hue: 159;
+ --hue: 157.5;
--surface-hue: 34;
--chroma: 0;
/*
@@ -16,6 +16,9 @@
--foreground-lightness: 0.1;
--muted-foreground-level: 0.65;
--tertiary-foreground-level: 0.5;
+ /* Accessible primary for text/controls (~4.5:1+ on light surfaces). */
+ --primary: oklch(0.525 0.12 var(--primary-hue));
+ --primary-foreground: oklch(0.99 0.00275 var(--primary-hue));
/*
* Expressive fills run darker than the dark-theme anchors so they hold contrast
* against the near-white surface (a light amber on white disappears). Lightness
@@ -38,7 +41,6 @@
--secondary-default: 247.8deg 100% 70%;
--secondary-400: 248.3deg 54.5% 25.9%;
--secondary-200: 248deg 53.6% 11%;
- --brand-link: 153.4deg 86.5% 27.8%;
--brand-default: 152.9deg 60% 52.9%;
--brand-600: 156.5deg 86.5% 26.1%;
--brand-500: 155.3deg 78.4% 40%;
diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx
index 55ce1a8c209..90d76a47d68 100644
--- a/packages/ui/src/components/Button/Button.tsx
+++ b/packages/ui/src/components/Button/Button.tsx
@@ -30,10 +30,10 @@ const buttonVariants = cva(
variant: {
primary: `
bg-brand-400 dark:bg-brand-500
- hover:bg-brand/80 dark:hover:bg-brand/50
+ hover:bg-brand-default/80 dark:hover:bg-brand-default/50
text-foreground
- border-brand-500/75 dark:border-brand/30
- hover:border-brand-600 dark:hover:border-brand
+ border-brand-500/75 dark:border-brand-default/30
+ hover:border-brand-600 dark:hover:border-brand-default
data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-500/80
`,
default: `
diff --git a/packages/ui/src/components/Menu/Menu.tsx b/packages/ui/src/components/Menu/Menu.tsx
index 9c4b8ff4936..5279c353220 100644
--- a/packages/ui/src/components/Menu/Menu.tsx
+++ b/packages/ui/src/components/Menu/Menu.tsx
@@ -74,7 +74,8 @@ export const menuItemVariants = cva(
{
type: 'border',
active: true,
- className: 'text-foreground-muted border-l border-brand group-hover:border-brand',
+ className:
+ 'text-foreground-muted border-l border-brand-default group-hover:border-brand-default',
},
{
type: 'border',
diff --git a/packages/ui/src/components/SuccessCheck.tsx b/packages/ui/src/components/SuccessCheck.tsx
index 0658836f6a7..d5a0ac28592 100644
--- a/packages/ui/src/components/SuccessCheck.tsx
+++ b/packages/ui/src/components/SuccessCheck.tsx
@@ -5,7 +5,7 @@ import { cn } from '../lib/utils'
export const SuccessCheck = ({ className }: { className?: string }) => (
diff --git a/packages/ui/src/components/shadcn/ui/badge.tsx b/packages/ui/src/components/shadcn/ui/badge.tsx
index e20c873c222..e4cccd61a23 100644
--- a/packages/ui/src/components/shadcn/ui/badge.tsx
+++ b/packages/ui/src/components/shadcn/ui/badge.tsx
@@ -10,7 +10,7 @@ const badgeVariants = cva(
variant: {
default: 'bg-surface-75 text-foreground-light border border-strong',
warning: 'bg-warning/10 text-warning-600 border border-warning-500',
- success: 'bg-brand/10 text-brand-600 border border-brand-500',
+ success: 'bg-brand-default/10 text-brand-600 border border-brand-500',
destructive: 'bg-destructive/10 text-destructive border border-border-destructive',
// Secondary is invisible
secondary:
diff --git a/packages/ui/src/components/shadcn/ui/switch.tsx b/packages/ui/src/components/shadcn/ui/switch.tsx
index c453fe9bf45..ad3572774af 100644
--- a/packages/ui/src/components/shadcn/ui/switch.tsx
+++ b/packages/ui/src/components/shadcn/ui/switch.tsx
@@ -7,7 +7,7 @@ import * as React from 'react'
import { cn } from '../../../lib/utils/cn'
const switchRootVariants = cva(
- 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:hover:bg-brand-600/90 data-[state=unchecked]:bg-control data-[state=unchecked]:hover:bg-border',
+ 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand-default data-[state=checked]:hover:bg-brand-600/90 data-[state=unchecked]:bg-control data-[state=unchecked]:hover:bg-border',
{
variants: {
size: {
diff --git a/packages/ui/src/lib/tailwind-demo-classes.ts b/packages/ui/src/lib/tailwind-demo-classes.ts
index 44d478dbd1c..278492255d9 100644
--- a/packages/ui/src/lib/tailwind-demo-classes.ts
+++ b/packages/ui/src/lib/tailwind-demo-classes.ts
@@ -59,8 +59,7 @@ export default {
'bg-brand-400',
'bg-brand-500',
'bg-brand-600',
- 'bg-brand',
- 'bg-brand-link',
+ 'bg-brand-default',
'bg-_secondary-200',
'bg-_secondary-400',
'bg-_secondary',