/* Generált fájl (generalo.js): a jóváhagyott kezelés-vizuálok stílusa. Ne szerkeszd kézzel. */
/* Lotus Body kezelésikonok a célválasztó csempéihez (.pk-ico.ik-tile). Lásd JEGYZET.md. */
.pk-ico.ik-tile{background:radial-gradient(circle at 50% 42%,#EBB95A2e,#EBB95A0a 66%,#EBB95A00),#0000001a;box-shadow:inset 0 0 0 1px #EBB95A29}
.ik{display:block;width:100%;height:100%;overflow:visible}
.ik [class]{transform-box:fill-box;transform-origin:center}
.ik-h{stroke-width:1;opacity:.55}
.ik-fl,.ik-dr,.ik-cr{fill:url(#ik-f)}
.ik-cr{stroke:none}
.ik-gw{fill:url(#ik-w);stroke:none}
.ik-g,.ik-c{fill:#F5D27E;stroke:none}
/* HIEMT: rostok összehúzódnak, mezőívek lüktetnek; állókép: a csúcs */
.ik-hiemt .ik-mu{transform:scale(.84,1.22)}
.ik.ik-hiemt .ik-mu{animation:ik-mu 3s ease-in-out infinite}
.ik.ik-hiemt .ik-ar{animation:ik-ar 3s ease-in-out infinite}
@keyframes ik-mu{0%,62%,100%{transform:none}20%,40%{transform:scale(.84,1.22)}}
@keyframes ik-ar{0%,62%,100%{opacity:.35;transform:translateY(1.2px)}20%,40%{opacity:1;transform:none}}
/* 6D: fény középről kifelé; állókép: belső párnák égnek */
.ik-sixd .ik-d1{opacity:.9}.ik-sixd .ik-d2{opacity:.5}.ik-sixd .ik-d3{opacity:.28}
.ik.ik-sixd .ik-g{animation:ik-6 3.6s ease-in-out infinite}
.ik.ik-sixd .ik-d2{animation-delay:.4s}.ik.ik-sixd .ik-d3{animation-delay:.8s}
@keyframes ik-6{0%,100%{opacity:.16}32%{opacity:.95}64%{opacity:.3}}
/* Monosculpt: egyenletes melegkörök */
.ik-mono .ik-hd{fill:#2B2A2C}
.ik-mono .ik-rg{stroke-width:1;opacity:.5;transform:scale(1.3)}
.ik-mono .ik-rg2{opacity:.22;transform:scale(1.8)}
.ik.ik-mono .ik-rg{animation:ik-rg 2.5s cubic-bezier(.3,.5,.5,1) infinite}
.ik.ik-mono .ik-rg2{animation-delay:-1.25s}
.ik.ik-mono .ik-gw{animation:ik-gw 2.5s ease-in-out infinite}
@keyframes ik-rg{from{transform:scale(.75);opacity:.9}to{transform:scale(2);opacity:0}}
@keyframes ik-gw{0%,100%{opacity:.5}50%{opacity:1}}
/* Nyirok: kamrák a bokától a csípőig telnek; állókép: a hullám közepe */
.ik-nyirok .ik-d0{opacity:.18}.ik-nyirok .ik-d1{opacity:.3}.ik-nyirok .ik-d2{opacity:.6}
.ik-nyirok .ik-d3{opacity:.85}.ik-nyirok .ik-d4{opacity:.4}.ik-nyirok .ik-d5{opacity:.18}
.ik.ik-nyirok .ik-c{animation:ik-ny 3.6s ease-in-out infinite}
.ik.ik-nyirok .ik-d1{animation-delay:.3s}.ik.ik-nyirok .ik-d2{animation-delay:.6s}.ik.ik-nyirok .ik-d3{animation-delay:.9s}
.ik.ik-nyirok .ik-d4{animation-delay:1.2s}.ik.ik-nyirok .ik-d5{animation-delay:1.5s}
@keyframes ik-ny{0%,100%{opacity:.16}14%{opacity:.85}36%{opacity:.18}}
/* Body Roll: gyöngysorok felfelé fordulnak, fénysáv lüktet */
.ik-roll .ik-rl{stroke:#EBB95A;stroke-width:2.1;stroke-dasharray:0 3.2}
.ik-roll .ik-b2{stroke-dashoffset:1.6}
.ik-roll .ik-sh{fill:url(#ik-y);stroke:none}
.ik-roll .ik-bd{stroke:#FFF3D6;stroke-width:1;opacity:.5}
.ik.ik-roll .ik-rl{animation:ik-rl 3.2s linear infinite}
.ik.ik-roll .ik-bd{animation:ik-gw 3.2s ease-in-out infinite}
@keyframes ik-rl{to{transform:translateY(-8px)}}
/* Silhouette: csepp a krémbe, gyűrű */
.ik-silh .ik-rp{stroke-width:.9;opacity:.6;transform:scale(1.4)}
.ik.ik-silh .ik-dr{animation:ik-dr 3.6s ease-in-out infinite}
.ik.ik-silh .ik-rp{animation:ik-rs 3.6s ease-out infinite}
@keyframes ik-dr{0%{opacity:0;transform:translateY(-2px)}14%,42%{opacity:1;transform:none}64%{opacity:1;transform:translateY(12px) scale(.9,1.1)}70%,100%{opacity:0;transform:translateY(13px) scale(.6)}}
@keyframes ik-rs{0%,64%{opacity:0;transform:scale(.3)}70%{opacity:.9}100%{opacity:0;transform:scale(2)}}
/* Olajos thai: lótuszfény lélegzik, gyűrűk az olajon */
.ik-thai .ik-rp{stroke-width:.9;opacity:.45;transform:scale(1.3)}
.ik-thai .ik-rp2{opacity:.2;transform:scale(1.7)}
.ik.ik-thai .ik-gw{animation:ik-gw 4s ease-in-out infinite}
.ik.ik-thai .ik-rp{animation:ik-rt 4s ease-out infinite}
.ik.ik-thai .ik-rp2{animation-delay:-2s}
@keyframes ik-rt{from{opacity:.8;transform:scale(.85)}to{opacity:0;transform:scale(1.85)}}
/* Intimpad: mezőívek felerősödnek, az ív megemelkedik; állókép: csúcs */
.ik-intim .ik-ar2{transform-box:view-box;transform-origin:24px 30px}
.ik.ik-intim .ik-ar2{animation:ik-ai 3.4s ease-in-out infinite}
.ik.ik-intim .ik-hm{animation:ik-hm 3.4s ease-in-out infinite}
@keyframes ik-ai{0%,64%,100%{opacity:.4;transform:scaleY(.8)}24%,42%{opacity:1;transform:none}}
@keyframes ik-hm{0%,64%,100%{transform:translateY(1.8px)}24%,42%{transform:none}}
/* Wentong: hőfront a talptól felfelé, hőfodrok */
.ik-wentong .ik-ht{stroke-width:1.2;opacity:.85}
.ik-wentong .ik-ht2{opacity:.45}
.ik-wentong .ik-hf{fill:url(#ik-w);stroke:none;opacity:.9;transform:scaleX(.85)}
.ik.ik-wentong .ik-ht{animation:ik-ht 3.6s ease-out infinite}
.ik.ik-wentong .ik-ht2{animation-delay:-1.8s}
.ik.ik-wentong .ik-hf{animation:ik-hf 3.6s ease-in-out infinite}
.ik.ik-wentong .ik-gw{animation:ik-gw 3.6s ease-in-out infinite}
@keyframes ik-ht{0%{opacity:0;transform:translateY(4px)}40%{opacity:.9}100%{opacity:0;transform:translateY(-6px)}}
@keyframes ik-hf{0%{opacity:0;transform:translateY(6px) scaleX(.9)}22%{opacity:1}80%{opacity:.5}100%{opacity:0;transform:translateY(-18px) scaleX(.85)}}
/* mozgás nélkül: megkomponált állókép */
@media (prefers-reduced-motion:reduce){.ik *{animation:none!important}}
.vis-static .ik *{animation:none!important}

/* HIEMT – közeli oldalnézet: fekvő alak hasa, csípője, combja; 2 fej a hason, 2 a combokon.
   7 s-os ciklus: 3 erős, ritmikus összehúzódás (gyors feszülés, tartás, elengedés), majd pihenő.
   Az alapértékek adják az állóképet (az összehúzódás csúcsa). */
.vis-hiemt { position: absolute; inset: 0; }
.vis-hiemt svg { display: block; width: 100%; height: 100%; overflow: visible;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.vis-hiemt .hiemt-m, .vis-hiemt .hiemt-r, .vis-hiemt .hiemt-e { transform-box: fill-box; transform-origin: center; }

/* izomköteg: rövidül, kivastagodik, a rostok csíkozása sűrűsödik és felfénylik */
.vis-hiemt .hiemt-m { transform: scale(.88, 1.2); animation: hiemt-m 7s cubic-bezier(.3,0,.2,1) -.5s infinite; }
.vis-hiemt .hiemt-b { stroke-opacity: 1; animation: hiemt-b 7s ease-out -.5s infinite; }
.vis-hiemt .hiemt-gl { opacity: 1; animation: hiemt-gl 7s ease-in-out -.5s infinite; }
.vis-hiemt .hiemt-h { opacity: .5; animation: hiemt-h 7s ease-out -.5s infinite; }
.vis-hiemt .hiemt-u { stroke-opacity: 1; fill-opacity: 1; animation: hiemt-u 7s ease-out -.5s infinite; }

/* energialöket a fejből a szövetbe, és ütemenként egy-egy mezőgyűrű */
.vis-hiemt .hiemt-e { transform: translateY(10px); opacity: .7; animation: hiemt-e 7s cubic-bezier(.2,.6,.4,1) -.5s infinite; }
.vis-hiemt .hiemt-r { transform: scale(1.2); opacity: .7; animation: hiemt-r 7s cubic-bezier(.2,.6,.35,1) -.5s infinite; }
.vis-hiemt .hiemt-r2 { transform: scale(1.6); opacity: .38; animation-delay: -5.9s; }
.vis-hiemt .hiemt-r3 { transform: scale(1.95); opacity: .15; animation-delay: -4.3s; }

/* fénypont fut le a kábeleken, minden ütem kezdetére a fejhez ér */
.vis-hiemt .hiemt-p { stroke-dashoffset: -14; opacity: .9; animation: hiemt-p 7s linear -.5s infinite; }
.vis-hiemt .hiemt-gm { stroke-dashoffset: -40; opacity: .6; animation: hiemt-gm 11s ease-in-out -6s infinite; }

@keyframes hiemt-m {
  0%, 20%, 22.86%, 42.86%, 45.71%, 65.71%, 100% { transform: scale(1, 1); }
  5%, 27.86%, 50.71% { transform: scale(.88, 1.2); }
  12.86%, 35.71%, 58.57% { transform: scale(.89, 1.17); }
}
@keyframes hiemt-b {
  0%, 20%, 22.86%, 42.86%, 45.71%, 65.71%, 100% { stroke-opacity: .06; }
  5%, 27.86%, 50.71% { stroke-opacity: 1; }
  12.86%, 35.71%, 58.57% { stroke-opacity: .8; }
}
@keyframes hiemt-h {
  0%, 20%, 22.86%, 42.86%, 45.71%, 65.71%, 100% { opacity: 0; }
  4%, 26.86%, 49.71% { opacity: .7; }
  12.86%, 35.71%, 58.57% { opacity: .35; }
}
@keyframes hiemt-u {
  0%, 20%, 22.86%, 42.86%, 45.71%, 65.71%, 100% { stroke-opacity: .35; fill-opacity: .1; }
  2%, 24.86%, 47.71% { stroke-opacity: 1; fill-opacity: 1; }
  12.86%, 35.71%, 58.57% { stroke-opacity: .8; fill-opacity: .55; }
}
@keyframes hiemt-gl { 0%, 100% { opacity: .2; } 6%, 56% { opacity: 1; } 72% { opacity: .3; } }
@keyframes hiemt-e {
  0%, 22.86%, 45.71% { transform: translateY(-2px); opacity: 0; }
  1.5%, 24.36%, 47.21% { opacity: 1; }
  11%, 33.86%, 56.71%, 100% { transform: translateY(26px); opacity: 0; }
}
@keyframes hiemt-r { 0% { transform: scale(.8); opacity: 0; } 1.5% { opacity: .95; } 19%, 100% { transform: scale(2); opacity: 0; } }
@keyframes hiemt-p {
  0% { stroke-dashoffset: 0; opacity: 1; } 3% { stroke-dashoffset: 0; opacity: 0; }
  17.86% { stroke-dashoffset: -95; opacity: 0; } 18.4% { opacity: 1; } 22.86% { stroke-dashoffset: 0; opacity: 1; } 25.86% { stroke-dashoffset: 0; opacity: 0; }
  40.71% { stroke-dashoffset: -95; opacity: 0; } 41.3% { opacity: 1; } 45.71% { stroke-dashoffset: 0; opacity: 1; } 48.71% { stroke-dashoffset: 0; opacity: 0; }
  95% { stroke-dashoffset: -95; opacity: 0; } 95.6% { opacity: 1; } 100% { stroke-dashoffset: 0; opacity: 1; }
}
@keyframes hiemt-gm { 0% { stroke-dashoffset: 6; opacity: 0; } 8% { opacity: .7; } 55% { stroke-dashoffset: -100; opacity: .7; } 60%, 100% { stroke-dashoffset: -100; opacity: 0; } }

/* Mozgás nélkül: a megkomponált állókép (a fenti alapértékek) */
@media (prefers-reduced-motion: reduce) { .vis-hiemt * { animation: none !important; } }
.vis-static .vis-hiemt * { animation: none !important; }

/* HIEMT Intimpad – ülőpárna, ritmikus mező: összehúzódás (~3,4 s) → elernyedés (~4,6 s), 8 s-os ciklus */
.vis-hiemt-intimpad { position: absolute; inset: 0; }
.vis-hiemt-intimpad svg { display: block; width: 100%; height: 100%; overflow: visible; }
.vis-hiemt-intimpad .fld, .vis-hiemt-intimpad .ham, .vis-hiemt-intimpad .rp,
.vis-hiemt-intimpad .gl circle, .vis-hiemt-intimpad .nL, .vis-hiemt-intimpad .nR { transform-box: view-box; }

/* mezővonalak: összehúzódáskor feszesebbre és magasabbra emelkednek */
.vis-hiemt-intimpad .fld { transform-origin: 145px 130px; animation: hiemt-intimpad-fld 8s ease-in-out infinite; }
.vis-hiemt-intimpad .ds { animation: hiemt-intimpad-ds 8s ease-in-out infinite; }
.vis-hiemt-intimpad .ds path { animation: hiemt-intimpad-flow 2s linear infinite; }
.vis-hiemt-intimpad .ds .d1 { animation-duration: 1.7s; }
.vis-hiemt-intimpad .ds .d2 { animation-duration: 2.1s; animation-delay: -.6s; }
.vis-hiemt-intimpad .ds .d3 { animation-duration: 2.5s; animation-delay: -1.3s; }
.vis-hiemt-intimpad .ds .d4 { animation-duration: 2.9s; animation-delay: -2s; }

/* tekercs, felszíni hullámok, padlófény */
.vis-hiemt-intimpad .coil { animation: hiemt-intimpad-coil 8s ease-in-out infinite; }
.vis-hiemt-intimpad .fg { animation: hiemt-intimpad-fg 8s ease-in-out infinite; }
.vis-hiemt-intimpad .rp { opacity: 0; transform-origin: 145px 133px; animation: hiemt-intimpad-rp 8s cubic-bezier(.25,.6,.35,1) infinite both; }
.vis-hiemt-intimpad .rp2 { animation-delay: .7s; }
.vis-hiemt-intimpad .rp3 { animation-delay: 1.4s; }

/* felszálló fénypontok */
.vis-hiemt-intimpad .gl circle { opacity: 0; animation: hiemt-intimpad-gl 8s ease-out infinite both; }
.vis-hiemt-intimpad .gl .g1 { animation-delay: .3s; }
.vis-hiemt-intimpad .gl .g2 { animation-delay: .7s; }
.vis-hiemt-intimpad .gl .g3 { animation-delay: 1.1s; }
.vis-hiemt-intimpad .gl .g4 { animation-delay: 1.5s; }
.vis-hiemt-intimpad .gl .g5 { animation-delay: 1.9s; }

/* a „függőágy” ív: megemelkedik és megfeszül, majd elenged */
.vis-hiemt-intimpad .ham { transform-origin: 145px 44px; animation: hiemt-intimpad-ham 8s ease-in-out infinite; }
.vis-hiemt-intimpad .hg { animation: hiemt-intimpad-hg 8s ease-in-out infinite; }
.vis-hiemt-intimpad .nL { animation: hiemt-intimpad-nl 8s ease-in-out infinite; }
.vis-hiemt-intimpad .nR { animation: hiemt-intimpad-nr 8s ease-in-out infinite; }
.vis-hiemt-intimpad .sw { animation: hiemt-intimpad-sw 8s ease-in-out infinite; }

@keyframes hiemt-intimpad-fld { 0%, 100% { transform: scale(1, .9); opacity: .6; } 12%, 42% { transform: scale(.94, 1.12); opacity: 1; } 58% { transform: scale(1, .9); opacity: .6; } }
@keyframes hiemt-intimpad-ds { 0%, 100% { opacity: .1; } 8%, 40% { opacity: 1; } 52% { opacity: .1; } }
@keyframes hiemt-intimpad-flow { from { stroke-dashoffset: 12; } to { stroke-dashoffset: -102; } }
@keyframes hiemt-intimpad-coil { 0%, 100% { opacity: .45; } 10%, 42% { opacity: 1; } 56% { opacity: .45; } }
@keyframes hiemt-intimpad-fg { 0%, 100% { opacity: .35; } 12%, 42% { opacity: 1; } 60% { opacity: .35; } }
@keyframes hiemt-intimpad-rp { 0% { transform: scale(.25); opacity: 0; } 3% { opacity: .85; } 20%, 100% { transform: scale(1); opacity: 0; } }
@keyframes hiemt-intimpad-gl { 0% { transform: translateY(0); opacity: 0; } 5% { opacity: .9; } 26%, 100% { transform: translateY(-62px); opacity: 0; } }
@keyframes hiemt-intimpad-ham { 0%, 100% { transform: none; } 13%, 42% { transform: translate(0, -9px) scale(.94, .58); } 60% { transform: none; } }
@keyframes hiemt-intimpad-hg { 0%, 100% { opacity: .25; } 13%, 42% { opacity: 1; } 60% { opacity: .25; } }
@keyframes hiemt-intimpad-nl { 0%, 100% { transform: none; } 13%, 42% { transform: translate(2.3px, -9px); } 60% { transform: none; } }
@keyframes hiemt-intimpad-nr { 0%, 100% { transform: none; } 13%, 42% { transform: translate(-2.3px, -9px); } 60% { transform: none; } }
@keyframes hiemt-intimpad-sw { 0%, 15% { stroke-dashoffset: 16; opacity: 0; } 18% { opacity: 1; } 36% { opacity: 1; } 40%, 100% { stroke-dashoffset: -102; opacity: 0; } }

/* Állókép: az összehúzódás csúcsa – megemelt, feszes ív, emelkedő mező, két hullám a párnán */
@media (prefers-reduced-motion: reduce) {
  .vis-hiemt-intimpad * { animation: none !important; }
  .vis-hiemt-intimpad .fld { transform: scale(.94, 1.12); opacity: 1; }
  .vis-hiemt-intimpad .ham { transform: translate(0, -9px) scale(.94, .58); }
  .vis-hiemt-intimpad .nL { transform: translate(2.3px, -9px); }
  .vis-hiemt-intimpad .nR { transform: translate(-2.3px, -9px); }
  .vis-hiemt-intimpad .sw { stroke-dashoffset: -46; opacity: .85; }
  .vis-hiemt-intimpad .ds .d1 { stroke-dashoffset: -52; }
  .vis-hiemt-intimpad .ds .d2 { stroke-dashoffset: -34; }
  .vis-hiemt-intimpad .ds .d3 { stroke-dashoffset: -60; }
  .vis-hiemt-intimpad .ds .d4 { stroke-dashoffset: -40; }
  .vis-hiemt-intimpad .rp1 { transform: scale(.5); opacity: .5; }
  .vis-hiemt-intimpad .rp2 { transform: scale(.82); opacity: .22; }
  .vis-hiemt-intimpad .gl .g1 { transform: translateY(-18px); opacity: .9; }
  .vis-hiemt-intimpad .gl .g2 { transform: translateY(-40px); opacity: .55; }
  .vis-hiemt-intimpad .gl .g3 { transform: translateY(-7px); opacity: .8; }
  .vis-hiemt-intimpad .gl .g4 { transform: translateY(-30px); opacity: .5; }
}
.vis-static .vis-hiemt-intimpad * { animation: none !important; }
.vis-static .vis-hiemt-intimpad .fld { transform: scale(.94, 1.12); opacity: 1; }
.vis-static .vis-hiemt-intimpad .ham { transform: translate(0, -9px) scale(.94, .58); }
.vis-static .vis-hiemt-intimpad .nL { transform: translate(2.3px, -9px); }
.vis-static .vis-hiemt-intimpad .nR { transform: translate(-2.3px, -9px); }
.vis-static .vis-hiemt-intimpad .sw { stroke-dashoffset: -46; opacity: .85; }
.vis-static .vis-hiemt-intimpad .ds .d1 { stroke-dashoffset: -52; }
.vis-static .vis-hiemt-intimpad .ds .d2 { stroke-dashoffset: -34; }
.vis-static .vis-hiemt-intimpad .ds .d3 { stroke-dashoffset: -60; }
.vis-static .vis-hiemt-intimpad .ds .d4 { stroke-dashoffset: -40; }
.vis-static .vis-hiemt-intimpad .rp1 { transform: scale(.5); opacity: .5; }
.vis-static .vis-hiemt-intimpad .rp2 { transform: scale(.82); opacity: .22; }
.vis-static .vis-hiemt-intimpad .gl .g1 { transform: translateY(-18px); opacity: .9; }
.vis-static .vis-hiemt-intimpad .gl .g2 { transform: translateY(-40px); opacity: .55; }
.vis-static .vis-hiemt-intimpad .gl .g3 { transform: translateY(-7px); opacity: .8; }
.vis-static .vis-hiemt-intimpad .gl .g4 { transform: translateY(-30px); opacity: .5; }

/* 6D lipolézer – 8 nagy + 4 kisebb kezelőpárna, középről kifelé lassan lélegző fénnyel */
.vis-6d-lipolezer { position: absolute; inset: 0; }
.vis-6d-lipolezer svg { display: block; width: 100%; height: 100%; }
.vis-6d-lipolezer .hz { opacity: .6; animation: \36 d-lipolezer-haze 9s ease-in-out infinite; }
.vis-6d-lipolezer .ca { opacity: .25; animation: \36 d-lipolezer-ca 9s ease-in-out .4s infinite both; }
.vis-6d-lipolezer .po { opacity: .28; animation: \36 d-lipolezer-pool 9s ease-in-out var(--d, 0s) infinite both; }
.vis-6d-lipolezer .li { opacity: .1; animation: \36 d-lipolezer-lit 9s ease-in-out var(--d, 0s) infinite both; }
.vis-6d-lipolezer .rp { opacity: 0; transform-origin: 0 0; animation: \36 d-lipolezer-ripple 9s cubic-bezier(.3, .6, .4, 1) var(--d, 0s) infinite both; }
.vis-6d-lipolezer .sh { animation: \36 d-lipolezer-sheen 9s ease-in-out infinite; }
.vis-6d-lipolezer .m { opacity: 0; animation: \36 d-lipolezer-mote var(--t, 8s) ease-in-out var(--d, 0s) infinite both; }

@keyframes \36 d-lipolezer-haze { 0%, 100% { opacity: .6; } 40% { opacity: 1; } }
@keyframes \36 d-lipolezer-ca { 0%, 70%, 100% { opacity: .25; } 34% { opacity: 1; } }
@keyframes \36 d-lipolezer-pool { 0%, 64%, 100% { opacity: .28; } 32% { opacity: 1; } }
@keyframes \36 d-lipolezer-lit { 0%, 64%, 100% { opacity: .1; } 32% { opacity: 1; } }
@keyframes \36 d-lipolezer-ripple {
  0%, 26% { opacity: 0; transform: scale(1); }
  36% { opacity: .4; transform: scale(1.08); }
  62%, 100% { opacity: 0; transform: scale(1.4); }
}
@keyframes \36 d-lipolezer-sheen { 0%, 48% { transform: translateX(0); } 80%, 100% { transform: translateX(440px); } }
@keyframes \36 d-lipolezer-mote {
  0% { opacity: 0; transform: translate(0, 0); }
  45% { opacity: .85; }
  100% { opacity: 0; transform: translate(3px, -14px); }
}

/* Állókép: a fényhullám középről indul – a belső párnák teljes fényben, a külsők felfutóban */
@media (prefers-reduced-motion: reduce) {
  .vis-6d-lipolezer .hz, .vis-6d-lipolezer .ca, .vis-6d-lipolezer .po, .vis-6d-lipolezer .li,
  .vis-6d-lipolezer .rp, .vis-6d-lipolezer .sh, .vis-6d-lipolezer .m { animation: none; }
  .vis-6d-lipolezer .hz { opacity: 1; }
  .vis-6d-lipolezer .ca { opacity: .85; }
  .vis-6d-lipolezer .c1 .po { opacity: 1; }
  .vis-6d-lipolezer .c2 .po { opacity: .68; }
  .vis-6d-lipolezer .c3 .po { opacity: .42; }
  .vis-6d-lipolezer .c1 .li { opacity: 1; }
  .vis-6d-lipolezer .c2 .li { opacity: .5; }
  .vis-6d-lipolezer .c3 .li { opacity: .2; }
  .vis-6d-lipolezer .c1 .rp { opacity: .38; transform: scale(1.32); }
  .vis-6d-lipolezer .c2 .rp { opacity: .3; transform: scale(1.1); }
  .vis-6d-lipolezer .c3 .rp { opacity: 0; }
  .vis-6d-lipolezer .sh { opacity: 0; }
  .vis-6d-lipolezer .m { opacity: .55; }
}
.vis-static .vis-6d-lipolezer .hz, .vis-static .vis-6d-lipolezer .ca, .vis-static .vis-6d-lipolezer .po, .vis-static .vis-6d-lipolezer .li,
.vis-static .vis-6d-lipolezer .rp, .vis-static .vis-6d-lipolezer .sh, .vis-static .vis-6d-lipolezer .m { animation: none; }
.vis-static .vis-6d-lipolezer .hz { opacity: 1; }
.vis-static .vis-6d-lipolezer .ca { opacity: .85; }
.vis-static .vis-6d-lipolezer .c1 .po { opacity: 1; }
.vis-static .vis-6d-lipolezer .c2 .po { opacity: .68; }
.vis-static .vis-6d-lipolezer .c3 .po { opacity: .42; }
.vis-static .vis-6d-lipolezer .c1 .li { opacity: 1; }
.vis-static .vis-6d-lipolezer .c2 .li { opacity: .5; }
.vis-static .vis-6d-lipolezer .c3 .li { opacity: .2; }
.vis-static .vis-6d-lipolezer .c1 .rp { opacity: .38; transform: scale(1.32); }
.vis-static .vis-6d-lipolezer .c2 .rp { opacity: .3; transform: scale(1.1); }
.vis-static .vis-6d-lipolezer .c3 .rp { opacity: 0; }
.vis-static .vis-6d-lipolezer .sh { opacity: 0; }
.vis-static .vis-6d-lipolezer .m { opacity: .55; }

/* Gépi nyirokmasszázs – légkamrás ruha, a kamrák a bokától a test közepe felé töltődnek */
.vis-gepi-nyirokmasszazs { position: absolute; inset: 0; display: grid; place-items: center; }
.vis-gepi-nyirokmasszazs svg { width: 100%; height: 100%; max-width: 440px; overflow: visible; }
.vis-gepi-nyirokmasszazs .ir { transform-box: fill-box; transform-origin: center; animation: gepi-nyirokmasszazs-ir 7s ease-in-out infinite alternate; }
.vis-gepi-nyirokmasszazs .warm { opacity: .7; animation: gepi-nyirokmasszazs-warm 7s ease-in-out infinite alternate; }
.vis-gepi-nyirokmasszazs .far { opacity: .42; }
.vis-gepi-nyirokmasszazs .ef { fill: none; stroke: #EBB95A; stroke-width: 1; opacity: .5; }
.vis-gepi-nyirokmasszazs .out { fill: none; stroke: #EBB95A; stroke-width: 1.2; stroke-linejoin: round; }
.vis-gepi-nyirokmasszazs .torso { fill: none; stroke: url(#gepi-nyirokmasszazs-torso); stroke-width: 1; }
.vis-gepi-nyirokmasszazs .wb { fill: none; stroke: #EBB95A; stroke-width: .8; opacity: .55; }
.vis-gepi-nyirokmasszazs .bed { fill: none; stroke: url(#gepi-nyirokmasszazs-bed); stroke-width: 1; opacity: .7; }
.vis-gepi-nyirokmasszazs .st { fill: none; stroke: #F5D27E; stroke-width: 1.1; stroke-linecap: round; stroke-dasharray: 0 4; opacity: .55; }
.vis-gepi-nyirokmasszazs .ch { transform-box: fill-box; transform-origin: 50% 100%; animation: gepi-nyirokmasszazs-puff 9s cubic-bezier(.45,0,.3,1) infinite; }
.vis-gepi-nyirokmasszazs .b { fill: #B8862B; fill-opacity: .07; stroke: #B8862B; stroke-width: 1; stroke-opacity: .8; }
.vis-gepi-nyirokmasszazs .f { fill: url(#gepi-nyirokmasszazs-fill); stroke: #F5D27E; stroke-width: 1; opacity: 0; animation: gepi-nyirokmasszazs-fill 9s cubic-bezier(.45,0,.3,1) infinite; }
.vis-gepi-nyirokmasszazs .h { fill: none; stroke: #FFF3D6; stroke-width: 1.2; stroke-linecap: round; opacity: 0; animation: gepi-nyirokmasszazs-hl 9s ease-in-out infinite; }
.vis-gepi-nyirokmasszazs .gl { fill: none; stroke: #FFF3D6; stroke-width: 1.8; stroke-linecap: round; stroke-dasharray: 30 2400; opacity: 0; animation: gepi-nyirokmasszazs-glint 9s linear infinite; }
.vis-gepi-nyirokmasszazs .c2, .vis-gepi-nyirokmasszazs .c2 > * { animation-delay: .75s; }
.vis-gepi-nyirokmasszazs .c3, .vis-gepi-nyirokmasszazs .c3 > * { animation-delay: 1.5s; }
.vis-gepi-nyirokmasszazs .c4, .vis-gepi-nyirokmasszazs .c4 > * { animation-delay: 2.25s; }
.vis-gepi-nyirokmasszazs .c5, .vis-gepi-nyirokmasszazs .c5 > * { animation-delay: 3s; }
.vis-gepi-nyirokmasszazs .c6, .vis-gepi-nyirokmasszazs .c6 > * { animation-delay: 3.75s; }
.vis-gepi-nyirokmasszazs .c7, .vis-gepi-nyirokmasszazs .c7 > * { animation-delay: 4.5s; }
@keyframes gepi-nyirokmasszazs-puff { 0% { transform: none; } 10% { transform: scale(1.035, 1.08); } 22% { transform: scale(1.03, 1.065); } 36%, 100% { transform: none; } }
@keyframes gepi-nyirokmasszazs-fill { 0% { opacity: 0; } 10% { opacity: .95; } 22% { opacity: .78; } 36%, 100% { opacity: 0; } }
@keyframes gepi-nyirokmasszazs-hl { 0%, 4% { opacity: 0; } 11% { opacity: .9; } 20% { opacity: .25; } 30%, 100% { opacity: 0; } }
@keyframes gepi-nyirokmasszazs-glint { 0%{stroke-dashoffset:-122.9;opacity:0}5%{stroke-dashoffset:-191.2;opacity:1}13.3%{stroke-dashoffset:-343.9;opacity:1}21.7%{stroke-dashoffset:-443.3;opacity:1}30%{stroke-dashoffset:-545.9;opacity:1}38.3%{stroke-dashoffset:-652.8;opacity:1}46.7%{stroke-dashoffset:-761.8;opacity:1}55%{stroke-dashoffset:-874.3;opacity:1}61.7%{stroke-dashoffset:-965.4;opacity:1}69.4%{stroke-dashoffset:-1071.7;opacity:0}100%{stroke-dashoffset:-1071.7;opacity:0} }
@keyframes gepi-nyirokmasszazs-ir { from { opacity: .6; transform: scaleX(.94); } to { opacity: 1; transform: scaleX(1.03); } }
@keyframes gepi-nyirokmasszazs-warm { from { opacity: .45; } to { opacity: .9; } }
/* mozgás nélkül: félig végigfutott hullám – az 5. kamra telik, a 4. tart, a 3. ürül */
@media (prefers-reduced-motion: reduce) {
  .vis-gepi-nyirokmasszazs .ir, .vis-gepi-nyirokmasszazs .warm, .vis-gepi-nyirokmasszazs .ch, .vis-gepi-nyirokmasszazs .f, .vis-gepi-nyirokmasszazs .h, .vis-gepi-nyirokmasszazs .gl { animation: none; }
  .vis-gepi-nyirokmasszazs .c3 { transform: scale(1.01, 1.02); } .vis-gepi-nyirokmasszazs .c3 .f { opacity: .3; }
  .vis-gepi-nyirokmasszazs .c4 { transform: scale(1.03, 1.065); } .vis-gepi-nyirokmasszazs .c4 .f { opacity: .78; }
  .vis-gepi-nyirokmasszazs .c5 { transform: scale(1.035, 1.08); } .vis-gepi-nyirokmasszazs .c5 .f { opacity: .95; } .vis-gepi-nyirokmasszazs .c5 .h { opacity: .9; }
  .vis-gepi-nyirokmasszazs .c6 { transform: scale(1.01, 1.02); } .vis-gepi-nyirokmasszazs .c6 .f { opacity: .28; }
  .vis-gepi-nyirokmasszazs .gl { opacity: 1; stroke-dashoffset: -672.8; }
}
.vis-static .vis-gepi-nyirokmasszazs .ir, .vis-static .vis-gepi-nyirokmasszazs .warm, .vis-static .vis-gepi-nyirokmasszazs .ch, .vis-static .vis-gepi-nyirokmasszazs .f, .vis-static .vis-gepi-nyirokmasszazs .h, .vis-static .vis-gepi-nyirokmasszazs .gl { animation: none; }
.vis-static .vis-gepi-nyirokmasszazs .c3 { transform: scale(1.01, 1.02); } .vis-static .vis-gepi-nyirokmasszazs .c3 .f { opacity: .3; }
.vis-static .vis-gepi-nyirokmasszazs .c4 { transform: scale(1.03, 1.065); } .vis-static .vis-gepi-nyirokmasszazs .c4 .f { opacity: .78; }
.vis-static .vis-gepi-nyirokmasszazs .c5 { transform: scale(1.035, 1.08); } .vis-static .vis-gepi-nyirokmasszazs .c5 .f { opacity: .95; } .vis-static .vis-gepi-nyirokmasszazs .c5 .h { opacity: .9; }
.vis-static .vis-gepi-nyirokmasszazs .c6 { transform: scale(1.01, 1.02); } .vis-static .vis-gepi-nyirokmasszazs .c6 .f { opacity: .28; }
.vis-static .vis-gepi-nyirokmasszazs .gl { opacity: 1; stroke-dashoffset: -672.8; }

/* Monosculpt – 8 fej a hason, 4 + 4 az oldalakon, egyenletes ütemű mély meleg. Az alapértékek adják az állóképet. */
.vis-monosculpt { position: absolute; inset: 0; }
.vis-monosculpt svg { width: 100%; height: 100%; overflow: visible; display: block; }
.vis-monosculpt .warm { transform-box: fill-box; transform-origin: center; animation: monosculpt-warm 7.5s ease-in-out infinite; }
.vis-monosculpt .ring { transform-box: fill-box; transform-origin: center; animation: monosculpt-ring 7.5s cubic-bezier(.3,.55,.4,1) infinite; }
.vis-monosculpt .w1 { transform: scale(.75); opacity: .55; animation-delay: -6.5s; }
.vis-monosculpt .w2 { transform: scale(1.25); opacity: .32; animation-delay: -4s; }
.vis-monosculpt .w3 { transform: scale(1.75); opacity: .14; animation-delay: -1.5s; }
.vis-monosculpt .beat { stroke-dashoffset: -45; fill-opacity: 1; animation: monosculpt-beat 2.5s ease-in-out infinite; }
.vis-monosculpt .gleam { stroke-dashoffset: -38; animation: monosculpt-gleam 9s ease-in-out 1.5s infinite backwards; }

@keyframes monosculpt-warm { 0%, 100% { opacity: .75; transform: scale(.95); } 50% { opacity: 1; transform: scale(1.04); } }
@keyframes monosculpt-ring { 0% { transform: scale(.35); opacity: 0; } 12% { opacity: .6; } 100% { transform: scale(2.1); opacity: 0; } }
@keyframes monosculpt-beat {
  0% { stroke-dashoffset: -100; fill-opacity: .4; }
  40% { stroke-dashoffset: 0; }
  48% { stroke-dashoffset: 9; fill-opacity: 1; }
  100% { stroke-dashoffset: 9; fill-opacity: .4; }
}
@keyframes monosculpt-gleam { 0% { stroke-dashoffset: 8; } 55%, 100% { stroke-dashoffset: -100; } }

/* Mozgás nélkül: a megkomponált állókép (a fenti alapértékek) */
@media (prefers-reduced-motion: reduce) { .vis-monosculpt * { animation: none !important; } }
.vis-static .vis-monosculpt * { animation: none !important; }

/* Az alapstílus maga az állókép (a három lépés egyben: szemcsék, körbeölelő szalag, félig kihúzott simító ív fényponttal, csepp a tégely fölött); az animáció ezt írja felül. */
.vis-francia-silhouette{position:absolute;inset:0}
.vis-francia-silhouette svg{display:block;width:100%;height:100%}
.vis-francia-silhouette .drop,.vis-francia-silhouette .rp,.vis-francia-silhouette .sp,.vis-francia-silhouette .veil{transform-box:fill-box;transform-origin:50% 50%}
.vis-francia-silhouette .drop{transform-origin:50% 100%;transform:translateY(30px);animation:francia-silhouette-drop 9s cubic-bezier(.5,0,.75,.4) infinite}
.vis-francia-silhouette .rp{opacity:0;animation:francia-silhouette-ripple 9s ease-out infinite backwards}
.vis-francia-silhouette .sp{opacity:0;transform:scale(0);animation:francia-silhouette-spark1 9s ease-in-out infinite}
.vis-francia-silhouette .k2{opacity:.9;transform:scale(.8) rotate(45deg);animation-name:francia-silhouette-spark2}
.vis-francia-silhouette .gr{opacity:.85;animation:francia-silhouette-grain 9s ease-in-out infinite backwards}
.vis-francia-silhouette .gb{opacity:.5}
.vis-francia-silhouette .gr>*{transform-box:fill-box;transform-origin:-110% 50%;animation:francia-silhouette-orbit 2.25s linear infinite}
.vis-francia-silhouette .gr>:nth-child(2n){animation-duration:1.5s;animation-direction:reverse}
.vis-francia-silhouette .gr>:nth-child(3n){animation-duration:3s}
.vis-francia-silhouette .veil{transform-origin:50% 100%;opacity:.85;animation:francia-silhouette-veil 9s ease-in-out infinite}
.vis-francia-silhouette .rb,.vis-francia-silhouette .rf,.vis-francia-silhouette .st{stroke-dasharray:100 200;opacity:.9;animation:francia-silhouette-rback 9s ease-in-out infinite backwards}
.vis-francia-silhouette .rf{animation-name:francia-silhouette-rfront}
.vis-francia-silhouette .st{animation:francia-silhouette-stroke 9s cubic-bezier(.45,.05,.35,1) infinite backwards}
.vis-francia-silhouette .s1{stroke-dashoffset:27}
.vis-francia-silhouette .s3{opacity:0}
.vis-francia-silhouette .gl{stroke-dasharray:.4 200;opacity:0;animation:francia-silhouette-glint 9s cubic-bezier(.45,.05,.35,1) infinite backwards}
.vis-francia-silhouette .gl.s1{opacity:1;stroke-dashoffset:-72.8}
.vis-francia-silhouette .sh{transform:translateX(40px);animation:francia-silhouette-sheen 9s ease-in-out infinite}
.vis-francia-silhouette .lid{animation:francia-silhouette-bob 4.5s ease-in-out infinite}
.vis-francia-silhouette .mo{opacity:0;animation:francia-silhouette-mote 9s linear infinite}
@media (prefers-reduced-motion:reduce){.vis-francia-silhouette *{animation:none!important}}
.vis-static .vis-francia-silhouette *{animation:none!important}
@keyframes francia-silhouette-drop{
0%{transform:translateY(10px) scale(0);opacity:0;animation-timing-function:ease-out}
5%{transform:translateY(13px) scale(1);opacity:1;animation-timing-function:ease-in-out}
8%{transform:translateY(15px) scale(1,1.08);opacity:1}
15%{transform:translateY(71px) scale(.9,1.15);opacity:1;animation-timing-function:ease-out}
16.5%,100%{transform:translateY(73px) scale(1.4,.3);opacity:0}}
@keyframes francia-silhouette-ripple{0%,15%{transform:scale(.15);opacity:0}16%{opacity:.9}32%,100%{transform:scale(1.08);opacity:0}}
@keyframes francia-silhouette-spark1{0%,15%{transform:scale(0);opacity:0}19%{transform:scale(1) rotate(45deg);opacity:1}25%,100%{transform:scale(0) rotate(90deg);opacity:0}}
@keyframes francia-silhouette-spark2{0%,82%{transform:scale(0);opacity:0}86%{transform:scale(1) rotate(45deg);opacity:1}92%,100%{transform:scale(0) rotate(90deg);opacity:0}}
@keyframes francia-silhouette-grain{0%,13%,100%{opacity:0;transform:translate(-8px,5px)}21%,38%{opacity:1}48%{opacity:0;transform:translate(9px,-5px)}}
@keyframes francia-silhouette-orbit{to{transform:rotate(360deg)}}
@keyframes francia-silhouette-veil{0%,34%{opacity:0;transform:scale(.7,.5)}52%{opacity:1;transform:scale(1)}66%{opacity:.85;transform:scale(1.03,1.05)}78%,100%{opacity:0;transform:scale(1.06,1.1)}}
@keyframes francia-silhouette-rback{0%,36%{stroke-dashoffset:100;opacity:0}38%{opacity:1}48%,66%{stroke-dashoffset:0;opacity:1}76%,100%{stroke-dashoffset:0;opacity:0}}
@keyframes francia-silhouette-rfront{0%,47%{stroke-dashoffset:100;opacity:0}48%{opacity:1}58%,66%{stroke-dashoffset:0;opacity:1}76%,100%{stroke-dashoffset:0;opacity:0}}
@keyframes francia-silhouette-stroke{0%,62%{stroke-dashoffset:100;opacity:0}63%{stroke-dashoffset:99;opacity:1}79%{stroke-dashoffset:0;opacity:1}89%{stroke-dashoffset:0;opacity:.5}97%,100%{stroke-dashoffset:0;opacity:0}}
@keyframes francia-silhouette-glint{0%,62%{stroke-dashoffset:1;opacity:0}63%{stroke-dashoffset:-.8;opacity:1}79%{stroke-dashoffset:-99.8;opacity:1}82%,100%{stroke-dashoffset:-99.8;opacity:0}}
@keyframes francia-silhouette-sheen{0%,74%{transform:translateX(-30px)}90%,100%{transform:translateX(140px)}}
@keyframes francia-silhouette-bob{50%{transform:translateY(-3px)}}
@keyframes francia-silhouette-mote{0%{transform:translateY(0);opacity:0}20%{opacity:.55}80%{opacity:.3}100%{transform:translateY(-110px);opacity:0}}

/* Forgó fa görgők – body-roll: vízszintes henger, gyöngyös fa görgők */
.vis-body-roll{position:absolute;inset:0}
.vis-body-roll svg{display:block;width:100%;height:100%}
.vis-body-roll .k>use{animation:body-roll-turn 12s linear infinite}
.vis-body-roll .z{animation:body-roll-zone 12s ease-in-out infinite}
.vis-body-roll .p{animation:body-roll-pulse .86s ease-in-out infinite}
.vis-body-roll .g{opacity:0;animation:body-roll-g0 12s ease-in-out infinite}
.vis-body-roll .g1{animation-name:body-roll-g1}
.vis-body-roll .g2{animation-name:body-roll-g2}
.vis-body-roll .s{animation:body-roll-spark 2.8s ease-out infinite}
.vis-body-roll .a{animation:body-roll-arc 3s ease-out infinite}
.vis-body-roll .a2{animation-delay:-1.5s}
@keyframes body-roll-turn{0%{transform:translateY(0px) scaleY(.32);opacity:0}18.75%{transform:translateY(38.8px) scaleY(.32);opacity:0}21.88%{transform:translateY(41.19px) scaleY(.32);opacity:.22}25%{transform:translateY(42px) scaleY(.32);opacity:.73}28.13%{transform:translateY(41.19px) scaleY(.45);opacity:1}31.25%{transform:translateY(38.8px) scaleY(.58);opacity:1}34.38%{transform:translateY(34.92px) scaleY(.7);opacity:1}37.5%{transform:translateY(29.7px) scaleY(.8);opacity:1}40.63%{transform:translateY(23.33px) scaleY(.89);opacity:1}43.75%{transform:translateY(16.07px) scaleY(.95);opacity:1}46.88%{transform:translateY(8.19px) scaleY(.99);opacity:1}50%{transform:translateY(0px) scaleY(1);opacity:1}53.13%{transform:translateY(-8.19px) scaleY(.99);opacity:1}56.25%{transform:translateY(-16.07px) scaleY(.95);opacity:1}59.38%{transform:translateY(-23.33px) scaleY(.89);opacity:1}62.5%{transform:translateY(-29.7px) scaleY(.8);opacity:1}65.63%{transform:translateY(-34.92px) scaleY(.7);opacity:1}68.75%{transform:translateY(-38.8px) scaleY(.58);opacity:1}71.88%{transform:translateY(-41.19px) scaleY(.45);opacity:1}75%{transform:translateY(-42px) scaleY(.32);opacity:.73}78.13%{transform:translateY(-41.19px) scaleY(.32);opacity:.22}81.25%{transform:translateY(-38.8px) scaleY(.32);opacity:0}100%{transform:translateY(0px) scaleY(.32);opacity:0}}
@keyframes body-roll-zone{0%{transform:translateY(120px);opacity:0}6%{opacity:1}24%{transform:translateY(120px)}34%{transform:translateY(94px)}52%{transform:translateY(94px)}62%{transform:translateY(68px)}80%{transform:translateY(68px);opacity:1}90%{transform:translateY(64px);opacity:0}100%{transform:translateY(120px);opacity:0}}
@keyframes body-roll-g0{0%,4%{opacity:0}16%,86%{opacity:.55}96%,100%{opacity:0}}
@keyframes body-roll-g1{0%,32%{opacity:0}44%,86%{opacity:.55}96%,100%{opacity:0}}
@keyframes body-roll-g2{0%,60%{opacity:0}72%,86%{opacity:.55}96%,100%{opacity:0}}
@keyframes body-roll-pulse{0%,100%{transform:scale(.9,.8);opacity:.6}50%{transform:scale(1.05,1.1);opacity:1}}
@keyframes body-roll-spark{0%{transform:translateY(3px) scale(.5);opacity:0}25%{opacity:1}100%{transform:translateY(-16px) scale(1);opacity:0}}
@keyframes body-roll-arc{0%{transform:translateY(-2px);opacity:0}20%{opacity:.7}100%{transform:translateY(-20px) scale(1.3);opacity:0}}
/* Állókép: a henger áll, a meleg sáv a combnál, alatta a vádli már átmelegedett */
@media (prefers-reduced-motion:reduce){
.vis-body-roll *{animation:none!important}
.vis-body-roll .z{transform:translateY(94px);opacity:1}
.vis-body-roll .g0,.vis-body-roll .g1{opacity:.55}
.vis-body-roll .s{transform:translateY(-7px);opacity:.8}
.vis-body-roll .a{transform:translateY(-8px);opacity:.55}
.vis-body-roll .a2{transform:translateY(-15px) scale(1.15);opacity:.25}
}
.vis-static .vis-body-roll *{animation:none!important}
.vis-static .vis-body-roll .z{transform:translateY(94px);opacity:1}
.vis-static .vis-body-roll .g0,.vis-static .vis-body-roll .g1{opacity:.55}
.vis-static .vis-body-roll .s{transform:translateY(-7px);opacity:.8}
.vis-static .vis-body-roll .a{transform:translateY(-8px);opacity:.55}
.vis-static .vis-body-roll .a2{transform:translateY(-15px) scale(1.15);opacity:.25}

/* Olajos thai masszázs (10 s). Az alapstílus az állókép; betöltéskor a kinyílt lótusszal indul. */
.vis-olajos-thai-masszazs{position:absolute;inset:0}
.vis-olajos-thai-masszazs svg{display:block;width:100%;height:100%}
.vis-olajos-thai-masszazs :is(.dr,.sp circle,.gw,.rp,.s,.g,.h,.lt,.lf,.p,.rs,.bk,.rf){animation-delay:calc(var(--k,0s) - 5.4s)}
/* háttér, simításnyomok, pára, gőz */
.vis-olajos-thai-masszazs .bg path{fill:url(#olajos-thai-masszazs-gb);animation:olajos-thai-masszazs-breathe 9s ease-in-out infinite alternate}
.vis-olajos-thai-masszazs .ms{fill:none;stroke:#B8862B;stroke-width:.6;opacity:.4;stroke-dasharray:34 66;stroke-dashoffset:40;animation:olajos-thai-masszazs-sweep 10s linear infinite}
.vis-olajos-thai-masszazs .mt{fill:#F5D27E;opacity:.5;animation:olajos-thai-masszazs-mote 9s ease-in-out infinite}
.vis-olajos-thai-masszazs .st{fill:none;stroke:url(#olajos-thai-masszazs-gs);stroke-width:1.1;stroke-linecap:round;opacity:.3;animation:olajos-thai-masszazs-steam 9s ease-in-out infinite}
/* olajtükör: fénygyűrűk, csillogó fodrok, tükörkép */
.vis-olajos-thai-masszazs .pr{fill:none;stroke:#F5D27E;stroke-width:.7;opacity:.16}
.vis-olajos-thai-masszazs .ca{fill:none;stroke:#F5D27E;stroke-width:.8;stroke-linecap:round;opacity:.45;animation:olajos-thai-masszazs-caustic 4s ease-in-out infinite alternate}
.vis-olajos-thai-masszazs .rf{fill:none;stroke:url(#olajos-thai-masszazs-gp);opacity:.22;animation:olajos-thai-masszazs-refl 10s infinite}
/* csepp, fröccsenés, fény, gyűrűk */
.vis-olajos-thai-masszazs .dr{transform:translateY(58px) scale(.9);animation:olajos-thai-masszazs-drop 10s infinite}
.vis-olajos-thai-masszazs .sp circle{fill:#F5D27E;opacity:0;animation:olajos-thai-masszazs-splash 10s infinite}
.vis-olajos-thai-masszazs .gw{opacity:.4;transform-origin:207px 134px;animation:olajos-thai-masszazs-glow 10s ease-out infinite}
.vis-olajos-thai-masszazs .rp{fill:none;stroke:#EBB95A;stroke-width:1;vector-effect:non-scaling-stroke;opacity:.32;transform:scale(.82);--k:1.45s;animation:olajos-thai-masszazs-ripple 10s infinite both}
.vis-olajos-thai-masszazs .rp+.rp{opacity:.5;transform:scale(.5);--k:1.78s}
.vis-olajos-thai-masszazs .rp+.rp+.rp{opacity:0;--k:2.15s}
/* selyemszalagok (mögötte és előtte), fényfutás */
.vis-olajos-thai-masszazs .s{fill:none;stroke-width:1.1;stroke-dasharray:100 101;animation:olajos-thai-masszazs-silk 10s infinite both}
.vis-olajos-thai-masszazs .r{stroke:url(#olajos-thai-masszazs-gr)}
.vis-olajos-thai-masszazs .l{stroke:url(#olajos-thai-masszazs-gl)}
.vis-olajos-thai-masszazs .s0,.vis-olajos-thai-masszazs .s3{stroke-width:.8;opacity:.5}
.vis-olajos-thai-masszazs .w{stroke-width:6;opacity:.08}
.vis-olajos-thai-masszazs .f{stroke-width:.9;opacity:.75}
.vis-olajos-thai-masszazs .g,.vis-olajos-thai-masszazs .h{fill:none;stroke-linecap:round;stroke-dasharray:7 200;stroke-dashoffset:-52;animation:olajos-thai-masszazs-glint 10s infinite both}
.vis-olajos-thai-masszazs .g{stroke:#FFF3D6;stroke-width:1.4}
.vis-olajos-thai-masszazs .g2{stroke:#F5D27E;stroke-width:1}
.vis-olajos-thai-masszazs .h{stroke-width:5;opacity:.22;stroke-dasharray:9 200}
/* lótusz két szirom-sorral; pihenő lótusz */
.vis-olajos-thai-masszazs .lt{transform-origin:207px 138px;animation:olajos-thai-masszazs-lotus 10s infinite}
.vis-olajos-thai-masszazs .bk{fill:url(#olajos-thai-masszazs-gf);stroke:#B8862B;stroke-width:.9;animation:olajos-thai-masszazs-back 10s infinite}
.vis-olajos-thai-masszazs .lf use{fill:url(#olajos-thai-masszazs-gf)}
.vis-olajos-thai-masszazs .lf{animation:olajos-thai-masszazs-fill 10s ease-in-out infinite}
.vis-olajos-thai-masszazs .vn{fill:none;stroke:#F5D27E;stroke-width:.6;opacity:.5}
.vis-olajos-thai-masszazs .p{fill:none;stroke:url(#olajos-thai-masszazs-gp);stroke-width:1.2;stroke-linejoin:round;stroke-dasharray:100 101;animation:olajos-thai-masszazs-petal 10s infinite both}
.vis-olajos-thai-masszazs .rs{fill:none;stroke:url(#olajos-thai-masszazs-gp);stroke-width:1.1;opacity:.3;animation:olajos-thai-masszazs-rest 10s infinite}

@keyframes olajos-thai-masszazs-drop{
0%{opacity:0;transform:translateY(28px) scale(.2);animation-timing-function:ease-out}
4%{opacity:1;transform:translateY(32px) scale(1);animation-timing-function:ease-in-out}
7%{opacity:1;transform:translateY(35px) scale(.95,1.06);animation-timing-function:cubic-bezier(.55,0,.95,.5)}
14%{opacity:1;transform:translateY(137px) scale(.88,1.14);animation-timing-function:ease-out}
15.5%,100%{opacity:0;transform:translateY(139px) scale(2,.12)}}
@keyframes olajos-thai-masszazs-splash{
0%,14%{opacity:0;transform:translate(0,0);animation-timing-function:cubic-bezier(.2,.7,.4,1)}
14.6%{opacity:1}
18%{transform:translate(calc(var(--x) * .7),var(--y));animation-timing-function:cubic-bezier(.5,0,.9,.6)}
21.5%,100%{opacity:0;transform:translate(var(--x),2px)}}
@keyframes olajos-thai-masszazs-glow{
0%,13.8%{opacity:.12;transform:scale(.6)}
17%{opacity:.9;transform:scale(.8)}
45%,86%{opacity:.35;transform:scale(1)}
96%,100%{opacity:.12;transform:scale(.6)}}
@keyframes olajos-thai-masszazs-ripple{
0%{opacity:0;transform:scale(.05);animation-timing-function:cubic-bezier(.2,.6,.35,1)}
1.5%{opacity:.85}
30%,100%{opacity:0;transform:scale(1)}}
@keyframes olajos-thai-masszazs-silk{
0%,19%{stroke-dashoffset:101;animation-timing-function:cubic-bezier(.45,0,.25,1)}
52%{stroke-dashoffset:0}
62%{stroke-dashoffset:0;animation-timing-function:cubic-bezier(.5,0,.5,1)}
92%,100%{stroke-dashoffset:-101}}
@keyframes olajos-thai-masszazs-glint{
0%,40%{stroke-dashoffset:14;animation-timing-function:cubic-bezier(.45,0,.4,1)}
74%,100%{stroke-dashoffset:-101}}
@keyframes olajos-thai-masszazs-lotus{
0%,14.5%{opacity:0;transform:scale(.9)}
15%{opacity:1;transform:scale(.9);animation-timing-function:cubic-bezier(.3,.6,.3,1)}
48%{transform:scale(1)}
87%{opacity:1;transform:scale(1)}
97%,100%{opacity:0;transform:scale(1.03)}}
@keyframes olajos-thai-masszazs-back{0%,22%{opacity:0}44%,100%{opacity:1}}
@keyframes olajos-thai-masszazs-fill{0%,30%{opacity:0}52%,100%{opacity:1}}
@keyframes olajos-thai-masszazs-rest{0%,16%{opacity:.3}46%,87%{opacity:0}97%,100%{opacity:.3}}
@keyframes olajos-thai-masszazs-refl{0%,16%{opacity:.1}45%,87%{opacity:.22}97%,100%{opacity:.1}}
@keyframes olajos-thai-masszazs-petal{
0%,15%{stroke-dashoffset:101;animation-timing-function:cubic-bezier(.4,0,.2,1)}
38%,100%{stroke-dashoffset:0}}
@keyframes olajos-thai-masszazs-breathe{from{transform:translate(-6px,3px)}to{transform:translate(6px,-3px)}}
@keyframes olajos-thai-masszazs-sweep{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes olajos-thai-masszazs-caustic{from{opacity:.1}to{opacity:.6}}
@keyframes olajos-thai-masszazs-mote{0%{opacity:0;transform:translateY(14px)}30%{opacity:.75}75%{opacity:.4}100%{opacity:0;transform:translateY(-44px)}}
@keyframes olajos-thai-masszazs-steam{0%{opacity:0;transform:translateY(10px)}40%{opacity:.55}100%{opacity:0;transform:translateY(-26px)}}

/* mozgás nélkül az alapstílus (állókép) marad */
@media (prefers-reduced-motion:reduce){.vis-olajos-thai-masszazs *{animation:none!important}}
.vis-static .vis-olajos-thai-masszazs *{animation:none!important}

/* Átmelegítő hőkezelés: a melegség a talptól felfelé árad */
.vis-wentong-hokezeles { position: absolute; inset: 0; }
.vis-wentong-hokezeles svg { display: block; width: 100%; height: 100%; overflow: visible; }

/* selymes hőszalagok: lassan emelkednek, felül elhalványulnak */
.vis-wentong-hokezeles .se path { opacity: 0; animation: wentong-hokezeles-selyem var(--t) cubic-bezier(.45,.05,.55,.95) var(--w) infinite; }
.vis-wentong-hokezeles .se .h { fill-opacity: .5; stroke-opacity: .45; }
@keyframes wentong-hokezeles-selyem {
  0% { transform: translateY(16px); opacity: 0; }
  35% { opacity: 1; }
  70% { opacity: .8; }
  100% { transform: translateY(-34px); opacity: 0; }
}
/* finom fényszálak: rövid fényes szakasz kúszik fel rajtuk */
.vis-wentong-hokezeles .sz path { stroke-width: .9; stroke-dasharray: 36 100; stroke-dashoffset: 36; opacity: 0;
  animation: wentong-hokezeles-szal var(--t) cubic-bezier(.45,.05,.55,.95) var(--w) infinite; }
.vis-wentong-hokezeles .sz .f { stroke-width: 1.3; }
@keyframes wentong-hokezeles-szal { 0% { stroke-dashoffset: 36; opacity: 0; } 25% { opacity: 1; } 70% { opacity: .7; } 100% { stroke-dashoffset: -100; opacity: 0; } }

/* a lap: izzás, forgó sugaras minta, gyűrűk, peremfény, fénytócsa */
.vis-wentong-hokezeles .fe, .vis-wentong-hokezeles .to { animation: wentong-hokezeles-lap 10s ease-in-out infinite; }
@keyframes wentong-hokezeles-lap { 0%, 100% { opacity: .6; } 18% { opacity: 1; } 60% { opacity: .85; } }
.vis-wentong-hokezeles .kl { transform-box: view-box; transform-origin: 0 0; animation: wentong-hokezeles-forog 60s linear infinite; }
@keyframes wentong-hokezeles-forog { to { transform: rotate(360deg); } }
.vis-wentong-hokezeles .gy { transform-box: fill-box; transform-origin: center; opacity: 0;
  animation: wentong-hokezeles-gyuru 5.4s cubic-bezier(.3,.1,.4,1) var(--w) infinite; }
@keyframes wentong-hokezeles-gyuru { 0% { transform: scale(.5); opacity: 0; } 25% { opacity: .75; } 100% { transform: scale(1.08); opacity: 0; } }
.vis-wentong-hokezeles .cs { stroke-dasharray: 10 110; stroke-dashoffset: 10; opacity: 0; animation: wentong-hokezeles-perem 10s cubic-bezier(.5,0,.5,1) infinite; }
@keyframes wentong-hokezeles-perem { 0% { stroke-dashoffset: 10; opacity: 0; } 4%, 28% { opacity: 1; } 36%, 100% { stroke-dashoffset: -100; opacity: 0; } }

/* a melegség a talptól a combig emelkedik, aztán elcsendesedik */
.vis-wentong-hokezeles .m { opacity: 0; animation: wentong-hokezeles-fel 10s cubic-bezier(.4,0,.35,1) var(--w) infinite; }
@keyframes wentong-hokezeles-fel { 0% { transform: translateY(0); opacity: 0; } 6% { opacity: 1; } 78% { transform: translateY(-156px); opacity: 1; } 100% { transform: translateY(-156px); opacity: 0; } }
.vis-wentong-hokezeles .au { animation: wentong-hokezeles-aura 10s cubic-bezier(.4,0,.35,1) infinite; }
@keyframes wentong-hokezeles-aura { 0% { transform: translateY(0); opacity: .3; } 30% { opacity: 1; } 78% { transform: translateY(-80px); opacity: .7; } 100% { transform: translateY(-80px); opacity: 0; } }
.vis-wentong-hokezeles .iz, .vis-wentong-hokezeles .t { animation: wentong-hokezeles-talp 10s ease-in-out var(--w) infinite; }
@keyframes wentong-hokezeles-talp { 0%, 100% { opacity: .4; } 12% { opacity: 1; } 55% { opacity: .75; } }

/* fényszemcsék */
.vis-wentong-hokezeles .sk circle { opacity: 0; animation: wentong-hokezeles-szikra var(--t) ease-in-out var(--w) infinite; }
@keyframes wentong-hokezeles-szikra { 0% { transform: translate(0, 0); opacity: 0; } 20% { opacity: .9; } 50% { transform: translate(3px, -60px); } 100% { transform: translate(-2px, -124px); opacity: 0; } }

/* állókép: a lábfej átmelegedett, a hőfront a nadrágszár szegélyénél */
@media (prefers-reduced-motion: reduce) {
  .vis-wentong-hokezeles * { animation: none !important; }
  .vis-wentong-hokezeles .se path, .vis-wentong-hokezeles .sk circle { transform: translateY(var(--sy)); opacity: var(--so); }
  .vis-wentong-hokezeles .sz path { stroke-dashoffset: var(--s); opacity: .6; }
  .vis-wentong-hokezeles .gy { transform: scale(var(--sx)); opacity: var(--so); }
  .vis-wentong-hokezeles .cs { stroke-dashoffset: -62; opacity: .9; }
  .vis-wentong-hokezeles .m { transform: translateY(-66px); opacity: 1; }
  .vis-wentong-hokezeles .au { transform: translateY(-30px); opacity: .9; }
  .vis-wentong-hokezeles .fe, .vis-wentong-hokezeles .to, .vis-wentong-hokezeles .iz, .vis-wentong-hokezeles .t { opacity: 1; }
}
.vis-static .vis-wentong-hokezeles * { animation: none !important; }
.vis-static .vis-wentong-hokezeles .se path, .vis-static .vis-wentong-hokezeles .sk circle { transform: translateY(var(--sy)); opacity: var(--so); }
.vis-static .vis-wentong-hokezeles .sz path { stroke-dashoffset: var(--s); opacity: .6; }
.vis-static .vis-wentong-hokezeles .gy { transform: scale(var(--sx)); opacity: var(--so); }
.vis-static .vis-wentong-hokezeles .cs { stroke-dashoffset: -62; opacity: .9; }
.vis-static .vis-wentong-hokezeles .m { transform: translateY(-66px); opacity: 1; }
.vis-static .vis-wentong-hokezeles .au { transform: translateY(-30px); opacity: .9; }
.vis-static .vis-wentong-hokezeles .fe, .vis-static .vis-wentong-hokezeles .to, .vis-static .vis-wentong-hokezeles .iz, .vis-static .vis-wentong-hokezeles .t { opacity: 1; }
