diff --git a/src/components/CampaignHeroBackground.tsx b/src/components/CampaignHeroBackground.tsx
index e72d98b5..7d573c55 100644
--- a/src/components/CampaignHeroBackground.tsx
+++ b/src/components/CampaignHeroBackground.tsx
@@ -86,10 +86,16 @@ export function CampaignHeroBackground({ imageUrl, className }: CampaignHeroBack
);
})}
- {/* Warm tint + dark gradient — keeps foreground text legible without
- completely washing the photo out. */}
-
-
+ {/* Dark vertical scrim — strong at the bottom (spotlight card) and
+ lighter at the top so the photo still reads. Uses black instead of
+ background so the overlay is consistent across light/dark themes. */}
+
+ {/* Warm primary tint — gives the hero its brand feel. */}
+
+
+ {/* Left wash — mobile only, where the globe arc crosses the headline.
+ Dark so white headline text has a reliable backdrop. */}
+
{/* Film grain — same trick as Treasures' HeroGallery. Helps the
composited globe + photo feel like one image. */}
diff --git a/src/components/HeroCampaignSpotlight.tsx b/src/components/HeroCampaignSpotlight.tsx
index be32ce0c..fd310514 100644
--- a/src/components/HeroCampaignSpotlight.tsx
+++ b/src/components/HeroCampaignSpotlight.tsx
@@ -63,10 +63,9 @@ export function HeroCampaignSpotlight({
return (
@@ -75,7 +74,7 @@ export function HeroCampaignSpotlight({
{campaign.summary && (
-
+
{campaign.summary}
)}
@@ -101,12 +100,12 @@ export function HeroCampaignSpotlight({
)}
-
+
{formatCampaignAmount(raised, btcPrice)}
- {!hasGoal && raised}
+ {!hasGoal && raised}
{hasGoal && (
-
+
of {formatCampaignAmount(goal!, btcPrice)} goal
)}
@@ -115,7 +114,7 @@ export function HeroCampaignSpotlight({
);
})()}
-
+
{authorPicture && }
diff --git a/src/components/HeroGlobe.tsx b/src/components/HeroGlobe.tsx
index 7675aec3..5ae00717 100644
--- a/src/components/HeroGlobe.tsx
+++ b/src/components/HeroGlobe.tsx
@@ -313,8 +313,8 @@ export function HeroGlobe({
{/* Soft highlight in the upper-left to sell the sphere shape. */}
-
-
+
+
{/* Marker glow halo. Soft, warm, no pulsing. */}
diff --git a/src/index.css b/src/index.css
index fd1cd595..9f6f012d 100644
--- a/src/index.css
+++ b/src/index.css
@@ -753,3 +753,28 @@
.hero-pan-right, .hero-pan-left { animation: none; }
.hero-globe-halo-breath { animation: none; opacity: 0.42; }
}
+
+/* Dark drop-shadow for hero copy — photo backgrounds are always colorful,
+ so we want a dark shadow regardless of light/dark theme. */
+.hero-text-shadow {
+ text-shadow:
+ 0 2px 8px rgba(0, 0, 0, 0.8),
+ 0 0 20px rgba(0, 0, 0, 0.45);
+}
+
+.hero-text-shadow-soft {
+ text-shadow: 0 1px 6px rgba(0, 0, 0, 0.65);
+}
+
+/* On mobile the globe sits under the headline — soften its left edge. */
+.hero-globe-mask {
+ -webkit-mask-image: linear-gradient(to right, transparent 0%, black 48%, black 100%);
+ mask-image: linear-gradient(to right, transparent 0%, black 48%, black 100%);
+}
+
+@media (min-width: 640px) {
+ .hero-globe-mask {
+ -webkit-mask-image: none;
+ mask-image: none;
+ }
+}
diff --git a/src/pages/CampaignsPage.tsx b/src/pages/CampaignsPage.tsx
index 075f701b..72c0554a 100644
--- a/src/pages/CampaignsPage.tsx
+++ b/src/pages/CampaignsPage.tsx
@@ -271,7 +271,7 @@ export function CampaignsPage() {
-
+
+
-
+
Connecting activists to unstoppable funding.
-
+
Raise Bitcoin directly from supporters around the world. Every donation settles
straight to your campaign's beneficiaries, with no middlemen, no chargebacks, and no
platform holding your funds.