Files
supabase/apps/www/pages/contact-us.tsx
Danny White ec53175b8a refactor(ui): rename text-brand to text-primary (#50564)
## What kind of change does this PR introduce?

Refactor. Follow-up to #49871.

## What is the current behavior?

Branded (green) text still uses the `text-brand` classname while the
colour comes from `--primary`.

## What is the new behavior?

**Rename-only:** `text-brand` → `text-primary` across callsites and
docs. Leftover `bg-brand` / `border-brand` alias to `brand-default`. No
intentional colour changes in this PR.

This better matches how we treat our green in other components and
props, like `variant="primary"` for green buttons.

## To test

On light mode: smoke-test that branded text still looks like #49871
(readable green, not the bright fill).

-
[Homepage](https://zone-www-dot-com-git-dnywh-depr-316-text-brand-de2380-supabase.vercel.app/):
“Scale to millions” uses `text-primary`
- [Docs
homepage](https://docs-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/docs):
branded links like “More on self-hosting” are still readable
- [Typography
docs](https://design-system-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/design-system/docs/typography):
documents `text-primary`
- [Colour
usage](https://design-system-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/design-system/docs/color-usage):
`text-primary` is visibly darker than `bg-brand-default` _on light mode_
- [Studio auth
providers](https://studio-staging-git-dnywh-depr-316-text-brand-to-60fa6c-supabase.vercel.app/dashboard/project/_/auth/providers):
enabled provider badge text readable; status dot stays bright green

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

* **Style**
* Updated branded text, link hover states, icons, badges, indicators,
and highlighted content across the Design System, Docs, Studio, Learn,
UI Library, and marketing experiences to use the primary theme color.
* Updated syntax highlighting and table-of-contents styling for
consistent primary-color presentation.
  * Refined brand color fallback behavior for bright fills and borders.

* **Documentation**
* Updated color-usage and typography guidance to recommend the primary
text utility.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-09-22 16:19:03 +10:00

145 lines
5.4 KiB
TypeScript

import Layout from '~/components/Layouts/Default'
import SectionContainer from '~/components/Layouts/SectionContainer'
import { NextSeo } from 'next-seo'
import Link from 'next/link'
import { useRouter } from 'next/router'
type Props = {}
const ContactSection = ({
title,
email,
description,
}: {
title: string
email: string
description: string | React.ReactNode
}) => (
<div className="">
<div className="border-t border-brand-500 w-[32px] mb-1"></div>
<h2 className="text-xl md:text-2xl lg:text-3xl pt-1.5 lg:pt-3 tracking-[-1px] text-foreground">
{title}
</h2>
<a
href={`mailto:${email}`}
className="inline-block mt-2 lg:mt-3 font-mono text-base lg:text-lg text-primary hover:underline"
>
{email}
</a>
<p className="text-foreground-light text-sm lg:text-base mt-2 lg:mt-3">{description}</p>
</div>
)
const ContactUs = ({}: Props) => {
const router = useRouter()
const meta_title = 'Contact Us | Supabase'
const meta_description =
'Contact channels for support, legal, privacy, abuse, security, and grievance submissions'
return (
<>
<NextSeo
title={meta_title}
description={meta_description}
openGraph={{
title: meta_title,
description: meta_description,
url: `https://supabase.com/${router.pathname}`,
images: [
{
url: `https://supabase.com/images/og/supabase-og.png`,
},
],
}}
/>
<Layout>
<div className="bg-alternative border-b border-muted">
<SectionContainer className="flex flex-col gap-8 lg:gap-12 py-8 md:py-12 lg:py-16">
<div className="flex flex-col gap-4 lg:max-w-2xl">
<h1 className="text-3xl md:text-5xl xl:text-6xl tracking-[-1.1px] text-foreground">
Contact Us
</h1>
<div className="text-foreground-light text-base lg:text-lg">
<p>Need help? Want to report something? Have a legal question?</p>
<p className="mt-2">
Use the right channel below so we can get you to the right team quickly.
</p>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 md:gap-10 lg:gap-12">
<ContactSection
title="Legal"
email="legal@supabase.com"
description="For general legal inquiries."
/>
<ContactSection
title="Privacy"
email="privacy@supabase.com"
description="For questions about personal data, data subject rights requests, GDPR/CCPA inquiries, or how Supabase processes personal information."
/>
<ContactSection
title="Abuse & Acceptable Use"
email="abuse@supabase.com"
description={
<>
To report suspected violations of our{' '}
<Link href="/aup" className="text-primary hover:underline">
Acceptable Use Policy
</Link>
, including spam, phishing, malware, or unlawful activity involving Supabase
services.
</>
}
/>
<ContactSection
title="Security"
email="security@supabase.com"
description="To responsibly disclose potential security vulnerabilities or report suspected security incidents involving Supabase infrastructure or services."
/>
<ContactSection
title="Events"
email="help-events@supabase.com"
description="For hackathon or event sponsorship requests. While we can't sponsor every event, we'd love to hear about yours. We'll follow up if it's a good fit."
/>
<div className="">
<div className="border-t border-brand-500 w-[32px] mb-1"></div>
<h2 className="text-xl md:text-2xl lg:text-3xl pt-1.5 lg:pt-3 tracking-[-1px] text-foreground">
Grievance Officer
</h2>
<div className="mt-2 lg:mt-3">
<a
href="mailto:legal@supabase.com"
className="inline-block font-mono text-base lg:text-lg text-primary hover:underline"
>
legal@supabase.com
</a>
<p className="text-sm text-foreground-lighter mt-1">Attn: Tracy Lane</p>
</div>
<p className="text-foreground-light text-sm lg:text-base mt-2 lg:mt-3">
In jurisdictions that require the designation of a Grievance Officer or similar
compliance contact, Tracy Lane, General Counsel of Supabase, Inc., serves in that
role. Formal complaints, regulatory inquiries, or legally required grievance
submissions may be directed to the email above.
</p>
<p className="text-foreground-light text-sm lg:text-base mt-2">
Supabase will acknowledge receipt of grievances and respond within the timeframe
required by applicable law.
</p>
</div>
</div>
</SectionContainer>
</div>
</Layout>
</>
)
}
export default ContactUs