canvas { background: #eee; width: 100%; height: 100%; } body { margin: 0; background: rgb(49, 51, 54); outline: 0; } :root{ --grid-width: 6; --grid-height: 6; --button-margin: 0.5vh; --tile-size: calc((100vh / var(--grid-height)) - 2 * var(--button-margin)); --opacity: 0.164; --border-radius: 1vh; --sidebar-width: 25vh; } /* override settings on portrait mode: */ @media (orientation: portrait) { :root{ --button-margin: 0.5vw; --tile-size: calc((100vw / var(--grid-width)) - 2 * var(--button-margin)); --border-radius: 1vw; --sidebar-width: 40vw; } } .grid-button { border-radius: var(--button-margin); margin: var(--button-margin); width: calc(var(--tile-size) - (var(--button-margin) * 2)); height: calc(var(--tile-size) - (var(--button-margin) * 2)); display: inline-block; outline: 0; transition-duration: 0.3s; } .grid-button:focus { outline: 0!important; } .control-button { border-radius: var(--border-radius); margin: var(--border-radius); border: none; display: list-item; outline: 0; transition-duration: 0.3s; background: rgba(0, 0, 0, var(--opacity)); color: rgb(255, 255, 255); font-size: calc(5 * var(--border-radius)); width: var(--sidebar-width); } .control-button:hover { background: rgba(255, 255, 255, var(--opacity)); } .control-button:active { background: rgba(255, 255, 255, calc(var(--opacity) * 2)); } .info-button { border-radius: var(--border-radius); margin: var(--border-radius); border: none; outline: 0; transition-duration: 0.3s; display: flex; flex-direction: column; background: none; color: rgb(255, 255, 255); font-size: calc(5 * var(--border-radius)); width: var(--sidebar-width); } .status-button { border-radius: var(--border-radius); margin: var(--border-radius); border: none; outline: 0; transition-duration: 0.3s; display: flex; flex-direction: column; background: none; color: rgb(128, 128, 128); font-size: calc(2 * var(--border-radius)); width: var(--sidebar-width); } .grid-tile { position: absolute; width: var(--tile-size); height: var(--tile-size); float: center; background: none; } .main-container { text-align: center; white-space: nowrap; padding-top: calc(50vh - 0.5 * (var(--grid-height) * var(--tile-size)) - var(--border-radius)); } /* override settings on portrait mode: */ @media (orientation: portrait) { .main-container { white-space: normal; padding-top: 10px; } } .grid-container { border-radius: var(--border-radius); padding: var(--border-radius); margin: auto; width: calc(var(--grid-width) * var(--tile-size)); height: calc(var(--grid-height) * var(--tile-size)); background: rgba(0, 0, 0, var(--opacity)); display: inline-block; transition-duration: 1s; } .sidebar-container { border-radius: var(--border-radius); padding: var(--border-radius); vertical-align: top; background: rgba(0, 0, 0, var(--opacity)); display: inline-flex; justify-content: space-between; flex-direction:column; min-height: calc(var(--grid-height) * var(--tile-size)); position: relative; transition-duration: 1s; } /* override settings on portrait mode: */ @media (orientation: portrait) { .sidebar-container { display: inline-flex; justify-content: space-between; flex-direction:row; min-height: 0; min-width: calc(var(--grid-width) * var(--tile-size)); } } .control-container { border-radius: var(--border-radius); padding: var(--border-radius); top: 0; background: none; } .info-container { border-radius: var(--border-radius); padding: var(--border-radius); bottom: 0; display: inline-block; vertical-align: middle; text-align: center; background: none; white-space: normal; }