|
3 | 3 | <head> |
4 | 4 | <meta charset="UTF-8"> |
5 | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
6 | | - <title>{{ name }} | Developer Bio</title> |
7 | | - |
| 6 | + <title>{{ name }} | {{ role }}</title> |
8 | 7 | <script src="https://cdn.tailwindcss.com"></script> |
| 8 | + <link rel="stylesheet" href="/assets/css/style.css"> |
9 | 9 | <script> |
10 | | - tailwind.config = { darkMode: 'class' } |
11 | | -
|
12 | | - // Sync theme on load |
13 | | - if (localStorage.getItem('theme') === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { |
14 | | - document.documentElement.classList.add('dark'); |
15 | | - } else { |
16 | | - document.documentElement.classList.remove('dark'); |
17 | | - } |
| 10 | + const saved = localStorage.getItem('theme'); |
| 11 | + if (saved === 'dark') document.documentElement.classList.add('dark'); |
18 | 12 | </script> |
19 | | - <link rel="stylesheet" href="/assets/css/style.css"> |
20 | 13 | </head> |
21 | | -<body class="bg-slate-50 dark:bg-slate-950 text-slate-900 dark:text-slate-100 min-h-screen"> |
| 14 | +<body class="min-h-screen"> |
22 | 15 |
|
23 | | - <header class="sticky top-0 z-50 bg-slate-50/80 dark:bg-slate-950/80 backdrop-blur-md border-b border-slate-200 dark:border-slate-800 py-4 mb-12"> |
| 16 | + <header class="sticky top-0 z-50 bg-[var(--bg-page)]/80 backdrop-blur-md border-b border-[var(--border-color)] py-4"> |
24 | 17 | <div class="max-w-7xl mx-auto px-4 flex justify-between items-center"> |
25 | | - |
26 | | - <a href="/" class="group flex items-center gap-2 font-bold text-indigo-600 dark:text-indigo-400 hover:text-indigo-800 dark:hover:text-indigo-300 transition-colors"> |
| 18 | + <a href="/" class="group flex items-center gap-2 font-bold text-accent transition-colors"> |
27 | 19 | <span class="transition-transform group-hover:-translate-x-1">←</span> |
28 | | - <span class="hidden sm:inline">Directory</span> |
| 20 | + <span>Directory</span> |
29 | 21 | </a> |
30 | | - |
31 | | - <div class="text-center"> |
32 | | - <h2 class="text-sm font-black uppercase tracking-[0.2em] text-slate-400 dark:text-slate-500">Developer Profile</h2> |
33 | | - <p class="font-bold text-slate-900 dark:text-white">{{ name }}</p> |
| 22 | + <div class="text-center hidden sm:block"> |
| 23 | + <p class="text-[10px] font-black uppercase tracking-widest text-[var(--text-muted)]">Viewing Profile</p> |
| 24 | + <p class="font-bold text-sm">{{ name }}</p> |
34 | 25 | </div> |
35 | | - |
36 | | - <button onclick="toggleTheme()" class="p-2.5 rounded-full bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 shadow-sm hover:bg-slate-100 dark:hover:bg-slate-700 transition-all active:scale-90"> |
37 | | - <span class="dark:hidden text-indigo-600 text-lg">🌙</span> |
38 | | - <span class="hidden dark:block text-yellow-400 text-lg">☀️</span> |
| 26 | + <button onclick="toggleTheme()" class="p-2.5 rounded-full bg-[var(--bg-card)] border border-[var(--border-color)] shadow-sm"> |
| 27 | + <span id="theme-icon">🌙</span> |
39 | 28 | </button> |
40 | | - |
41 | 29 | </div> |
42 | 30 | </header> |
43 | 31 |
|
44 | | - <main class="max-w-3xl mx-auto px-4 pb-24"> |
45 | | - <div class="bg-white dark:bg-slate-900 rounded-3xl shadow-xl overflow-hidden border border-slate-200 dark:border-slate-800"> |
46 | | - <div class="p-8 sm:p-12"> |
47 | | - <header class="mb-8"> |
48 | | - <h1 class="text-4xl sm:text-5xl font-black text-slate-900 dark:text-white mb-2">{{ name }}</h1> |
49 | | - <p class="text-xl sm:text-2xl text-indigo-600 dark:text-indigo-400 font-medium">{{ role }}</p> |
| 32 | + <main class="max-w-5xl mx-auto px-4 py-12"> |
| 33 | + <div class="grid grid-cols-1 lg:grid-cols-3 gap-8"> |
50 | 34 |
|
51 | | - <div class="mt-4 flex flex-wrap gap-3"> |
52 | | - <span class="bg-slate-100 dark:bg-slate-800 px-4 py-1.5 rounded-full text-xs font-bold text-slate-600 dark:text-slate-400 uppercase tracking-wide"> |
53 | | - {{ location }}{% if country %}, {{ country }}{% endif %} |
54 | | - </span> |
| 35 | + <div class="lg:col-span-1 space-y-6"> |
| 36 | + <div class="user-card p-8 rounded-3xl sticky top-24"> |
| 37 | + <div class="mb-6"> |
| 38 | + <h1 class="text-3xl font-black leading-tight">{{ name }}</h1> |
| 39 | + <p class="text-accent font-bold mt-1">{{ role }}</p> |
55 | 40 | </div> |
56 | | - </header> |
57 | 41 |
|
58 | | - <div class="border-t border-slate-100 dark:border-slate-800 pt-8"> |
59 | | - <h3 class="text-xs uppercase tracking-[0.2em] font-black text-slate-400 dark:text-slate-500 mb-4">About Me</h3> |
60 | | - <div class="text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-line text-lg"> |
| 42 | + <div class="space-y-4 text-sm border-t border-[var(--border-color)] pt-6"> |
| 43 | + <div class="flex items-center gap-3"> |
| 44 | + <span class="text-lg">📍</span> |
| 45 | + <span class="text-[var(--text-muted)]">{{ location }}{% if country %}, {{ country }}{% endif %}</span> |
| 46 | + </div> |
| 47 | + |
| 48 | + {% if email %} |
| 49 | + <div class="flex items-center gap-3 group cursor-pointer" onclick="copyToClipboard('{{ email }}', this)"> |
| 50 | + <span class="text-lg">✉️</span> |
| 51 | + <span class="text-[var(--text-muted)] group-hover:text-accent truncate">{{ email }}</span> |
| 52 | + <span class="hidden group-hover:inline text-[10px] bg-accent text-white px-2 py-0.5 rounded">Copy</span> |
| 53 | + </div> |
| 54 | + {% endif %} |
| 55 | + |
| 56 | + {% if website %} |
| 57 | + <div class="flex items-center gap-3"> |
| 58 | + <span class="text-lg">🔗</span> |
| 59 | + <a href="{{ website }}" target="_blank" class="text-accent font-bold hover:underline truncate">{{ website | replace("https://", "") }}</a> |
| 60 | + </div> |
| 61 | + {% endif %} |
| 62 | + </div> |
| 63 | + |
| 64 | + <div class="mt-8 pt-8 border-t border-[var(--border-color)]"> |
| 65 | + <h3 class="text-[10px] font-black uppercase tracking-widest text-[var(--text-muted)] mb-4">Connect</h3> |
| 66 | + <div class="grid grid-cols-2 gap-3"> |
| 67 | + {% if github %} |
| 68 | + <a href="https://github.com/{{ github }}" target="_blank" class="flex items-center justify-center p-3 rounded-xl bg-[var(--bg-footer)] border border-[var(--border-color)] hover:border-accent transition-colors"> |
| 69 | + <span class="font-bold text-xs">GitHub</span> |
| 70 | + </a> |
| 71 | + {% endif %} |
| 72 | + {% if linkedin %} |
| 73 | + <a href="{{ linkedin }}" target="_blank" class="flex items-center justify-center p-3 rounded-xl bg-[var(--bg-footer)] border border-[var(--border-color)] hover:border-accent transition-colors"> |
| 74 | + <span class="font-bold text-xs text-[#0077b5]">LinkedIn</span> |
| 75 | + </a> |
| 76 | + {% endif %} |
| 77 | + {% if twitter %} |
| 78 | + <a href="{{ twitter }}" target="_blank" class="flex items-center justify-center p-3 rounded-xl bg-[var(--bg-footer)] border border-[var(--border-color)] hover:border-accent transition-colors"> |
| 79 | + <span class="font-bold text-xs">Twitter</span> |
| 80 | + </a> |
| 81 | + {% endif %} |
| 82 | + {% if instagram %} |
| 83 | + <a href="{{ instagram }}" target="_blank" class="flex items-center justify-center p-3 rounded-xl bg-[var(--bg-footer)] border border-[var(--border-color)] hover:border-accent transition-colors"> |
| 84 | + <span class="font-bold text-xs text-pink-500">Instagram</span> |
| 85 | + </a> |
| 86 | + {% endif %} |
| 87 | + </div> |
| 88 | + </div> |
| 89 | + </div> |
| 90 | + </div> |
| 91 | + |
| 92 | + <div class="lg:col-span-2 space-y-8"> |
| 93 | + <div class="user-card p-8 sm:p-12 rounded-3xl"> |
| 94 | + <h2 class="text-xs font-black uppercase tracking-[0.3em] text-[var(--text-muted)] mb-6 flex items-center gap-2"> |
| 95 | + <span class="w-8 h-[2px] bg-accent"></span> Professional Bio |
| 96 | + </h2> |
| 97 | + <div class="text-[var(--text-main)] text-lg leading-relaxed whitespace-pre-line"> |
61 | 98 | {{ bio }} |
62 | 99 | </div> |
63 | 100 | </div> |
64 | 101 |
|
65 | | - <div class="mt-10"> |
66 | | - <h3 class="text-xs uppercase tracking-[0.2em] font-black text-slate-400 dark:text-slate-500 mb-4">Tech Stack</h3> |
67 | | - <div class="flex flex-wrap gap-2"> |
| 102 | + <div class="user-card p-8 rounded-3xl"> |
| 103 | + <h2 class="text-xs font-black uppercase tracking-[0.3em] text-[var(--text-muted)] mb-6">Technologies</h2> |
| 104 | + <div class="flex flex-wrap gap-3"> |
68 | 105 | {% set skills = languages.split(' ') %} |
69 | 106 | {% for skill in skills %} |
70 | | - <span class="px-3 py-1.5 bg-slate-900 dark:bg-slate-700 text-white text-xs font-bold rounded-lg uppercase"> |
| 107 | + <span class="px-4 py-2 bg-accent text-white text-xs font-black rounded-xl uppercase tracking-widest shadow-sm"> |
71 | 108 | {{ skill }} |
72 | 109 | </span> |
73 | 110 | {% endfor %} |
74 | 111 | </div> |
75 | 112 | </div> |
76 | | - |
77 | | - <div class="mt-12 pt-8 border-t border-slate-100 dark:border-slate-800 flex flex-col sm:flex-row gap-4"> |
78 | | - <a href="https://github.com/{{ github }}" target="_blank" rel="noopener" class="flex-1 text-center bg-slate-900 dark:bg-white dark:text-slate-900 text-white px-6 py-4 rounded-2xl font-bold hover:opacity-90 transition-opacity"> |
79 | | - GitHub Profile |
80 | | - </a> |
81 | | - <a href="{{ linkedin }}" target="_blank" rel="noopener" class="flex-1 text-center bg-blue-600 text-white px-6 py-4 rounded-2xl font-bold hover:bg-blue-700 transition-colors"> |
82 | | - LinkedIn Profile |
83 | | - </a> |
84 | | - </div> |
85 | 113 | </div> |
| 114 | + |
86 | 115 | </div> |
87 | 116 | </main> |
88 | 117 |
|
89 | 118 | <script src="/assets/js/script.js"></script> |
| 119 | + <script> |
| 120 | + // Specific helper for the bio page email copy |
| 121 | + function copyToClipboard(text, el) { |
| 122 | + navigator.clipboard.writeText(text); |
| 123 | + const span = el.querySelector('span:last-child'); |
| 124 | + span.innerText = 'Copied!'; |
| 125 | + setTimeout(() => span.innerText = 'Copy', 2000); |
| 126 | + } |
| 127 | + </script> |
90 | 128 | </body> |
91 | 129 | </html> |
0 commit comments