@import url("https://fonts.googleapis.com/css2?family=Audiowide&display=swap"); * { margin: 0; padding: 0; box-sizing: border-box; font-family: "Audiowide", serif; line-height: 1; } html, body { width: 100%; height: 100%; } body { overflow: hidden; display: flex; align-items: center; justify-content: center; background-color: hsl(0, 0%, 5%); color: hsl(0, 0%, 95%); user-select: none; } .canvasWrapper { max-width: 95%; max-height: 95%; aspect-ratio: 16 / 9; border: 2px solid hsl(0, 0%, 10%); background-color: black; position: relative; display: flex; background-image: url(assets/stars.png); background-position: center center; background-size: 50vmin; } canvas { width: 100%; height: 100%; } #score { position: absolute; top: 0; right: 0; color: white; padding: 1.5vmin; font-size: 3vmin; line-height: 1; } #splash, #gameOver, #paused { position: fixed; width: 100%; height: 100%; inset: 0; display: flex; align-items: center; justify-content: center; background-image: url(assets/stars.png); background-position: center center; background-size: 50vmin; z-index: 1; transition: opacity 0.5s; } #splash.hidden, #gameOver.hidden, #paused.hidden { opacity: 0; pointer-events: none; } .innerWrapper { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3vmin; } #splash h1, #gameOver h2, #paused h2 { font-size: 10vmin; } #paused h2 { animation: twinkle 2s linear infinite; } @keyframes twinkle { from { opacity: 1; } 45% { opacity: 0.3333; } 90% { opacity: 1; } to { opacity: 1; } } #gameOver h3 { font-size: 3vmin; } #paused p { font-size: 3vmin; } button { padding: 1.5vmin; background-color: transparent; color: inherit; font-size: 1.5vmin; outline: 0; border: 2px solid hsl(0, 0%, 25%); cursor: pointer; position: relative; margin-top: 1em; } button span { opacity: 0.5; transition: opacity 0.5s; text-transform: uppercase; } button .line { position: absolute; background-color: white; transition: transform 1s; } button .top, button .bottom { width: calc(100% + 4px); height: 2px; transform: scaleX(0); } button .left, button .right { width: 2px; height: calc(100% + 4px); transform: scaleY(0); } button .top { top: -2px; left: -2px; transform-origin: left; } button .bottom { bottom: -2px; right: -2px; transform-origin: right; } button .left { left: -2px; bottom: -2px; transform-origin: bottom; } button .right { right: -2px; top: -2px; transform-origin: top; } button:is(:hover, :focus, :active) .top, button:is(:hover, :focus, :active) .bottom { transform: scaleX(1); } button:is(:hover, :focus, :active) .left, button:is(:hover, :focus, :active) .right { transform: scaleY(1); } button:is(:hover, :focus, :active) span { opacity: 1; } button:is(:hover, :focus, :active) span, button:is(:hover, :focus, :active) .line { transition-delay: 0.25s; } .controls { margin-top: 5vmin; border: 1px solid hsl(0, 0%, 50%); background-color: hsl(0, 0%, 7.5%); padding: 2vmin 4vmin 3vmin; } .controls h3 { margin-bottom: 3vmin; text-align: center; font-size: 3vmin; } dl { display: grid; grid-template-columns: 1fr auto; font-size: 2vmin; gap: 3vmin 1.5vmin; } dt, dd { display: flex; align-items: center; gap: 1.5vmin; } dt { justify-content: flex-start; } dd { justify-content: center; } .wasd { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 0.5vmin; grid-template-areas: ". w ." "a s d"; } .wasd kbd:nth-child(1) { grid-area: w; } .wasd kbd:nth-child(2) { grid-area: a; } .wasd kbd:nth-child(3) { grid-area: s; } .wasd kbd:nth-child(4) { grid-area: d; } kbd { display: inline-block; vertical-align: middle; white-space: nowrap; line-height: 1; padding: 0.2em 0.4em; font-size: 0.9em; color: hsl(0, 0%, 20%); background-color: hsl(0, 0%, 90%); border: 1px solid hsl(0, 0%, 80%); border-radius: 0.25em; box-shadow: 0 0.05em 0 hsla(0, 0%, 0%, 20%), 0 0.1em 0 hsla(0, 0%, 100%, 50%) inset; } #splash footer { position: absolute; bottom: 0; left: 0; right: 0; text-align: center; padding: 2vmin; color: hsl(0, 0%, 60%); } a { color: inherit; outline: 0; transition: color 0.5s; } a:hover, a:active, a:focus { color: hsl(0, 0%, 100%); }