1060 lines
67 KiB
HTML
1060 lines
67 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
<title>EME — Emprunt Matériel ENSUP</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Darker+Grotesque:wght@400;500;600;700;800;900&family=Titillium+Web:ital,wght@0,300;0,400;0,600;0,700;1,400&display=swap" rel="stylesheet"/>
|
|
<style>
|
|
:root{
|
|
--cyan:rgb(0,156,224);--blue1:rgb(0,109,172);--blue2:rgb(0,144,215);--blue3:rgb(0,92,170);
|
|
--teal:rgb(25,138,180);--purple:rgb(126,90,162);--red:rgb(221,27,61);
|
|
--green:#16a34a;--orange:#d97706;
|
|
--text:#0f172a;--text2:#334155;--muted:#64748b;--line:#e2e8f0;--soft:#f8fafc;--white:#fff;
|
|
--title:"Darker Grotesque",sans-serif;--body:"Titillium Web",sans-serif;
|
|
}
|
|
*{box-sizing:border-box;margin:0;padding:0;}
|
|
html,body{height:100%;font-family:var(--body);background:#f8fafc;color:var(--text);}
|
|
|
|
/* ── SCREEN CONTAINER ── */
|
|
.app-wrapper{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px;background:#f8fafc;}
|
|
.screen{display:none;width:100%;max-width:1280px;min-height:720px;background:#fff;border-radius:16px;box-shadow:0 18px 60px rgba(15,23,42,.14);overflow:hidden;flex-direction:column;}
|
|
.screen.active{display:flex;}
|
|
|
|
/* ── TOPBAR ── */
|
|
.topbar{background:var(--blue3);display:flex;align-items:center;justify-content:space-between;padding:0 28px;height:56px;flex-shrink:0;}
|
|
.topbar-brand{font-family:var(--title);font-size:15px;font-weight:900;color:#fff;display:flex;align-items:center;gap:10px;letter-spacing:.3px;}
|
|
.topbar-right{display:flex;align-items:center;gap:12px;}
|
|
.topbar-tag{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.2);color:#fff;font-family:var(--title);font-size:12px;font-weight:600;padding:4px 12px;border-radius:999px;}
|
|
.topbar-user{display:flex;align-items:center;gap:8px;color:#fff;}
|
|
.topbar-avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,var(--teal),var(--cyan));border:2px solid rgba(255,255,255,.3);display:flex;align-items:center;justify-content:center;font-family:var(--title);font-weight:900;font-size:12px;cursor:pointer;}
|
|
.topbar-name{font-family:var(--title);font-size:13px;font-weight:600;opacity:.9;}
|
|
.topbar-back{display:flex;align-items:center;gap:6px;color:rgba(255,255,255,.8);font-family:var(--title);font-size:13px;font-weight:600;cursor:pointer;padding:6px 10px;border-radius:8px;transition:.15s;}
|
|
.topbar-back:hover{background:rgba(255,255,255,.1);color:#fff;}
|
|
|
|
/* ── LAYOUT ── */
|
|
.page-body{flex:1;display:flex;flex-direction:column;overflow-y:auto;}
|
|
.centered{max-width:640px;margin:0 auto;width:100%;padding:40px 28px;display:flex;flex-direction:column;gap:20px;}
|
|
.full-body{padding:28px 32px;display:flex;flex-direction:column;gap:18px;flex:1;}
|
|
.sidebar-layout{display:grid;grid-template-columns:220px 1fr;flex:1;overflow:hidden;}
|
|
.sidebar{background:var(--soft);border-right:1px solid var(--line);padding:16px 12px;display:flex;flex-direction:column;gap:4px;overflow-y:auto;}
|
|
.main-content{padding:24px 28px;display:flex;flex-direction:column;gap:18px;overflow-y:auto;}
|
|
|
|
/* ── BRAND CORNERS ── */
|
|
.corner-tl,.corner-br{position:fixed;z-index:999;pointer-events:none;}
|
|
.corner-tl{top:0;left:0;width:120px;height:120px;
|
|
background:linear-gradient(90deg,var(--red) 0 28px,transparent 28px),
|
|
linear-gradient(90deg,var(--purple) 0 50px,transparent 50px),
|
|
linear-gradient(90deg,var(--teal) 0 72px,transparent 72px);
|
|
clip-path:polygon(0 0,100% 0,100% 22px,22px 22px,22px 100%,0 100%);}
|
|
.corner-br{bottom:0;right:0;width:120px;height:120px;
|
|
background:linear-gradient(270deg,var(--cyan) 0 28px,transparent 28px),
|
|
linear-gradient(270deg,var(--blue2) 0 50px,transparent 50px),
|
|
linear-gradient(270deg,var(--blue3) 0 72px,transparent 72px);
|
|
clip-path:polygon(0 calc(100% - 22px),calc(100% - 22px) calc(100% - 22px),calc(100% - 22px) 0,100% 0,100% 100%,0 100%);}
|
|
|
|
/* ── COMPONENTS ── */
|
|
.section-title{font-family:var(--title);font-size:20px;font-weight:900;color:var(--text);}
|
|
.section-sub{font-size:13px;color:var(--muted);margin-top:2px;line-height:1.5;}
|
|
.lbl{font-family:var(--title);font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.8px;}
|
|
.hr{height:1px;background:var(--line);}
|
|
|
|
/* Profile card */
|
|
.profile-card{background:linear-gradient(135deg,rgba(0,156,224,.06),rgba(25,138,180,.04));border:1.5px solid rgba(0,156,224,.15);border-radius:12px;padding:14px 18px;display:flex;align-items:center;gap:14px;}
|
|
.profile-avatar-lg{width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--teal),var(--cyan));color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--title);font-weight:900;font-size:18px;flex-shrink:0;box-shadow:0 2px 8px rgba(0,156,224,.3);}
|
|
.profile-name{font-family:var(--title);font-weight:800;font-size:16px;color:var(--text);}
|
|
.profile-sub{font-size:12px;color:var(--muted);margin-top:2px;}
|
|
|
|
/* Action cards */
|
|
.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
|
|
.action-card{border-radius:16px;padding:32px 24px;text-align:center;cursor:pointer;transition:all .2s;border:2px solid transparent;}
|
|
.action-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.12);}
|
|
.action-borrow{background:linear-gradient(135deg,rgba(0,156,224,.08),rgba(0,144,215,.05));border-color:rgba(0,156,224,.2);}
|
|
.action-borrow:hover{border-color:var(--cyan);background:linear-gradient(135deg,rgba(0,156,224,.14),rgba(0,144,215,.09));}
|
|
.action-return{background:linear-gradient(135deg,rgba(25,138,180,.08),rgba(0,109,172,.05));border-color:rgba(25,138,180,.2);}
|
|
.action-return:hover{border-color:var(--teal);background:linear-gradient(135deg,rgba(25,138,180,.14),rgba(0,109,172,.09));}
|
|
.action-icon{width:60px;height:60px;border-radius:18px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;}
|
|
.action-borrow .action-icon{background:linear-gradient(135deg,var(--cyan),var(--blue2));box-shadow:0 4px 16px rgba(0,156,224,.35);}
|
|
.action-return .action-icon{background:linear-gradient(135deg,var(--teal),var(--blue1));box-shadow:0 4px 16px rgba(25,138,180,.35);}
|
|
.action-title{font-family:var(--title);font-size:22px;font-weight:900;color:var(--text);}
|
|
.action-desc{font-size:13px;color:var(--muted);margin-top:6px;line-height:1.5;}
|
|
|
|
/* ID options */
|
|
.id-option{border:2px solid var(--line);border-radius:12px;padding:18px 20px;display:flex;align-items:center;gap:16px;cursor:pointer;transition:all .2s;background:#fff;}
|
|
.id-option:hover{border-color:var(--cyan);background:rgba(0,156,224,.03);box-shadow:0 0 0 4px rgba(0,156,224,.08);}
|
|
.id-option.active{border-color:var(--cyan);background:rgba(0,156,224,.04);}
|
|
.id-icon-wrap{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
|
|
.id-icon-qr{background:rgba(0,156,224,.1);}
|
|
.id-icon-mail{background:rgba(25,138,180,.1);}
|
|
.id-label{font-family:var(--title);font-weight:700;font-size:15px;color:var(--text);}
|
|
.id-desc{font-size:12px;color:var(--muted);margin-top:3px;}
|
|
|
|
/* Buttons */
|
|
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:10px;padding:11px 20px;font-family:var(--title);font-weight:700;font-size:14px;border:none;cursor:pointer;transition:all .15s;white-space:nowrap;}
|
|
.btn:hover{opacity:.9;transform:translateY(-1px);}
|
|
.btn:active{transform:translateY(0);}
|
|
.btn-primary{background:var(--cyan);color:#fff;box-shadow:0 2px 10px rgba(0,156,224,.3);}
|
|
.btn-dark{background:var(--blue3);color:#fff;box-shadow:0 2px 8px rgba(0,92,170,.25);}
|
|
.btn-outline{background:#fff;color:var(--text2);border:1.5px solid var(--line);}
|
|
.btn-outline:hover{border-color:var(--cyan);color:var(--cyan);}
|
|
.btn-danger{background:var(--red);color:#fff;}
|
|
.btn-success{background:var(--green);color:#fff;}
|
|
.btn-ghost{background:transparent;color:var(--muted);border:1.5px solid var(--line);}
|
|
.btn-sm{padding:7px 14px;font-size:12px;}
|
|
.btn-lg{padding:14px 24px;font-size:16px;}
|
|
.btn.full{width:100%;}
|
|
.btn-disabled{opacity:.4;cursor:not-allowed;pointer-events:none;}
|
|
|
|
/* Search */
|
|
.search-bar{display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--line);border-radius:10px;padding:0 14px;height:44px;box-shadow:0 1px 3px rgba(0,0,0,.06);}
|
|
.search-bar:focus-within{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,156,224,.1);}
|
|
.search-bar input{border:none;outline:none;font-family:var(--body);font-size:14px;color:var(--text);flex:1;background:transparent;}
|
|
.search-bar input::placeholder{color:var(--muted);}
|
|
|
|
/* Filter chips */
|
|
.filter-row{display:flex;gap:8px;flex-wrap:wrap;}
|
|
.chip{border:1.5px solid var(--line);border-radius:999px;padding:6px 14px;font-size:12px;font-family:var(--title);font-weight:600;color:var(--muted);background:#fff;cursor:pointer;transition:.15s;}
|
|
.chip:hover{border-color:var(--cyan);color:var(--cyan);}
|
|
.chip.on{background:var(--cyan);color:#fff;border-color:var(--cyan);box-shadow:0 2px 8px rgba(0,156,224,.25);}
|
|
|
|
/* Material cards */
|
|
.mat-card{background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:16px 18px;display:flex;align-items:center;gap:14px;transition:.15s;cursor:pointer;}
|
|
.mat-card:hover{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,156,224,.08);}
|
|
.mat-card.disabled{opacity:.55;cursor:default;}
|
|
.mat-card.disabled:hover{border-color:var(--line);box-shadow:none;}
|
|
.mat-ico{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:rgba(0,156,224,.08);}
|
|
.mat-name{font-family:var(--title);font-weight:700;font-size:15px;color:var(--text);}
|
|
.mat-sub{font-size:12px;color:var(--muted);margin-top:2px;}
|
|
.mat-actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0;}
|
|
|
|
/* Pills */
|
|
.pill{font-size:11px;font-weight:700;font-family:var(--title);padding:4px 12px;border-radius:999px;white-space:nowrap;}
|
|
.p-ok{background:#dcfce7;color:#15803d;}
|
|
.p-busy{background:#fef9c3;color:#a16207;}
|
|
.p-no{background:#fee2e2;color:var(--red);}
|
|
.p-closed{background:#f1f5f9;color:var(--muted);}
|
|
.p-warn{background:#fff7ed;color:var(--orange);}
|
|
|
|
/* Detail box */
|
|
.detail-box{background:var(--soft);border:1.5px solid var(--line);border-radius:12px;padding:18px;}
|
|
.detail-box h3{font-family:var(--title);font-size:18px;font-weight:900;margin-bottom:14px;}
|
|
.drow{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px;}
|
|
.drow:last-child{border-bottom:none;}
|
|
.dk{color:var(--muted);}
|
|
.dv{font-weight:600;}
|
|
.tag-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;}
|
|
.tag{background:rgba(25,138,180,.1);color:var(--teal);border-radius:6px;padding:5px 12px;font-size:12px;font-weight:600;font-family:var(--title);}
|
|
|
|
/* Checklist */
|
|
.cl-head{display:grid;grid-template-columns:1fr 80px 80px 100px;gap:8px;padding:10px 0;font-family:var(--title);font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;border-bottom:2px solid var(--line);}
|
|
.cl-row{display:grid;grid-template-columns:1fr 80px 80px 100px;gap:8px;padding:10px 0;border-bottom:1px solid var(--line);align-items:center;font-size:14px;color:var(--text2);}
|
|
.cl-row:last-child{border-bottom:none;}
|
|
.cb-wrap{display:flex;justify-content:center;}
|
|
.cb{width:36px;height:36px;border:2px solid var(--line);border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;}
|
|
.cb:hover{border-color:var(--cyan);}
|
|
.cb.ok{background:#f0fdf4;border-color:#86efac;}
|
|
.cb.no{background:#fef2f2;border-color:#fca5a5;}
|
|
.cb.warn{background:#fffbeb;border-color:#fde68a;}
|
|
|
|
/* Instructions */
|
|
.instr-box{background:rgba(0,144,215,.05);border:1.5px solid rgba(0,144,215,.15);border-radius:10px;padding:16px;}
|
|
.instr-box p{font-size:13px;color:var(--text2);line-height:1.7;}
|
|
|
|
/* Textarea */
|
|
.textarea{background:#fff;border:1.5px solid var(--line);border-radius:9px;padding:12px 14px;font-size:13px;color:var(--muted);font-family:var(--body);resize:none;width:100%;transition:.15s;outline:none;}
|
|
.textarea:focus{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,156,224,.08);}
|
|
|
|
/* Success */
|
|
.success-box{background:linear-gradient(135deg,#f0fdf4,#ecfdf5);border:2px solid #bbf7d0;border-radius:16px;padding:36px;text-align:center;}
|
|
.success-ico{width:72px;height:72px;background:linear-gradient(135deg,#16a34a,#22c55e);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 18px;box-shadow:0 6px 20px rgba(22,163,74,.3);}
|
|
.success-title{font-family:var(--title);font-size:26px;font-weight:900;color:#15803d;}
|
|
.success-sub{font-size:14px;color:#166534;margin-top:8px;line-height:1.6;}
|
|
|
|
/* Recap */
|
|
.recap-card{background:#fff;border:1.5px solid var(--line);border-radius:10px;padding:18px;}
|
|
.recap-label{font-family:var(--title);font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;margin-bottom:12px;}
|
|
.rrow{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--line);font-size:13px;}
|
|
.rrow:last-child{border-bottom:none;}
|
|
.rk{color:var(--muted);}
|
|
.rv{font-weight:600;}
|
|
|
|
/* Alert */
|
|
.alert-box{background:#fff5f5;border:2px solid #fecaca;border-radius:12px;padding:18px;display:flex;gap:14px;}
|
|
.alert-ico{width:40px;height:40px;background:rgba(221,27,61,.1);border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
|
|
.alert-body strong{font-family:var(--title);font-size:15px;font-weight:800;color:var(--red);display:block;margin-bottom:6px;}
|
|
.alert-body p{font-size:13px;color:var(--text2);line-height:1.6;}
|
|
|
|
/* KPIs */
|
|
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
|
|
.kpi{background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:18px;box-shadow:0 1px 4px rgba(0,0,0,.05);}
|
|
.kpi.danger{background:#fff5f5;border-color:#fecaca;}
|
|
.kpi-ico{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:10px;}
|
|
.kpi-ico-b{background:rgba(0,156,224,.1);}
|
|
.kpi-ico-t{background:rgba(25,138,180,.1);}
|
|
.kpi-ico-g{background:rgba(22,163,74,.1);}
|
|
.kpi-ico-r{background:rgba(221,27,61,.1);}
|
|
.kpi-val{font-family:var(--title);font-size:34px;font-weight:900;color:var(--text);}
|
|
.kpi.danger .kpi-val{color:var(--red);}
|
|
.kpi-lbl{font-size:12px;color:var(--muted);margin-top:4px;}
|
|
|
|
/* Table */
|
|
.data-table{width:100%;border-collapse:collapse;font-size:13px;}
|
|
.data-table thead tr{background:var(--blue3);}
|
|
.data-table thead th{padding:11px 14px;text-align:left;font-family:var(--title);font-size:11px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.5px;}
|
|
.data-table thead th:first-child{border-radius:8px 0 0 0;}
|
|
.data-table thead th:last-child{border-radius:0 8px 0 0;}
|
|
.data-table tbody tr{border-bottom:1px solid var(--line);}
|
|
.data-table tbody tr:last-child{border-bottom:none;}
|
|
.data-table tbody tr:nth-child(even){background:var(--soft);}
|
|
.data-table tbody td{padding:12px 14px;color:var(--text2);}
|
|
.data-table tbody td strong{font-family:var(--title);font-weight:700;color:var(--text);}
|
|
|
|
/* Nav item */
|
|
.nav-item{padding:10px 14px;border-radius:9px;font-family:var(--title);font-size:13px;font-weight:600;color:var(--muted);display:flex;align-items:center;gap:9px;cursor:pointer;transition:.15s;}
|
|
.nav-item:hover{background:rgba(0,156,224,.07);color:var(--cyan);}
|
|
.nav-item.on{background:rgba(0,156,224,.1);color:var(--cyan);}
|
|
.nav-item.danger-nav{color:var(--red);}
|
|
.nav-dot{width:7px;height:7px;border-radius:50%;background:var(--red);margin-left:auto;}
|
|
.nav-section-lbl{font-family:var(--title);font-size:10px;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:1px;padding:10px 14px 4px;}
|
|
|
|
/* List rows */
|
|
.list-row{display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid var(--line);gap:12px;}
|
|
.list-row:last-child{border-bottom:none;}
|
|
.lr-name{font-family:var(--title);font-weight:700;font-size:14px;color:var(--text);}
|
|
.lr-sub{font-size:12px;color:var(--muted);margin-top:2px;}
|
|
|
|
/* Visual placeholder */
|
|
.visual{background:var(--soft);border:1.5px solid var(--line);border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px;}
|
|
.visual svg{opacity:.25;}
|
|
.visual span{font-size:12px;color:var(--muted);}
|
|
|
|
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
|
|
.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;}
|
|
|
|
/* TRANSITION */
|
|
.screen{animation:none;}
|
|
@keyframes fadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
|
|
.screen.active{animation:fadeIn .2s ease-out;}
|
|
|
|
/* BREADCRUMB */
|
|
.breadcrumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);font-family:var(--title);font-weight:600;margin-bottom:4px;}
|
|
.breadcrumb span{color:var(--cyan);}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="corner-tl"></div>
|
|
<div class="corner-br"></div>
|
|
|
|
<div class="app-wrapper">
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S01 — CONNEXION -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen active" id="s-login">
|
|
<div class="topbar">
|
|
<div class="topbar-brand">
|
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 9h6M9 12h6M9 15h4"/></svg>
|
|
EME — Emprunt Matériel ENSUP
|
|
</div>
|
|
<div class="topbar-right">
|
|
<span class="topbar-tag">Ensitech · Paris</span>
|
|
</div>
|
|
</div>
|
|
<div class="page-body" style="background:linear-gradient(135deg,#f0f6ff 0%,#f8fafc 100%);">
|
|
<div class="centered" style="justify-content:center;flex:1;">
|
|
<div style="text-align:center;">
|
|
<div style="width:72px;height:72px;background:linear-gradient(135deg,var(--blue3),var(--cyan));border-radius:22px;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;box-shadow:0 8px 24px rgba(0,92,170,.35);">
|
|
<svg width="34" height="34" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 9h6M9 12h6M9 15h4"/></svg>
|
|
</div>
|
|
<div style="font-family:var(--title);font-size:32px;font-weight:900;color:var(--text);">Bienvenue sur EME</div>
|
|
<div style="font-size:14px;color:var(--muted);margin-top:8px;">Emprunt Matériel ENSUP · Accès réservé aux membres du groupe ENSUP</div>
|
|
</div>
|
|
<div style="display:flex;flex-direction:column;gap:12px;margin-top:12px;">
|
|
<div class="id-option active" onclick="goTo('s-home-student')">
|
|
<div class="id-icon-wrap id-icon-qr">
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><path d="M14 14h3v3M17 14h3M14 17v3"/></svg>
|
|
</div>
|
|
<div style="flex:1;">
|
|
<div class="id-label">Scanner ma carte étudiante</div>
|
|
<div class="id-desc">Présentez votre carte étudiante dématérialisée à la douchette ou à la tablette</div>
|
|
</div>
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><path d="M9 18l6-6-6-6"/></svg>
|
|
</div>
|
|
<div class="id-option" onclick="goTo('s-home-student')">
|
|
<div class="id-icon-wrap id-icon-mail">
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--teal)" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
|
|
</div>
|
|
<div style="flex:1;">
|
|
<div class="id-label">Connexion compte professionnel ENSUP</div>
|
|
<div class="id-desc">Utiliser mon adresse e-mail Microsoft 365</div>
|
|
</div>
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><path d="M9 18l6-6-6-6"/></svg>
|
|
</div>
|
|
</div>
|
|
<div style="display:flex;align-items:center;gap:12px;">
|
|
<div style="flex:1;height:1px;background:var(--line);"></div>
|
|
<span style="font-size:12px;color:var(--muted);">ou</span>
|
|
<div style="flex:1;height:1px;background:var(--line);"></div>
|
|
</div>
|
|
<button class="btn btn-outline full" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
|
Accès responsable matériel
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S02 — ACCUEIL ÉTUDIANT -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-home-student">
|
|
<div class="topbar">
|
|
<div class="topbar-brand">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
|
EME
|
|
</div>
|
|
<div class="topbar-right">
|
|
<span class="topbar-tag">Paris · Ensitech</span>
|
|
<div class="topbar-user">
|
|
<div class="topbar-avatar">LM</div>
|
|
<span class="topbar-name">Lucas Martin</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div class="profile-card">
|
|
<div class="profile-avatar-lg">LM</div>
|
|
<div>
|
|
<div class="profile-name">Lucas Martin</div>
|
|
<div class="profile-sub">Étudiant · BTS SIO 2ème année · Ensitech Paris</div>
|
|
</div>
|
|
<div style="margin-left:auto;"><span class="pill p-ok">Connecté</span></div>
|
|
</div>
|
|
<div style="font-family:var(--title);font-size:22px;font-weight:900;color:var(--text);">Que souhaitez-vous faire ?</div>
|
|
<div class="action-grid">
|
|
<div class="action-card action-borrow" onclick="goTo('s-catalogue')">
|
|
<div class="action-icon">
|
|
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2"><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"/></svg>
|
|
</div>
|
|
<div class="action-title">EMPRUNTER</div>
|
|
<div class="action-desc">Accéder au catalogue et emprunter du matériel éducatif</div>
|
|
</div>
|
|
<div class="action-card action-return" onclick="goTo('s-restitution-select')">
|
|
<div class="action-icon">
|
|
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2"><path d="M9 14l-4-4 4-4"/><path d="M5 10h11a4 4 0 0 1 0 8h-1"/></svg>
|
|
</div>
|
|
<div class="action-title">RESTITUER</div>
|
|
<div class="action-desc">Restituer un matériel que vous avez emprunté</div>
|
|
</div>
|
|
</div>
|
|
<div class="hr"></div>
|
|
<div>
|
|
<div class="section-head">
|
|
<div style="font-family:var(--title);font-size:16px;font-weight:800;">Mes emprunts en cours</div>
|
|
</div>
|
|
<div style="margin-top:12px;">
|
|
<div class="list-row">
|
|
<div>
|
|
<div class="lr-name">PC Dell Latitude 5420</div>
|
|
<div class="lr-sub">Emprunté le 28/05/2026 à 09:15 · Retour prévu 29/05</div>
|
|
</div>
|
|
<div style="display:flex;align-items:center;gap:10px;">
|
|
<span class="pill p-busy">En cours</span>
|
|
<button class="btn btn-outline btn-sm" onclick="goTo('s-restitution-select')">Restituer</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S03 — CATALOGUE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-catalogue">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-home-student')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Accueil
|
|
</div>
|
|
<div class="topbar-brand">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><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"/></svg>
|
|
Catalogue matériel
|
|
</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span><div class="topbar-user"><div class="topbar-avatar">LM</div></div></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div style="display:flex;gap:12px;align-items:center;">
|
|
<div class="search-bar" style="flex:1;">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
|
|
<input type="text" placeholder="Rechercher un matériel..."/>
|
|
</div>
|
|
</div>
|
|
<div class="filter-row">
|
|
<div class="chip on">Tous</div>
|
|
<div class="chip">Ordinateurs</div>
|
|
<div class="chip">Projection</div>
|
|
<div class="chip">Câbles</div>
|
|
<div class="chip">Accessoires</div>
|
|
</div>
|
|
<div class="hr"></div>
|
|
<div style="display:flex;flex-direction:column;gap:10px;">
|
|
<div class="mat-card" onclick="goTo('s-detail')">
|
|
<div class="mat-ico"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg></div>
|
|
<div style="flex:1;">
|
|
<div class="mat-name">PC Dell Latitude 5420</div>
|
|
<div class="mat-sub">Ordinateur · Réf. ENS-PC-001 · Paris</div>
|
|
</div>
|
|
<div class="mat-actions">
|
|
<span class="pill p-ok">Disponible</span>
|
|
<button class="btn btn-primary btn-sm" onclick="event.stopPropagation();goTo('s-detail')">Sélectionner</button>
|
|
</div>
|
|
</div>
|
|
<div class="mat-card" onclick="goTo('s-detail')">
|
|
<div class="mat-ico"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2"><polygon points="23 7 16 12 23 17 23 7"/><rect x="1" y="5" width="15" height="14" rx="2"/></svg></div>
|
|
<div style="flex:1;">
|
|
<div class="mat-name">Vidéoprojecteur Epson EB-X51</div>
|
|
<div class="mat-sub">Projection · Réf. ENS-VP-003 · Paris</div>
|
|
</div>
|
|
<div class="mat-actions">
|
|
<span class="pill p-ok">Disponible</span>
|
|
<button class="btn btn-primary btn-sm" onclick="event.stopPropagation();goTo('s-detail')">Sélectionner</button>
|
|
</div>
|
|
</div>
|
|
<div class="mat-card disabled">
|
|
<div class="mat-ico" style="background:rgba(100,116,139,.08);"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2"><path d="M5 12V6a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v6"/><path d="M3 12h18v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4z"/></svg></div>
|
|
<div style="flex:1;">
|
|
<div class="mat-name">Chargeur USB-C 65W</div>
|
|
<div class="mat-sub">Accessoire · Réf. ENS-CH-012 · Paris</div>
|
|
</div>
|
|
<div class="mat-actions">
|
|
<span class="pill p-busy">Emprunté</span>
|
|
<button class="btn btn-ghost btn-sm btn-disabled">Indisponible</button>
|
|
</div>
|
|
</div>
|
|
<div class="mat-card" onclick="goTo('s-detail')">
|
|
<div class="mat-ico"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg></div>
|
|
<div style="flex:1;">
|
|
<div class="mat-name">PC Lenovo ThinkPad E14</div>
|
|
<div class="mat-sub">Ordinateur · Réf. ENS-PC-004 · Paris</div>
|
|
</div>
|
|
<div class="mat-actions">
|
|
<span class="pill p-ok">Disponible</span>
|
|
<button class="btn btn-primary btn-sm" onclick="event.stopPropagation();goTo('s-detail')">Sélectionner</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S04 — DÉTAIL MATÉRIEL -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-detail">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-catalogue')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Catalogue
|
|
</div>
|
|
<div class="topbar-brand">Détail matériel</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div class="two-col" style="align-items:start;">
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div class="detail-box">
|
|
<h3>PC Dell Latitude 5420</h3>
|
|
<div class="drow"><span class="dk">Référence</span><span class="dv">ENS-PC-001</span></div>
|
|
<div class="drow"><span class="dk">Catégorie</span><span class="dv">Ordinateur</span></div>
|
|
<div class="drow"><span class="dk">Marque</span><span class="dv">Dell</span></div>
|
|
<div class="drow"><span class="dk">Modèle</span><span class="dv">Latitude 5420</span></div>
|
|
<div class="drow"><span class="dk">État</span><span class="dv" style="color:var(--green);">Bon état</span></div>
|
|
<div class="drow"><span class="dk">Campus</span><span class="dv">Paris · Ensitech</span></div>
|
|
<div class="drow"><span class="dk">Statut</span><span class="dv"><span class="pill p-ok">Disponible</span></span></div>
|
|
</div>
|
|
<div>
|
|
<div class="lbl" style="margin-bottom:10px;">Accessoires inclus dans le kit</div>
|
|
<div class="tag-row">
|
|
<span class="tag">Chargeur 65W</span>
|
|
<span class="tag">Souris sans fil</span>
|
|
<span class="tag">Housse de protection</span>
|
|
<span class="tag">Câble HDMI</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div class="visual">
|
|
<svg width="56" height="56" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
|
<span>Aperçu du matériel</span>
|
|
</div>
|
|
<button class="btn btn-primary btn-lg full" onclick="goTo('s-checklist-depart')">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
|
Démarrer l'emprunt
|
|
</button>
|
|
<button class="btn btn-outline full" onclick="goTo('s-catalogue')">Retour au catalogue</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S05 — CHECKLIST DÉPART -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-checklist-depart">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-detail')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Détail
|
|
</div>
|
|
<div class="topbar-brand">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg>
|
|
Checklist de départ
|
|
</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span><div class="topbar-user"><div class="topbar-avatar">LM</div></div></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div class="two-col" style="align-items:start;">
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div style="background:var(--soft);border:1.5px solid rgba(0,156,224,.15);border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:12px;">
|
|
<div style="width:38px;height:38px;border-radius:9px;background:rgba(0,156,224,.1);display:flex;align-items:center;justify-content:center;flex-shrink:0;">
|
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
|
</div>
|
|
<div>
|
|
<div style="font-family:var(--title);font-weight:800;font-size:15px;">PC Dell Latitude 5420</div>
|
|
<div style="font-size:12px;color:var(--muted);">Vérifiez chaque élément physiquement avant de valider</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="cl-head"><div>Élément</div><div style="text-align:center;">Présent</div><div style="text-align:center;">Absent</div><div style="text-align:center;">Détérioré</div></div>
|
|
<div class="cl-row">
|
|
<span>Chargeur 65W</span>
|
|
<div class="cb-wrap"><div class="cb ok" id="cd-1-p" onclick="toggleCb('cd-1','p')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-1-a" onclick="toggleCb('cd-1','a')"></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-1-d" onclick="toggleCb('cd-1','d')"></div></div>
|
|
</div>
|
|
<div class="cl-row">
|
|
<span>Souris sans fil</span>
|
|
<div class="cb-wrap"><div class="cb ok" id="cd-2-p" onclick="toggleCb('cd-2','p')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-2-a" onclick="toggleCb('cd-2','a')"></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-2-d" onclick="toggleCb('cd-2','d')"></div></div>
|
|
</div>
|
|
<div class="cl-row">
|
|
<span>Housse de protection</span>
|
|
<div class="cb-wrap"><div class="cb ok" id="cd-3-p" onclick="toggleCb('cd-3','p')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-3-a" onclick="toggleCb('cd-3','a')"></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-3-d" onclick="toggleCb('cd-3','d')"></div></div>
|
|
</div>
|
|
<div class="cl-row">
|
|
<span>Câble HDMI</span>
|
|
<div class="cb-wrap"><div class="cb" id="cd-4-p" onclick="toggleCb('cd-4','p')"></div></div>
|
|
<div class="cb-wrap"><div class="cb no" id="cd-4-a" onclick="toggleCb('cd-4','a')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="3"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cd-4-d" onclick="toggleCb('cd-4','d')"></div></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div class="instr-box">
|
|
<div class="lbl" style="margin-bottom:8px;">Instructions</div>
|
|
<p>Vérifiez physiquement chaque élément présent dans le kit. Cliquez sur <strong>Présent</strong>, <strong>Absent</strong> ou <strong>Détérioré</strong> pour chaque élément. Signalez tout élément manquant ou endommagé pour éviter tout litige au retour.</p>
|
|
</div>
|
|
<textarea class="textarea" placeholder="Commentaire ou observation optionnelle..." rows="4"></textarea>
|
|
<button class="btn btn-dark btn-lg full" onclick="goTo('s-confirmation')">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M9 11l3 3L22 4"/></svg>
|
|
Valider la checklist et confirmer l'emprunt
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S06 — CONFIRMATION -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-confirmation">
|
|
<div class="topbar">
|
|
<div class="topbar-brand">EME · Confirmation</div>
|
|
</div>
|
|
<div class="page-body" style="background:linear-gradient(135deg,#f0fdf4,#f8fafc);">
|
|
<div class="centered" style="justify-content:center;flex:1;">
|
|
<div class="success-box">
|
|
<div class="success-ico">
|
|
<svg width="34" height="34" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
|
|
</div>
|
|
<div class="success-title">Emprunt enregistré !</div>
|
|
<div class="success-sub">Votre emprunt a bien été enregistré. Vous pouvez récupérer le matériel.</div>
|
|
</div>
|
|
<div class="recap-card">
|
|
<div class="recap-label">Récapitulatif de l'emprunt</div>
|
|
<div class="rrow"><span class="rk">Matériel</span><span class="rv">PC Dell Latitude 5420</span></div>
|
|
<div class="rrow"><span class="rk">Référence</span><span class="rv">ENS-PC-001</span></div>
|
|
<div class="rrow"><span class="rk">Emprunteur</span><span class="rv">Lucas Martin</span></div>
|
|
<div class="rrow"><span class="rk">Date d'emprunt</span><span class="rv">28/05/2026</span></div>
|
|
<div class="rrow"><span class="rk">Heure</span><span class="rv">09:15</span></div>
|
|
<div class="rrow"><span class="rk">Campus</span><span class="rv">Paris · Ensitech</span></div>
|
|
<div class="rrow"><span class="rk">Note</span><span class="rv" style="color:var(--orange);">Câble HDMI absent au départ</span></div>
|
|
</div>
|
|
<button class="btn btn-primary full btn-lg" onclick="goTo('s-home-student')">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
|
Retour à l'accueil
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S07 — RESTITUTION — SÉLECTION -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-restitution-select">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-home-student')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Accueil
|
|
</div>
|
|
<div class="topbar-brand">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M9 14l-4-4 4-4"/><path d="M5 10h11a4 4 0 0 1 0 8h-1"/></svg>
|
|
Restitution
|
|
</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span><div class="topbar-user"><div class="topbar-avatar">LM</div></div></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div style="font-family:var(--title);font-size:22px;font-weight:900;">Sélectionner le matériel à restituer</div>
|
|
<div style="display:flex;flex-direction:column;gap:10px;">
|
|
<div class="mat-card" onclick="goTo('s-checklist-retour')">
|
|
<div class="mat-ico">
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--teal)" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
|
</div>
|
|
<div style="flex:1;">
|
|
<div class="mat-name">PC Dell Latitude 5420</div>
|
|
<div class="mat-sub">Emprunté le 28/05/2026 à 09:15 · Retour prévu 29/05</div>
|
|
</div>
|
|
<div class="mat-actions">
|
|
<span class="pill p-busy">En cours</span>
|
|
<button class="btn btn-primary btn-sm" onclick="event.stopPropagation();goTo('s-checklist-retour')">Restituer</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S08 — CHECKLIST RETOUR -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-checklist-retour">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-restitution-select')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Restitution
|
|
</div>
|
|
<div class="topbar-brand">Checklist de retour</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="full-body">
|
|
<div class="two-col" style="align-items:start;">
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div style="background:var(--soft);border:1.5px solid rgba(25,138,180,.15);border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:12px;">
|
|
<div style="width:38px;height:38px;border-radius:9px;background:rgba(25,138,180,.1);display:flex;align-items:center;justify-content:center;flex-shrink:0;">
|
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--teal)" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
|
</div>
|
|
<div>
|
|
<div style="font-family:var(--title);font-weight:800;font-size:15px;">PC Dell Latitude 5420</div>
|
|
<div style="font-size:12px;color:var(--muted);">Emprunté le 28/05/2026 à 09:15</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="cl-head"><div>Élément</div><div style="text-align:center;">Présent</div><div style="text-align:center;">Absent</div><div style="text-align:center;">Détérioré</div></div>
|
|
<div class="cl-row">
|
|
<span>Chargeur 65W</span>
|
|
<div class="cb-wrap"><div class="cb" id="cr-1-p" onclick="toggleCb('cr-1','p')"></div></div>
|
|
<div class="cb-wrap"><div class="cb no" id="cr-1-a" onclick="toggleCb('cr-1','a')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="3"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cr-1-d" onclick="toggleCb('cr-1','d')"></div></div>
|
|
</div>
|
|
<div class="cl-row">
|
|
<span>Souris sans fil</span>
|
|
<div class="cb-wrap"><div class="cb ok" id="cr-2-p" onclick="toggleCb('cr-2','p')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cr-2-a" onclick="toggleCb('cr-2','a')"></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cr-2-d" onclick="toggleCb('cr-2','d')"></div></div>
|
|
</div>
|
|
<div class="cl-row">
|
|
<span>Housse de protection</span>
|
|
<div class="cb-wrap"><div class="cb ok" id="cr-3-p" onclick="toggleCb('cr-3','p')"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cr-3-a" onclick="toggleCb('cr-3','a')"></div></div>
|
|
<div class="cb-wrap"><div class="cb" id="cr-3-d" onclick="toggleCb('cr-3','d')"></div></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style="display:flex;flex-direction:column;gap:14px;">
|
|
<div class="instr-box">
|
|
<div class="lbl" style="margin-bottom:8px;">Rappel checklist de départ</div>
|
|
<p>Au départ : Chargeur ✗ absent · Souris ✓ présente · Housse ✓ présente · Câble HDMI ✗ absent</p>
|
|
</div>
|
|
<textarea class="textarea" placeholder="Commentaire optionnel..." rows="4"></textarea>
|
|
<button class="btn btn-dark btn-lg full" onclick="goTo('s-anomalie')">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M9 11l3 3L22 4"/></svg>
|
|
Valider le retour
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S09 — RÉSULTAT ANOMALIE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-anomalie">
|
|
<div class="topbar">
|
|
<div class="topbar-brand">EME · Résultat du contrôle</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span></div>
|
|
</div>
|
|
<div class="page-body" style="background:linear-gradient(135deg,#fff5f5,#f8fafc);">
|
|
<div class="centered" style="justify-content:center;flex:1;">
|
|
<div class="alert-box">
|
|
<div class="alert-ico">
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
|
|
</div>
|
|
<div class="alert-body">
|
|
<strong>Retour non conforme — Anomalie détectée</strong>
|
|
<p>Une différence a été constatée avec la checklist de départ. Une anomalie a été créée automatiquement et le responsable matériel a été notifié.</p>
|
|
</div>
|
|
</div>
|
|
<div class="detail-box">
|
|
<div class="lbl" style="margin-bottom:12px;">Détail de l'anomalie</div>
|
|
<div class="drow"><span class="dk">Élément concerné</span><span class="dv" style="color:var(--red);">Chargeur 65W</span></div>
|
|
<div class="drow"><span class="dk">Statut au départ</span><span class="dv"><span class="pill p-closed">Non renseigné (absent au départ)</span></span></div>
|
|
<div class="drow"><span class="dk">Statut au retour</span><span class="dv"><span class="pill p-no">Absent</span></span></div>
|
|
<div class="drow"><span class="dk">Matériel</span><span class="dv">PC Dell Latitude 5420 · ENS-PC-001</span></div>
|
|
<div class="drow"><span class="dk">Emprunteur</span><span class="dv">Lucas Martin</span></div>
|
|
<div class="drow"><span class="dk">Date détection</span><span class="dv">28/05/2026 · 10:30</span></div>
|
|
</div>
|
|
<div style="font-size:13px;color:var(--muted);text-align:center;line-height:1.6;padding:0 16px;">Le responsable matériel traitera cette anomalie. Vous pouvez retourner à l'accueil.</div>
|
|
<button class="btn btn-primary full btn-lg" onclick="goTo('s-home-student')">
|
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
|
Retour à l'accueil
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S10 — DASHBOARD RESPONSABLE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-dashboard">
|
|
<div class="topbar">
|
|
<div class="topbar-brand">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/></svg>
|
|
EME — Tableau de bord
|
|
</div>
|
|
<div class="topbar-right">
|
|
<span class="topbar-tag">Paris · Ensitech</span>
|
|
<div class="topbar-user">
|
|
<div class="topbar-avatar" style="background:linear-gradient(135deg,var(--purple),var(--teal));">KB</div>
|
|
<span class="topbar-name">Karim Benali</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="sidebar-layout">
|
|
<div class="sidebar">
|
|
<div class="nav-section-lbl">Navigation</div>
|
|
<div class="nav-item on" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/></svg>
|
|
Dashboard
|
|
</div>
|
|
<div class="nav-item" onclick="goTo('s-emprunts')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/></svg>
|
|
Emprunts
|
|
</div>
|
|
<div class="nav-item danger-nav" onclick="goTo('s-anomalies-resp')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/></svg>
|
|
Anomalies
|
|
<div class="nav-dot"></div>
|
|
</div>
|
|
<div class="nav-item" onclick="goTo('s-stock')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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"/></svg>
|
|
Stock
|
|
</div>
|
|
<div class="nav-item" onclick="goTo('s-historique')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
|
Historique
|
|
</div>
|
|
<div class="nav-item">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>
|
|
Multi-campus
|
|
</div>
|
|
<div style="margin-top:auto;padding-top:16px;border-top:1px solid var(--line);">
|
|
<div class="nav-item" onclick="goTo('s-login')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg>
|
|
Déconnexion
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="main-content">
|
|
<div class="kpi-grid">
|
|
<div class="kpi">
|
|
<div class="kpi-ico kpi-ico-b"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--cyan)" stroke-width="2.5"><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"/></svg></div>
|
|
<div class="kpi-val">42</div>
|
|
<div class="kpi-lbl">Disponibles</div>
|
|
</div>
|
|
<div class="kpi">
|
|
<div class="kpi-ico kpi-ico-t"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--teal)" stroke-width="2.5"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/></svg></div>
|
|
<div class="kpi-val">12</div>
|
|
<div class="kpi-lbl">Emprunts en cours</div>
|
|
</div>
|
|
<div class="kpi">
|
|
<div class="kpi-ico kpi-ico-g"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="2.5"><path d="M9 14l-4-4 4-4"/><path d="M5 10h11a4 4 0 0 1 0 8h-1"/></svg></div>
|
|
<div class="kpi-val">3</div>
|
|
<div class="kpi-lbl">Retours à traiter</div>
|
|
</div>
|
|
<div class="kpi danger">
|
|
<div class="kpi-ico kpi-ico-r"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/></svg></div>
|
|
<div class="kpi-val">2</div>
|
|
<div class="kpi-lbl">Anomalies actives</div>
|
|
</div>
|
|
</div>
|
|
<div class="section-head">
|
|
<div style="font-family:var(--title);font-size:16px;font-weight:800;">Activité récente</div>
|
|
<button class="btn btn-outline btn-sm" onclick="goTo('s-emprunts')">Voir tout</button>
|
|
</div>
|
|
<div class="list-row">
|
|
<div><div class="lr-name">PC Dell Latitude 5420 — Lucas Martin</div><div class="lr-sub">Emprunté aujourd'hui à 09:15 · Campus Paris</div></div>
|
|
<span class="pill p-busy">En cours</span>
|
|
</div>
|
|
<div class="list-row">
|
|
<div><div class="lr-name">Anomalie — Chargeur 65W manquant</div><div class="lr-sub">PC Dell Latitude · Lucas Martin · 10:30</div></div>
|
|
<div style="display:flex;gap:8px;align-items:center;">
|
|
<span class="pill p-no">Anomalie</span>
|
|
<button class="btn btn-danger btn-sm" onclick="goTo('s-anomalies-resp')">Traiter</button>
|
|
</div>
|
|
</div>
|
|
<div class="list-row">
|
|
<div><div class="lr-name">Vidéoprojecteur Epson — Sarah Dupont</div><div class="lr-sub">Retourné hier à 16:00 · Conforme</div></div>
|
|
<span class="pill p-ok">Clôturé</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S11 — EMPRUNTS RESPONSABLE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-emprunts">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Dashboard
|
|
</div>
|
|
<div class="topbar-brand">Gestion des emprunts</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="main-content">
|
|
<div style="display:flex;gap:12px;align-items:center;">
|
|
<div class="search-bar" style="flex:1;">
|
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
|
|
<input type="text" placeholder="Rechercher..."/>
|
|
</div>
|
|
<div class="filter-row">
|
|
<div class="chip on">Tous</div>
|
|
<div class="chip">En cours</div>
|
|
<div class="chip">En retard</div>
|
|
<div class="chip">Clôturés</div>
|
|
</div>
|
|
</div>
|
|
<table class="data-table">
|
|
<thead><tr><th>Emprunteur</th><th>Matériel</th><th>Date emprunt</th><th>Retour prévu</th><th>Statut</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><strong>Lucas Martin</strong></td><td>PC Dell Latitude 5420</td><td>28/05 · 09:15</td><td>29/05/2026</td><td><span class="pill p-busy">En cours</span></td></tr>
|
|
<tr><td><strong>Mehdi Karim</strong></td><td>Vidéoprojecteur Epson</td><td>26/05 · 14:00</td><td>27/05/2026</td><td><span class="pill p-no">En retard</span></td></tr>
|
|
<tr><td><strong>Sarah Dupont</strong></td><td>Vidéoprojecteur Epson</td><td>20/05 · 10:00</td><td>20/05/2026</td><td><span class="pill p-ok">Clôturé</span></td></tr>
|
|
<tr><td><strong>Amira Touati</strong></td><td>PC Lenovo ThinkPad</td><td>22/05 · 08:30</td><td>23/05/2026</td><td><span class="pill p-ok">Clôturé</span></td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S12 — ANOMALIES RESPONSABLE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-anomalies-resp">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Dashboard
|
|
</div>
|
|
<div class="topbar-brand">Anomalies</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="main-content">
|
|
<div class="filter-row">
|
|
<div class="chip on">Toutes</div>
|
|
<div class="chip">Détectées</div>
|
|
<div class="chip">En traitement</div>
|
|
<div class="chip">Résolues</div>
|
|
</div>
|
|
<table class="data-table">
|
|
<thead><tr><th>Matériel</th><th>Emprunteur</th><th>Anomalie</th><th>Date</th><th>Statut</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><strong>PC Dell Latitude</strong></td><td>Lucas Martin</td><td>Chargeur 65W absent</td><td>28/05 · 10:30</td><td><span class="pill p-no">Détectée</span></td></tr>
|
|
<tr><td><strong>Vidéoprojecteur</strong></td><td>Sarah Dupont</td><td>Câble HDMI détérioré</td><td>20/05 · 16:05</td><td><span class="pill p-warn">En traitement</span></td></tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="alert-box">
|
|
<div class="alert-ico">
|
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/></svg>
|
|
</div>
|
|
<div class="alert-body" style="flex:1;">
|
|
<strong>Anomalie sélectionnée — Chargeur 65W absent</strong>
|
|
<p>PC Dell Latitude 5420 · Lucas Martin · 28/05/2026 à 10:30 · Campus Paris</p>
|
|
<div style="display:flex;gap:10px;margin-top:12px;">
|
|
<button class="btn btn-danger btn-sm">
|
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/></svg>
|
|
Signaler l'incident
|
|
</button>
|
|
<button class="btn btn-success btn-sm">
|
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg>
|
|
Marquer comme résolu
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S13 — STOCK -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-stock">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Dashboard
|
|
</div>
|
|
<div class="topbar-brand">Stock matériel</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span><button class="btn btn-primary btn-sm"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>Ajouter</button></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="main-content">
|
|
<div style="display:flex;gap:12px;align-items:center;">
|
|
<div class="search-bar" style="flex:1;">
|
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
|
|
<input type="text" placeholder="Rechercher par nom, référence..."/>
|
|
</div>
|
|
<div class="filter-row">
|
|
<div class="chip on">Tous</div>
|
|
<div class="chip">Disponible</div>
|
|
<div class="chip">Emprunté</div>
|
|
<div class="chip">Maintenance</div>
|
|
</div>
|
|
</div>
|
|
<table class="data-table">
|
|
<thead><tr><th>Matériel</th><th>Référence</th><th>Catégorie</th><th>Campus</th><th>Statut</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><strong>PC Dell Latitude 5420</strong></td><td>ENS-PC-001</td><td>Ordinateur</td><td>Paris</td><td><span class="pill p-busy">Emprunté</span></td></tr>
|
|
<tr><td><strong>Vidéoprojecteur Epson EB-X51</strong></td><td>ENS-VP-003</td><td>Projection</td><td>Paris</td><td><span class="pill p-ok">Disponible</span></td></tr>
|
|
<tr><td><strong>Souris Logitech M185</strong></td><td>ENS-SOU-007</td><td>Accessoire</td><td>Paris</td><td><span class="pill p-no">Maintenance</span></td></tr>
|
|
<tr><td><strong>PC Lenovo ThinkPad E14</strong></td><td>ENS-PC-004</td><td>Ordinateur</td><td>Paris</td><td><span class="pill p-ok">Disponible</span></td></tr>
|
|
<tr><td><strong>Câble HDMI 2m</strong></td><td>ENS-CAB-014</td><td>Câble</td><td>Paris</td><td><span class="pill p-ok">Disponible</span></td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<!-- S14 — HISTORIQUE -->
|
|
<!-- ══════════════════════════════════════════════ -->
|
|
<div class="screen" id="s-historique">
|
|
<div class="topbar">
|
|
<div class="topbar-back" onclick="goTo('s-dashboard')">
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M19 12H5M12 5l-7 7 7 7"/></svg>
|
|
Dashboard
|
|
</div>
|
|
<div class="topbar-brand">Historique des mouvements</div>
|
|
<div class="topbar-right"><span class="topbar-tag">Paris</span><button class="btn btn-outline btn-sm"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>Exporter</button></div>
|
|
</div>
|
|
<div class="page-body">
|
|
<div class="main-content">
|
|
<div style="display:flex;gap:12px;align-items:center;">
|
|
<div class="search-bar" style="flex:1;">
|
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="var(--muted)" stroke-width="2.5"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
|
|
<input type="text" placeholder="Filtrer par emprunteur, matériel, campus..."/>
|
|
</div>
|
|
<div class="chip" style="display:flex;align-items:center;gap:4px;"><svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"/></svg>Date</div>
|
|
</div>
|
|
<table class="data-table">
|
|
<thead><tr><th>Type</th><th>Matériel</th><th>Emprunteur</th><th>Campus</th><th>Date</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><span class="pill p-busy">Emprunt</span></td><td><strong>PC Dell Latitude</strong></td><td>Lucas Martin</td><td>Paris</td><td>28/05 · 09:15</td></tr>
|
|
<tr><td><span class="pill p-no">Anomalie</span></td><td><strong>PC Dell Latitude</strong></td><td>Lucas Martin</td><td>Paris</td><td>28/05 · 10:30</td></tr>
|
|
<tr><td><span class="pill p-ok">Retour</span></td><td><strong>Vidéoprojecteur</strong></td><td>Sarah Dupont</td><td>Paris</td><td>27/05 · 16:00</td></tr>
|
|
<tr><td><span class="pill p-busy">Emprunt</span></td><td><strong>Chargeur USB-C</strong></td><td>Mehdi Karim</td><td>Paris</td><td>26/05 · 14:00</td></tr>
|
|
<tr><td><span class="pill p-ok">Retour</span></td><td><strong>PC Lenovo ThinkPad</strong></td><td>Amira Touati</td><td>Paris</td><td>23/05 · 17:00</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div><!-- end app-wrapper -->
|
|
|
|
<script>
|
|
function goTo(id) {
|
|
const target = document.getElementById(id);
|
|
|
|
// Sécurité workflow : on ne masque plus l'écran courant si la cible est introuvable.
|
|
// Cela évite l'écran vide / fond bleu foncé lorsque le parcours est interrompu.
|
|
if (!target) {
|
|
console.error(`Écran introuvable : ${id}`);
|
|
return false;
|
|
}
|
|
|
|
document.querySelectorAll('.screen').forEach(screen => screen.classList.remove('active'));
|
|
target.classList.add('active');
|
|
|
|
// Remise en haut de page pour chaque étape du workflow.
|
|
target.scrollTop = 0;
|
|
const body = target.querySelector('.page-body');
|
|
if (body) body.scrollTop = 0;
|
|
|
|
return true;
|
|
}
|
|
|
|
function toggleCb(group, type) {
|
|
const types = ['p','a','d'];
|
|
const icons = {
|
|
p: `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg>`,
|
|
a: `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--red)" stroke-width="3"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>`,
|
|
d: `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--orange)" stroke-width="3"><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>`,
|
|
};
|
|
const classes = { p: 'ok', a: 'no', d: 'warn' };
|
|
|
|
types.forEach(t => {
|
|
const el = document.getElementById(`${group}-${t}`);
|
|
if (!el) return;
|
|
el.className = 'cb';
|
|
el.innerHTML = '';
|
|
if (t === type) {
|
|
el.classList.add(classes[t]);
|
|
el.innerHTML = icons[t];
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html> |