warp/style.css

713 lines
14 KiB
CSS

:root {
/* UI Fonts */
--ui-font-family: Inter, sans-serif;
--code-font-family: Hack, monospace;
font-family: var(--ui-font-family);
font-feature-settings: 'liga' 1, 'calt' 1;
/* UI Colors */
--accent-1: rgba(255, 255, 255, 0.05);
--accent-2: rgba(255, 255, 255, 0.1);
--accent-3: rgba(255, 255, 255, 0.15);
--widget-shadow:
inset 0 0 0 1px var(--accent-3),
0 0.2rem 2rem rgba(255, 255, 255, 0.1);
--inner-border: inset 0 0 0 1px var(--accent-2);
--accent-bg: linear-gradient(95deg, var(--accent-3), var(--accent-1));
--august-pink: oklch(80.67% 0.1 0);
--august-orange: oklch(80.67% 0.1 43);
--accent-grad: linear-gradient(120deg in oklab, var(--august-pink) 10%, var(--august-orange) 80%);
--font-color: white;
color-scheme: dark;
/* Text Size Calculation */
--min-fs: 1;
--max-fs: 1.5;
--min-vw: 20;
--max-vw: 45;
--min-fs-rem: var(--min-fs) * 1rem;
--max-fs-rem: var(--max-fs) * 1rem;
--min-vw-rem: var(--min-vw) * 1rem;
--slope: (var(--max-fs) - var(--min-fs)) * (100svi - var(--min-vw-rem)) / (var(--max-vw) - var(--min-vw));
--font-size: clamp(var(--min-fs-rem), var(--min-fs-rem) + var(--slope), var(--max-fs-rem));
}
* {
color: var(--font-color);
}
@supports (font-variation-settings: normal) {
:root {
font-family: InterVariable, sans-serif;
}
}
::selection {
background-color: color-mix(in srgb, white, transparent 70%);
}
a[href^='http'] {
text-decoration: none;
font-weight: 700;
transition: color 0.3s ease;
&:hover {
color: var(--august-pink)
}
}
.chevron {
position: absolute;
inline-size: 3rem;
bottom: 5%;
left: 50%;
color: rgba(255, 255, 255, 0.8);
transform: translate(-50%, -50%);
animation: pullDown 5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
animation-delay: 4s;
}
@keyframes pullDown {
from,
to {
bottom: 5%;
}
50% {
bottom: 2%;
}
}
body,
html {
font-size: calc(var(--font-size) * 0.8);
inline-size: 100%;
block-size: 100%;
margin: 0;
padding: 0;
overflow: auto;
}
.august-accent {
background: var(--accent-grad);
color: transparent;
background-clip: text;
-webkit-background-clip: text;
}
.august-accent-underline {
background-image: var(--accent-grad);
color: black;
background-size: 100% 100% !important;
background-repeat: no-repeat;
background-position: left bottom;
}
body {
display: flex;
flex-direction: column;
}
code {
font-family: var(--code-font-family);
}
.background {
background: linear-gradient(160deg, #101010, #010101);
}
.dots {
inline-size: 100%;
background-image: radial-gradient(rgba(255, 255, 255, 0.2) 1px, transparent 0);
background-size: 4rem 4rem;
background-position: 0.1rem 0;
}
#typed {
animation: blink-cursor 1s step-end infinite;
padding-inline-end: 0.5ch;
}
.echo {
color: var(--august-pink)
}
.page {
--inner-padding: calc(var(--font-size) * 2);
flex-direction: column;
display: flex;
position: relative;
padding: var(--inner-padding);
gap: var(--font-size);
&:first-child,
&:last-child {
div {
margin: auto;
}
block-size: calc(100svb - calc(2 * var(--inner-padding)));
p {
font-size: calc(var(--font-size));
}
h1 {
margin-block: 0.5rem;
font-size: calc(4 * var(--font-size));
&.accent {
font-size: calc(1.5 * var(--font-size));
align-self: start;
}
}
}
&:nth-child(2) {
align-items: center;
.about-menu {
flex: 0 1 50%;
h1 {
font-size: calc(3 * var(--font-size));
max-block-size: 2ch;
}
p {
font-size: calc(var(--font-size) * 1.8);
font-weight: 300;
text-wrap: pretty;
padding: 1rem;
a {
text-decoration: none;
padding-inline: 0.25rem;
font-weight: 500 !important;
background-size: 100% 2px;
background-image: var(--accent-grad);
background-repeat: no-repeat;
background-position: left bottom;
transition: background-size 0.3s ease, color 0.3s ease;
}
}
}
#about-display {
position: relative;
display: flex;
align-items: center;
justify-content: center;
flex: 0 1 50%;
block-size: 90%;
&>:first-child {
pointer-events: all;
opacity: 1;
}
&>:not(:first-child) {
pointer-events: none;
opacity: 0;
}
}
.about {
display: flex;
position: absolute;
flex-direction: column;
justify-content: space-between;
inline-size: 80%;
block-size: 100%;
&>* {
border-radius: 1rem;
}
img {
max-inline-size: 100%;
}
&>:first-child {
max-block-size: 100%;
block-size: 100%;
overflow: hidden;
}
p {
font-size: var(--font-size);
padding: 1rem;
}
.train {
background: white;
padding: 1rem;
}
.george {
background-color: #110500;
padding: 2.5rem 1rem;
& canvas {
inline-size: 100%;
object-fit: contain;
image-rendering: pixelated;
z-index: -10;
/* this is a bug with rust_minifb,
it makes 2 canvases for some reason... */
&:nth-child(2) {
display: none;
}
}
}
}
}
}
#manpage-container {
display: flex;
overflow: hidden;
}
#man-demo {
display: flex;
gap: var(--font-size);
a {
pointer-events: none;
}
.terminal {
background: black;
position: relative;
display: flex;
justify-content: end;
flex-direction: column;
padding: var(--font-size);
min-block-size: calc(var(--font-size) * 6);
&:not(:only-child) {
transition: flex 0.8s;
flex: 0 0 50%;
}
&:only-child {
flex: 1;
}
p {
margin: 0;
&:nth-child(1) {
color: lightblue;
}
}
input,
p {
font-size: inherit;
font-family: var(--code-font-family);
}
#results {
div {
margin-block: 1rem;
padding: 0.25rem 0.5rem;
overflow: hidden;
}
p {
margin-block: 0.5rem;
code {
color: var(--august-orange)
}
}
.error {
background: #ff615920;
border-inline-start: solid 2px #ff6159;
}
code {
color: lightblue;
}
}
form {
&>input {
inline-size: 100%;
background: transparent;
outline: none;
border: none;
}
code {
color: pink;
}
}
}
#manpage-widget {
--inner-padding: calc(var(--font-size)) calc(var(--font-size));
overflow-y: auto;
overflow-x: hidden;
padding: 1rem;
&>* {
margin-block-start: 0;
padding: var(--inner-padding);
}
a {
pointer-events: none;
::after {
content: none;
}
}
#SYNOPSIS {
margin-block-start: 0
}
h1 {
font-family: InterVariable, sans-serif;
font-size: var(--font-size);
font-weight: 400;
}
&>h1 {
position: sticky;
top: 0;
background: #000a;
border-radius: 1rem;
box-shadow: var(--inner-border);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(0.5rem);
&::before {
content: 'man';
display: block;
align-self: start;
margin-block: 0 1rem;
font-size: calc(var(--font-size) * 0.8);
font-weight: 300;
text-align: center;
max-inline-size: 4ch;
border-radius: 0.3rem;
box-shadow: var(--inner-border);
background: var(--accent-bg);
padding: 0.2rem;
}
}
& .manual-text>section:first-child {
display: none;
}
section>h1,
section>h2 {
text-transform: lowercase;
font-weight: 300;
font-style: italic;
}
& * {
text-decoration: none;
}
p:not(:has(*)) {
background: none;
border: none;
}
.Bl-tag dd {
margin-block-end: 1rem;
}
b,
i,
code,
pre {
font-family: var(--code-font-family);
}
table {
display: block;
overflow: auto;
tbody {
display: inline-block;
}
&:is(.head, .foot) {
display: none;
}
&.Nm tr {
display: block;
gap: 1rem;
}
td:nth-child(1) {
padding-inline-end: 0.5rem;
}
td:not(:has(*)) {
display: none;
}
}
section.Sh:nth-child(2) .Pp,
b:not(section.Sh:nth-child(2) .Pp b, dt b, pre b),
pre,
dt {
background: #fff3;
padding: 0.1rem 0.4rem;
border-radius: 0.3rem;
}
.Pp {
display: inline-block;
}
pre {
overflow: auto;
}
dt {
display: inline-block;
margin-block: 0.4rem;
}
}
}
.accent {
--spacing: calc(0.25 * var(--font-size));
display: inline-block;
font-weight: 300;
border-radius: 0.3rem;
padding: var(--spacing) calc(var(--spacing) * 2);
box-shadow: var(--inner-border);
background: var(--accent-bg);
backdrop-filter: blur(0.5rem);
-webkit-backdrop-filter: blur(0.5rem);
}
.widget {
position: relative;
background: black;
border-radius: 1rem;
box-shadow: inset 0 0 0 1px var(--accent-3),
0 0.2rem 2rem rgba(255, 255, 255, 0.1);
.traffic-lights {
--spacing: calc(0.5 * var(--font-size));
position: absolute;
top: var(--spacing);
left: calc(var(--spacing) * 1.25);
user-select: none;
.dot {
display: inline-block;
inline-size: var(--spacing);
block-size: var(--spacing);
margin-inline-end: 0.3rem;
background: red;
border-radius: 100%;
}
.red {
background: #ff6159;
}
.yellow {
background: #ffbd2e;
}
.green {
background: #28c941;
}
}
}
@keyframes blink-cursor {
from,
to {
border-inline-end: 0.15rem solid transparent;
}
50% {
border-inline-end: 0.15rem solid white;
}
}
@media all and (max-width: 60rem) {
.page {
&:nth-child(2) {
flex-direction: column;
.about {
margin: 5svb auto;
inline-size: 90%;
position: relative;
opacity: 1 !important;
}
#about-display {
display: contents;
}
}
}
#man-demo {
max-block-size: 80svb;
flex-direction: column;
#manpage-widget>h1 {
position: relative;
}
}
}
@media all and (min-width: 60rem) {
body {
scroll-snap-type: block mandatory;
}
.page {
flex-direction: row;
block-size: calc(100svb - calc(2 * var(--inner-padding)));
scroll-snap-align: center;
scroll-snap-stop: always;
.page-desc {
h1 {
font-size: calc(var(--font-size)* 1.7);
}
p {
font-size: calc(var(--font-size)* 1.1);
max-inline-size: 24ch;
}
}
}
}
@media all and (min-width: 60rem) and (max-width: 80rem) {
.page {
&:nth-child(3) {
flex-direction: row;
grid-template-columns: 4;
}
&:nth-child(2) {
#about {
font-size: calc(var(--font-size) * 1.2);
}
flex-direction: row;
grid-template-columns: 4;
}
.page-desc {
h1 {
font-size: calc(var(--font-size)* 1.3);
}
p {
font-size: calc(var(--font-size));
max-inline-size: 24ch;
}
}
}
#man-demo {
min-inline-size: 50vi;
inline-size: 50vi;
flex-direction: column-reverse;
.terminal:not(:only-child) {
transition: flex 0.8s;
flex: 0;
}
}
}
@media all and (min-width: 80rem) {
.page:nth-child(3) {
justify-content: space-between;
}
#man-demo {
flex-direction: row;
flex: 1;
max-inline-size: 60%;
justify-self: flex-end;
}
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fade-out {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes flex-in {
from {
flex: 0;
}
to {
flex: 1;
}
}