/* LiMP redesign — живой слой анимаций для всех концептов (#1a317733).
   Включается только классом .mo на <html> (его ставит inline-скрипт в <head>,
   если нет prefers-reduced-motion и нет ?static). Без JS страница статична и полностью видна. */

@property --ry{syntax:'<length>';inherits:false;initial-value:0px}
@property --rx{syntax:'<length>';inherits:false;initial-value:0px}
@property --rs{syntax:'<number>';inherits:false;initial-value:1}
@property --fy{syntax:'<length>';inherits:false;initial-value:0px}
@property --ps{syntax:'<number>';inherits:false;initial-value:1}
@property --ny{syntax:'<length>';inherits:false;initial-value:0px}
@property --ns{syntax:'<number>';inherits:false;initial-value:1}
@property --tilt{syntax:'<angle>';inherits:false;initial-value:0deg}

.mo-pre body{opacity:0}
.mo body{transition:opacity .35s ease}

/* ---------- reveal ---------- */
.mo [data-r]{
  --e:cubic-bezier(.16,1,.3,1);--t:.9s;
  opacity:0;--ry:var(--r-y,28px);
  transition:opacity var(--t) var(--e) var(--d,0ms),--ry var(--t) var(--e) var(--d,0ms),--rx var(--t) var(--e) var(--d,0ms),--rs var(--t) var(--e) var(--d,0ms),filter var(--t) var(--e) var(--d,0ms),clip-path calc(var(--t) * 1.1) var(--e) var(--d,0ms);
}
.mo [data-r],.mo .mo-px{translate:calc(var(--rx) + var(--mx,0px)) calc(var(--ry) + var(--my,0px) + var(--fy))}
.mo [data-r].in{opacity:1;--ry:0px;--rx:0px;--rs:1}

.mo [data-r=fade]{--r-y:0px}
.mo [data-r=up-s]{--r-y:16px;--t:.6s}
.mo [data-r=blur]{filter:blur(10px);--r-y:22px}
.mo [data-r=blur].in{filter:blur(0)}
.mo [data-r=scale]{--rs:.94;--r-y:24px;scale:var(--rs)}
.mo [data-r=rise]{--r-y:90px;--rs:.94;scale:var(--rs);--t:1.3s}
.mo [data-r=spring]{--r-y:70px;--t:1.15s;--e:cubic-bezier(.34,1.45,.55,1)}
.mo [data-r=clip]{clip-path:inset(0 0 100% 0);--r-y:10px}
.mo [data-r=clip].in{clip-path:inset(0 0 -2% 0)}
.mo [data-r=left]{--r-y:0px;--rx:-60px}
.mo [data-r=right]{--r-y:0px;--rx:60px}
.mo [data-r=drop]{--r-y:-14px;rotate:-2.5deg;transition-property:opacity,--ry,rotate;transition-duration:.8s;transition-timing-function:cubic-bezier(.34,1.5,.6,1)}
.mo [data-r=drop].in{rotate:0deg}

/* ---------- split words ---------- */
.mo-w{display:inline-block;vertical-align:bottom}
.mo-split-mask .mo-w{overflow:clip;padding:.12em .03em .14em;margin:-.12em -.03em -.14em}
.mo-wi{display:inline-block;transition:translate 1.1s cubic-bezier(.16,1,.3,1) var(--wd,0ms),opacity .9s ease var(--wd,0ms),filter .9s ease var(--wd,0ms)}
.mo-split-mask:not(.mo-on) .mo-wi{translate:0 112%}
.mo-split-blur:not(.mo-on) .mo-wi{opacity:0;filter:blur(12px);translate:0 .3em}
.mo-split-up:not(.mo-on) .mo-wi{opacity:0;translate:0 .55em}

/* ---------- idle / ambient ---------- */
@keyframes mo-float{0%,100%{--fy:0px}50%{--fy:-12px}}
.mo .mo-float{animation:mo-float var(--fd,7s) ease-in-out var(--fdl,0s) infinite}
@keyframes mo-pulse{0%{box-shadow:0 0 0 0 var(--pc,rgba(255,255,255,.35))}70%,100%{box-shadow:0 0 0 14px rgba(0,0,0,0)}}

/* spotlight */
.mo-spot{isolation:isolate}
.mo-glare{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;opacity:0;transition:opacity .35s ease;
  background:radial-gradient(420px circle at var(--sx,50%) var(--sy,50%),var(--glare,rgba(255,255,255,.07)),transparent 60%)}
.mo-spot:hover>.mo-glare{opacity:1}

/* magnetic */
.mo .mo-mag{translate:var(--mx,0px) var(--my,0px);transition:translate .35s cubic-bezier(.2,.8,.2,1)}

/* scramble / counters */
.mo-num{font-variant-numeric:tabular-nums}

@media print{.mo [data-r]{opacity:1!important;filter:none!important;clip-path:none!important}.mo-pre body{opacity:1}}

/* =================== ПРЕСЕТЫ ПО РЕФЕРЕНСАМ =================== */

/* v1 · Aurora terminal (agentql): дрейф сияния, бегущая сетка, свечение карточек */
@keyframes mo-aur1{to{translate:9% -6%;scale:1.14}}
@keyframes mo-aur2{to{translate:-10% 5%;scale:.9}}
@keyframes mo-grid{to{background-position:72px 72px}}
.mo[data-mo=v1] .aurora.a1{animation:mo-aur1 14s ease-in-out infinite alternate}
.mo[data-mo=v1] .aurora.a2{animation:mo-aur2 17s ease-in-out infinite alternate}
.mo[data-mo=v1] .hero-grid{animation:mo-grid 9s linear infinite}
.mo[data-mo=v1] .mo-glare{--glare:rgba(155,120,233,.16)}

/* v2 · Blueprint (dovetail): сканирующая линия, выноски чертятся пунктиром */
.mo[data-mo=v2] .note::before{transition:scale .6s cubic-bezier(.16,1,.3,1) calc(var(--d,0ms) + 350ms);scale:0 1}
.mo[data-mo=v2] .n1::before,.mo[data-mo=v2] .n2::before{transform-origin:left}
.mo[data-mo=v2] .n3::before{transform-origin:right}
.mo[data-mo=v2] .mo-seen.note::before{scale:1 1}
.mo-scan{position:absolute;left:-10%;right:-10%;top:0;height:1px;pointer-events:none;z-index:3;
  background:linear-gradient(90deg,transparent,rgba(97,130,229,.75),transparent);box-shadow:0 0 18px 2px rgba(97,130,229,.35);animation:mo-scan 6.5s cubic-bezier(.45,0,.55,1) infinite}
@keyframes mo-scan{0%{translate:0 0;opacity:0}8%{opacity:1}92%{opacity:1}100%{translate:0 640px;opacity:0}}
.mo[data-mo=v2] .mo-glare{--glare:rgba(97,130,229,.12)}

/* v3 · Control room: индикаторы маршрутов наполняются, тумблеры щёлкают */
.mo[data-mo=v3] .meter i{transform-origin:left;scale:0 1;transition:scale 1.2s cubic-bezier(.16,1,.3,1) .35s}
.mo[data-mo=v3] .mo-seen .meter i{scale:1 1}
.mo[data-mo=v3] .route:nth-child(2) .meter i{transition-delay:.5s}
.mo[data-mo=v3] .route:nth-child(3) .meter i{transition-delay:.65s}
.mo[data-mo=v3] .tgl::after{transition:translate .5s cubic-bezier(.34,1.5,.6,1) .5s;translate:-30px 0}
.mo[data-mo=v3] .mo-seen .tgl::after{translate:0 0}
.mo[data-mo=v3] .tgl{background-color:#3a3a3a}
.mo[data-mo=v3] .mo-seen .tgl{background-color:var(--acc)}
.mo[data-mo=v3] .tgl{transition:background-color .4s ease .55s}
.mo[data-mo=v3] .mo-glare{--glare:rgba(255,255,255,.06)}

/* v4 · Observatory (basedash): мерцающие точки фактов */
@keyframes mo-twinkle{0%,100%{opacity:1;scale:1}50%{opacity:.35;scale:.7}}
.mo[data-mo=v4] .facts i{animation:mo-twinkle 2.8s ease-in-out infinite}
.mo[data-mo=v4] .facts span:nth-child(2) i{animation-delay:-.6s}
.mo[data-mo=v4] .facts span:nth-child(3) i{animation-delay:-1.2s}
.mo[data-mo=v4] .facts span:nth-child(4) i{animation-delay:-1.8s}
.mo[data-mo=v4] .facts span:nth-child(5) i{animation-delay:-2.3s}

/* v5 · Vault tags (copilot.money): метки разлетаются из центра и плавают с глубиной */
.mo[data-mo=v5] .tag{transform:translate(var(--mx,0px),var(--my,0px)) rotate(var(--r,0deg)) scale(calc(var(--s,1) * var(--ps)))}
.mo[data-mo=v5] .tags .tag{--ps:.2;opacity:0;transition:--ps 1.1s cubic-bezier(.34,1.56,.64,1) var(--d,0ms),opacity .5s ease var(--d,0ms)}
.mo[data-mo=v5] .tags .tag.t-fam{opacity:0}
.mo[data-mo=v5] .tags.mo-on .tag{--ps:1;opacity:1}
.mo[data-mo=v5] .tags.mo-on .tag.t-fam{opacity:.75}

/* v6 · Studio Dark (cap.so): капсула-меню сжимается, экраны «встают» из наклона */
.mo[data-mo=v6] .top>*{transition:box-shadow .4s ease,background-color .4s ease,max-width .5s cubic-bezier(.16,1,.3,1)}
.mo[data-mo=v6].mo-sc .top>*{box-shadow:0 14px 40px -16px rgba(0,0,0,.8),0 0 0 1px rgba(255,255,255,.08)}
.mo[data-mo=v6] .hero .lp-stage{transform:perspective(1600px) rotateX(var(--tilt)) scale(calc(1 - var(--tilt) / 260deg));transform-origin:50% 100%}
.mo[data-mo=v6] .mo-glare{--glare:rgba(97,130,229,.14)}

/* v7 · Gallery Night (Things): рамки покачиваются, при наведении выпрямляются */
.mo[data-mo=v7] .gi .lp-ph{transition:transform .7s cubic-bezier(.34,1.4,.6,1)}

/* v8 · Highlighter Night (Pirsch): маркер прокрашивает слова слева направо */
.mo[data-mo=v8] .hl{background:linear-gradient(var(--sun),var(--sun)) no-repeat 0 0/0% 100%;color:inherit;
  transition:background-size .75s cubic-bezier(.65,0,.35,1) var(--hd,.25s),color .3s ease calc(var(--hd,.25s) + .3s)}
.mo[data-mo=v8] .hl.mo-on{background-size:100% 100%;color:var(--sun-ink)}
.mo[data-mo=v8] .hl-u{background-repeat:no-repeat;background-size:0% 100%;transition:background-size .9s cubic-bezier(.65,0,.35,1) var(--hd,.2s)}
.mo[data-mo=v8] .hl-u.mo-on{background-size:100% 100%}
@keyframes mo-mint{0%{box-shadow:0 0 0 0 rgba(173,187,227,.55)}70%,100%{box-shadow:0 0 0 9px rgba(173,187,227,0)}}
.mo[data-mo=v8] .dot{animation:mo-mint 2.2s ease-out infinite}

/* v9 · Night Departure (Flighty): пуши прилетают, свечение дышит, орбиты вращаются */
.mo[data-mo=v9] .stage .note{transform:translateY(var(--ny)) rotate(var(--rot,0deg)) scale(var(--ns))}
.mo[data-mo=v9] .stage .note.mo-pending{--ny:-26px;--ns:.92;opacity:0}
.mo[data-mo=v9] .stage .note{transition:--ny .9s cubic-bezier(.34,1.45,.55,1),--ns .9s cubic-bezier(.34,1.45,.55,1),opacity .45s ease}
@keyframes mo-breathe{0%,100%{opacity:.75;scale:.94}50%{opacity:1;scale:1.06}}
@keyframes mo-orbit{to{rotate:360deg}}
.mo[data-mo=v9] .stage .glow{animation:mo-breathe 5.5s ease-in-out infinite}
.mo[data-mo=v9] .stage .ring{animation:mo-orbit 90s linear infinite}
.mo[data-mo=v9] .stage .ring.r2{animation-duration:160s;animation-direction:reverse}
@keyframes mo-live{0%,100%{opacity:1}50%{opacity:.45}}
.mo[data-mo=v9] .board .live{animation:mo-live 1.8s ease-in-out infinite}
.mo[data-mo=v9] .gate img{transition:scale 6s ease-out;scale:1.12}
.mo[data-mo=v9] .gate.mo-seen img{scale:1}

/* v10 · Ember Workspace (Superlist): гигантский заголовок поднимается из маски, «1 тап» пульсирует */
.mo[data-mo=v10] .tapline .pill{--pc:rgba(156,120,233,.45);animation:mo-pulse 2.2s ease-out 2.4s infinite}
.mo[data-mo=v10] h1 .coral .mo-wi{transition-duration:1.3s;transition-timing-function:cubic-bezier(.34,1.5,.55,1)}
.mo[data-mo=v10] .tapline .arr{stroke-dasharray:140;stroke-dashoffset:140;transition:stroke-dashoffset 1s cubic-bezier(.65,0,.35,1) 1.7s}
.mo[data-mo=v10] .tapline.mo-on .arr{stroke-dashoffset:0}
