Zoeken...  ⌘K GitHub

ProcessTimeline Sections

ProcessTimeline component.

/process-timeline
src/components/sections/ProcessTimeline.astro
---
// ProcessTimeline, recovered from blurr-components.pages.dev
---

<section class="pt pt--alternating" data-component="process-timeline"> <div class="pt__inner"> <div class="pt__header"> <p class="pt__pre">Onze werkwijze</p> <h2 class="pt__headline">Van gesprek tot <em>groei</em></h2> <p class="pt__sub">Een bewezen proces dat werkt voor elk type bedrijf.</p> </div> <div class="pt__timeline"> <!-- Central line --> <div class="pt__line" aria-hidden="true"> <div class="pt__line-fill"></div> </div> <div class="pt__step" data-step="0" style="--step-delay:0s"> <!-- Node on the line --> <div class="pt__node"> <span class="pt__node-num"> 01 </span> </div> <!-- Content card --> <div class="pt__card"> <div class="pt__card-meta"> <span class="pt__tag">Gratis</span> <span class="pt__duration"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <circle cx="12" cy="12" r="10"></circle> <path d="M12 6v6l4 2"></path> </svg> 30 min </span> </div>  <h3 class="pt__step-title">Kennismaking</h3> <p class="pt__step-desc">In 30 minuten leren we je bedrijf, doelen en huidige situatie kennen. Geen verplichtingen.</p> </div> </div><div class="pt__step" data-step="1" style="--step-delay:0.12s"> <!-- Node on the line --> <div class="pt__node"> <span class="pt__node-num"> 02 </span> </div> <!-- Content card --> <div class="pt__card"> <div class="pt__card-meta"> <span class="pt__tag">Analyse</span> <span class="pt__duration"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <circle cx="12" cy="12" r="10"></circle> <path d="M12 6v6l4 2"></path> </svg> 3-5 dagen </span> </div>  <h3 class="pt__step-title">Strategie op maat</h3> <p class="pt__step-desc">We analyseren je markt, concurrenten en kansen. Je krijgt een concreet actieplan met KPIs.</p> </div> </div><div class="pt__step" data-step="2" style="--step-delay:0.24s"> <!-- Node on the line --> <div class="pt__node"> <span class="pt__node-num"> 03 </span> </div> <!-- Content card --> <div class="pt__card"> <div class="pt__card-meta"> <span class="pt__tag">Launch</span> <span class="pt__duration"> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <circle cx="12" cy="12" r="10"></circle> <path d="M12 6v6l4 2"></path> </svg> 48 uur </span> </div>  <h3 class="pt__step-title">Campagnes live</h3> <p class="pt__step-desc">Binnen 48 uur na onboarding zijn je campagnes actief en begint de data te stromen.</p> </div> </div><div class="pt__step" data-step="3" style="--step-delay:0.36s"> <!-- Node on the line --> <div class="pt__node"> <span class="pt__node-num"> 04 </span> </div> <!-- Content card --> <div class="pt__card"> <div class="pt__card-meta"> <span class="pt__tag">Ongoing</span>  </div>  <h3 class="pt__step-title">Optimaliseren &amp; groeien</h3> <p class="pt__step-desc">Wekelijkse tests, maandelijkse reviews en continue optimalisatie op basis van data.</p> </div> </div> </div> </div> </section>

<style>
.pt{padding:6rem 1.5rem;background:var(--color-bg, #fff);overflow:hidden}
.pt__inner{max-width:900px;margin:0 auto}
.pt__header{text-align:center;max-width:600px;margin:0 auto 5rem}
.pt__pre{font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--color-accent, #6366f1);margin-bottom:.875rem}
.pt__headline{font-size:clamp(1.75rem,3.5vw,3rem);font-weight:800;letter-spacing:-.035em;line-height:1.1;color:var(--color-primary, #0a0a0a);margin-bottom:.875rem}
.pt__headline em{font-style:normal;color:var(--color-accent, #6366f1)}
.pt__sub{font-size:1rem;line-height:1.65;color:var(--color-muted, #6b7280)}
.pt__timeline{position:relative;display:flex;flex-direction:column;gap:0}
.pt__line{position:absolute;left:50%;top:0;bottom:0;width:1px;background:#00000012;transform:translate(-50%);overflow:hidden}
.pt__line-fill{position:absolute;inset:0;background:linear-gradient(to bottom,var(--color-accent, #6366f1),#a78bfa);transform:scaleY(0);transform-origin:top;transition:transform .1s}
.pt__step{display:grid;grid-template-columns:1fr 56px 1fr;align-items:center;gap:2rem;padding:2.5rem 0;opacity:0;transition:opacity .6s var(--step-delay, 0s) cubic-bezier(.22,1,.36,1),transform .6s var(--step-delay, 0s) cubic-bezier(.22,1,.36,1)}
.pt--alternating .pt__step:nth-child(odd){transform:translate(-30px)}
.pt--alternating .pt__step:nth-child(2n){transform:translate(30px)}
.pt--left .pt__step{transform:translate(-20px)}
.pt__step--visible{opacity:1!important;transform:none!important}
.pt__node{width:56px;height:56px;background:var(--color-primary, #0a0a0a);border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;z-index:1;border:3px solid var(--color-bg, #fff);box-shadow:0 0 0 2px var(--color-primary, #0a0a0a);transition:background .3s}
.pt__step--visible .pt__node{background:var(--color-accent, #6366f1);box-shadow:0 0 0 2px var(--color-accent, #6366f1),0 0 24px #6366f133}
.pt__node-num{font-size:.75rem;font-weight:800;color:#fff;letter-spacing:-.02em;font-feature-settings:"tnum"}
.pt__card{background:var(--color-bg, #fff);border:1px solid rgba(0,0,0,.07);border-radius:1rem;padding:1.75rem;box-shadow:0 2px 16px #0000000a;transition:box-shadow .3s,border-color .3s}
.pt__step--visible .pt__card{box-shadow:0 4px 24px #00000014}
.pt__card:hover{border-color:#6366f133;box-shadow:0 8px 32px #6366f114}
.pt--alternating .pt__step:nth-child(odd) .pt__card{grid-column:1;order:-1;text-align:right}
.pt--alternating .pt__step:nth-child(odd) .pt__card-meta{justify-content:flex-end}
.pt--alternating .pt__step:nth-child(odd) .pt__card-icon{margin-left:auto}
.pt--left .pt__step{grid-template-columns:56px 1fr;gap:1.5rem}
.pt--left .pt__line{left:28px;transform:none}
.pt__card-meta{display:flex;align-items:center;gap:.625rem;margin-bottom:.875rem}
.pt__tag{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;background:#6366f114;color:var(--color-accent, #6366f1);padding:.1875rem .5rem;border-radius:999px}
.pt__duration{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:var(--color-muted, #6b7280)}
.pt__card-icon{width:32px;height:32px;color:var(--color-accent, #6366f1);margin-bottom:.875rem}
.pt__step-title{font-size:1.125rem;font-weight:700;letter-spacing:-.02em;color:var(--color-primary, #0a0a0a);margin-bottom:.5rem}
.pt__step-desc{font-size:.9375rem;line-height:1.65;color:var(--color-muted, #6b7280)}
.pt__step{opacity:1!important;transform:none!important;transition:none!important}
.pt__timeline{padding-left:2rem}
.pt__line{left:0}
.pt--alternating .pt__step,.pt__step{grid-template-columns:40px 1fr;gap:1rem}
.pt__node{width:40px;height:40px}
.pt--alternating .pt__step:nth-child(odd) .pt__card{grid-column:auto;order:0;text-align:left}
.pt--alternating .pt__step:nth-child(odd) .pt__card-meta{justify-content:flex-start}
.pt--alternating .pt__step:nth-child(odd) .pt__card-icon{margin-left:0}
.pt--alternating .pt__step:nth-child(odd){transform:translate(-20px)}
.pt--alternating .pt__step:nth-child(2n){transform:translate(-20px)}
</style>