.timeline-filters{margin-bottom:var(--space-xl);flex-wrap:wrap;justify-content:center;gap:.4rem;display:flex}.timeline-map-wrap{margin:0 0 var(--space-xl)}.timeline-map{border:1px solid var(--border);background:var(--bg-alt);z-index:0;width:100%;height:clamp(320px,45vh,520px)}.timeline-map:focus-visible,.timeline-map.leaflet-container:focus{outline:2px solid var(--focus);outline-offset:2px}.timeline-map-hint{font-family:var(--font-sans);color:var(--ink-muted);margin:.6rem 0 0;font-size:.75rem;line-height:1.6}.timeline-map-hint strong{font-weight:var(--fw-semibold);color:var(--ink);margin-right:.15rem}.timeline-map-hint kbd{min-width:1.5rem;font-family:var(--font-sans);font-size:.7rem;font-weight:var(--fw-semibold);color:var(--ink);background:var(--surface);border:1px solid var(--border);box-shadow:0 1px 0 var(--border);text-align:center;margin:0 .08rem;padding:.05rem .35rem;line-height:1.3;display:inline-block}.timeline-map-attrib{font-family:var(--font-sans);color:var(--ink-muted);text-align:right;letter-spacing:.02em;margin:.4rem 0 0;font-size:.72rem}.timeline-map-attrib a{color:inherit;text-decoration:underline}.timeline-map-attrib a:hover{color:var(--ink)}.timeline-filter{min-height:var(--tap-target);font-family:var(--font-sans);font-size:.8rem;font-weight:var(--fw-medium);letter-spacing:.04em;color:var(--text-soft);border:1px solid var(--border);border-radius:var(--radius-pill);cursor:pointer;transition:color var(--dur-fast), border-color var(--dur-fast), background var(--dur-fast);background:0 0;padding:.45rem .9rem}.timeline-filter:hover{color:var(--accent);border-color:var(--accent)}.timeline-filter.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.timeline{max-width:52rem;padding:var(--space-md) 0;margin:0 auto;list-style:none;position:relative}.timeline:before{content:"";background:var(--border);width:1px;position:absolute;top:0;bottom:0;left:.75rem}@media (width>=768px){.timeline:before{left:50%;transform:translate(-.5px)}}.timeline-item{padding:0 0 var(--space-xl) 2.5rem;position:relative}@media (width>=768px){.timeline-item{width:50%;padding-left:0}.timeline-item:nth-child(odd){text-align:right;padding-right:3rem}.timeline-item:nth-child(2n){margin-left:50%;padding-left:3rem}}.timeline-item:before{content:"";background:var(--ink);width:.625rem;height:.625rem;box-shadow:0 0 0 3px var(--bg);border-radius:50%;position:absolute;top:.35rem;left:.5rem}@media (width>=768px){.timeline-item:nth-child(odd):before{left:auto;right:-.3125rem}.timeline-item:nth-child(2n):before{left:-.3125rem}}.timeline-year{font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--fw-bold);color:var(--heading);margin-bottom:.15rem}.timeline-date{font-family:var(--font-sans);color:var(--text-muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:var(--space-sm);font-size:.78rem}.timeline-event{font-family:var(--font-display);font-size:var(--text-md);color:var(--heading);margin-bottom:var(--space-xs);font-weight:var(--fw-semibold);line-height:1.25}.timeline-location{margin:0 0 var(--space-xs);font-family:var(--font-sans);color:var(--ink-muted);letter-spacing:.02em;align-items:center;gap:.35rem;font-size:.78rem;display:inline-flex}.timeline-location svg{flex:none;width:.85rem;height:.85rem}.timeline-desc{color:var(--text-soft);font-size:var(--text-base);line-height:1.6}.timeline-meta{align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);flex-wrap:wrap;display:flex}.timeline-category-tag{font-family:var(--font-sans);font-size:.7rem;font-weight:var(--fw-medium);color:var(--text-muted);border:1px solid var(--border);letter-spacing:.08em;text-transform:uppercase;background:0 0;padding:.15rem .55rem;display:inline-block}.timeline-read{font-family:var(--font-sans);font-size:.78rem;font-weight:var(--fw-semibold);color:var(--ink);border-bottom:1px solid var(--ink);transition:color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);padding-bottom:1px;text-decoration:none}.timeline-read:hover,.timeline-read:focus-visible{color:var(--accent-hover);border-bottom-color:var(--accent-hover)}.timeline-sources{margin-top:var(--space-xs);font-family:var(--font-sans);color:var(--ink-muted);font-size:.78rem}.timeline-sources>summary{cursor:pointer;letter-spacing:.04em;color:var(--ink-muted);border-bottom:1px dotted var(--border);align-items:center;gap:.4rem;padding:.15rem 0;list-style:none;display:inline-flex}.timeline-sources>summary::-webkit-details-marker{display:none}.timeline-sources>summary:before{content:"▸";width:.8em;color:var(--ink-muted);transition:transform var(--dur-fast) var(--ease);font-size:.7em;display:inline-block}.timeline-sources[open]>summary:before{transform:rotate(90deg)}.timeline-sources>summary:hover,.timeline-sources>summary:focus-visible{color:var(--ink);border-bottom-color:var(--ink);outline:none}.timeline-sources-label{font-weight:var(--fw-semibold);text-transform:uppercase;font-size:.68rem}.timeline-sources-count{min-width:1.25rem;height:1.25rem;font-size:.62rem;font-weight:var(--fw-bold);color:var(--ink-muted);border:1px solid var(--border);border-radius:var(--radius-pill);background:0 0;justify-content:center;align-items:center;padding:0 .35rem;line-height:1;display:inline-flex}.timeline-sources-list{color:var(--text-soft);margin:.55rem 0 0;padding:0 0 0 1.25rem;font-size:.74rem;line-height:1.5;list-style:decimal}.timeline-source{margin:0 0 .25rem}.timeline-source:last-child{margin-bottom:0}.timeline-source-link{color:var(--ink);border-bottom:1px solid var(--border);transition:color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);text-decoration:none}.timeline-source-link:hover,.timeline-source-link:focus-visible{color:var(--accent-hover);border-bottom-color:var(--accent-hover);outline:none}@media (width>=768px){.timeline-item:nth-child(odd) .timeline-sources>summary{flex-direction:row-reverse}.timeline-item:nth-child(odd) .timeline-sources-list{text-align:left;direction:ltr;max-width:100%;margin-left:auto}}.timeline-item.is-hidden{display:none}.timeline-item.is-highlighted{animation:timelineHighlight 2.4s var(--ease)}@keyframes timelineHighlight{0%{background:color-mix(in srgb, var(--focus) 18%, transparent)}to{background:0 0}}@media (prefers-reduced-motion:reduce){.timeline-item.is-highlighted{outline:2px solid var(--focus);outline-offset:4px;animation:none}}