Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/luigitemu/pikante-landing/llms.txt

Use this file to discover all available pages before exploring further.

The Nav component is the persistent top bar of the Pikanté landing page. It stays anchored to the viewport at all times, provides quick-scroll anchor links to every major section, and lights up the correct link as the user scrolls — all without any JavaScript framework dependency.

Behavior overview

Fixed & blurred

Rendered with position: fixed; top: 0 and a backdrop-filter: blur(8px) so content scrolls beneath it without visual noise.

Gradient fade

A linear-gradient(180deg, rgba(0,0,0,.85), rgba(0,0,0,0)) background dissolves into the page, keeping the bar visible against both dark and light content.

Scroll-spy

An IntersectionObserver in index.astro watches the four page sections and toggles an .active class on the matching anchor link.

Responsive

.nav-links is hidden below 760 px via a media query; only the logo and social icons remain on mobile.
The logo is rendered with Astro’s built-in <Image> component, which optimises and generates the correct srcset at build time. Clicking it smoothly scrolls back to the very top of the page.
import { Image } from 'astro:assets';
import LogoWordmark from '../images/logo_no_background.png';

<a
  href="#"
  class="nav-logo"
  aria-label="PIKANTÉ"
  onclick="event.preventDefault(); window.scrollTo({ top: 0, behavior: 'smooth' });"
>
  <Image src={LogoWordmark} alt="PIKANTÉ" width={2813} height={2815} loading="eager" />
</a>
loading="eager" is intentional — the logo is above the fold and must paint immediately. Four anchor links map to the page’s main sections:
LabelTarget
Sabores#sabores
Preparar#preparar
Vida PIKANTÉ#vida
FAQ#faq

Social icons

Three social icons sit in .nav-socials on the right side of the bar. All links open in a new tab with rel="noopener noreferrer" for security.
PlatformURL
Instagramhttps://www.instagram.com/pikantehn?igsh=bnczZDhkMzZnNWxm&utm_source=qr
TikTokhttps://www.tiktok.com/@pikantehn?_r=1&_t=ZS-96VGsdTFTAz
WhatsApphttps://wa.me/+50497864648
Each icon is an inline Bootstrap SVG (18 × 18) with aria-label for screen-reader accessibility.

Scroll-spy

The scroll-spy logic lives in the <script> block of src/pages/index.astro. It creates a single IntersectionObserver that watches each of the four sections and toggles the .active CSS class on whichever nav link matches the currently visible section.
// Nav scroll-spy
const sections = ['sabores', 'preparar', 'vida', 'faq'];
const navLinks = document.querySelectorAll('.nav-links a');

const sectionIO = new IntersectionObserver((entries) => {
  entries.forEach(e => {
    if (e.isIntersecting) {
      const id = e.target.id;
      navLinks.forEach(a => {
        a.classList.toggle('active', a.getAttribute('href') === `#${id}`);
      });
    }
  });
}, { rootMargin: '-40% 0px -55% 0px' });

sections.forEach(id => {
  const el = document.getElementById(id);
  if (el) sectionIO.observe(el);
});
The rootMargin: '-40% 0px -55% 0px' shrinks the effective intersection zone to a horizontal band in the middle of the viewport, so only the section the user is most “inside” becomes active.

CSS

Relevant rules from src/styles/global.css:
/* ============ NAV ============ */
nav.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 100;
  padding: 18px var(--gutter);
  display: flex; align-items: center; justify-content: space-between;
  background: linear-gradient(180deg, rgba(0,0,0,.85), rgba(0,0,0,0));
  backdrop-filter: blur(8px);
}

.nav-logo { display: flex; align-items: center; gap: 10px; }
.nav-logo img { height: 60px; width: auto; }

.nav-links { display: flex; gap: 32px; }
.nav-links a {
  font-size: 13px; letter-spacing: .06em; color: var(--text-2);
  transition: color var(--t-fast);
}
.nav-links a:hover  { color: var(--white); }

.nav-socials { display: flex; align-items: center; gap: 18px; }
.nav-socials a {
  color: white; display: flex; align-items: center;
  transition: color var(--t-fast);
}
.nav-socials a:hover { color: var(--white); }

@media (max-width: 760px) {
  .nav-links { display: none; } /* hidden on mobile */
}

/* defined at end of global.css, after all other nav rules */
.nav-links a.active { color: var(--accent); } /* scroll-spy highlight */
--accent resolves to var(--fire)oklch(65% 0.21 35deg), a vibrant fire orange-red. Active links inherit this colour automatically without any JavaScript DOM manipulation beyond the class toggle.

Full component source

---
import { Image } from 'astro:assets';
import LogoWordmark from '../images/logo_no_background.png';
---

<nav class="nav">
  <a href="#" class="nav-logo" aria-label="PIKANTÉ" onclick="event.preventDefault(); window.scrollTo({ top: 0, behavior: 'smooth' });">
    <Image src={LogoWordmark} alt="PIKANTÉ" width={2813} height={2815} loading="eager" />
  </a>
  <div class="nav-links">
    <a href="#sabores">Sabores</a>
    <a href="#preparar">Preparar</a>
    <a href="#vida">Vida PIKANTÉ</a>
    <a href="#faq">FAQ</a>
  </div>
  <div class="nav-socials">
    <a href="https://www.instagram.com/pikantehn?igsh=bnczZDhkMzZnNWxm&utm_source=qr" aria-label="Instagram" target="_blank" rel="noopener noreferrer">
      <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
        <path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.9 3.9 0 0 0-1.417.923A3.9 3.9 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.9 3.9 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.9 3.9 0 0 0-.923-1.417A3.9 3.9 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599s.453.546.598.92c.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.5 2.5 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.5 2.5 0 0 1-.92-.598 2.5 2.5 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233s.008-2.388.046-3.231c.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92s.546-.453.92-.598c.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92m-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217m0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334"/>
      </svg>
    </a>
    <a href="https://www.tiktok.com/@pikantehn?_r=1&_t=ZS-96VGsdTFTAz" aria-label="TikTok" target="_blank" rel="noopener noreferrer">
      <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
        <path d="M9 0h1.98c.144.715.54 1.617 1.235 2.512C12.895 3.389 13.797 4 15 4v2c-1.753 0-3.07-.814-4-1.829V11a5 5 0 1 1-5-5v2a3 3 0 1 0 3 3z"/>
      </svg>
    </a>
    <a href="https://wa.me/+50497864648" aria-label="WhatsApp" target="_blank" rel="noopener noreferrer">
      <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16">
        <path d="M13.601 2.326A7.85 7.85 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.9 7.9 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.9 7.9 0 0 0 13.6 2.326zM7.994 14.521a6.6 6.6 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.56 6.56 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592m3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.73.73 0 0 0-.529.247c-.182.198-.691.677-.691 1.654s.71 1.916.81 2.049c.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232"/>
      </svg>
    </a>
  </div>
</nav>

Build docs developers (and LLMs) love