
:root {
    --sudokuSize: 25rem;
    --scale: 1;
}

@media screen and (max-width: 25em) {
    :root {
        --scale: .5;
    }
}

@media screen and (max-height: 32em) {
    :root {
        --scale: .5;
    }
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    margin: 0;
    padding: 0;
    /* background-color: #ddd; */
    font-family: Arial, Helvetica, sans-serif;
    font-size: calc(1em * var(--scale));
}

.container {
    position: relative;
}

.sudoku {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: -2px -2px;
    width: calc(var(--sudokuSize) * var(--scale));
    height: calc(var(--sudokuSize) * var(--scale));
    padding: 0;
    margin: 0;
    box-sizing: border-box;

    position: absolute;
    transform: translate(-50%, -50%);

    pointer-events: none;
}

.sudoku::after {
    content: "";
    width: calc(var(--sudokuSize) * var(--scale));
    height: calc(var(--sudokuSize) * var(--scale));
    position: absolute;
    border-bottom: calc((2px * var(--scale)) + 1px) solid #000;
    border-right: calc((2px * var(--scale)) + 1px) solid #000;
}

.box {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: calc(-1px * var(--scale)) calc(-1px * var(--scale));
    border-top: calc(2px * var(--scale)) solid #000;
    border-left: calc(2px * var(--scale)) solid #000;
    width: calc((var(--sudokuSize) / 3) * var(--scale));
    height: calc((var(--sudokuSize) / 3) * var(--scale));
    box-sizing: border-box;
}

.cell {
    border-top: calc(1px * var(--scale)) solid #000;
    border-left: 1px solid #000;
    padding-top: calc((var(--sudokuSize) / 9 / 3.5) * var(--scale));
    padding-left: calc((var(--sudokuSize) / 9 / 3) * var(--scale));
    width: calc((var(--sudokuSize) / 9) * var(--scale));
    height: calc((var(--sudokuSize) / 9) * var(--scale));
    box-sizing: border-box;
    outline: none;
    z-index: -1;

    pointer-events: auto;
}

.cell:focus {
    background-color: #eee !important;
}

.buttons {
    position: absolute;
    top: calc((var(--sudokuSize) / 2 + 20px) * var(--scale));
    transform: translateX(-50%);
    display: flex;
}

button {
    background-color: #eee;
    box-shadow: calc(3px * var(--scale)) calc(5px * var(--scale)) calc(10px * var(--scale)) #000;
    border: none;
    outline: none;
    font-size: inherit;
    border-radius: 3px;
    padding: 5px 10px;
    margin: calc(3px * var(--scale)) calc(5px * var(--scale));
    transition: box-shadow 250ms ease-in-out;
    flex: 1 1 auto;
    white-space: nowrap;
}

button:hover,
button:focus {
    box-shadow: calc(5px * var(--scale)) calc(7px * var(--scale)) calc(10px * var(--scale)) #000;
}

.waitingAlert {
    color: #fff;
    background-color: #000;
    border-radius: 3px;
    opacity: 0;
    position: absolute;
    top: calc((-40px - var(--sudokuSize) / 2) * var(--scale));
    transform: translate(-50%, -50%);
    font-size: 1.25em;
    padding: calc(10px * var(--scale)) calc(20px * var(--scale));
    transition: opacity 250ms ease-in-out;
    z-index: 100;
}

hr {
    margin: calc(3px * var(--scale)) calc(5px * var(--scale));
    border: 1px solid #808080;
}