Zoeken...  ⌘K GitHub

IconFeatures icon

IconFeatures component.

/icon-features
src/components/icon/IconFeatures.astro
---
/**
 * IconFeatures
 * Sectie met icon-feature-items in een grid. Elk item: icon, titel en body.
 *
 * Props:
 * - title?: string
 * - subtitle?: string
 * - columns?: 2 | 3 | 4
 * - items?: Array<{ icon?: string; name: string; body: string }>
 */
interface Props {
  title?: string;
  subtitle?: string;
  columns?: 2 | 3 | 4;
  items?: { icon?: string; name: string; body: string }[];
}

const {
  title = 'Waarom voor ons kiezen',
  subtitle = 'Meer dan een leverancier, een partner die met je meedenkt.',
  columns = 3,
  items = [
    { icon: '→', name: 'Data-gedreven aanpak', body: 'Elk besluit is onderbouwd met analytics en marktdata.' },
    { icon: '→', name: 'Resultaatgericht', body: 'We werken naar afgesproken doelen, niet naar uurtje-factuurtje.' },
    { icon: '→', name: 'Snel schakelen', body: 'Van idee naar live in een handvol werkdagen.' },
    { icon: '→', name: 'Continue optimalisatie', body: 'Doorlopende tests en aanpassingen voor maximaal rendement.' },
    { icon: '→', name: 'Multichannel', body: 'Eén strategie die over alle kanalen heen werkt.' },
    { icon: '→', name: 'Transparantie', body: 'Realtime inzicht in alle cijfers die ertoe doen.' },
  ],
} = Astro.props;
---

<section class="bl-section ife">
  <div class="bl-inner ife__inner">
    {(title || subtitle) && (
      <div class="ife__header">
        {title && <h2 class="ife__title">{title}</h2>}
        {subtitle && <p class="ife__subtitle">{subtitle}</p>}
      </div>
    )}
    <div class="ife__grid" style={`--ife-cols: ${columns}`}>
      {items.map(item => (
        <div class="ife__item">
          {item.icon && <span class="ife__icon" aria-hidden="true">{item.icon}</span>}
          <h3 class="ife__name">{item.name}</h3>
          <p class="ife__body">{item.body}</p>
        </div>
      ))}
    </div>
  </div>
</section>

<style>
.ife__header{margin-bottom:3rem}
.ife__title{font-size:clamp(1.75rem,3vw,2.5rem);font-weight:700;color:var(--color-primary, #0a0a0a);margin:0 0 .75rem}
.ife__subtitle{font-size:1.05rem;color:var(--color-muted, #555);margin:0}
.ife__grid{display:grid;grid-template-columns:repeat(var(--ife-cols, 3),1fr);gap:2rem}
.ife__item{display:flex;flex-direction:column;gap:.6rem}
.ife__icon{font-size:2rem;margin-bottom:.25rem}
.ife__name{font-size:1.0625rem;font-weight:700;color:var(--color-primary, #0a0a0a);margin:0}
.ife__body{font-size:1rem;color:var(--color-muted, #555);line-height:1.6;margin:0}
@media (max-width: 900px){.ife__grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width: 600px){.ife__grid{grid-template-columns:1fr}}
</style>