Compare commits
No commits in common. "6aaf87f11a6ec5ad016afee68063145cb73af8d7" and "86b13fb6b431ece6a032c1544877ee1dd2e8b8ae" have entirely different histories.
6aaf87f11a
...
86b13fb6b4
8 changed files with 161 additions and 107 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -20,9 +20,6 @@ pnpm-debug.log*
|
||||||
# images fetched from NAS
|
# images fetched from NAS
|
||||||
src/assets/images/photos/
|
src/assets/images/photos/
|
||||||
|
|
||||||
# editor backup files
|
|
||||||
*~
|
|
||||||
|
|
||||||
# macOS-specific files
|
# macOS-specific files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Add your javascript here
|
||||||
|
|
||||||
|
window.darkMode = false;
|
||||||
|
|
||||||
const stickyClasses = ["fixed", "h-14"];
|
const stickyClasses = ["fixed", "h-14"];
|
||||||
const unstickyClasses = ["absolute", "h-20"];
|
const unstickyClasses = ["absolute", "h-20"];
|
||||||
const stickyClassesContainer = [
|
const stickyClassesContainer = [
|
||||||
|
|
@ -13,12 +17,32 @@ let headerElement = null;
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
headerElement = document.getElementById("header");
|
headerElement = document.getElementById("header");
|
||||||
|
|
||||||
|
if (
|
||||||
|
localStorage.getItem("dark_mode") &&
|
||||||
|
localStorage.getItem("dark_mode") === "true"
|
||||||
|
) {
|
||||||
|
window.darkMode = true;
|
||||||
|
showNight();
|
||||||
|
} else {
|
||||||
|
showDay();
|
||||||
|
}
|
||||||
stickyHeaderFuncionality();
|
stickyHeaderFuncionality();
|
||||||
applyMenuItemClasses();
|
applyMenuItemClasses();
|
||||||
evaluateHeaderPosition();
|
evaluateHeaderPosition();
|
||||||
mobileMenuFunctionality();
|
mobileMenuFunctionality();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// window.toggleDarkMode = function(){
|
||||||
|
// document.documentElement.classList.toggle('dark');
|
||||||
|
// if(document.documentElement.classList.contains('dark')){
|
||||||
|
// localStorage.setItem('dark_mode', true);
|
||||||
|
// window.darkMode = true;
|
||||||
|
// } else {
|
||||||
|
// window.darkMode = false;
|
||||||
|
// localStorage.setItem('dark_mode', false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
window.stickyHeaderFuncionality = () => {
|
window.stickyHeaderFuncionality = () => {
|
||||||
window.addEventListener("scroll", () => {
|
window.addEventListener("scroll", () => {
|
||||||
evaluateHeaderPosition();
|
evaluateHeaderPosition();
|
||||||
|
|
@ -45,6 +69,70 @@ window.evaluateHeaderPosition = () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
document.getElementById("darkToggle").addEventListener("click", () => {
|
||||||
|
document.documentElement.classList.add("duration-300");
|
||||||
|
|
||||||
|
if (document.documentElement.classList.contains("dark")) {
|
||||||
|
localStorage.removeItem("dark_mode");
|
||||||
|
showDay(true);
|
||||||
|
} else {
|
||||||
|
localStorage.setItem("dark_mode", true);
|
||||||
|
showNight(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function showDay(animate) {
|
||||||
|
document.getElementById("sun").classList.remove("setting");
|
||||||
|
document.getElementById("moon").classList.remove("rising");
|
||||||
|
|
||||||
|
let timeout = 0;
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
|
timeout = 500;
|
||||||
|
|
||||||
|
document.getElementById("moon").classList.add("setting");
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
document.getElementById("dayText").classList.remove("hidden");
|
||||||
|
document.getElementById("nightText").classList.add("hidden");
|
||||||
|
|
||||||
|
document.getElementById("moon").classList.add("hidden");
|
||||||
|
document.getElementById("sun").classList.remove("hidden");
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
|
document.documentElement.classList.remove("dark");
|
||||||
|
document.getElementById("sun").classList.add("rising");
|
||||||
|
}
|
||||||
|
}, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showNight(animate) {
|
||||||
|
document.getElementById("moon").classList.remove("setting");
|
||||||
|
document.getElementById("sun").classList.remove("rising");
|
||||||
|
|
||||||
|
let timeout = 0;
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
|
timeout = 500;
|
||||||
|
|
||||||
|
document.getElementById("sun").classList.add("setting");
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
document.getElementById("nightText").classList.remove("hidden");
|
||||||
|
document.getElementById("dayText").classList.add("hidden");
|
||||||
|
|
||||||
|
document.getElementById("sun").classList.add("hidden");
|
||||||
|
document.getElementById("moon").classList.remove("hidden");
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
|
document.documentElement.classList.add("dark");
|
||||||
|
document.getElementById("moon").classList.add("rising");
|
||||||
|
}
|
||||||
|
}, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
window.applyMenuItemClasses = () => {
|
window.applyMenuItemClasses = () => {
|
||||||
const menuItems = document.querySelectorAll("#menu a");
|
const menuItems = document.querySelectorAll("#menu a");
|
||||||
for (let i = 0; i < menuItems.length; i++) {
|
for (let i = 0; i < menuItems.length; i++) {
|
||||||
|
|
@ -52,6 +140,7 @@ window.applyMenuItemClasses = () => {
|
||||||
menuItems[i].classList.add("text-neutral-900", "dark:text-white");
|
menuItems[i].classList.add("text-neutral-900", "dark:text-white");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//:class="{ 'text-neutral-900 dark:text-white': window.location.pathname == '{menu.url}', 'text-neutral-700 dark:text-neutral-400': window.location.pathname != '{menu.url}' }"
|
||||||
};
|
};
|
||||||
|
|
||||||
function mobileMenuFunctionality() {
|
function mobileMenuFunctionality() {
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,16 @@
|
||||||
---
|
---
|
||||||
// DarkModeToggle component - cycles between auto / light / dark
|
// DarkModeToggle component - toggles between light and dark mode
|
||||||
---
|
---
|
||||||
|
|
||||||
<button
|
<button
|
||||||
id="darkModeToggle"
|
id="darkModeToggle"
|
||||||
type="button"
|
type="button"
|
||||||
class="flex items-center justify-center w-8 h-8 rounded-lg cursor-pointer text-neutral-600 dark:text-neutral-300 hover:text-neutral-900 dark:hover:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors"
|
class="flex items-center justify-center w-8 h-8 rounded-lg cursor-pointer text-neutral-600 dark:text-neutral-300 hover:text-neutral-900 dark:hover:text-white hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors"
|
||||||
aria-label="Changer le thème"
|
aria-label="Toggle dark mode"
|
||||||
>
|
>
|
||||||
<!-- Auto icon (system preference) -->
|
|
||||||
<svg
|
<svg
|
||||||
class="w-5 h-5 hidden"
|
class="w-5 h-5 dark:hidden"
|
||||||
data-theme-icon="auto"
|
id="sunIcon"
|
||||||
fill="none"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
>
|
|
||||||
<path d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
|
||||||
</svg>
|
|
||||||
<!-- Light icon (sun) -->
|
|
||||||
<svg
|
|
||||||
class="w-5 h-5 hidden"
|
|
||||||
data-theme-icon="light"
|
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
|
|
@ -36,10 +22,9 @@
|
||||||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
|
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
|
||||||
></path>
|
></path>
|
||||||
</svg>
|
</svg>
|
||||||
<!-- Dark icon (moon) -->
|
|
||||||
<svg
|
<svg
|
||||||
class="w-5 h-5 hidden"
|
class="hidden w-5 h-5 dark:block"
|
||||||
data-theme-icon="dark"
|
id="moonIcon"
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
|
|
@ -54,62 +39,17 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function getThemePreference(): 'auto' | 'light' | 'dark' {
|
|
||||||
const stored = localStorage.getItem('theme');
|
|
||||||
if (stored === 'light' || stored === 'dark') return stored;
|
|
||||||
return 'auto';
|
|
||||||
}
|
|
||||||
|
|
||||||
function getEffectiveDark(preference: 'auto' | 'light' | 'dark'): boolean {
|
|
||||||
if (preference === 'dark') return true;
|
|
||||||
if (preference === 'light') return false;
|
|
||||||
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyTheme(preference: 'auto' | 'light' | 'dark') {
|
|
||||||
const isDark = getEffectiveDark(preference);
|
|
||||||
document.documentElement.classList.toggle('dark', isDark);
|
|
||||||
updateIcon(preference);
|
|
||||||
updateAriaLabel(preference);
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateIcon(preference: 'auto' | 'light' | 'dark') {
|
|
||||||
document.querySelectorAll<HTMLElement>('[data-theme-icon]').forEach(icon => {
|
|
||||||
icon.classList.toggle('hidden', icon.dataset.themeIcon !== preference);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateAriaLabel(preference: 'auto' | 'light' | 'dark') {
|
|
||||||
const toggle = document.getElementById('darkModeToggle');
|
|
||||||
const labels = { auto: 'Thème : automatique', light: 'Thème : clair', dark: 'Thème : sombre' };
|
|
||||||
toggle?.setAttribute('aria-label', labels[preference]);
|
|
||||||
}
|
|
||||||
|
|
||||||
const cycle: Record<string, 'light' | 'dark' | 'auto'> = { auto: 'light', light: 'dark', dark: 'auto' };
|
|
||||||
|
|
||||||
function setupDarkModeToggle() {
|
function setupDarkModeToggle() {
|
||||||
const toggle = document.getElementById('darkModeToggle');
|
const toggle = document.getElementById('darkModeToggle');
|
||||||
const preference = getThemePreference();
|
|
||||||
applyTheme(preference);
|
|
||||||
|
|
||||||
toggle?.addEventListener('click', () => {
|
toggle?.addEventListener('click', () => {
|
||||||
const current = getThemePreference();
|
document.documentElement.classList.toggle('dark');
|
||||||
const next = cycle[current];
|
const isDark = document.documentElement.classList.contains('dark');
|
||||||
if (next === 'auto') {
|
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
||||||
localStorage.removeItem('theme');
|
|
||||||
} else {
|
|
||||||
localStorage.setItem('theme', next);
|
|
||||||
}
|
|
||||||
applyTheme(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
|
||||||
if (getThemePreference() === 'auto') {
|
|
||||||
applyTheme('auto');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run on page load and on Astro navigation
|
||||||
setupDarkModeToggle();
|
setupDarkModeToggle();
|
||||||
document.addEventListener('astro:after-swap', setupDarkModeToggle);
|
document.addEventListener('astro:after-swap', setupDarkModeToggle);
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -15,8 +15,10 @@ const { title } = Astro.props;
|
||||||
<!-- Used to add dark mode right away, adding here prevents any flicker -->
|
<!-- Used to add dark mode right away, adding here prevents any flicker -->
|
||||||
<script is:inline>
|
<script is:inline>
|
||||||
if (typeof Storage !== 'undefined') {
|
if (typeof Storage !== 'undefined') {
|
||||||
var theme = localStorage.getItem('theme');
|
if (
|
||||||
if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
localStorage.getItem('dark_mode') &&
|
||||||
|
localStorage.getItem('dark_mode') == 'true'
|
||||||
|
) {
|
||||||
document.documentElement.classList.add('dark')
|
document.documentElement.classList.add('dark')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
جليل عرفاوي
|
جليل عرفاوي
|
||||||
</h1>
|
</h1>
|
||||||
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
||||||
مطوّر • ممثل • مصوّر
|
مطوّر • عاشق للمسرح • هاوي للتصوير
|
||||||
</h2>
|
</h2>
|
||||||
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
||||||
مرحبًا بكم في عالمي الإبداعي حيث يلتقي الكود بالفن
|
مرحبًا بكم في عالمي الإبداعي حيث يلتقي الكود بالفن
|
||||||
|
|
@ -30,10 +30,11 @@ import Layout from "../../layouts/main.astro";
|
||||||
|
|
||||||
<div class="relative justify-end w-full mt-12 md:flex md:pr-10 md:w-1/2 md:mt-0">
|
<div class="relative justify-end w-full mt-12 md:flex md:pr-10 md:w-1/2 md:mt-0">
|
||||||
<div class="relative z-50 w-full max-w-sm mx-auto">
|
<div class="relative z-50 w-full max-w-sm mx-auto">
|
||||||
|
<div class="absolute top-6 left-6 z-40 w-20 h-20 rounded-full bg-gradient-to-br from-blue-400 to-purple-600 animate-pulse"></div>
|
||||||
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
||||||
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
||||||
<img
|
<img
|
||||||
src="/assets/images/jalil-2.jpg"
|
src="/assets/images/photo.png"
|
||||||
alt="جليل عرفاوي"
|
alt="جليل عرفاوي"
|
||||||
loading="eager"
|
loading="eager"
|
||||||
decoding="auto"
|
decoding="auto"
|
||||||
|
|
@ -46,9 +47,11 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Universe Cards Section -->
|
||||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
|
|
||||||
|
<!-- Professional Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
||||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -56,7 +59,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
المطوّر
|
المطوّر
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
||||||
شغوف بحرفة البرمجة، DDD والهندسة النظيفة. خبير في TypeScript و Node.js.
|
شغوف بحرفة البرمجة، TDD والهندسة النظيفة. خبير في TypeScript و Node.js و DevOps.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
|
|
@ -72,6 +75,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Theater Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
||||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -79,16 +83,23 @@ import Layout from "../../layouts/main.astro";
|
||||||
المسرح
|
المسرح
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
||||||
مرتجل شغوف، أستكشف أيضًا المسرح المكتوب والتمثيل أمام الكاميرا.
|
عاشق للمسرح ومبدع للمحتوى الفكاهي. من خشبة المسرح إلى وسائل التواصل الاجتماعي، استكشاف فن الإضحاك.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
← المسار الفني 🚧
|
← المسار الفني 🚧
|
||||||
</span>
|
</span>
|
||||||
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
|
← عروضي 🚧
|
||||||
|
</span>
|
||||||
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
|
← مدوّنة المسرح 🚧
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Photography Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
||||||
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
<div class="absolute top-4 left-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -96,22 +107,25 @@ import Layout from "../../layouts/main.astro";
|
||||||
التصوير
|
التصوير
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
||||||
هاوي تصوير فوتوغرافي شغوف. التقاط اللحظة، ورواية قصة من خلال العدسة.
|
هاوي تصوير فوتوغرافي، ألتقط اللحظات وأروي القصص من خلال العدسة.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||||
← معرض الصور
|
← معرض الصور
|
||||||
</a>
|
</a>
|
||||||
<a href="/photo/blog" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
← مُدوّنة الصور
|
← الألبومات 🚧
|
||||||
</a>
|
</span>
|
||||||
|
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="قيد الإنشاء">
|
||||||
|
← مدوّنة التصوير 🚧
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Blog Section
|
<!-- Blog Section -->
|
||||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||||
<div class="text-center mb-12">
|
<div class="text-center mb-12">
|
||||||
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
||||||
|
|
@ -132,7 +146,6 @@ import Layout from "../../layouts/main.astro";
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Contact Section -->
|
<!-- Contact Section -->
|
||||||
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
<div dir="rtl" lang="ar" class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
||||||
|
|
@ -145,19 +158,19 @@ import Layout from "../../layouts/main.astro";
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="flex justify-center space-x-6 space-x-reverse">
|
<div class="flex justify-center space-x-6 space-x-reverse">
|
||||||
<a href="https://linkedin.com/in/jalil" target="_blank" rel="noopener noreferrer" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
<a href="https://linkedin.com/in/jalil" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="https://github.com/jalilarfaoui" target="_blank" rel="noopener noreferrer" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
<a href="https://github.com/jalilarfaoui" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="mailto:jalil@arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
<a href="mailto:contact@jalil.arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -165,4 +178,4 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
@ -11,7 +11,7 @@ import Link from "../../components/Link.astro";
|
||||||
description="حرفي في البرمجة، عاشق للمسرح، هاوي للتصوير الفوتوغرافي."
|
description="حرفي في البرمجة، عاشق للمسرح، هاوي للتصوير الفوتوغرافي."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<img src="/assets/images/jalil.jpg" class="relative z-30 w-full my-10 rounded-xl" alt="جليل عرفاوي" />
|
<img src="/assets/images/photo.png" class="relative z-30 w-full my-10 rounded-xl" alt="جليل عرفاوي" />
|
||||||
|
|
||||||
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">من أنا؟</h2>
|
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">من أنا؟</h2>
|
||||||
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import Link from "../../components/Link.astro";
|
||||||
description="Code craftsman, theater enthusiast, photography lover."
|
description="Code craftsman, theater enthusiast, photography lover."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<img src="/assets/images/jalil.jpg" class="relative z-30 w-full my-10 rounded-xl" alt="Jalil Arfaoui" />
|
<img src="/assets/images/photo.png" class="relative z-30 w-full my-10 rounded-xl" alt="Jalil Arfaoui" />
|
||||||
|
|
||||||
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">Who am I?</h2>
|
<h2 class="mb-4 text-2xl font-bold dark:text-neutral-200">Who am I?</h2>
|
||||||
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
<div class="space-y-4 text-gray-600 dark:text-neutral-400 leading-relaxed">
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import Layout from "../../layouts/main.astro";
|
import Layout from "../../layouts/main.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Jalil Arfaoui - Developer • Comedian • Photographer">
|
<Layout title="Jalil Arfaoui - Developer • Actor • Photographer">
|
||||||
<!-- Hero Section -->
|
<!-- Hero Section -->
|
||||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-16 px-7 md:mt-24 lg:mt-32 xl:px-0">
|
<div class="relative z-20 w-full max-w-6xl mx-auto mt-16 px-7 md:mt-24 lg:mt-32 xl:px-0">
|
||||||
<div class="flex flex-col items-center md:flex-row">
|
<div class="flex flex-col items-center md:flex-row">
|
||||||
|
|
@ -11,7 +11,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
Jalil Arfaoui
|
Jalil Arfaoui
|
||||||
</h1>
|
</h1>
|
||||||
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
<h2 class="mb-6 text-xl font-medium text-neutral-600 dark:text-neutral-300 md:text-2xl">
|
||||||
Developer • Comedian • Photographer
|
Developer • Theater enthusiast • Photography lover
|
||||||
</h2>
|
</h2>
|
||||||
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
<p class="mb-8 text-lg text-neutral-600 dark:text-neutral-400 leading-relaxed">
|
||||||
Welcome to my creative universe where code meets art
|
Welcome to my creative universe where code meets art
|
||||||
|
|
@ -30,10 +30,11 @@ import Layout from "../../layouts/main.astro";
|
||||||
|
|
||||||
<div class="relative justify-end w-full mt-12 md:flex md:pl-10 md:w-1/2 md:mt-0">
|
<div class="relative justify-end w-full mt-12 md:flex md:pl-10 md:w-1/2 md:mt-0">
|
||||||
<div class="relative z-50 w-full max-w-sm mx-auto">
|
<div class="relative z-50 w-full max-w-sm mx-auto">
|
||||||
|
<div class="absolute top-6 right-6 z-40 w-20 h-20 rounded-full bg-gradient-to-br from-blue-400 to-purple-600 animate-pulse"></div>
|
||||||
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
<div class="relative z-30 p-1 bg-gradient-to-br from-blue-500 via-purple-500 to-pink-500 rounded-3xl">
|
||||||
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
<div class="bg-white dark:bg-neutral-950 rounded-3xl p-4">
|
||||||
<img
|
<img
|
||||||
src="/assets/images/jalil-2.jpg"
|
src="/assets/images/photo.png"
|
||||||
alt="Jalil Arfaoui"
|
alt="Jalil Arfaoui"
|
||||||
loading="eager"
|
loading="eager"
|
||||||
decoding="auto"
|
decoding="auto"
|
||||||
|
|
@ -46,9 +47,11 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Universe Cards Section -->
|
||||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
|
|
||||||
|
<!-- Professional Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-blue-950/30 dark:to-indigo-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-blue-200/50 dark:border-blue-800/30">
|
||||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">💻</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -56,7 +59,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
Developer
|
Developer
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
<p class="text-blue-700 dark:text-blue-300 mb-6 leading-relaxed">
|
||||||
Passionate about Software Craftsmanship, DDD and Clean Architecture. TypeScript and Node.js expert.
|
Passionate about Software Craftsmanship, TDD and clean architecture. TypeScript, Node.js and DevOps expert.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="Under construction">
|
<span class="block text-blue-400/50 dark:text-blue-600/50 cursor-not-allowed" title="Under construction">
|
||||||
|
|
@ -72,6 +75,7 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Theater Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-yellow-50 to-orange-100 dark:from-yellow-950/30 dark:to-orange-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-yellow-200/50 dark:border-yellow-800/30">
|
||||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">🎭</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -79,16 +83,23 @@ import Layout from "../../layouts/main.astro";
|
||||||
Theater
|
Theater
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
<p class="text-orange-700 dark:text-orange-300 mb-6 leading-relaxed">
|
||||||
Passionate improviser, I'm also exploring written theater and on-camera acting.
|
Theater enthusiast and creator of humorous content. Exploring the art of making people laugh, from stage to social media.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||||
→ Artistic journey 🚧
|
→ Artistic journey 🚧
|
||||||
</span>
|
</span>
|
||||||
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||||
|
→ My shows 🚧
|
||||||
|
</span>
|
||||||
|
<span class="block text-orange-400/50 dark:text-orange-600/50 cursor-not-allowed" title="Under construction">
|
||||||
|
→ Theater blog 🚧
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Photography Universe -->
|
||||||
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
<div class="group relative overflow-hidden bg-gradient-to-br from-purple-50 to-pink-100 dark:from-purple-950/30 dark:to-pink-950/30 rounded-3xl p-8 hover:scale-105 transition-all duration-300 border border-purple-200/50 dark:border-purple-800/30">
|
||||||
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
<div class="absolute top-4 right-4 text-4xl opacity-20 group-hover:opacity-40 transition-opacity">📸</div>
|
||||||
<div class="relative z-10">
|
<div class="relative z-10">
|
||||||
|
|
@ -96,22 +107,25 @@ import Layout from "../../layouts/main.astro";
|
||||||
Photography
|
Photography
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
<p class="text-purple-700 dark:text-purple-300 mb-6 leading-relaxed">
|
||||||
Passionate photography enthusiast. Capturing the moment, telling a story through the lens.
|
Photography hobbyist capturing moments and telling stories through the lens.
|
||||||
</p>
|
</p>
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
<a href="/photo" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
||||||
→ Photo portfolio
|
→ Photo portfolio
|
||||||
</a>
|
</a>
|
||||||
<a href="/photo/blog" class="block text-purple-600 dark:text-purple-400 hover:text-purple-800 dark:hover:text-purple-200 font-medium">
|
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="Under construction">
|
||||||
→ Photo Feed
|
→ Galleries 🚧
|
||||||
</a>
|
</span>
|
||||||
|
<span class="block text-purple-400/50 dark:text-purple-600/50 cursor-not-allowed" title="Under construction">
|
||||||
|
→ Photo blog 🚧
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Blog Section
|
<!-- Blog Section -->
|
||||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 px-7 xl:px-0">
|
||||||
<div class="text-center mb-12">
|
<div class="text-center mb-12">
|
||||||
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
<h2 class="text-3xl font-bold text-neutral-800 dark:text-neutral-200 mb-4">
|
||||||
|
|
@ -132,7 +146,6 @@ import Layout from "../../layouts/main.astro";
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Contact Section -->
|
<!-- Contact Section -->
|
||||||
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
<div class="relative z-20 w-full max-w-6xl mx-auto mt-24 mb-16 px-7 xl:px-0">
|
||||||
|
|
@ -145,19 +158,19 @@ import Layout from "../../layouts/main.astro";
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="flex justify-center space-x-6">
|
<div class="flex justify-center space-x-6">
|
||||||
<a href="https://linkedin.com/in/jalil" target="_blank" rel="noopener noreferrer" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
<a href="https://linkedin.com/in/jalil" class="p-3 bg-blue-600 text-white rounded-full hover:bg-blue-700 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="https://github.com/jalilarfaoui" target="_blank" rel="noopener noreferrer" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
<a href="https://github.com/jalilarfaoui" class="p-3 bg-neutral-800 text-white rounded-full hover:bg-neutral-900 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
||||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="mailto:jalil@arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
<a href="mailto:contact@jalil.arfaoui.net" class="p-3 bg-green-600 text-white rounded-full hover:bg-green-700 transition-colors">
|
||||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -165,4 +178,4 @@ import Layout from "../../layouts/main.astro";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
Loading…
Add table
Reference in a new issue