35604-vm/index.php
2026-01-26 21:24:18 +00:00

390 lines
25 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- SEO & Meta Tags -->
<title>SmartRecipe Умный помощник по рецептам и покупкам</title>
<meta name="description" content="Сохраняйте рецепты из Pinterest и Instagram, создавайте рецепты по фото с помощью ИИ, сравнивайте цены в магазинах и делите чеки с друзьями.">
<meta name="keywords" content="рецепты ИИ, список покупок, планировщик питания, распознавание блюд, сравнение цен, разделение чека">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:title" content="SmartRecipe — Умный помощник по рецептам и покупкам">
<meta property="og:description" content="ИИ-помощник для создания рецептов по фото, сравнения цен и организации совместных покупок.">
<meta property="og:image" content="">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="SmartRecipe — Умный помощник по рецептам и покупкам">
<meta name="twitter:description" content="ИИ-помощник для создания рецептов по фото, сравнения цен и организации совместных покупок.">
<meta name="twitter:image" content="">
<!-- Styles -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>_v4">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light shadow-sm sticky-top mb-4">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="/">
<i class="bi bi-book-half me-2" style="color: var(--accent-color);"></i>
<span class="fw-bold">СмартРецепт</span>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto align-items-center" id="auth-nav">
<!-- Auth elements will be injected here -->
<li class="nav-item">
<div class="spinner-border spinner-border-sm text-primary" role="status"></div>
</li>
</ul>
</div>
</div>
</nav>
<div id="guest-view" class="d-none auth-screen">
<div class="container-fluid h-100 p-0">
<div class="row h-100 g-0">
<!-- Left Column: Image -->
<div class="col-lg-6 d-none d-lg-block auth-image-container">
<div class="auth-image-overlay d-flex align-items-center justify-content-center p-5 text-white">
<div class="auth-branding-content text-start">
<div class="text-center mb-4">
<i class="bi bi-book-half display-1" style="color: #FF7F50; filter: drop-shadow(0 0 10px rgba(255, 127, 80, 0.3));"></i>
<h1 class="display-3 fw-bold mt-2">СмартРецепт</h1>
</div>
<p class="lead fs-5 mb-4">Это не просто кулинарная книга. Это ваш интеллектуальный помощник на каждый день и для особых случаев:</p>
<ul class="list-unstyled fs-6 mb-4">
<li class="mb-3 d-flex align-items-start">
<i class="bi bi-magic text-primary me-3 mt-1"></i>
<span><strong>Рецепты по фото:</strong> Просто загрузите изображение блюда, и ИИ создаст точный рецепт, чтобы результат был как на картинке.</span>
</li>
<li class="mb-3 d-flex align-items-start">
<i class="bi bi-cart-check text-primary me-3 mt-1"></i>
<span><strong>Умные покупки:</strong> Составляйте списки продуктов, сравнивайте цены в магазинах и находите самые выгодные предложения.</span>
</li>
<li class="mb-3 d-flex align-items-start">
<i class="bi bi-people text-primary me-3 mt-1"></i>
<span><span><strong>Совместный доступ:</strong> Распределяйте списки продуктов между друзьями и близкими для организации праздников.</span>
</li>
<li class="mb-3 d-flex align-items-start">
<i class="bi bi-receipt text-primary me-3 mt-1"></i>
<span><strong>Разделение чека:</strong> Сфотографируйте чек после покупок, и приложение само разделит сумму между всеми участниками.</span>
</li>
<li class="mb-3 d-flex align-items-start">
<i class="bi bi-browser-chrome text-primary me-3 mt-1"></i>
<span><strong>Импорт отовсюду:</strong> Сохраняйте любимые идеи из Pinterest, Instagram и других соцсетей в один клик.</span>
</li>
</ul>
</div>
</div>
</div>
<!-- Right Column: Forms -->
<div class="col-lg-6 d-flex align-items-center justify-content-center p-5 bg-white auth-form-container">
<div class="w-100" style="max-width: 450px;">
<!-- Login Form -->
<div id="login-container">
<div class="mb-5">
<h2 class="display-5 mb-2">С возвращением</h2>
<p class="text-muted">Введите свои данные для доступа к рецептам.</p>
</div>
<form id="login-form-landing">
<div class="mb-4">
<label class="form-label">Электронная почта</label>
<input type="email" class="form-control form-control-lg" name="email" placeholder="name@example.com" required>
</div>
<div class="mb-4">
<label class="form-label">Пароль</label>
<input type="password" class="form-control form-control-lg" name="password" placeholder="••••••••" required>
</div>
<div class="d-grid gap-2 mb-4">
<button type="submit" class="btn btn-primary btn-lg">Войти</button>
</div>
</form>
<p class="text-center text-muted">
Нет аккаунта? <a href="#" id="show-register" class="text-primary fw-bold text-decoration-none">Создать аккаунт</a>
</p>
</div>
<!-- Register Form -->
<div id="register-container" class="d-none">
<div class="mb-5">
<h2 class="display-5 mb-2">Регистрация</h2>
<p class="text-muted">Начните свой путь к умной кулинарии сегодня.</p>
</div>
<form id="register-form-landing">
<div class="mb-4">
<label class="form-label">Электронная почта</label>
<input type="email" class="form-control form-control-lg" name="email" placeholder="name@example.com" required>
</div>
<div class="mb-4">
<label class="form-label">Пароль</label>
<input type="password" class="form-control form-control-lg" name="password" placeholder="••••••••" required>
</div>
<div class="d-grid gap-2 mb-4">
<button type="submit" class="btn btn-primary btn-lg">Зарегистрироваться</button>
</div>
</form>
<p class="text-center text-muted">
Уже есть аккаунт? <a href="#" id="show-login" class="text-primary fw-bold text-decoration-none">Войти здесь</a>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="app-view" class="d-none">
<main class="container my-5">
<div class="text-center mb-5" style="padding-top: 20px;">
<h1 class="display-4 mt-4">Моя кулинарная книга</h1>
<p class="lead">Планируйте меню и управляйте списком покупок легко.</p>
</div>
<div class="row g-4">
<!-- Left Column: All Recipes -->
<div class="col-md-6">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="text-center mb-0">Все рецепты</h2>
<button class="btn btn-primary" type="button" data-bs-toggle="modal" data-bs-target="#recipe-form-modal">
Добавить рецепт
</button>
</div>
<div class="mb-3 search-container">
<i class="bi bi-search"></i>
<input type="text" id="recipe-search" class="form-control" placeholder="Поиск рецептов...">
</div>
<div class="mb-3 d-flex flex-wrap gap-2" id="category-filters">
<button class="btn btn-secondary active" data-category="all">Все</button>
<button class="btn btn-outline-secondary" data-category="Drinks">Напитки</button>
<button class="btn btn-outline-secondary" data-category="Breakfast">Завтрак</button>
<button class="btn btn-outline-secondary" data-category="Dinner">Обед/Ужин</button>
<button class="btn btn-outline-secondary" data-category="Appetizers">Закуски</button>
<button class="btn btn-outline-secondary" data-category="No category">Без категории</button>
</div>
<div id="recipe-cards-container" class="row">
<div class="col-12">
<p class="text-center text-muted">Ваши сохраненные рецепты появятся здесь.</p>
</div>
</div>
</div>
<!-- Right Column: Shopping List / Products -->
<div class="col-md-6">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="text-center mb-0">Список покупок</h2>
<div>
<button id="add-product-btn" class="btn btn-primary me-2" data-bs-toggle="modal" data-bs-target="#add-product-modal">Добавить продукт</button>
<button id="print-shopping-list-btn" class="btn btn-outline-secondary"><i class="bi bi-printer"></i> Печать</button>
</div>
</div>
<div class="card shadow">
<div class="card-body" id="shopping-list-container">
<div class="text-center text-muted p-5">
<p>Ваш список покупок появится здесь после выбора рецептов.</p>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<!-- Modal Recipe Form -->
<div class="modal fade" id="recipe-form-modal" tabindex="-1" aria-labelledby="recipe-form-modal-label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="recipe-form-modal-label">Добавить рецепт</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="card p-4 shadow">
<form id="recipe-form">
<input type="hidden" id="recipeId">
<div class="mb-3">
<label for="recipeName" class="form-label">Название рецепта</label>
<input type="text" class="form-control" id="recipeName" placeholder="например, Авокадо тост">
</div>
<div class="mb-3">
<label for="recipeCategory" class="form-label">Категория</label>
<select class="form-control" id="recipeCategory">
<option value="" selected disabled>Выберите...</option>
<option value="Drinks">Напитки</option>
<option value="Breakfast">Завтрак</option>
<option value="Dinner">Обед/Ужин</option>
<option value="Appetizers">Закуски</option>
</select>
</div>
<div class="mb-3">
<label for="recipeImage" class="form-label d-flex justify-content-between">
Фото рецепта
<button type="button" id="ai-scan-btn" class="btn btn-outline-primary btn-sm">
<i class="bi bi-magic"></i> AI Сканер
</button>
</label>
<input type="file" class="form-control" id="recipeImage">
<div id="ai-scan-loading" class="text-primary mt-2 d-none">
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
ИИ определяет блюдо и создает рецепт...
</div>
</div>
<hr class="my-4 border-secondary">
<h3 class="h5 mb-3">Ингредиенты (на 1 человека)</h3>
<div id="ingredients-container">
<!-- Ingredient rows will be injected here by JS -->
</div>
<button type="button" id="add-ingredient" class="btn btn-secondary btn-sm mt-2">+ Добавить ингредиент</button>
<hr class="my-4 border-secondary">
<div class="row">
<div class="col">
<div class="mb-3">
<label for="guestCount" class="form-label">Сколько гостей?</label>
<input type="number" class="form-control" id="guestCount" placeholder="например, 8" min="1" value="1">
</div>
</div>
<div class="col">
<div class="mb-3">
<label for="portionsPerGuest" class="form-label">Порций на гостя</label>
<input type="number" class="form-control" id="portionsPerGuest" placeholder="например, 2" min="1" value="1">
</div>
</div>
</div>
<div class="d-grid gap-2 mt-4">
<button type="button" id="new-recipe-btn" class="btn btn-primary">Сохранить рецепт</button>
<button type="button" id="cancel-edit-btn" class="btn btn-outline-secondary" data-bs-dismiss="modal">Отмена</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Modal Add Product -->
<div class="modal fade" id="add-product-modal" tabindex="-1" aria-labelledby="add-product-modal-label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="add-product-modal-label">Добавить продукт</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="add-product-form">
<div class="mb-3">
<label for="productName" class="form-label">Название продукта</label>
<input type="text" class="form-control" id="productName" placeholder="например, Молоко">
</div>
<div class="row">
<div class="col">
<div class="mb-3">
<label for="productQuantity" class="form-label">Количество</label>
<input type="number" class="form-control" id="productQuantity" placeholder="например, 1" min="1" value="1">
</div>
</div>
<div class="col">
<div class="mb-3">
<label class="form-label">Единица</label>
<div class="btn-group unit-selector" role="group" aria-label="Unit selector">
<button type="button" class="btn btn-secondary unit-btn">г</button>
<button type="button" class="btn btn-outline-secondary unit-btn">кг</button>
<button type="button" class="btn btn-outline-secondary unit-btn">мл</button>
<button type="button" class="btn btn-outline-secondary unit-btn">л</button>
<button type="button" class="btn btn-outline-secondary unit-btn">шт</button>
<button type="button" class="btn btn-outline-secondary unit-btn">уп</button>
</div>
</div>
</div>
</div>
<div class="mb-3" id="product-category-wrapper">
<label for="productCategory" class="form-label">Категория</label>
<select class="form-select" id="productCategory">
<option value="Food" selected>Еда</option>
<option value="Drinks">Напитки</option>
<option value="Cooking and serving">Приготовление и сервировка</option>
<option value="Tableware and consumables">Посуда и расходники</option>
</select>
</div>
<div class="d-grid gap-2 mt-4">
<button type="submit" class="btn btn-primary">Добавить продукт</button>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Отмена</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Modal View Recipe -->
<div class="modal fade" id="view-recipe-modal" tabindex="-1" aria-labelledby="view-recipe-modal-label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="view-recipe-modal-label">Просмотр рецепта</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<h2 id="view-recipe-name"></h2>
<p><strong>Категория:</strong> <span id="view-recipe-category"></span></p>
<p><strong>Порций:</strong> <span id="view-recipe-guests"></span></p>
<hr>
<h3>Ингредиенты</h3>
<ul id="view-recipe-ingredients" class="list-group">
</ul>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
</div>
</div>
</div>
</div>
<footer class="text-center py-4 mt-5">
<p class="mb-0">&copy; <?php echo date("Y"); ?> СмартРецепт — Умный помощник по рецептам и покупкам.</p>
</footer>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
<!-- Confirmation Modal -->
<div class="modal fade" id="confirmRemoveModal" tabindex="-1" aria-labelledby="confirmRemoveModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="confirmRemoveModalLabel">Подтверждение удаления</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Вы собираетесь удалить ингредиент из рецепта. Это изменит сам рецепт. Вы уверены, что хотите продолжить?</p>
<p><strong>Рецепт:</strong> <span id="modal-recipe-name"></span></p>
<p><strong>Ингредиент:</strong> <span id="modal-ingredient-name"></span></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" class="btn btn-danger" id="confirm-remove-btn">Удалить</button>
</div>
</div>
</div>
</div>
</body>
</html>