@font-face{font-family:Manrope;src:url('assets/sans.ttf') format('truetype');font-weight:400;font-display:swap}@font-face{font-family:Manrope;src:url('assets/sans-bold.ttf') format('truetype');font-weight:600 900;font-display:swap}@font-face{font-family:FestivalSerif;src:url('assets/serif.ttf') format('truetype');font-weight:400;font-display:swap}
:root{--forest:#173123;--deep:#10261c;--sage:#c9dfc8;--paper:#eef3eb;--warm:#e5b36b;--ochre:#915509;--ease:cubic-bezier(.16,1,.3,1)}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden;background:var(--forest);color:var(--paper);font-family:Manrope,Arial,sans-serif}button,a{font:inherit}button{border:0;background:none;color:inherit;cursor:pointer}a{color:inherit;text-underline-offset:5px}button:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:3px solid var(--warm);outline-offset:4px}button:hover,a:hover{color:var(--warm)}button:disabled{opacity:.3;cursor:default}[hidden]{display:none!important}h1,h2,p{margin:0}em{font-family:FestivalSerif,Georgia,serif;font-weight:400;color:var(--warm)}::selection{background:var(--warm);color:var(--forest)}header{height:64px;position:relative;z-index:10;display:flex;justify-content:space-between;align-items:center;padding:0 3vw;background:var(--forest);border-bottom:1px solid #eef3eb25}.brand{display:flex;gap:20px;align-items:center;font-weight:800;font-size:23px;letter-spacing:-.03em}.brand span{font-size:12px;font-weight:400;letter-spacing:.03em}.header-actions{display:flex;align-items:center;gap:22px;font-size:12px}.header-actions button{min-width:36px;min-height:40px}.header-actions a{color:#c7d5c8;font-size:11px;text-decoration:none}.header-actions svg,.map-bottom svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.5}#experience{height:calc(100% - 132px);position:relative;overflow:hidden;background:var(--sage)}#mapRegion{position:absolute;inset:0;width:100%;isolation:isolate;background:var(--sage)}#mapCanvas{height:100%;width:100%;position:relative}#festivalMap{width:100%;height:100%;display:block;overflow:hidden;max-width:none}#festivalMap text{user-select:none}#mapGlow{display:none}#intro{position:absolute;z-index:5;left:3.7%;top:5%;width:clamp(260px,27vw,405px);padding:23px 27px 22px;background:#173123f5;box-shadow:0 14px 45px #0b211a24;transition:opacity .4s,transform .65s var(--ease)}.intro-name{font-size:12px;color:#c9d9c8}h1{font-size:clamp(30px,3.2vw,49px);line-height:1.05;letter-spacing:-.035em;font-weight:600;margin-top:13px}#intro>p{font-size:13px;line-height:1.5;margin-top:16px;color:#c5d4c6}.primary{display:inline-flex;justify-content:space-between;gap:36px;padding:13px 18px;background:var(--warm);color:var(--forest);margin-top:18px;font-size:13px;min-width:200px;min-height:44px}.primary:hover{background:#f4cc91;color:var(--forest)}#intro .intro-hint{font-size:11px;color:#c4d5c4;margin-top:12px}body.chapter-open #intro{opacity:0;transform:translateY(-20px);pointer-events:none}body.chapter-open #mapRegion{width:67.5%}.map-bottom{position:absolute;bottom:18px;left:3%;right:3%;display:flex;align-items:flex-end;justify-content:space-between;gap:20px;pointer-events:none;font-size:11px}.map-bottom>span{background:#173123eb;color:var(--paper);padding:9px 12px;line-height:1.4;max-width:260px}.map-bottom button{display:flex;gap:12px;align-items:center;min-height:44px;padding:0 14px;background:#173123ed;color:var(--paper);pointer-events:auto;font-size:11px}.hotspot{cursor:pointer}.target-ring{fill:#e5b36b20;stroke:#e5b36b;stroke-width:2;opacity:.9}.target-dot{fill:var(--forest);stroke:var(--paper);stroke-width:3;transition:fill .25s}.hotspot text{fill:#fff;font-family:Manrope,Arial,sans-serif;font-size:18px;font-weight:800;pointer-events:none}.hotspot:hover .target-dot,.hotspot.selected .target-dot{fill:#915509}.hotspot:hover .target-ring,.hotspot.selected .target-ring{animation:pulse 2.7s ease-out infinite}.hotspot.selected .target-ring{stroke-width:4}.route-line{fill:none;stroke:var(--warm);stroke-width:3;stroke-linecap:round;stroke-dasharray:8 11;opacity:.95;pointer-events:none}.route-marker{fill:var(--warm);stroke:var(--forest);stroke-width:3;pointer-events:none}.stage-beam{opacity:.21;transform-origin:var(--light-origin);animation:beam var(--light-duration,12s) var(--light-delay,0s) ease-in-out infinite;pointer-events:none}
#chapter{position:absolute;right:0;top:0;bottom:0;width:32.5%;background:var(--paper);color:var(--forest);display:flex;flex-direction:column;padding:22px 26px 18px;z-index:6;box-shadow:-12px 0 45px #071c1326;animation:panel-in .65s var(--ease) both}.back{text-align:left;padding:0 0 18px;font-size:11px;color:#526954;min-height:36px}.back:hover{color:var(--ochre)}.chapter-top{display:flex;justify-content:space-between;gap:12px;padding:0 0 14px;border-bottom:1px solid #17312325;font-size:11px;color:#526954}#location{font-weight:700;letter-spacing:.04em}#chapterNumber{font-variant-numeric:tabular-nums}#chapterBody{flex:1;min-height:0;overflow:auto;padding:20px 0 10px;scrollbar-width:thin;scrollbar-color:#a6bba3 transparent}.chapter-title{font-size:clamp(29px,2.8vw,46px);line-height:1.03;font-weight:600;letter-spacing:-.035em}.chapter-title em{color:var(--ochre)}.chapter-image{height:clamp(130px,19vh,205px);width:100%;object-fit:cover;display:block;margin:19px 0 0;animation:image-in .9s var(--ease) both}.chapter-image.own{object-fit:contain;background:#d9e5d5}.chapter-caption{font-size:11px;color:#526954;line-height:1.45;margin-top:7px}.chapter-facts{margin-top:20px;line-height:1.4;font-size:clamp(16px,1.35vw,21px)}.chapter-facts p+p{margin-top:8px}.accent{color:var(--ochre);font-weight:700}.chapter-facts small{display:block;font-size:12px;color:#526954;line-height:1.5;margin-top:10px}.chapter-quote{font-family:FestivalSerif,Georgia,serif;font-size:clamp(27px,2.5vw,41px);line-height:1.08;color:var(--ochre);margin-top:20px}.reveal{animation:reveal-in .65s var(--ease) both}.chapter-navigation{display:flex;align-items:center;gap:12px;flex-shrink:0;border-top:1px solid #17312325;margin-top:10px;padding-top:12px}.chapter-navigation button{min-height:44px;min-width:44px}#prev{border:1px solid #17312345;border-radius:50%;font-size:20px}#stepLabel{font-size:11px;color:#526954;flex:1}.next{background:var(--forest);color:var(--paper);padding:0 18px;display:flex;align-items:center;gap:16px;font-size:12px}.next:hover{background:#294f37;color:var(--paper)}.team-diagram{width:100%;height:90px;margin-top:15px;overflow:visible}.team-diagram path{fill:none;stroke:#a6bba4;stroke-width:2;stroke-dasharray:250;animation:draw 1s var(--ease) both}.team-diagram circle{fill:#e5b36b;stroke:#173123;stroke-width:2}.team-diagram text{font-family:Manrope,sans-serif;font-size:11px;fill:var(--forest);font-weight:600}.scanner-display{display:flex;align-items:baseline;gap:14px;margin:16px 0 10px}.scanner-display strong{font-size:86px;letter-spacing:-.04em;line-height:1;color:var(--ochre)}.scanner-display span{font-size:14px}.crew-dots{display:flex;gap:8px;margin-top:10px}.crew-dots i{height:10px;width:10px;border-radius:50%;background:var(--ochre);transition:opacity .8s,transform .8s}.crew-dots.finished i:nth-child(n+3){opacity:.13;transform:scale(.6)}.future-step{padding:11px 0;border-bottom:1px solid #17312320}.future-step span{display:block;color:var(--ochre);font-size:11px;margin-bottom:5px}.future-step p{font-size:16px;line-height:1.35}#chapterBody[data-chapter="5"] .chapter-image{height:13vh;min-height:90px}
footer{position:absolute;bottom:0;left:0;right:0;height:68px;display:flex;align-items:center;justify-content:space-between;padding:0 3vw;border-top:1px solid #eef3eb24;gap:18px;font-size:11px;color:#c4d4c5;background:var(--forest);z-index:9}footer>span{max-width:230px;line-height:1.5}.footer-divider{padding:0 8px;color:#729378}#routeStart{font-size:12px;color:var(--warm);min-height:44px;white-space:nowrap}#routeNav{display:flex;gap:16px;align-items:center}#routeNav button{display:flex;gap:8px;align-items:center;min-height:44px;padding:0;font-size:11px;color:#c1d1c1}.route-number{height:26px;width:26px;border:1px solid #729378;border-radius:50%;display:grid;place-items:center;flex-shrink:0;font-size:11px}#routeNav button.active{color:var(--warm)}#routeNav button.active .route-number{background:var(--warm);color:var(--forest);border-color:var(--warm)}#routeNav button.visited .route-number{border-color:var(--warm)}#timing{display:block;font-size:12px;color:#526954;margin-bottom:28px}#credits{margin-top:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{background:#a7bba0}
@keyframes pulse{0%{r:28;opacity:.9}100%{r:44;opacity:0}}@keyframes beam{0%,100%{transform:rotate(var(--light-start));opacity:.18}25%{transform:rotate(var(--light-mid));opacity:.32}55%{transform:rotate(var(--light-end));opacity:.22}78%{transform:rotate(var(--light-mid));opacity:.34}}@keyframes audience{from{opacity:.7}to{opacity:1}}@keyframes panel-in{from{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes image-in{from{clip-path:inset(0 0 100%);transform:translateY(10px)}to{clip-path:inset(0);transform:translateY(0)}}@keyframes reveal-in{from{opacity:.4;transform:translateY(12px);filter:blur(4px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}@keyframes draw{from{stroke-dashoffset:250}to{stroke-dashoffset:0}}
@media(max-width:1180px){footer>span{display:none}#routeNav{gap:20px}footer{justify-content:center}#routeStart{margin-left:auto}body.chapter-open #mapRegion{width:62%}#chapter{width:38%;padding:20px 22px}.header-actions{gap:14px}.chapter-title{font-size:35px}}
@media(max-width:900px){.route-name{display:none}#routeNav{gap:15px}.route-number{width:36px;height:36px}#intro{width:305px;padding:20px 23px}h1{font-size:36px}body.chapter-open #mapRegion{width:60%}#chapter{width:40%;padding:18px}.chapter-title{font-size:30px}.chapter-image{height:17vh}.chapter-facts{font-size:16px}}
@media(max-width:700px){header{height:58px;padding:0 18px}.brand{font-size:22px;gap:12px}.brand span{font-size:11px}.header-actions{gap:8px}.header-actions>a{display:none}.header-actions button{font-size:11px;min-width:30px}#experience{height:calc(100% - 122px)}#intro{left:5%;top:4%;width:245px;padding:16px 18px;background:#173123ef}#intro .intro-name{font-size:11px}h1{font-size:29px;margin-top:10px}#intro>p{font-size:12px;margin-top:11px}.primary{margin-top:13px;min-width:178px;min-height:42px;padding:11px 14px;font-size:12px}#intro .intro-hint{display:none}#mapRegion{inset:0;width:100%}#mapCanvas{height:100%;width:100%}.map-bottom{bottom:12px;left:5%;right:5%}.map-bottom>span{display:none}.map-bottom button{margin-left:auto}body.chapter-open #mapRegion{inset:0 0 49%;width:100%}body.chapter-open #chapter{top:51%;left:0;right:0;bottom:0;width:100%;padding:12px 20px 11px;box-shadow:0 -10px 35px #071c1330}.back{font-size:11px;min-height:27px;padding-bottom:9px}.chapter-top{padding-bottom:10px;font-size:11px}#chapterBody{padding-top:14px}.chapter-title{font-size:30px}.chapter-image{height:135px;margin-top:14px}.chapter-facts{font-size:16px;margin-top:15px}.chapter-quote{font-size:29px}.chapter-navigation{padding-top:8px;margin-top:8px}.chapter-navigation button{min-height:42px}.scanner-display{margin:10px 0}.scanner-display strong{font-size:70px}#chapterBody[data-chapter="5"] .chapter-image{height:105px;min-height:0}.future-step p{font-size:16px}footer{height:64px;padding:0 16px;justify-content:center;gap:0}#routeNav{gap:8px}#routeNav button{width:44px;height:44px;justify-content:center}.route-number{width:32px;height:32px;font-size:12px}#routeStart{display:none}.map-bottom button{min-height:44px}.chapter-open .map-bottom{bottom:8px;right:4%}}
@media(max-width:700px) and (max-height:650px){#intro{top:3%;padding:13px 17px;width:235px}h1{font-size:26px}#intro>p{display:none}.primary{margin-top:13px}body.chapter-open #mapRegion{bottom:52%}body.chapter-open #chapter{top:48%}.chapter-image{height:105px}.chapter-title{font-size:27px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* The title has its own shallow rail: no artwork or destination sits beneath it. */
#intro{inset:0 0 auto;width:100%;height:112px;padding:17px 3.7%;display:grid;grid-template-columns:minmax(0,1fr) 215px;grid-template-rows:19px 1fr;column-gap:30px;align-items:center;background:var(--paper);color:var(--forest);box-shadow:none;border-bottom:1px solid #17312322}
#intro .intro-name{grid-column:1;grid-row:1;font-size:12px;color:#526954;background:none;padding:0}
#intro h1{grid-column:1;grid-row:2;margin:0;font-size:clamp(27px,3.05vw,43px);line-height:1.08}
#intro h1 br{display:none}
#intro h1 em{color:var(--ochre)}
#intro>p,#intro .intro-hint{display:none}
#intro .primary{grid-column:2;grid-row:1/3;align-self:center;margin:0;min-width:0;width:215px;justify-content:space-between}
#mapRegion{top:112px}
body.chapter-open #mapRegion{top:0}
@media(max-width:900px) and (min-width:701px){#intro{grid-template-columns:minmax(0,1fr) 180px;column-gap:20px}#intro .primary{width:180px;padding:12px 15px;font-size:12px}#intro h1{font-size:30px}}
@media(max-width:700px){#intro{height:145px;padding:13px 5%;grid-template-columns:minmax(0,1fr) 153px;grid-template-rows:18px 52px 40px;column-gap:12px;row-gap:3px}#intro .intro-name{grid-column:1/-1;grid-row:1;font-size:11px}#intro h1{grid-column:1/-1;grid-row:2;font-size:27px;line-height:1.03}#intro h1 br{display:block}#intro .primary{grid-column:1/-1;grid-row:3;justify-self:end;width:173px;min-height:39px;height:39px;padding:9px 12px;font-size:11px}#mapRegion{top:145px;bottom:0}body.chapter-open #mapRegion{top:0;bottom:49%}}
@media(max-width:700px) and (max-height:650px){#intro{height:126px;grid-template-rows:15px 45px 34px;padding-top:9px;padding-bottom:9px}#intro h1{font-size:24px}#intro .primary{height:34px;min-height:34px}#mapRegion{top:126px}body.chapter-open #mapRegion{top:0;bottom:52%}}

/* Presentation controls remain separate from private speaker notes. */
.map-bottom{justify-content:flex-end}

.speaker-tower{animation:speaker-throb 1.8s var(--speaker-phase,0s) ease-in-out infinite}.speaker-wave{fill:none;stroke:#355f47;stroke-width:2;stroke-linecap:round;pointer-events:none;transform-origin:var(--wave-origin);animation:sound-wave 1.8s ease-out infinite;opacity:0}
@keyframes speaker-throb{0%,55%,100%{filter:brightness(1)}20%{filter:brightness(1.32)}}
@keyframes sound-wave{0%,65%,100%{opacity:0;transform:scale(.92)}22%{opacity:.5}60%{opacity:0;transform:scale(1.16)}}
@media(prefers-reduced-motion:reduce){.speaker-wave{display:none}.stage-beam{opacity:.13}}

/* The route connector and moving marker pass beneath the number badges. */
.route-line{display:block}

.visitor-dance{transform-box:fill-box;transform-origin:center bottom;animation:visitor-dance var(--dance-duration,3s) var(--dance-delay,0s) ease-in-out infinite}.tree-sway{transform-origin:var(--tree-root);animation:tree-sway 7s ease-in-out infinite;pointer-events:none}
@keyframes visitor-dance{0%,100%{transform:translateY(0) rotate(-1.2deg)}45%{transform:translateY(-2.6px) rotate(1.2deg)}}
@keyframes tree-sway{0%,100%{transform:skewX(-.65deg)}50%{transform:skewX(.65deg)}}
#finaleConfetti{pointer-events:none}.confetti-piece{opacity:0;transform-box:fill-box;transform-origin:center}.festival-finale .confetti-piece{animation:confetti-fall var(--confetti-duration) var(--confetti-delay) ease-out infinite both}.festival-finale #stageLights .stage-beam{animation:finale-light 6.5s ease-in-out infinite both}.festival-finale #festivalbezoekers .visitor-dance{animation:finale-jump .72s var(--jump-delay) ease-in-out infinite}
@keyframes confetti-fall{0%{opacity:0;transform:translate(0,-20px) rotate(0deg)}12%{opacity:.9}85%{opacity:.8}100%{opacity:0;transform:translate(var(--confetti-drift),var(--confetti-fall)) rotate(var(--confetti-spin))}}
@keyframes finale-light{0%,100%{opacity:.2;transform:rotate(0deg)}18%,70%{opacity:.43;transform:rotate(0deg)}}
@keyframes finale-jump{0%,100%{transform:translateY(0)}45%{transform:translateY(-7px) rotate(2deg)}}
@media(prefers-reduced-motion:reduce){.confetti-piece{display:none}.visitor-dance,.tree-sway{transform:none!important}}

.speaker-driver{transform-box:fill-box;transform-origin:center;animation:speaker-driver 1.8s var(--speaker-phase,0s) ease-in-out infinite}
@keyframes speaker-driver{0%,55%,100%{transform:scale(1)}20%{transform:scale(1.18)}}
.dj-performer{transform-box:fill-box;transform-origin:center bottom;animation:dj-groove 8s var(--dj-delay,0s) ease-in-out infinite}.dj-arms{transform-box:fill-box;transform-origin:center;animation:dj-mix 3s var(--dj-delay,0s) ease-in-out infinite}
@keyframes dj-groove{0%,30%,48%,100%{transform:translateY(0) rotate(-2deg)}18%,62%{transform:translateY(-2px) rotate(2deg)}38%,43%{transform:translateY(-6px) rotate(1deg)}}
@keyframes dj-mix{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
@media(prefers-reduced-motion:reduce){.speaker-driver,.dj-performer,.dj-arms{transform:none!important}}

/* Reserved title rows keep the profile photograph fixed while words appear. */
.profile-title>span,.profile-title>em{display:block}.profile-title>[data-step][hidden]{display:block!important;visibility:hidden}
.step-enter{animation:step-appear .6s var(--ease) both}
@keyframes step-appear{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}

.firework-launch,.firework-burst{opacity:0;pointer-events:none}.firework-launch{stroke-dasharray:2 98;stroke-dashoffset:0}.firework-burst{transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 2px var(--fw-color))}.festival-finale .firework-launch{animation:rocket-rise 6s var(--fw-delay,0s) linear infinite}.festival-finale .firework-burst{animation:firework-bloom 6s var(--fw-delay,0s) ease-out infinite}
@keyframes rocket-rise{0%{opacity:0;stroke-dashoffset:0}6%{opacity:.8}28%{opacity:.9;stroke-dashoffset:-98}30%,100%{opacity:0;stroke-dashoffset:-100}}
@keyframes firework-bloom{0%,28%{opacity:0;transform:scale(.06)}32%{opacity:.9;transform:scale(.18)}49%{opacity:.85;transform:scale(.9)}76%{opacity:0;transform:translateY(24px) scale(1.15)}100%{opacity:0;transform:translateY(24px) scale(1.15)}}
@media(prefers-reduced-motion:reduce){#finaleFireworks{display:none!important}}
