.journey{--work:light-dark(#087f79,#2bc1b4);--project:light-dark(#b54e18,#ff963d);--education:light-dark(#6251c9,#a095ff);--milestone:var(--accent-text)}
.tone-work{--experience-color:var(--work)}
.tone-project{--experience-color:var(--project)}
.tone-education{--experience-color:var(--education)}
.tone-milestone{--experience-color:var(--milestone)}
.journey-legend{display:flex;flex-wrap:wrap;gap:.5rem 1.3rem;padding:0;margin:0 0 1.5rem;list-style:none;color:var(--muted);font-size:.8125rem}
.journey-legend li{display:flex;align-items:center;gap:.45rem}
.journey-legend i{display:inline-block;width:1rem;height:2px;background:var(--experience-color)}
.journey-note{font-size:.875rem;color:var(--muted);margin:0 0 1.5rem}
.journey-chart{position:relative;margin:0}
.journey-wires{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.is-laid-out .journey-wires{display:block}
.journey-entries{list-style:none;margin:0;padding:0}
.journey-entry{padding:0;margin:0 0 2rem;overflow-wrap:anywhere}
.is-laid-out .journey-entry{position:absolute;margin:0}
.journey h3{font-size:1rem;line-height:1.55;letter-spacing:-.02em;font-weight:500;color:var(--experience-color);margin:0 0 .4rem}
.journey-range{font-size:.8125rem;line-height:1.55;color:var(--muted);margin:0 0 .55rem;font-variant-numeric:tabular-nums}
.is-laid-out:not(.is-compact) .journey-range{display:none}
.is-compact .journey-entry{overflow-wrap:break-word}
.is-compact .journey-location{margin-bottom:0}
.journey-description{font-size:1rem;line-height:1.7;color:var(--muted);margin:0}
.journey-spine{fill:none;stroke:var(--line);stroke-width:1.5}
.journey-track{fill:none;stroke:var(--experience-color);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.journey-track.is-milestone,.journey-track.is-ongoing{stroke-dasharray:3 5;stroke-width:1.5}
.journey-node{fill:var(--page);stroke:var(--experience-color);stroke-width:2}
.journey-node.is-milestone{fill:var(--experience-color)}
.journey-label-guide{fill:none;stroke:var(--experience-color);stroke-width:1;stroke-dasharray:2 4;opacity:.5}
.journey-tick{font-family:Delius,ui-sans-serif,sans-serif;font-size:12px;fill:var(--muted);stroke:var(--page);stroke-width:5;paint-order:stroke;stroke-linejoin:round}
.journey-undated{list-style:none;display:grid;gap:1.5rem;margin:2rem 0 0;padding:1.5rem 0 0;border-top:1px solid var(--line)}
.journey-background{border-left:2px solid var(--experience-color);padding-left:1rem}
.journey-animate .journey-entry,.journey-animate .journey-ink{opacity:0;transition:opacity .75s ease}
.journey-animate .journey-entry{transform:translateY(12px);transition:opacity .75s ease,transform .75s cubic-bezier(.2,.65,.3,1)}
.journey-animate .journey-entry.is-visible,.journey-animate .journey-ink.is-visible{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.journey-animate .journey-entry,.journey-animate .journey-ink{opacity:1;transform:none;transition:none}}
@media print{.journey-animate .journey-entry,.journey-animate .journey-ink{opacity:1;transform:none}.journey-chart{height:auto!important}.journey-wires{display:none!important}.is-laid-out .journey-entry{position:static;width:auto!important;margin-bottom:1.5rem;text-align:left!important;break-inside:avoid}}
@media(forced-colors:active){.journey-track,.journey-node{stroke:CanvasText}.journey-tick{fill:CanvasText;stroke:Canvas}.journey-node{fill:Canvas}}

.tone-teal{--experience-color:light-dark(#087f79,#2bc1b4)}
.tone-blue{--experience-color:light-dark(#19769c,#50b8e4)}
.tone-orange{--experience-color:light-dark(#b54e18,#ff963d)}
.tone-purple{--experience-color:light-dark(#6251c9,#a095ff)}
.tone-coral{--experience-color:var(--accent-text)}
.journey-company{font-size:1.0625rem;line-height:1.5;color:var(--ink);margin:0 0 .3rem}
.journey-location{font-size:.8125rem;line-height:1.5;color:var(--muted);margin:0 0 .8rem}

.tone-gold{--experience-color:light-dark(#946b0c,#e4bb58)}
.tone-rose{--experience-color:light-dark(#a04779,#e695bf)}
.tone-olive{--experience-color:light-dark(#61782b,#afc96e)}

/* Compact education summary, independent of the experience chart's date scale. */
.education-summary{list-style:none;margin:0 0 1.5rem;padding:0;position:relative}
.education-summary::before{content:"";position:absolute;left:9px;top:12px;bottom:34px;width:1px;background:var(--line)}
.education-summary li{position:relative;display:grid;grid-template-columns:20px minmax(0,1fr);gap:12px;margin:0;padding:0 0 1rem}
.education-summary li:last-child{padding-bottom:0}
.education-marker{position:relative;width:20px;height:24px;padding:2px 0;background:var(--page);color:var(--muted)}
.education-summary h3{font-family:'Victor Mono',monospace;font-size:.875rem;line-height:1.65;font-weight:500;letter-spacing:-.025em;color:var(--ink);margin:0}
.education-summary h3 span{font-family:Delius,ui-sans-serif,sans-serif;font-size:1rem;font-weight:400;letter-spacing:0;color:var(--muted)}
.education-summary p{font-size:.8125rem;line-height:1.6;color:var(--muted);margin:.2rem 0 0}
@media(max-width:420px){.education-summary h3 span{display:block;font-size:.875rem}.education-summary::before{bottom:34px}}

.timeline-heading-row{position:relative;display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem;min-height:24px}
.timeline-heading-row h2{margin:0}
.journey-replay{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;margin:-6px 0;padding:4px 0 4px 12px;border:0;background:none;color:var(--muted);font:inherit;font-size:.8125rem;cursor:pointer;transition:color .2s}
.journey-replay svg{width:14px;height:14px}
.journey-replay:hover{color:var(--ink)}
.journey-replay:focus-visible{outline:1px solid var(--ink);outline-offset:4px;border-radius:3px}
.journey-entry{position:relative}
.journey-select{position:absolute;inset:-6px;z-index:1;width:calc(100% + 12px);border:0;border-radius:4px;background:none;color:inherit;cursor:pointer;padding:0}
.journey-select:focus-visible{outline:1px dashed var(--experience-color);outline-offset:2px}
.journey-entry h3,.journey-company,.journey-location{transition:color .1s ease-out}
.journey-ink{transition:opacity .25s}
.journey-track{transition:stroke-width .1s ease-out,filter .1s ease-out}
.journey-node{transform-box:fill-box;transform-origin:center;transition:transform .3s,fill .3s}
.journey-ink.is-highlighted .journey-track{stroke-width:3.5;filter:drop-shadow(0 0 3px var(--experience-color))}
.journey-ink.is-highlighted .journey-node{transform:scale(1.35);fill:var(--experience-color)}
.journey-entry.is-highlighted .journey-company{color:var(--experience-color)}
.journey-animate .journey-entry{transition:opacity .5s ease var(--reveal-delay,0ms),transform .6s cubic-bezier(.2,.65,.3,1) var(--reveal-delay,0ms)}
.journey-animate .journey-ink{transition:opacity .45s ease var(--reveal-delay,0ms)}
.journey.has-highlight .journey-entry.is-visible:not(.is-highlighted),.journey.has-highlight .journey-ink.is-visible:not(.is-highlighted){opacity:.38;transition-delay:0ms}
.journey .is-highlighted{transition-delay:0ms}
.journey-animate .journey-spine{transform:scaleY(0);transform-box:fill-box;transform-origin:top;opacity:0;transition:transform 1.4s cubic-bezier(.25,.6,.2,1),opacity .45s}
.journey-animate.journey-started .journey-spine{transform:scaleY(1);opacity:1}
.journey-animate .journey-tick{opacity:0;transition:opacity .6s .2s}
.journey-animate.journey-started .journey-tick{opacity:1}
@media(prefers-reduced-motion:reduce){.journey *, .journey-replay{transition:none!important;animation:none!important}.journey-animate .journey-spine{transform:none;opacity:1}.journey-animate .journey-tick{opacity:1}}
@media print{.journey-replay,.journey-select{display:none}.journey.has-highlight .journey-entry.is-visible{opacity:1}}

.journey-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke;cursor:pointer}
.journey-animate .journey-ink:not(.is-visible) .journey-hit{pointer-events:none}
.journey-animate .journey-node{opacity:0;transform:scale(.4);transition:opacity .35s var(--reveal-delay,0ms),transform .5s cubic-bezier(.2,.8,.2,1.2) var(--reveal-delay,0ms),fill .25s}
.journey-animate .journey-ink.is-visible .journey-node{opacity:1;transform:scale(1)}
.journey-animate .journey-ink.is-highlighted .journey-node{transform:scale(1.35)}

/* Hover feedback responds immediately, independently of the entrance stagger. */
.journey.has-highlight .journey-entry.is-visible,.journey.has-highlight .journey-ink.is-visible{transition:opacity .12s ease-out,transform .12s ease-out;transition-delay:0ms}
.journey-animate .journey-ink.is-highlighted .journey-node{transition:opacity .1s ease-out,transform .12s ease-out,fill .1s ease-out;transition-delay:0ms}

/* Once hovered, labels no longer reuse the scroll entrance delay on mouseleave. */
.journey .journey-entry.is-interactive{transition:opacity .08s ease-out,transform .12s ease-out;transition-delay:0ms}
.journey .journey-entry.is-interactive.is-highlighted{opacity:1;transition:none}
.journey-entry.is-highlighted h3,.journey-entry.is-highlighted .journey-company,.journey-entry.is-highlighted .journey-location{transition:none}

/* Descriptions float above the chart without moving its date-scaled entries. */
.journey-entry.is-highlighted{z-index:5}
.journey-tooltip{position:absolute;z-index:2;top:calc(100% + 3px);left:0;width:min(19rem,calc(100vw - 3rem));box-sizing:border-box;padding:14px 16px;background:var(--page);border:1px solid var(--line);border-left:2px solid var(--experience-color);border-radius:6px;box-shadow:0 6px 20px #0002;color:var(--ink);font-family:Delius,ui-sans-serif,sans-serif;font-size:.9375rem;line-height:1.65;text-align:left;cursor:auto}
.journey-tooltip.is-above{top:auto;bottom:calc(100% + 9px)}
.journey-tooltip::before{content:"";position:absolute;left:0;right:0;top:-10px;height:10px}
.journey-tooltip.is-above::before{top:auto;bottom:-10px}
.journey-tooltip[hidden]{display:none}
@media print{.journey-tooltip{display:none}}

.journey-tooltip:not([hidden]){animation:journey-tooltip-in 140ms ease-out both}
@keyframes journey-tooltip-in{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
