/* Две одинаковые последовательности обеспечивают незаметный стык слева направо. */
.fg-preview .fg-panels.fg-door-ribbon{--tile-width:calc(100 * var(--u));--tile-gap:calc(20 * var(--u));position:absolute;inset:calc(120 * var(--u)) 0 auto;width:100%;height:calc(360 * var(--u));transform:none;overflow:hidden;pointer-events:none}
.fg-door-track{display:flex;width:max-content;height:100%;animation:virtus-door-ribbon 90s linear infinite;animation-play-state:paused;will-change:transform}
.fg-door-sequence{display:flex;flex:none;gap:var(--tile-gap);padding-right:var(--tile-gap);height:100%}
.fg-door-tile{width:var(--tile-width);height:100%;flex:none;overflow:hidden;clip-path:polygon(0 15%,100% 0,100% 85%,0 100%);background:#d3cec4}
.fg-door-tile img{width:100%;height:100%;object-fit:cover;object-position:center;filter:none;max-width:none}
.fg-door-ribbon.is-running .fg-door-track{animation-play-state:running}
@keyframes virtus-door-ribbon{from{transform:translateX(-50%)}to{transform:translateX(0)}}
@media(max-width:900px){.fg-preview .fg-panels.fg-door-ribbon{--tile-width:110px;--tile-gap:18px;top:100px;height:280px}}
@media(max-width:480px){.fg-preview .fg-panels.fg-door-ribbon{top:85px;height:250px}}
@media(prefers-reduced-motion:reduce){.fg-door-track{animation:none;transform:none;will-change:auto}}
@media print{.fg-door-track{animation:none;transform:none}}

/* Лента производства: тот же механизм, что у ленты дверей выше.
   Дорожка плоская (без оберток-последовательностей), чтобы на мобильной
   она превращалась обратно в сетку 2x2. Отступ между плитками задан
   margin-right, а не gap: тогда половина дорожки ровно равна одной
   последовательности и стык при translateX(-50%) не расходится. */
.fg-preview .fg-factory-ribbon{display:block;overflow:hidden}
.fg-factory-track{display:flex;width:max-content;height:100%}
.fg-preview .fg-factory-ribbon .fg-factory-image{width:calc(360 * var(--u));flex:none;margin-right:1px}
@media(min-width:901px){
 .fg-factory-track{animation:virtus-factory-ribbon 80s linear infinite;animation-play-state:paused;will-change:transform}
 .fg-factory-ribbon.is-running .fg-factory-track{animation-play-state:running}
}
@keyframes virtus-factory-ribbon{from{transform:translateX(-50%)}to{transform:translateX(0)}}
@media(max-width:900px){
 .fg-preview .fg-factory-ribbon{overflow:visible}
 .fg-factory-track{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;width:auto;height:auto;animation:none;transform:none}
 .fg-preview .fg-factory-ribbon .fg-factory-image{width:auto;margin-right:0}
 .fg-factory-image.is-clone{display:none}
}
@media(prefers-reduced-motion:reduce){.fg-factory-track{animation:none;transform:none;will-change:auto}}
@media print{.fg-factory-track{animation:none;transform:none}}
