/*
 * Анимация подвешенных элементов баннера
 * Подключение:
 * <link rel="stylesheet" href="/path/banner-parts-animation.css">
 */

.b-banner__visual {
    position: relative;

    width: 100%;
    overflow: hidden;

    aspect-ratio: 2 / 1;
}

.b-banner__img {
    display: block;

    width: 100%;
    height: 100%;

    object-fit: cover;
}

.b-banner__part {
    position: absolute;
    z-index: 2;

    pointer-events: none;

    transform: translate(-50%, -50%);
}

.b-banner__part-inner {
    position: relative;

    width: 100%;
    height: 100%;

    transform-origin: 50% -70%;
    will-change: transform;
}

.b-banner__part-img {
    position: relative;
    z-index: 2;

    display: block;

    width: 100%;
    height: 100%;

    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;

    filter:
        drop-shadow(0 10px 8px rgba(0, 0, 0, 0.14))
        drop-shadow(0 2px 2px rgba(0, 0, 0, 0.08));
}

/* Стропы */

.b-banner__rope {
    position: absolute;
    z-index: 1;

    bottom: calc(100% - 7px);

    width: 2px;
    height: var(--rope-height, 75%);

    border-radius: 10px;

    background: linear-gradient(
        to right,
        rgba(30, 30, 30, 0.85),
        rgba(105, 105, 105, 0.95),
        rgba(25, 25, 25, 0.85)
    );

    box-shadow:
        1px 0 1px rgba(255, 255, 255, 0.2),
        0 0 2px rgba(0, 0, 0, 0.25);

    transform-origin: bottom center;
}

.b-banner__rope--left {
    left: 26%;
    bottom: 79%;
    transform: rotate(var(--rope-left-angle, 15deg));
}

.b-banner__rope--right {
    right: 24%;
    bottom: 68%;
    transform: rotate(var(--rope-right-angle, -15deg));
}

/* Верхнее кольцо, в котором сходятся стропы */

.b-banner__part-inner::after {
    content: "";

    position: absolute;
    z-index: 3;

    top: calc(var(--rope-height, 75%) * -1 - 3px);
    left: 50%;

    width: 8px;
    height: 8px;

    border: 2px solid rgba(45, 45, 45, 0.9);
    border-radius: 50%;

    background: #777;

    box-shadow:
        0 1px 2px rgba(0, 0, 0, 0.35),
        inset 0 1px 1px rgba(255, 255, 255, 0.35);

    transform: translateX(-50%);
}

/* Левая панель */

.b-banner__part--panel-left {
    top: 38%;
    left: 57%;

    width: 12%;
    aspect-ratio: 2 / 3;

    --rope-height: 100%;
    --rope-left-angle: 9deg;
    --rope-right-angle: -8deg;
}

.b-banner__part--panel-left .b-banner__part-img {
    background-image: url("/UPLOAD/banners/parts/panel-left.png");
}

/* Правая панель */

.b-banner__part--panel-right {
    top: 42%;
    left: 95%;

    width: 12%;
    aspect-ratio: 2 / 3;

    --rope-height: 105%;
    --rope-left-angle: 6deg;
    --rope-right-angle: -6deg;
}

.b-banner__part--panel-right .b-banner__part-img {
    background-image: url("/UPLOAD/banners/parts/panel-right.png");
}

/* Крыша */

.b-banner__part--roof {
    top: 20%;
    left: 76%;

    width: 27%;
    aspect-ratio: 3 / 2;

    --rope-height: 75%;
    --rope-left-angle: 12deg;
    --rope-right-angle: -22deg;
}

.b-banner__part--roof .b-banner__rope--left {
    left: 15%;
    bottom: 50%;
}

.b-banner__part--roof .b-banner__rope--right {
    right: 12%;
    bottom: 45%;
}

.b-banner__part--roof .b-banner__part-img {
    background-image: url("/UPLOAD/banners/parts/roof.png");
}

/* Анимации */

.b-banner__part--panel-left .b-banner__part-inner {
    animation: b-banner-panel-left-swing 5.5s ease-in-out infinite;
}

.b-banner__part--panel-right .b-banner__part-inner {
    animation: b-banner-panel-right-swing 6.2s ease-in-out infinite;
}

.b-banner__part--roof .b-banner__part-inner {
    animation: b-banner-roof-swing 7s ease-in-out infinite;
}

@keyframes b-banner-panel-left-swing {
    0%,
    100% {
        transform: translate3d(0, 0, 0) rotate(-1.3deg);
    }

    50% {
        transform: translate3d(4px, 6px, 0) rotate(1.3deg);
    }
}

@keyframes b-banner-panel-right-swing {
    0%,
    100% {
        transform: translate3d(0, 0, 0) rotate(1deg);
    }

    50% {
        transform: translate3d(-4px, 5px, 0) rotate(-1.2deg);
    }
}

@keyframes b-banner-roof-swing {
    0%,
    100% {
        transform: translate3d(0, 0, 0) rotate(-0.35deg);
    }

    50% {
        transform: translate3d(0, 5px, 0) rotate(0.35deg);
    }
}

@media (max-width: 767px) {
    .b-banner__part-img {
        filter:
            drop-shadow(0 5px 5px rgba(0, 0, 0, 0.1))
            drop-shadow(0 1px 1px rgba(0, 0, 0, 0.06));
    }
}

@media (prefers-reduced-motion: reduce) {
    .b-banner__part-inner {
        animation: none !important;
    }
}
