diff --git a/assets/img/minus-circle.svg b/assets/img/minus-circle.svg new file mode 100644 index 00000000..2703cc89 --- /dev/null +++ b/assets/img/minus-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/plus.svg b/assets/img/plus.svg new file mode 100644 index 00000000..5a7726bf --- /dev/null +++ b/assets/img/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/blocks/bacom-elastic-carousel/bacom-elastic-carousel.css b/blocks/bacom-elastic-carousel/bacom-elastic-carousel.css index fa33bebd..717071de 100644 --- a/blocks/bacom-elastic-carousel/bacom-elastic-carousel.css +++ b/blocks/bacom-elastic-carousel/bacom-elastic-carousel.css @@ -1,512 +1,352 @@ -/* Migrated verbatim from source repo (c2-block-migration branch); style violations left as-is pending reconciliation with this repo's conventions. */ -/* stylelint-disable */ - -/** main classes */ - -html[dir="rtl"] { - .bacom-elastic-carousel { - & .elastic-carousel-container { - & .elastic-carousel-item { - & .elastic-carousel-item-footer { - &:after { - transform: rotate(180deg); - left: 0; - right: unset; - } - } - - & .elastic-carousel-item-header { - &:after { - transform: rotate(180deg); - left: 0; - right: unset; - } - } - } - } - } -} +/* stylelint-disable no-descending-specificity */ .bacom-elastic-carousel { - --elastic-carousel-transtions: all .5s ease; - --elastic-carousel-container-height-desktop: 590px; - --elastic-carousel-container-height-tablet: 572px; - --elastic-carousel-item-max-width: 294px; - --elastic-carousel-item-hover-grow-index: 1.75; - --slides: 5; - --start-gap: 2.75rem; - --end-gap: .25rem; - --paralax-easing: cubic-bezier(0.42, 0, 0, 1); - --elastic-carousel-container-width: calc((var(--slides) * var(--elastic-carousel-item-max-width)) + (var(--slides) * (var(--end-gap) * 2))); - - height: var(--elastic-carousel-container-height-desktop); + --elastic-carousel-item-width: 294px; + --elastic-carousel-gap: var(--s2a-spacing-md); + position: relative; - overflow: clip; margin: auto; + background-color: #000; +} - .elastic-carousel-container { - display: flex; - position: absolute; - left: 0; - transform: translateX(calc(50vw - 50%)); - transition: transform .5s ease; - max-width: var(--elastic-carousel-container-width); - - .elastic-carousel-item { - display: flex; - flex-direction: column; - position: relative; - text-decoration: none; - color: inherit; - width: var(--elastic-carousel-item-max-width); - max-width: var(--elastic-carousel-item-max-width); - background-color: var(--s2a-color-gray-75); - border-radius: var(--s2a-border-radius-md); - cursor: pointer; - will-change: width, max-width; - transition: max-width .3s var(--paralax-easing), width .3s var(--paralax-easing), background-color .2s ease; - contain: layout; - - .elastic-carousel-item-header { - display: flex; - flex-direction: row; - padding: var(--s2a-spacing-lg); - gap: var(--s2a-spacing-md); - align-items: center; - - img { - width: 24px; - height: 24px; - } - - p { - font-size: var(--s2a-font-size-sm); - font-weight: var(--s2a-font-weight-adobe-clean-bold); - color: var(--s2a-color-gray-1000); - margin: 0; - transition: color .1s ease; - line-height: var(--s2a-font-line-height-18); - display: -webkit-box; - line-clamp: 1; - box-orient: vertical; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - overflow: hidden; - } - } - - .elastic-carousel-item-media { - text-align: center; - - video { - border-radius: var(--s2a-border-radius-md); - object-fit: cover; - height: 394px; - width: 100%; - } - } - - .elastic-carousel-item-footer { - display: flex; - flex-direction: column; - padding: var(--s2a-spacing-lg); - max-width: 270px; - font-size: var(--s2a-font-size-md); - line-height: var(--s2a-font-line-height-16); - - &:after { - content: ''; - display: block; - background: url('../../assets/img/arrow-right.svg') no-repeat; - width: 24px; - height: 24px; - margin: var(--s2a-spacing-lg); - position: absolute; - right: 0; - bottom: 0; - opacity: 0; - transition: none; - } - - :is(h1, h2, h3, h4, h5, h6) { - /* TODO: remove eyebrow styles if eyebrow class is applied directly to footer headline */ - font-family: var(--body-font-family); - font-size: var(--s2a-typography-font-size-eyebrow); - font-weight: var(--s2a-font-weight-adobe-clean-bold); - line-height: var(--s2a-typography-line-height-eyebrow); - letter-spacing: var(--s2a-typography-letter-spacing-eyebrow); - margin: 0 0 var(--s2a-spacing-2xs) 0; - transition: color .1s ease; - display: -webkit-box; - line-clamp: 1; - box-orient: vertical; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - overflow: hidden; - } - - p { - opacity: .6; - margin: 0; - transition: color .1s ease; - display: -webkit-box; - line-clamp: 2; - box-orient: vertical; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; - } - } - } - } +.bacom-elastic-carousel .elastic-carousel-container { + display: flex; + gap: var(--elastic-carousel-gap); + overflow-x: auto; + scroll-snap-type: x mandatory; + scrollbar-width: none; + scroll-behavior: smooth; + padding-top: 56px; } +.bacom-elastic-carousel .elastic-carousel-container::-webkit-scrollbar { + display: none; +} -/** custom media rules */ -@media (768px <= width < 1700px) { - .elastic-carousel-container { - left: 50%; - transform: translateX(-50%); +.bacom-elastic-carousel .elastic-carousel-item-wrap { + display: contents; +} - &.stick-left { - transform: translateX(0); - } +.bacom-elastic-carousel .elastic-carousel-scrubber { + display: none; +} - &.stick-right { - transform: translateX(calc(100vw - 100%)); - } - } +.bacom-elastic-carousel .elastic-carousel-item { + display: flex; + flex: 0 0 auto; + flex-direction: column; + width: var(--elastic-carousel-item-width); + max-width: 346px; + max-height: 485px; + overflow: hidden; + scroll-snap-align: start; + text-decoration: none; + color: inherit; + background-color: #FFF; + border-radius: var(--s2a-border-radius-md); + cursor: pointer; } -/** desktop only */ -@media (1280px <= width) { - .elastic-carousel-container { - max-height: var(--elastic-carousel-container-height-desktop); +.bacom-elastic-carousel .elastic-carousel-item-container { + display: flex; + flex-direction: column; + height: auto; + max-width: 346px; + overflow: hidden; +} - .elastic-carousel-item { - width: calc(100vw/calc(var(--slides) - 1)); - } - } +.bacom-elastic-carousel .elastic-carousel-item-header { + display: flex; + flex: 0 0 auto; + flex-direction: column; + gap: var(--s2a-spacing-xs); + padding: var(--s2a-spacing-lg); } -/** tablet only */ -@media (768px <= width < 1280px) { - .bacom-elastic-carousel { - height: var(--elastic-carousel-container-height-tablet); +.bacom-elastic-carousel .elastic-carousel-item-header-row { + display: flex; + flex-direction: row; + align-items: center; + gap: var(--s2a-spacing-md); +} - .elastic-carousel-container { - height: 100%; - max-height: var(--elastic-carousel-container-height-tablet); +.bacom-elastic-carousel .elastic-carousel-item-header img { + width: 24px; + height: 24px; +} - .elastic-carousel-item { - width: calc(100vw / calc(var(--slides) - 1.5)); +.bacom-elastic-carousel .elastic-carousel-item-header-row p { + margin: 0; + color: var(--s2a-color-gray-1000); + font-size: var(--s2a-font-size-sm); + font-weight: var(--s2a-font-weight-adobe-clean-bold); + line-height: var(--s2a-font-line-height-18); +} - .elastic-carousel-item-header { - padding: var(--s2a-spacing-md); - } - } - } - } +.bacom-elastic-carousel .elastic-carousel-item-media { + flex: 1 1 auto; + min-height: 0; + text-align: center; } -/** tablet up */ -@media (width >= 768px) { - .bacom-elastic-carousel { - padding: 2px 0; - - &.disable-hover { - pointer-events: none; - } - - html[dir="rtl"] .elastic-carousel-container { - --start-margin: -200px; - } - - .elastic-carousel-container { - --start-margin: 200px; - /** animation */ - animation: elasticCarouselSlideIn var(--parallax-easing) both; - animation-timeline: view(); - animation-range: entry 20% exit 100%; - - .elastic-carousel-item { - - &:nth-child(2) { - --start-gap: 2.25rem; - } - - &:nth-child(3) { - --start-gap: 1.75rem; - } - - &:nth-child(4) { - --start-gap: 1rem; - } - - &:nth-child(5) { - --start-gap: .5rem; - } - - margin-inline: var(--start-gap); - will-change: margin-inline; - animation: elasticItemsGapShrink var(--parallax-easing) both; - animation-timeline: view(); - animation-range: entry 0% exit 100%; - - &.hovered, - &:focus-visible { - background-color: var(--s2a-color-gray-1000); - max-width: 496px; - width: calc((100vw/calc(var(--slides)))*var(--elastic-carousel-item-hover-grow-index)); - - .elastic-carousel-item-footer p, - .elastic-carousel-item-header p { - color: var(--s2a-color-gray-25); - } - - .elastic-carousel-item-footer { - - h1, - h2, - h3, - h4, - h5, - h6 { - color: var(--s2a-color-gray-25); - } - } - - .elastic-carousel-item-footer:after { - opacity: 1; - background-color: var(--s2a-color-gray-25); - border-radius: var(--s2a-border-radius-round); - background-position: 55% 50%; - background-size: 8px; - position: absolute; - } - } - } - } - } +.bacom-elastic-carousel .elastic-carousel-item-media video { + display: block; + width: 100%; + height: 316px; + max-height: 316px; + object-fit: cover; + border-radius: var(--s2a-border-radius-md); } -/* mobile only */ -@media (width < 768px) { - .bacom-elastic-carousel { - --offset-adjuster: 50px; - --offset-scale: .85; - --last-offset: 2.5rem; - --offset-variance-index: -2px; +/* Hides the badge some browser extensions (e.g. Video Speed Controller) inject onto