Files
ElyOffice/site/src/tour.css
T

249 lines
3.7 KiB
CSS

/* One stage pins while the camera visits each app. */
.tour {
--span: 100svh;
position: relative;
height: calc(var(--span) * 8);
}
@media (prefers-reduced-motion: no-preference) {
html {
scroll-behavior: smooth;
}
}
.pin {
position: sticky;
top: 0;
height: var(--span);
overflow: clip;
}
.pin .hero {
position: absolute;
inset: 0 0 auto;
z-index: 1;
}
.pin .model {
position: absolute;
inset: 0;
max-width: none;
}
.world {
position: absolute;
top: 0;
left: 0;
transform-origin: 0 0;
}
.world .stage {
max-width: none;
}
.stop {
position: absolute;
left: 0;
width: 1px;
height: 1px;
}
/* Screen rows land on sixteenths as the reader arrives. */
.grow .block.slab {
animation: none;
}
.block.slab {
opacity: 0;
visibility: hidden;
translate: 0 calc(-1 * var(--step));
transition:
opacity 0.1s ease-out,
translate 0.1s ease-out,
visibility 0s 0.1s;
}
.block.slab.up {
opacity: 1;
visibility: visible;
translate: 0 0;
transition:
opacity 0.2s cubic-bezier(0.2, 0.8, 0.3, 1) var(--at),
translate 0.2s cubic-bezier(0.2, 0.8, 0.3, 1) var(--at);
}
.clip {
position: absolute;
top: 0;
left: 0;
width: 320px;
height: 180px;
object-fit: fill;
transform-origin: 0 0;
cursor: pointer;
opacity: 0;
visibility: hidden;
transition:
opacity 0.1s ease-out,
visibility 0s 0.1s;
}
.clip.up {
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-out var(--at);
}
/* The copy owns a plain strip beside the model. */
.copy {
position: absolute;
inset: 0 auto 0 0;
z-index: 1;
display: grid;
align-items: center;
box-sizing: border-box;
width: 38%;
padding: 0 3vw 0 7vw;
background: var(--page);
translate: -100% 0;
transition: translate 0.2s cubic-bezier(0.2, 0.8, 0.3, 1);
}
.touring .copy {
translate: 0 0;
}
:root[data-theme="dark"] {
--page: #252525;
}
.copy article {
display: grid;
grid-area: 1 / 1;
gap: 1rem;
justify-items: start;
align-content: center;
opacity: 0;
visibility: hidden;
transition:
opacity 0.15s ease-out,
visibility 0s 0.15s;
}
.copy article.current {
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-out 0.1s;
}
.acts {
display: flex;
gap: 2rem;
align-items: baseline;
}
.get,
.toggle-clip {
font-size: 1.0625rem;
opacity: 0;
transition: opacity 0.15s ease-out;
}
.toggle-clip {
padding: 0;
border: 0;
background: none;
font: inherit;
font-size: 1.0625rem;
font-weight: 300;
color: var(--quiet);
cursor: pointer;
}
.copy:hover :is(.get, .toggle-clip),
.copy article:focus-within :is(.get, .toggle-clip) {
opacity: 1;
}
.rail {
position: absolute;
top: 50%;
right: 2rem;
z-index: 1;
display: grid;
gap: 0.5rem;
translate: 0 -50%;
opacity: 0;
visibility: hidden;
transition:
opacity 0.15s ease-out,
visibility 0s 0.15s;
}
.touring .rail {
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-out;
}
.rail a {
display: block;
padding: 0.25rem;
}
.rail .stage {
width: 1.25rem;
}
.rail .block {
transition: translate 0.15s ease-out;
}
.rail a:hover .block,
.rail a:focus-visible .block {
translate: 0 -4px;
}
.rail a[aria-current] .block {
--ink: var(--accent);
}
@media (hover: none) {
.get,
.toggle-clip {
opacity: 1;
}
}
@media (max-width: 760px) {
.copy {
inset: 58% 0 0;
align-items: start;
width: auto;
padding: 2rem 1.5rem 0;
translate: 0 100%;
}
.rail {
top: 30%;
right: 0.75rem;
}
}
@media (prefers-reduced-motion: reduce) {
.copy,
.block.slab,
.block.slab.up,
.clip,
.clip.up,
.copy article,
.copy article.current,
.rail,
.touring .rail,
.rail .block,
.get,
.toggle-clip {
transition: none;
}
}