Merge pull request #6 from AcadeNice/feat/p3-admin-shell

feat(admin): admin back-office visual shell (P3 scaffold)
This commit is contained in:
Imugiii 2026-06-04 17:28:31 +02:00 committed by GitHub
commit a3eae01906
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 2983 additions and 0 deletions

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

View file

@ -0,0 +1,232 @@
/* Wakdo Admin Vanilla JS
* No framework dependency. Handles:
* - User dropdown toggle (topbar)
* - Action menu (kebab) open/close
* - Sortable table columns (client-side)
* - Inline table search
* - Tab switching (catalogue)
* - Clock display (cuisine)
*/
(function () {
'use strict';
/* ---- Utility ---- */
function qs(selector, root) {
return (root || document).querySelector(selector);
}
function qsa(selector, root) {
return Array.from((root || document).querySelectorAll(selector));
}
/* ---- User dropdown (topbar) ---- */
function initUserMenu() {
var btn = qs('#userMenuBtn');
var menu = qs('#userMenu');
if (!btn || !menu) return;
btn.addEventListener('click', function (e) {
e.stopPropagation();
var isOpen = menu.classList.contains('open');
closeAllDropdowns();
if (!isOpen) {
menu.classList.add('open');
btn.setAttribute('aria-expanded', 'true');
}
});
}
/* ---- Action menus (kebab per table row) ---- */
function initActionMenus() {
qsa('.action-menu-btn').forEach(function (btn) {
btn.addEventListener('click', function (e) {
e.stopPropagation();
var dropdown = btn.nextElementSibling;
if (!dropdown) return;
var isOpen = dropdown.classList.contains('open');
closeAllDropdowns();
if (!isOpen) {
dropdown.classList.add('open');
btn.classList.add('open');
}
});
});
}
function closeAllDropdowns() {
qsa('.dropdown-menu.open, .action-menu-dropdown.open').forEach(function (el) {
el.classList.remove('open');
});
qsa('.action-menu-btn.open').forEach(function (el) {
el.classList.remove('open');
});
var userBtn = qs('#userMenuBtn');
if (userBtn) userBtn.setAttribute('aria-expanded', 'false');
}
document.addEventListener('click', closeAllDropdowns);
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') closeAllDropdowns();
});
/* ---- Sortable tables ---- */
function initSortableTables() {
qsa('table').forEach(function (table) {
var headers = qsa('th.sortable', table);
if (!headers.length) return;
headers.forEach(function (th) {
th.addEventListener('click', function () {
var colIndex = parseInt(th.getAttribute('data-col'), 10);
var currentDir = th.getAttribute('data-dir') || 'none';
var newDir = currentDir === 'asc' ? 'desc' : 'asc';
/* reset other headers */
headers.forEach(function (h) {
h.removeAttribute('data-dir');
h.classList.remove('sort-asc', 'sort-desc');
});
th.setAttribute('data-dir', newDir);
th.classList.add('sort-' + newDir);
sortTableByCol(table, colIndex, newDir);
});
});
});
}
function sortTableByCol(table, colIndex, dir) {
var tbody = table.querySelector('tbody');
if (!tbody) return;
var rows = Array.from(tbody.querySelectorAll('tr'));
rows.sort(function (a, b) {
var cellA = getCellText(a, colIndex);
var cellB = getCellText(b, colIndex);
/* detect numeric (strip currency, spaces) */
var numA = parseFloat(cellA.replace(/[^0-9,.-]/g, '').replace(',', '.'));
var numB = parseFloat(cellB.replace(/[^0-9,.-]/g, '').replace(',', '.'));
var cmp;
if (!isNaN(numA) && !isNaN(numB)) {
cmp = numA - numB;
} else {
cmp = cellA.localeCompare(cellB, 'fr');
}
return dir === 'asc' ? cmp : -cmp;
});
rows.forEach(function (row) {
tbody.appendChild(row);
});
}
function getCellText(row, index) {
var cell = row.cells[index];
if (!cell) return '';
return cell.textContent.trim();
}
/* ---- Inline table search ---- */
function initTableSearch() {
var searchInputs = [
{ inputId: 'orderSearch', tableId: 'ordersTable' },
{ inputId: 'productSearch', tableId: 'productTable' },
{ inputId: 'cmdSearch', tableId: 'cmdTable' },
{ inputId: 'userSearch', tableId: 'userTable' }
];
searchInputs.forEach(function (pair) {
var input = qs('#' + pair.inputId);
var table = qs('#' + pair.tableId);
if (!input || !table) return;
input.addEventListener('input', function () {
var term = input.value.trim().toLowerCase();
var rows = qsa('tbody tr', table);
rows.forEach(function (row) {
var text = row.textContent.toLowerCase();
row.style.display = term === '' || text.includes(term) ? '' : 'none';
});
});
});
}
/* ---- Tabs (catalogue) ---- */
function initTabs() {
var tabDefs = [
{ btnId: 'tabCategories', panelId: 'panelCategories' },
{ btnId: 'tabProduits', panelId: 'panelProduits' },
{ btnId: 'tabMenus', panelId: 'panelMenus' }
];
var btns = tabDefs.map(function (d) { return qs('#' + d.btnId); }).filter(Boolean);
var panels = tabDefs.map(function (d) { return qs('#' + d.panelId); }).filter(Boolean);
if (!btns.length) return;
btns.forEach(function (btn, i) {
btn.addEventListener('click', function () {
btns.forEach(function (b) { b.classList.remove('active'); });
panels.forEach(function (p) { p.classList.remove('active'); });
btn.classList.add('active');
if (panels[i]) panels[i].classList.add('active');
});
});
}
/* ---- Kitchen clock ---- */
function initKitchenClock() {
var clockEl = qs('#kitchenTime');
if (!clockEl) return;
function tick() {
var now = new Date();
var h = String(now.getHours()).padStart(2, '0');
var m = String(now.getMinutes()).padStart(2, '0');
var s = String(now.getSeconds()).padStart(2, '0');
clockEl.textContent = h + ':' + m + ':' + s;
}
tick();
setInterval(tick, 1000);
}
/* ---- Refresh button (visual feedback only — no real fetch) ---- */
function initRefreshButtons() {
qsa('#refreshBtn, #kitchenRefresh').forEach(function (btn) {
btn.addEventListener('click', function () {
var svg = btn.querySelector('svg');
if (svg) {
svg.style.transition = 'transform 0.6s';
svg.style.transform = 'rotate(360deg)';
setTimeout(function () {
svg.style.transition = '';
svg.style.transform = '';
}, 650);
}
});
});
}
/* ---- Bootstrap ---- */
function init() {
initUserMenu();
initActionMenus();
initSortableTables();
initTableSearch();
initTabs();
initKitchenClock();
initRefreshButtons();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
}());

View file

@ -0,0 +1,306 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Catalogue — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="admin-layout">
<!-- Topbar -->
<header class="topbar">
<div class="topbar-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<div>
<span class="topbar-logo-text">Wakdo</span>
<span class="topbar-logo-sub">Administration</span>
</div>
</div>
<div class="topbar-search">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="Rechercher un produit, une categorie...">
</div>
<div class="topbar-actions">
<div class="topbar-user">
<button class="topbar-user-btn" id="userMenuBtn" type="button">
<div class="topbar-user-avatar">CJ</div>
<div>
<div class="topbar-user-name">Corentin J.</div>
<div class="topbar-user-role">Administrateur</div>
</div>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="dropdown-menu" id="userMenu">
<a href="#">Mon profil</a>
<a href="#">Parametres</a>
<div class="divider"></div>
<button class="danger" type="button">Se deconnecter</button>
</div>
</div>
</div>
</header>
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-section">
<div class="sidebar-section-label">Vue d'ensemble</div>
<a href="dashboard.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg>
Tableau de bord
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub active">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg>
Categories
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
Produits
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"></path><rect x="9" y="3" width="6" height="4" rx="2"></rect></svg>
Menus
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="commandes.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
Commandes
</a>
<a href="cuisine.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg>
Cuisine
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<a href="users.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
Utilisateurs
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
Roles
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
</div>
</nav>
<!-- Content -->
<main class="content">
<div class="page-header">
<div>
<h1 class="page-title">Catalogue</h1>
<p class="page-subtitle">Categories, produits et menus disponibles sur la borne</p>
</div>
<div class="page-actions">
<button class="btn btn-secondary" type="button">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
Importer
</button>
<button class="btn btn-primary" type="button">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
Nouveau produit
</button>
</div>
</div>
<!-- Tabs -->
<div class="tabs">
<button class="tab-btn" id="tabCategories" type="button">Categories (9)</button>
<button class="tab-btn active" id="tabProduits" type="button">Produits (53)</button>
<button class="tab-btn" id="tabMenus" type="button">Menus (13)</button>
</div>
<!-- Panel: Produits (default) -->
<div id="panelProduits" class="tab-panel active">
<div class="toolbar">
<div class="toolbar-left">
<div class="search-field">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="Rechercher un produit..." id="productSearch">
</div>
<select class="filter-select" id="categoryFilter">
<option value="">Toutes les categories</option>
<option value="burgers">Burgers</option>
<option value="wraps">Wraps</option>
<option value="salades">Salades</option>
<option value="frites">Frites</option>
<option value="boissons">Boissons</option>
<option value="sauces">Sauces</option>
<option value="desserts">Desserts</option>
<option value="encas">Encas</option>
</select>
<select class="filter-select">
<option value="">Tous les statuts</option>
<option value="active">Disponible</option>
<option value="inactive">Indisponible</option>
</select>
</div>
</div>
<div class="table-container">
<div class="table-wrapper">
<table id="productTable">
<thead>
<tr>
<th style="width:52px;">Image</th>
<th class="sortable" data-col="1">Libelle <span class="sort-icon">&#8597;</span></th>
<th class="sortable" data-col="2">Categorie <span class="sort-icon">&#8597;</span></th>
<th class="sortable" data-col="3" style="text-align:right;">Prix <span class="sort-icon">&#8597;</span></th>
<th>Stock</th>
<th style="width:50px;"></th>
</tr>
</thead>
<tbody>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Big Mac</td>
<td class="muted">Burgers</td>
<td class="text-right fw-600">6,00 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Royal Bacon</td>
<td class="muted">Burgers</td>
<td class="text-right fw-600">5,10 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">CBO</td>
<td class="muted">Burgers</td>
<td class="text-right fw-600">8,90 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">MC Crispy</td>
<td class="muted">Burgers</td>
<td class="text-right fw-600">5,30 &euro;</td>
<td><span class="pill pill-danger">Indisponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Activer</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Coca Cola</td>
<td class="muted">Boissons</td>
<td class="text-right fw-600">1,90 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Moyenne Frite</td>
<td class="muted">Frites</td>
<td class="text-right fw-600">2,75 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Ketchup</td>
<td class="muted">Sauces</td>
<td class="text-right fw-600">0,70 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
<tr>
<td><div class="thumb-placeholder"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9CA3AF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg></div></td>
<td class="fw-600">Nuggets x4</td>
<td class="muted">Encas</td>
<td class="text-right fw-600">4,20 &euro;</td>
<td><span class="pill pill-success">Disponible</span></td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button><div class="divider"></div><button class="danger" type="button">Supprimer</button></div></div></td>
</tr>
</tbody>
</table>
</div>
<div class="pagination">
<span class="pagination-info">Affichage de 8 sur 53 produits</span>
<div class="pagination-controls">
<button class="pagination-btn" disabled type="button">&laquo;</button>
<button class="pagination-btn active" type="button">1</button>
<button class="pagination-btn" type="button">2</button>
<button class="pagination-btn" type="button">3</button>
<button class="pagination-btn" type="button">4</button>
<button class="pagination-btn" type="button">&raquo;</button>
</div>
</div>
</div>
</div>
<!-- Panel: Categories -->
<div id="panelCategories" class="tab-panel">
<div class="table-container">
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Libelle</th>
<th>Produits</th>
<th>Ordre affichage</th>
<th>Statut</th>
<th style="width:50px;"></th>
</tr>
</thead>
<tbody>
<tr><td class="fw-600">Menus</td><td class="muted">13</td><td class="muted">1</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Burgers</td><td class="muted">13</td><td class="muted">2</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Wraps</td><td class="muted">4</td><td class="muted">3</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Salades</td><td class="muted">3</td><td class="muted">4</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Frites</td><td class="muted">5</td><td class="muted">5</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Boissons</td><td class="muted">8</td><td class="muted">6</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Desserts</td><td class="muted">9</td><td class="muted">7</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Encas</td><td class="muted">4</td><td class="muted">8</td><td><span class="pill pill-success">Visible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Masquer</button></div></div></td></tr>
<tr><td class="fw-600">Sauces</td><td class="muted">7</td><td class="muted">9</td><td><span class="pill pill-neutral">Masquee</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Afficher</button></div></div></td></tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Panel: Menus -->
<div id="panelMenus" class="tab-panel">
<div class="table-container">
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>Libelle</th>
<th style="text-align:right;">Prix</th>
<th>Contenu</th>
<th>Statut</th>
<th style="width:50px;"></th>
</tr>
</thead>
<tbody>
<tr><td class="fw-600">Menu Le 280</td><td class="text-right fw-600">8,80 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-success">Disponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button></div></div></td></tr>
<tr><td class="fw-600">Menu Big Tasty</td><td class="text-right fw-600">10,60 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-success">Disponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button></div></div></td></tr>
<tr><td class="fw-600">Menu Big Mac</td><td class="text-right fw-600">8,00 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-success">Disponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button></div></div></td></tr>
<tr><td class="fw-600">Menu CBO</td><td class="text-right fw-600">10,90 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-success">Disponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button></div></div></td></tr>
<tr><td class="fw-600">Menu Royal Cheese</td><td class="text-right fw-600">6,40 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-success">Disponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Desactiver</button></div></div></td></tr>
<tr><td class="fw-600">Menu Royal Bacon</td><td class="text-right fw-600">7,05 &euro;</td><td class="muted text-sm">Burger + Frites + Boisson + Sauce</td><td><span class="pill pill-danger">Indisponible</span></td><td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Modifier</a><button type="button">Activer</button></div></div></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</main>
</div>
<script src="assets/js/admin.js"></script>
</body>
</html>

View file

@ -0,0 +1,254 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Commandes — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="admin-layout">
<!-- Topbar -->
<header class="topbar">
<div class="topbar-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<div>
<span class="topbar-logo-text">Wakdo</span>
<span class="topbar-logo-sub">Administration</span>
</div>
</div>
<div class="topbar-search">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="N° commande, statut...">
</div>
<div class="topbar-actions">
<div class="topbar-user">
<button class="topbar-user-btn" id="userMenuBtn" type="button">
<div class="topbar-user-avatar">CJ</div>
<div>
<div class="topbar-user-name">Corentin J.</div>
<div class="topbar-user-role">Administrateur</div>
</div>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="dropdown-menu" id="userMenu">
<a href="#">Mon profil</a>
<a href="#">Parametres</a>
<div class="divider"></div>
<button class="danger" type="button">Se deconnecter</button>
</div>
</div>
</div>
</header>
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-section">
<div class="sidebar-section-label">Vue d'ensemble</div>
<a href="dashboard.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg>
Tableau de bord
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg>
Categories
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
Produits
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"></path><rect x="9" y="3" width="6" height="4" rx="2"></rect></svg>
Menus
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="commandes.html" class="sidebar-item active">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
Commandes
</a>
<a href="cuisine.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg>
Cuisine
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<a href="users.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
Utilisateurs
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
Roles
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
</div>
</nav>
<!-- Content -->
<main class="content">
<div class="page-header">
<div>
<h1 class="page-title">Commandes</h1>
<p class="page-subtitle">Historique et suivi de toutes les commandes</p>
</div>
</div>
<!-- Filters -->
<div class="toolbar">
<div class="toolbar-left">
<div class="search-field">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="N° commande..." id="cmdSearch">
</div>
<select class="filter-select" id="statusFilter">
<option value="">Tous les statuts</option>
<option value="pending">En attente</option>
<option value="paid">Payee</option>
<option value="preparing">En preparation</option>
<option value="ready">Prete</option>
<option value="delivered">Livree</option>
<option value="cancelled">Annulee</option>
</select>
<select class="filter-select">
<option value="">Tous les modes</option>
<option value="kiosk">Borne</option>
<option value="counter">Comptoir</option>
<option value="drive">Drive</option>
</select>
<select class="filter-select">
<option value="today">Aujourd'hui</option>
<option value="7d">7 derniers jours</option>
<option value="30d">30 derniers jours</option>
<option value="custom">Personnalise</option>
</select>
</div>
</div>
<div class="table-container">
<div class="table-wrapper">
<table id="cmdTable">
<thead>
<tr>
<th class="sortable" data-col="0"><span class="sort-icon">&#8597;</span></th>
<th class="sortable" data-col="1">Date / Heure <span class="sort-icon">&#8597;</span></th>
<th>Mode</th>
<th>Source</th>
<th>Statut</th>
<th style="text-align:center;">Lignes</th>
<th class="sortable" data-col="6" style="text-align:right;">Total <span class="sort-icon">&#8597;</span></th>
<th style="width:50px;"></th>
</tr>
</thead>
<tbody>
<tr>
<td class="mono fw-600">#1087</td>
<td class="muted">09/05/2026 13:42</td>
<td><span class="pill pill-info">Sur place</span></td>
<td class="muted text-sm">Borne</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">3</td>
<td class="text-right fw-600">18,70 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1086</td>
<td class="muted">09/05/2026 13:38</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td class="muted text-sm">Comptoir</td>
<td><span class="pill pill-warning">En preparation</span></td>
<td style="text-align:center;" class="muted">5</td>
<td class="text-right fw-600">24,30 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1085</td>
<td class="muted">09/05/2026 13:31</td>
<td><span class="pill pill-info">Sur place</span></td>
<td class="muted text-sm">Borne</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">2</td>
<td class="text-right fw-600">11,40 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1084</td>
<td class="muted">09/05/2026 13:27</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td class="muted text-sm">Drive</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">2</td>
<td class="text-right fw-600">8,80 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1083</td>
<td class="muted">09/05/2026 13:19</td>
<td><span class="pill pill-info">Sur place</span></td>
<td class="muted text-sm">Borne</td>
<td><span class="pill pill-neutral">Annulee</span></td>
<td style="text-align:center;" class="muted">1</td>
<td class="text-right muted">6,40 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1082</td>
<td class="muted">09/05/2026 13:14</td>
<td><span class="pill pill-info">Sur place</span></td>
<td class="muted text-sm">Borne</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">7</td>
<td class="text-right fw-600">32,10 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1081</td>
<td class="muted">09/05/2026 13:08</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td class="muted text-sm">Drive</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">2</td>
<td class="text-right fw-600">10,90 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
<tr>
<td class="mono fw-600">#1080</td>
<td class="muted">09/05/2026 12:58</td>
<td><span class="pill pill-info">Sur place</span></td>
<td class="muted text-sm">Comptoir</td>
<td><span class="pill pill-success">Livree</span></td>
<td style="text-align:center;" class="muted">4</td>
<td class="text-right fw-600">15,60 &euro;</td>
<td><div class="action-menu"><button class="action-menu-btn" type="button"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg></button><div class="action-menu-dropdown"><a href="#">Voir detail</a><div class="divider"></div><button class="danger" type="button">Annuler</button></div></div></td>
</tr>
</tbody>
</table>
</div>
<div class="pagination">
<span class="pagination-info">Affichage de 8 sur 231 commandes</span>
<div class="pagination-controls">
<button class="pagination-btn" disabled type="button">&laquo;</button>
<button class="pagination-btn active" type="button">1</button>
<button class="pagination-btn" type="button">2</button>
<button class="pagination-btn" type="button">3</button>
<span style="padding:0 4px;color:var(--color-text-muted);font-size:12px;">...</span>
<button class="pagination-btn" type="button">29</button>
<button class="pagination-btn" type="button">&raquo;</button>
</div>
</div>
</div>
</main>
</div>
<script src="assets/js/admin.js"></script>
</body>
</html>

View file

@ -0,0 +1,253 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cuisine — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="admin-layout">
<!-- Topbar -->
<header class="topbar">
<div class="topbar-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<div>
<span class="topbar-logo-text">Wakdo</span>
<span class="topbar-logo-sub">Administration</span>
</div>
</div>
<div class="topbar-search">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="Rechercher une commande...">
</div>
<div class="topbar-actions">
<div class="topbar-user">
<button class="topbar-user-btn" id="userMenuBtn" type="button">
<div class="topbar-user-avatar">CJ</div>
<div>
<div class="topbar-user-name">Corentin J.</div>
<div class="topbar-user-role">Administrateur</div>
</div>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="dropdown-menu" id="userMenu">
<a href="#">Mon profil</a>
<a href="#">Parametres</a>
<div class="divider"></div>
<button class="danger" type="button">Se deconnecter</button>
</div>
</div>
</div>
</header>
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-section">
<div class="sidebar-section-label">Vue d'ensemble</div>
<a href="dashboard.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg>
Tableau de bord
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg>
Categories
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
Produits
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"></path><rect x="9" y="3" width="6" height="4" rx="2"></rect></svg>
Menus
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="commandes.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
Commandes
</a>
<a href="cuisine.html" class="sidebar-item active">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg>
Cuisine
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<a href="users.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
Utilisateurs
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
Roles
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
</div>
</nav>
<!-- Content -->
<main class="content">
<div class="page-header">
<div>
<h1 class="page-title">Cuisine</h1>
<p class="page-subtitle">Commandes en attente de preparation — tries par heure croissante</p>
</div>
<div class="page-actions">
<span class="text-sm text-muted" id="kitchenTime">13:42:17</span>
<button class="btn btn-secondary" type="button" id="kitchenRefresh">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>
Actualiser
</button>
</div>
</div>
<!-- Kitchen cards grid -->
<div class="kitchen-grid" id="kitchenGrid">
<div class="kitchen-card">
<div class="kitchen-card-header">
<div>
<div class="kitchen-order-num">#1086</div>
<div class="kitchen-order-time">13:38 &mdash; 4 min</div>
</div>
<span class="pill pill-neutral">A emporter</span>
</div>
<div class="kitchen-card-body">
<div class="kitchen-line">
<span><span class="kitchen-qty">x2</span>Menu Big Mac</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Grande Frite</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x2</span>Coca Cola</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Nuggets x4</span>
</div>
</div>
<div class="kitchen-card-footer">
<span class="text-sm text-muted">24,30 &euro;</span>
<button class="btn btn-primary btn-sm" type="button">Marquer prete</button>
</div>
</div>
<div class="kitchen-card">
<div class="kitchen-card-header">
<div>
<div class="kitchen-order-num">#1088</div>
<div class="kitchen-order-time">13:44 &mdash; 2 min</div>
</div>
<span class="pill pill-info">Sur place</span>
</div>
<div class="kitchen-card-body">
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Menu CBO</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Fanta Orange</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Classic Barbecue</span>
</div>
</div>
<div class="kitchen-card-footer">
<span class="text-sm text-muted">13,50 &euro;</span>
<button class="btn btn-primary btn-sm" type="button">Marquer prete</button>
</div>
</div>
<div class="kitchen-card">
<div class="kitchen-card-header">
<div>
<div class="kitchen-order-num">#1089</div>
<div class="kitchen-order-time">13:45 &mdash; 1 min</div>
</div>
<span class="pill pill-neutral">A emporter</span>
</div>
<div class="kitchen-card-body">
<div class="kitchen-line">
<span><span class="kitchen-qty">x3</span>Menu Royal Cheese</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Petite Salade</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x3</span>Eau</span>
</div>
</div>
<div class="kitchen-card-footer">
<span class="text-sm text-muted">25,50 &euro;</span>
<button class="btn btn-primary btn-sm" type="button">Marquer prete</button>
</div>
</div>
<div class="kitchen-card">
<div class="kitchen-card-header">
<div>
<div class="kitchen-order-num">#1090</div>
<div class="kitchen-order-time">13:46 &mdash; maintenant</div>
</div>
<span class="pill pill-info">Sur place</span>
</div>
<div class="kitchen-card-body">
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Big Tasty Bacon</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Grande Frite</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x1</span>Ice Tea Peche</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x2</span>Ketchup</span>
</div>
</div>
<div class="kitchen-card-footer">
<span class="text-sm text-muted">12,60 &euro;</span>
<button class="btn btn-primary btn-sm" type="button">Marquer prete</button>
</div>
</div>
<div class="kitchen-card">
<div class="kitchen-card-header">
<div>
<div class="kitchen-order-num">#1091</div>
<div class="kitchen-order-time">13:46 &mdash; maintenant</div>
</div>
<span class="pill pill-neutral">A emporter</span>
</div>
<div class="kitchen-card-body">
<div class="kitchen-line">
<span><span class="kitchen-qty">x4</span>Cheeseburger</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x2</span>Moyenne Frite</span>
</div>
<div class="kitchen-line">
<span><span class="kitchen-qty">x4</span>Coca Cola</span>
</div>
</div>
<div class="kitchen-card-footer">
<span class="text-sm text-muted">22,10 &euro;</span>
<button class="btn btn-primary btn-sm" type="button">Marquer prete</button>
</div>
</div>
</div>
</main>
</div>
<script src="assets/js/admin.js"></script>
</body>
</html>

View file

@ -0,0 +1,411 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tableau de bord — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="admin-layout">
<!-- Topbar -->
<header class="topbar">
<div class="topbar-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<div>
<span class="topbar-logo-text">Wakdo</span>
<span class="topbar-logo-sub">Administration</span>
</div>
</div>
<div class="topbar-search">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
<input type="text" placeholder="Rechercher une commande, un produit...">
</div>
<div class="topbar-actions">
<div class="topbar-user">
<button class="topbar-user-btn" id="userMenuBtn" type="button" aria-haspopup="true" aria-expanded="false">
<div class="topbar-user-avatar">CJ</div>
<div>
<div class="topbar-user-name">Corentin J.</div>
<div class="topbar-user-role">Administrateur</div>
</div>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="6 9 12 15 18 9"></polyline>
</svg>
</button>
<div class="dropdown-menu" id="userMenu">
<a href="#">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"></circle><path d="M4 20c0-4 3.6-7 8-7s8 3 8 7"></path></svg>
Mon profil
</a>
<a href="#">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
<div class="divider"></div>
<button class="danger" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line></svg>
Se deconnecter
</button>
</div>
</div>
</div>
</header>
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-section">
<div class="sidebar-section-label">Vue d'ensemble</div>
<a href="dashboard.html" class="sidebar-item active">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg>
Tableau de bord
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg>
Categories
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
Produits
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"></path><rect x="9" y="3" width="6" height="4" rx="2"></rect></svg>
Menus
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="commandes.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
Commandes
</a>
<a href="cuisine.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg>
Cuisine
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<a href="users.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
Utilisateurs
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
Roles
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
</div>
</nav>
<!-- Content -->
<main class="content">
<div class="page-header">
<div>
<h1 class="page-title">Tableau de bord</h1>
<p class="page-subtitle">Samedi 9 mai 2026 — Service en cours</p>
</div>
<div class="page-actions">
<select class="filter-select" id="periodFilter">
<option value="today" selected>Aujourd'hui</option>
<option value="7d">7 derniers jours</option>
<option value="30d">30 derniers jours</option>
<option value="custom">Personnalise</option>
</select>
<button class="btn btn-secondary" type="button" id="refreshBtn">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>
Actualiser
</button>
</div>
</div>
<!-- KPI Cards -->
<div class="kpi-grid">
<div class="kpi-card">
<div class="kpi-label">Ventes du jour</div>
<div class="kpi-value">2 847,50 &euro;</div>
<div>
<span class="kpi-delta up">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg>
+12,4 %
</span>
<span class="kpi-delta-sub">vs hier</span>
</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Commandes du jour</div>
<div class="kpi-value">231</div>
<div>
<span class="kpi-delta up">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg>
+8,2 %
</span>
<span class="kpi-delta-sub">vs hier</span>
</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Panier moyen</div>
<div class="kpi-value">12,33 &euro;</div>
<div>
<span class="kpi-delta down">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
-1,8 %
</span>
<span class="kpi-delta-sub">vs hier</span>
</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Produits actifs</div>
<div class="kpi-value">53</div>
<div>
<span class="kpi-delta neutral">
&mdash;
</span>
<span class="kpi-delta-sub">inchange</span>
</div>
</div>
</div>
<!-- Recent Orders -->
<div class="section-block">
<div class="card-header">
<span class="card-title">Dernieres commandes</span>
<a href="commandes.html" class="btn btn-ghost btn-sm">
Voir tout
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
</a>
</div>
<div class="toolbar" style="padding: 12px 16px 0; margin-bottom: 0;">
<div class="toolbar-left">
<div class="search-field">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="N° de commande..." id="orderSearch">
</div>
<select class="filter-select">
<option value="">Tous les statuts</option>
<option value="pending">En attente</option>
<option value="preparing">En preparation</option>
<option value="ready">Prete</option>
<option value="delivered">Livree</option>
<option value="cancelled">Annulee</option>
</select>
</div>
</div>
<div class="table-wrapper">
<table id="ordersTable">
<thead>
<tr>
<th class="sortable" data-col="0"><span class="sort-icon">&#8597;</span></th>
<th class="sortable" data-col="1">Heure <span class="sort-icon">&#8597;</span></th>
<th>Mode</th>
<th>Statut</th>
<th class="sortable" data-col="4">Total <span class="sort-icon">&#8597;</span></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td class="mono fw-600">#1087</td>
<td class="muted">13:42</td>
<td><span class="pill pill-info">Sur place</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">18,70 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>
Voir detail
</a>
<div class="divider"></div>
<button class="danger" type="button">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6"></path><path d="M14 11v6"></path></svg>
Annuler
</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1086</td>
<td class="muted">13:38</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td><span class="pill pill-warning">En preparation</span></td>
<td class="fw-600">24,30 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>
Voir detail
</a>
<div class="divider"></div>
<button class="danger" type="button">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6"></path><path d="M14 11v6"></path></svg>
Annuler
</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1085</td>
<td class="muted">13:31</td>
<td><span class="pill pill-info">Sur place</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">11,40 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
<div class="divider"></div>
<button class="danger" type="button"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path></svg>Annuler</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1084</td>
<td class="muted">13:27</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">8,80 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
<div class="divider"></div>
<button class="danger" type="button"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path></svg>Annuler</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1083</td>
<td class="muted">13:19</td>
<td><span class="pill pill-info">Sur place</span></td>
<td><span class="pill pill-neutral">Annulee</span></td>
<td class="fw-600 text-muted">6,40 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1082</td>
<td class="muted">13:14</td>
<td><span class="pill pill-info">Sur place</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">32,10 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
<div class="divider"></div>
<button class="danger" type="button"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path></svg>Annuler</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1081</td>
<td class="muted">13:08</td>
<td><span class="pill pill-neutral">A emporter</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">10,90 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
<div class="divider"></div>
<button class="danger" type="button"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path></svg>Annuler</button>
</div>
</div>
</td>
</tr>
<tr>
<td class="mono fw-600">#1080</td>
<td class="muted">12:58</td>
<td><span class="pill pill-info">Sur place</span></td>
<td><span class="pill pill-success">Livree</span></td>
<td class="fw-600">15,60 &euro;</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button" aria-label="Actions">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg>Voir detail</a>
<div class="divider"></div>
<button class="danger" type="button"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path></svg>Annuler</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pagination">
<span class="pagination-info">Affichage de 8 sur 231 commandes</span>
<div class="pagination-controls">
<button class="pagination-btn" disabled type="button">&laquo;</button>
<button class="pagination-btn active" type="button">1</button>
<button class="pagination-btn" type="button">2</button>
<button class="pagination-btn" type="button">3</button>
<span style="padding: 0 4px; color: var(--color-text-muted); font-size: 12px;">...</span>
<button class="pagination-btn" type="button">29</button>
<button class="pagination-btn" type="button">&raquo;</button>
</div>
</div>
</div>
</main>
</div>
<script src="assets/js/admin.js"></script>
</body>
</html>

View file

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connexion — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="login-page">
<div class="login-card">
<div class="login-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<span class="login-logo-title">Wakdo Admin</span>
<span class="login-logo-sub">Back-office de gestion</span>
</div>
<form action="dashboard.html" method="get">
<div class="form-group">
<label class="form-label" for="email">Adresse e-mail</label>
<input
class="form-input"
type="email"
id="email"
name="email"
placeholder="prenom.nom@wakdo.fr"
autocomplete="email"
required
>
</div>
<div class="form-group">
<label class="form-label" for="password">Mot de passe</label>
<input
class="form-input"
type="password"
id="password"
name="password"
placeholder="Votre mot de passe"
autocomplete="current-password"
required
>
</div>
<button type="submit" class="btn btn-primary" style="width:100%;height:40px;justify-content:center;font-size:14px;font-weight:600;margin-top:4px;">
Se connecter
</button>
</form>
<div class="login-footer">
<a href="#">Mot de passe oublie ?</a>
</div>
</div>
</div>
</body>
</html>

296
src/public/admin/users.html Normal file
View file

@ -0,0 +1,296 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Utilisateurs — Wakdo Admin</title>
<link rel="stylesheet" href="assets/css/admin.css">
</head>
<body>
<div class="admin-layout">
<!-- Topbar -->
<header class="topbar">
<div class="topbar-logo">
<img src="assets/images/logo.png" alt="Wakdo">
<div>
<span class="topbar-logo-text">Wakdo</span>
<span class="topbar-logo-sub">Administration</span>
</div>
</div>
<div class="topbar-search">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="Rechercher un utilisateur...">
</div>
<div class="topbar-actions">
<div class="topbar-user">
<button class="topbar-user-btn" id="userMenuBtn" type="button">
<div class="topbar-user-avatar">CJ</div>
<div>
<div class="topbar-user-name">Corentin J.</div>
<div class="topbar-user-role">Administrateur</div>
</div>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="dropdown-menu" id="userMenu">
<a href="#">Mon profil</a>
<a href="#">Parametres</a>
<div class="divider"></div>
<button class="danger" type="button">Se deconnecter</button>
</div>
</div>
</div>
</header>
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-section">
<div class="sidebar-section-label">Vue d'ensemble</div>
<a href="dashboard.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect></svg>
Tableau de bord
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Catalogue</div>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg>
Categories
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
Produits
</a>
<a href="catalogue.html" class="sidebar-item sidebar-item-sub">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"></path><rect x="9" y="3" width="6" height="4" rx="2"></rect></svg>
Menus
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Operations</div>
<a href="commandes.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
Commandes
</a>
<a href="cuisine.html" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg>
Cuisine
</a>
</div>
<div class="sidebar-section">
<div class="sidebar-section-label">Administration</div>
<a href="users.html" class="sidebar-item active">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
Utilisateurs
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
Roles
</a>
<a href="#" class="sidebar-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"></path></svg>
Parametres
</a>
</div>
</nav>
<!-- Content -->
<main class="content">
<div class="page-header">
<div>
<h1 class="page-title">Utilisateurs</h1>
<p class="page-subtitle">Comptes et droits d'acces au back-office</p>
</div>
<div class="page-actions">
<button class="btn btn-primary" type="button">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
Nouvel utilisateur
</button>
</div>
</div>
<div class="toolbar">
<div class="toolbar-left">
<div class="search-field">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input type="text" placeholder="Nom, email..." id="userSearch">
</div>
<select class="filter-select">
<option value="">Tous les roles</option>
<option value="admin">Administrateur</option>
<option value="manager">Manager</option>
<option value="preparation">Preparation</option>
<option value="accueil">Accueil</option>
</select>
<select class="filter-select">
<option value="">Tous les statuts</option>
<option value="active">Actif</option>
<option value="inactive">Inactif</option>
</select>
</div>
</div>
<div class="table-container">
<div class="table-wrapper">
<table id="userTable">
<thead>
<tr>
<th class="sortable" data-col="0">Nom / Email <span class="sort-icon">&#8597;</span></th>
<th class="sortable" data-col="1">Role <span class="sort-icon">&#8597;</span></th>
<th>Statut</th>
<th class="sortable" data-col="3">Derniere connexion <span class="sort-icon">&#8597;</span></th>
<th style="width:50px;"></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="d-flex align-center gap-8">
<div class="topbar-user-avatar" style="width:30px;height:30px;font-size:12px;">CJ</div>
<div>
<div class="fw-600">Corentin Jog</div>
<div class="text-sm text-muted">corentin@wakdo.fr</div>
</div>
</div>
</td>
<td><span class="pill pill-info">Administrateur</span></td>
<td><span class="pill pill-success">Actif</span></td>
<td class="muted">09/05/2026 13:42</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">Modifier</a>
<button type="button">Reinitialiser mdp</button>
<div class="divider"></div>
<button class="danger" type="button">Desactiver</button>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="d-flex align-center gap-8">
<div class="topbar-user-avatar" style="width:30px;height:30px;font-size:12px;background:#E5E7EB;color:#4A4A4A;">ML</div>
<div>
<div class="fw-600">Marie Laurent</div>
<div class="text-sm text-muted">marie.laurent@wakdo.fr</div>
</div>
</div>
</td>
<td><span class="pill pill-warning">Manager</span></td>
<td><span class="pill pill-success">Actif</span></td>
<td class="muted">09/05/2026 10:15</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">Modifier</a>
<button type="button">Reinitialiser mdp</button>
<div class="divider"></div>
<button class="danger" type="button">Desactiver</button>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="d-flex align-center gap-8">
<div class="topbar-user-avatar" style="width:30px;height:30px;font-size:12px;background:#E5E7EB;color:#4A4A4A;">AD</div>
<div>
<div class="fw-600">Ahmed Diallo</div>
<div class="text-sm text-muted">ahmed.diallo@wakdo.fr</div>
</div>
</div>
</td>
<td><span class="pill pill-neutral">Preparation</span></td>
<td><span class="pill pill-success">Actif</span></td>
<td class="muted">09/05/2026 11:00</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">Modifier</a>
<button type="button">Reinitialiser mdp</button>
<div class="divider"></div>
<button class="danger" type="button">Desactiver</button>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="d-flex align-center gap-8">
<div class="topbar-user-avatar" style="width:30px;height:30px;font-size:12px;background:#E5E7EB;color:#4A4A4A;">SP</div>
<div>
<div class="fw-600">Sophie Petit</div>
<div class="text-sm text-muted">sophie.petit@wakdo.fr</div>
</div>
</div>
</td>
<td><span class="pill pill-neutral">Accueil</span></td>
<td><span class="pill pill-success">Actif</span></td>
<td class="muted">09/05/2026 09:58</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">Modifier</a>
<button type="button">Reinitialiser mdp</button>
<div class="divider"></div>
<button class="danger" type="button">Desactiver</button>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="d-flex align-center gap-8">
<div class="topbar-user-avatar" style="width:30px;height:30px;font-size:12px;background:#F3F4F6;color:#9CA3AF;">TM</div>
<div>
<div class="fw-600" style="color:var(--color-text-muted);">Thomas Martin</div>
<div class="text-sm text-muted">thomas.martin@wakdo.fr</div>
</div>
</div>
</td>
<td><span class="pill pill-neutral">Preparation</span></td>
<td><span class="pill pill-neutral">Inactif</span></td>
<td class="muted">02/04/2026 17:30</td>
<td>
<div class="action-menu">
<button class="action-menu-btn" type="button">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg>
</button>
<div class="action-menu-dropdown">
<a href="#">Modifier</a>
<button type="button">Reactiver</button>
<div class="divider"></div>
<button class="danger" type="button">Supprimer</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pagination">
<span class="pagination-info">5 utilisateurs</span>
<div class="pagination-controls">
<button class="pagination-btn active" type="button">1</button>
</div>
</div>
</div>
</main>
</div>
<script src="assets/js/admin.js"></script>
</body>
</html>