Update Logo Odoo & Client, remove testimoni
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-09-29 11:37:08 +07:00
parent 26675424a2
commit 04fbddba13
11 changed files with 172 additions and 156 deletions
+61 -45
View File
@@ -118,51 +118,7 @@ export default function Clients() {
</div>
</Section>
<Section>
<div className="flex flex-col gap-12">
<SectionHeader
align="split"
eyebrow={t.testimonials.eyebrow}
title={t.testimonials.title}
description={t.testimonials.description}
/>
<div className="grid grid-cols-1 gap-6 md:grid-cols-3">
{t.testimonials.items.map((testimonial) => (
<Card
key={testimonial.initials}
className="flex flex-col justify-between gap-6"
>
<div className="space-y-4">
<div
className="text-primary flex"
aria-label={t.testimonials.rating}
>
{Array.from({ length: 5 }, (_, i) => (
<Icon key={i} name="star" filled />
))}
</div>
<blockquote className="text-on-surface text-base italic">
“{testimonial.quote}”
</blockquote>
</div>
<div className="flex items-center gap-3">
<div className="bg-surface-container text-primary flex h-10 w-10 items-center justify-center rounded-full font-mono font-bold">
{testimonial.initials}
</div>
<div>
<div className="text-on-surface text-sm font-bold">
{testimonial.role}
</div>
<span className="text-on-surface-variant text-sm">
{testimonial.organization}
</span>
</div>
</div>
</Card>
))}
</div>
</div>
</Section>
<Testimonials t={t} />
<Section tone="muted">
<Card
@@ -358,6 +314,11 @@ function SectorPortfolio({ t }: { t: Content }) {
<span className="text-on-surface font-semibold">
{project.title}
</span>
{project.scope && (
<span className="text-on-surface-variant text-sm">
{project.scope}
</span>
)}
<span className="text-on-surface-variant flex items-center gap-1.5 text-sm">
<Icon
name="apartment"
@@ -495,6 +456,61 @@ function FeaturedPrograms({ t }: { t: Content }) {
);
}
/** Hidden until real client testimonials are added to the content file. */
function Testimonials({ t }: { t: Content }) {
if (t.testimonials.items.length === 0) {
return null;
}
return (
<Section>
<div className="flex flex-col gap-12">
<SectionHeader
align="split"
eyebrow={t.testimonials.eyebrow}
title={t.testimonials.title}
description={t.testimonials.description}
/>
<div className="grid grid-cols-1 gap-6 md:grid-cols-3">
{t.testimonials.items.map((testimonial) => (
<Card
key={testimonial.initials}
className="flex flex-col justify-between gap-6"
>
<div className="space-y-4">
<div
className="text-primary flex"
aria-label={t.testimonials.rating}
>
{Array.from({ length: 5 }, (_, i) => (
<Icon key={i} name="star" filled />
))}
</div>
<blockquote className="text-on-surface text-base italic">
“{testimonial.quote}”
</blockquote>
</div>
<div className="flex items-center gap-3">
<div className="bg-surface-container text-primary flex h-10 w-10 items-center justify-center rounded-full font-mono font-bold">
{testimonial.initials}
</div>
<div>
<div className="text-on-surface text-sm font-bold">
{testimonial.role}
</div>
<span className="text-on-surface-variant text-sm">
{testimonial.organization}
</span>
</div>
</div>
</Card>
))}
</div>
</div>
</Section>
);
}
function RetentionGauge({ t }: { t: Content }) {
return (
<div className="bg-surface-container flex w-full flex-col items-center justify-center rounded-xl p-6 lg:w-96">