Пожалуйста, сформируй полный HTML-код (ничего не пропускай) для следующего запроса: "Отступ снизу, слева, справа и от канваса до панели сверху должен быть одинаковым". В прошлой итерации код выглядел следующим образом: "<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Канвас на всю ширину</title>
    <style>
        body {
            margin: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            height: 100vh;
            background-color: #f0f0f0;
        }

        .controls {
            display: flex;
            justify-content: center;
            margin-top: 10px;
            margin-bottom: 10px;
        }

        .controls > * {
            margin: 0 5px;
        }

        canvas {
            border: 1px solid #000;
            background-color: #fff;
            width: calc(100% - 20px); /* Вычитание отступа для отступа краёв */
            flex-grow: 1;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="controls">
        <button id="clear">Очистить</button>
        <label for="color">Цвет:</label>
        <input type="color" id="color" value="#000000">
        <label for="size">Размер:</label>
        <input type="range" id="size" min="1" max="20" value="5">
        <button id="eraser">Ластик</button>
    </div>
    <canvas id="canvas"></canvas>

    <script>
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');
        const clearButton = document.getElementById('clear');
        const colorPicker = document.getElementById('color');
        const sizePicker = document.getElementById('size');
        const eraserButton = document.getElementById('eraser');

        let drawing = false;
        let currentColor = '#000000';
        let currentSize = 5;
        let usingEraser = false;

        function resizeCanvas() {
            const controlsHeight = document.querySelector('.controls').offsetHeight;
            canvas.width = window.innerWidth - 20;  // Учитываем отступы
            canvas.height = window.innerHeight - controlsHeight - 20; // Учитываем отступы
        }

        window.addEventListener('resize', resizeCanvas);
        resizeCanvas();

        canvas.addEventListener('mousedown', startDrawing);
        canvas.addEventListener('mouseup', stopDrawing);
        canvas.addEventListener('mousemove', draw);
        canvas.addEventListener('mouseleave', stopDrawing);

        clearButton.addEventListener('click', clearCanvas);
        colorPicker.addEventListener('change', (e) => {
            currentColor = e.target.value;
            usingEraser = false;
        });
        sizePicker.addEventListener('input', (e) => currentSize = e.target.value);

        eraserButton.addEventListener('click', () => {
            usingEraser = true;
        });

        function startDrawing(event) {
            drawing = true;
            draw(event);
        }

        function stopDrawing() {
            drawing = false;
            ctx.beginPath();
        }

        function draw(event) {
            if (!drawing) return;

            const rect = canvas.getBoundingClientRect();
            const x = (event.clientX - rect.left) * (canvas.width / rect.width);
            const y = (event.clientY - rect.top) * (canvas.height / rect.height);

            ctx.lineWidth = currentSize;
            ctx.lineCap = 'round';
            ctx.strokeStyle = usingEraser ? '#fff' : currentColor;

            ctx.lineTo(x, y);
            ctx.stroke();
            ctx.beginPath();
            ctx.moveTo(x, y);
        }

        function clearCanvas() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            usingEraser = false;
        }
    </script>
</body>
</html>". Запрос прошлой итерации был таким: "Ширина канваса должна быть на всю доступную ширину вьюпорта с небольшим отступом как снизу экрана".