canvas {
  grid-area: canvas;
}

label {
  display: inline-block;
  width: 75px;
}

.cols {
  grid-area: cols;
}

.rows {
  grid-area: rows;
}

.generate {
  grid-area: generate;
}

.controls {
  display: grid;
  grid-template-areas:
    '. up .'
    'left . right'
    '. down .';
    grid-template-columns: max-content max-content max-content;
    grid-template-rows: max-content max-content max-content;
}

.up, .right, .down, .left {
  background-color: grey;
  color: white;
  cursor: pointer;
  font-size: 1.2em;
  font-weight: bold;
  height: 35px;
  padding: auto;
  width: 35px;
}

.up {
  grid-area: up;
}

.right {
  grid-area: right;
}

.down {
  grid-area: down;
}

.left {
  grid-area: left;
}

footer {
  grid-area: footer;
  text-align: center;
}

footer > a:hover {
  background-color: lightgrey;
}

@media (max-width: 640px) {
  body {
    grid-template-areas:
      'header header'
      'canvas canvas'
      'settings controls'
      'footer footer';
    grid-template-columns: max-content max-content;
    grid-template-rows: max-content max-content max-content max-content;
  }
}