Curbside Dark Logo

Curbside

Curbside Dark Logo

Curbside

/* ========== PAGE TRANSITION ========== */
.w-page-transition {
  position: fixed;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: -9999;
}

/* --- Dark layer --- */
.w-page-transition-dark {
  position: absolute;
  height: 100vh;
  inset: 0;
  background: var(--bg-dark, #000);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 20px;
  opacity: 0;
  transition: opacity 0.8s cubic-bezier(0.77, 0, 0.175, 1);
   z-index: 1;
}

.w-page-transition-dark.active {
  opacity: 1;
}

/* --- Dark - Logo wrapper --- */
.w-page-transition-dark__logo-wrapper {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) translateY(50%);
  display: flex;
  flex-direction: row;
  justify-content: center;
  gap: 20px;
  opacity: 0;
  transition: transform 0.8s ease, opacity 0.8s ease;
  z-index: 2;
}

.w-page-transition-dark__logo-wrapper.active {
  transform: translate(-50%, -50%) translateY(0);
  opacity: 1;
}

.w-page-transition-dark__text {
  color: var(--text-title-contrast, #fff);
  font-size: clamp(32px, 4vw, 100px);
}

.w-page-transition-dark__favicon {
  opacity: 0;
  width: 80px;
  height: 80px;
}

/* --- Light layer --- */
.w-page-transition-light {
  position: absolute;
  height: 100vh;
  inset: 0;
  background: var(--bg-body, #fff);
  display: flex;
  align-items: center;
  justify-content: center;
  transform: translateY(100%);
  transition: transform 1s cubic-bezier(0.77, 0, 0.175, 1);
  z-index: 3;
}

.w-page-transition-light.active {
  transform: translateY(0);
}

/* --- Light - Logo wrapper --- */
.w-page-transition-light__logo-wrapper {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) translateY(0);
  display: flex;
  flex-direction: row;
  justify-content: center;
  gap: 20px;
  opacity: 0;
  transition: opacity 0.6s ease 0.3s, transform 0.6s ease 0.3s;
  z-index: 4;
}

.w-page-transition-light__logo-wrapper.active {
  opacity: 1;
  transform: translate(-50%, -50%) translateY(0);
}

.w-page-transition-light__text {
  color: var(--text-title, #000);
  font-size: clamp(32px, 4vw, 100px);
}

.w-page-transition-light__favicon {
  width: 80px;
  height: 80px;
  opacity: 0;
  transform: scale(0) rotate(-90deg);
  transition: all 0.6s ease 0.3s;
}

.w-page-transition-light__favicon.appear {
  opacity: 1;
  transform: scale(1) rotate(0);
}


document.addEventListener("DOMContentLoaded", () => {
  const dark = document.querySelector(".w-page-transition-dark");
  const darkWrapper = document.querySelector(".w-page-transition-dark__logo-wrapper");
  const light = document.querySelector(".w-page-transition-light");
  const lightWrapper = document.querySelector(".w-page-transition-light__logo-wrapper");
  const favicon = document.querySelector(".w-page-transition-light__favicon");
  const pageTransition = document.querySelector(".w-page-transition");

  if (!dark || !light || !pageTransition) return;

  /** Helper delay */
  function wait(ms) {
    return new Promise((res) => setTimeout(res, ms));
  }

  /** PAGE LEAVE (trước khi chuyển trang) **/
  function startLeave() {
    pageTransition.style.zIndex = "9999";
    dark.classList.add("active");
  }

  /** PAGE ENTER (hiệu ứng khi vào trang) **/
  async function startEnter() {
    // Luôn đảm bảo z-index cao khi bắt đầu
    pageTransition.style.zIndex = "9999";

    // Step 1: Dark layer fade in
    dark.classList.add("active");
    await wait(600);

    // Step 2: Logo/text dark xuất hiện
    darkWrapper.classList.add("active");
    await wait(800);

    // Step 3: Light layer trượt lên
    light.classList.add("active");
    lightWrapper.classList.add("active");
    await wait(1000);

    // Step 4: Logo favicon hiện ra
    favicon.classList.add("appear");
    await wait(1200);

    // Step 5: Toàn bộ transition fade out nhanh
    pageTransition.style.transition = "opacity 0.6s ease";
    pageTransition.style.opacity = "0";
    await wait(1200);

    // Step 6: Reset trạng thái cho lần sau
    dark.classList.remove("active");
    darkWrapper.classList.remove("active");
    light.classList.remove("active");
    lightWrapper.classList.remove("active");
    favicon.classList.remove("appear");

    // Reset style sau khi đã ẩn hẳn
    pageTransition.style.opacity = "";
    pageTransition.style.transition = "";

    // Đưa z-index xuống thấp để không che nội dung
    pageTransition.style.zIndex = "-9999";
  }

  /** Run on initial load **/
  startEnter();

  /** Trigger transition khi click link **/
  document.querySelectorAll("a[href]").forEach((link) => {
    link.addEventListener("click", (e) => {
      const url = link.href;
      if (
        url.includes("#") ||
        url.startsWith("mailto:") ||
        url.startsWith("tel:") ||
        link.target === "_blank"
      )
        return;

      e.preventDefault();
      startLeave();
      setTimeout(() => {
        window.location.href = url;
      }, 600);
    });
  });
});
We Don't Just Market Restaurants. We Fill Them.

Marketing That Moves At The Speed Of Hospitality

We Create and AmplifyGreat food deserves great marketing. We help hospitality businesses turn buzz into bookings and first-timers into regulars

Why Partner With Curbside?

We’re not your typical marketing agency. We’re hospitality specialists who understand the unique rhythm of restaurants, cafes, and food businesses. From the Friday dinner rush to the art of perfecting your signature dish, we get it.

That’s why we’ve built our services around what matters most to you: filling tables, driving orders, and building a brand that keeps customers coming back. Every strategy we create is designed to deliver real, measurable results for your business.

Hospitality-First Expertise - We specialize exclusively in restaurants, cafes, bakeries, and food businesses. Your industry is our only focus.
Results You Can Measure - We track what matters: reservations booked, orders placed, foot traffic increased, and revenue grown.
Full-Service Partnership - From branding to websites, social media to advertising, we handle everything under one roof so you don't have to juggle multiple vendors.
Real Restaurant Experience - Our team includes people who've worked in kitchens, managed dining rooms, and lived the hospitality grind. We speak your language.
Local Market Knowledge - We understand your community, your competitors, and what makes your local diners tick.
Transparent Communication - No jargon, no surprises. We give you clear reports, honest timelines, and straightforward advice you can actually use.

Branding

BRANDING THAT LEAVES A LASTING IMPRESSION

We craft brand identities that capture the soul of your hospitality business—from logos that pop on takeout bags to menus that make mouths water. As Jacksonville's go-to branding agency for restaurants, bars, and food concepts, every element we design reflects your unique vibe and keeps customers coming back for more. Whether you're opening a new spot in San Marco, rebranding your Riverside cafe, or launching a food truck at the beaches, we help Jacksonville restaurants and hospitality brands stand out in a crowded market.

Let’s Talk
1.Logo Design
2.Brand Identity Systems
3.Menu Design (Print & Digital)
4.Packaging Design
5.Social Brand Guidelines
6.Printed Collateral (brochures, flyers, business cards)

Creative Production

Content That Makes People Crave

We create scroll-stopping photos, mouth-watering videos, and compelling copy that showcases what makes your spot special. From behind-the-scenes kitchen shots to styled food photography, we're the Jacksonville content team that helps restaurants, bars, and hospitality brands fill seats. Based in Jacksonville and shooting across Northeast Florida, we know how to capture the energy of your space—whether it's a moody downtown cocktail bar or a bright brunch spot at the beach.

Let’s Talk
1.Video Production & Editing
2.Photography (Product, Lifestyle, Food & Beverage)
3. Copywriting & Storytelling
4.Graphic Design for Print & Digital Asset Production

Social Media

YOUR NEXT GUEST IS SCROLLING RIGHT NOW

We manage your social presence with content that gets people talking, sharing, and reserving. From daily stories to influencer collaborations, we're the Jacksonville social media agency that builds communities around your brand and turns followers into regulars. We connect you with local Jax food bloggers, tap into what's trending in the 904, and create content that resonates with the people actually dining out in Northeast Florida.

Let’s Talk
1.Social Media Strategy
2.Content Creation (photo, video, graphics)
3.Social-Led Campaigns
4.Influencer Collaborations
5.Community Management
6.Paid Social Advertising

Marketing & Advertising

Campaigns that fill tables

Marketing is more than reach—it's resonance. As Jacksonville's restaurant marketing agency, we design campaigns that connect on an emotional level, backed by strategy and data that ensure your message doesn't just show up, but sticks. From Google Ads targeting hungry locals to PR placements in Jax food media, we help restaurants across Northeast Florida get discovered and stay top of mind.

Let’s Talk
1.Campaign Strategy & Development
2.Public Relations & Media Outreach
3.Event Marketing & Activations
4. Search Engine Marketing (SEM/Google Ads)
5.Local SEO & Google Business Profile Optimization
6.Review Management & Reputation Marketing

Website & Solutions

YOUR FIRST IMPRESSION STARTS HERE

We build websites that are as inviting as your dining room—mobile-friendly, easy to navigate, and optimized for reservations. As Jacksonville's go-to web design team for restaurants and hospitality brands, we create digital experiences that convert browsers into diners. From seamless OpenTable and Resy integrations to mouthwatering galleries that showcase your space, we help Jax restaurants look as good online as they do in person.

Let’s Talk
1.Web Design (UI/UX)
2.CMS Development (WordPress/Shopify)
3.Booking/E-Commerce Solutions
4.Landing Pages & SEO
5.Website Maintenance & Support