Files
supabase/apps/www/components/logos.tsx
Saxon FletcherandClaude Opus 4.8 fb02182e86 Color system (#47288)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES/NO

## What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

## What is the current behavior?

Please link any relevant issues here.

## What is the new behavior?

Feel free to include screenshots if it includes visual changes.

## Additional context

Add any other context or screenshots.


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

* **New Features**
* Refreshed theming across the UI to use modern color expressions and
shared theme variables (including OKLCH-based gradients), improving
consistency for charts, code blocks, overlays, icons, and decorative
backgrounds.
* **Bug Fixes**
* Improved light/dark color and gradient consistency across axis/grid
styling, reference lines, buttons/badges, sidebar accents, loaders, and
other visual components.
* **Documentation**
* Updated styling/theming guidance to align with the revised semantic
token system and the updated theme variable usage patterns.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:00:43 +10:00

144 lines
3.6 KiB
TypeScript

import { range } from 'lib/helpers'
import { cn } from 'ui'
interface Props {
showHeading?: boolean
className?: string
align?: 'left' | 'center'
maskBackgroundColor?: 'var(--background-default)' | 'var(--background-alternative)'
}
const Logos: React.FC<Props> = ({ className, showHeading = true, align = 'center' }) => {
const gap = 'gap-4 lg:gap-8'
return (
<div className={cn('pb-14 md:pb-24', className)} suppressHydrationWarning>
<div className="max-w-md md:max-w-lg lg:max-w-2xl mx-auto">
<div
className={cn(
'relative w-full mx-auto max-w-4xl opacity-90 dark:opacity-70',
'overflow-hidden',
"before:content[''] before:absolute before:inset-0 before:w-full before:bg-[linear-gradient(to_right,var(--background-default)_0%,transparent_10%,transparent_90%,var(--background-default)_100%)] before:z-10",
'flex flex-nowrap justify-center',
'px-5 lg:px-12',
align === 'left' ? 'justify-start ml-0' : 'justify-center',
gap
)}
>
{range(0, 4).map((_, i) => (
<LogosRow
key={`logos-group-${i}`}
className={cn(
gap,
'flex flex-nowrap w-fit',
'animate-[marquee_90000ms_linear_both_infinite] will-change-transform',
'motion-reduce:animate-none motion-reduce:will-change-none'
)}
/>
))}
</div>
</div>
{showHeading && (
<p className="w-full text-center text-sm text-foreground-lighter mt-6 lg:mt-8">
Trusted by fast-growing companies worldwide
</p>
)}
</div>
)
}
const logos = [
{
image: `/images/logos/publicity/mozilla.svg`,
alt: 'mozilla',
name: 'mozilla',
},
{
image: `/images/logos/publicity/github.svg`,
alt: 'github',
name: 'github',
},
{
image: `/images/logos/publicity/1password.svg`,
alt: '1password',
name: '1password',
},
{
image: `/images/logos/publicity/pwc.svg`,
alt: 'pwc',
name: 'pwc',
},
{
image: `/images/logos/publicity/pika.svg`,
alt: 'pika',
name: 'pika',
},
{
image: `/images/logos/publicity/humata.svg`,
alt: 'humata',
name: 'humata',
},
{
image: `/images/logos/publicity/udio.svg`,
alt: 'udio',
name: 'udio',
},
{
image: `/images/logos/publicity/langchain.svg`,
alt: 'langchain',
name: 'langchain',
},
{
image: `/images/logos/publicity/resend.svg`,
alt: 'resend',
name: 'resend',
},
{
image: `/images/logos/publicity/loops.svg`,
alt: 'loops',
name: 'loops',
},
{
image: `/images/logos/publicity/mobbin.svg`,
alt: 'mobbin',
name: 'mobbin',
},
{
image: `/images/logos/publicity/gopuff.svg`,
alt: 'gopuff',
name: 'gopuff',
},
{
image: `/images/logos/publicity/chatbase.svg`,
alt: 'chatbase',
name: 'chatbase',
},
{
image: `/images/logos/publicity/betashares.svg`,
alt: 'betashares',
name: 'betashares',
},
{
image: `/images/logos/publicity/submagic.svg`,
alt: 'submagic',
name: 'submagic',
},
]
const LogosRow: React.FC<{ className?: string }> = ({ className }) => (
<div className={cn(className)} suppressHydrationWarning>
{logos.map((logo) => (
<div key={`logos-group-${logo.name}`} className="h-12 lg:h-12 w-max inline-block!">
<img
src={logo.image}
alt={logo.alt}
className={'h-12 lg:h-12 min-h-12! lg:min-h-12! w-auto block'}
draggable={false}
/>
</div>
))}
</div>
)
export default Logos