From 76597ae774cddc87934a8d74a71914d604a3eb90 Mon Sep 17 00:00:00 2001 From: mkfain Date: Sat, 23 May 2026 13:53:10 -0500 Subject: [PATCH] About + HelpFAQSection: full dark-mode support Every section of the About page now renders correctly in dark mode. The hero stays dark in both modes (its identity is anchored on the dark navy backdrop), and the four light sections (Three steps, Two ways to get paid, Frequently asked, Pick the side) each gain a dark-mode counterpart so the page reads consistently inside the app's theme. Section background mapping Section Light bg Dark bg ----------------------- ----------- ----------- Hero #0a0c14 #0a0c14 (unchanged) Three steps #faf8f4 #11151c Two ways to get paid white #0e1218 Frequently asked #f5f1eb #11151c Pick the side white #0e1218 Card surfaces (StepCard, RailCard, GuideCard, FAQ accordion item) map bg-white -> dark:bg-[#1a1f29] and border-gray-200 -> dark:border-white/10. Hover shadows pick up a darker variant (dark:hover:shadow-[0_8px_24px_rgba(0,0,0,0.4)]) on cards that have a hover-lift effect. Text-color mapping (applied throughout) text-gray-900 -> dark:text-white (headings) text-gray-800 -> dark:text-gray-100 (inline strongs) text-gray-700 -> dark:text-gray-300 (bullet body) text-gray-600 -> dark:text-gray-300 (body prose) text-amber-600 / 700 -> dark:text-amber-400 (trade-off label + icon) border-gray-100 -> dark:border-white/10 (separators) No-Custody comparison banner The light gradient card (white -> primary/5) converts to a glass tile in dark mode (white/0.04 -> primary/0.08) with primary/30 border. The inner Comparison grid's separator border picks up dark:border-white/10. ComparisonItem's light theme path now also sets dark:text-gray-300 on its body copy so it reads on the dark glass tile. HelpFAQSection Both the 'reference' card-row accordion (used by the About page) and the 'cards' masonry variant gain dark-mode card surfaces and text-color mapping. The category tab pills get a dark-mode inactive state. The active pill (bg-primary) is already correct in both modes. --- src/components/HelpFAQSection.tsx | 14 +++--- src/pages/AboutPage.tsx | 84 +++++++++++++++++-------------- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/src/components/HelpFAQSection.tsx b/src/components/HelpFAQSection.tsx index 018c7995..39e4c3b5 100644 --- a/src/components/HelpFAQSection.tsx +++ b/src/components/HelpFAQSection.tsx @@ -136,7 +136,7 @@ export function HelpFAQSection({ 'rounded-full px-4 py-2 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50', active ? 'bg-primary text-primary-foreground shadow-sm' - : 'bg-white text-gray-700 border border-gray-200 hover:border-gray-300 hover:bg-gray-50', + : 'bg-white dark:bg-[#1a1f29] text-gray-700 dark:text-gray-300 border border-gray-200 dark:border-white/10 hover:border-gray-300 dark:hover:border-white/20 hover:bg-gray-50 dark:hover:bg-[#222937]', )} aria-pressed={active} > @@ -220,17 +220,17 @@ function FAQAccordionItem({ return ( {/* Left accent rule: orange when open, transparent otherwise */} - + {item.question} - + {item.answer.map((paragraph, i) => (

{renderInlineMarkup(paragraph)}

))} @@ -260,13 +260,13 @@ function FAQAccordionItem({ */ function FAQCard({ item }: { item: FAQItem }) { return ( -
+
- + {item.question} - + {item.answer.map((paragraph, i) => (

{renderInlineMarkup(paragraph)}

))} diff --git a/src/pages/AboutPage.tsx b/src/pages/AboutPage.tsx index b764aa41..abc3d841 100644 --- a/src/pages/AboutPage.tsx +++ b/src/pages/AboutPage.tsx @@ -246,10 +246,10 @@ export function AboutPage() {
- {/* ── 2. How it works, in three steps (light cream) ──────────────── */} + {/* ── 2. How it works, in three steps (light cream / dark slate) ──── */}
- {/* ── 3. Two ways to get paid (white) ─────────────────────────────── */} -
+ {/* ── 3. Two ways to get paid (white / dark slate) ────────────────── */} +
} tradeoffBullets={[ - Few wallets support it., - Receiving is slow., - No push notifications., - Wallets are still buggy., - + Few wallets support it., + Receiving is slow., + No push notifications., + Wallets are still buggy., + Donation counts aren't public. , ]} @@ -369,16 +369,16 @@ export function AboutPage() { question, "how is this actually different from existing crowdfunding sites?", by name-checking the failure modes of centralized and even other Bitcoin-based options. */} -
+
-
+
-

+

No custody. No middleman.

-

+

{appName} never holds funds. Donations move wallet-to-wallet on Bitcoin. There's no server standing between donor and activist on either option. If {appName}{' '} @@ -388,7 +388,7 @@ export function AboutPage() {

{/* Comparison grid */} -
    +
- {/* ── 4. Need help? FAQ (cream, integrated as three chapters) ───── */} + {/* ── 4. Need help? FAQ (cream / dark slate, integrated as three chapters) ───── */}
- {/* ── 5. Pick the side you're on (white) ──────────────────────────── */} -
+ {/* ── 5. Pick the side you're on (white / dark slate) ─────────────── */} +
-

+

{title}

-

+

{description}

@@ -592,7 +592,9 @@ function ComparisonItem({ heading, body, theme = 'light' }: ComparisonItemProps)

{body} @@ -624,7 +626,9 @@ function SectionHeader({

{title} @@ -633,7 +637,9 @@ function SectionHeader({

{lede} @@ -653,7 +659,7 @@ interface StepCardProps { function StepCard({ number, image, imageAlt, title, body }: StepCardProps) { return ( -

+
-

+

{title}

-

{body}

+

{body}

); @@ -716,7 +722,7 @@ function RailCard({ accent === 'orange' ? 'text-emerald-600' : 'text-indigo-600'; return ( -
+
{/* Gradient header strip */}
@@ -731,10 +737,10 @@ function RailCard({ {/* Body */}
-

+

{title}

-

+

{description}

@@ -743,24 +749,24 @@ function RailCard({ {bullets.map((b, i) => (
  • - {b} + {b}
  • ))} {/* Trade-off block */} -
    +
    {tradeoffEmphasized ? ( - + ) : ( )} - + {tradeoffTitle}
    -
    +
    {tradeoffIntro} {tradeoffBullets && tradeoffBullets.length > 0 && (
      @@ -815,10 +821,10 @@ function GuideCard({ return ( {/* Image header */} -
      +
      {imageAlt} -

      +

      {title}

      -

      {description}

      +

      {description}

        {bullets.map((b, i) => (
      • - {b} + {b}
      • ))}