Skip to content

Commit 329deec

Browse files
Fix dark mode on map page; add collapsible timeline sections
- Add dark:bg/dark:border variants to category lesson cards in MapCategoryCards - Add CSS dark overrides for scholar source cards (#fbf8ff, #d9c9ee, #f8fafc) - Add decoration color dark override for sources link - Make each timeline era section collapsible with chevron toggle - Add Collapse All / Expand All button above timeline
1 parent 28fa9c7 commit 329deec

3 files changed

Lines changed: 72 additions & 20 deletions

File tree

app/globals.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@
119119
.dark .bg-\[\#e8f0f5\] { background-color: #1e2e3a !important; }
120120
.dark .border-\[\#2a5a7e\] { border-color: #4080a0 !important; }
121121

122+
/* Map page — scholar source cards */
123+
.dark .bg-\[\#fbf8ff\] { background-color: #2a2040 !important; }
124+
.dark .border-\[\#d9c9ee\] { border-color: #3a2a5a !important; }
125+
.dark .bg-\[\#f8fafc\] { background-color: #1e2a30 !important; }
126+
.dark .decoration-\[\#c7b598\] { text-decoration-color: var(--sj-border) !important; }
127+
122128
/* CTA buttons */
123129
.dark .bg-\[\#1b1a17\] { background-color: #e8e4dc !important; color: #1b1a17 !important; }
124130
.dark .bg-\[\#7e622a\] { background-color: var(--sj-accent) !important; }

app/timeline/page.tsx

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
'use client'
22

3-
import { useMemo } from "react"
3+
import { useMemo, useState } from "react"
44
import Link from "next/link"
55
import LessonCard from "@/components/LessonCard"
66
import FilterControls from "@/components/FilterControls"
77
import { useLessonFilters } from "@/hooks/useLessonFilters"
88
import { TIMELINE_ERAS, groupLessonsByTimelineEra } from "@/lib/timeline"
9+
import type { TimelineEra } from "@/lib/types"
910

1011
export default function TimelinePage() {
1112
const {
@@ -25,6 +26,26 @@ export default function TimelinePage() {
2526
(era) => (grouped.get(era.id)?.length ?? 0) > 0
2627
)
2728

29+
const [collapsed, setCollapsed] = useState<Set<TimelineEra>>(new Set())
30+
31+
function toggleEra(id: TimelineEra) {
32+
setCollapsed((prev) => {
33+
const next = new Set(prev)
34+
if (next.has(id)) next.delete(id)
35+
else next.add(id)
36+
return next
37+
})
38+
}
39+
40+
const allExpanded = collapsed.size === 0
41+
function toggleAll() {
42+
if (allExpanded) {
43+
setCollapsed(new Set(visibleEras.map((e) => e.id)))
44+
} else {
45+
setCollapsed(new Set())
46+
}
47+
}
48+
2849
return (
2950
<div className="space-y-8">
3051

@@ -98,6 +119,16 @@ export default function TimelinePage() {
98119
</div>
99120

100121
{/* ── Timeline ── */}
122+
{hasResults && (
123+
<div className="flex justify-end">
124+
<button
125+
onClick={toggleAll}
126+
className="rounded-lg border border-[#d8ccb8] bg-white px-3 py-1.5 text-xs font-semibold text-[#7e622a] transition hover:bg-[#fbf7ee]"
127+
>
128+
{allExpanded ? 'Collapse All' : 'Expand All'}
129+
</button>
130+
</div>
131+
)}
101132
{hasResults ? (
102133
<div className="relative ml-3 border-l-2 border-[#d8ccb8] sm:ml-5">
103134
{visibleEras.map((era, visibleIndex) => {
@@ -116,9 +147,20 @@ export default function TimelinePage() {
116147
</div>
117148

118149
{/* Era header */}
119-
<div className="rounded-2xl border border-[#d8ccb8] bg-white p-5 shadow-sm">
120-
<div className="text-xs font-semibold uppercase tracking-widest text-[#7e622a]">
121-
{era.arcPhrase}
150+
<button
151+
onClick={() => toggleEra(era.id)}
152+
className="w-full rounded-2xl border border-[#d8ccb8] bg-white p-5 shadow-sm text-left transition hover:border-[#c8a84b] cursor-pointer"
153+
>
154+
<div className="flex items-center justify-between">
155+
<div className="text-xs font-semibold uppercase tracking-widest text-[#7e622a]">
156+
{era.arcPhrase}
157+
</div>
158+
<svg
159+
className={`h-5 w-5 text-[#7e622a] transition-transform duration-200 ${collapsed.has(era.id) ? '' : 'rotate-180'}`}
160+
fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}
161+
>
162+
<path strokeLinecap="round" strokeLinejoin="round" d="M19 9l-7 7-7-7" />
163+
</svg>
122164
</div>
123165
<h2 className="mt-1 text-2xl font-bold text-[#1b1a17]">
124166
{era.title}
@@ -132,17 +174,21 @@ export default function TimelinePage() {
132174
{sorted.length} {sorted.length === 1 ? 'lesson' : 'lessons'}
133175
</span>
134176
</div>
135-
<p className="mt-3 max-w-3xl text-sm leading-relaxed text-[#4a4338]">
136-
{era.description}
137-
</p>
138-
</div>
177+
{!collapsed.has(era.id) && (
178+
<p className="mt-3 max-w-3xl text-sm leading-relaxed text-[#4a4338]">
179+
{era.description}
180+
</p>
181+
)}
182+
</button>
139183

140184
{/* Lesson cards */}
141-
<div className="mt-4 grid gap-4 md:grid-cols-2 xl:grid-cols-3">
142-
{sorted.map((lesson) => (
143-
<LessonCard key={lesson.slug} lesson={lesson} />
144-
))}
145-
</div>
185+
{!collapsed.has(era.id) && (
186+
<div className="mt-4 grid gap-4 md:grid-cols-2 xl:grid-cols-3">
187+
{sorted.map((lesson) => (
188+
<LessonCard key={lesson.slug} lesson={lesson} />
189+
))}
190+
</div>
191+
)}
146192
</section>
147193
)
148194
})}

components/MapCategoryCards.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ const categoryConfig = [
4646
]
4747

4848
const categoryColors: Record<LessonCategory, string> = {
49-
Lineage: "border-amber-400 bg-amber-50",
50-
Identity: "border-amber-300 bg-amber-50",
51-
Ministry: "border-sky-300 bg-sky-50",
52-
Rejection: "border-rose-300 bg-rose-50",
53-
Passion: "border-purple-300 bg-purple-50",
54-
Resurrection: "border-emerald-300 bg-emerald-50",
55-
Kingdom: "border-indigo-300 bg-indigo-50",
49+
Lineage: "border-amber-400 bg-amber-50 dark:bg-amber-950/40 dark:border-amber-700",
50+
Identity: "border-amber-300 bg-amber-50 dark:bg-amber-950/40 dark:border-amber-700",
51+
Ministry: "border-sky-300 bg-sky-50 dark:bg-sky-950/40 dark:border-sky-700",
52+
Rejection: "border-rose-300 bg-rose-50 dark:bg-rose-950/40 dark:border-rose-700",
53+
Passion: "border-purple-300 bg-purple-50 dark:bg-purple-950/40 dark:border-purple-700",
54+
Resurrection: "border-emerald-300 bg-emerald-50 dark:bg-emerald-950/40 dark:border-emerald-700",
55+
Kingdom: "border-indigo-300 bg-indigo-50 dark:bg-indigo-950/40 dark:border-indigo-700",
5656
}
5757

5858
export default function MapCategoryCards() {

0 commit comments

Comments
 (0)