/* FF Partiennavigator - gemeinsame Darstellung der Vorlagen (Overlay-Seite und Editor, seit 3.12.209) */
.fftpl .tw{position:absolute}
.fftpl .trt{position:absolute;inset:0}
.fftpl .trt>.v{position:absolute;inset:0;overflow:hidden;box-sizing:border-box}
.fftpl .tt{display:flex;align-items:center;line-height:1.1;white-space:nowrap}
.fftpl .tt.wrap{white-space:normal}
.fftpl .tt span{display:block;max-width:100%}
.fftpl .tt.mq span{max-width:none;flex:none;animation:fftpl-mq 10s linear infinite}
@keyframes fftpl-mq{from{transform:translateX(var(--mqs,100%))}to{transform:translateX(var(--mqe,-100%))}}
.fftpl .ti{display:flex;align-items:center;justify-content:center}
.fftpl .ti img{width:100%;height:100%;display:block}
.fftpl .tl{display:flex;flex-direction:column;line-height:1.1}
.fftpl .tl .r{display:flex;align-items:center;gap:16px;white-space:nowrap;overflow:hidden;flex-shrink:0}
.fftpl .tl .r i{width:10px;height:10px;border-radius:2px;flex-shrink:0}
.fftpl .tb{display:flex;flex-direction:column;line-height:1.1}
.fftpl .tb .row{display:grid;align-items:center;gap:0 14px;padding:0 12px;flex-shrink:0;white-space:nowrap}
.fftpl .tb .row span{overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;min-width:0}
.fftpl .tb .row span:last-child{justify-content:flex-end}
.fftpl .tb .row.h{font-size:.6em;text-transform:uppercase;letter-spacing:1px;opacity:.75}
.fftpl .tb .row img{height:1.1em;width:auto;max-width:2em;object-fit:contain}
.fftpl .ph{font:600 22px Barlow,sans-serif;color:rgba(0,0,0,.45);background:rgba(255,255,255,.6);border:3px dashed rgba(0,0,0,.25);width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;padding:8px;box-sizing:border-box;word-break:break-all}
/* Einblend-Effekte: Startzustand solange die Ebene aus ist (OBS) bzw. im Editor mit .pre */
.fftpl .tw.fx{transition:opacity var(--fxd,500ms) ease var(--fxl,0ms),transform var(--fxd,500ms) cubic-bezier(.22,1,.36,1) var(--fxl,0ms)}
.fftpl .tw.fx-bounce{transition-timing-function:ease,cubic-bezier(.34,1.56,.64,1)}
.ff-layer:not(.on) .fftpl .tw.fx,.fftpl.pre .tw.fx{opacity:0}
.fftpl.pre .tw.fx{transition:none}
.ff-layer:not(.on) .fftpl .tw.fx-up,.fftpl.pre .tw.fx-up{transform:translateY(60px)}
.ff-layer:not(.on) .fftpl .tw.fx-down,.fftpl.pre .tw.fx-down{transform:translateY(-60px)}
.ff-layer:not(.on) .fftpl .tw.fx-left,.fftpl.pre .tw.fx-left{transform:translateX(60px)}
.ff-layer:not(.on) .fftpl .tw.fx-right,.fftpl.pre .tw.fx-right{transform:translateX(-60px)}
.ff-layer:not(.on) .fftpl .tw.fx-zoom,.fftpl.pre .tw.fx-zoom{transform:scale(.6)}
.ff-layer:not(.on) .fftpl .tw.fx-bounce,.fftpl.pre .tw.fx-bounce{transform:scale(.3)}
.ff-layer:not(.on) .fftpl .tw.fx-flipx,.fftpl.pre .tw.fx-flipx{transform:scaleX(0)}
.ff-layer:not(.on) .fftpl .tw.fx-flipy,.fftpl.pre .tw.fx-flipy{transform:scaleY(0)}
/* Ausblend-Effekte: waehrend .leaving (OBS beim Ausblenden, Editor beim Abspielen) */
.ff-layer .fftpl.leaving .tw.fx,.fftpl.leaving .tw.fx{opacity:1;transform:none}
.ff-layer .fftpl.leaving .tw.fxo,.fftpl.leaving .tw.fxo{opacity:0;transition:opacity var(--fxod,400ms) ease var(--fxol,0ms),transform var(--fxod,400ms) ease var(--fxol,0ms)}
.ff-layer .fftpl.leaving .tw.fxo-up,.fftpl.leaving .tw.fxo-up{transform:translateY(-60px)}
.ff-layer .fftpl.leaving .tw.fxo-down,.fftpl.leaving .tw.fxo-down{transform:translateY(60px)}
.ff-layer .fftpl.leaving .tw.fxo-left,.fftpl.leaving .tw.fxo-left{transform:translateX(-60px)}
.ff-layer .fftpl.leaving .tw.fxo-right,.fftpl.leaving .tw.fxo-right{transform:translateX(60px)}
.ff-layer .fftpl.leaving .tw.fxo-zoom,.fftpl.leaving .tw.fxo-zoom{transform:scale(.6)}
.ff-layer .fftpl.leaving .tw.fxo-flipx,.fftpl.leaving .tw.fxo-flipx{transform:scaleX(0)}
.ff-layer .fftpl.leaving .tw.fxo-flipy,.fftpl.leaving .tw.fxo-flipy{transform:scaleY(0)}
/* Dauer-Effekte (im Editor mit .nolp abschaltbar) */
.fftpl .lp-rotate{animation:fftpl-rot var(--lpd,2s) linear infinite}.fftpl .lp-rotateCCW{animation:fftpl-rot var(--lpd,2s) linear infinite reverse}
.fftpl .lp-pulse{animation:fftpl-pulse var(--lpd,2s) ease-in-out infinite}.fftpl .lp-float{animation:fftpl-float var(--lpd,3s) ease-in-out infinite}
.fftpl .lp-bounce{animation:fftpl-bounce var(--lpd,1.2s) ease infinite}.fftpl .lp-blink{animation:fftpl-blink var(--lpd,1s) step-end infinite}
.fftpl .lp-wobble{animation:fftpl-wobble var(--lpd,1s) ease-in-out infinite}.fftpl .lp-heartbeat{animation:fftpl-heart var(--lpd,1.5s) ease-in-out infinite}
.fftpl .lp-glow{animation:fftpl-glow var(--lpd,2s) ease-in-out infinite}
.fftpl.nolp .lp,.fftpl.nolp .tt.mq span{animation:none}
@keyframes fftpl-rot{to{transform:rotate(360deg)}}
@keyframes fftpl-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes fftpl-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes fftpl-bounce{0%,100%{transform:translateY(0)}40%{transform:translateY(-16px)}60%{transform:translateY(-8px)}}
@keyframes fftpl-blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes fftpl-wobble{0%,100%{transform:rotate(0)}20%{transform:rotate(-4deg)}40%{transform:rotate(4deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(2deg)}}
@keyframes fftpl-heart{0%,28%,70%,100%{transform:scale(1)}14%,42%{transform:scale(1.1)}}
@keyframes fftpl-glow{0%,100%{filter:brightness(1)}50%{filter:brightness(1.35)}}

/* Balken (seit 3.12.211) */
.fftpl .rc>.bar{position:absolute;display:block;transition:width .6s ease,height .6s ease}
/* Seitenwechsel, Bildfolge und Wiederholung (seit 3.12.212) */
.fftpl .pgw{position:relative;flex:1 1 auto;min-height:0}
.fftpl .ti .pgw{width:100%;height:100%}
.fftpl .pgp{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;opacity:0;transition:opacity .5s ease}
.fftpl .pgp.on{opacity:1}
.fftpl .ti .pgp{align-items:center;justify-content:center}
.fftpl .trt>.v.rp{overflow:visible}
.fftpl .rp .pgp{display:block}
.fftpl .rw{position:absolute;left:0;top:0;width:100%;height:100%}
