Tailwind UI Pattern Registry for humans and agents

restaurant bistro fine-dining menu reservation elegant elegant

Restaurant Bistro

Elegant fine dining restaurant page with menu, reservations, and location details.

elegant Responsive
Live Preview

Sections

navbarheromenuabouthourslocationreservation-ctafooter

Patterns used

HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>La Maison — Fine Dining Restaurant</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <link rel="stylesheet" href="https://webspire.de/webspire-tokens.css">
  <link rel="stylesheet" href="https://webspire.de/webspire-components.css">
  <style>
    @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&family=Inter:wght@300;400;500;600&display=swap');
    .font-display { font-family: 'Playfair Display', serif; }
    body { font-family: 'Inter', sans-serif; }

    /* Brand tokens — warm dark bistro: stone/amber */
    :root {
      --ws-color-accent: oklch(0.65 0.13 75);        /* amber-400 */
      --ws-color-accent-hover: oklch(0.72 0.13 75);  /* amber-300 */
      --ws-color-accent-subtle: oklch(0.55 0.10 55); /* amber-700 */
      --ws-color-surface: oklch(0.22 0.01 60);       /* stone-950 */
      --ws-color-surface-alt: oklch(0.28 0.01 60);   /* stone-900 */
      --ws-color-text: oklch(1 0 0);
      --ws-color-text-muted: oklch(0.70 0.01 60);    /* stone-300 */
    }

    /* glass-frosted snippet — used on hero search */
    .glass-frosted {
      --glass-blur: 12px;
      --glass-opacity: 0.15;
      --glass-border-opacity: 0.2;
      background: rgb(255 255 255 / var(--glass-opacity));
      backdrop-filter: blur(var(--glass-blur));
      -webkit-backdrop-filter: blur(var(--glass-blur));
      border: 1px solid rgb(255 255 255 / var(--glass-border-opacity));
      box-shadow: 0 4px 30px rgb(0 0 0 / 0.1);
    }
    @media (prefers-color-scheme: dark) {
      .glass-frosted {
        --glass-opacity: 0.1;
        background: rgb(0 0 0 / var(--glass-opacity));
        border-color: rgb(255 255 255 / 0.1);
      }
    }
    @supports not (backdrop-filter: blur(1px)) {
      .glass-frosted { background: rgb(240 240 240 / 0.92); }
    }

    /* Template-specific helpers */
    .menu-divider { background: linear-gradient(90deg, transparent, #d4a574, transparent); height: 1px; }
  </style>
</head>
<body class="bg-stone-50 text-stone-900 antialiased">

  <!-- Navbar -->
  <nav class="ws-navbar sticky top-0 z-50 bg-stone-950/95 backdrop-blur-sm border-b border-stone-800" aria-label="Main navigation">
    <div class="max-w-6xl mx-auto flex items-center justify-between px-4 sm:px-6 py-4">
      <a href="#" class="font-display text-2xl text-white tracking-wide">La Maison</a>
      <ul class="hidden md:flex items-center gap-8 text-sm text-stone-300">
        <li><a href="#menu" class="hover:text-amber-400 transition-colors">Menu</a></li>
        <li><a href="#about" class="hover:text-amber-400 transition-colors">About</a></li>
        <li><a href="#hours" class="hover:text-amber-400 transition-colors">Hours</a></li>
        <li><a href="#location" class="hover:text-amber-400 transition-colors">Location</a></li>
      </ul>
      <a href="#reserve" class="hidden sm:inline-flex items-center px-5 py-2 text-sm font-medium text-stone-950 bg-amber-400 rounded hover:bg-amber-300 transition-colors">Reserve a Table</a>
      <button class="md:hidden text-white p-2" aria-label="Open menu">
        <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4 6h16M4 12h16M4 18h16"/></svg>
      </button>
    </div>
  </nav>

  <!-- Hero -->
  <section class="ws-hero relative min-h-[80vh] flex items-center justify-center bg-gradient-to-br from-stone-900 via-stone-800 to-amber-950">
    <div class="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,rgba(180,130,70,0.15),transparent_60%)]"></div>
    <div class="relative z-10 text-center px-4 max-w-3xl mx-auto">
      <p class="text-amber-400 text-sm uppercase tracking-[0.3em] mb-4">Est. 1987</p>
      <h1 class="font-display text-5xl sm:text-6xl lg:text-7xl text-white leading-tight mb-6">An Experience for Every Sense</h1>
      <p class="text-stone-300 text-lg sm:text-xl max-w-xl mx-auto mb-10 leading-relaxed">Seasonal French cuisine crafted with locally sourced ingredients, served in an intimate atmosphere in the heart of the city.</p>
      <div class="flex flex-col sm:flex-row gap-4 justify-center">
        <a href="#reserve" class="px-8 py-3.5 text-sm font-semibold text-stone-950 bg-amber-400 rounded hover:bg-amber-300 transition-colors">Reserve a Table</a>
        <a href="#menu" class="px-8 py-3.5 text-sm font-semibold text-white border border-stone-600 rounded hover:border-amber-400 hover:text-amber-400 transition-colors">View Our Menu</a>
      </div>
    </div>
  </section>

  <!-- Menu -->
  <section id="menu" class="ws-cards py-24 px-4">
    <div class="max-w-4xl mx-auto text-center mb-16">
      <p class="text-amber-700 text-sm uppercase tracking-[0.2em] mb-3">Curated Selections</p>
      <h2 class="font-display text-4xl sm:text-5xl mb-4">Our Menu</h2>
      <p class="text-stone-500 max-w-lg mx-auto">Each dish tells a story of tradition, seasonality, and craftsmanship.</p>
    </div>

    <div class="max-w-3xl mx-auto space-y-16">
      <!-- Starters -->
      <div>
        <h3 class="font-display text-2xl text-center mb-2">Starters</h3>
        <div class="menu-divider mb-8"></div>
        <div class="space-y-6">
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">French Onion Soup</h4>
              <p class="text-sm text-stone-500 mt-1">Caramelized onions, gruyère crouton, beef consommé</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$16</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Tuna Tartare</h4>
              <p class="text-sm text-stone-500 mt-1">Yellowfin tuna, avocado mousse, sesame tuile, ponzu</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$22</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Burrata & Heirloom Tomato</h4>
              <p class="text-sm text-stone-500 mt-1">Fresh burrata, vine-ripened tomatoes, basil oil, fleur de sel</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$19</span>
          </div>
        </div>
      </div>

      <!-- Mains -->
      <div>
        <h3 class="font-display text-2xl text-center mb-2">Mains</h3>
        <div class="menu-divider mb-8"></div>
        <div class="space-y-6">
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Filet Mignon</h4>
              <p class="text-sm text-stone-500 mt-1">8oz center cut, truffle jus, pommes purée, seasonal vegetables</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$48</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Pan-Seared Branzino</h4>
              <p class="text-sm text-stone-500 mt-1">Mediterranean sea bass, lemon beurre blanc, fennel, capers</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$42</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Duck Confit</h4>
              <p class="text-sm text-stone-500 mt-1">Slow-cooked leg, cherry gastrique, roasted root vegetables</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$39</span>
          </div>
        </div>
      </div>

      <!-- Desserts -->
      <div>
        <h3 class="font-display text-2xl text-center mb-2">Desserts</h3>
        <div class="menu-divider mb-8"></div>
        <div class="space-y-6">
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Crème Brûlée</h4>
              <p class="text-sm text-stone-500 mt-1">Madagascar vanilla, caramelized sugar crust</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$14</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Chocolate Fondant</h4>
              <p class="text-sm text-stone-500 mt-1">Valrhona dark chocolate, salted caramel, vanilla ice cream</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$16</span>
          </div>
          <div class="flex justify-between items-baseline gap-4">
            <div>
              <h4 class="font-medium">Tarte Tatin</h4>
              <p class="text-sm text-stone-500 mt-1">Caramelized apple, puff pastry, crème fraîche</p>
            </div>
            <span class="text-amber-800 font-display text-lg shrink-0">$15</span>
          </div>
        </div>
      </div>
    </div>
  </section>

  <!-- About -->
  <section id="about" class="ws-blog py-24 px-4 bg-stone-900 text-white">
    <div class="max-w-6xl mx-auto grid md:grid-cols-2 gap-12 items-center">
      <div class="aspect-[4/3] bg-gradient-to-br from-stone-700 to-stone-800 rounded-lg flex items-center justify-center">
        <span class="text-stone-500 text-sm">Restaurant Interior Photo</span>
      </div>
      <div>
        <p class="text-amber-400 text-sm uppercase tracking-[0.2em] mb-3">Our Story</p>
        <h2 class="font-display text-3xl sm:text-4xl mb-6">A Tradition of Excellence</h2>
        <p class="text-stone-300 leading-relaxed mb-4">Founded in 1987 by Chef Antoine Moreau, La Maison has been a cornerstone of fine dining in the city for over three decades. What began as a small bistro with twelve tables has grown into one of the most celebrated dining destinations in the region.</p>
        <p class="text-stone-300 leading-relaxed mb-6">Our philosophy is simple: source the finest seasonal ingredients, prepare them with respect and creativity, and serve them in an atmosphere that feels like home. Every dish on our menu reflects this commitment.</p>
        <p class="font-display text-xl italic text-amber-400">"Cooking is an act of love."</p>
        <p class="text-stone-400 text-sm mt-2">— Chef Antoine Moreau</p>
      </div>
    </div>
  </section>

  <!-- Hours -->
  <section id="hours" class="ws-stats py-24 px-4">
    <div class="max-w-4xl mx-auto text-center">
      <p class="text-amber-700 text-sm uppercase tracking-[0.2em] mb-3">Plan Your Visit</p>
      <h2 class="font-display text-4xl sm:text-5xl mb-12">Opening Hours</h2>
      <div class="grid sm:grid-cols-3 gap-8 max-w-2xl mx-auto">
        <div class="p-6 bg-white rounded-lg shadow-sm border border-stone-100">
          <h3 class="font-display text-lg mb-3">Lunch</h3>
          <p class="text-stone-600 text-sm">Tuesday – Friday</p>
          <p class="text-stone-900 font-medium mt-1">12:00 – 14:30</p>
        </div>
        <div class="p-6 bg-white rounded-lg shadow-sm border border-stone-100">
          <h3 class="font-display text-lg mb-3">Dinner</h3>
          <p class="text-stone-600 text-sm">Tuesday – Saturday</p>
          <p class="text-stone-900 font-medium mt-1">18:00 – 22:30</p>
        </div>
        <div class="p-6 bg-white rounded-lg shadow-sm border border-stone-100">
          <h3 class="font-display text-lg mb-3">Sunday Brunch</h3>
          <p class="text-stone-600 text-sm">Every Sunday</p>
          <p class="text-stone-900 font-medium mt-1">10:30 – 15:00</p>
        </div>
      </div>
      <p class="text-stone-500 text-sm mt-8">Closed on Mondays. Private events available upon request.</p>
    </div>
  </section>

  <!-- Location -->
  <section id="location" class="ws-contact py-24 px-4 bg-stone-100">
    <div class="max-w-6xl mx-auto grid md:grid-cols-2 gap-12">
      <div>
        <p class="text-amber-700 text-sm uppercase tracking-[0.2em] mb-3">Find Us</p>
        <h2 class="font-display text-3xl sm:text-4xl mb-6">Location</h2>
        <div class="space-y-4 text-stone-600">
          <div>
            <h3 class="font-medium text-stone-900 mb-1">Address</h3>
            <p>42 Rue de la Paix<br>Paris, 75002, France</p>
          </div>
          <div>
            <h3 class="font-medium text-stone-900 mb-1">Reservations</h3>
            <p>+33 1 42 60 34 12</p>
            <p>reservations@lamaison.com</p>
          </div>
          <div>
            <h3 class="font-medium text-stone-900 mb-1">Getting Here</h3>
            <p>Métro: Opéra (Lines 3, 7, 8)<br>Valet parking available for dinner service</p>
          </div>
        </div>
      </div>
      <div class="aspect-[4/3] bg-stone-300 rounded-lg flex items-center justify-center">
        <span class="text-stone-500 text-sm">Map / Location Image</span>
      </div>
    </div>
  </section>

  <!-- Reservation CTA -->
  <section id="reserve" class="ws-cta py-24 px-4 bg-stone-950 text-white text-center">
    <div class="max-w-2xl mx-auto">
      <p class="text-amber-400 text-sm uppercase tracking-[0.2em] mb-3">Make It Special</p>
      <h2 class="font-display text-4xl sm:text-5xl mb-4">Reserve Your Table</h2>
      <p class="text-stone-400 mb-10">For parties of 6 or more, please call us directly. Online reservations available for up to 5 guests.</p>
      <a href="#" class="inline-flex items-center px-10 py-4 text-sm font-semibold text-stone-950 bg-amber-400 rounded hover:bg-amber-300 transition-colors">Book Now on OpenTable</a>
    </div>
  </section>

  <!-- Footer -->
  <footer class="ws-footer bg-stone-950 border-t border-stone-800 py-12 px-4">
    <div class="max-w-6xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-6">
      <a href="#" class="font-display text-xl text-white">La Maison</a>
      <div class="flex gap-6">
        <a href="#" class="text-stone-400 hover:text-amber-400 transition-colors" aria-label="Instagram">
          <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z"/></svg>
        </a>
        <a href="#" class="text-stone-400 hover:text-amber-400 transition-colors" aria-label="Facebook">
          <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
        </a>
      </div>
      <p class="text-stone-500 text-sm">&copy; 2026 La Maison. All rights reserved.</p>
    </div>
  </footer>

</body>
</html>

Elegant fine dining restaurant template with Playfair Display typography, warm amber accents, and a full menu layout with starters, mains, and desserts. Includes sticky navbar, about section, opening hours, and location details.