/* Google Font */
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,500&display=swap');
:root{
--forest: #1F4A3D;
--forest-deep: #123128;
--forest-soft: #E7F0EA;
--terracotta: #D9673A;
--terracotta-deep:#B94F27;
--terracotta-soft:#FBE7DA;
--gold: #C9982F;
--gold-soft: #F6E9CC;
--indigo: #2E6C8E;
--indigo-soft: #DDEAF1;
--rust: #A34632;
--cream: #FAF6EC;
--paper: #FFFFFF;
--ink: #201C16;
--ink-soft: #5B5548;
--line: #E7DECB;
--font: "Poppins", "Poppins Fallback", -apple-system, Segoe UI, sans-serif;
--container: 1240px;
--gap: clamp(1.5rem, 3vw, 3.25rem);
--shadow-soft: 0 20px 45px -25px rgba(18,49,40,.35);
--shadow-card: 0 14px 30px -18px rgba(32,28,22,.28);
}
*{ box-sizing: border-box; }
.btn{
display: inline-flex; align-items: center; gap: .5rem;
font-family: var(--font); font-weight: 600; font-size: .95rem;
padding: .85rem 1.6rem; border-radius: 999px;
border: 1.5px solid transparent; cursor: pointer;
transition: transform .18s ease, box-shadow .18s ease, background-color .18s ease, color .18s ease, border-color .18s ease;
white-space: nowrap; text-decoration:none;
}
.btn-primary{ background: var(--terracotta); color: #fff; box-shadow: 0 10px 24px -12px rgba(217,103,58,.65); }
.btn-primary:hover{ background: var(--terracotta-deep); transform: translateY(-2px); }
.btn-ghost{ background: transparent; color: var(--forest); border-color: var(--line); }
.btn-ghost:hover{ border-color: var(--forest); background: var(--forest-soft); }
.btn-sm{ padding: .55rem 1.15rem; font-size: .85rem; }
/* ---------------- Top utility bar ---------------- */
.topbar{ background: var(--forest-deep); color: rgba(255,255,255,.82); font-size: .82rem; }
.topbar-inner{
display: flex; align-items: center; justify-content: space-between;
gap: 1rem; padding: .5rem 1.5rem; max-width: var(--container); margin: 0 auto;
}
.topbar-info{ display: flex; align-items: center; gap: 1.4rem; flex-wrap: wrap; }
.topbar-info a{ display: inline-flex; align-items: center; gap: .4rem; transition: color .15s ease; }
.topbar-info a:hover{ color: var(--gold); }
.topbar-social{ display: flex; align-items: center; gap: .85rem; }
.topbar-social a{ display: grid; place-items: center; opacity: .85; transition: opacity .15s ease, transform .15s ease; }
.topbar-social a:hover{ opacity: 1; transform: translateY(-1px); }
/* ---------------- Header ---------------- */
.site-header{
position: sticky; top: 0; z-index: 60;
background: rgba(250,246,236,.92);
backdrop-filter: blur(10px);
border-bottom: 1px solid transparent;
transition: box-shadow .25s ease, border-color .25s ease, background-color .25s ease;
}
.site-header.is-scrolled{
box-shadow: 0 10px 30px -20px rgba(18,49,40,.55);
border-color: var(--line);
background: rgba(250,246,236,.98);
}
.header-inner{
display: flex; align-items: center; justify-content: space-between;
gap: 1.5rem; padding: .85rem 1.5rem; max-width: var(--container); margin: 0 auto;
}
.brand{ display: flex; align-items: center; gap: .75rem; }
.brand-mark{ width: 48px; height: 48px; border-radius: 10%; object-fit: cover; border: 2px solid var(--gold); }
.brand-text{ display: flex; flex-direction: column; line-height: 1.25; }
.brand-text strong{ font-size: 1.02rem; font-weight: 700; color: var(--forest-deep); }
.brand-text em{ font-style: normal; font-size: .74rem; color: var(--ink-soft); }
.nav-toggle{ display: none; flex-direction: column; justify-content: center; gap: 5px; width: 42px; height: 42px; border: 1px solid var(--line); border-radius: 10px; background: var(--paper); cursor: pointer; }
.nav-toggle span{ width: 20px; height: 2px; background: var(--forest-deep); margin: 0 auto; border-radius: 2px; transition: transform .2s ease, opacity .2s ease; }
.main-nav{ display: flex; align-items: center; gap: 2rem; }
.main-nav > ul{ display: flex; align-items: center; gap: 1.7rem; }
.main-nav > ul > li{ position: relative; }
.main-nav > ul > li > a{
font-size: .93rem; font-weight: 500; color: var(--ink); padding: .4rem 0;
border-bottom: 2px solid transparent; transition: color .15s ease, border-color .15s ease;
}
.main-nav > ul > li > a:hover{ color: var(--terracotta); }
.has-sub > a::after{ content:""; display: inline-block; width: 6px; height: 6px; border-right: 1.6px solid currentColor; border-bottom: 1.6px solid currentColor; transform: rotate(45deg); margin-left: 6px; position: relative; top: -2px; }
.sub-nav{
position: absolute; top: calc(100% + 14px); left: -1rem; min-width: 230px;
background: var(--paper); border-radius: 14px; box-shadow: var(--shadow-soft);
padding: .6rem; opacity: 0; visibility: hidden; transform: translateY(8px);
transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
border: 1px solid var(--line);
}
.has-sub:hover .sub-nav, .has-sub:focus-within .sub-nav{ opacity: 1; visibility: visible; transform: translateY(0); }
.sub-nav li a{ display: block; padding: .55rem .75rem; border-radius: 8px; font-size: .88rem; color: var(--ink-soft); transition: background .15s ease, color .15s ease; }
.sub-nav li a:hover{ background: var(--forest-soft); color: var(--forest-deep); }
.header-cta{ display: flex; align-items: center; gap: .9rem; }
@media (max-width: 900px){
.topbar-info span.topbar-hide-m{ display: none; }
.nav-toggle{ display: flex; }
.header-cta .btn-ghost{ display: none; }
.main-nav{
position: fixed; inset: 0 0 0 auto; width: min(340px, 86vw); height: 100vh;
background: var(--paper); flex-direction: column; align-items: stretch;
padding: 5.5rem 1.5rem 2rem; gap: 1.5rem; transform: translateX(100%);
transition: transform .3s ease; box-shadow: -20px 0 50px -20px rgba(0,0,0,.35);
overflow-y: auto;
}
.main-nav.open{ transform: translateX(0); }
.main-nav > ul{ flex-direction: column; align-items: flex-start; gap: .3rem; width: 100%; }
.main-nav > ul > li{ width: 100%; }
.main-nav > ul > li > a{ display: block; padding: .75rem 0; border-bottom: 1px solid var(--line); width: 100%; }
.sub-nav{ position: static; opacity: 1; visibility: visible; transform: none; box-shadow: none; border: none; display: none; padding-left: .5rem; }
.has-sub.open .sub-nav{ display: block; }
.header-cta .btn-primary{ width: 100%; justify-content: center; }
}
/* ---------------- Footer ---------------- */
.site-footer{ background: var(--forest-deep); color: rgba(255,255,255,.78); }
.footer-inner{ max-width: var(--container); margin: 0 auto; padding: clamp(3rem, 6vw, 4.5rem) 1.5rem 2.5rem; display: grid; grid-template-columns: 1.3fr 1fr 1fr 1.1fr; gap: 2.5rem; }
.footer-mark{ width: 52px; height: 52px; border-radius: 10%; margin-bottom: 1rem; border: 2px solid var(--gold); }
.footer-brand p{ color: rgba(255,255,255,.68); font-size: .88rem; max-width: 34ch; }
.social-links{ display: flex; gap: .7rem; margin-top: 1rem; }
.social-links a{ width: 36px; height: 36px; border-radius: 50%; background: rgba(255,255,255,.08); display: grid; place-items: center; transition: background .18s ease, transform .18s ease; }
.social-fb{ color: #1877F2; }
.social-ig{ color: #E1306C; }
.social-x{ color: #000000; }
.social-yt{ color: #FF0000; }
.social-li{ color: #0A66C2; }
.social-links a:hover{ background: rgba(255,255,255,.14); transform: translateY(-2px); }
.footer-col h4{ color: #db9921; font-size: 1rem; margin-bottom: 1.1rem; }
.footer-col p{ font-size: .87rem; color: rgba(255,255,255,.68); }
.footer-col a{ transition: color .15s ease; }
.footer-col a:hover{ color: var(--gold); }
.footer-links li{ margin-bottom: .6rem; font-size: .88rem; }
.footer-bottom{ border-top: 1px solid rgba(255,255,255,.12); }
.footer-bottom p{ max-width: var(--container); margin: 0 auto; padding: 1.2rem 1.5rem; font-size: .8rem; color: rgba(255,255,255,.55); text-align: center; }
@media (max-width: 900px){ .footer-inner{ grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px){ .footer-inner{ grid-template-columns: 1fr; } }
/* ---------------- Floating actions ---------------- */
.fab-stack{ position: fixed; right: 1.4rem; bottom: 1.4rem; z-index: 70; display: flex; flex-direction: column; gap: .8rem; align-items: flex-end; }
.fab{
width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
box-shadow: 0 14px 28px -12px rgba(18,49,40,.55); border: none; cursor: pointer;
opacity: 0; transform: translateY(14px) scale(.9); pointer-events: none;
transition: opacity .25s ease, transform .25s ease, background .18s ease;
}
.fab.is-visible{ opacity: 1; transform: translateY(0) scale(1); pointer-events: auto; }
.fab-whatsapp{ background: #29A71A; color: #fff; opacity: 1; transform: none; pointer-events: auto; }
.fab-whatsapp:hover{ background: #228c15; }
.back-to-top{ background: var(--forest); color: #fff; }
.back-to-top:hover{ background: var(--forest-deep); }
const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// ---------- Mobile nav toggle ----------
const navToggle = document.getElementById('navToggle');
const mainNav = document.getElementById('mainNav');
navToggle.addEventListener('click', () => {
const isOpen = mainNav.classList.toggle('open');
navToggle.setAttribute('aria-expanded', isOpen);
});
document.querySelectorAll('.has-sub > a').forEach((link) => {
link.addEventListener('click', (e) => {
if (window.innerWidth > 900) return;
const parent = link.parentElement;
const alreadyOpen = parent.classList.contains('open');
if (!alreadyOpen) {
e.preventDefault();
document.querySelectorAll('.has-sub.open').forEach((li) => li.classList.remove('open'));
parent.classList.add('open');
}
});
});
document.querySelectorAll('.main-nav a:not(.has-sub > a)').forEach((link) => {
link.addEventListener('click', () => {
mainNav.classList.remove('open');
navToggle.setAttribute('aria-expanded', false);
});
});
// ---------- Footer year ----------
const yearEl = document.getElementById('year');
if (yearEl) yearEl.textContent = new Date().getFullYear();
// ---------- Sticky header shadow on scroll ----------
(function headerShadow() {
const header = document.querySelector('.site-header');
if (!header) return;
function update() {
header.classList.toggle('is-scrolled', window.scrollY > 8);
}
update();
window.addEventListener('scroll', update, { passive: true });
})();
// ---------- Back-to-top button ----------
(function backToTop() {
const stack = document.querySelector('.fab-stack');
if (!stack) return;
const btn = document.createElement('button');
btn.type = 'button';
btn.className = 'fab back-to-top';
btn.setAttribute('aria-label', 'Back to top');
btn.innerHTML =
'';
stack.appendChild(btn);
function toggleVisibility() {
btn.classList.toggle('is-visible', window.scrollY > 480);
}
toggleVisibility();
window.addEventListener('scroll', toggleVisibility, { passive: true });
btn.addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: reduceMotion ? 'auto' : 'smooth' });
});
})();