*, *::after, *::before { box-sizing: border-box; } :root { font-size: 18px; } body { margin: 0; --color-text: #fff; --color-text-alt: #747474; --color-bg: #1f1b18; --color-bg-cover: #1f1b18; --color-link: #fff; --color-link-hover: #fff; --color-map: #5b5958; --cursor-fill: #b74946; --cursor-text: #000; --padding-page: 2rem; --color-dot: #b93434; --img-width: 110; --img-height: 133; --img-ratio: calc(var(--img-height) / var(--img-width)); --map-width: 30px; --map-height: calc(var(--img-ratio) * var(--map-width)); color: var(--color-text); background-color: var(--color-bg); font-family: forma-djr-deck, sans-serif; font-weight: 500; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Page Loader */ .js .loading::before, .js .loading::after { content: ''; position: fixed; z-index: 2000; } .js .loading::before { top: 0; left: 0; width: 100%; height: 100%; background: var(--color-bg); } .js .loading::after { top: 50%; left: 50%; width: 60px; height: 60px; margin: -30px 0 0 -30px; border-radius: 50%; opacity: 0.4; background: var(--color-link); animation: loaderAnim 0.7s linear infinite alternate forwards; } @keyframes loaderAnim { to { opacity: 1; transform: scale3d(0.5,0.5,1); } } a { text-decoration: none; color: var(--color-link); outline: none; } a:hover { color: var(--color-link-hover); outline: none; } /* Better focus styles from https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible */ a:focus { /* Provide a fallback style for browsers that don't support :focus-visible */ outline: none; background: lightgrey; } a:focus:not(:focus-visible) { /* Remove the focus indicator on mouse-focus for browsers that do support :focus-visible */ background: transparent; } a:focus-visible { /* Draw a very noticeable focus style for keyboard-focus on browsers that do support :focus-visible */ outline: 2px solid red; background: transparent; } .oh { overflow: hidden; } .oh__inner { line-height: 1; } .line { transform-origin: 0% 50%; white-space: nowrap; will-change: transform; } .hover-line { white-space: nowrap; overflow: hidden; position: relative; } .hover-line::before { content: ''; height: 1px; width: 100%; background: currentColor; opacity: 0.7; position: absolute; top: 92%; transition: transform 0.3s; transform-origin: 0% 50%; } .hover-line:hover::before { transform: scaleX(0); transform-origin: 100% 50%; } .unbutton { background: none; border: 0; padding: 0; margin: 0; font: inherit; } .unbutton:focus { outline: none; } main { position: relative; display: grid; width: 100%; height: 100vh; grid-template-rows: auto 1fr auto; grid-template-areas: 'header' 'content' 'footer'; padding: var(--padding-page); } .frame { text-align: center; position: relative; font-family: meno-banner, serif; font-style: italic; font-weight: 400; z-index: 1000; padding-bottom: 1rem; } .frame--header { grid-area: header; } .frame--footer { grid-area: footer; } .frame__title { grid-area: title; font-size: 1rem; margin: 0 0 1rem; font-weight: 400; } .frame__links { grid-area: links; } .frame__links a:not(:last-child), .frame__demos a:not(:last-child) { margin-right: 1rem; } .frame__demos { grid-area: demos; margin: 1rem 0; } .frame__demo--current, .frame__demo--current:hover { color: var(--color-text); opacity: 0.5; } .cursor { display: none; } .content { grid-area: content; display: flex; flex-direction: row; width: 100%; position: relative; justify-content: space-between; align-items: flex-start; } .thumb { flex: none; margin: 3rem 0; cursor: pointer; } .thumb__img { overflow: hidden; position: relative; width: calc(var(--img-width) * 1px); height: calc(var(--img-height) * 1px); } .thumb__img--nocursor:hover { cursor: none; } .thumb__img-inner { background-size: cover; background-position: 50% 50%; width: 100%; height: 100%; } .thumb__caption { font-family: meno-banner, serif; font-style: italic; font-weight: 400; padding-top: 0.25rem; } .thumb__caption-inner { display: inline-block; } .preview { position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; display: grid; } .preview__item { grid-area: 1 / 1 / 2 / 2; width: 100%; height: 100%; overflow: hidden; position: relative; display: grid; grid-template-areas: 'img' 'columns'; grid-template-columns: 100%; grid-template-rows: 50% 50%; z-index: 1; } .preview__img { grid-area: img; } .preview__item-cover { background: var(--color-bg); grid-area: columns; transform-origin: 50% 100%; transform: scaleY(2); } .preview__img-inner { width: 100%; height: 100%; transform-origin: 50% 100%; background-size: cover; background-position: 50% 20%; will-change: transform, filter; backface-visibility: hidden; } .columns { position: relative; grid-area: columns; display: grid; grid-template-columns: 100%; grid-template-rows: 4rem auto auto; grid-template-areas: '...' 'column-1' 'column-2'; } .column { grid-area: column-1; padding: var(--padding-page) var(--padding-page) 0; } .column:nth-child(2) { grid-area: column-2; } .column__title { font-weight: 500; font-size: 1.75rem; font-size: clamp(1rem,3vw,1.75rem); margin-top: 0; } .column__text { font-size: 0.95rem; font-size: clamp(0.75rem,1.5vw,0.95rem); color: var(--color-text-alt); max-width: 90%; } .line-effect { opacity: 0; } .preview__map { opacity: 0; z-index: 1000; position: absolute; left: 0; width: 100%; top: 50%; padding: var(--padding-page); display: flex; justify-content: center; } .preview__map-item { flex: none; width: var(--map-width); height: var(--map-height); border: 1px solid var(--color-map); margin: 0 1.15rem; position: relative; } .dot { width: 6px; height: 6px; border-radius: 50%; position: absolute; background: var(--color-dot); opacity: 0; } @media screen and (min-width: 60em) { body { --img-width: 220; --img-height: 265; } main { overflow: hidden; } .frame { text-align: left; display: grid; grid-template-columns: auto 1fr auto; justify-content: space-between; align-items: baseline; grid-gap: 7vw; padding: 0; } .frame--header { grid-template-areas: 'title links sponsor'; } .frame--footer { grid-template-areas: 'demos demos demos'; } .frame__demos { margin: 0; } .content { align-items: center; } .thumb { margin: 1rem 0; } .columns { grid-template-columns: 300px auto minmax(300px,50vw); grid-template-areas: 'column-1 ... column-2'; grid-template-rows: auto; } .column { padding: calc(var(--padding-page) * 1.5) var(--padding-page); } .preview__map { padding: calc(var(--padding-page) * 1.5 + 0.35rem); left: 300px; width: calc(50vw - 300px); } } @media (any-pointer:fine) { .cursor { position: fixed; top: 0; left: 0; display: block; pointer-events: none; z-index: 10000; } .cursor__inner { fill: var(--cursor-fill); } .no-js .cursor { display: none; } }