Zoeken...  ⌘K GitHub

ContentTimeline Sections

ContentTimeline component.

/content-timeline
src/components/sections/ContentTimeline.astro
---
// ContentTimeline, recovered from blurr-components.pages.dev
---

<section class="ctl__section"> <div class="ctl__header"> <p class="ctl__eyebrow">Onze geschiedenis</p> <h2 class="ctl__headline">Hoe BLURR is geworden wat het nu is</h2> </div> <div class="ctl__timeline" role="list"> <!-- Central line --> <div class="ctl__line" aria-hidden="true"> <div class="ctl__line-fill" id="ctl-line-fill"></div> </div> <div class="ctl__item ctl__item--left" data-index="0" role="listitem"> <!-- Left slot --> <div class="ctl__slot ctl__slot--left"> <div class="ctl__card ctl__card--left ctl-card">  <h3 class="ctl__card-title">Oprichting</h3> <p class="ctl__card-desc">BLURR begint als eenpersoonsbureau vanuit een zolderkamer in Amsterdam. Eerste klant: een lokale sportschool.</p> </div> </div> <!-- Center node --> <div class="ctl__node-wrap" aria-hidden="true"> <div class="ctl__node"> <span class="ctl__year">2018</span> </div> </div> <!-- Right slot --> <div class="ctl__slot ctl__slot--right">  </div> </div><div class="ctl__item ctl__item--right" data-index="1" role="listitem"> <!-- Left slot --> <div class="ctl__slot ctl__slot--left">  </div> <!-- Center node --> <div class="ctl__node-wrap" aria-hidden="true"> <div class="ctl__node"> <span class="ctl__year">2020</span> </div> </div> <!-- Right slot --> <div class="ctl__slot ctl__slot--right"> <div class="ctl__card ctl__card--right ctl-card">  <h3 class="ctl__card-title">Eerste groeispurt</h3> <p class="ctl__card-desc">Team groeit naar 5 mensen. Eerste enterprise klant binnengehaald. Omzet verdrievoudigd.</p> </div> </div> </div><div class="ctl__item ctl__item--left" data-index="2" role="listitem"> <!-- Left slot --> <div class="ctl__slot ctl__slot--left"> <div class="ctl__card ctl__card--left ctl-card">  <h3 class="ctl__card-title">Specialisatie in performance</h3> <p class="ctl__card-desc">Focus volledig op data-gedreven performance marketing. Eigen dashboard gebouwd voor klantrapportages.</p> </div> </div> <!-- Center node --> <div class="ctl__node-wrap" aria-hidden="true"> <div class="ctl__node"> <span class="ctl__year">2022</span> </div> </div> <!-- Right slot --> <div class="ctl__slot ctl__slot--right">  </div> </div><div class="ctl__item ctl__item--right" data-index="3" role="listitem"> <!-- Left slot --> <div class="ctl__slot ctl__slot--left">  </div> <!-- Center node --> <div class="ctl__node-wrap" aria-hidden="true"> <div class="ctl__node"> <span class="ctl__year">2024</span> </div> </div> <!-- Right slot --> <div class="ctl__slot ctl__slot--right"> <div class="ctl__card ctl__card--right ctl-card">  <h3 class="ctl__card-title">Scale-up</h3> <p class="ctl__card-desc">Team van 12 specialisten. €50M+ ad spend beheerd. Uitbreiding naar België en Duitsland.</p> </div> </div> </div> </div> </section>

<style>
.ctl__section{background:var(--color-bg);padding:clamp(3rem, 5vw, 5rem) clamp(1rem,5vw,2rem)}
.ctl__header{text-align:center;max-width:720px;margin:0 auto clamp(3rem,5vw,5rem)}
.ctl__eyebrow{font-size:clamp(.65rem,1.2vw,.75rem);font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--color-accent);margin:0 0 .75rem}
.ctl__headline{font-size:clamp(1.75rem,3vw,2.75rem);font-weight:800;line-height:1.2;color:var(--color-primary);margin:0}
.ctl__timeline{position:relative;max-width:1100px;margin:0 auto}
.ctl__line{position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:2px;background:#00000014;z-index:0}
.ctl__line-fill{position:absolute;inset:0;background:var(--color-accent);transform-origin:top center;transform:scaleY(0);transition:transform .1s linear;opacity:.35}
.ctl__item{display:grid;grid-template-columns:1fr 60px 1fr;align-items:center;min-height:120px;margin-bottom:clamp(2rem,4vw,3.5rem);position:relative;z-index:1}
.ctl__slot{padding:0 1.5rem}
.ctl__slot--left{display:flex;justify-content:flex-end}
.ctl__slot--right{display:flex;justify-content:flex-start}
.ctl__node-wrap{display:flex;flex-direction:column;align-items:center;gap:.4rem}
.ctl__node{width:44px;height:44px;border-radius:50%;background:var(--color-accent);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 4px #6366f126;position:relative;z-index:2;flex-shrink:0}
.ctl__year{font-size:.65rem;font-weight:800;color:#fff;letter-spacing:.04em;white-space:nowrap}
.ctl__card{background:#fff;border:1px solid rgba(0,0,0,.07);border-radius:var(--radius);padding:1.5rem;max-width:420px;width:100%;box-shadow:0 2px 16px #0000000d}
.ctl__card--left{text-align:right}
.ctl__card--right{text-align:left}
.ctl__card-img-wrap{margin-bottom:.875rem}
.ctl__card--left .ctl__card-img-wrap{display:flex;justify-content:flex-end}
.ctl__card-img{width:100%;max-height:160px;object-fit:cover;border-radius:calc(var(--radius) - 2px)}
.ctl__card-title{font-size:clamp(1rem,1.5vw,1.125rem);font-weight:700;color:var(--color-primary);margin:0 0 .5rem}
.ctl__card-desc{font-size:.9375rem;line-height:1.65;color:var(--color-muted);margin:0}
.ctl-card{opacity:0;transition:opacity .65s ease,transform .65s ease}
.ctl__card--left.ctl-card{transform:translate(2rem)}
.ctl__card--right.ctl-card{transform:translate(-2rem)}
.ctl-card--visible{opacity:1;transform:translate(0)!important}
.ctl__line{left:22px}
.ctl__item{grid-template-columns:60px 1fr;grid-template-rows:auto}
.ctl__slot--left{display:none}
.ctl__slot--right{grid-column:2;grid-row:1;justify-content:flex-start;padding:0 0 0 1rem}
.ctl__item--left .ctl__slot--left{display:flex;grid-column:2;grid-row:1;justify-content:flex-start;padding:0 0 0 1rem}
.ctl__item--left .ctl__card--left{text-align:left}
.ctl__node-wrap{grid-column:1;grid-row:1}
.ctl__card--left.ctl-card,.ctl__card--right.ctl-card{transform:translateY(1rem)}
.ctl-card--visible{transform:translateY(0)!important}
</style>