/* Analysis motion engine. Base style is the finished state; keyframes drive the element out of its start state.
   Animations are named only while the showcase carries .is-live, so the static frame is always the result. */

.analysis-showcase{--lw-ease-out:cubic-bezier(.23,1,.32,1);--lw-ease-move:cubic-bezier(.77,0,.175,1);--lw-ease-settle:cubic-bezier(.16,1,.3,1);--lw-cycle:12000ms}

.analysis-scenes{position:relative}

/* ---- helpers: finished state ---- */
.analysis-showcase .m-enter{animation-delay:var(--at,0ms);animation-duration:var(--dur,420ms);animation-fill-mode:both}
.analysis-showcase .m-fill{padding:2px 7px;margin:0 -2px;border-radius:5px;color:var(--lw-forest);white-space:nowrap;background-color:transparent;background-image:linear-gradient(var(--lw-selected-strong),var(--lw-selected-strong));background-repeat:no-repeat;background-position:0 50%;background-size:100% 100%;-webkit-box-decoration-break:clone;box-decoration-break:clone;animation-delay:var(--at,0ms);animation-duration:var(--dur,384ms);animation-fill-mode:both}
.analysis-showcase .m-band{position:relative;overflow:hidden}
.analysis-showcase .m-band::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;background-image:linear-gradient(180deg,rgba(223,232,215,0) 0%,rgba(223,232,215,.45) 35%,rgba(223,232,215,.45) 65%,rgba(223,232,215,0) 100%);background-repeat:no-repeat;background-size:100% 30%;background-position:0 -50%;animation-delay:var(--band-at,0ms);animation-duration:var(--band-dur,900ms);animation-timing-function:linear;animation-fill-mode:both}
.analysis-showcase .m-progress{position:relative}
.analysis-showcase .m-progress::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;opacity:0;background:var(--lw-muted);transform:scaleX(1);transform-origin:left center;animation-delay:var(--line-at,0ms);animation-duration:var(--line-dur,600ms);animation-timing-function:linear;animation-fill-mode:both}
.analysis-showcase .m-draw{stroke-dasharray:1;stroke-dashoffset:0;animation-delay:var(--at,0ms);animation-duration:var(--dur,336ms);animation-fill-mode:both}
.analysis-showcase .m-sheet{animation-delay:var(--at,0ms);animation-duration:var(--dur,420ms);animation-fill-mode:both}
.analysis-showcase .m-land{animation-delay:var(--at,0ms);animation-duration:var(--dur,560ms);animation-fill-mode:both}
.analysis-showcase .m-scene{animation-duration:var(--lw-cycle);animation-timing-function:linear;animation-fill-mode:both}
.analysis-showcase .m-scene.is-scene-1,.analysis-showcase .m-scene.is-scene-2{opacity:0;visibility:hidden}
.analysis-showcase .m-current{animation-duration:var(--lw-cycle);animation-timing-function:linear;animation-fill-mode:both}
.analysis-showcase .m-carry-to{animation-duration:var(--lw-cycle);animation-timing-function:linear;animation-fill-mode:both}
.analysis-showcase .m-carry{position:absolute;top:0;left:0;z-index:2;padding:var(--carry-pad-y,2px) var(--carry-pad-x,7px);border-radius:var(--carry-radius,5px);opacity:0;background-color:transparent;font-family:var(--lw-body);font-size:30px;font-weight:600;line-height:1.2;letter-spacing:-.04em;color:var(--lw-forest);white-space:nowrap;pointer-events:none;transform-origin:left top;animation-duration:var(--lw-cycle);animation-timing-function:linear;animation-fill-mode:both}

/* ---- live: attach the names ---- */
.analysis-showcase.is-live .analysis-panel.is-live .m-enter{animation-name:lw-enter}
.analysis-showcase.is-live .analysis-panel.is-live .m-fill{animation-name:lw-fill}
.analysis-showcase.is-live .analysis-panel.is-live .m-band::after{animation-name:lw-band}
.analysis-showcase.is-live .analysis-panel.is-live .m-progress::after{animation-name:lw-progress}
.analysis-showcase.is-live .analysis-panel.is-live .m-draw{animation-name:lw-draw}
.analysis-showcase.is-live .analysis-panel.is-live .m-sheet{animation-name:lw-sheet}
.analysis-showcase.is-live .analysis-panel.is-live .m-land{animation-name:lw-land}
.analysis-showcase.is-live .analysis-panel.is-live .m-scene.is-scene-1{animation-name:lw-scene-1}
.analysis-showcase.is-live .analysis-panel.is-live .m-scene.is-scene-2{animation-name:lw-scene-2}
.analysis-showcase.is-live .analysis-panel.is-live .m-carry{animation-name:lw-carry}
.analysis-showcase.is-live .analysis-panel.is-live .m-carry-to{animation-name:lw-carry-land}
.analysis-showcase.is-live .analysis-storyline .m-current.is-step-1{animation-name:lw-step-1}
.analysis-showcase.is-live .analysis-storyline .m-current.is-step-2{animation-name:lw-step-2}
.analysis-showcase.is-live .analysis-storyline .m-current.is-step-3{animation-name:lw-step-3}

.analysis-showcase.is-paused .m-enter,.analysis-showcase.is-paused .m-fill,.analysis-showcase.is-paused .m-band::after,.analysis-showcase.is-paused .m-progress::after,.analysis-showcase.is-paused .m-draw,.analysis-showcase.is-paused .m-sheet,.analysis-showcase.is-paused .m-land,.analysis-showcase.is-paused .m-scene,.analysis-showcase.is-paused .m-current,.analysis-showcase.is-paused .m-carry,.analysis-showcase.is-paused .m-carry-to{animation-play-state:paused}

/* ---- keyframes ---- */
@keyframes lw-enter{from{opacity:0;transform:translateY(8px);animation-timing-function:var(--lw-ease-out)}}
@keyframes lw-fill{from{background-size:0% 100%;animation-timing-function:var(--lw-ease-out)}}
@keyframes lw-band{0%{opacity:0;background-position:0 -50%}6.7%{opacity:1;background-position:0 -50%}93.3%{opacity:1;background-position:0 150%}100%{opacity:0;background-position:0 150%}}
@keyframes lw-progress{0%{opacity:1;transform:scaleX(0)}52%{opacity:1;transform:scaleX(1)}60%{opacity:1;transform:scaleX(1)}100%{opacity:0;transform:scaleX(1)}}
@keyframes lw-draw{from{stroke-dashoffset:1;animation-timing-function:var(--lw-ease-move)}}
/* Back sheets start hidden behind the opaque front sheet (translateY 0, final scale) and slide
   out to their offsets. The opacity step is instantaneous and happens while the sheet is still
   fully covered by the front sheet, so no sheet is ever seen fading or standing free. */
@keyframes lw-sheet{
  0%{opacity:0;transform:translateY(0) scale(var(--sheet-s,1))}
  .01%{opacity:1;transform:translateY(0) scale(var(--sheet-s,1));animation-timing-function:var(--lw-ease-move)}
  100%{opacity:1;transform:translateY(var(--sheet-y,0px)) scale(var(--sheet-s,1))}
}
@keyframes lw-land{from{opacity:0;transform:translateY(8px);box-shadow:0 6px 14px -12px rgb(36 53 43 / .3),0 1px 2px -1px rgb(36 53 43 / .14);animation-timing-function:var(--lw-ease-settle)}}
@keyframes lw-scene-1{0%,23%{opacity:1;visibility:visible;filter:blur(0);transform:translateY(0);animation-timing-function:var(--lw-ease-out)}26%,100%{opacity:0;visibility:hidden;filter:blur(2px);transform:translateY(-6px)}}
@keyframes lw-scene-2{0%,24%{opacity:0;visibility:hidden;filter:blur(0);transform:translateY(8px);animation-timing-function:var(--lw-ease-out)}27.5%,53%{opacity:1;visibility:visible;filter:blur(0);transform:translateY(0);animation-timing-function:var(--lw-ease-out)}56%,100%{opacity:0;visibility:hidden;filter:blur(2px);transform:translateY(-6px)}}
@keyframes lw-step-1{0%,23%{color:var(--lw-forest);border-bottom-color:var(--lw-forest)}25%,100%{color:var(--lw-muted);border-bottom-color:var(--lw-line)}}
@keyframes lw-step-2{0%,23%{color:var(--lw-muted);border-bottom-color:var(--lw-line)}25%,53%{color:var(--lw-forest);border-bottom-color:var(--lw-forest)}55%,100%{color:var(--lw-muted);border-bottom-color:var(--lw-line)}}
@keyframes lw-step-3{0%,53%{color:var(--lw-muted);border-bottom-color:var(--lw-line)}55%,100%{color:var(--lw-forest);border-bottom-color:var(--lw-forest)}}
@keyframes lw-carry{
  0%,17%{opacity:0;background-color:var(--lw-selected-strong);transform:translate(var(--carry-x0,0px),var(--carry-y0,0px)) scale(var(--carry-scale,1))}
  17.8%{opacity:1;background-color:var(--lw-selected-strong);transform:translate(var(--carry-x0,0px),var(--carry-y0,0px)) scale(var(--carry-scale,1))}
  23%{opacity:1;background-color:var(--lw-selected-strong);transform:translate(var(--carry-x0,0px),var(--carry-y0,0px)) scale(var(--carry-scale,1));animation-timing-function:var(--lw-ease-move)}
  27%{opacity:1;background-color:var(--lw-selected-strong);transform:translate(var(--carry-x1,0px),var(--carry-y1,0px)) scale(var(--carry-scale,1))}
  49%{opacity:1;background-color:var(--lw-selected-strong);transform:translate(var(--carry-x1,0px),var(--carry-y1,0px)) scale(var(--carry-scale,1));animation-timing-function:var(--lw-ease-move)}
  57%{background-color:var(--lw-selected-strong)}
  57.6%{opacity:1;background-color:rgba(203,218,190,0);transform:translate(0px,0px) scale(1);animation-timing-function:step-end}
  57.61%,100%{opacity:0;background-color:rgba(203,218,190,0);transform:translate(0px,0px) scale(1)}
}
/* Handover. The comparison value keeps its space but paints nothing until the flying copy has
   landed; at 57.61% of the cycle (6913ms) the copy is switched off and the standing value on in
   the same instant, so exactly one of the two is ever visible. Both steps are step-end, so no
   frame can catch a partial state. */
@keyframes lw-carry-land{
  0%{opacity:0;animation-timing-function:step-end}
  57.61%,100%{opacity:1}
}

@media(max-width:480px){.analysis-showcase .m-carry{font-size:28px}}

@media(prefers-reduced-motion:reduce){
  .analysis-showcase .m-enter,.analysis-showcase .m-fill,.analysis-showcase .m-band,.analysis-showcase .m-band::after,.analysis-showcase .m-progress,.analysis-showcase .m-progress::after,.analysis-showcase .m-draw,.analysis-showcase .m-sheet,.analysis-showcase .m-land,.analysis-showcase .m-scene,.analysis-showcase .m-current,.analysis-showcase .m-carry,.analysis-showcase .m-carry-to{animation:none!important}
}
