255 lines
12 KiB
HTML
255 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Daily Calorie Tracker</title>
|
||
<link rel="stylesheet" href="style.css">
|
||
<link rel="stylesheet" href="auth.css">
|
||
<link rel="stylesheet" href="settings.css">
|
||
<link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-icon-57x57.png">
|
||
<link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-icon-60x60.png">
|
||
<link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-icon-72x72.png">
|
||
<link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-icon-76x76.png">
|
||
<link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-icon-114x114.png">
|
||
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-icon-120x120.png">
|
||
<link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-icon-144x144.png">
|
||
<link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-icon-152x152.png">
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-icon-180x180.png">
|
||
<link rel="icon" type="image/png" sizes="192x192" href="/assets/android-icon-192x192.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
|
||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon-96x96.png">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
|
||
<link rel="manifest" href="/assets/manifest.json">
|
||
<meta name="msapplication-TileColor" content="#ffffff">
|
||
<meta name="msapplication-TileImage" content="/assets/ms-icon-144x144.png">
|
||
<meta name="theme-color" content="#ffffff">
|
||
</head>
|
||
<body>
|
||
<!-- Authentication Header -->
|
||
<header class="auth-header">
|
||
<div class="auth-container">
|
||
<div class="logo">
|
||
<h2>🍎 Food Tracker</h2>
|
||
</div>
|
||
|
||
<!-- Authentication Forms -->
|
||
<div id="auth-section" class="auth-section">
|
||
<!-- Login Form -->
|
||
<div id="login-form" class="auth-form">
|
||
<h3>Login</h3>
|
||
<form id="loginForm">
|
||
<div class="form-group">
|
||
<input type="email" id="loginEmail" placeholder="Email" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<input type="password" id="loginPassword" placeholder="Password" required>
|
||
</div>
|
||
<button type="submit" class="auth-btn">Login</button>
|
||
<p class="auth-switch">
|
||
Don't have an account?
|
||
<a href="#" id="showRegister">Register here</a>
|
||
</p>
|
||
</form>
|
||
</div>
|
||
|
||
<!-- Register Form -->
|
||
<div id="register-form" class="auth-form hidden">
|
||
<h3>Register</h3>
|
||
<form id="registerForm">
|
||
<div class="form-group">
|
||
<input type="text" id="registerName" placeholder="Name" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<input type="email" id="registerEmail" placeholder="Email" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<input type="password" id="registerPassword" placeholder="Password" required minlength="8">
|
||
</div>
|
||
<button type="submit" class="auth-btn">Register</button>
|
||
<p class="auth-switch">
|
||
Already have an account?
|
||
<a href="#" id="showLogin">Login here</a>
|
||
</p>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- User Info (shown when logged in) -->
|
||
<div id="user-info" class="user-info hidden">
|
||
<div class="user-details">
|
||
<span id="userName">Welcome, User!</span>
|
||
<div class="header-buttons">
|
||
<button id="calendarBtn" class="header-btn">📅 Calendar</button>
|
||
<button id="settingsBtn" class="header-btn">⚙️ Settings</button>
|
||
<button id="logoutBtn" class="header-btn logout">🚪 Logout</button>
|
||
</div>
|
||
</div>
|
||
<!-- Mobile menu toggle -->
|
||
<button id="mobileMenuToggle" class="mobile-menu-toggle hidden">☰</button>
|
||
<!-- Mobile dropdown menu -->
|
||
<div id="mobileMenu" class="mobile-menu hidden">
|
||
<button id="calendarBtnMobile" class="mobile-menu-item">📅 Calendar</button>
|
||
<button id="settingsBtnMobile" class="mobile-menu-item">⚙️ Settings</button>
|
||
<button id="logoutBtnMobile" class="mobile-menu-item logout">🚪 Logout</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- Loading Overlay -->
|
||
<div id="loading-overlay" class="loading-overlay hidden">
|
||
<div class="loading-spinner"></div>
|
||
<p>Loading...</p>
|
||
</div>
|
||
|
||
<!-- Main App Content -->
|
||
<main id="app-content" class="hidden">
|
||
<div class="container">
|
||
<div class="date-display" id="currentDate"></div>
|
||
|
||
<div class="calories-banner">
|
||
<div class="calories-number" id="caloriesCounter">0</div>
|
||
<div class="calories-text">Calories Today</div>
|
||
<div class="calories-text-goal" id="caloriesGoalText">of 0</div>
|
||
<div class="calories-text-alkaline" id="alkaline-level">80% Alkaline</div>
|
||
</div>
|
||
|
||
<div class="nutrition-summary" id="nutritionSummary">
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-label">Protein (g)</div>
|
||
<div class="nutrition-value" id="proteinValue">0</div>
|
||
<div class="nutrition-label hidden" id="proteinGoalText">of 190</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-label">Fat (g)</div>
|
||
<div class="nutrition-value" id="fatValue">0</div>
|
||
<div class="nutrition-label hidden" id="fatGoalText">of 190</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-label">Carbs (g)</div>
|
||
<div class="nutrition-value" id="carboValue">0</div>
|
||
<div class="nutrition-label hidden" id="carboGoalText">of 190</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-label">Fiber (g)</div>
|
||
<div class="nutrition-value" id="fiberValue">0</div>
|
||
<div class="nutrition-label hidden" id="fiberGoalText">of 190</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="add-food-section">
|
||
<h2 class="add-food-title" id="add-foot-title">Add Food Entry</h2>
|
||
<div class="add-food-form">
|
||
<div class="form-group">
|
||
<label for="foodSelect">Food Item</label>
|
||
<div class="food-search-container">
|
||
<input
|
||
type="text"
|
||
class="food-search-input"
|
||
id="foodSearchInput"
|
||
placeholder="Search food (e.g., apple, chicken breast, rice...)"
|
||
autocomplete="off"
|
||
>
|
||
<div class="search-loading" id="searchLoading"></div>
|
||
|
||
<!-- Search Results Overlay -->
|
||
<div class="search-results" id="searchResults">
|
||
<!-- Results will be populated here -->
|
||
</div>
|
||
|
||
<!-- Hidden inputs for state -->
|
||
<input type="hidden" id="foodIdToUpdate">
|
||
<input type="hidden" id="foodTimeToUpdate">
|
||
<input type="hidden" id="foodCaloriesToUpdate">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="gramAmount">Amount (grams)</label>
|
||
<input type="number" id="gramAmount" min="1" step="1" value="100">
|
||
</div>
|
||
<button class="add-btn" id="add-food-btn">Add Food</button>
|
||
<button class="cancel-btn" id="cancel-food-btn">Cancel</button>
|
||
</div>
|
||
<div class="display-none" id="food-preview">
|
||
<div class="nutrition-summary">
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-value" id="calorieValuePreview">0</div>
|
||
<div class="nutrition-label">Calories</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-value" id="proteinValuePreview">0</div>
|
||
<div class="nutrition-label">Protein (g)</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-value" id="fatValuePreview">0</div>
|
||
<div class="nutrition-label">Fat (g)</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-value" id="carboValuePreview">0</div>
|
||
<div class="nutrition-label">Carbs (g)</div>
|
||
</div>
|
||
<div class="nutrition-item">
|
||
<div class="nutrition-value" id="fiberValuePreview">0</div>
|
||
<div class="nutrition-label">Fiber (g)</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-title">Food Log</div>
|
||
|
||
<div class="food-cards-container" id="foodCardsContainer">
|
||
<!-- Food cards will be added here -->
|
||
</div>
|
||
|
||
<div class="calendar-section">
|
||
<div class="calendar-header">
|
||
<button class="calendar-nav" id="previous-month-btn">‹</button>
|
||
<div class="calendar-title" id="calendarTitle">Month Year</div>
|
||
<button class="calendar-nav" id="next-month-btn">›</button>
|
||
</div>
|
||
<div class="calendar-grid" id="calendarGrid">
|
||
<!-- Calendar will be generated here -->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<!-- Settings -->
|
||
<section id="settings-content" class="hidden">
|
||
<div class="container">
|
||
<h1>⚙️ Settings</h1>
|
||
|
||
<div class="date-display">Define your daily macros goal</div>
|
||
|
||
<form id="settingsForm" class="settings-form">
|
||
<div class="form-group">
|
||
<label for="caloriesGoal">Daily calorie goal</label>
|
||
<input type="number" id="caloriesGoal" placeholder="Calories" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="proteinGoal">Daily protein goal</label>
|
||
<input type="number" id="proteinGoal" placeholder="Proteins in grams" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="fatGoal">Daily fat goal</label>
|
||
<input type="number" id="fatGoal" placeholder="Fat in grams" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="carboGoal">Daily carbs goal</label>
|
||
<input type="number" id="carboGoal" placeholder="Carbo in grams" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="fiberGoal">Daily fiber goal</label>
|
||
<input type="number" id="fiberGoal" placeholder="Fiber in grams" required>
|
||
</div>
|
||
<button type="submit" class="settings-btn">Save</button>
|
||
</form>
|
||
</div>
|
||
</section>
|
||
|
||
<script type="module" src="src/index.ts"></script>
|
||
</body>
|
||
</html>
|