.tpe-timeline{--tpe-accent:#38bdf8;--tpe-line:#cbd5e1;--tpe-card:#fff;--tpe-heading:#0f172a;--tpe-body:#475569;position:relative;padding:10px 0;font-family:inherit}
.tpe-timeline:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:3px;transform:translateX(-50%);background:var(--tpe-line)}
.tpe-entry{position:relative;width:50%;padding:0 38px;margin-bottom:45px;box-sizing:border-box}
.tpe-entry:nth-of-type(odd){margin-right:auto}.tpe-entry:nth-of-type(even){margin-left:auto}
.tpe-dot{position:absolute;top:24px;right:-9px;width:18px;height:18px;background:var(--tpe-accent);border:4px solid #fff;border-radius:50%;box-shadow:0 0 0 2px var(--tpe-accent);z-index:1;box-sizing:border-box}
.tpe-entry:nth-of-type(even) .tpe-dot{left:-9px;right:auto}
.tpe-card{overflow:hidden;background:var(--tpe-card);border-radius:16px;box-shadow:0 8px 30px rgba(15,23,42,.1)}
.tpe-image img{display:block;width:100%;height:auto;max-height:360px;object-fit:cover}
.tpe-content{padding:25px}.tpe-date{font-size:.9rem;font-weight:700;color:var(--tpe-accent);margin-bottom:8px}.tpe-title{font-size:1.4rem;line-height:1.3;color:var(--tpe-heading);margin:0 0 12px}.tpe-description{color:var(--tpe-body);line-height:1.7}.tpe-description p:last-child{margin-bottom:0}
.tpe-left:before{left:9px;transform:none}.tpe-left .tpe-entry,.tpe-left .tpe-entry:nth-of-type(even){width:100%;margin-left:0;margin-right:0;padding-left:48px;padding-right:0}.tpe-left .tpe-dot,.tpe-left .tpe-entry:nth-of-type(even) .tpe-dot{left:1px;right:auto}
@media(max-width:767px){.tpe-timeline:before{left:9px;transform:none}.tpe-timeline .tpe-entry,.tpe-timeline .tpe-entry:nth-of-type(even){width:100%;margin-left:0;margin-right:0;padding-left:38px;padding-right:0}.tpe-timeline .tpe-dot,.tpe-timeline .tpe-entry:nth-of-type(even) .tpe-dot{left:1px;right:auto}.tpe-content{padding:20px}}
/* Progressive enhancement: entries are never hidden if JavaScript or observers fail. */
@media(prefers-reduced-motion:no-preference){.tpe-animate .tpe-entry{opacity:1;transform:none;transition:transform .55s ease}.tpe-animate .tpe-entry.tpe-visible{animation:tpe-reveal .55s ease both}@keyframes tpe-reveal{from{transform:translateY(18px)}to{transform:translateY(0)}}}

/* Scroll progress sits above the neutral timeline, behind the station markers. */
.tpe-timeline.tpe-scroll-progress .tpe-progress-line{position:absolute;top:0;left:50%;width:3px;height:100%;background:var(--tpe-accent);transform:translateX(-50%) scaleY(var(--tpe-scroll-ratio,0));transform-origin:top center;pointer-events:none;z-index:1;will-change:transform}
.tpe-timeline.tpe-scroll-progress .tpe-entry{z-index:2}
.tpe-timeline.tpe-left.tpe-scroll-progress .tpe-progress-line{left:9px;transform:scaleY(var(--tpe-scroll-ratio,0))}
@media(max-width:767px){.tpe-timeline.tpe-scroll-progress .tpe-progress-line{left:9px;transform:scaleY(var(--tpe-scroll-ratio,0))}}
@media(prefers-reduced-motion:reduce){.tpe-timeline.tpe-scroll-progress .tpe-progress-line{will-change:auto}}

/* Alternate starting side without changing the underlying entry order. */
@media(min-width:768px){
.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(odd){margin-left:auto;margin-right:0}
.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(even){margin-right:auto;margin-left:0}
.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(odd) .tpe-dot{left:-9px;right:auto}
.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(even) .tpe-dot{right:-9px;left:auto}
}

/* Gallery, slide navigation and accessible fullscreen view. */
.tpe-gallery{position:relative;overflow:hidden;background:#0f172a}.tpe-slides{position:relative;aspect-ratio:16/9}.tpe-slide{position:absolute;inset:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .35s ease}.tpe-slide.is-active{opacity:1;visibility:visible;pointer-events:auto;z-index:1}.tpe-slide img{display:block;width:100%;height:100%;object-fit:cover}.tpe-enlarge{display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:zoom-in}.tpe-gallery-prev,.tpe-gallery-next{position:absolute;top:50%;transform:translateY(-50%);z-index:3;border:0;border-radius:50%;width:36px;height:36px;background:rgba(0,0,0,.55);color:white;cursor:pointer;font-size:20px;line-height:1}.tpe-gallery-prev{left:12px}.tpe-gallery-next{right:12px}.tpe-gallery-dots{position:absolute;bottom:12px;left:0;right:0;display:flex;gap:7px;justify-content:center;z-index:3}.tpe-gallery-dot{width:9px;height:9px;padding:0;border:0;border-radius:50%;background:rgba(255,255,255,.55);cursor:pointer}.tpe-gallery-dot.is-active{background:var(--tpe-accent);transform:scale(1.2)}.tpe-lightbox{position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,.94);display:flex;align-items:center;justify-content:center;padding:40px}.tpe-lightbox img{max-width:100%;max-height:100%;object-fit:contain}.tpe-lightbox-close{position:absolute;top:12px;right:20px;background:none;border:0;color:#fff;font-size:42px;cursor:pointer;line-height:1}.tpe-gallery button:focus-visible,.tpe-lightbox button:focus-visible{outline:3px solid var(--tpe-accent,#38bdf8);outline-offset:3px}@media(prefers-reduced-motion:reduce){.tpe-slide{transition:none}}

/* 1.2: optional marker icon, with no impact on legacy dot styling. */
.tpe-dot{display:flex;align-items:center;justify-content:center}
.tpe-dot i,.tpe-dot svg{font-size:11px;width:11px;height:11px;color:#fff;fill:currentColor;flex-shrink:0}
.tpe-dot:has(i),.tpe-dot:has(svg){width:27px;height:27px;right:-13.5px;top:19px;border:2px solid #fff;box-shadow:0 0 0 2px var(--tpe-accent)}
.tpe-entry:nth-of-type(even) .tpe-dot:has(i),.tpe-entry:nth-of-type(even) .tpe-dot:has(svg){left:-13.5px;right:auto}
@media(min-width:768px){.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(odd) .tpe-dot:has(i),.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(odd) .tpe-dot:has(svg){left:-13.5px;right:auto}.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(even) .tpe-dot:has(i),.tpe-alternating.tpe-start-right .tpe-entry:nth-of-type(even) .tpe-dot:has(svg){right:-13.5px;left:auto}}
.tpe-left .tpe-dot:has(i),.tpe-left .tpe-entry:nth-of-type(even) .tpe-dot:has(i),.tpe-left .tpe-dot:has(svg),.tpe-left .tpe-entry:nth-of-type(even) .tpe-dot:has(svg){left:-3.5px;right:auto}
@media(max-width:767px){.tpe-timeline .tpe-dot:has(i),.tpe-timeline .tpe-dot:has(svg),.tpe-timeline .tpe-entry:nth-of-type(even) .tpe-dot:has(i),.tpe-timeline .tpe-entry:nth-of-type(even) .tpe-dot:has(svg){left:-3.5px;right:auto}}
