Upload files to "/"

This commit is contained in:
Lou 2025-09-17 11:38:32 +00:00
commit 4ce3ef223e
4 changed files with 432 additions and 0 deletions

23
home.html Normal file
View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Portfolio L. Delforge</title>
<link rel="stylesheet" href="styles.css">
<!-- Optional: Use a Mass Effect-like font from Google Fonts or upload your own -->
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700&display=swap" rel="stylesheet">
</head>
<body>
<!-- Content -->
<div class="mefx-container">
<h1 class="mefx-title">Portfolio L. Delforge</h1>
<div class="mefx-button-group">
<a href="projets/index.html" class="mefx-btn">Projets</a>
<a href="contact/index.html" class="mefx-btn">Contact</a>
<a href="documentations/index.html" class="mefx-btn">Documentation</a>
</div>
</div>
</body>
</html>

81
index.html Normal file
View file

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Projets</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Call JS -->
<script src="script.js"></script>
<!-- Navigation -->
<nav class="top-nav">
<a href="home.html">Acceuil</a>
<a href="contact/index.html">Contact</a>
<a href="documentation/index.html">Documentation</a>
</nav>
<!-- Title -->
<div class="page-title" style="text-align: center;"> Projets </div>
<!-- Tabs and Search Bar -->
<div class="tabs-search-bar">
<div class="tabs">
<button class="tab active">Linux</button>
<button class="tab">Windows</button>
</div>
<input type="text" class="search-bar" placeholder="Rechercher">
</div>
<!-- Content Area -->
<div class="page-container">
<div class="tab-content">
<!-- Contenu Linux -->
<div class="tab-panel active" id="linux-panel">
<div class="section-title">Serveur Linux</div>
<div class="subsection">
<div class="subsection-title">Déploiement & maintenance</div>
<ul class="checklist">
<li><label><input type="checkbox"> GLPI</label></li>
<li><label><input type="checkbox"> <a href="#">Docker</a></label></li>
<li><label><input type="checkbox"> nginx proxy manager</label></li>
</ul>
</div>
<div class="subsection">
<div class="subsection-title">Optimisation</div>
<ul class="checklist">
<li><label><input type="checkbox"> IPtable</label></li>
<li><label><input type="checkbox"> HA proxy</label></li>
</ul>
</div>
</div>
<!-- Contenu Windows -->
<div class="tab-panel" id="windows-panel">
<div class="section-title">Serveur Windows</div>
<div class="subsection">
<div class="subsection-title">Déploiement & maintenance</div>
<ul class="checklist">
<li><label><input type="checkbox"> Active Directory</label></li>
<li><label><input type="checkbox"> GPO</label></li>
<li><label><input type="checkbox"> WSUS</label></li>
</ul>
</div>
<div class="subsection">
<div class="subsection-title">Optimisation</div>
<ul class="checklist">
<li><label><input type="checkbox"> PowerShell Scripts</label></li>
<li><label><input type="checkbox"> Windows Defender</label></li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>

57
script.js Normal file
View file

@ -0,0 +1,57 @@
document.addEventListener('DOMContentLoaded', function() {
const tabs = document.querySelectorAll('.tab');
const panels = document.querySelectorAll('.tab-panel');
const searchBar = document.querySelector('.search-bar');
// Fonction pour retirer le surlignage de tous les items d'un panel
function clearHighlights(panel) {
panel.querySelectorAll('.checklist li').forEach(li => {
li.classList.remove('highlight');
});
}
// Gestion des onglets
tabs.forEach((tab, idx) => {
tab.addEventListener('click', function() {
tabs.forEach(t => t.classList.remove('active'));
this.classList.add('active');
panels.forEach((panel, pIdx) => {
if (idx === pIdx) {
panel.classList.add('active');
clearHighlights(panel);
} else {
panel.classList.remove('active');
}
});
// Réinitialise la recherche lors du changement d'onglet
searchBar.value = '';
});
});
// Recherche avec surlignage et switch automatique d'onglet si besoin
searchBar.addEventListener('input', function() {
const query = this.value.toLowerCase();
let foundInCurrent = false;
let foundInOther = -1;
panels.forEach((panel, idx) => {
let found = false;
panel.querySelectorAll('.checklist li').forEach(li => {
const text = li.textContent.toLowerCase();
if (query && text.includes(query)) {
li.classList.add('highlight');
found = true;
} else {
li.classList.remove('highlight');
}
});
if (found && panel.classList.contains('active')) foundInCurrent = true;
if (found && !panel.classList.contains('active') && foundInOther === -1) foundInOther = idx;
});
// Si pas trouvé dans l'onglet actif mais trouvé ailleurs, switch d'onglet
if (!foundInCurrent && foundInOther !== -1) {
tabs[foundInOther].click();
}
});
});

271
styles.css Normal file
View file

@ -0,0 +1,271 @@
/* 1. Général et fond */
body {
margin: 0;
background: linear-gradient(135deg, #0d1120 0%, #1b2250 100%);
font-family: 'Segoe UI', Arial, sans-serif;
color: #f5f6fa;
}
/* 2. Conteneur principal centré et responsive */
.page-container {
max-width: 820px;
margin: 2rem auto;
padding: 4rem 2rem; /* vert (plus grand = moins haut) / hori */
box-sizing: border-box;
width: 95vw;
}
/* 3. Navigation supérieure */
.top-nav {
display: flex;
gap: 2.5rem;
justify-content: center;
padding: 1.2rem 0 0.5rem 0;
background: rgba(10, 20, 50, 0.85);
border-bottom: 2px solid #2a3ca6;
box-shadow: 0 2px 12px #2a3ca655;
border-radius: 12px 12px 0 0;
margin-bottom: 1.5rem;
}
.top-nav a {
color: #6ec6ff;
text-decoration: none;
font-weight: bold;
font-size: 1.15rem;
letter-spacing: 1px;
transition: color 0.2s, text-shadow 0.2s;
}
.top-nav a:hover {
color: #fff;
text-shadow: 0 0 8px #6ec6ff, 0 0 2px #fff;
}
/* 4. Titre centré */
.page-title {
text-align: center;
font-size: 2.3rem;
font-weight: 700;
margin-bottom: 2.2rem;
letter-spacing: 1px;
color: #e6ecff;
text-shadow: 0 0 16px #2a3ca6, 0 2px 12px #000a;
word-break: break-word;
}
/* 5. Onglets et barre de recherche (centrés) */
.tabs-search-bar {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 1.2rem;
margin-bottom: 2.2rem;
}
.tabs {
display: flex;
gap: 1.1rem;
justify-content: center;
}
.tab {
background: linear-gradient(90deg, #232b4a 0%, #2a3ca6 100%);
color: #bfc7e6;
border: 2px solid #2a3ca6;
border-radius: 12px 12px 0 0;
padding: 0.7rem 2.3rem;
font-size: 1.05rem;
font-weight: 600;
cursor: pointer;
opacity: 0.8;
transition: background 0.2s, color 0.2s, opacity 0.2s, border-color 0.2s;
text-transform: uppercase;
letter-spacing: 1px;
}
.tab.active {
background: linear-gradient(90deg, #3e51b5 0%, #6ec6ff 100%);
color: #fff;
opacity: 1;
border-color: #6ec6ff;
box-shadow: 0 2px 8px #6ec6ff55, 0 0 8px #fff2;
}
.tab:not(.active):hover {
opacity: 1;
background: #28325a;
color: #e6ecff;
border-color: #3e51b5;
}
/* 6. Barre de recherche */
.search-bar {
background: #232b4a;
color: #e6ecff;
border: 2px solid #2a3ca6;
border-radius: 20px;
padding: 0.7rem 1.5rem;
font-size: 1rem;
width: 220px;
max-width: 100vw;
outline: none;
transition: border-color 0.2s, box-shadow 0.2s;
box-shadow: 0 2px 8px #3949ab22;
}
.search-bar:focus {
border-color: #6ec6ff;
box-shadow: 0 0 10px #6ec6ff88;
}
.search-bar::placeholder {
color: #bfc7e6;
opacity: 0.7;
}
/* 7. Contenu des onglets */
.tab-content {
background: rgba(20, 30, 60, 0.92);
border-radius: 0 0 14px 14px;
box-shadow: 0 6px 32px #2a3ca644;
padding: 2.2rem 2.5rem;
margin-bottom: 2rem;
width: 100%;
box-sizing: border-box;
}
.tab-panel {
display: none;
}
.tab-panel.active {
display: block;
animation: fadeInPanel 0.4s;
}
@keyframes fadeInPanel {
from { opacity: 0; transform: translateY(20px);}
to { opacity: 1; transform: translateY(0);}
}
/* 8. Sections et checklist */
.section {
margin-bottom: 2.5rem;
background: #181c30;
border-radius: 10px;
padding: 1.2rem 1.5rem;
box-shadow: 0 2px 8px #232b4a22;
border-left: 4px solid #2a3ca6;
}
.section-title {
font-size: 1.2rem;
font-weight: 700;
margin-bottom: 1.1rem;
color: #bfc7e6;
letter-spacing: 0.5px;
}
.subsection {
margin-bottom: 1.2rem;
background: #232b4a;
border-radius: 7px;
padding: 0.9rem 1.2rem;
}
.subsection-title {
font-size: 1.07rem;
font-weight: 600;
margin-bottom: 0.7rem;
color: #e6ecff;
}
.checklist {
list-style: none;
padding: 0;
margin: 0;
}
.checklist li {
margin-bottom: 0.6rem;
padding: 0.3rem 0.7rem;
border-radius: 4px;
transition: background 0.2s;
}
.checklist li.highlight {
background: linear-gradient(90deg, #2a3ca622, #6ec6ff44);
color: #fff;
font-weight: bold;
}
.checklist label {
cursor: pointer;
font-size: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.checklist input[type="checkbox"] {
accent-color: #3e51b5;
width: 1.1rem;
height: 1.1rem;
}
.checklist a {
color: #8eaaff;
text-decoration: underline;
font-weight: 600;
transition: color 0.2s;
}
.checklist a:hover {
color: #e6ecff;
}
/* 9. Responsive : adaptation pour petits écrans */
@media (max-width: 900px) {
.page-container {
padding: 1.2rem 0.5rem;
max-width: 99vw;
}
.tab-content {
padding: 1.2rem 0.5rem;
}
}
@media (max-width: 700px) {
.top-nav {
flex-direction: column;
gap: 0.7rem;
font-size: 1rem;
padding: 0.7rem 0 0.3rem 0;
}
.page-title {
font-size: 1.5rem;
margin-bottom: 1.1rem;
}
.tabs-search-bar {
flex-direction: column;
gap: 0.7rem;
align-items: center;
}
.tabs {
flex-direction: column;
gap: 0.5rem;
width: 100%;
align-items: center;
}
.tab {
width: 100%;
min-width: unset;
font-size: 1rem;
border-radius: 8px;
text-align: center;
}
.search-bar {
width: 100%;
max-width: 100vw;
font-size: 1rem;
margin-top: 0.7rem;
}
.tab-content {
padding: 0.7rem 0.2rem;
}
.section,
.subsection {
padding: 0.7rem 0.3rem;
}
}
@media (max-width: 400px) {
.page-title {
font-size: 1.1rem;
margin: 1rem 0;
}
.tab {
font-size: 0.95rem;
padding: 0.5rem 0.7rem;
}
}