Mooshie's picture
increase professionalism and interactivity
ec87762 verified
class CustomContact extends HTMLElement {
connectedCallback() {
this.attachShadow({ mode: 'open' });
this.shadowRoot.innerHTML = `
<style>
:host {
display: block;
padding: 6rem 1rem 10rem 1rem;
text-align: center;
border-top: 1px solid #262626;
background: radial-gradient(circle at top, rgba(234, 179, 8, 0.05), transparent 70%);
}
h2 {
font-size: 2.5rem;
font-weight: 700;
color: white;
margin-bottom: 1rem;
}
p {
color: #a1a1aa;
max-width: 500px;
margin: 0 auto 2.5rem auto;
font-size: 1.125rem;
}
.email-btn {
display: inline-flex;
align-items: center;
gap: 0.75rem;
padding: 1rem 2rem;
background: transparent;
border: 2px solid #EAB308;
color: #EAB308;
font-family: 'Fira Code', monospace;
font-size: 1rem;
font-weight: 600;
border-radius: 4px;
text-decoration: none;
transition: all 0.3s ease;
margin-bottom: 3rem;
}
.email-btn {
position: relative;
overflow: hidden;
}
.email-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
transition: left 0.5s ease;
}
.email-btn:hover::before {
left: 100%;
}
.email-btn:hover {
background: rgba(234, 179, 8, 0.1);
transform: translateY(-3px);
box-shadow: 0 10px 20px rgba(234, 179, 8, 0.2);
}
.social-links {
display: flex;
justify-content: center;
gap: 2rem;
}
.social-link {
color: #52525b;
transition: all 0.3s ease;
}
.social-link {
position: relative;
}
.social-link::after {
content: '';
position: absolute;
bottom: -5px;
left: 50%;
width: 0;
height: 2px;
background: #EAB308;
transition: all 0.3s ease;
transform: translateX(-50%);
}
.social-link:hover::after {
width: 100%;
}
.social-link:hover {
color: #EAB308;
transform: translateY(-3px);
}
.footer-note {
margin-top: 4rem;
color: #52525b;
font-size: 0.875rem;
font-family: 'Fira Code', monospace;
}
</style>
<section id="contact">
<h2>Get In Touch</h2>
<p>
Let's work together on your next project. Whether you have a question or just want to say hi, I'll try my best to get back to you!
</p>
<a href="mailto:hello@kentvuong.com" class="email-btn">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
Say Hello
</a>
<div class="social-links">
<a href="#" class="social-link" aria-label="GitHub">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
</a>
<a href="#" class="social-link" aria-label="LinkedIn">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
</a>
<a href="#" class="social-link" aria-label="Twitter">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg>
</a>
</div>
<div class="footer-note">
<p>Designed & Built by Kent Vuong</p>
</div>
</section>
`;
}
}
customElements.define('custom-contact', CustomContact);