diff --git a/README.md b/README.md
index c39303b5ab..8ddcde97ca 100644
--- a/README.md
+++ b/README.md
@@ -44,6 +44,22 @@
+
+
+
+
+
+
+
+ |
+
+
+ |
+ Package hosting provided by Cloudsmith.
+ |
+
+ Tooling provided by JetBrains.
+ |
diff --git a/website/.vitepress/components/VPSponsorsGrid.vue b/website/.vitepress/components/VPSponsorsGrid.vue
new file mode 100644
index 0000000000..aca38773bf
--- /dev/null
+++ b/website/.vitepress/components/VPSponsorsGrid.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
diff --git a/website/.vitepress/config.ts b/website/.vitepress/config.ts
index c17d73edea..7bf78562be 100644
--- a/website/.vitepress/config.ts
+++ b/website/.vitepress/config.ts
@@ -316,6 +316,12 @@ export default defineConfig({
replacement: fileURLToPath(
new URL('./components/VPTeamMembersItem.vue', import.meta.url)
)
+ },
+ {
+ find: /^.*\/VPSponsorsGrid\.vue$/,
+ replacement: fileURLToPath(
+ new URL('./components/VPSponsorsGrid.vue', import.meta.url)
+ )
}
]
}
diff --git a/website/.vitepress/sponsors.ts b/website/.vitepress/sponsors.ts
index fa8e43c25b..1927a36cf4 100644
--- a/website/.vitepress/sponsors.ts
+++ b/website/.vitepress/sponsors.ts
@@ -1,4 +1,15 @@
-export const sponsors = [
+export interface Sponsor {
+ name: string;
+ url: string;
+ img: string;
+ // Logo variant for dark backgrounds. Sponsors that set one keep their own
+ // colours instead of being inverted by the sponsor grid.
+ imgDark?: string;
+ // Tooltip explaining what this sponsor gives the project.
+ description?: string;
+}
+
+export const sponsors: { tier: string; size: string; items: Sponsor[] }[] = [
{
tier: 'Gold Sponsors',
size: 'big',
@@ -27,7 +38,16 @@ export const sponsors = [
{
name: 'Cloudsmith',
url: 'https://cloudsmith.com/',
- img: '/img/cloudsmith.svg'
+ img: '/img/cloudsmith.svg',
+ description: 'Hosts the deb and rpm package registries for free'
+ },
+ {
+ name: 'JetBrains',
+ url: 'https://jb.gg/OpenSource',
+ img: '/img/jetbrains.svg',
+ imgDark: '/img/jetbrains-mono.svg',
+ description:
+ 'Provides free All Products Pack licenses to the maintainers'
}
]
}
diff --git a/website/.vitepress/theme/custom.css b/website/.vitepress/theme/custom.css
index 6e5c2b163c..0c7456e0f9 100644
--- a/website/.vitepress/theme/custom.css
+++ b/website/.vitepress/theme/custom.css
@@ -145,3 +145,27 @@ img[src*='custom-icon-badges.demolab.com'] {
.VPTeamPage > .VPTeamPageTitle {
padding-top: 0
}
+
+/* VitePress greys out sponsor logos by default. Show them in their brand
+ colours in light mode; dark mode keeps the inversion so black wordmarks
+ stay readable. */
+html:not(.dark) .vp-sponsor-grid-image {
+ filter: none;
+}
+
+/* A sponsor shipping its own dark-background logo already reads correctly on
+ dark, so it opts out of the grid's invert treatment. On hover the grid turns
+ the tile white, so it falls back to the light logo like every other tile. */
+.vp-sponsor-grid-item.has-dark-logo .vp-sponsor-grid-image {
+ filter: none;
+}
+
+.dark .vp-sponsor-grid-item.has-dark-logo .logo-light,
+.dark .vp-sponsor-grid-item.has-dark-logo:hover .logo-dark,
+html:not(.dark) .vp-sponsor-grid-item .logo-dark {
+ display: none;
+}
+
+.dark .vp-sponsor-grid-item.has-dark-logo:hover .logo-light {
+ display: block;
+}
diff --git a/website/src/public/img/jetbrains-dark.svg b/website/src/public/img/jetbrains-dark.svg
new file mode 100644
index 0000000000..521da3fd60
--- /dev/null
+++ b/website/src/public/img/jetbrains-dark.svg
@@ -0,0 +1,13 @@
+
diff --git a/website/src/public/img/jetbrains-mono.svg b/website/src/public/img/jetbrains-mono.svg
new file mode 100644
index 0000000000..b4c8d83c27
--- /dev/null
+++ b/website/src/public/img/jetbrains-mono.svg
@@ -0,0 +1,13 @@
+
diff --git a/website/src/public/img/jetbrains.svg b/website/src/public/img/jetbrains.svg
new file mode 100644
index 0000000000..cb3a2a0e58
--- /dev/null
+++ b/website/src/public/img/jetbrains.svg
@@ -0,0 +1,13 @@
+