atlas-academy/static/leerpad.html
Atlas Developer 03829a38b2 feat: Atlas Academy — Odoo eLearning platform, full fusion
9-course Dutch e-learning platform fused onto atlasacademy.nl via Caddy
reverse proxy. Odoo 19 Community as course engine (website_slides), static
HTML for marketing front. Single Odoo account system.

- static/: 8 marketing pages (index, pricing, coaching, leerpad, over, shop, bisl, esf)
- backend/odoo_relay.py: lead relay Flask service (POST /academy-lead → Odoo CRM)
- caddy/academy.caddyfile: full Caddy config with Odoo proxy + auth rewrites
- docs/: ARCHITECTURE, USERFLOW, COURSES, DEPLOYMENT, SECURITY, ODOO

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 00:48:45 +02:00

1371 lines
42 KiB
HTML

<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Het Atlas Academy 12-weken leerpad — gestructureerde volgorde door alle 25 modules van fundament tot groei en funding.">
<meta name="robots" content="index, follow">
<title>12-weken leerpad — Atlas Academy</title>
<style>
/* ============================
CSS CUSTOM PROPERTIES (exact from index.html)
============================ */
:root {
--bg: #040810;
--card: #0a1628;
--card2: #0d1f3c;
--border: rgba(59,130,246,.15);
--arc: #3B82F6;
--purple: #8B5CF6;
--cyan: #06B6D4;
--ok: #22C55E;
--warn: #F59E0B;
--pink: #EC4899;
--amber: #F59E0B;
--txt: #F1F5F9;
--muted: #94A3B8;
--font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--radius: 10px;
--radius-lg: 16px;
--radius-xl: 24px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(--bg);
color: var(--txt);
font-family: var(--font);
font-size: 16px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
a { color: var(--arc); text-decoration: none; }
a:hover { color: #93C5FD; }
img { max-width: 100%; }
.container {
width: 100%;
max-width: 1140px;
margin: 0 auto;
padding: 0 24px;
}
.gradient-text {
background: linear-gradient(135deg, #fff 0%, #93c5fd 50%, #c4b5fd 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 12px 26px;
border-radius: var(--radius);
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all .2s;
border: none;
text-decoration: none;
white-space: nowrap;
}
.btn-primary {
background: linear-gradient(135deg, var(--arc), var(--purple));
color: #fff;
box-shadow: 0 0 30px rgba(59,130,246,.35);
}
.btn-primary:hover {
box-shadow: 0 0 50px rgba(59,130,246,.6);
transform: translateY(-2px);
color: #fff;
}
.btn-glass {
background: rgba(255,255,255,.06);
color: var(--txt);
border: 1px solid rgba(255,255,255,.12);
backdrop-filter: blur(12px);
}
.btn-glass:hover {
background: rgba(255,255,255,.1);
border-color: rgba(255,255,255,.2);
transform: translateY(-2px);
color: var(--txt);
}
.btn-outline {
background: transparent;
color: var(--arc);
border: 1.5px solid rgba(59,130,246,.4);
}
.btn-outline:hover {
border-color: var(--arc);
box-shadow: 0 0 20px rgba(59,130,246,.2);
transform: translateY(-2px);
color: var(--arc);
}
/* ============================
BACKGROUND ANIMATIONS
============================ */
@keyframes mesh {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes float1 {
0%, 100% { transform: translate(0, 0) scale(1); }
33% { transform: translate(30px, -20px) scale(1.05); }
66% { transform: translate(-20px, 15px) scale(.97); }
}
@keyframes float2 {
0%, 100% { transform: translate(0, 0) scale(1); }
33% { transform: translate(-25px, 20px) scale(1.03); }
66% { transform: translate(20px, -15px) scale(.98); }
}
@keyframes float3 {
0%, 100% { transform: translate(0, 0) scale(1); }
50% { transform: translate(15px, 25px) scale(1.04); }
}
@keyframes fadeSlideUp {
from { opacity: 0; transform: translateY(28px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes pulseBorder {
0%, 100% { box-shadow: 0 0 0 0 rgba(59,130,246,.3); }
50% { box-shadow: 0 0 0 8px rgba(59,130,246,0); }
}
@keyframes borderRotate {
from { --angle: 0deg; }
to { --angle: 360deg; }
}
@keyframes shimmer {
from { background-position: -200% center; }
to { background-position: 200% center; }
}
@keyframes progressPulse {
0%, 100% { opacity: 1; }
50% { opacity: .7; }
}
/* ============================
NAV (glassmorphism — exact from index.html)
============================ */
nav {
position: sticky;
top: 0;
z-index: 200;
background: rgba(4,8,16,.85);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(59,130,246,.08);
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
height: 64px;
gap: 16px;
}
.nav-logo {
font-size: 16px;
font-weight: 800;
color: var(--txt);
white-space: nowrap;
flex-shrink: 0;
display: flex;
align-items: center;
gap: 8px;
letter-spacing: -.01em;
}
.nav-logo:hover { color: #93C5FD; }
.nav-logo-icon {
width: 28px; height: 28px;
background: linear-gradient(135deg, var(--arc), var(--purple));
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
flex-shrink: 0;
}
.nav-links {
display: flex;
align-items: center;
gap: 28px;
list-style: none;
}
.nav-links a {
color: var(--muted);
font-size: 14px;
font-weight: 500;
transition: color .15s;
}
.nav-links a:hover { color: var(--txt); }
.nav-links a.active { color: var(--arc); font-weight: 700; }
.nav-cta { padding: 9px 20px; font-size: 14px; }
.nav-mobile-toggle {
display: none;
background: rgba(255,255,255,.05);
border: 1px solid rgba(255,255,255,.1);
color: var(--txt);
padding: 6px 10px;
border-radius: 8px;
font-size: 18px;
cursor: pointer;
}
.nav-mobile-menu {
display: none;
flex-direction: column;
background: rgba(10,22,40,.98);
border-bottom: 1px solid rgba(59,130,246,.1);
padding: 8px 0;
}
.nav-mobile-menu a {
display: block;
padding: 13px 24px;
color: var(--txt);
font-size: 15px;
border-bottom: 1px solid rgba(255,255,255,.04);
transition: background .15s;
}
.nav-mobile-menu a:hover { background: rgba(59,130,246,.06); }
.nav-mobile-menu a:last-child { border-bottom: none; }
@media (max-width: 700px) {
.nav-links, .nav-cta { display: none; }
.nav-mobile-toggle { display: block; }
.nav-mobile-menu.open { display: flex; }
}
/* ============================
HERO — animated background with orbs
============================ */
#hero {
min-height: 56vh;
display: flex;
align-items: center;
position: relative;
overflow: hidden;
background: linear-gradient(-45deg, #040810, #071428, #1e1b4b, #060f2a, #0c1a3a);
background-size: 400% 400%;
animation: mesh 18s ease infinite;
padding: 80px 0 64px;
text-align: center;
}
.hero-orb {
position: absolute;
border-radius: 50%;
pointer-events: none;
filter: blur(80px);
opacity: .45;
}
.hero-orb-1 {
width: 700px; height: 700px;
background: radial-gradient(circle, rgba(59,130,246,.4) 0%, transparent 70%);
top: -200px; left: -150px;
animation: float1 20s ease-in-out infinite;
}
.hero-orb-2 {
width: 600px; height: 600px;
background: radial-gradient(circle, rgba(139,92,246,.35) 0%, transparent 70%);
bottom: -180px; right: -100px;
animation: float2 24s ease-in-out infinite;
}
.hero-orb-3 {
width: 400px; height: 400px;
background: radial-gradient(circle, rgba(6,182,212,.25) 0%, transparent 70%);
top: 40%; left: 55%;
animation: float3 16s ease-in-out infinite;
}
#hero::after {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(59,130,246,.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(59,130,246,.04) 1px, transparent 1px);
background-size: 60px 60px;
pointer-events: none;
}
.hero-inner {
position: relative;
z-index: 2;
animation: fadeSlideUp .7s ease both;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(59,130,246,.08);
border: 1px solid rgba(59,130,246,.2);
color: #93C5FD;
padding: 7px 18px;
border-radius: 999px;
font-size: 13px;
font-weight: 600;
letter-spacing: .02em;
margin-bottom: 28px;
backdrop-filter: blur(8px);
}
.hero-badge-dot {
width: 6px; height: 6px;
background: var(--amber);
border-radius: 50%;
flex-shrink: 0;
box-shadow: 0 0 6px var(--amber);
animation: progressPulse 2s ease-in-out infinite;
}
#hero h1 {
font-size: clamp(32px, 5vw, 56px);
font-weight: 900;
line-height: 1.08;
letter-spacing: -.03em;
margin-bottom: 18px;
color: #fff;
}
.hero-sub {
font-size: clamp(15px, 2vw, 18px);
color: #94A3B8;
max-width: 480px;
margin: 0 auto 0;
line-height: 1.7;
}
/* ============================
PROGRESS TRACKER (glassmorphism)
============================ */
.progress-section {
position: relative;
z-index: 10;
padding: 0 24px;
}
.progress-glass {
max-width: 680px;
margin: -36px auto 0;
background: rgba(10,22,40,.85);
border: 1px solid rgba(59,130,246,.2);
border-radius: var(--radius-xl);
padding: 28px 32px;
backdrop-filter: blur(20px);
box-shadow: 0 32px 64px rgba(0,0,0,.4), 0 0 40px rgba(59,130,246,.06);
position: relative;
overflow: hidden;
}
.progress-glass::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, var(--arc), var(--purple), var(--cyan));
}
.progress-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
}
.progress-title {
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .1em;
color: var(--muted);
}
.progress-pct {
font-size: 13px;
font-weight: 800;
color: var(--arc);
}
.progress-bar-wrap {
background: rgba(255,255,255,.06);
border-radius: 999px;
height: 10px;
margin-bottom: 14px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
border-radius: 999px;
background: linear-gradient(90deg, var(--arc) 0%, var(--ok) 100%);
transition: width .8s cubic-bezier(.4,0,.2,1);
width: 0%;
box-shadow: 0 0 12px rgba(59,130,246,.5);
}
.progress-phases {
display: flex;
gap: 8px;
justify-content: center;
flex-wrap: wrap;
}
.progress-phase-dot {
width: 32px; height: 32px;
border-radius: 50%;
background: rgba(255,255,255,.06);
border: 1.5px solid rgba(255,255,255,.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
color: var(--muted);
transition: all .3s;
}
.progress-phase-dot.done {
background: rgba(34,197,94,.15);
border-color: rgba(34,197,94,.5);
color: var(--ok);
box-shadow: 0 0 12px rgba(34,197,94,.2);
}
.progress-label {
font-size: 13px;
color: var(--muted);
margin-top: 12px;
text-align: center;
}
.progress-label strong { color: var(--txt); }
/* ============================
SECTION WRAPPER
============================ */
.lp-section {
padding: 80px 0 96px;
}
.section-intro {
text-align: center;
margin-bottom: 64px;
}
.section-label {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--arc);
margin-bottom: 12px;
}
.section-label::before {
content: '';
display: block;
width: 16px; height: 1px;
background: var(--arc);
}
.section-title {
font-size: clamp(24px, 3.5vw, 36px);
font-weight: 800;
line-height: 1.15;
margin-bottom: 14px;
letter-spacing: -.02em;
}
.section-sub {
color: var(--muted);
font-size: 17px;
max-width: 540px;
margin: 0 auto;
line-height: 1.7;
}
/* ============================
HORIZONTAL SCROLL TIMELINE (desktop)
============================ */
.timeline-scroll-wrapper {
overflow-x: auto;
padding-bottom: 24px;
scrollbar-width: thin;
scrollbar-color: rgba(59,130,246,.3) transparent;
-webkit-overflow-scrolling: touch;
cursor: grab;
}
.timeline-scroll-wrapper:active { cursor: grabbing; }
.timeline-scroll-wrapper::-webkit-scrollbar { height: 4px; }
.timeline-scroll-wrapper::-webkit-scrollbar-track { background: transparent; }
.timeline-scroll-wrapper::-webkit-scrollbar-thumb { background: rgba(59,130,246,.3); border-radius: 4px; }
.timeline-track {
display: flex;
gap: 0;
min-width: max-content;
padding: 24px 0 8px;
position: relative;
}
/* Connector line between nodes */
.timeline-connector {
position: absolute;
top: 68px;
left: 60px;
right: 60px;
height: 2px;
background: linear-gradient(90deg,
var(--arc) 0%,
var(--purple) 33%,
var(--cyan) 66%,
var(--ok) 100%
);
pointer-events: none;
z-index: 0;
}
.timeline-connector::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(90deg,
transparent 0%,
rgba(59,130,246,.4) 20%,
rgba(139,92,246,.4) 50%,
rgba(6,182,212,.4) 80%,
transparent 100%
);
filter: blur(6px);
}
/* Each fase column */
.fase-col {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
z-index: 1;
width: 280px;
flex-shrink: 0;
padding: 0 16px;
}
/* Phase node (numbered circle) */
.fase-node {
width: 52px; height: 52px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
font-weight: 900;
color: #fff;
margin-bottom: 20px;
position: relative;
z-index: 2;
flex-shrink: 0;
box-shadow: 0 0 24px rgba(59,130,246,.5);
transition: transform .2s, box-shadow .2s;
}
.fase-node:hover { transform: scale(1.1); box-shadow: 0 0 40px rgba(59,130,246,.7); }
.fase-node-1 { background: linear-gradient(135deg, #3B82F6, #6366F1); }
.fase-node-2 { background: linear-gradient(135deg, #8B5CF6, #A78BFA); }
.fase-node-3 { background: linear-gradient(135deg, #06B6D4, #3B82F6); }
.fase-node-4 { background: linear-gradient(135deg, #F59E0B, #EF4444); }
.fase-node-5 { background: linear-gradient(135deg, #10B981, #06B6D4); }
.fase-node-6 { background: linear-gradient(135deg, #EC4899, #8B5CF6); }
.fase-node.done { box-shadow: 0 0 24px rgba(34,197,94,.5); }
.fase-node.done::after {
content: '✓';
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, rgba(34,197,94,.9), rgba(16,185,129,.9));
border-radius: 50%;
font-size: 20px;
}
/* Fase card (glassmorphism) */
.fase-card {
background: rgba(10,22,40,.8);
border: 1px solid rgba(59,130,246,.12);
border-radius: var(--radius-xl);
padding: 24px;
width: 100%;
backdrop-filter: blur(16px);
transition: border-color .2s, transform .2s, box-shadow .2s;
position: relative;
overflow: hidden;
}
.fase-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(59,130,246,.4), transparent);
}
.fase-card:hover {
border-color: rgba(59,130,246,.3);
transform: translateY(-4px);
box-shadow: 0 20px 48px rgba(0,0,0,.4), 0 0 30px rgba(59,130,246,.08);
}
.fase-card.completed {
border-color: rgba(34,197,94,.2);
background: rgba(10,22,40,.8);
}
.fase-card.completed::before {
background: linear-gradient(90deg, transparent, rgba(34,197,94,.5), transparent);
}
.fase-card.completed:hover {
border-color: rgba(34,197,94,.4);
box-shadow: 0 20px 48px rgba(0,0,0,.4), 0 0 30px rgba(34,197,94,.08);
}
/* Week badge (amber) */
.fase-week-badge {
display: inline-flex;
align-items: center;
gap: 6px;
background: rgba(245,158,11,.1);
border: 1px solid rgba(245,158,11,.25);
color: var(--amber);
padding: 4px 10px;
border-radius: 999px;
font-size: 11px;
font-weight: 700;
letter-spacing: .04em;
margin-bottom: 14px;
}
.fase-card.completed .fase-week-badge {
background: rgba(34,197,94,.1);
border-color: rgba(34,197,94,.25);
color: var(--ok);
}
.fase-title {
font-size: 15px;
font-weight: 800;
color: var(--txt);
margin-bottom: 14px;
line-height: 1.3;
}
/* Module pills */
.fase-pills {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-bottom: 16px;
}
.fase-pill {
display: inline-flex;
align-items: center;
padding: 4px 10px;
background: rgba(255,255,255,.05);
border: 1px solid rgba(255,255,255,.08);
border-radius: 999px;
font-size: 11px;
font-weight: 500;
color: var(--muted);
transition: all .2s;
cursor: pointer;
text-decoration: none;
}
.fase-pill:hover {
background: rgba(59,130,246,.1);
border-color: rgba(59,130,246,.3);
color: #93C5FD;
}
.fase-card.completed .fase-pill {
background: rgba(34,197,94,.06);
border-color: rgba(34,197,94,.15);
color: rgba(34,197,94,.8);
}
.fase-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding-top: 14px;
border-top: 1px solid rgba(255,255,255,.05);
}
.fase-time {
display: flex;
align-items: center;
gap: 5px;
font-size: 11px;
color: var(--muted);
}
.fase-time svg { flex-shrink: 0; opacity: .6; }
.fase-status {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 11px;
font-weight: 700;
padding: 3px 9px;
border-radius: 999px;
}
.fase-status.done {
background: rgba(34,197,94,.12);
color: var(--ok);
border: 1px solid rgba(34,197,94,.25);
}
.fase-status.in-progress {
background: rgba(245,158,11,.12);
color: var(--warn);
border: 1px solid rgba(245,158,11,.25);
}
.fase-status.locked {
background: rgba(148,163,184,.06);
color: var(--muted);
border: 1px solid rgba(148,163,184,.12);
}
/* Mobile: stack vertically */
@media (max-width: 900px) {
.timeline-scroll-wrapper { overflow-x: visible; }
.timeline-track {
flex-direction: column;
min-width: auto;
gap: 24px;
padding: 0;
}
.timeline-connector { display: none; }
.fase-col {
width: 100%;
padding: 0;
flex-direction: row;
align-items: flex-start;
gap: 16px;
}
.fase-node {
margin-bottom: 0;
flex-shrink: 0;
margin-top: 4px;
}
.fase-card { flex: 1; }
}
@media (max-width: 600px) {
.fase-col { flex-direction: column; }
.fase-node { margin-bottom: 12px; }
}
/* ============================
BONUS TRACK
============================ */
.bonus-track {
margin-top: 64px;
background: linear-gradient(135deg, rgba(139,92,246,.08) 0%, rgba(59,130,246,.06) 100%);
border: 1px solid rgba(139,92,246,.25);
border-radius: var(--radius-xl);
padding: 32px 36px;
display: flex;
align-items: flex-start;
gap: 24px;
position: relative;
overflow: hidden;
}
.bonus-track::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, var(--purple), var(--arc), var(--cyan));
}
.bonus-icon {
font-size: 40px;
flex-shrink: 0;
line-height: 1;
margin-top: 2px;
}
.bonus-label {
font-size: 11px;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--purple);
margin-bottom: 6px;
}
.bonus-title {
font-size: 20px;
font-weight: 800;
color: var(--txt);
margin-bottom: 8px;
}
.bonus-desc {
color: var(--muted);
font-size: 14px;
margin-bottom: 16px;
line-height: 1.7;
max-width: 560px;
}
.bonus-pills {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 18px;
}
.bonus-pill {
background: rgba(139,92,246,.12);
border: 1px solid rgba(139,92,246,.25);
color: var(--purple);
padding: 4px 12px;
border-radius: 999px;
font-size: 12px;
font-weight: 600;
}
@media (max-width: 640px) {
.bonus-track { flex-direction: column; padding: 24px 20px; }
}
/* ============================
CTA SECTION
============================ */
.lp-cta {
text-align: center;
padding: 88px 0 96px;
position: relative;
overflow: hidden;
background: linear-gradient(-45deg, #040810, #071428, #1e1b4b, #060f2a);
background-size: 400% 400%;
animation: mesh 22s ease infinite;
}
.lp-cta .hero-orb-1 { opacity: .25; }
.lp-cta .hero-orb-2 { opacity: .2; }
#hero::after, .lp-cta::after {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(59,130,246,.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(59,130,246,.04) 1px, transparent 1px);
background-size: 60px 60px;
pointer-events: none;
}
.lp-cta-inner {
position: relative;
z-index: 2;
animation: fadeSlideUp .6s ease both;
}
.lp-cta h2 {
font-size: clamp(26px, 4vw, 42px);
font-weight: 900;
letter-spacing: -.02em;
margin-bottom: 16px;
}
.lp-cta p {
color: var(--muted);
font-size: 18px;
max-width: 480px;
margin: 0 auto 36px;
line-height: 1.7;
}
.cta-actions {
display: flex;
align-items: center;
justify-content: center;
gap: 14px;
flex-wrap: wrap;
}
/* ============================
SCROLL REVEAL
============================ */
.reveal {
opacity: 0;
transform: translateY(24px);
transition: opacity .6s ease, transform .6s ease;
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
/* ============================
FOOTER
============================ */
footer {
background: var(--card);
border-top: 1px solid rgba(59,130,246,.08);
padding: 56px 0 32px;
}
.footer-inner {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 1fr;
gap: 40px;
margin-bottom: 40px;
}
.footer-logo {
font-size: 16px;
font-weight: 800;
display: flex;
align-items: center;
gap: 8px;
color: var(--txt);
margin-bottom: 12px;
}
.footer-brand p {
color: var(--muted);
font-size: 13px;
max-width: 240px;
line-height: 1.6;
}
.footer-col-title {
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .08em;
color: var(--muted);
margin-bottom: 16px;
}
.footer-links {
list-style: none;
display: flex;
flex-direction: column;
gap: 10px;
}
.footer-links a {
color: var(--muted);
font-size: 14px;
transition: color .15s;
}
.footer-links a:hover { color: var(--txt); }
.footer-bottom {
border-top: 1px solid rgba(255,255,255,.05);
padding-top: 24px;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
}
.footer-copy { color: var(--muted); font-size: 13px; }
.footer-copy a { color: var(--muted); }
.footer-copy a:hover { color: var(--arc); }
@media (max-width: 900px) { .footer-inner { grid-template-columns: 1fr 1fr; } }
@media (max-width: 480px) { .footer-inner { grid-template-columns: 1fr; gap: 28px; } .cta-actions { flex-direction: column; align-items: stretch; } }
.lang-toggle{background:transparent;border:1px solid rgba(59,130,246,.5);color:#9CA3AF;padding:5px 12px;border-radius:20px;cursor:pointer;font-size:12px;font-weight:600;transition:all .2s;margin-right:8px;}</style>
<!-- GA4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-JBWZWZMKBC"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-JBWZWZMKBC');</script>
</head>
<body>
<script>
/* ── Atlas Academy auth gate ── */
(function(){
var tok=localStorage.getItem('aa_token');
if(!tok){window.location.replace('/login.html?next='+encodeURIComponent(window.location.pathname));return;}
try{
var p=tok.split('.');if(p.length!==3)throw 0;
var pay=JSON.parse(atob((p[1]+'==').replace(/-/g,'+').replace(/_/g,'/')));
if(!pay.exp||Date.now()/1000>pay.exp)throw 0;
window.ATLAS_USER={name:pay.name,email:pay.sub};
}catch(e){localStorage.removeItem('aa_token');window.location.replace('/login.html?next='+encodeURIComponent(window.location.pathname));}
})();
</script>
<!-- NAV -->
<nav>
<div class="container nav-inner">
<a href="index.html" class="nav-logo">
<span class="nav-logo-icon">&#127891;</span>
Atlas Academy
</a>
<ul class="nav-links">
<li><a href="cursussen.html">Cursussen</a></li>
<li><a href="leerpad.html" class="active">Leerpad</a></li>
<li><a href="coaching.html">Coaching</a></li>
<li><a href="pricing.html">Prijzen</a></li>
<li><a href="shop.html">Shop</a></li>
<li><a href="/web/login?redirect=%2Fslides">Inloggen</a></li>
</ul>
<button class="lang-toggle" onclick="toggleLang()" id="langBtn">EN</button><a class="btn btn-primary nav-cta" href="mailto:info@atlascorporation.nl?subject=Atlas+Academy">Start gratis &rarr;</a>
<button class="nav-mobile-toggle" onclick="toggleMenu()" aria-label="Menu openen">&#9776;</button>
</div>
<div class="nav-mobile-menu" id="mobileMenu">
<a href="cursussen.html">Cursussen</a>
<a href="leerpad.html">Leerpad</a>
<a href="coaching.html">Coaching</a>
<a href="pricing.html">Prijzen</a>
<a href="shop.html">Shop</a>
<a href="/web/login?redirect=%2Fslides">Inloggen</a>
<a href="mailto:info@atlascorporation.nl?subject=Atlas+Academy">Start gratis</a>
</div>
</nav>
<!-- HERO -->
<section id="hero">
<div class="hero-orb hero-orb-1"></div>
<div class="hero-orb hero-orb-2"></div>
<div class="hero-orb hero-orb-3"></div>
<div class="container">
<div class="hero-inner">
<div class="hero-badge">
<span class="hero-badge-dot"></span>
12 weken &middot; 25 modules &middot; 6 fases
</div>
<h1 class="gradient-text">&#128506;&#65039; Het 12-weken leerpad</h1>
<p class="hero-sub">Gestructureerde volgorde door alle 25 modules &mdash; van fundament tot funding.</p>
</div>
</div>
</section>
<!-- PROGRESS TRACKER -->
<div class="progress-section">
<div class="progress-glass">
<div class="progress-header">
<span class="progress-title">Jouw voortgang</span>
<span class="progress-pct" id="progressPercent">0%</span>
</div>
<div class="progress-bar-wrap">
<div class="progress-bar-fill" id="progressBarFill"></div>
</div>
<div class="progress-phases" id="progressDots">
<div class="progress-phase-dot" data-phase="1">1</div>
<div class="progress-phase-dot" data-phase="2">2</div>
<div class="progress-phase-dot" data-phase="3">3</div>
<div class="progress-phase-dot" data-phase="4">4</div>
<div class="progress-phase-dot" data-phase="5">5</div>
<div class="progress-phase-dot" data-phase="6">6</div>
</div>
<p class="progress-label">
<strong id="progressFases">0 van 6</strong> fases afgerond &mdash; klik een fase aan om hem te markeren
</p>
</div>
</div>
<!-- TIMELINE -->
<section class="lp-section">
<div class="container">
<div class="section-intro reveal">
<span class="section-label">Leerroute</span>
<h2 class="section-title">Volg de route, of kies jouw instapmoment</h2>
<p class="section-sub">Elke fase bouwt voort op de vorige. Klaar met een fase? Klik hem aan om je voortgang bij te houden.</p>
</div>
<!-- HORIZONTAL SCROLL WRAPPER -->
<div class="timeline-scroll-wrapper">
<div class="timeline-track" id="timeline">
<div class="timeline-connector"></div>
<!-- FASE 1 -->
<div class="fase-col reveal" id="fase-1" data-fase="1" onclick="toggleFase(1)">
<div class="fase-node fase-node-1" id="fase-node-1">1</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 1&ndash;2</div>
<div class="fase-title">&#128161; Fundament</div>
<div class="fase-pills">
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">Business Model Canvas</a>
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">SaaS metrics</a>
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">OKRs &amp; KPIs</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
4&ndash;6 uur
</div>
<div class="fase-status locked" id="fase-1-status">Nog te doen</div>
</div>
</div>
</div>
<!-- FASE 2 -->
<div class="fase-col reveal" id="fase-2" data-fase="2" onclick="toggleFase(2)">
<div class="fase-node fase-node-2" id="fase-node-2">2</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 3&ndash;4</div>
<div class="fase-title">&#128272; Tech &amp; AI basis</div>
<div class="fase-pills">
<a class="fase-pill" href="leerplatform.html" data-module="it-basis" onclick="markVisited(event,'it-basis')">Docker</a>
<a class="fase-pill" href="leerplatform.html" data-module="it-basis" onclick="markVisited(event,'it-basis')">SSL/TLS</a>
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">Prompt engineering</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
4&ndash;6 uur
</div>
<div class="fase-status locked" id="fase-2-status">Nog te doen</div>
</div>
</div>
</div>
<!-- FASE 3 -->
<div class="fase-col reveal" id="fase-3" data-fase="3" onclick="toggleFase(3)">
<div class="fase-node fase-node-3" id="fase-node-3">3</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 5&ndash;6</div>
<div class="fase-title">&#128227; Sales &amp; Marketing</div>
<div class="fase-pills">
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">Klantgesprek &amp; demo</a>
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">Google Ads</a>
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">Meta Ads</a>
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">CRM pipeline</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
4&ndash;6 uur
</div>
<div class="fase-status locked" id="fase-3-status">Nog te doen</div>
</div>
</div>
</div>
<!-- FASE 4 -->
<div class="fase-col reveal" id="fase-4" data-fase="4" onclick="toggleFase(4)">
<div class="fase-node fase-node-4" id="fase-node-4">4</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 7&ndash;8</div>
<div class="fase-title">&#128182; Geld &amp; Juridisch</div>
<div class="fase-pills">
<a class="fase-pill" href="leerplatform.html" data-module="business-juridisch" onclick="markVisited(event,'business-juridisch')">Financieel beheer ZZP/BV</a>
<a class="fase-pill" href="leerplatform.html" data-module="business-juridisch" onclick="markVisited(event,'business-juridisch')">Contracten</a>
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">Pricing strategie</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
4&ndash;6 uur
</div>
<div class="fase-status locked" id="fase-4-status">Nog te doen</div>
</div>
</div>
</div>
<!-- FASE 5 -->
<div class="fase-col reveal" id="fase-5" data-fase="5" onclick="toggleFase(5)">
<div class="fase-node fase-node-5" id="fase-node-5">5</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 9&ndash;10</div>
<div class="fase-title">&#129302; AI &amp; Automatisering</div>
<div class="fase-pills">
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">n8n</a>
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">Ollama</a>
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">RAG</a>
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">AI agents</a>
<a class="fase-pill" href="cursussen/ai.html" data-module="ai-automatisering" onclick="markVisited(event,'ai-automatisering')">AI &amp; Auto cursus</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
6&ndash;8 uur
</div>
<div class="fase-status locked" id="fase-5-status">Nog te doen</div>
</div>
</div>
</div>
<!-- FASE 6 -->
<div class="fase-col reveal" id="fase-6" data-fase="6" onclick="toggleFase(6)">
<div class="fase-node fase-node-6" id="fase-node-6">6</div>
<div class="fase-card">
<div class="fase-week-badge">&#128197; Week 11&ndash;12</div>
<div class="fase-title">&#128640; Groei &amp; Funding</div>
<div class="fase-pills">
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">Product-markt fit</a>
<a class="fase-pill" href="cursussen/startup.html" data-module="startup-groei" onclick="markVisited(event,'startup-groei')">Funding</a>
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">Klantacquisitie</a>
<a class="fase-pill" href="leerplatform.html" data-module="sales-marketing" onclick="markVisited(event,'sales-marketing')">Onderhandelen</a>
<a class="fase-pill" href="leerplatform.html" data-module="persoonlijke-ontwikkeling" onclick="markVisited(event,'persoonlijke-ontwikkeling')">Netwerken</a>
</div>
<div class="fase-footer">
<div class="fase-time">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
6&ndash;8 uur
</div>
<div class="fase-status locked" id="fase-6-status">Nog te doen</div>
</div>
</div>
</div>
</div><!-- /timeline-track -->
</div><!-- /timeline-scroll-wrapper -->
<!-- BONUS TRACK -->
<div class="bonus-track reveal">
<div class="bonus-icon">&#128218;</div>
<div>
<div class="bonus-label">Bonus track &mdash; parallel</div>
<div class="bonus-title">BiSL Foundation</div>
<p class="bonus-desc">Doe dit parallel in week 3&ndash;8. Functioneel beheer en IT-procesontwerp voor ondernemers die met leveranciers of IT-systemen werken. Preview van 3 modules gratis beschikbaar.</p>
<div class="bonus-pills">
<span class="bonus-pill">97 oefenvragen</span>
<span class="bonus-pill">17 lessen</span>
<span class="bonus-pill">Week 3&ndash;8</span>
<span class="bonus-pill">Gratis preview</span>
</div>
<a href="cursussen/bisl.html" class="btn btn-outline" style="font-size:14px;padding:9px 20px;">Open BiSL Foundation &rarr;</a>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="lp-cta">
<div class="hero-orb hero-orb-1" style="opacity:.2;"></div>
<div class="hero-orb hero-orb-2" style="opacity:.18;"></div>
<div class="container lp-cta-inner">
<h2 class="gradient-text">Klaar om te beginnen?</h2>
<p>Start bij fase 1 of spring in op het punt dat het meest urgent is. Alles is direct toepasbaar.</p>
<div class="cta-actions">
<a href="cursussen.html" class="btn btn-primary">&#9654;&#65038; Start het leerpad</a>
<a href="pricing.html" class="btn btn-glass">Bekijk pakketten</a>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div class="container">
<div class="footer-inner">
<div class="footer-brand">
<span class="footer-logo">&#127891; Atlas Academy</span>
<p>Praktische kennis voor ondernemers die bouwen. Onderdeel van Atlas Corporation.</p>
</div>
<div>
<div class="footer-col-title">Cursussen</div>
<ul class="footer-links">
<li><a href="cursussen/bisl.html">BiSL Foundation</a></li>
<li><a href="leerplatform.html">IT Basis</a></li>
<li><a href="cursussen/startup.html">Startup &amp; Groei</a></li>
<li><a href="leerplatform.html">Sales &amp; Marketing</a></li>
<li><a href="cursussen.html">Alle cursussen &rarr;</a></li>
</ul>
</div>
<div>
<div class="footer-col-title">Platform</div>
<ul class="footer-links">
<li><a href="cursussen.html">Cursussen</a></li>
<li><a href="leerpad.html">Leerpad</a></li>
<li><a href="coaching.html">Coaching</a></li>
<li><a href="pricing.html">Prijzen</a></li>
</ul>
</div>
<div>
<div class="footer-col-title">Contact</div>
<ul class="footer-links">
<li><a href="mailto:info@atlascorporation.nl">info@atlascorporation.nl</a></li>
<li><a href="https://atlascorporation.nl" target="_blank" rel="noopener">atlascorporation.nl</a></li>
<li><a href="mailto:info@atlascorporation.nl?subject=Atlas+Academy">Aanmelden</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p class="footer-copy">&copy; 2026 Atlas Academy &middot; onderdeel van <a href="https://atlascorporation.nl" target="_blank" rel="noopener">Atlas Corporation</a></p>
<p class="footer-copy" style="font-size:12px;">KvK &middot; BTW &middot; info@atlascorporation.nl</p>
</div>
</div>
</footer>
<script>
// ---- NAV TOGGLE ----
function toggleMenu() {
document.getElementById('mobileMenu').classList.toggle('open');
}
// ---- PROGRESS TRACKER ----
var faseModules = {
1: ['startup-groei'],
2: ['it-basis', 'ai-automatisering'],
3: ['sales-marketing'],
4: ['business-juridisch', 'startup-groei'],
5: ['ai-automatisering'],
6: ['startup-groei', 'sales-marketing', 'persoonlijke-ontwikkeling']
};
function isVisited(slug) {
return localStorage.getItem('atlas_academy_visited_' + slug) === '1';
}
function isFaseComplete(n) {
var slugs = faseModules[n] || [];
return slugs.length > 0 && slugs.every(function(s){ return isVisited(s); });
}
// Manual toggle: click a fase to mark all its modules visited/unvisited
function toggleFase(n) {
var slugs = faseModules[n] || [];
var complete = isFaseComplete(n);
slugs.forEach(function(s) {
if (complete) {
localStorage.removeItem('atlas_academy_visited_' + s);
} else {
localStorage.setItem('atlas_academy_visited_' + s, '1');
}
});
updateProgress();
}
function markVisited(e, slug) {
e.stopPropagation();
localStorage.setItem('atlas_academy_visited_' + slug, '1');
updateProgress();
}
function updateProgress() {
var completed = 0;
for (var i = 1; i <= 6; i++) {
var col = document.getElementById('fase-' + i);
var node = document.getElementById('fase-node-' + i);
var statusEl = document.getElementById('fase-' + i + '-status');
var dot = document.querySelector('[data-phase="' + i + '"]');
if (isFaseComplete(i)) {
completed++;
if (col) {
col.querySelector('.fase-card').classList.add('completed');
col.querySelector('.fase-week-badge').style.background = 'rgba(34,197,94,.1)';
col.querySelector('.fase-week-badge').style.borderColor = 'rgba(34,197,94,.25)';
col.querySelector('.fase-week-badge').style.color = '#22C55E';
}
if (node) node.classList.add('done');
if (statusEl) { statusEl.className = 'fase-status done'; statusEl.textContent = '✓ Afgerond'; }
if (dot) dot.classList.add('done');
} else {
if (col) {
col.querySelector('.fase-card').classList.remove('completed');
col.querySelector('.fase-week-badge').removeAttribute('style');
}
if (node) node.classList.remove('done');
if (statusEl) { statusEl.className = 'fase-status locked'; statusEl.textContent = 'Nog te doen'; }
if (dot) dot.classList.remove('done');
}
}
var pct = Math.round((completed / 6) * 100);
var fill = document.getElementById('progressBarFill');
var fasesEl = document.getElementById('progressFases');
var pctEl = document.getElementById('progressPercent');
if (fill) fill.style.width = pct + '%';
if (fasesEl) fasesEl.textContent = completed + ' van 6';
if (pctEl) pctEl.textContent = pct + '%';
}
// ---- SCROLL REVEAL ----
function initReveal() {
var els = document.querySelectorAll('.reveal');
var obs = new IntersectionObserver(function(entries) {
entries.forEach(function(e) {
if (e.isIntersecting) {
e.target.classList.add('visible');
obs.unobserve(e.target);
}
});
}, { threshold: 0.12 });
els.forEach(function(el, i) {
el.style.transitionDelay = (i * 0.06) + 's';
obs.observe(el);
});
}
// ---- DRAG SCROLL ----
var wrapper = document.querySelector('.timeline-scroll-wrapper');
if (wrapper) {
var isDown = false, startX, scrollLeft;
wrapper.addEventListener('mousedown', function(e) {
isDown = true; startX = e.pageX - wrapper.offsetLeft; scrollLeft = wrapper.scrollLeft;
});
window.addEventListener('mouseup', function() { isDown = false; });
wrapper.addEventListener('mousemove', function(e) {
if (!isDown) return;
e.preventDefault();
var x = e.pageX - wrapper.offsetLeft;
wrapper.scrollLeft = scrollLeft - (x - startX);
});
}
updateProgress();
initReveal();
</script>
<script>function toggleLang(){var isNL=document.documentElement.lang!=="en";var lang=isNL?"en":"nl";document.documentElement.lang=lang;document.getElementById("langBtn").textContent=isNL?"NL":"EN";document.querySelectorAll("[data-nl]").forEach(function(el){var v=el.getAttribute("data-"+lang);if(v)el.innerHTML=v;});localStorage.setItem("aa_lang",lang);}(function(){if(localStorage.getItem("aa_lang")==="en")toggleLang();})();</script></body>
</html>