.ufz {
--ufz-dot-size: 12px;
--ufz-line-w: 2px;
--ufz-stem: 2.25rem;
--ufz-pad-start: 0px;
--ufz-pad-end: 0px;
--ufz-sbw: 0px;
position: relative;
}
.ufz *,
.ufz *::before,
.ufz *::after {
box-sizing: border-box;
} .ufz--full {
width: calc(100vw - var(--ufz-sbw));
margin-left: calc(50% - (100vw - var(--ufz-sbw)) / 2);
margin-right: calc(50% - (100vw - var(--ufz-sbw)) / 2);
} .ufz__pin {
position: sticky;
top: var(--ufz-top);
height: calc(100vh - var(--ufz-top));
height: calc(100svh - var(--ufz-top));
overflow: hidden;
display: flex;
align-items: center;
}
.ufz__track {
position: relative;
display: flex;
width: max-content;
padding-left: var(--ufz-pad-start);
padding-right: var(--ufz-pad-end);
will-change: transform;
backface-visibility: hidden;
transform: translate3d(0, 0, 0);
}
.ufz__list {
display: flex;
gap: var(--ufz-gap);
margin: 0;
padding: 0;
list-style: none;
}
.ufz__item {
position: relative;
flex: 0 0 var(--ufz-card-w);
width: var(--ufz-card-w);
margin: 0;
padding: 0;
}
.ufz__item::marker {
content: none;
} .ufz__line {
position: absolute;
left: 0;
width: 100%;
height: var(--ufz-line-w);
background: var(--ufz-line);
transform: translateY(-50%);
pointer-events: none;
z-index: 0;
}
.ufz__line-fill {
position: absolute;
inset: 0;
background: var(--ufz-progress);
transform-origin: 0 50%;
transform: scaleX(0);
will-change: transform;
} .ufz__dot {
position: relative;
z-index: 2;
display: block;
width: var(--ufz-dot-size);
height: var(--ufz-dot-size);
border-radius: 0;
background: var(--ufz-line);
outline: 1px solid transparent;
outline-offset: 0;
transition: background-color 0.4s ease, outline-color 0.4s ease, outline-offset 0.5s cubic-bezier(0.2, 0.7, 0.2, 1);
} .ufz__item.is-active .ufz__dot {
background: var(--ufz-dot);
outline-color: var(--ufz-dot);
outline-offset: 4px;
} .ufz__item::before {
content: "";
position: absolute;
left: calc(var(--ufz-dot-size) / 2 - 1px);
width: 2px;
height: var(--ufz-stem);
background: var(--ufz-line);
z-index: 1;
transition: background-color 0.4s ease;
}
.ufz__item.is-active::before {
background: var(--ufz-progress);
} .ufz__card {
position: relative;
z-index: 1;
}
.ufz--card .ufz__card {
background: var(--ufz-card-bg);
border-radius: var(--ufz-radius);
padding: 1.25em 1.5em;
}
.ufz .ufz__year {
display: block;
margin: 0 0 0.15em;
}
.ufz .ufz__title {
margin: 0 0 0.4em;
padding: 0;
}
.ufz .ufz__text > :first-child {
margin-top: 0;
}
.ufz .ufz__text > :last-child {
margin-bottom: 0;
}
.ufz .ufz__text p {
margin: 0 0 0.6em;
} .ufz--alternate .ufz__track {
height: var(--ufz-h);
max-height: 100%;
}
.ufz--alternate .ufz__list {
height: 100%;
}
.ufz--alternate .ufz__line {
top: 50%;
}
.ufz--alternate .ufz__item {
display: grid;
grid-template-rows: minmax(0, 1fr) auto minmax(0, 1fr);
height: 100%;
}
.ufz--alternate .ufz__dot {
grid-row: 2;
}
.ufz--alternate .ufz__item:nth-child(odd) .ufz__card {
grid-row: 1;
align-self: end;
margin-bottom: var(--ufz-stem);
}
.ufz--alternate .ufz__item:nth-child(even) .ufz__card {
grid-row: 3;
align-self: start;
margin-top: var(--ufz-stem);
}
.ufz--alternate .ufz__item:nth-child(odd)::before {
bottom: 50%;
}
.ufz--alternate .ufz__item:nth-child(even)::before {
top: 50%;
} .ufz--bottom .ufz__line {
top: calc(var(--ufz-dot-size) / 2);
}
.ufz--bottom .ufz__item::before {
top: calc(var(--ufz-dot-size) / 2);
height: calc(var(--ufz-stem) * 0.75);
}
.ufz--bottom .ufz__card {
margin-top: calc(var(--ufz-stem) * 0.75);
} .ufz--ready.ufz--highlight .ufz__card {
opacity: 0.3;
transform: translate3d(0, 10px, 0);
transition: opacity 0.6s ease, transform 0.8s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.ufz--ready.ufz--highlight.ufz--alternate:not(.ufz--vertical) .ufz__item:nth-child(odd) .ufz__card {
transform: translate3d(0, -10px, 0);
}
.ufz--ready.ufz--highlight .ufz__item.is-active .ufz__card {
opacity: 1;
transform: none !important;
} .ufz--vertical {
height: auto !important;
}
.ufz--vertical .ufz__pin {
position: relative;
top: auto;
height: auto;
overflow: visible;
display: block;
}
.ufz--vertical .ufz__track {
width: auto;
height: auto;
max-height: none;
padding: 0;
transform: none !important;
will-change: auto;
}
.ufz--vertical .ufz__list {
flex-direction: column;
gap: 2.5rem;
height: auto;
}
.ufz--vertical .ufz__item {
display: grid;
grid-template-columns: var(--ufz-dot-size) minmax(0, 1fr);
grid-template-rows: auto;
column-gap: 1.25rem;
width: auto;
height: auto;
flex: none;
}
.ufz--vertical .ufz__item::before {
display: none;
}
.ufz--vertical .ufz__dot {
grid-row: 1;
grid-column: 1;
margin-top: 0.35em;
}
.ufz--vertical .ufz__item .ufz__card {
grid-row: 1 !important;
grid-column: 2;
align-self: start !important;
margin: 0 !important;
}
.ufz--vertical .ufz__line {
top: 0;
left: calc(var(--ufz-dot-size) / 2);
width: var(--ufz-line-w);
height: 100%;
transform: translateX(-50%);
}
.ufz--vertical .ufz__line-fill {
transform-origin: 50% 0;
transform: scaleY(0);
}
.ufz--vertical.ufz--full {
width: auto;
margin-left: 0;
margin-right: 0;
} .ufz-notice {
padding: 1em;
border: 1px dashed currentColor;
opacity: 0.7;
}
@media (prefers-reduced-motion: reduce) {
.ufz__dot,
.ufz__item::before,
.ufz--ready.ufz--highlight .ufz__card {
transition: none;
}
} .ufz--slides .ufz__pin {
justify-content: center;
}
.ufz__stage {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
padding: 0 clamp(16px, 4vw, 48px);
text-align: center;
}
.ufz--align-left .ufz__stage {
align-items: flex-start;
text-align: left;
} .ufz__layer {
display: grid;
width: 100%;
}
.ufz__layer > .ufz__s {
grid-area: 1 / 1;
min-width: 0;
}
.ufz__s {
visibility: visible;
}
.ufz__s.is-past,
.ufz__s.is-future {
visibility: hidden;
} .ufz--slides:not(.ufz--ready) .ufz__s {
transition: none !important;
}
.ufz--slides:not(.ufz--ready) .ufz__layer > .ufz__s:not(:first-child) {
opacity: 0;
visibility: hidden;
} .ufz__media {
height: var(--ufz-media-h);
grid-template-rows: var(--ufz-media-h);
overflow: hidden;
}
.ufz__media-slide {
display: flex;
gap: 6px;
height: var(--ufz-media-h);
opacity: 1;
transform: scale(1);
transition:
opacity calc(var(--ufz-dur) * 1.2) ease,
transform calc(var(--ufz-dur) * 1.8) cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s;
}
.ufz__media-slide.is-past,
.ufz__media-slide.is-future {
opacity: 0;
transform: scale(1.03);
transition:
opacity calc(var(--ufz-dur) * 1.2) ease,
transform calc(var(--ufz-dur) * 1.8) cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s linear calc(var(--ufz-dur) * 1.2);
}
.ufz .ufz__img {
flex: 1 1 0;
min-width: 0;
width: 100%;
height: 100%;
max-width: none;
object-fit: cover;
border-radius: 0;
} .ufz__years {
position: relative;
z-index: 2;
overflow: hidden;
padding: 0.04em 0;
}
.ufz--has-media .ufz__years {
margin-top: -0.42em;
}
.ufz--slides .ufz__year {
display: block;
margin: 0;
white-space: nowrap;
opacity: 1;
transform: translate3d(0, 0, 0);
transition:
transform calc(var(--ufz-dur) * 0.9) cubic-bezier(0.22, 1, 0.36, 1),
opacity calc(var(--ufz-dur) * 0.6) ease,
visibility 0s;
will-change: transform, opacity;
}
.ufz--slides .ufz__year.is-past {
opacity: 0;
transform: translate3d(0, -65%, 0);
}
.ufz--slides .ufz__year.is-future {
opacity: 0;
transform: translate3d(0, 65%, 0);
}
.ufz--slides .ufz__year.is-past,
.ufz--slides .ufz__year.is-future {
transition:
transform calc(var(--ufz-dur) * 0.9) cubic-bezier(0.22, 1, 0.36, 1),
opacity calc(var(--ufz-dur) * 0.6) ease,
visibility 0s linear calc(var(--ufz-dur) * 0.9);
} .ufz__titles {
margin-top: 0.6rem;
}
.ufz__texts {
margin-top: 0.75rem;
max-width: 46rem;
}
.ufz--align-center .ufz__texts {
margin-left: auto;
margin-right: auto;
}
.ufz--slides .ufz__title,
.ufz--slides .ufz__text {
margin: 0;
opacity: 1;
transform: translate3d(0, 0, 0);
transition:
transform var(--ufz-dur) var(--ufz-ease),
opacity calc(var(--ufz-dur) * 0.8) ease,
visibility 0s;
will-change: transform, opacity;
} .ufz--slides .ufz__text.is-active {
transition-delay: 70ms;
}
.ufz--slides .ufz__title.is-future,
.ufz--slides .ufz__text.is-future {
opacity: 0;
transform: translate3d(4rem, 0, 0);
}
.ufz--slides .ufz__title.is-past,
.ufz--slides .ufz__text.is-past {
opacity: 0;
transform: translate3d(-4rem, 0, 0);
}
.ufz--slides .ufz__title.is-past,
.ufz--slides .ufz__title.is-future,
.ufz--slides .ufz__text.is-past,
.ufz--slides .ufz__text.is-future {
transition:
transform var(--ufz-dur) var(--ufz-ease),
opacity calc(var(--ufz-dur) * 0.8) ease,
visibility 0s linear var(--ufz-dur);
} .ufz__nav {
display: inline-flex;
align-items: center;
gap: 0.9em;
margin-top: clamp(1.5rem, 6vh, 4rem);
font-variant-numeric: tabular-nums;
}
.ufz .ufz__arrow {
all: unset;
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0.4em;
color: inherit;
cursor: pointer;
transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.3s ease;
}
.ufz .ufz__arrow svg {
display: block;
width: 1.5em;
height: auto;
}
.ufz .ufz__arrow--prev:hover {
transform: translateX(-3px);
}
.ufz .ufz__arrow--next:hover {
transform: translateX(3px);
}
.ufz .ufz__arrow[disabled] {
opacity: 0.3;
cursor: default;
transform: none;
}  .ufz .ufz__skip {
all: unset;
box-sizing: border-box;
position: absolute;
left: 50%;
bottom: clamp(1rem, 4vh, 2.5rem);
z-index: 6;
display: grid;
padding: 0.5em 0;
color: var(--ufz-nav);
cursor: pointer;
opacity: 0;
visibility: hidden;
pointer-events: none;
transform: translate3d(-50%, 8px, 0);
transition:
opacity 0.35s ease,
transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s linear 0.45s;
}
.ufz--dir-down .ufz__skip,
.ufz--dir-up .ufz__skip {
opacity: 0.8;
visibility: visible;
pointer-events: auto;
transform: translate3d(-50%, 0, 0);
transition:
opacity 0.35s ease,
transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s;
}
.ufz .ufz__skip:hover,
.ufz .ufz__skip:focus-visible {
opacity: 1;
}
.ufz .ufz__skip:focus-visible {
outline: 1px solid currentColor;
outline-offset: 4px;
} .ufz__skip-opt {
grid-area: 1 / 1;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.6em;
white-space: nowrap;
transition:
opacity 0.3s ease,
transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.ufz__skip-opt--up {
opacity: 0;
transform: translate3d(0, -6px, 0);
}
.ufz--dir-up .ufz__skip-opt--down {
opacity: 0;
transform: translate3d(0, 6px, 0);
}
.ufz--dir-up .ufz__skip-opt--up {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.ufz .ufz__skip svg {
display: block;
width: 0.75em;
height: auto;
transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}
.ufz .ufz__skip-opt--down svg {
order: 2;
}
.ufz .ufz__skip:hover .ufz__skip-opt--down svg {
transform: translateY(3px);
}
.ufz .ufz__skip:hover .ufz__skip-opt--up svg {
transform: translateY(-3px);
} .ufz--vertical .ufz__skip {
display: none;
} .ufz__stage,
.ufz__track {
transition: opacity 0.26s ease;
}
.ufz--skipping .ufz__stage,
.ufz--skipping .ufz__track,
.ufz--skipping .ufz__skip {
opacity: 0 !important;
pointer-events: none;
}
.ufz__after:focus {
outline: none;
} .ufz__sr {
position: absolute !important;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
border: 0;
}
@media (prefers-reduced-motion: reduce) {
.ufz--slides .ufz__s {
transition-duration: 0.01ms !important;
transition-delay: 0s !important;
}
}