@use '../../../../../ui-design-system/src/styles/semantic/index' as *; .ui-lp-logo-cloud { padding: $semantic-spacing-layout-section-md 0; background: $semantic-color-surface-primary; // Header Section &__header { text-align: center; margin-bottom: $semantic-spacing-layout-section-sm; max-width: 600px; margin-left: auto; margin-right: auto; } &__title { font-family: map-get($semantic-typography-heading-h3, font-family); font-size: map-get($semantic-typography-heading-h3, font-size); font-weight: map-get($semantic-typography-heading-h3, font-weight); line-height: map-get($semantic-typography-heading-h3, line-height); color: $semantic-color-text-primary; margin-bottom: $semantic-spacing-content-heading; } &__subtitle { font-family: map-get($semantic-typography-body-medium, font-family); font-size: map-get($semantic-typography-body-medium, font-size); font-weight: map-get($semantic-typography-body-medium, font-weight); line-height: map-get($semantic-typography-body-medium, line-height); color: $semantic-color-text-secondary; margin: 0; } // Container Layouts &__container { display: flex; align-items: center; justify-content: center; width: 100%; } // Row Layout &__container--row { flex-wrap: wrap; gap: $semantic-spacing-component-xl; @media (max-width: $semantic-breakpoint-lg - 1) { gap: $semantic-spacing-component-lg; } @media (max-width: $semantic-breakpoint-md - 1) { gap: $semantic-spacing-component-md; } } // Grid Layout &__container--grid { display: grid; grid-template-columns: repeat(var(--items-per-row, 5), 1fr); gap: $semantic-spacing-component-xl; width: 100%; @media (max-width: $semantic-breakpoint-lg - 1) { grid-template-columns: repeat(4, 1fr); gap: $semantic-spacing-component-lg; } @media (max-width: $semantic-breakpoint-md - 1) { grid-template-columns: repeat(3, 1fr); gap: $semantic-spacing-component-md; } @media (max-width: $semantic-breakpoint-sm - 1) { grid-template-columns: repeat(2, 1fr); gap: $semantic-spacing-component-sm; } } // Marquee Layout &__container--marquee { overflow: hidden; width: 100%; position: relative; } &__marquee { width: 100%; overflow: hidden; } &__marquee-track { display: flex; gap: $semantic-spacing-component-xl; animation: marqueeScroll 30s linear infinite; width: calc(200% + #{$semantic-spacing-component-xl}); @media (prefers-reduced-motion: reduce) { animation: none; width: auto; flex-wrap: wrap; justify-content: center; } } // Logo Items &__item { display: flex; align-items: center; justify-content: center; padding: $semantic-spacing-component-md; border-radius: $semantic-border-card-radius; transition: all $semantic-motion-duration-fast $semantic-motion-easing-ease; &:hover { background: $semantic-color-surface-hover; } a { display: flex; align-items: center; justify-content: center; text-decoration: none; &:focus-visible { outline: 2px solid $semantic-color-primary; outline-offset: 2px; border-radius: $semantic-border-button-radius; } } img { max-height: var(--max-height, 80px); max-width: 200px; width: auto; height: auto; object-fit: contain; transition: all $semantic-motion-duration-normal $semantic-motion-easing-ease; } // Animation delays for staggered entrance @media (prefers-reduced-motion: no-preference) { opacity: 0; transform: translateY(20px); animation: fadeInUp $semantic-motion-duration-slow $semantic-motion-easing-ease forwards; animation-delay: var(--animation-delay, 0ms); } } // Grayscale Effects &--grayscale &__item img, &__logo--grayscale { filter: grayscale(100%); opacity: $semantic-opacity-subtle; } &--hover &__item:hover img, &--hover &__item:hover &__logo--grayscale { filter: grayscale(0%); opacity: 1; transform: scale(1.05); } // Responsive adjustments for marquee .ui-lp-logo-cloud--marquee &__item { flex-shrink: 0; min-width: 180px; @media (max-width: $semantic-breakpoint-md - 1) { min-width: 140px; } @media (max-width: $semantic-breakpoint-sm - 1) { min-width: 120px; } } // Small screen optimizations @media (max-width: $semantic-breakpoint-md - 1) { &__item { padding: $semantic-spacing-component-sm; img { max-height: 60px; max-width: 150px; } } &__marquee-track { gap: $semantic-spacing-component-lg; } } @media (max-width: $semantic-breakpoint-sm - 1) { &__item img { max-height: 50px; max-width: 120px; } &__marquee-track { gap: $semantic-spacing-component-md; } } } // Keyframes @keyframes marqueeScroll { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } @keyframes fadeInUp { to { opacity: 1; transform: translateY(0); } }