src/components/content/ContentSteps.astro
---
interface Step {
number?: number;
title: string;
description: string;
}
interface Props {
heading?: string;
steps?: Step[];
}
const {
heading = "Zo werkt BLURR",
steps = [
{
number: 1,
title: "Intake & strategie",
description: "We beginnen met een diepgaande intake om je doelen, doelgroep en concurrentiepositie te begrijpen. Op basis daarvan bouwen we een marketingstrategie op maat.",
},
{
number: 2,
title: "Creatie & productie",
description: "Ons team van designers, copywriters en developers zet de strategie om in scherpe campagnes, content en digitale ervaringen.",
},
{
number: 3,
title: "Activatie & groei",
description: "We lanceren, meten en optimaliseren continu. Elke euro telt — we sturen bij op basis van data, niet op gevoel.",
},
{
number: 4,
title: "Rapportage & schaling",
description: "Maandelijkse rapportages houden je op de hoogte. Wat werkt, schalen we op. Wat niet werkt, passen we aan.",
},
],
} = Astro.props;
---
<section class="cst-wrap">
{heading && <h2 class="cst-heading">{heading}</h2>}
<ol class="cst-list">
{steps.map((step, i) => (
<li class="cst-item">
<div class="cst-number">{step.number ?? i + 1}</div>
<div class="cst-body">
<h3 class="cst-title">{step.title}</h3>
<p class="cst-desc">{step.description}</p>
</div>
</li>
))}
</ol>
</section>
<style>
.cst-wrap {
padding: 3rem 0;
max-width: 760px;
}
.cst-heading {
font-size: 2rem;
font-weight: 800;
color: var(--color-primary, #0a0a0a);
margin: 0 0 2.5rem;
}
.cst-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 0;
}
.cst-item {
display: flex;
gap: 2rem;
position: relative;
padding-bottom: 2.5rem;
}
.cst-item:not(:last-child)::before {
content: '';
position: absolute;
left: 1.5rem;
top: 3.5rem;
bottom: 0;
width: 2px;
background: #e5e5e5;
}
.cst-number {
width: 3rem;
height: 3rem;
border-radius: 50%;
background: var(--color-accent, #6366f1);
color: #fff;
font-size: 1rem;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
position: relative;
z-index: 1;
}
.cst-body {
flex: 1;
padding-top: 0.5rem;
}
.cst-title {
font-size: 1.125rem;
font-weight: 700;
color: var(--color-primary, #0a0a0a);
margin: 0 0 0.5rem;
}
.cst-desc {
font-size: 1rem;
line-height: 1.7;
color: #555;
margin: 0;
}
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
heading | string | — | Sectietitel |
steps | { number?: number; title: string; description: string }[] | — | Lijst van stappen |
* = verplicht