/* OTF Koers 2.0: poederblauw, fel kobalt, diepe inkt */
:root{
  --surface:#FFFFFF;
  --surface-alt:#F3F6FA;
  --poeder:#C9DCFF;
  --poeder-zacht:#E8F0FF;
  --line:#DCE5F4;
  --ink:#0F1A33;
  --ink-muted:#4A5872;
  --navy:#122236;
  --on-navy:#FFFFFF;
  --kobalt:#1F5BFF;
  --kobalt-tekst:#1848C9;
  --on-field:#0F1A33;
  --field-soft:#4A5872;
  --btn:#0F1A33; --btn-text:#FFFFFF; --btn-hover:#1848C9;
  --logo-c1:#5E7187; --logo-c2:#1B4D8F; --logo-c3:#3D8BFF;
  --error:#B42318;

  --font:"Archivo", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --r-md:6px; --r-lg:10px;
  --maxw:1200px;
  --gutter:clamp(20px,5vw,56px);
  --ease-out:cubic-bezier(.23,1,.32,1);
  --ease-io:cubic-bezier(.65,0,.35,1);
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){color-scheme:dark;--surface:#0D1726;--surface-alt:#132135;--poeder:#1A2C52;--poeder-zacht:#16264A;--line:#24344B;--ink:#F2F5FA;--ink-muted:#A9B7C9;--navy:#081120;--kobalt:#6B9BFF;--kobalt-tekst:#8DBBFF;--on-field:#F2F5FA;--field-soft:#B9C7DA;--btn:#6B9BFF;--btn-text:#0B1626;--btn-hover:#8DBBFF;--logo-c1:rgba(255,255,255,.45);--logo-c2:#FFFFFF;--error:#FF8A80}
}
:root[data-theme="dark"]{color-scheme:dark;--surface:#0D1726;--surface-alt:#132135;--poeder:#1A2C52;--poeder-zacht:#16264A;--line:#24344B;--ink:#F2F5FA;--ink-muted:#A9B7C9;--navy:#081120;--kobalt:#6B9BFF;--kobalt-tekst:#8DBBFF;--on-field:#F2F5FA;--field-soft:#B9C7DA;--btn:#6B9BFF;--btn-text:#0B1626;--btn-hover:#8DBBFF;--logo-c1:rgba(255,255,255,.45);--logo-c2:#FFFFFF;--error:#FF8A80}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--surface);color:var(--ink);font-family:var(--font);font-size:19px;line-height:1.6;-webkit-font-smoothing:antialiased}
::selection{background:var(--kobalt);color:#fff}
h1,h2,h3{margin:0;line-height:1;text-wrap:balance}
p{margin:0;text-wrap:pretty}
a{color:inherit}
:focus-visible{outline:3px solid var(--kobalt);outline-offset:3px;border-radius:4px}
.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.sec{padding-block:clamp(96px,12vw,160px)}

/* Roadbook marker: where each section sits on the page's own stage */
.km{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:700;font-stretch:78%;letter-spacing:.12em;text-transform:uppercase;color:var(--kobalt-tekst);margin-bottom:22px}
.km::before{content:"";width:10px;height:10px;border-radius:50%;background:var(--kobalt)}
.label{font-size:13px;font-weight:700;font-stretch:78%;letter-spacing:.12em;text-transform:uppercase;color:var(--kobalt-tekst)}

/* Logo: the original chevrons and wordmark */
.logo{display:inline-flex;align-items:center;gap:.55em;font-weight:800;font-size:16px;letter-spacing:.02em;text-transform:uppercase;text-decoration:none;white-space:nowrap}
.logo svg{height:1.5em;width:auto;flex:none;overflow:visible}
.logo polyline{fill:none;stroke-linecap:round;stroke-linejoin:round}
.logo .c1{stroke:var(--logo-c1)} .logo .c2{stroke:var(--logo-c2)} .logo .c3{stroke:var(--logo-c3)}
.logo.wit{color:#fff}
.logo.wit .c1{stroke:rgba(255,255,255,.45)} .logo.wit .c2{stroke:#fff} .logo.wit .c3{stroke:#3D8BFF}
@media (hover:hover) and (pointer:fine){.logo .c3{transition:transform .5s var(--ease-out)}.logo:hover .c3{transform:translateX(6px)}}

/* Button */
.btn{display:inline-flex;align-items:center;gap:12px;background:var(--btn);color:var(--btn-text);font:700 17px/1 var(--font);padding:19px 26px;border-radius:var(--r-md);text-decoration:none;border:0;cursor:pointer;white-space:nowrap;transition:transform .18s var(--ease-out),background-color .25s ease}
.btn svg{width:19px;height:19px;transition:transform .3s var(--ease-out)}
.btn:active{transform:scale(.97)}
@media (hover:hover) and (pointer:fine){.btn:hover{background:var(--btn-hover)}.btn:hover svg{transform:translateX(4px)}}

/* HERO: poederblauw field */
.hero{background:var(--poeder);color:var(--on-field);overflow:hidden}
.bar{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--poeder);transition:background-color .3s ease,box-shadow .3s ease}
.bar.scrolled{background:var(--surface);box-shadow:0 1px 0 var(--line),0 12px 32px -24px rgba(15,26,51,.35)}
@supports (background:color-mix(in srgb,red,blue)){.bar.scrolled{background:color-mix(in srgb,var(--surface) 86%,transparent);backdrop-filter:saturate(1.4) blur(14px);-webkit-backdrop-filter:saturate(1.4) blur(14px)}}
.bar-in{display:flex;align-items:center;justify-content:space-between;gap:16px;height:80px}
.bar .logo{color:var(--ink)}
.bar .btn{padding:13px 18px;font-size:15px}
@media (max-width:480px){.bar .logo span{display:none}.bar .btn{padding:12px 14px;font-size:14px}}
.hero-grid{display:grid;grid-template-columns:1.35fr .65fr;gap:clamp(32px,6vw,96px);align-items:start;padding-block:clamp(40px,6vw,88px) clamp(64px,8vw,112px)}
.hero-grid > div:first-child{min-width:0;position:relative;z-index:2}
.hero h1{font-size:clamp(56px,9vw,150px);font-weight:900;font-stretch:125%;letter-spacing:-0.05em;line-height:.84;text-transform:lowercase}
.hero h1 > span{display:block;white-space:nowrap}
.hero h1 .d{color:var(--kobalt)}
.hero .claim{font-size:clamp(24px,2.6vw,36px);font-weight:800;font-stretch:108%;letter-spacing:-0.025em;line-height:1.1;margin-top:clamp(22px,2.6vw,34px);max-width:28ch}
.hero .act{display:flex;flex-wrap:wrap;align-items:center;gap:12px 22px;margin-top:clamp(26px,3vw,40px)}
.hero .act small{font-size:16px;font-weight:600;color:var(--field-soft)}
.shot{position:relative;z-index:1;margin:0;margin-top:clamp(80px,11vw,170px)}
.shot .frame{aspect-ratio:3/4;max-width:100%;border-radius:12px;overflow:hidden;background:#0F1A33;position:relative}
.shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:4% 50%;filter:url(#duo-navy-poeder) contrast(1.15)}
.shot .dot{position:absolute;left:-28px;bottom:18%;width:56px;height:56px;border-radius:50%;background:var(--kobalt);box-shadow:0 0 0 8px var(--poeder)}
.shot figcaption{margin-top:14px;font-size:13px;font-weight:700;font-stretch:78%;letter-spacing:.12em;text-transform:uppercase;color:var(--field-soft)}
@media (max-width:860px){.shot{margin-top:0}.hero-grid > div:first-child{container-type:inline-size}.hero h1{font-size:min(132px,13.4cqw)}.hero-grid{grid-template-columns:1fr}.shot{max-width:420px}.shot .frame{aspect-ratio:4/3}.shot .dot{left:auto;right:-14px;bottom:-14px;width:44px;height:44px}}

/* Growth profile: an uphill finish. The three points are JP's three steps */
.profile{margin-top:clamp(48px,6vw,80px);color:var(--ink)}
.profile svg{display:block;width:100%;height:auto;overflow:visible}
.profile .area{fill:var(--ink);opacity:.06}
.profile .ridge{fill:none;stroke:var(--ink);stroke-width:3;stroke-linejoin:round;stroke-linecap:round}
.profile .tick{stroke:var(--ink);stroke-width:1.5;stroke-dasharray:3 4}
.profile .lbl{font:700 15px/1 "Archivo",sans-serif;font-stretch:80%;fill:var(--ink);letter-spacing:.08em}
.profile .sub{font:500 14px/1 "Archivo",sans-serif;fill:var(--ink-muted)}
.profile .num{font:900 15px/1 "Archivo",sans-serif;fill:var(--kobalt)}
.profile .rider{fill:var(--kobalt);stroke:var(--ink);stroke-width:3}
.profile .stop{fill:var(--poeder-zacht);stroke:var(--ink);stroke-width:2.5}
@media (max-width:700px){.profile .sub{display:none}.profile .lbl,.profile .num{font-size:40px}.profile .tick{stroke-width:3}}

/* HERKEN */
.h2{font-size:clamp(44px,6.4vw,96px);font-weight:900;font-stretch:118%;letter-spacing:-0.05em;line-height:.9;text-transform:lowercase}
.lead{font-size:clamp(20px,1.8vw,23px);color:var(--ink-muted);max-width:44ch;margin-top:24px;line-height:1.5}
.pains{list-style:none;margin:clamp(48px,6vw,80px) 0 0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,3vw,40px)}
.pains li{border-top:3px solid var(--ink);padding-top:22px;display:grid;gap:10px;align-content:start}
.pains b{font-size:clamp(24px,2.3vw,30px);font-weight:800;font-stretch:92%;line-height:1.1;letter-spacing:-0.02em}
.pains span{color:var(--ink-muted);font-size:18px}
@media (max-width:860px){.pains{grid-template-columns:1fr}}

.focus{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,5vw,80px);margin-top:clamp(64px,8vw,112px);padding-top:clamp(32px,4vw,48px);border-top:1px solid var(--line);align-items:start}
.focus h3{font-size:clamp(32px,4vw,56px);font-weight:900;font-stretch:115%;letter-spacing:-0.045em;line-height:.95;text-transform:lowercase}
.focus p{color:var(--ink-muted);max-width:46ch}
.focus .res{margin-top:18px;color:var(--ink);font-weight:800;font-size:clamp(20px,1.8vw,24px);line-height:1.25;letter-spacing:-0.015em}
@media (max-width:760px){.focus{grid-template-columns:1fr}}

/* KOERSPLAN: the race bible's schedule */
.plan{background:var(--poeder-zacht)}
.horaire{margin-top:clamp(48px,6vw,80px);border-top:3px solid var(--ink)}
.horaire .row{display:grid;grid-template-columns:150px 1fr 1.4fr;gap:24px;align-items:baseline;padding-block:clamp(22px,2.6vw,34px);border-bottom:1px solid var(--line)}
.horaire h3{font-size:clamp(28px,3vw,44px);font-weight:900;font-stretch:115%;letter-spacing:-0.04em;text-transform:lowercase}
.horaire p{color:var(--ink-muted)}
@media (max-width:760px){.horaire .row{grid-template-columns:1fr;gap:8px}}

/* OVER JP */
.about{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(40px,6vw,96px);align-items:center}
.photo{aspect-ratio:4/5;max-width:100%;background:var(--poeder);border-radius:var(--r-lg);position:relative;overflow:hidden;display:grid;place-items:center}
.photo img{width:100%;height:100%;object-fit:cover;object-position:50% 0;display:block}
.photo b{font-size:clamp(100px,12vw,180px);font-weight:900;font-stretch:125%;letter-spacing:-0.06em;color:var(--on-field);text-transform:lowercase}
.photo small{position:absolute;left:18px;bottom:16px;color:var(--on-field)}
.about .body{display:grid;gap:18px;margin-top:28px;color:var(--ink-muted);max-width:54ch}
.about .body strong{color:var(--ink)}
@media (max-width:860px){.about{grid-template-columns:1fr}.photo{max-width:380px}}

/* QUOTES */
.quotes{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,4vw,48px)}
blockquote{margin:0;padding:clamp(28px,3vw,40px);background:var(--poeder-zacht);border-radius:var(--r-lg);display:grid;gap:18px;align-content:space-between}
blockquote p{font-size:clamp(22px,2.1vw,28px);font-weight:600;line-height:1.3;letter-spacing:-0.01em}
@media (max-width:760px){.quotes{grid-template-columns:1fr}}

/* FINISH / KOFFIESTOP */
.finish{background:var(--navy);color:#fff;position:relative;overflow:hidden}
.finish::before{content:"";position:absolute;inset:0 0 auto;height:28px;background:repeating-conic-gradient(#fff 0 25%,#122236 0 50%) 0 0/28px 28px;opacity:.9}
.finish .km{color:#C9DCFF}
.finish .km::before{background:#6B9BFF}
.fin-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(40px,6vw,96px);align-items:start;padding-top:28px}
.finish h2{font-size:clamp(52px,7.6vw,116px);font-weight:900;font-stretch:120%;letter-spacing:-0.05em;line-height:.88;text-transform:lowercase;color:#C9DCFF}
.finish .lead{color:#C3CEDD}
form{background:#fff;color:#0F1A33;border-radius:var(--r-lg);padding:clamp(24px,3vw,40px);display:grid;gap:18px}
.fld{display:grid;gap:8px}
label{font-size:16px;font-weight:700}
input,textarea{font:500 18px/1.4 var(--font);color:#0F1A33;background:#F3F6FA;border:1.5px solid transparent;border-radius:var(--r-md);padding:14px 16px;width:100%;transition:border-color .2s ease,background-color .2s ease}
input:focus,textarea:focus{outline:none;border-color:#1F5BFF;background:#fff}
textarea{min-height:110px;resize:vertical}
form .btn{justify-self:start;background:#1F5BFF;color:#fff}
@media (hover:hover) and (pointer:fine){form .btn:hover{background:#1848C9}}
.err{font-size:15px;color:#B42318;font-weight:600}
.err:empty{display:none}
.fine{font-size:14px;color:#4A5872}
.done{font-size:20px;line-height:1.45;font-weight:600}
@media (max-width:860px){.fin-grid{grid-template-columns:1fr}}
footer{background:var(--navy);color:#C3CEDD;border-top:1px solid rgba(255,255,255,.12);padding-block:34px;font-size:15px}
footer .wrap{display:flex;justify-content:space-between;align-items:center;gap:16px 32px;flex-wrap:wrap}

/* MOTION */
@media (prefers-reduced-motion:no-preference){
  .hero h1 > span{animation:stretch 1.5s var(--ease-io) both}
  .hero h1 > span:nth-child(2){animation-delay:.1s}
  .hero .claim,.hero .act{animation:up .9s var(--ease-out) .5s both}
  .shot .frame{animation:unveil 1.3s var(--ease-io) .2s both}
  .shot img{animation:settle 3s var(--ease-out) .2s both}
  .shot .dot{animation:pop .6s var(--ease-out) 1.3s both}
}
@keyframes stretch{from{font-stretch:62%;opacity:0;letter-spacing:-0.02em}40%{opacity:1}to{font-stretch:125%;opacity:1;letter-spacing:-0.05em}}
@keyframes up{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}}
@keyframes unveil{from{clip-path:inset(100% 0 0 0 round 12px)}to{clip-path:inset(0 0 0 0 round 12px)}}
@keyframes settle{from{transform:scale(1.12)}to{transform:none}}
@keyframes pop{from{transform:scale(.6);opacity:0}to{transform:none;opacity:1}}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes drawto{from{stroke-dashoffset:var(--len)}to{stroke-dashoffset:0}}
@keyframes ride{from{offset-distance:0%}to{offset-distance:100%}}
@supports (animation-timeline: view()){
  @media (prefers-reduced-motion:no-preference){
    .rv{animation:rv linear both;animation-timeline:view();animation-range:entry 0% cover 28%}
    .horaire .row{animation:slide linear both;animation-timeline:view();animation-range:entry 0% cover 30%}
    .pains li,blockquote{animation:rv linear both;animation-timeline:view();animation-range:entry 0% cover 30%}
    .profile{view-timeline-name:--prof}
    .profile .ridge{stroke-dasharray:var(--len);animation:drawto linear both;animation-timeline:--prof;animation-range:entry 30% cover 55%}
    .profile .rider{animation:ride linear both;animation-timeline:--prof;animation-range:entry 30% cover 55%}
    .profile .area{animation:fade linear both;animation-timeline:--prof;animation-range:entry 40% cover 55%}
    .profile .ann{animation:fade linear both;animation-timeline:--prof;animation-range:entry 45% cover 55%}
  }
}
@keyframes rv{from{opacity:0;transform:translateY(36px)}to{opacity:1;transform:none}}
@keyframes slide{from{opacity:0;transform:translateX(-40px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.admin-bar .bar{top:32px}
@media (max-width:782px){.admin-bar .bar{top:46px}}
.hp{position:absolute;left:-9999px;height:0;width:0;opacity:0}
