Skip to content

Commit fcce58b

Browse files
committed
feat: migrate all pages to pure Tailwind CSS utility classes
Complete migration from inline <style> blocks to Tailwind utilities: - about.astro, pricing.astro, team.astro, community.astro - consultation.astro, global-reach.astro, resources.astro - framework.astro (K-12 Digital Campus Framework) - All blog pages (index, 4 articles) Key improvements: - Removed all inline CSS, using CSS custom properties via Tailwind - Implemented data-driven component patterns with arrays and .map() - Net reduction of ~5,400 lines of code - Consistent responsive design with Tailwind breakpoints (md:, lg:) - All pages use Bundu Brand System v6.0.0 design tokens
1 parent e0782e8 commit fcce58b

16 files changed

+2316
-7724
lines changed

src/components/SEO.astro

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,10 @@ const breadcrumbData = {
196196
<meta name="geo.placename" content="Zimbabwe" />
197197
<meta name="language" content="English" />
198198

199-
<!-- Theme -->
200-
<meta name="theme-color" content="#2C2C2C" />
201-
<meta name="msapplication-TileColor" content="#2C2C2C" />
199+
<!-- Theme - Uses brand dark mode base color -->
200+
<meta name="theme-color" content="#0A0A0A" media="(prefers-color-scheme: dark)" />
201+
<meta name="theme-color" content="#FAF9F5" media="(prefers-color-scheme: light)" />
202+
<meta name="msapplication-TileColor" content="#0A0A0A" />
202203

203204
<!-- Structured Data - Organization -->
204205
<script type="application/ld+json" set:html={JSON.stringify(organizationData)} />

src/layouts/BaseLayout.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ const {
484484
}
485485

486486
.footer-hero {
487-
background: #8B4513; /* Terracotta light mode */
487+
background: var(--mineral-terracotta);
488488
color: white;
489489
}
490490

@@ -664,7 +664,7 @@ const {
664664
padding: 0.75rem 2rem;
665665
border-radius: 12px; /* v6 button radius */
666666
text-decoration: none;
667-
font-family: 'Inter', sans-serif;
667+
font-family: 'Plus Jakarta Sans', sans-serif;
668668
font-weight: 600;
669669
font-size: 1rem;
670670
border: none;

src/pages/about.astro

Lines changed: 212 additions & 1250 deletions
Large diffs are not rendered by default.

src/pages/blog/developing-world-educational-advantage.astro

Lines changed: 127 additions & 355 deletions
Large diffs are not rendered by default.

src/pages/blog/digital-literacy-importance.astro

Lines changed: 64 additions & 211 deletions
Large diffs are not rendered by default.

src/pages/blog/index.astro

Lines changed: 20 additions & 183 deletions
Original file line numberDiff line numberDiff line change
@@ -38,195 +38,32 @@ const posts = [
3838
description="Insights on digital transformation in African education. Implementation strategies, success stories, digital literacy best practices, and open-source technology for schools."
3939
keywords="education technology blog, digital transformation insights, African education news, school technology implementation, digital literacy strategies, open-source education, education technology case studies"
4040
>
41-
<div class="blog-container">
42-
<div class="blog-header">
43-
<h1>Framework Insights & Updates</h1>
44-
<p>Exploring digital transformation in education, implementation strategies, and success stories</p>
41+
<div class="max-w-[1000px] mx-auto px-4 py-8">
42+
<div class="text-center mb-16 py-12 px-4">
43+
<h1 class="text-[clamp(2rem,8vw,3rem)] font-extrabold font-serif text-[var(--primary)] mb-4">Framework Insights & Updates</h1>
44+
<p class="text-[clamp(1rem,3vw,1.25rem)] text-[var(--text-secondary)]">Exploring digital transformation in education, implementation strategies, and success stories</p>
4545
</div>
4646

47-
<div class="posts-grid">
47+
<div class="grid gap-8">
4848
{posts.map((post) => (
49-
<article class="post-card">
50-
<div class="post-date">{new Date(post.date).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}</div>
51-
<h2><a href={`/blog/${post.slug}`}>{post.title}</a></h2>
52-
<p class="post-excerpt">{post.excerpt}</p>
53-
<div class="post-meta">
54-
<span class="author">By {post.author}</span>
55-
<a href={`/blog/${post.slug}`} class="read-more">Read more →</a>
49+
<article class="bg-[var(--bg-surface)] p-8 rounded-xl shadow-sm transition-all duration-200 hover:-translate-y-1 hover:shadow-lg">
50+
<div class="text-[var(--text-secondary)] text-sm mb-3">
51+
{new Date(post.date).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}
52+
</div>
53+
<h2 class="text-[clamp(1.35rem,5vw,1.75rem)] leading-tight mb-4">
54+
<a href={`/blog/${post.slug}`} class="text-[var(--text)] no-underline transition-colors hover:text-[var(--primary)]">
55+
{post.title}
56+
</a>
57+
</h2>
58+
<p class="text-[var(--text-secondary)] leading-relaxed mb-6">{post.excerpt}</p>
59+
<div class="flex justify-between items-center pt-4 border-t border-[var(--border)]">
60+
<span class="text-[var(--text-secondary)] text-sm">By {post.author}</span>
61+
<a href={`/blog/${post.slug}`} class="text-[var(--primary)] no-underline font-semibold transition-colors hover:brightness-110">
62+
Read more →
63+
</a>
5664
</div>
5765
</article>
5866
))}
5967
</div>
6068
</div>
6169
</BaseLayout>
62-
63-
<style>
64-
.blog-container {
65-
max-width: 1000px;
66-
margin: 0 auto;
67-
padding: 2rem 1rem;
68-
}
69-
70-
.blog-header {
71-
text-align: center;
72-
margin-bottom: 4rem;
73-
padding: 3rem 1rem;
74-
}
75-
76-
.blog-header h1 {
77-
font-size: 3rem;
78-
color: var(--primary);
79-
margin-bottom: 1rem;
80-
}
81-
82-
.blog-header p {
83-
font-size: 1.25rem;
84-
color: var(--text-light);
85-
}
86-
87-
.posts-grid {
88-
display: grid;
89-
gap: 2rem;
90-
}
91-
92-
.post-card {
93-
background: var(--card-bg);
94-
padding: 2rem;
95-
border-radius: 0.75rem;
96-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
97-
transition: transform 0.2s, box-shadow 0.2s;
98-
}
99-
100-
.post-card:hover {
101-
transform: translateY(-4px);
102-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
103-
}
104-
105-
.post-date {
106-
color: var(--text-light);
107-
font-size: 0.9rem;
108-
margin-bottom: 0.75rem;
109-
}
110-
111-
.post-card h2 {
112-
font-size: 1.75rem;
113-
margin-bottom: 1rem;
114-
}
115-
116-
.post-card h2 a {
117-
color: var(--text);
118-
text-decoration: none;
119-
transition: color 0.2s;
120-
}
121-
122-
.post-card h2 a:hover {
123-
color: var(--primary);
124-
}
125-
126-
.post-excerpt {
127-
color: var(--text-light);
128-
line-height: 1.6;
129-
margin-bottom: 1.5rem;
130-
}
131-
132-
.post-meta {
133-
display: flex;
134-
justify-content: space-between;
135-
align-items: center;
136-
padding-top: 1rem;
137-
border-top: 1px solid var(--border);
138-
}
139-
140-
.author {
141-
color: var(--text-light);
142-
font-size: 0.9rem;
143-
}
144-
145-
.read-more {
146-
color: var(--primary);
147-
text-decoration: none;
148-
font-weight: 600;
149-
transition: color 0.2s;
150-
}
151-
152-
.read-more:hover {
153-
color: var(--primary-dark);
154-
}
155-
156-
/* Mobile Optimization */
157-
@media (max-width: 768px) {
158-
.blog-header {
159-
padding: 3rem 1.25rem;
160-
}
161-
162-
.blog-header h1 {
163-
font-size: clamp(2rem, 8vw, 3rem);
164-
margin-bottom: 1rem;
165-
line-height: 1.2;
166-
}
167-
168-
.blog-header p {
169-
font-size: clamp(1rem, 3vw, 1.2rem);
170-
padding: 0 0.5rem;
171-
}
172-
173-
.posts-container {
174-
padding: 3rem 1.25rem;
175-
}
176-
177-
.posts-grid {
178-
grid-template-columns: 1fr;
179-
gap: 2rem;
180-
}
181-
182-
.post-card {
183-
padding: 1.75rem;
184-
}
185-
186-
.post-card h2 {
187-
font-size: clamp(1.35rem, 5vw, 1.75rem);
188-
line-height: 1.3;
189-
}
190-
191-
.post-meta {
192-
font-size: 0.85rem;
193-
}
194-
195-
.post-excerpt {
196-
font-size: 1rem;
197-
line-height: 1.6;
198-
}
199-
200-
.read-more {
201-
font-size: 0.95rem;
202-
padding: 0.75rem 1.5rem;
203-
}
204-
}
205-
206-
/* Extra small screens */
207-
@media (max-width: 480px) {
208-
.blog-header {
209-
padding: 2.5rem 1rem;
210-
}
211-
212-
.blog-header h1 {
213-
font-size: 1.75rem;
214-
}
215-
216-
.blog-header p {
217-
font-size: 1rem;
218-
}
219-
220-
.posts-container {
221-
padding: 2.5rem 1rem;
222-
}
223-
224-
.post-card {
225-
padding: 1.5rem;
226-
}
227-
228-
.post-card h2 {
229-
font-size: 1.25rem;
230-
}
231-
}
232-
</style>

0 commit comments

Comments
 (0)