Initial commit: Portfolio Aya Ben Mabrouk
This commit is contained in:
77
.idea/workspace.xml
generated
Normal file
77
.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="c9fb54f2-bf4d-42a7-867b-ebcad9281633" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/Dockerfile" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/assets/cms.preview.jpg" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/docker-compose.yml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/index.html" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/portfolio.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/script.js" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/style.css" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 7
|
||||
}</component>
|
||||
<component name="ProjectId" id="36e4ozg1hRHvlJhv8Y5NUATXvf1" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||
"git-widget-placeholder": "main",
|
||||
"kotlin-language-version-configured": "true",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="$PROJECT_DIR$" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="SharedIndexes">
|
||||
<attachedChunks>
|
||||
<set>
|
||||
<option value="bundled-jdk-9823dce3aa75-bf35d07a577b-intellij.indexing.shared.core-IU-252.26830.84" />
|
||||
<option value="bundled-js-predefined-d6986cc7102b-3aa1da707db6-JavaScript-IU-252.26830.84" />
|
||||
</set>
|
||||
</attachedChunks>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="c9fb54f2-bf4d-42a7-867b-ebcad9281633" name="Changes" comment="" />
|
||||
<created>1765353883129</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1765353883129</updated>
|
||||
<workItem from="1765353884119" duration="13778000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
</project>
|
||||
8
Dockerfile
Normal file
8
Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
# Utiliser une image de base d'un serveur web léger
|
||||
FROM nginx:stable-alpine
|
||||
|
||||
# Copier tout le contenu du répertoire courant (.) dans le répertoire de service de Nginx
|
||||
COPY . /usr/share/nginx/html
|
||||
|
||||
# Exposer le port par défaut du serveur web (80)
|
||||
EXPOSE 80
|
||||
38
assets/README.md
Normal file
38
assets/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 🌸 Portfolio – Aya Ben Mabrouk
|
||||
|
||||
Bienvenue sur mon portfolio !
|
||||
Je suis **Aya Ben Mabrouk**, étudiante en **2ème année de BTS CIEL (Cybersécurité, Informatique et Électronique)**.
|
||||
Ce site présente mes compétences, mes projets ainsi que mon expérience professionnelle, notamment mon stage en clinique.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Technologies utilisées
|
||||
|
||||
- **HTML5 / CSS3 / JavaScript**
|
||||
- **Docker & Docker Compose**
|
||||
- **Devicon (icônes professionnelles)**
|
||||
- **Organisation de projet propre en architecture `/src`**
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Lancer le projet avec Docker
|
||||
|
||||
Assurez-vous d’avoir Docker installé, puis exécutez :
|
||||
|
||||
cd ~/Documents/portfolio
|
||||
|
||||
Lien : http://localhost:8080
|
||||
```bash
|
||||
./init.sh
|
||||
|
||||
.
|
||||
├── docker-compose.yml
|
||||
├── Dockerfile
|
||||
├── init.sh
|
||||
└── src/
|
||||
├── index.html
|
||||
├── style.css
|
||||
├── script.js
|
||||
└── assets/
|
||||
└── portrait_aya.jpg
|
||||
|
||||
BIN
assets/cms.preview.jpg
Normal file
BIN
assets/cms.preview.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1005 KiB |
7
docker-compose.yml
Normal file
7
docker-compose.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
services:
|
||||
portfolio:
|
||||
build: .
|
||||
ports:
|
||||
- "8080:80"
|
||||
container_name: portfolio
|
||||
restart: unless-stopped
|
||||
221
index.html
Normal file
221
index.html
Normal file
@@ -0,0 +1,221 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Portfolio - Aya Ben Mabrouk</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header class="main-header">
|
||||
<div class="logo">
|
||||
<span class="logo-abm">ABM</span>
|
||||
<div class="logo-info">
|
||||
<span>Aya Ben Mabrouk</span>
|
||||
<span class="logo-subtitle">BTS CIEL — Développement & Réseaux</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="main-nav">
|
||||
<a href="#about">À propos</a>
|
||||
<a href="#skills">Compétences</a>
|
||||
<a href="#projects">Projets</a>
|
||||
<a href="#experience">Expériences</a>
|
||||
<a href="#parcours">Parcours</a>
|
||||
<a href="#contact">Contact</a>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- SECTION HERO -->
|
||||
<section class="hero">
|
||||
<div class="hero-content">
|
||||
<h1>Portfolio de Aya Ben Mabrouk</h1>
|
||||
<p class="hero-description">
|
||||
Étudiante en 2ème année de BTS CIEL — développement web, systèmes & réseaux.
|
||||
Je conçois des solutions simples et élégantes, et j'aime résoudre des problèmes concrets.
|
||||
</p>
|
||||
<div class="hero-actions">
|
||||
<a href="#projects" class="btn btn-project">Voir mes projets</a>
|
||||
<a href="#contact" class="btn btn-contact">Me contacter</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hero-profile-card">
|
||||
<div class="profile-placeholder">AB</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION A PROPOS -->
|
||||
<section id="about" class="about-section">
|
||||
<div class="about-header">
|
||||
<h2>À propos</h2>
|
||||
</div>
|
||||
|
||||
<div class="about-details-grid">
|
||||
<div class="about-bio">
|
||||
<p>
|
||||
Je m'appelle Aya Ben Mabrouk. Actuellement en deuxième année de BTS CIEL,
|
||||
je m'intéresse au développement web, à l'administration système et réseau, et aux systèmes embarqués.
|
||||
J'apprécie les interfaces soignées et l'optimisation technique.
|
||||
</p>
|
||||
<p>
|
||||
Je suis organisée, curieuse et motivée. J'apprends continuellement et j'aime travailler sur des
|
||||
projets concrets et stimulants.
|
||||
</p>
|
||||
|
||||
<div class="social-links">
|
||||
<a href="mailto:ayabmk13@gmail.com" target="_blank">
|
||||
<i class="devicon-google-plain colored"></i>
|
||||
</a>
|
||||
<a href="https://www.linkedin.com/in/ayabmk13" target="_blank">
|
||||
<i class="devicon-linkedin-plain colored"></i>
|
||||
</a>
|
||||
<a href="https://github.com/Ayaabmk" target="_blank">
|
||||
<i class="devicon-github-original"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="about-keywords">
|
||||
<p><strong>Langages :</strong> HTML, CSS, JavaScript, PHP, Python</p>
|
||||
<p><strong>Réseaux :</strong> TCP/IP, VLAN, DHCP, Linux</p>
|
||||
<p><strong>Outils :</strong> Git, Docker, MySQL</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION COMPETENCES -->
|
||||
<section id="skills">
|
||||
<h2>Compétences</h2>
|
||||
|
||||
<div class="skills-grid">
|
||||
<div class="skill-card"><i class="devicon-html5-plain colored"></i><p>HTML</p></div>
|
||||
<div class="skill-card"><i class="devicon-css3-plain colored"></i><p>CSS</p></div>
|
||||
<div class="skill-card"><i class="devicon-javascript-plain colored"></i><p>JavaScript</p></div>
|
||||
<div class="skill-card"><i class="devicon-php-plain colored"></i><p>PHP</p></div>
|
||||
<div class="skill-card"><i class="devicon-mysql-plain colored"></i><p>MySQL</p></div>
|
||||
<div class="skill-card"><i class="devicon-linux-plain colored"></i><p>Linux</p></div>
|
||||
<div class="skill-card"><i class="devicon-docker-plain colored"></i><p>Docker</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION PROJETS -->
|
||||
<section id="projects">
|
||||
<h2>Projets</h2>
|
||||
|
||||
<div class="project-card">
|
||||
<h3>Mini CMS – Création d’un système de gestion de contenu</h3>
|
||||
|
||||
<img src="assets/cms.preview.jpg" alt="Aperçu du CMS" class="project-preview">
|
||||
|
||||
<p>
|
||||
J’ai développé un mini CMS permettant de créer, modifier et supprimer du contenu.
|
||||
Il intègre un système d’authentification, une interface administrateur moderne et une gestion dynamique des contenus.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>PHP / MySQL</li>
|
||||
<li>CRUD complet</li>
|
||||
<li>Gestion des utilisateurs</li>
|
||||
<li>Interface moderne</li>
|
||||
</ul>
|
||||
|
||||
<div class="project-actions">
|
||||
<a class="project-btn" target="_blank" href="https://github.com/Ayaabmk">
|
||||
Voir le code sur GitHub
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION EXPERIENCE -->
|
||||
<section id="experience">
|
||||
<h2>Mon expérience en entreprise</h2>
|
||||
|
||||
<div class="experience-card">
|
||||
<h3>Stage – Support Informatique & Réseau<br>Clinique Privée</h3>
|
||||
<p>
|
||||
Dans un environnement réel en clinique, j'ai participé à la gestion du parc informatique :
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Configuration de postes</li>
|
||||
<li>Mise en réseau et gestion des accès</li>
|
||||
<li>Installation d’imprimantes</li>
|
||||
<li>Support utilisateurs quotidien</li>
|
||||
<li>Gestion de droits sur des logiciels internes</li>
|
||||
</ul>
|
||||
|
||||
<p>Ce stage m’a permis de renforcer mes compétences techniques et ma rigueur.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION PARCOURS -->
|
||||
<section id="parcours" class="timeline-section">
|
||||
<h2>Parcours</h2>
|
||||
|
||||
<div class="timeline">
|
||||
|
||||
<div class="timeline-item">
|
||||
<span class="timeline-dot"></span>
|
||||
<div class="timeline-content">
|
||||
<span class="timeline-date">2025 - 2026</span>
|
||||
<p>BTS CIEL — 2ᵉ année, développement & réseaux</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="timeline-item">
|
||||
<span class="timeline-dot"></span>
|
||||
<div class="timeline-content">
|
||||
<span class="timeline-date">2024 - 2025</span>
|
||||
<p>BTS CIEL — 1ʳᵉ année, bases en programmation</p>
|
||||
</div>
|
||||
|
||||
<div class="timeline-item">
|
||||
|
||||
|
||||
<span class="timeline-dot"></span>
|
||||
<div class="timeline-content">
|
||||
<span class="timeline-date">2024 - 2023</span>
|
||||
<p>Baccalauréat — Général - Mention Bien, Economique & social</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SECTION CONTACT -->
|
||||
<section id="contact" class="contact-section">
|
||||
<h2>Contact</h2>
|
||||
|
||||
<p class="contact-subtitle">
|
||||
Une opportunité, une idée, une question ? Contacte-moi !
|
||||
</p>
|
||||
|
||||
<div class="contact-links">
|
||||
<a href="mailto:ayabmk13@gmail.com" class="contact-btn">
|
||||
<i class="fas fa-envelope"></i> Email
|
||||
</a>
|
||||
<a href="https://www.linkedin.com/in/ayabmk13" target="_blank" class="contact-btn">
|
||||
<i class="fab fa-linkedin"></i> LinkedIn
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>© 2025 Aya Ben Mabrouk - Portfolio</p>
|
||||
</footer>
|
||||
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
8
portfolio.iml
Normal file
8
portfolio.iml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="GENERAL_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
80
script.js
Normal file
80
script.js
Normal file
@@ -0,0 +1,80 @@
|
||||
// Smooth scroll pour les liens d'ancrage
|
||||
const links = document.querySelectorAll('a[href^="#"]');
|
||||
|
||||
links.forEach(link => {
|
||||
link.addEventListener('click', event => {
|
||||
const targetId = link.getAttribute('href');
|
||||
if (targetId.length > 1) {
|
||||
event.preventDefault();
|
||||
const target = document.querySelector(targetId);
|
||||
if (target) {
|
||||
target.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'start'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Gestion du formulaire de contact
|
||||
const contactForm = document.getElementById('contactForm');
|
||||
const formFeedback = document.getElementById('formFeedback');
|
||||
|
||||
if (contactForm) {
|
||||
contactForm.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
|
||||
const formData = new FormData(contactForm);
|
||||
const name = formData.get('name').trim();
|
||||
const email = formData.get('email').trim();
|
||||
const message = formData.get('message').trim();
|
||||
|
||||
// Validation simple
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
|
||||
if (name && emailRegex.test(email) && message) {
|
||||
formFeedback.textContent = `Merci ${name}, ton message a bien été reçu !`;
|
||||
formFeedback.className = 'form__feedback success';
|
||||
formFeedback.style.display = 'block';
|
||||
contactForm.reset();
|
||||
|
||||
// Masquer le message après 5 secondes
|
||||
setTimeout(() => {
|
||||
formFeedback.style.display = 'none';
|
||||
}, 5000);
|
||||
} else {
|
||||
formFeedback.textContent = 'Merci de remplir tous les champs avec des informations valides.';
|
||||
formFeedback.className = 'form__feedback error';
|
||||
formFeedback.style.display = 'block';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const currentYearElement = document.getElementById('currentYear');
|
||||
if (currentYearElement) {
|
||||
currentYearElement.textContent = new Date().getFullYear();
|
||||
}
|
||||
|
||||
// Animation au scroll (optionnel, pour un effet plus subtil)
|
||||
const observerOptions = {
|
||||
threshold: 0.1,
|
||||
rootMargin: '0px 0px -50px 0px'
|
||||
};
|
||||
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.style.opacity = '1';
|
||||
entry.target.style.transform = 'translateY(0)';
|
||||
}
|
||||
});
|
||||
}, observerOptions);
|
||||
|
||||
// Appliquer l'animation aux cartes
|
||||
document.querySelectorAll('.card, .timeline__item').forEach(el => {
|
||||
el.style.opacity = '0';
|
||||
el.style.transform = 'translateY(20px)';
|
||||
el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
|
||||
observer.observe(el);
|
||||
});
|
||||
348
style.css
Normal file
348
style.css
Normal file
@@ -0,0 +1,348 @@
|
||||
/* ============================================
|
||||
PORTFOLIO — AYA BEN MABROUK
|
||||
Thème girly professionnel : rose poudré + blanc
|
||||
============================================ */
|
||||
|
||||
:root {
|
||||
--rose-light: #f8e9ef;
|
||||
--rose: #e7c4cf;
|
||||
--rose-gold: #d7a9a3;
|
||||
--rose-dark: #b07d84;
|
||||
--white: #ffffff;
|
||||
--text: #3a3a3a;
|
||||
--muted: #6b6b6b;
|
||||
|
||||
--radius: 16px;
|
||||
--shadow: 0 8px 24px rgba(0,0,0,0.08);
|
||||
--shadow-light: 0 4px 16px rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: "Poppins", sans-serif;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
GLOBAL
|
||||
============================================ */
|
||||
|
||||
body {
|
||||
background: var(--rose-light);
|
||||
color: var(--text);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
h2 {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
font-size: 2rem;
|
||||
color: var(--rose-dark);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
section {
|
||||
padding: 4rem 8%;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
HEADER
|
||||
============================================ */
|
||||
|
||||
.main-header {
|
||||
background: linear-gradient(135deg, var(--rose), var(--rose-gold));
|
||||
color: var(--white);
|
||||
padding: 1.5rem 8%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.logo-abm {
|
||||
background: var(--white);
|
||||
color: var(--rose-dark);
|
||||
padding: 0.6rem 1rem;
|
||||
border-radius: var(--radius);
|
||||
font-size: 1.4rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.logo-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.logo-subtitle {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.main-nav a {
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
margin-left: 1rem;
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.main-nav a:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
HERO SECTION
|
||||
============================================ */
|
||||
|
||||
.hero {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 3rem;
|
||||
}
|
||||
|
||||
.hero-content h1 {
|
||||
font-size: 2.4rem;
|
||||
color: var(--rose-dark);
|
||||
}
|
||||
|
||||
.hero-description {
|
||||
max-width: 500px;
|
||||
color: var(--muted);
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.hero-actions {
|
||||
margin-top: 1rem;
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 0.9rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.btn-project {
|
||||
background: var(--rose-gold);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.btn-contact {
|
||||
background: var(--white);
|
||||
border: 2px solid var(--rose-gold);
|
||||
color: var(--rose-dark);
|
||||
}
|
||||
|
||||
.hero-profile-card {
|
||||
background: var(--white);
|
||||
width: 220px;
|
||||
height: 220px;
|
||||
border-radius: 50%;
|
||||
box-shadow: var(--shadow);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.profile-placeholder {
|
||||
background: linear-gradient(135deg, var(--rose), var(--rose-gold));
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
border-radius: 50%;
|
||||
color: var(--white);
|
||||
font-size: 3rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
ABOUT
|
||||
============================================ */
|
||||
|
||||
.about-details-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.about-bio {
|
||||
font-size: 1rem;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.social-links a {
|
||||
font-size: 2rem;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
SKILLS
|
||||
============================================ */
|
||||
|
||||
.skills-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.skill-card {
|
||||
background: var(--white);
|
||||
padding: 1.2rem;
|
||||
border-radius: var(--radius);
|
||||
box-shadow: var(--shadow-light);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.skill-card i {
|
||||
font-size: 2.6rem;
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
PROJECTS
|
||||
============================================ */
|
||||
|
||||
.project-card {
|
||||
background: var(--white);
|
||||
padding: 2rem;
|
||||
border-radius: var(--radius);
|
||||
box-shadow: var(--shadow);
|
||||
max-width: 750px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.project-card h3 {
|
||||
font-size: 1.6rem;
|
||||
color: var(--rose-dark);
|
||||
}
|
||||
|
||||
.project-preview {
|
||||
width: 100%;
|
||||
border-radius: var(--radius);
|
||||
margin: 1.2rem 0;
|
||||
}
|
||||
|
||||
.project-card ul {
|
||||
margin: 1rem 0 1.5rem;
|
||||
}
|
||||
|
||||
.project-actions {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.project-btn {
|
||||
background: var(--rose-dark);
|
||||
color: var(--white);
|
||||
padding: 0.8rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
EXPERIENCE
|
||||
============================================ */
|
||||
|
||||
.experience-card {
|
||||
background: var(--white);
|
||||
padding: 2rem;
|
||||
border-radius: var(--radius);
|
||||
box-shadow: var(--shadow);
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.experience-card h3 {
|
||||
color: var(--rose-dark);
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
TIMELINE
|
||||
============================================ */
|
||||
|
||||
.timeline {
|
||||
border-left: 3px solid var(--rose-dark);
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
position: relative;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.timeline-dot {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background: var(--rose-dark);
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
left: -29px;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
CONTACT
|
||||
============================================ */
|
||||
|
||||
.contact-links {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.contact-btn {
|
||||
background: var(--rose-dark);
|
||||
color: var(--white);
|
||||
padding: 0.8rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
text-decoration: none;
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
|
||||
.form-container {
|
||||
max-width: 600px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.contact-form input,
|
||||
.contact-form textarea {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
border-radius: var(--radius);
|
||||
border: 1px solid var(--rose);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.submit-btn {
|
||||
background: var(--rose-gold);
|
||||
border: none;
|
||||
color: var(--white);
|
||||
padding: 0.8rem 1.4rem;
|
||||
border-radius: var(--radius);
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
FOOTER
|
||||
============================================ */
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
background: var(--rose-dark);
|
||||
color: var(--white);
|
||||
margin-top: 3rem;
|
||||
}
|
||||
Reference in New Issue
Block a user