:root {
--background: #021;
--accent: var(--text);
}
body {
background-image: url("/matrix/garden.webp");
background-position: center;
background-size: cover;
}
main {
max-inline-size: calc(70ch - 2em);
}
main > header,
main > footer.page-footer {
margin-block: 0 1rem;
padding-block: 0.5rem;
color: white;
text-align: center;
background-color: #0008;
backdrop-filter: blur(0.5rem);
border-radius: 1rem;
box-shadow: 0 0.5em 1em black;
}
main > header {
line-height: 1.1;
}
main > footer.page-footer {
margin-block: 1rem 0;
}
main > header > h1 {
margin-block: 0;
}
main > header > small.citation {
font-style: italic;
}
nav.languages {
margin-block-end: 0;
font-size: smaller;
}
#grid {
--gap: min(1rem, 3vw);
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
gap: var(--gap);
padding: calc(2 * var(--gap));
padding-bottom: calc(4 * var(--gap));
text-align: center;
background-image: url("/matrix/wood.webp");
border-radius: calc(2 * var(--gap));
box-shadow: 0 calc(-2 * var(--gap)) 0 inset #0006, 0 0.5em 1em black;
}
.message {
display: none;
}
.tile {
display: flex;
justify-content: center;
align-items: center;
padding-block-end: 0.5rem;
aspect-ratio: 1 / 1;
font-size: min(2.25rem, 8.5vw);
background-size: 100% 100%;
border-radius: var(--gap);
}
#grid.stopped > .tile:not(.maximum, button.tile.reset, [data-value="0"]) {
opacity: 0.5;
}
.tile[data-value="0"] {
background-color: #0004;
background-image: none;
box-shadow: 0.25em 0.5em 0.75em inset #000c, 0em -0.25em 0.5em inset #fa23;
}
.tile[data-value="2"] {
color: #210;
text-shadow: -1px -1px #925014, 1px 1px #f9e3d6;
background-image: url("/matrix/birch.webp");
box-shadow: inset -5px -5px 10px #925014, inset 3px 3px 5px #f9e3d6;
}
.tile[data-value="4"] {
color: #111;
text-shadow: -1px -1px #29323d, 1px 1px #eaf4fa;
background-image: url("/matrix/silver.webp");
box-shadow: inset -5px -5px 10px #29323d, inset 3px 3px 5px #eaf4fa;
}
.tile[data-value="4"] {
color: #111;
text-shadow: -1px -1px #29323d, 1px 1px #eaf4fa;
background-image: url("/matrix/silver.webp");
box-shadow: inset -5px -5px 10px #29323d, inset 3px 3px 5px #eaf4fa;
}
.tile[data-value="8"] {
color: #332f2a;
text-shadow: -1px -1px #afa293, 1px 1px #fff;
background-image: url("/matrix/pearl.webp");
box-shadow: inset -5px -5px 10px #afa293, inset 3px 3px 5px #fff;
}
.tile[data-value="16"] {
color: #fee;
text-shadow: -1px -1px #3f0812, 1px 1px #fff8;
background-image: url("/matrix/ruby.webp");
box-shadow: inset -5px -5px 10px #3f0812, inset 3px 3px 5px #fee;
}
.tile[data-value="32"] {
color: #d8f4fb;
text-shadow: -1px -1px #00011f, 1px 1px #e8f9fc88;
background-image: url("/matrix/sapphire.webp");
box-shadow: inset -5px -5px 10px #00011f, inset 3px 3px 5px #e8f9fc;
}
.tile[data-value="64"] {
color: #efcbef;
text-shadow: -1px -1px #330a47, 1px 1px #e1bfe088;
background-image: url("/matrix/amethyst.webp");
box-shadow: inset -5px -5px 10px #330a47, inset 3px 3px 5px #e1bfe0;
}
.tile[data-value="128"] {
color: #321e00;
text-shadow: -1px -1px #321e0088, 1px 1px #fff;
background-image: url("/matrix/gold.webp");
box-shadow: inset -5px -5px 10px #321e00, inset 3px 3px 5px #fff;
}
.tile[data-value="256"] {
color: #f2ffe7;
text-shadow: -1px -1px #022e0d, 1px 1px #e1f7e088;
background-image: url("/matrix/emerald.webp");
box-shadow: inset -5px -5px 10px #022e0d, inset 3px 3px 5px #e1f7e0;
}
.tile[data-value="512"] {
color: #0a1219;
text-shadow: -1px -1px #1a223688, 1px 1px #ffffff;
background-image: url("/matrix/diamond.webp");
box-shadow: inset -5px -5px 10px #1a2236, inset 3px 3px 5px #ffffff;
}
.tile[data-value="1024"] {
color: #391e38;
text-shadow: -1px -1px #391e3888, 1px 1px #fff8;
background-image: url("/matrix/platinum.webp");
box-shadow: inset -5px -5px 10px #715675, inset 3px 3px 5px #ffffff;
}
.tile[data-value="2048"] {
color: #341349;
text-shadow: -1px -1px #6775db, 1px 1px #f7f5fc;
background-image: url("/matrix/iridescent.webp");
box-shadow: inset -5px -5px 10px #6775db, inset 3px 3px 5px #f7f5fc;
}
.tile[data-value="4096"] {
color: #ffea00;
text-shadow: -1px -1px black, 1px 1px #fff8;
background-image: url("/matrix/lava.webp");
box-shadow: inset -5px -5px 10px black, inset 3px 3px 5px #e03317;
}
.tile[data-value="8192"] {
color: #ddf5ff;
text-shadow: -1px -1px #003e50, 1px 1px #76c0e0dd;
background-image: url("/matrix/water.webp");
box-shadow: inset -5px -5px 10px #003e50, inset 3px 3px 5px #76c0e0;
}
.tile[data-long="true"] {
color: #0f6;
font-size: calc(min(2rem, 7.5vw) * 5 / var(--chars));
text-shadow: -1px -1px black, 1px 1px #aefe9588;
background-image: url("/matrix/matrix.webp");
box-shadow: inset -5px -5px 10px black, inset 3px 3px 5px #aefe9588;
filter: hue-rotate(calc(222.5deg * calc(var(--exp) - 14)));
}
button.tile.reset {
display: flex;
flex-direction: column;
padding-block-end: 0;
color: #ffc;
border: none;
}
button.tile.reset small {
font-size: 0.4em;
}
button.tile.reset strong {
color: inherit;
line-height: 1;
}