Привет. Моя языковая модель делает длинные ответы и строки там тоже бывают длинные. Из-за этого очень много приходится делать горизонтальных проеркток. В общем пора координально менять дищайн приложения. Сделай его в миллион раз лучше



<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>Чат с ИИ</title>
    <style>
        /* Сброс стандартных стилей браузера */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: #f0f2f5;
            color: #333;
        }

        .chat-container {
            width: 90%;
            max-width: 800px;
            margin: 40px auto;
            background-color: #fff;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0,0,0,0.1);
            overflow: hidden;
            display: flex;
            flex-direction: column;
        }

        .chat-header {
            background-color: #4CAF50;
            color: #fff;
            padding: 20px;
            text-align: center;
        }

        #chat {
            flex: 1;
            padding: 20px;
            overflow-y: auto;
        }

        .message {
            display: flex;
            margin-bottom: 15px;
        }

        .message.user {
            justify-content: flex-end;
        }

        .message.ai {
            justify-content: flex-start;
        }

        .message-content {
            max-width: 70%;
            padding: 15px;
            border-radius: 10px;
            position: relative;
            word-wrap: break-word;
            background-color: #f1f0f0;
            font-size: 16px;
        }

        .message.user .message-content {
            background-color: #dcf8c6;
        }

        .message.ai .message-content {
            background-color: #ececec;
        }

        .chat-form {
            display: flex;
            padding: 20px;
            background-color: #fff;
            border-top: 1px solid #ccc;
        }

        .chat-form textarea {
            flex: 1;
            resize: none;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 15px;
            font-size: 16px;
            min-height: 80px;
            margin-right: 10px;
        }

        .chat-form input[type="submit"] {
            padding: 15px 20px;
            font-size: 16px;
            border: none;
            background-color: #4CAF50;
            color: #fff;
            cursor: pointer;
            border-radius: 5px;
            transition: background-color 0.3s;
        }

        .chat-form input[type="submit"]:hover {
            background-color: #45a049;
        }

        .reset-button {
            text-align: center;
            padding: 20px;
            background-color: #fff;
            border-top: 1px solid #ccc;
        }

        .reset-button button {
            padding: 10px 20px;
            font-size: 16px;
            border: none;
            background-color: #f44336;
            color: #fff;
            cursor: pointer;
            border-radius: 5px;
            transition: background-color 0.3s;
        }

        .reset-button button:hover {
            background-color: #da190b;
        }

        /* Стили для спиннера */
        .spinner {
            display: none;
            margin: 20px auto;
            width: 50px;
            height: 50px;
            border: 5px solid rgba(0,0,0,0.1);
            border-top: 5px solid #4CAF50;
            border-radius: 50%;
            animation: spin 1s linear infinite;
        }

        @keyframes spin {
            to { transform: rotate(360deg); }
        }

        /* Блокировка кнопок */
        .disabled {
            opacity: 0.6;
            pointer-events: none;
        }

        /* Стили для кода */
        pre {
            background-color: #f5f5f5;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
        }

        code {
            font-family: Consolas, monospace;
            font-size: 16px;
        }

    </style>
    <!-- Подключаем CSS для подсветки синтаксиса -->
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.0/styles/github.min.css">
    <!-- Подключаем библиотеку Highlight.js -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.0/highlight.min.js"></script>
</head>
<body>
<div class="chat-container">
    <div class="chat-header">
        <h1>Чат с ИИ</h1>
    </div>
    <div id="chat">
        <!-- Здесь будут отображаться сообщения -->
    </div>
    <!-- Добавляем спиннер -->
    <div id="spinner" class="spinner"></div>
    <form class="chat-form" id="chat-form">
        <textarea id="message-input" placeholder="Введите сообщение" autofocus required></textarea>
        <input type="submit" value="Отправить" id="send-btn"/>
    </form>
    <div class="reset-button">
        <button type="button" id="reset-btn">Очистить чат</button>
    </div>
</div>
<script>
    let chatCounter = 0;
    let chatbot = [];

    const chatContainer = document.getElementById('chat');
    const spinner = document.getElementById('spinner');
    const sendBtn = document.getElementById('send-btn');
    const resetBtn = document.getElementById('reset-btn');
    const messageInput = document.getElementById('message-input');

    // Загрузка истории чата из localStorage
    if (localStorage.getItem('chatHistory')) {
        chatContainer.innerHTML = localStorage.getItem('chatHistory');
        chatCounter = parseInt(localStorage.getItem('chatCounter')) || 0;
        chatbot = JSON.parse(localStorage.getItem('chatbot')) || [];
        // Инициализируем подсветку в загруженных сообщениях
        hljs.highlightAll();
    }

    document.getElementById('chat-form').addEventListener('submit', function (event) {
        event.preventDefault();
        const userMessage = messageInput.value.trim();
        if (userMessage === '') return;

        // Отображаем сообщение пользователя
        addMessage('user', userMessage);
        messageInput.value = '';

        // Показываем спиннер и блокируем кнопки
        toggleLoadingState(true);

        // Отправляем сообщение на сервер
        fetch('/chat', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                message: userMessage,
                chat_counter: chatCounter,
                chatbot: chatbot
            }),
        })
            .then(response => response.json())
            .then(data => {
                // Скрываем спиннер и разблокируем кнопки
                toggleLoadingState(false);

                // Отображаем ответ ИИ
                addMessage('ai', data.response);

                // Обновляем chatCounter и chatbot
                chatCounter = data.chat_counter;
                chatbot = data.chatbot;

                // Сохраняем историю чата и состояние в localStorage
                localStorage.setItem('chatHistory', chatContainer.innerHTML);
                localStorage.setItem('chatCounter', chatCounter);
                localStorage.setItem('chatbot', JSON.stringify(chatbot));

                // Инициализируем подсветку в новых сообщениях
                hljs.highlightAll();
            })
            .catch((error) => {
                console.error('Ошибка:', error);
                // Скрываем спиннер и разблокируем кнопки в случае ошибки
                toggleLoadingState(false);
            });
    });

    resetBtn.addEventListener('click', function () {
        // Показываем спиннер и блокируем кнопки
        toggleLoadingState(true);

        // Отправляем запрос на сброс состояния на сервер
        fetch('/reset', {
            method: 'POST',
        })
            .then(response => response.json())
            .then(data => {
                // Скрываем спиннер и разблокируем кнопки
                toggleLoadingState(false);

                // Очищаем историю чата и состояние
                chatContainer.innerHTML = '';
                chatCounter = 0;
                chatbot = [];

                // Удаляем данные из localStorage
                localStorage.removeItem('chatHistory');
                localStorage.removeItem('chatCounter');
                localStorage.removeItem('chatbot');
            })
            .catch((error) => {
                console.error('Ошибка:', error);
                // Скрываем спиннер и разблокируем кнопки в случае ошибки
                toggleLoadingState(false);
            });
    });

    function addMessage(sender, text) {
        const messageDiv = document.createElement('div');
        messageDiv.classList.add('message', sender);

        const messageContent = document.createElement('div');
        messageContent.classList.add('message-content');

        messageContent.innerHTML = text;
        messageDiv.appendChild(messageContent);

        chatContainer.appendChild(messageDiv);

        // Инициализируем подсветку синтаксиса в новых сообщениях
        hljs.highlightAll();

        // Прокручиваем чат вниз
        chatContainer.scrollTop = chatContainer.scrollHeight;

        // Сохраняем историю чата в localStorage
        localStorage.setItem('chatHistory', chatContainer.innerHTML);
    }

    function toggleLoadingState(isLoading) {
        if (isLoading) {
            spinner.style.display = 'block';
            sendBtn.classList.add('disabled');
            resetBtn.classList.add('disabled');
            sendBtn.disabled = true;
            resetBtn.disabled = true;
            messageInput.disabled = true;
        } else {
            spinner.style.display = 'none';
            sendBtn.classList.remove('disabled');
            resetBtn.classList.remove('disabled');
            sendBtn.disabled = false;
            resetBtn.disabled = false;
            messageInput.disabled = false;
            messageInput.focus();
        }
    }

    // Автофокус на поле ввода при загрузке страницы
    window.onload = function() {
        messageInput.focus();
    };
</script>
</body>
</html>