diff options
| author | salmonik <raisersoft@proton.me> | 2026-02-07 00:45:28 +0100 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-02-07 00:45:28 +0100 |
| commit | 4ab571290f64527bc321df8f1267376ad9b9043d (patch) | |
| tree | 523538f46d4b435c4e3d69a76724183467ced7ba | |
| parent | smooth scrolling when going to divs (diff) | |
| download | site-4ab571290f64527bc321df8f1267376ad9b9043d.tar.gz site-4ab571290f64527bc321df8f1267376ad9b9043d.zip | |
demake the site, and remove external components
| -rw-r--r-- | contact.html | 49 | ||||
| -rw-r--r-- | index.html | 124 | ||||
| -rw-r--r-- | js/gradient.js | 53 | ||||
| -rw-r--r-- | projects.html | 49 | ||||
| -rw-r--r-- | styles.css | 374 |
5 files changed, 179 insertions, 470 deletions
diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..c95e7a1 --- /dev/null +++ b/contact.html | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | <!-- | ||
| 2 | This File is part of SalmonPage | ||
| 3 | Copyright (C) 2025 Salmon | ||
| 4 | https://codeberg.org/salmonik/site | ||
| 5 | License: GPL-3.0 | ||
| 6 | --> | ||
| 7 | |||
| 8 | <!DOCTYPE html> | ||
| 9 | <html lang="en"> | ||
| 10 | <head> | ||
| 11 | <meta charset="UTF-8"> | ||
| 12 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 13 | <title>Contact - SalmonPage</title> | ||
| 14 | <link rel="stylesheet" href="styles.css"> | ||
| 15 | </head> | ||
| 16 | <body> | ||
| 17 | <header> | ||
| 18 | <div class="container"> | ||
| 19 | <nav> | ||
| 20 | <a href="index.html" class="logo">SalmonPage</a> | ||
| 21 | <div class="nav-links"> | ||
| 22 | <a href="projects.html">Projects</a> | ||
| 23 | <a href="contact.html">Contact</a> | ||
| 24 | </div> | ||
| 25 | </nav> | ||
| 26 | </div> | ||
| 27 | </header> | ||
| 28 | |||
| 29 | <main> | ||
| 30 | <div class="container"> | ||
| 31 | <p>There are many secure ways to contact me:</p> | ||
| 32 | <ul> | ||
| 33 | <li>Email: <a href="mailto:salmonik@tuta.io">salmonik@tuta.io</a></li> | ||
| 34 | <li>GPG Key: <a href="resources/public.gpg" download="salmon_public.asc">Download</a></li> | ||
| 35 | <li>[NOT RECOMMENDED] <a href="https://discord.com/users/1204201769006145556">Discord</a></li> | ||
| 36 | <li><a href="https://t.me/salmonium">Telegram</a></li> | ||
| 37 | <li><a href="https://matrix.to/#/@salmonware:matrix.org">Matrix</a></li> | ||
| 38 | </ul> | ||
| 39 | </div> | ||
| 40 | </main> | ||
| 41 | |||
| 42 | <footer> | ||
| 43 | <div class="container"> | ||
| 44 | <p>Designed & Built by Salmon and AI</p> | ||
| 45 | <p>Hosted under GPL-3.0</p> | ||
| 46 | </div> | ||
| 47 | </footer> | ||
| 48 | </body> | ||
| 49 | </html> | ||
| @@ -1,12 +1,16 @@ | |||
| 1 | <!-- | ||
| 2 | This File is part of SalmonPage | ||
| 3 | Copyright (C) 2025 Salmon | ||
| 4 | https://codeberg.org/salmonik/site | ||
| 5 | License: GPL-3.0 | ||
| 6 | --> | ||
| 7 | |||
| 1 | <!DOCTYPE html> | 8 | <!DOCTYPE html> |
| 2 | <html lang="en"> | 9 | <html lang="en"> |
| 3 | <head> | 10 | <head> |
| 4 | <meta charset="UTF-8"> | 11 | <meta charset="UTF-8"> |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 12 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 6 | <title>SalmonPage</title> | 13 | <title>SalmonPage</title> |
| 7 | <link rel="preconnect" href="https://fonts.googleapis.com"> | ||
| 8 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | ||
| 9 | <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet"> | ||
| 10 | <link rel="stylesheet" href="styles.css"> | 14 | <link rel="stylesheet" href="styles.css"> |
| 11 | </head> | 15 | </head> |
| 12 | <body> | 16 | <body> |
| @@ -15,9 +19,8 @@ | |||
| 15 | <nav> | 19 | <nav> |
| 16 | <a href="#" class="logo">SalmonPage</a> | 20 | <a href="#" class="logo">SalmonPage</a> |
| 17 | <div class="nav-links"> | 21 | <div class="nav-links"> |
| 18 | <a href="#about">About</a> | 22 | <a href="projects.html">Projects</a> |
| 19 | <a href="#projects">Projects</a> | 23 | <a href="contact.html">Contact</a> |
| 20 | <a href="#contact">Contact</a> | ||
| 21 | </div> | 24 | </div> |
| 22 | </nav> | 25 | </nav> |
| 23 | </div> | 26 | </div> |
| @@ -27,109 +30,12 @@ | |||
| 27 | <section class="hero"> | 30 | <section class="hero"> |
| 28 | <div class="container"> | 31 | <div class="container"> |
| 29 | <div class="hero-content"> | 32 | <div class="hero-content"> |
| 30 | <div class="hero-text"> | 33 | <div class="hero-text"> |
| 31 | <div class="greeting">Hi, my name is</div> | 34 | <div class="greeting">Hi, my name is</div> |
| 32 | <h1>Salmon. </h1> | 35 | <h1>Salmon. </h1> |
| 33 | <h2 class="tagline">I build things.</h2> | 36 | <h2 class="tagline">I am an open software enthusiast.</h2> |
| 34 | <p>I mainly do C++ and whatnot.</p> | ||
| 35 | <div class="cta-buttons"> | ||
| 36 | <a href="#contact" class="btn btn-primary">Contacts</a> | ||
| 37 | <a href="#projects" class="btn btn-outline">What did I do</a> | ||
| 38 | </div> | ||
| 39 | </div> | ||
| 40 | <div class="hero-image"> | ||
| 41 | <img src="resources/salmon.png" alt="Salmon" class="hero-img"> | ||
| 42 | </div> | ||
| 43 | </div> | ||
| 44 | </div> | ||
| 45 | </section> | ||
| 46 | |||
| 47 | <section id="about" class="about"> | ||
| 48 | <div class="container"> | ||
| 49 | <h2 class="section-title">Who am I?</h2> | ||
| 50 | <div class="about-content"> | ||
| 51 | <div> | ||
| 52 | <p>I am salmon, mainly known for SalmonPaste. Creator of SalmonPaste and a few discord bots.</p> | ||
| 53 | <p>This is my site, proudly hosted on my cheap ass server.</p> | ||
| 54 | <p>Things I work with:</p> | ||
| 55 | <div class="skills"> | ||
| 56 | <span class="skill-tag">Linux</span> | ||
| 57 | <span class="skill-tag">C++</span> | ||
| 58 | <span class="skill-tag">Python</span> | ||
| 59 | <span class="skill-tag">Retards</span> | ||
| 60 | <span class="skill-tag">More Linux</span> | ||
| 61 | </div> | ||
| 62 | </div> | ||
| 63 | <div class="about-image"> | ||
| 64 | <img src="resources/about.png" alt="About Me" class="about-img"> | ||
| 65 | </div> | ||
| 66 | </div> | ||
| 67 | </div> | ||
| 68 | </section> | ||
| 69 | |||
| 70 | <section id="projects" class="projects"> | ||
| 71 | <div class="container"> | ||
| 72 | <h2 class="section-title">My Projects</h2> | ||
| 73 | <div class="projects-grid"> | ||
| 74 | <!-- Project 1 --> | ||
| 75 | <div class="project-card"> | ||
| 76 | <h3 class="project-title">SalmonPaste</h3> | ||
| 77 | <p class="project-description">Unmaintained TF2 x64 cheat. greatest.</p> | ||
| 78 | <div class="project-links"> | ||
| 79 | <a href="https://discord.gg/hj5vUkUWfU" class="btn btn-outline" target="_blank" | ||
| 80 | rel="noopener noreferrer">Discord Server</a> | ||
| 81 | </div> | ||
| 82 | <div class="project-tags"> | ||
| 83 | <span class="project-tag">C++</span> | ||
| 84 | <span class="project-tag">FWare based</span> | ||
| 85 | <span class="project-tag">Dead</span> | ||
| 86 | </div> | ||
| 87 | </div> | ||
| 88 | |||
| 89 | <!-- Project 2 --> | ||
| 90 | <div class="project-card"> | ||
| 91 | <h3 class="project-title">Discord Bots</h3> | ||
| 92 | <p class="project-description">A few bots I made.</p> | ||
| 93 | <div class="project-links"> | ||
| 94 | <a href="https://codeberg.org/salmonik" class="btn btn-outline" target="_blank" | ||
| 95 | rel="noopener noreferrer">My Codeberg</a> | ||
| 96 | </div> | ||
| 97 | <div class="project-tags"> | ||
| 98 | <span class="project-tag">Python</span> | ||
| 99 | <span class="project-tag">Pycord</span> | ||
| 100 | <span class="project-tag">Open Source</span> | ||
| 101 | </div> | ||
| 102 | </div> | ||
| 103 | |||
| 104 | <!-- Project 3 --> | ||
| 105 | <div class="project-card"> | ||
| 106 | <h3 class="project-title">FileSiever</h3> | ||
| 107 | <p class="project-description">Extremely fast C++ CLI app to filter out lines from files.</p> | ||
| 108 | <div class="project-links"> | ||
| 109 | <a href="https://codeberg.org/salmonik/FileSiever" class="btn btn-outline" target="_blank" | ||
| 110 | rel="noopener noreferrer">Project's Codeberg page</a> | ||
| 111 | </div> | ||
| 112 | <div class="project-tags"> | ||
| 113 | <span class="project-tag">C++</span> | ||
| 114 | <span class="project-tag">Open Source</span> | ||
| 115 | <span class="project-tag">CLI</span> | ||
| 116 | </div> | ||
| 117 | </div> | ||
| 118 | </div> | ||
| 119 | </div> | ||
| 120 | </section> | ||
| 121 | |||
| 122 | <section id="contact" class="contact"> | ||
| 123 | <div class="container"> | ||
| 124 | <div class="contact-content"> | ||
| 125 | <h2 class="section-title">How to contact me</h2> | ||
| 126 | <div class="contact-methods"> | ||
| 127 | <a href="mailto:raisersoft@proton.me" class="btn btn-primary">Email</a> | ||
| 128 | <a href="resources/public.gpg" class="btn btn-primary" download="salmon_public.asc">GPG Key</a> | ||
| 129 | <a href="https://discord.com/users/1204201769006145556" class="btn btn-primary">Discord</a> | ||
| 130 | <a href="https://t.me/salmonium" class="btn btn-primary">Telegram</a> | ||
| 131 | </div> | ||
| 132 | </div> | 37 | </div> |
| 38 | <img src="resources/salmon.png" alt="Salmon" class="hero-img"> | ||
| 133 | </div> | 39 | </div> |
| 134 | </section> | 40 | </section> |
| 135 | </main> | 41 | </main> |
| @@ -137,8 +43,8 @@ | |||
| 137 | <footer> | 43 | <footer> |
| 138 | <div class="container"> | 44 | <div class="container"> |
| 139 | <p>Designed & Built by Salmon and AI</p> | 45 | <p>Designed & Built by Salmon and AI</p> |
| 46 | <p>Hosted under GPL-3.0</p> | ||
| 140 | </div> | 47 | </div> |
| 141 | </footer> | 48 | </footer> |
| 142 | <script src="js/gradient.js"></script> | ||
| 143 | </body> | 49 | </body> |
| 144 | </html> \ No newline at end of file | 50 | </html> \ No newline at end of file |
diff --git a/js/gradient.js b/js/gradient.js deleted file mode 100644 index 28178f7..0000000 --- a/js/gradient.js +++ /dev/null | |||
| @@ -1,53 +0,0 @@ | |||
| 1 | document.addEventListener('DOMContentLoaded', () => { | ||
| 2 | // Get the body element to update the cursor position | ||
| 3 | const body = document.documentElement; | ||
| 4 | let mouseX = 0; | ||
| 5 | let mouseY = 0; | ||
| 6 | let smoothX = 0; | ||
| 7 | let smoothY = 0; | ||
| 8 | |||
| 9 | // Smoothing factor (lower = smoother, higher = snappier) | ||
| 10 | const smoothing = 0.1; | ||
| 11 | |||
| 12 | // Handle mouse movement | ||
| 13 | const handleMouseMove = (e) => { | ||
| 14 | mouseY = e.clientY | ||
| 15 | mouseX = e.clientX | ||
| 16 | |||
| 17 | }; | ||
| 18 | |||
| 19 | // Smooth the cursor movement | ||
| 20 | const updateCursorLight = () => { | ||
| 21 | // Apply smoothing | ||
| 22 | smoothX += (mouseX - smoothX) * smoothing; | ||
| 23 | smoothY += (mouseY - smoothY) * smoothing; | ||
| 24 | |||
| 25 | // Update CSS variables for the cursor position | ||
| 26 | body.style.setProperty('--cursor-x', `${smoothX}px`); | ||
| 27 | body.style.setProperty('--cursor-y', `${smoothY}px`); | ||
| 28 | |||
| 29 | // Continue the animation loop | ||
| 30 | requestAnimationFrame(updateCursorLight); | ||
| 31 | }; | ||
| 32 | |||
| 33 | // Add event listeners | ||
| 34 | window.addEventListener('mousemove', handleMouseMove); | ||
| 35 | |||
| 36 | // Handle touch events for mobile | ||
| 37 | window.addEventListener('touchmove', (e) => { | ||
| 38 | const touch = e.touches[0]; | ||
| 39 | handleMouseMove({ | ||
| 40 | clientX: touch.clientX, | ||
| 41 | clientY: touch.clientY | ||
| 42 | }); | ||
| 43 | }, { passive: false }); | ||
| 44 | |||
| 45 | // Initialize cursor position to center of screen | ||
| 46 | mouseX = window.innerWidth / 2; | ||
| 47 | mouseY = window.innerHeight / 2; | ||
| 48 | smoothX = mouseX; | ||
| 49 | smoothY = mouseY; | ||
| 50 | |||
| 51 | // Start the animation loop | ||
| 52 | updateCursorLight(); | ||
| 53 | }); | ||
diff --git a/projects.html b/projects.html new file mode 100644 index 0000000..1cb2dda --- /dev/null +++ b/projects.html | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | <!-- | ||
| 2 | This File is part of SalmonPage | ||
| 3 | Copyright (C) 2025 Salmon | ||
| 4 | https://codeberg.org/salmonik/site | ||
| 5 | License: GPL-3.0 | ||
| 6 | --> | ||
| 7 | |||
| 8 | <!DOCTYPE html> | ||
| 9 | <html lang="en"> | ||
| 10 | <head> | ||
| 11 | <meta charset="UTF-8"> | ||
| 12 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 13 | <title>Projects - SalmonPage</title> | ||
| 14 | <link rel="stylesheet" href="styles.css"> | ||
| 15 | </head> | ||
| 16 | <body> | ||
| 17 | <header> | ||
| 18 | <div class="container"> | ||
| 19 | <nav> | ||
| 20 | <a href="index.html" class="logo">SalmonPage</a> | ||
| 21 | <div class="nav-links"> | ||
| 22 | <a href="projects.html">Projects</a> | ||
| 23 | <a href="contact.html">Contact</a> | ||
| 24 | </div> | ||
| 25 | </nav> | ||
| 26 | </div> | ||
| 27 | </header> | ||
| 28 | |||
| 29 | <main> | ||
| 30 | <div class="container"> | ||
| 31 | <p>My Codeberg page where it all lives: <a href="https://codeberg.org/salmonik">https://codeberg.org/salmonik</a></p> | ||
| 32 | <p>This site source code is hosted on Codeberg: <a href="https://codeberg.org/salmonik/site">https://codeberg.org/salmonik/site</a></p> | ||
| 33 | <p>suckless st fork: <a href="https://codeberg.org/salmonik/suckless-term">https://codeberg.org/salmonik/suckless-term</a></p> | ||
| 34 | <p>dotfiles: <a href="https://codeberg.org/salmonik/dotfiles">https://codeberg.org/salmonik/dotfiles</a></p> | ||
| 35 | <p>senator sperma discord bot I made for my group chat: <a href="https://codeberg.org/salmonik/senator-sperma">https://codeberg.org/salmonik/senator-sperma</a></p> | ||
| 36 | <p>[dead] overlord discord bot made for my now-dead discord server: <a href="https://codeberg.org/salmonik/overlord">https://codeberg.org/salmonik/overlord</a></p> | ||
| 37 | <p>[dead] user installed bot for discord I made for fun: <a href="https://codeberg.org/salmonik/userbot">https://codeberg.org/salmonik/userbot</a></p> | ||
| 38 | <p>[dead] FileSiever: a bad attempt at grep: <a href="https://codeberg.org/salmonik/FileSiever">https://codeberg.org/salmonik/FileSiever</a></p> | ||
| 39 | </div> | ||
| 40 | </main> | ||
| 41 | |||
| 42 | <footer> | ||
| 43 | <div class="container"> | ||
| 44 | <p>Designed & Built by Salmon and AI</p> | ||
| 45 | <p>Hosted under GPL-3.0</p> | ||
| 46 | </div> | ||
| 47 | </footer> | ||
| 48 | </body> | ||
| 49 | </html> | ||
| @@ -1,64 +1,42 @@ | |||
| 1 | /* | ||
| 2 | This File is part of SalmonPage | ||
| 3 | Copyright (C) 2025 Salmon | ||
| 4 | https://codeberg.org/salmonik/site | ||
| 5 | License: GPL-3.0 | ||
| 6 | */ | ||
| 7 | |||
| 1 | /* Base Styles */ | 8 | /* Base Styles */ |
| 2 | :root { | 9 | :root { |
| 3 | --cursor-x: 50%; | 10 | --text-primary: #e0e0e0; |
| 4 | --cursor-y: 50%; | 11 | --text-secondary: #999999; |
| 5 | --bg: #111827; | 12 | --border: #333333; |
| 6 | --bg-secondary: #1f2937; | 13 | --accent: #3366ff; |
| 7 | --bg-tertiary: #374151; | 14 | --bg-primary: #0a0a0a; |
| 8 | --text: #f9fafb; | 15 | --bg-secondary: #000066; |
| 9 | --text-secondary: #d1d5db; | 16 | --bg-footer: #2e2e2e; |
| 10 | --primary: #3b82f6; | ||
| 11 | --primary-hover: #2563eb; | ||
| 12 | --border: #374151; | ||
| 13 | --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); | ||
| 14 | --white: #ffffff; | ||
| 15 | --black: #111827; | ||
| 16 | } | 17 | } |
| 17 | 18 | ||
| 18 | /* Base background and cursor light effect */ | ||
| 19 | html { | 19 | html { |
| 20 | scroll-behavior: smooth; | 20 | scroll-padding-top: 80px; |
| 21 | scroll-padding-top: 80px; /* Adjust this value based on your header height */ | ||
| 22 | } | 21 | } |
| 23 | 22 | ||
| 24 | html, body { | 23 | html, body { |
| 25 | min-height: 100%; | ||
| 26 | margin: 0; | 24 | margin: 0; |
| 27 | padding: 0; | 25 | padding: 0; |
| 28 | background: #111827; /* Base dark background */ | 26 | background-color: var(--bg-primary); |
| 29 | overflow-x: hidden; | 27 | font-family: Arial, sans-serif; |
| 30 | /* Default cursor is now visible */ | 28 | line-height: 1.4; |
| 31 | } | 29 | color: var(--text-primary); |
| 32 | 30 | min-height: 100vh; | |
| 33 | /* Cursor light effect */ | 31 | display: flex; |
| 34 | body::before { | 32 | flex-direction: column; |
| 35 | content: ''; | ||
| 36 | position: fixed; | ||
| 37 | top: 0; | ||
| 38 | left: 0; | ||
| 39 | width: 100%; | ||
| 40 | height: 100%; | ||
| 41 | background: radial-gradient( | ||
| 42 | circle at var(--cursor-x, 50%) var(--cursor-y, 50%), | ||
| 43 | rgba(31, 41, 55, 0.8) 0%, | ||
| 44 | rgba(17, 24, 39, 0.95) 70%, | ||
| 45 | #111827 100% | ||
| 46 | ); | ||
| 47 | pointer-events: none; | ||
| 48 | z-index: 0; | ||
| 49 | } | ||
| 50 | |||
| 51 | /* Ensure content is above the cursor effect */ | ||
| 52 | body > * { | ||
| 53 | position: relative; | ||
| 54 | z-index: 1; | ||
| 55 | } | 33 | } |
| 56 | 34 | ||
| 57 | body { | 35 | main { |
| 58 | font-family: 'Inter', sans-serif; | 36 | flex: 1; |
| 59 | line-height: 1.6; | 37 | display: flex; |
| 60 | color: var(--text); | 38 | align-items: center; |
| 61 | background-color: var(--bg); | 39 | justify-content: center; |
| 62 | } | 40 | } |
| 63 | 41 | ||
| 64 | .container { | 42 | .container { |
| @@ -69,14 +47,12 @@ body { | |||
| 69 | 47 | ||
| 70 | /* Header */ | 48 | /* Header */ |
| 71 | header { | 49 | header { |
| 72 | background: rgba(17, 24, 39, 0.8); | 50 | background: var(--bg-secondary); |
| 73 | backdrop-filter: blur(8px); | ||
| 74 | box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); | ||
| 75 | position: fixed; | 51 | position: fixed; |
| 76 | width: 100%; | 52 | width: 100%; |
| 77 | top: 0; | 53 | top: 0; |
| 78 | z-index: 100; | 54 | z-index: 1000; |
| 79 | padding: 1.5rem 0; | 55 | padding: 1rem 0; |
| 80 | border-bottom: 1px solid var(--border); | 56 | border-bottom: 1px solid var(--border); |
| 81 | } | 57 | } |
| 82 | 58 | ||
| @@ -89,25 +65,23 @@ nav { | |||
| 89 | .logo { | 65 | .logo { |
| 90 | font-size: 1.5rem; | 66 | font-size: 1.5rem; |
| 91 | font-weight: 700; | 67 | font-weight: 700; |
| 92 | color: var(--primary); | 68 | color: var(--text-primary); |
| 93 | text-decoration: none; | 69 | text-decoration: none; |
| 94 | } | 70 | } |
| 95 | 71 | ||
| 96 | .nav-links a { | 72 | .nav-links a { |
| 97 | color: var(--text); | 73 | color: var(--text-primary); |
| 98 | text-decoration: none; | 74 | text-decoration: none; |
| 99 | margin-left: 2rem; | 75 | margin-left: 2rem; |
| 100 | font-weight: 500; | 76 | font-weight: 500; |
| 101 | transition: color 0.3s ease; | ||
| 102 | } | 77 | } |
| 103 | 78 | ||
| 104 | .nav-links a:hover { | 79 | .nav-links a:hover { |
| 105 | color: var(--primary); | 80 | color: var(--accent); |
| 106 | } | 81 | } |
| 107 | 82 | ||
| 108 | /* Hero Section */ | 83 | /* Hero Section */ |
| 109 | .hero { | 84 | .hero { |
| 110 | min-height: 100vh; | ||
| 111 | display: flex; | 85 | display: flex; |
| 112 | align-items: center; | 86 | align-items: center; |
| 113 | padding: 8rem 0 4rem; | 87 | padding: 8rem 0 4rem; |
| @@ -119,7 +93,7 @@ nav { | |||
| 119 | .hero-content { | 93 | .hero-content { |
| 120 | display: grid; | 94 | display: grid; |
| 121 | grid-template-columns: 1fr 1fr; | 95 | grid-template-columns: 1fr 1fr; |
| 122 | gap: 4rem; | 96 | gap: 2rem; |
| 123 | align-items: center; | 97 | align-items: center; |
| 124 | width: 100%; | 98 | width: 100%; |
| 125 | } | 99 | } |
| @@ -128,292 +102,76 @@ nav { | |||
| 128 | max-width: 600px; | 102 | max-width: 600px; |
| 129 | } | 103 | } |
| 130 | 104 | ||
| 131 | .hero-image { | 105 | .hero-img { |
| 132 | display: flex; | 106 | max-width: 100%; |
| 133 | justify-content: center; | ||
| 134 | align-items: center; | ||
| 135 | } | ||
| 136 | |||
| 137 | .hero-image .hero-img { | ||
| 138 | width: 100%; | ||
| 139 | max-width: 300px; | ||
| 140 | height: auto; | 107 | height: auto; |
| 141 | border-radius: 1rem; | 108 | border-radius: 0.5rem; |
| 142 | border: none; | ||
| 143 | box-shadow: none; | ||
| 144 | } | 109 | } |
| 145 | 110 | ||
| 146 | .greeting { | 111 | .greeting { |
| 147 | font-size: 1.25rem; | 112 | font-size: 1.25rem; |
| 148 | color: var(--primary); | 113 | color: var(--accent); |
| 149 | margin-bottom: 1rem; | 114 | margin-bottom: 1rem; |
| 150 | } | 115 | } |
| 151 | 116 | ||
| 152 | h1 { | 117 | main h1 { |
| 153 | font-size: 3rem; | 118 | font-size: 3rem; |
| 154 | font-weight: 800; | 119 | font-weight: 800; |
| 155 | line-height: 1.2; | 120 | line-height: 1.2; |
| 156 | margin-bottom: 1.5rem; | 121 | margin: 0 0 1.5rem 0; |
| 157 | background: linear-gradient(90deg, #60a5fa, #3b82f6); | 122 | color: var(--text-primary); |
| 158 | -webkit-background-clip: text; | ||
| 159 | -webkit-text-fill-color: transparent; | ||
| 160 | background-clip: text; | ||
| 161 | color: transparent; | ||
| 162 | } | ||
| 163 | |||
| 164 | .tagline { | ||
| 165 | font-size: 1.25rem; | ||
| 166 | color: var(--text-secondary); | ||
| 167 | margin-bottom: 2rem; | ||
| 168 | max-width: 600px; | ||
| 169 | } | ||
| 170 | |||
| 171 | /* Buttons */ | ||
| 172 | .btn { | ||
| 173 | display: inline-block; | ||
| 174 | padding: 0.75rem 1.5rem; | ||
| 175 | border-radius: 0.375rem; | ||
| 176 | font-weight: 500; | ||
| 177 | text-decoration: none; | ||
| 178 | transition: all 0.3s ease; | ||
| 179 | margin-right: 1rem; | ||
| 180 | } | ||
| 181 | |||
| 182 | .btn-primary { | ||
| 183 | background-color: var(--primary); | ||
| 184 | color: white; | ||
| 185 | border: 2px solid var(--primary); | ||
| 186 | } | ||
| 187 | |||
| 188 | .btn-primary:hover { | ||
| 189 | background-color: var(--primary-hover); | ||
| 190 | border-color: var(--primary-hover); | ||
| 191 | } | ||
| 192 | |||
| 193 | .btn-outline { | ||
| 194 | background-color: transparent; | ||
| 195 | color: var(--primary); | ||
| 196 | border: 2px solid var(--primary); | ||
| 197 | } | ||
| 198 | |||
| 199 | .btn-outline:hover { | ||
| 200 | background-color: rgba(59, 130, 246, 0.1); | ||
| 201 | color: var(--primary-hover); | ||
| 202 | border-color: var(--primary-hover); | ||
| 203 | } | ||
| 204 | |||
| 205 | /* Sections */ | ||
| 206 | section { | ||
| 207 | padding: 6rem 0; | ||
| 208 | background-color: var(--bg); | ||
| 209 | } | ||
| 210 | |||
| 211 | .section-title { | ||
| 212 | text-align: center; | 123 | text-align: center; |
| 213 | font-size: 2.25rem; | ||
| 214 | margin-bottom: 3rem; | ||
| 215 | } | 124 | } |
| 216 | 125 | ||
| 217 | /* About Section */ | 126 | @media (max-width: 768px) { |
| 218 | .about { | 127 | main h1 { |
| 219 | padding: 6rem 0; | 128 | font-size: 2.25rem; |
| 220 | background: transparent; | 129 | } |
| 221 | position: relative; | ||
| 222 | z-index: 1; | ||
| 223 | } | ||
| 224 | |||
| 225 | .about-content { | ||
| 226 | display: grid; | ||
| 227 | grid-template-columns: 1fr 1fr; | ||
| 228 | gap: 4rem; | ||
| 229 | align-items: center; | ||
| 230 | } | ||
| 231 | |||
| 232 | .about-image { | ||
| 233 | display: flex; | ||
| 234 | justify-content: center; | ||
| 235 | align-items: center; | ||
| 236 | } | ||
| 237 | |||
| 238 | .about-img { | ||
| 239 | max-width: 100%; | ||
| 240 | height: auto; | ||
| 241 | border-radius: 0.5rem; | ||
| 242 | box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | ||
| 243 | } | ||
| 244 | |||
| 245 | .skills { | ||
| 246 | display: flex; | ||
| 247 | flex-wrap: wrap; | ||
| 248 | gap: 0.75rem; | ||
| 249 | margin-top: 1.5rem; | ||
| 250 | } | ||
| 251 | |||
| 252 | .skill-tag { | ||
| 253 | background-color: rgba(59, 130, 246, 0.1); | ||
| 254 | color: #60a5fa; | ||
| 255 | padding: 0.375rem 0.75rem; | ||
| 256 | border-radius: 9999px; | ||
| 257 | font-size: 0.875rem; | ||
| 258 | border: 1px solid rgba(59, 130, 246, 0.2); | ||
| 259 | } | ||
| 260 | |||
| 261 | /* Projects Section */ | ||
| 262 | .projects { | ||
| 263 | background: transparent; | ||
| 264 | padding: 6rem 0; | ||
| 265 | } | ||
| 266 | |||
| 267 | .projects-grid { | ||
| 268 | display: grid; | ||
| 269 | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); | ||
| 270 | gap: 2rem; | ||
| 271 | margin-top: 2rem; | ||
| 272 | } | ||
| 273 | |||
| 274 | .project-card { | ||
| 275 | background: var(--bg-secondary); | ||
| 276 | border-radius: 0.5rem; | ||
| 277 | padding: 1.5rem; | ||
| 278 | transition: transform 0.3s ease, box-shadow 0.3s ease; | ||
| 279 | border: 1px solid var(--border); | ||
| 280 | } | ||
| 281 | |||
| 282 | .project-card:hover { | ||
| 283 | transform: translateY(-5px); | ||
| 284 | box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2); | ||
| 285 | } | 130 | } |
| 286 | 131 | ||
| 287 | .project-title { | 132 | .tagline { |
| 288 | font-size: 1.25rem; | 133 | font-size: 1.25rem; |
| 289 | font-weight: 600; | ||
| 290 | color: var(--text); | ||
| 291 | margin-bottom: 0.75rem; | ||
| 292 | } | ||
| 293 | |||
| 294 | .project-description { | ||
| 295 | color: var(--text-secondary); | 134 | color: var(--text-secondary); |
| 296 | margin-bottom: 1.25rem; | 135 | margin-bottom: 2rem; |
| 297 | line-height: 1.6; | 136 | max-width: 600px; |
| 298 | } | ||
| 299 | |||
| 300 | .project-links { | ||
| 301 | margin-bottom: 1rem; | ||
| 302 | } | ||
| 303 | |||
| 304 | .project-tags { | ||
| 305 | display: flex; | ||
| 306 | flex-wrap: wrap; | ||
| 307 | gap: 0.5rem; | ||
| 308 | margin-top: 1rem; | ||
| 309 | } | ||
| 310 | |||
| 311 | .project-tag { | ||
| 312 | background: rgba(96, 165, 250, 0.1); | ||
| 313 | color: #60a5fa; | ||
| 314 | padding: 0.25rem 0.75rem; | ||
| 315 | border-radius: 9999px; | ||
| 316 | font-size: 0.75rem; | ||
| 317 | font-weight: 500; | ||
| 318 | } | ||
| 319 | |||
| 320 | /* Contact Section */ | ||
| 321 | .contact { | ||
| 322 | background-color: var(--bg-secondary); | ||
| 323 | text-align: center; | ||
| 324 | border-radius: 1rem; | ||
| 325 | margin: 2rem auto; | ||
| 326 | max-width: 1400px; | ||
| 327 | box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); | ||
| 328 | } | ||
| 329 | |||
| 330 | .contact-content { | ||
| 331 | max-width: 1400px; | ||
| 332 | margin: 0 auto; | ||
| 333 | text-align: center; | ||
| 334 | } | 137 | } |
| 335 | 138 | ||
| 336 | .contact-methods { | ||
| 337 | display: flex; | ||
| 338 | flex-wrap: wrap; | ||
| 339 | gap: 15px; | ||
| 340 | justify-content: center; | ||
| 341 | margin: 20px 0; | ||
| 342 | padding: 0 20px; | ||
| 343 | } | ||
| 344 | 139 | ||
| 345 | .contact-methods .btn { | ||
| 346 | margin: 5px; | ||
| 347 | flex: 0 0 auto; | ||
| 348 | } | ||
| 349 | 140 | ||
| 350 | /* Footer */ | 141 | /* Footer */ |
| 351 | footer { | 142 | footer { |
| 352 | text-align: center; | 143 | text-align: center; |
| 353 | padding: 2rem 0; | 144 | padding: 0.1rem 0; |
| 354 | color: var(--text-secondary); | 145 | color: var(--text-secondary); |
| 355 | font-size: 0.875rem; | 146 | font-size: 0.875rem; |
| 356 | background-color: var(--bg-secondary); | 147 | background-color: var(--bg-footer); |
| 357 | border-top: 1px solid var(--border); | 148 | border-top: 1px solid var(--border); |
| 358 | } | 149 | } |
| 359 | 150 | ||
| 360 | /* Responsive */ | ||
| 361 | @media (max-width: 1024px) { | ||
| 362 | .hero-content { | ||
| 363 | grid-template-columns: 1fr; | ||
| 364 | gap: 3rem; | ||
| 365 | text-align: center; | ||
| 366 | } | ||
| 367 | 151 | ||
| 368 | .hero-text { | ||
| 369 | margin: 0 auto; | ||
| 370 | } | ||
| 371 | 152 | ||
| 372 | .cta-buttons { | 153 | |
| 373 | justify-content: center; | 154 | main p { |
| 374 | } | 155 | margin-bottom: 1rem; |
| 156 | line-height: 1.6; | ||
| 375 | } | 157 | } |
| 376 | 158 | ||
| 377 | @media (max-width: 768px) { | 159 | main ul { |
| 378 | .nav-links { | 160 | margin-bottom: 2rem; |
| 379 | display: none; | 161 | padding-left: 2rem; |
| 380 | } | ||
| 381 | |||
| 382 | h1 { | ||
| 383 | font-size: 2.25rem; | ||
| 384 | } | ||
| 385 | |||
| 386 | .about-content { | ||
| 387 | grid-template-columns: 1fr; | ||
| 388 | gap: 2rem; | ||
| 389 | text-align: center; | ||
| 390 | } | ||
| 391 | |||
| 392 | .skills { | ||
| 393 | justify-content: center; | ||
| 394 | } | ||
| 395 | |||
| 396 | .about-img { | ||
| 397 | max-width: 80%; | ||
| 398 | margin: 0 auto; | ||
| 399 | } | ||
| 400 | } | 162 | } |
| 401 | 163 | ||
| 402 | /* Hover Effects */ | 164 | main li { |
| 403 | .btn-primary:hover { | 165 | margin-bottom: 0.5rem; |
| 404 | transform: translateY(-2px); | 166 | line-height: 1.6; |
| 405 | box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2); | ||
| 406 | } | 167 | } |
| 407 | 168 | ||
| 408 | .btn-outline:hover { | 169 | main a { |
| 409 | transform: translateY(-2px); | 170 | color: #718096; |
| 410 | box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.2); | 171 | text-decoration: underline; |
| 411 | } | 172 | } |
| 412 | 173 | ||
| 413 | /* Image Placeholder */ | 174 | main a:hover { |
| 414 | .image-placeholder { | 175 | color: #a0aec0; |
| 415 | background-color: var(--bg-tertiary); | ||
| 416 | height: 300px; | ||
| 417 | border-radius: 0.5rem; | ||
| 418 | border: 1px solid var(--border); | ||
| 419 | } | 176 | } |
| 177 | |||
