/* Copyright © Victor Westerlund - No libraries! 😲 */ :root { --comp-background: 255,255,255; --comp-contrast: 33,33,33; --comp-accent: 22,183,255; --color-background: rgb(var(--comp-background)); --color-contrast: rgb(var(--comp-contrast)); --color-accent: rgb(var(--comp-accent)); --padding: 20px; --border-radius: 10px; --header-height: 100px; --transition: 300ms; } .dark { --comp-background: 33,33,33; --comp-contrast: 255,255,255; --comp-accent: 255,255,255; --color-background: rgb(var(--comp-background)); --color-contrast: rgb(var(--comp-contrast)); --color-accent: rgb(var(--comp-accent)); } @font-face { font-family: "Roboto Mono"; font-weight: 400; src: local("Roboto Mono Regular"), local("RobotoMono-Regular"), url("../fonts/RobotoMono-Regular.woff2"), url("../fonts/RobotoMono-Regular.ttf"); } @font-face { font-family: "Roboto Mono"; font-weight: 700; src: local("Roboto Mono Bold"), local("RobotoMono-Bold"), url("../fonts/RobotoMono-Bold.woff2"), url("../fonts/RobotoMono-Bold.ttf"); } /* -- Cornerstones -- */ * { margin: 0; font-family: "Roboto Mono","Arial",sans-serif; color: var(--color-contrast); } *::selection { background-color: var(--color-highlight); color: var(--color-accent); } picture { display: contents; } html, body { width: 100%; height: 100%; overflow: hidden; } main { width: 200vw; height: 100%; overflow: hidden; display: flex; } main.active { transform: translateX(-100vw); } /* ---- */ .screen { width: 100vw; background-color: var(--color-background); display: flex; flex-direction: column; } .screen .content { box-sizing: border-box; padding: calc(var(--padding) * 1.5); padding-top: 0; flex-grow: 1; } /* -- Positioning -- */ .center { display: flex; justify-content: center; align-items: center; } /* ---- */ .logo { --size: 1em; --skew: calc(var(--size) / 1.7); width: 0; height: 0; border: var(--skew) solid transparent; border-top: var(--size) solid var(--color-accent); } .logo::after { content: ""; border: var(--skew) solid transparent; border-top: var(--size) solid rgba(var(--comp-accent),.3); } /* ---- */ .button { background-color: var(--color-contrast); text-align: center; padding: 25px; border-radius: var(--border-radius); display: flex; justify-content: center; align-items: center; gap: var(--padding); } .button svg { pointer-events: none; fill: var(--color-contrast); transform: scale(1.2); } .button p { pointer-events: none; font-size: clamp(16px,5vw,22px); color: var(--color-background); } .button.phantom { background-color: rgba(var(--comp-contrast),.1); } .button.phantom p { color: var(--color-contrast); } .button.loading p { opacity: 0; } .button.loading::after { position: absolute; content: "loading..."; opacity: 1; } /* -- Screens -- */ header { --size: var(--header-height,100px); box-sizing: border-box; padding: var(--padding); height: var(--size); display: flex; align-items: center; font-weight: bold; } header > *:nth-child(2) { margin-left: 10px; } header > *:nth-child(n+3) { margin-left: var(--padding); } header .hamburger { width: calc(var(--size) - (var(--padding) * 2)); height: calc(var(--size) - (var(--padding) * 2)); box-sizing: border-box; flex-shrink: 0; padding: 15px; } header .hamburger div { width: 100%; height: 2px; background: var(--color-contrast); box-shadow: 0 -10px 0 0 var(--color-contrast), 0 10px 0 0 var(--color-contrast); } header .hamburger svg { fill: none; stroke: var(--color-contrast); stroke-linecap: round; stroke-width: 2; } header .spacer { width: 1px; height: 80%; background-color: rgba(var(--comp-contrast),.2); } .dark header .spacer { background-color: black; } header .logo { --size: 25px; margin-top: calc(var(--size) / 2); margin-right: calc(var(--size) / 2); } /* -- Screen > Landingpage -- */ .screen.landingpage .content { padding-bottom: 0; } .screen.landingpage img { width: 100%; max-width: 300px; align-self: flex-end; } .screen.landingpage .pattern { position: absolute; top: var(--header-height); width: 100vw; height: calc(100% - var(--header-height)); overflow: hidden; } .screen.landingpage .pattern div { --size: clamp(100px,100vw,35vh); position: relative; top: calc((var(--size) - var(--header-height)) * -1); width: 0; height: 0; border: solid var(--size) transparent; border-bottom: solid calc(var(--size) * 2) rgba(var(--comp-accent),.1); transform-origin: 50% 75%; transform: rotate(20deg); } /* -- Screen > Menu -- */ .screen.menu .content { display: flex; flex-direction: column; align-items: center; gap: 20px; } .screen.menu .button { width: calc(100% - (var(--padding) * 2)); max-width: 400px; flex: 0; } .screen.menu .button[data-action="openContactCard"] { margin-top: auto; } @media (max-width: 300px) { .button svg:not(.hidden) ~ p, header .logo { display: none; } } @media (max-width: 230px) { header { justify-content: center; } header .spacer, header p { display: none; } }