/* ALIEN LAB · mișcare cu arc (spring)
   Curbele sunt calculate dintr-un arc amortizat (masă 1, rigiditate ω², amortizare ζ)
   și scrise ca linear(). Browserele fără linear() primesc o curbă cubic-bezier apropiată. */
:root{
  --spring-soft:linear(0, 0.0186, 0.0666, 0.1339, 0.2126, 0.2967, 0.3817, 0.4643, 0.5424, 0.6144, 0.6795, 0.7374, 0.7881, 0.8318, 0.8691, 0.9003, 0.9262, 0.9473, 0.9643, 0.9777, 0.9881, 0.9959, 1.0017, 1.0058, 1.0085, 1.0101, 1.0109, 1.0111, 1.0108, 1.0103, 1.0095, 1.0086, 1.0077, 1.0068, 1.0058, 1.005, 1.0042, 1.0035, 1.0028, 1.0023, 1.0018, 1.0014, 1.0011, 1.0008, 1.0006, 1.0004, 1.0002, 1.0001, 1);      /* ζ .82 · 700 ms · fără depășire vizibilă: apariții, panouri */
  --spring-snappy:linear(0, 0.0238, 0.0862, 0.1747, 0.2789, 0.3902, 0.5017, 0.6082, 0.7063, 0.7935, 0.8685, 0.9309, 0.9811, 1.0196, 1.0478, 1.0668, 1.0781, 1.083, 1.083, 1.0791, 1.0726, 1.0645, 1.0554, 1.046, 1.0369, 1.0283, 1.0206, 1.0138, 1.0081, 1.0034, 0.9998, 0.997, 0.9951, 0.9938, 0.9932, 0.993, 0.9932, 0.9937, 0.9943, 0.995, 0.9958, 0.9966, 0.9973, 0.998, 0.9986, 0.9991, 0.9995, 0.9999, 1);  /* ζ .62 · 550 ms · depășire mică: butoane, comutatoare */
  --spring-bouncy:linear(0, 0.0507, 0.1823, 0.3641, 0.5669, 0.7666, 0.9442, 1.0875, 1.1902, 1.2515, 1.2745, 1.2658, 1.2331, 1.1851, 1.1298, 1.0743, 1.024, 0.9826, 0.9521, 0.9332, 0.9249, 0.9259, 0.9338, 0.9464, 0.9614, 0.9767, 0.991, 1.0029, 1.0118, 1.0176, 1.0204, 1.0206, 1.0187, 1.0155, 1.0114, 1.0072, 1.0032, 0.9998, 0.9971, 0.9954, 0.9945, 0.9943, 0.9947, 0.9956, 0.9966, 0.9978, 0.9989, 0.9999, 1);  /* ζ .38 · 1000 ms · depășire clară: picături, sticker, punctul lui I */
  --spring-soft-d:700ms;--spring-snappy-d:550ms;--spring-bouncy-d:1000ms;
}
@supports not (transition-timing-function:linear(0,1)){
  :root{--spring-soft:cubic-bezier(.22,1,.36,1);--spring-snappy:cubic-bezier(.34,1.4,.64,1);--spring-bouncy:cubic-bezier(.34,1.8,.64,1)}
}

/* picăturile din A și bucata de sus a lui I cad cu arc, o singură dată, când numele intră în ecran */
.al-drop{transform-box:fill-box;transform-origin:50% 100%;animation:al-drop 900ms cubic-bezier(.3,0,.2,1) 260ms both;animation-play-state:var(--drop-state,paused)}
.al-idot{transform-box:fill-box;transform-origin:50% 100%;animation:al-idot 1000ms cubic-bezier(.3,0,.2,1) 60ms both;animation-play-state:var(--drop-state,paused)}
.drops-on{--drop-state:running}
/* arcul e scris în cadre cu amplitudine mică: picătura nu trece prin linia de bază, bucata lui I nu intră în tija literei */
@keyframes al-drop{0%{transform:translateY(-140px);opacity:0}12%{opacity:1}55%{transform:translateY(0)}72%{transform:translateY(-5px)}86%{transform:translateY(1px)}100%{transform:none;opacity:1}}
@keyframes al-idot{0%{transform:translateY(-220px);opacity:0}10%{opacity:1}55%{transform:translateY(0)}70%{transform:translateY(-6px)}85%{transform:translateY(1px)}100%{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.al-drop,.al-idot{animation:none}}
html:not(.js) .al-drop,html:not(.js) .al-idot{animation:none}
@media print{.al-drop,.al-idot{animation:none!important}}
@media (prefers-reduced-motion:reduce){:root{--spring-soft-d:1ms;--spring-snappy-d:1ms;--spring-bouncy-d:1ms}}

/* ───────── ecranul de început: povestea logo-ului, doar CSS ───────── */
/* ascuns implicit: apare doar dacă scriptul din <head> a decis că e prima vizită; plasă de siguranță CSS la 4 s */
.al-intro{display:none}
html.al-intro-on{overflow:hidden}
html.al-intro-on .al-intro{position:fixed;inset:0;z-index:1000;display:grid;animation:al-intro-failsafe 0s linear calc(var(--k) * 4s) forwards;place-items:center;background:var(--intro-bg,#0B0C0D);color:var(--intro-fg,#F1F2F0);transition:opacity 420ms ease-in}
html.al-intro-on .al-intro.is-out{opacity:0;pointer-events:none}
.al-intro__mark{width:min(34vmin,220px);height:auto;overflow:visible;will-change:transform}
/* timpii depind de --k: 1 normal; html.al-slow îl face 1,8 (după ecranul lui Val) */
.al-intro{--k:1}
html.al-slow .al-intro{--k:1.8}
.al-intro__ring{fill:none;stroke:currentColor;stroke-width:11.25;stroke-dasharray:100;stroke-dashoffset:100;transform:rotate(-90deg);transform-origin:50px 50px;animation:in-ring calc(var(--k) * 900ms) cubic-bezier(.65,0,.35,1) calc(var(--k) * 120ms) forwards}
/* laptele: jet mai gros sus, subțiat la cădere, care se leagănă ușor; coada cade și ea în ceașcă */
.al-intro__pour{transform-box:fill-box;transform-origin:50% 0;animation:in-sway calc(var(--k) * 260ms) ease-in-out calc(var(--k) * 820ms) 4 alternate both}
.al-intro__stream{fill:currentColor;transform-box:fill-box;transform-origin:50% 0;transform:scaleY(0);animation:in-pour calc(var(--k) * 1150ms) cubic-bezier(.45,0,.2,1) calc(var(--k) * 820ms) forwards}
/* laptele se întinde în ceașcă și face o undă, apoi lasă loc frunzei */
.al-intro__fill{fill:currentColor;opacity:0;transform-box:fill-box;transform-origin:50% 50%;transform:scale(0);animation:in-fill calc(var(--k) * 1500ms) cubic-bezier(.2,.7,.2,1) calc(var(--k) * 1150ms) forwards}
.al-intro__ripple{fill:none;stroke:currentColor;stroke-width:1.2;opacity:0;transform-box:fill-box;transform-origin:50% 50%;animation:in-ripple calc(var(--k) * 900ms) ease-out calc(var(--k) * 1250ms) forwards}
.al-intro__drops circle{fill:currentColor;opacity:0;animation:in-drop calc(var(--k) * 560ms) cubic-bezier(.2,.6,.4,1) calc(var(--k) * 1200ms) forwards}
.al-intro__leaf{fill:currentColor;transform-box:fill-box;transform-origin:50% 50%;transform:scale(0);animation:in-leaf calc(var(--k) * var(--spring-bouncy-d)) var(--spring-bouncy) calc(var(--k) * 1500ms) forwards}
.al-intro__tilt{animation:in-tilt calc(var(--k) * var(--spring-snappy-d)) var(--spring-snappy) calc(var(--k) * 2000ms) both}
.al-intro__bar{position:absolute;left:50%;bottom:max(48px,8vh);width:120px;height:2px;margin-left:-60px;border-radius:2px;background:rgba(255,255,255,.14);overflow:hidden}
.al-intro__bar i{display:block;height:100%;background:currentColor;transform-origin:0 50%;transform:scaleX(var(--p,.08));transition:transform 400ms var(--spring-soft)}
@keyframes in-ring{to{stroke-dashoffset:0}}
@keyframes in-pour{0%{transform-origin:50% 0;transform:scaleY(0)}55%{transform-origin:50% 0;transform:scaleY(1)}56%{transform-origin:50% 100%;transform:scaleY(1)}100%{transform-origin:50% 100%;transform:scaleY(0)}}
@keyframes in-sway{from{transform:skewX(-1.6deg)}to{transform:skewX(1.6deg)}}
@keyframes in-fill{0%{opacity:.28;transform:scale(0)}55%{opacity:.28;transform:scale(1)}100%{opacity:0;transform:scale(1)}}
@keyframes in-ripple{0%{opacity:.7;transform:scale(.4)}100%{opacity:0;transform:scale(2.6)}}
@keyframes in-drop{0%{opacity:1;transform:translate(0,0)}60%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy))}}
@keyframes in-leaf{to{transform:scale(1)}}
@keyframes in-tilt{from{transform:rotate(0)}to{transform:rotate(-28deg)}}
/* logo-ul din antet stă ascuns cât timp semnul zboară spre el */
html.al-intro-on .al-intro-target{opacity:0;animation:al-intro-failsafe-t 0s linear 4s forwards}
html.al-slow.al-intro-on .al-intro-target{animation-delay:7.2s}
@keyframes al-intro-failsafe{to{opacity:0;visibility:hidden;pointer-events:none}}
@keyframes al-intro-failsafe-t{to{opacity:1}}
.al-intro-target{transition:opacity 220ms ease-out}
@media (prefers-reduced-motion:reduce){
  .al-intro__ring,.al-intro__stream,.al-intro__pour,.al-intro__fill,.al-intro__ripple,.al-intro__drops circle,.al-intro__leaf,.al-intro__tilt{animation:none}
  .al-intro__ring{stroke-dashoffset:0}.al-intro__leaf{transform:none}.al-intro__tilt{transform:rotate(-28deg)}
}
