{"id":184,"date":"2024-04-12T15:43:22","date_gmt":"2024-04-12T15:43:22","guid":{"rendered":"https:\/\/smashpark24prd.wpenginepowered.com\/roseville\/?page_id=184"},"modified":"2026-10-07T14:03:07","modified_gmt":"2026-10-07T14:03:07","slug":"roseville-home","status":"publish","type":"page","link":"https:\/\/smashpark.com\/roseville\/","title":{"rendered":"Roseville Home"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; fullwidth=&#8221;on&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_fullwidth_code _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<!--<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->  SMASH PARK \u2014 REWARDS HERO + HOURS  \u2014  Roseville<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  This replaces the SMASH PARK \/ ROSEVILLE hero at the very top of the<!-- [et_pb_line_break_holder] -->  page, and puts a strip of business hours directly under it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  It keeps everything the old hero did:<!-- [et_pb_line_break_holder] -->    \u00b7 the venue name and city are still there, as the page&#8217;s H1<!-- [et_pb_line_break_holder] -->    \u00b7 RESERVE YOUR PLAY is still a button, now secondary to Join rewards<!-- [et_pb_line_break_holder] -->    \u00b7 DIRECTIONS &#038; HOURS moved into the hours strip, where it belongs<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW TO INSTALL  \u2014  the full-width part matters<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  The hero runs edge to edge. The clean way in Divi is a Fullwidth Section,<!-- [et_pb_line_break_holder] -->  which needs no CSS tricks:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    1. Edit smashpark.com\/roseville\/ in Divi.<!-- [et_pb_line_break_holder] -->    2. Delete the current hero section (the photo with SMASH PARK on it).<!-- [et_pb_line_break_holder] -->    3. Add a FULLWIDTH SECTION in its place \u2014 in Divi&#8217;s blue &#8220;add section&#8221;<!-- [et_pb_line_break_holder] -->       menu that is the middle option, not the standard one.<!-- [et_pb_line_break_holder] -->    4. Inside it add a FULLWIDTH CODE module and paste this ENTIRE file in.<!-- [et_pb_line_break_holder] -->    5. Save.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  IF YOU CAN&#8217;T GET A FULLWIDTH SECTION: paste into an ordinary Code module<!-- [et_pb_line_break_holder] -->  and uncomment the FALLBACK block at the bottom of the styles. It pulls the<!-- [et_pb_line_break_holder] -->  hero out to the screen edges with negative margins and includes one global<!-- [et_pb_line_break_holder] -->  line, html { overflow-x: clip; }, that stops Windows machines showing a<!-- [et_pb_line_break_holder] -->  thin sideways scrollbar. The Fullwidth Section is better; use the fallback<!-- [et_pb_line_break_holder] -->  only if you need it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE PICKLEBALL SLIDER CAN NOW STAY<!-- [et_pb_line_break_holder] -->  Putting rewards up here instead of in the slider solves the problem I<!-- [et_pb_line_break_holder] -->  raised last time. The seven slides keep their home, so Season Ticket and<!-- [et_pb_line_break_holder] -->  3 for $30 do not lose their only spot on the page \u2014 and rewards gets more<!-- [et_pb_line_break_holder] -->  prominence than it would have had down there. This is the better version of<!-- [et_pb_line_break_holder] -->  the two.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE HOURS STRIP FEEDS ITSELF FROM YOUR APP<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  You asked for hours from the app, so that&#8217;s where it reads them \u2014 the same<!-- [et_pb_line_break_holder] -->  record the events feed uses. It pulls five things and keeps them current<!-- [et_pb_line_break_holder] -->  without you touching this file again:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \u00b7 the opening hours, as today&#8217;s status AND the week beside it<!-- [et_pb_line_break_holder] -->    \u00b7 the street address<!-- [et_pb_line_break_holder] -->    \u00b7 the phone number<!-- [et_pb_line_break_holder] -->    \u00b7 and both the address and Get directions open your Google Business<!-- [et_pb_line_break_holder] -->      Profile, which is what people actually want from &#8220;directions&#8221;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Change any of that in the app and the website follows. Nothing is typed<!-- [et_pb_line_break_holder] -->  into this file twice, so the two can never disagree.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  It works out open-or-closed in the venue&#8217;s own timezone, so a visitor in<!-- [et_pb_line_break_holder] -->  another zone sees your hours and not theirs, and it rechecks every minute.<!-- [et_pb_line_break_holder] -->  Hours are cached for six hours in the visitor&#8217;s browser, so this costs one<!-- [et_pb_line_break_holder] -->  small request per visitor per six hours, not one per page view.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  IF THE APP IS UNREACHABLE the whole strip stays hidden rather than showing<!-- [et_pb_line_break_holder] -->  a blank or stale one. The page above it is unaffected.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  ONE THING TO CHECK \u2014 THE OPENING TIME<!-- [et_pb_line_break_holder] -->  Your app has this venue opening at 8:00 AM every single day of the week.<!-- [et_pb_line_break_holder] -->  The closing times vary sensibly (11 PM weekdays, midnight Friday and<!-- [et_pb_line_break_holder] -->  Saturday, 10 PM Sunday), so those look real \u2014 but an identical 8:00 AM<!-- [et_pb_line_break_holder] -->  seven days running is what a default looks like, not a schedule.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  For comparison, La Vista and Westerville both have varied opening times in<!-- [et_pb_line_break_holder] -->  the app (10 AM weekdays, 9 AM weekends), which is what a maintained record<!-- [et_pb_line_break_holder] -->  looks like. So this one is worth checking.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Two ways to fix it:<!-- [et_pb_line_break_holder] -->    \u00b7 Best \u2014 correct it in the app. It then fixes everywhere at once: here,<!-- [et_pb_line_break_holder] -->      the app itself, and anything else reading that record.<!-- [et_pb_line_break_holder] -->    \u00b7 Quick \u2014 set OPEN_OVERRIDE in the script below to the real opening<!-- [et_pb_line_break_holder] -->      time, e.g. &#8217;11:00&#8242;. That changes this strip only, and it applies to<!-- [et_pb_line_break_holder] -->      every day, so it suits a venue that opens at the same time daily.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE PHOTO<!-- [et_pb_line_break_holder] -->  The photo you sent of the two kids holding PLAY cards, cropped to a landscape<!-- [et_pb_line_break_holder] -->  band that keeps both faces and both cards. Same picture on all four venues.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  UPLOAD IT FIRST \u2014 it is not on your sites yet. For each venue: Media ><!-- [et_pb_line_break_holder] -->  Add New, upload rewards-arcade-cards.jpg, then check the URL matches the<!-- [et_pb_line_break_holder] -->  one in the &#8211;photo line below. If WordPress renames it (because a file of<!-- [et_pb_line_break_holder] -->  that name already exists) paste the real URL over it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  I cropped it to 1800&#215;1200 and saved it at 368KB, down from the 3024&#215;4032<!-- [et_pb_line_break_holder] -->  original. The full-size one would have been several megabytes on every<!-- [et_pb_line_break_holder] -->  page load for no visible gain.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Where the photo sits in its frame is set by &#8211;photo-pos in the styles.<!-- [et_pb_line_break_holder] -->  It is 65%, not centre: at 50% the girl&#8217;s card clipped on the right edge,<!-- [et_pb_line_break_holder] -->  and 65% pushes the pair in so both PLAY cards sit clear of the navy fade.<!-- [et_pb_line_break_holder] -->  If you swap the photo, higher shows more of the picture&#8217;s right side.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE COPY AND THE LINK<!-- [et_pb_line_break_holder] -->  The claims are from your own \/roseville\/rewards-2\/ page \u2014 the $10 arcade<!-- [et_pb_line_break_holder] -->  card that day, the free Shareable next visit \u2014 so the two can&#8217;t drift.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  The yellow button goes to the app&#8217;s rewards page in a new tab. I trimmed<!-- [et_pb_line_break_holder] -->  the &#8220;?_gl=&#8230;&#8221; off the URL you sent: it is a Google Analytics cross-domain<!-- [et_pb_line_break_holder] -->  tag made for your browser when you copied it, it expires, and hard-coding<!-- [et_pb_line_break_holder] -->  it would attach your session&#8217;s ID to everyone who clicks. The plain URL<!-- [et_pb_line_break_holder] -->  lands in the same place.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  RESERVE YOUR PLAY points at the same app reservations page your nav uses.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  ONE THING TO FIX SEPARATELY<!-- [et_pb_line_break_holder] -->  Your home page currently has TWELVE H1 headings. A page should have one.<!-- [et_pb_line_break_holder] -->  This block contributes exactly one (&#8220;Smash Park \u00b7 Roseville, MN&#8221;), but the<!-- [et_pb_line_break_holder] -->  other eleven come from modules further down and are worth cleaning up \u2014<!-- [et_pb_line_break_holder] -->  it is the kind of thing that quietly holds a page back in search.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW IT RESPONDS<!-- [et_pb_line_break_holder] -->    Desktop \/ tablet   words left, photo right, hours strip underneath<!-- [et_pb_line_break_holder] -->    Phone (767 down)   photo on top, words beneath, buttons full width<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"sp-rw\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-rw-panel\"><!-- [et_pb_line_break_holder] -->    <span class=\"sp-rw-stripe\"><\/span><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"sp-rw-grid\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"sp-rw-words\"><!-- [et_pb_line_break_holder] -->        <!-- EDIT \u2014 the venue line. This is the page's H1; keep the name and<!-- [et_pb_line_break_holder] -->             city in it so the page still says who and where you are. &#8211;><!-- [et_pb_line_break_holder] -->        <\/p>\n<h1 class=\"sp-rw-who\">Smash Park<span class=\"sp-rw-dot\"><\/span>Roseville, MN<\/h1>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- EDIT \u2014 headline, the line under it, and the supporting line.<!-- [et_pb_line_break_holder] -->             The supporting line&#8217;s job is &#8220;and then what?&#8221; \u2014 the headline is<!-- [et_pb_line_break_holder] -->             the joining gift, so this one is the ongoing reason to stay. &#8211;><!-- [et_pb_line_break_holder] -->        <pee class=\"sp-rw-h\">Free $10<!\u2013- [et_pb_br_holder] -\u2013>arcade card<\/pee><!-- [et_pb_line_break_holder] -->        <pee class=\"sp-rw-sub\">Sign up for Smash Park Rewards<\/pee><!-- [et_pb_line_break_holder] -->        <pee class=\"sp-rw-fine\">Then it keeps paying: Smash Cash on every visit, freebies every month, and member-only deals.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"sp-rw-acts\"><!-- [et_pb_line_break_holder] -->          <!-- EDIT \u2014 buttons --><!-- [et_pb_line_break_holder] -->          <a class=\"sp-rw-btn\"<!-- [et_pb_line_break_holder] -->             href=&#8221;https:\/\/app.smashpark.com\/D2VKAp7DVyxLYquzx64p\/rewards&#8221;<!-- [et_pb_line_break_holder] -->             target=&#8221;_blank&#8221; rel=&#8221;noopener&#8221;>Join rewards<\/a><!-- [et_pb_line_break_holder] -->          <a class=\"sp-rw-btn2\"<!-- [et_pb_line_break_holder] -->             href=&#8221;https:\/\/app.smashpark.com\/D2VKAp7DVyxLYquzx64p\/reservations&#8221;<!-- [et_pb_line_break_holder] -->             target=&#8221;_blank&#8221; rel=&#8221;noopener&#8221;>Reserve your play<\/a><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"sp-rw-photo\" role=\"img\"<!-- [et_pb_line_break_holder] -->           aria-label=&#8221;Two children holding Smash Park PLAY arcade cards in the arcade&#8221;><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- the hours line \u2014 one fact, plus the link to the full week on Google.<!-- [et_pb_line_break_holder] -->         It fills itself from the app; if that fails it stays hidden. &#8211;><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"sp-rw-hours\" id=\"spRwHours\" hidden><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"sp-rw-hours-in\"><!-- [et_pb_line_break_holder] -->        <span class=\"sp-rw-now\" id=\"spRwNow\"><\/span><!-- [et_pb_line_break_holder] -->        <a class=\"sp-rw-dir\" id=\"spRwDir\" target=\"_blank\" rel=\"noopener\">Directions &#038; hours<\/a><!-- [et_pb_line_break_holder] -->        <!-- EDIT \u2014 this venue's OpenTable page. NOTE this is a TABLE booking,<!-- [et_pb_line_break_holder] -->             which is a different thing from &#8220;Reserve your play&#8221; above: that<!-- [et_pb_line_break_holder] -->             one books courts and activities through your app, this one books<!-- [et_pb_line_break_holder] -->             a table to eat through OpenTable. The two labels are worded to<!-- [et_pb_line_break_holder] -->             keep them apart. &#8211;><!-- [et_pb_line_break_holder] -->        <a class=\"sp-rw-book\"<!-- [et_pb_line_break_holder] -->           href=&#8221;https:\/\/www.opentable.com\/r\/smash-park-roseville-reservations-roseville?restref=1402003&#038;lang=en-US&#038;ot_source=Restaurant%20website&#8221;<!-- [et_pb_line_break_holder] -->           target=&#8221;_blank&#8221; rel=&#8221;noopener&#8221;>Book a table<\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->\/* ---------------------------------------------------------------------------<!-- [et_pb_line_break_holder] -->   Prefixed .sp-rw throughout so it can't collide with Divi's own styles.<!-- [et_pb_line_break_holder] -->   Fonts inherit from the theme.<!-- [et_pb_line_break_holder] -->--------------------------------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->.sp-rw {<!-- [et_pb_line_break_holder] -->  --rw-ink:    #1c2551;<!-- [et_pb_line_break_holder] -->  --rw-yellow: #fed614;<!-- [et_pb_line_break_holder] -->  --rw-teal:   #5bb3a4;<!-- [et_pb_line_break_holder] -->  --rw-orange: #d98324;<!-- [et_pb_line_break_holder] -->  --rw-green:  #587d71;<!-- [et_pb_line_break_holder] -->  --rw-soft:   #d6dcf2;<!-- [et_pb_line_break_holder] -->  \/* the hours strip's own blue \u2014 lighter than the hero navy above it, so the<!-- [et_pb_line_break_holder] -->     strip reads as its own band rather than a shadow. Same blue the<!-- [et_pb_line_break_holder] -->     Play \/ Drink \/ Eat tiles use, which ties the two sections together. *\/<!-- [et_pb_line_break_holder] -->  --rw-blue:   #263c8d;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* The site's three typefaces, exactly as the theme declares them.<!-- [et_pb_line_break_holder] -->     Aquino    \u2014 the brand voice: big display lines, buttons, nav<!-- [et_pb_line_break_holder] -->     Bebas Neue\u2014 section headings<!-- [et_pb_line_break_holder] -->     Quicksand \u2014 body copy and labels<!-- [et_pb_line_break_holder] -->     Everything on the live site sits at weight 700 with normal letter-spacing;<!-- [et_pb_line_break_holder] -->     these match that rather than inventing their own. *\/<!-- [et_pb_line_break_holder] -->  --font-display: Aquino, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-head:    \"Bebas Neue\", Impact, Haettenschweiler, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-body:    Quicksand, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* EDIT \u2014 the photo, and where it sits in its frame (see notes above) *\/<!-- [et_pb_line_break_holder] -->  --photo:     url(\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/10\/rewards-arcade-cards.jpg\");<!-- [et_pb_line_break_holder] -->  --photo-pos: 65%;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* the width your page's content column uses \u2014 the words line up with it *\/<!-- [et_pb_line_break_holder] -->  --col: 1080px;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  box-sizing: border-box;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw *, .sp-rw *::before, .sp-rw *::after { box-sizing: border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-panel { position: relative; background: var(--rw-ink); overflow: hidden; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* the four brand colors along the top edge \u2014 the same signature as the<!-- [et_pb_line_break_holder] -->   private events section, so the two read as one system. Delete to remove. *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-stripe {<!-- [et_pb_line_break_holder] -->  position: absolute; top: 0; left: 0; right: 0; height: 4px; z-index: 3;<!-- [et_pb_line_break_holder] -->  background: linear-gradient(to right,<!-- [et_pb_line_break_holder] -->    var(--rw-yellow) 0 25%, var(--rw-teal) 25% 50%,<!-- [et_pb_line_break_holder] -->    var(--rw-orange) 50% 75%, var(--rw-green) 75% 100%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-grid {<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  min-height: 500px;<!-- [et_pb_line_break_holder] -->  display: grid;<!-- [et_pb_line_break_holder] -->  grid-template-columns: 1fr 1fr;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the words ---- *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-words {<!-- [et_pb_line_break_holder] -->  position: relative; z-index: 2;<!-- [et_pb_line_break_holder] -->  padding: 56px 46px;<!-- [et_pb_line_break_holder] -->  \/* left padding grows so the headline sits on the same line as the rest of<!-- [et_pb_line_break_holder] -->     the page's content, however wide the screen is *\/<!-- [et_pb_line_break_holder] -->  padding-left: max(46px, calc((100vw - var(--col)) \/ 2));<!-- [et_pb_line_break_holder] -->  display: flex; flex-direction: column; justify-content: center;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* The H1 is the venue, not the offer. It is small on purpose \u2014 a heading<!-- [et_pb_line_break_holder] -->   does not have to be the biggest thing on screen, and this is what keeps<!-- [et_pb_line_break_holder] -->   the page saying who and where you are for search and screen readers. *\/<!-- [et_pb_line_break_holder] -->.sp-rw h1.sp-rw-who {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  margin: 0 0 18px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: .78rem; font-weight: 700; letter-spacing: .2em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff; opacity: .78;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-dot {<!-- [et_pb_line_break_holder] -->  display: inline-block; width: 5px; height: 5px; border-radius: 50%;<!-- [et_pb_line_break_holder] -->  background: var(--rw-yellow); margin: 0 10px 3px; vertical-align: middle;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-h {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  margin: 0 0 14px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: clamp(2.4rem, 5vw, 3.9rem);<!-- [et_pb_line_break_holder] -->  line-height: .93; font-weight: 700; letter-spacing: normal;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: var(--rw-yellow);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-sub {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-head);<!-- [et_pb_line_break_holder] -->  margin: 0 0 12px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: clamp(1.1rem, 2vw, 1.55rem);<!-- [et_pb_line_break_holder] -->  line-height: 1.15; font-weight: 700; letter-spacing: normal;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-fine {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  margin: 0 0 32px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: .99rem; line-height: 1.5; color: var(--rw-soft); max-width: 40ch;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-btn {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  display: inline-block;<!-- [et_pb_line_break_holder] -->  background: var(--rw-yellow); color: var(--rw-ink);<!-- [et_pb_line_break_holder] -->  font-weight: 700; font-size: .95rem; letter-spacing: .03em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 17px 30px; border-radius: 4px; text-decoration: none;<!-- [et_pb_line_break_holder] -->  transition: background .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-btn:hover, .sp-rw .sp-rw-btn:focus-visible { background: #ffe25c; color: var(--rw-ink); text-decoration: none; }<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-btn2 {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  display: inline-block;<!-- [et_pb_line_break_holder] -->  background: transparent; color: #ffffff;<!-- [et_pb_line_break_holder] -->  font-weight: 700; font-size: .95rem; letter-spacing: .03em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 15px 28px; border-radius: 4px; text-decoration: none;<!-- [et_pb_line_break_holder] -->  box-shadow: inset 0 0 0 2px rgba(255,255,255,.55);<!-- [et_pb_line_break_holder] -->  transition: box-shadow .18s ease, background .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-btn2:hover, .sp-rw .sp-rw-btn2:focus-visible {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,.1); box-shadow: inset 0 0 0 2px #ffffff; color: #ffffff; text-decoration: none;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the photo, and the navy fade that blends it into the words ---- *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-photo {<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  background-image: var(--photo);<!-- [et_pb_line_break_holder] -->  background-size: cover;<!-- [et_pb_line_break_holder] -->  background-position: var(--photo-pos) center;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-photo::after {<!-- [et_pb_line_break_holder] -->  content: \"\";<!-- [et_pb_line_break_holder] -->  position: absolute; inset: 0;<!-- [et_pb_line_break_holder] -->  background: linear-gradient(90deg,<!-- [et_pb_line_break_holder] -->    rgba(28,37,81,1) 0%, rgba(28,37,81,.55) 22%, rgba(28,37,81,0) 52%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the hours row ------------------------------------------------------<!-- [et_pb_line_break_holder] -->   It sits inside the navy panel rather than as a white band beneath it, so<!-- [et_pb_line_break_holder] -->   the hero reads as one block. The hairline is the only thing separating it<!-- [et_pb_line_break_holder] -->   from the photo and the buttons above. *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-hours {<!-- [et_pb_line_break_holder] -->  position: relative; z-index: 2;<!-- [et_pb_line_break_holder] -->  background: var(--rw-blue);<!-- [et_pb_line_break_holder] -->  border-top: 1px solid rgba(255,255,255,.16);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-hours-in {<!-- [et_pb_line_break_holder] -->  max-width: var(--col); margin: 0 auto; padding: 15px 22px;<!-- [et_pb_line_break_holder] -->  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 26px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-now {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  display: inline-flex; align-items: center; gap: 8px;<!-- [et_pb_line_break_holder] -->  font-size: .76rem; font-weight: 700; letter-spacing: .08em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* The \"open\" dot is the brand teal, not the green. On the old near-black<!-- [et_pb_line_break_holder] -->   strip the green read at 3.5:1; on this lighter blue it drops to 2.2:1 and<!-- [et_pb_line_break_holder] -->   goes muddy. The teal sits at 4.0:1 on the same blue and is already in the<!-- [et_pb_line_break_holder] -->   palette. The words still carry the meaning either way. *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-now::before {<!-- [et_pb_line_break_holder] -->  content: \"\"; width: 9px; height: 9px; border-radius: 50%;<!-- [et_pb_line_break_holder] -->  background: var(--rw-teal); box-shadow: 0 0 0 3px rgba(91,179,164,.24);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-now.is-shut::before { background: rgba(255,255,255,.45); box-shadow: none; }<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-dir {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  font-size: .76rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--rw-yellow); text-decoration: none;<!-- [et_pb_line_break_holder] -->  border-bottom: 2px solid var(--rw-yellow); padding-bottom: 2px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-dir:hover, .sp-rw .sp-rw-dir:focus-visible { color: #ffffff; border-color: #ffffff; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \"Book a table\" sits beside Directions as its peer \u2014 same size and weight,<!-- [et_pb_line_break_holder] -->   so the strip reads as two things you can do rather than one link plus a<!-- [et_pb_line_break_holder] -->   decoration. It is white rather than yellow on purpose: the strip already<!-- [et_pb_line_break_holder] -->   has one yellow link, and two identical yellow links side by side blur into<!-- [et_pb_line_break_holder] -->   a single block of colour instead of reading as two separate choices. *\/<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-book {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  font-size: .76rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: #ffffff; text-decoration: none;<!-- [et_pb_line_break_holder] -->  border-bottom: 2px solid rgba(255,255,255,.55); padding-bottom: 2px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-book:hover, .sp-rw .sp-rw-book:focus-visible {<!-- [et_pb_line_break_holder] -->  color: var(--rw-yellow); border-color: var(--rw-yellow);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- tablet ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 980px) {<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-grid { min-height: 410px; }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-words { padding: 44px 32px; padding-left: max(32px, calc((100vw - var(--col)) \/ 2)); }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- phone: photo on top, words underneath ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 767px) {<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-grid { grid-template-columns: 1fr; min-height: 0; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* THE PHOTO COMES OFF ON A PHONE.<!-- [et_pb_line_break_holder] -->     As a band above the words it cost 230px, which pushed the headline and<!-- [et_pb_line_break_holder] -->     both buttons below the fold on most phones \u2014 people had to scroll to<!-- [et_pb_line_break_holder] -->     reach the offer. Without it the whole hero, hours included, lands in the<!-- [et_pb_line_break_holder] -->     first screen. The picture is worth less here than the offer is.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->     If you'd rather keep a hint of it, delete this rule and uncomment the<!-- [et_pb_line_break_holder] -->     block below instead: same height, photo as a faint wash behind the text. *\/<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-photo { display: none; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/*<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-photo { display: none; }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-panel::before {<!-- [et_pb_line_break_holder] -->    content: \"\"; position: absolute; inset: 0;<!-- [et_pb_line_break_holder] -->    background-image: var(--photo); background-size: cover;<!-- [et_pb_line_break_holder] -->    background-position: var(--photo-pos) center; opacity: .22;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-panel::after {<!-- [et_pb_line_break_holder] -->    content: \"\"; position: absolute; inset: 0;<!-- [et_pb_line_break_holder] -->    background: linear-gradient(180deg, rgba(28,37,81,.72) 0%, rgba(28,37,81,.93) 70%);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-words, .sp-rw .sp-rw-hours { position: relative; z-index: 2; }<!-- [et_pb_line_break_holder] -->  *\/<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-words { padding: 30px 22px 36px !important; }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-fine { margin-bottom: 26px; }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-btn, .sp-rw .sp-rw-btn2 { width: 100%; text-align: center; }<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-hours-in { padding: 14px 16px; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- respect a reduced-motion preference ---- *\/<!-- [et_pb_line_break_holder] -->@media (prefers-reduced-motion: reduce) {<!-- [et_pb_line_break_holder] -->  .sp-rw .sp-rw-btn, .sp-rw .sp-rw-btn2 { transition: none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ===========================================================================<!-- [et_pb_line_break_holder] -->   FALLBACK \u2014 only if you could not use a Divi Fullwidth Section.<!-- [et_pb_line_break_holder] -->   Delete the opening and closing comment markers around this block to use it.<!-- [et_pb_line_break_holder] -->   ===========================================================================<!-- [et_pb_line_break_holder] -->html { overflow-x: clip; }<!-- [et_pb_line_break_holder] -->.sp-rw .sp-rw-panel {<!-- [et_pb_line_break_holder] -->  margin-left:  calc(50% - 50vw);<!-- [et_pb_line_break_holder] -->  margin-right: calc(50% - 50vw);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->=========================================================================== *\/<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function () {<!-- [et_pb_line_break_holder] -->  \"use strict\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* =========================================================================<!-- [et_pb_line_break_holder] -->     The hours line reads from your app \u2014 the same record the events feed<!-- [et_pb_line_break_holder] -->     uses \u2014 so it is never maintained twice. It says one thing:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->         Open until 11 PM          while you are open<!-- [et_pb_line_break_holder] -->         Opens tomorrow at 8 AM    while you are not<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->     The full week lives on your Google Business Profile, which is where<!-- [et_pb_line_break_holder] -->     \"Directions & hours\" goes, and where people look for it anyway.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->     WHAT YOU MIGHT NEED TO EDIT:<!-- [et_pb_line_break_holder] -->       OPEN_OVERRIDE  if the app's opening time is a booking window rather<!-- [et_pb_line_break_holder] -->                      than the time the doors actually open (see the note at<!-- [et_pb_line_break_holder] -->                      the top of this file).<!-- [et_pb_line_break_holder] -->       GMB_URL        your Google Business Profile link.<!-- [et_pb_line_break_holder] -->     ========================================================================= *\/<!-- [et_pb_line_break_holder] -->  var LOCATION_UID  = 'D2VKAp7DVyxLYquzx64p';<!-- [et_pb_line_break_holder] -->  var GMB_URL       = 'https:\/\/share.google\/JQfwz2JHyH4rB2Jmu';<!-- [et_pb_line_break_holder] -->  var OPEN_OVERRIDE = null;   \/* null = use the app's own opening time *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var API_KEY = 'AIzaSyAlk8TCoaD5AgTFAuG9e6QVnGPL-bwOILw';   \/\/ public web key<!-- [et_pb_line_break_holder] -->  var PROJECT = 'smash-park';<!-- [et_pb_line_break_holder] -->  var CACHE_HOURS = 6;<!-- [et_pb_line_break_holder] -->  var DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function store(k) { try { return window[k]; } catch (e) { return null; } }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function cached() {<!-- [et_pb_line_break_holder] -->    var s = store('localStorage'); if (!s) { return null; }<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      var o = JSON.parse(s.getItem('spRwLoc_' + LOCATION_UID) || 'null');<!-- [et_pb_line_break_holder] -->      if (o && (Date.now() - o.t) < CACHE_HOURS * 3600000) { return o.v; }<!-- [et_pb_line_break_holder] -->    } catch (e) {}<!-- [et_pb_line_break_holder] -->    return null;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function cache(v) {<!-- [et_pb_line_break_holder] -->    var s = store('localStorage'); if (!s) { return; }<!-- [et_pb_line_break_holder] -->    try { s.setItem('spRwLoc_' + LOCATION_UID, JSON.stringify({ t: Date.now(), v: v })); } catch (e) {}<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function token() {<!-- [et_pb_line_break_holder] -->    var ss = store('sessionStorage');<!-- [et_pb_line_break_holder] -->    if (ss) {<!-- [et_pb_line_break_holder] -->      try {<!-- [et_pb_line_break_holder] -->        var c = JSON.parse(ss.getItem('spRwTok') || 'null');<!-- [et_pb_line_break_holder] -->        if (c && c.exp > Date.now() + 60000) { return Promise.resolve(c.tok); }<!-- [et_pb_line_break_holder] -->      } catch (e) {}<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return fetch('https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signUp?key=' + API_KEY,<!-- [et_pb_line_break_holder] -->      { method: 'POST', headers: { 'Content-Type': 'application\/json' },<!-- [et_pb_line_break_holder] -->        body: JSON.stringify({ returnSecureToken: true }) })<!-- [et_pb_line_break_holder] -->      .then(function (r) { return r.json(); })<!-- [et_pb_line_break_holder] -->      .then(function (j) {<!-- [et_pb_line_break_holder] -->        if (!j.idToken) { throw new Error('no token'); }<!-- [et_pb_line_break_holder] -->        if (ss) { try { ss.setItem('spRwTok', JSON.stringify({ tok: j.idToken, exp: Date.now() + 50 * 60000 })); } catch (e) {} }<!-- [et_pb_line_break_holder] -->        return j.idToken;<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function plain(v) {<!-- [et_pb_line_break_holder] -->    if (!v) { return null; }<!-- [et_pb_line_break_holder] -->    if ('stringValue' in v) { return v.stringValue; }<!-- [et_pb_line_break_holder] -->    if ('mapValue' in v) {<!-- [et_pb_line_break_holder] -->      var o = {}, f = v.mapValue.fields || {};<!-- [et_pb_line_break_holder] -->      for (var k in f) { if (f.hasOwnProperty(k)) { o[k] = plain(f[k]); } }<!-- [et_pb_line_break_holder] -->      return o;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return null;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function load() {<!-- [et_pb_line_break_holder] -->    var hit = cached();<!-- [et_pb_line_break_holder] -->    if (hit) { return Promise.resolve(hit); }<!-- [et_pb_line_break_holder] -->    return token().then(function (tok) {<!-- [et_pb_line_break_holder] -->      return fetch('https:\/\/firestore.googleapis.com\/v1\/projects\/' + PROJECT +<!-- [et_pb_line_break_holder] -->                   '\/databases\/(default)\/documents\/locations\/' + LOCATION_UID,<!-- [et_pb_line_break_holder] -->                   { headers: { Authorization: 'Bearer ' + tok } });<!-- [et_pb_line_break_holder] -->    }).then(function (r) { return r.json(); }).then(function (d) {<!-- [et_pb_line_break_holder] -->      var f = d.fields || {};<!-- [et_pb_line_break_holder] -->      var out = { hours: plain(f.operationHours) || {}, tz: plain(f.timezone) || 'America\/Chicago' };<!-- [et_pb_line_break_holder] -->      if (!Object.keys(out.hours).length) { throw new Error('no hours'); }<!-- [et_pb_line_break_holder] -->      cache(out);<!-- [et_pb_line_break_holder] -->      return out;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function mins(hhmm) {<!-- [et_pb_line_break_holder] -->    var p = String(hhmm).split(':');<!-- [et_pb_line_break_holder] -->    return parseInt(p[0], 10) * 60 + parseInt(p[1] || '0', 10);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function pretty(hhmm) {<!-- [et_pb_line_break_holder] -->    var m = mins(hhmm) % 1440, h = Math.floor(m \/ 60), mm = m % 60;<!-- [et_pb_line_break_holder] -->    var ap = h >= 12 ? 'PM' : 'AM', h12 = h % 12; if (h12 === 0) { h12 = 12; }<!-- [et_pb_line_break_holder] -->    return h12 + (mm ? ':' + (mm < 10 ? '0' : '') + mm : '') + ' ' + ap;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function openOf(day, d) {<!-- [et_pb_line_break_holder] -->    var h = d.hours[day];<!-- [et_pb_line_break_holder] -->    if (!h || !h.start) { return null; }<!-- [et_pb_line_break_holder] -->    return OPEN_OVERRIDE || h.start;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function closeOf(day, d) { var h = d.hours[day]; return (h && h.end) ? h.end : null; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function nowThere(tz) {<!-- [et_pb_line_break_holder] -->    var p = new Intl.DateTimeFormat('en-US', {<!-- [et_pb_line_break_holder] -->      timeZone: tz, weekday: 'long', hour: '2-digit', minute: '2-digit', hour12: false<!-- [et_pb_line_break_holder] -->    }).formatToParts(new Date());<!-- [et_pb_line_break_holder] -->    var g = {}; p.forEach(function (x) { g[x.type] = x.value; });<!-- [et_pb_line_break_holder] -->    var h = parseInt(g.hour, 10); if (h === 24) { h = 0; }<!-- [et_pb_line_break_holder] -->    return { day: g.weekday, minutes: h * 60 + parseInt(g.minute, 10) };<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function paint(data) {<!-- [et_pb_line_break_holder] -->    var strip = document.getElementById('spRwHours');<!-- [et_pb_line_break_holder] -->    var nowEl = document.getElementById('spRwNow');<!-- [et_pb_line_break_holder] -->    var dirEl = document.getElementById('spRwDir');<!-- [et_pb_line_break_holder] -->    if (!strip || !nowEl) { return; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function status() {<!-- [et_pb_line_break_holder] -->      var now = nowThere(data.tz), idx = DAYS.indexOf(now.day);<!-- [et_pb_line_break_holder] -->      var yday = DAYS[(idx + 6) % 7];<!-- [et_pb_line_break_holder] -->      var open = false, closesAt = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      var yo = openOf(yday, data), yc = closeOf(yday, data);   \/\/ ran past midnight?<!-- [et_pb_line_break_holder] -->      if (yo && yc && mins(yc) <= mins(yo) &#038;&#038; now.minutes < mins(yc)) { open = true; closesAt = yc; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (!open) {<!-- [et_pb_line_break_holder] -->        var o = openOf(now.day, data), c = closeOf(now.day, data);<!-- [et_pb_line_break_holder] -->        if (o && c) {<!-- [et_pb_line_break_holder] -->          var end = mins(c) <= mins(o) ? 1440 : mins(c);<!-- [et_pb_line_break_holder] -->          if (now.minutes >= mins(o) && now.minutes < end) { open = true; closesAt = c; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (open) {<!-- [et_pb_line_break_holder] -->        nowEl.className = 'sp-rw-now';<!-- [et_pb_line_break_holder] -->        nowEl.textContent = 'Open until ' + pretty(closesAt);<!-- [et_pb_line_break_holder] -->        return;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      \/* closed: say when we next open, in the words someone would use *\/<!-- [et_pb_line_break_holder] -->      var label = null;<!-- [et_pb_line_break_holder] -->      for (var i = 0; i < 8; i++) {<!-- [et_pb_line_break_holder] -->        var d = DAYS[(idx + i) % 7], op = openOf(d, data);<!-- [et_pb_line_break_holder] -->        if (!op) { continue; }<!-- [et_pb_line_break_holder] -->        if (i === 0 && now.minutes >= mins(op)) { continue; }<!-- [et_pb_line_break_holder] -->        label = (i === 0 ? 'Opens today at ' :<!-- [et_pb_line_break_holder] -->                (i === 1 ? 'Opens tomorrow at ' : 'Opens ' + d + ' at ')) + pretty(op);<!-- [et_pb_line_break_holder] -->        break;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      nowEl.className = 'sp-rw-now is-shut';<!-- [et_pb_line_break_holder] -->      nowEl.textContent = label || 'See hours';<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    status();<!-- [et_pb_line_break_holder] -->    if (dirEl) { dirEl.href = GMB_URL; }<!-- [et_pb_line_break_holder] -->    strip.hidden = false;<!-- [et_pb_line_break_holder] -->    setInterval(status, 60000);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function go() { load().then(paint).catch(function () { \/* stay hidden *\/ }); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', go); }<!-- [et_pb_line_break_holder] -->  else { go(); }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_fullwidth_code][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#1C2551&#8243; custom_padding=&#8221;6px||4px|||&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<!--<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->  SMASH PARK  \/  PLAY . DRINK . EAT  \/  Roseville<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Replaces the current three-column Play \/ Drink \/ Eat block.<!-- [et_pb_line_break_holder] -->  No heading above it &#8212; the three tiles speak for themselves.<!-- [et_pb_line_break_holder] -->  Roughly half the height of the old block, no card grid, and the photos<!-- [et_pb_line_break_holder] -->  run edge to edge with a yellow hairline between them.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW TO INSTALL  (no developer needed)<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  1. Edit smashpark.com\/roseville\/ in Divi.<!-- [et_pb_line_break_holder] -->  2. Delete the existing Play \/ Drink \/ Eat row &#8212; the one with three photos<!-- [et_pb_line_break_holder] -->     and three yellow buttons.<!-- [et_pb_line_break_holder] -->  3. In its place add a Code module and paste this ENTIRE file into it.<!-- [et_pb_line_break_holder] -->  4. In that module&#8217;s row settings, go to Design > Sizing and set<!-- [et_pb_line_break_holder] -->     &#8220;Make This Row Fullwidth&#8221; = YES, then Design > Spacing and set all<!-- [et_pb_line_break_holder] -->     padding to 0. This section is built to touch the edges of the screen.<!-- [et_pb_line_break_holder] -->  5. Save.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  There is NO JavaScript in this file. It is plain HTML and CSS, so you can<!-- [et_pb_line_break_holder] -->  edit any of the words or links straight in the Code box.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  WHAT YOU MIGHT WANT TO CHANGE  &#8212; each one is marked EDIT below<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->    &#8211; the three photos           (all three come from THIS site&#8217;s Media<!-- [et_pb_line_break_holder] -->                                  Library, so nothing breaks if another<!-- [et_pb_line_break_holder] -->                                  venue&#8217;s media changes)<!-- [et_pb_line_break_holder] -->    &#8211; each tile&#8217;s title, its one line of detail, and its link<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  The PLAY line lists what Roseville actually has bookable in the app today.<!-- [et_pb_line_break_holder] -->  If you add or retire an activity, update that line to match.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  A NOTE ON THE PHOTOS<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  The play photo is 1.png from this site&#8217;s Media Library (600&#215;400 &#8212; it works,<!-- [et_pb_line_break_holder] -->  but re-exporting at roughly 1200&#215;800 would sharpen it). The drink and food<!-- [et_pb_line_break_holder] -->  photos are the newer square ones you uploaded in September, which is why<!-- [et_pb_line_break_holder] -->  they have a crop hint in the CSS below.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW IT RESPONDS<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->    Desktop  981px and up    three across, 310px tall<!-- [et_pb_line_break_holder] -->    Tablet   768 &#8211; 980px     three across, 250px tall<!-- [et_pb_line_break_holder] -->    Phone    767px and down  stacked, 200px each<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"sp-pde\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-pde-grid\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ===================== PLAY ===================== --><!-- [et_pb_line_break_holder] -->    <a class=\"sp-pde-door\" href=\"https:\/\/app.smashpark.com\/D2VKAp7DVyxLYquzx64p\/reservations\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT - photo --><!-- [et_pb_line_break_holder] -->      <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/02\/1.png\"<!-- [et_pb_line_break_holder] -->           alt=&#8221;Two Smash Park pickleball paddles meeting mid-court&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-scrim\"><\/span><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-text\"><!-- [et_pb_line_break_holder] -->        <!-- EDIT - title, detail line, link text --><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 class=\"sp-pde-title\">Play<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-line\">Pickleball \u00b7 Duckpin bowling \u00b7 Axe Throwing \u00b7 Karaoke \u00b7 Darts<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-go\">Reserve play \u2192<\/span><!-- [et_pb_line_break_holder] -->      <\/span><!-- [et_pb_line_break_holder] -->    <\/a><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ===================== DRINK ===================== --><!-- [et_pb_line_break_holder] -->    <a class=\"sp-pde-door sp-pde-door--drink\" href=\"https:\/\/smashpark.com\/roseville\/drink\/\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT - photo --><!-- [et_pb_line_break_holder] -->      <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/09\/Untitled-design-1.png\"<!-- [et_pb_line_break_holder] -->           alt=&#8221;Five colorful cocktails and frozen drinks lined up on the bar with lime and mint garnishes&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-scrim\"><\/span><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-text\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 class=\"sp-pde-title\">Drink<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-line\">Craft cocktails \u00b7 Beer \u00b7 Seltzers \u00b7 Mocktails<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-go\">Drink menu \u2192<\/span><!-- [et_pb_line_break_holder] -->      <\/span><!-- [et_pb_line_break_holder] -->    <\/a><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ===================== EAT ===================== --><!-- [et_pb_line_break_holder] -->    <a class=\"sp-pde-door sp-pde-door--eat\" href=\"https:\/\/smashpark.com\/roseville\/eat\/\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT - photo --><!-- [et_pb_line_break_holder] -->      <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/09\/Untitled-design.png\"<!-- [et_pb_line_break_holder] -->           alt=&#8221;Loaded shredded-beef nachos with guacamole and pico, alongside kettle chips, crispy brussels sprouts and pretzel bites&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-scrim\"><\/span><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pde-text\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 class=\"sp-pde-title\">Eat<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-line\">Brunch \u00b7 Lunch \u00b7 Happy Hour \u00b7 Dinner<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"sp-pde-go\">Food menu \u2192<\/span><!-- [et_pb_line_break_holder] -->      <\/span><!-- [et_pb_line_break_holder] -->    <\/a><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->\/* ---------------------------------------------------------------------------<!-- [et_pb_line_break_holder] -->   Everything below is prefixed .sp-pde so it cannot collide with Divi's own<!-- [et_pb_line_break_holder] -->   styles, or with any other module on the page.<!-- [et_pb_line_break_holder] -->--------------------------------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->.sp-pde {<!-- [et_pb_line_break_holder] -->  --pde-navy:   #263c8d;<!-- [et_pb_line_break_holder] -->  --pde-ink:    #1c2551;<!-- [et_pb_line_break_holder] -->  --pde-yellow: #fed614;<!-- [et_pb_line_break_holder] -->  --pde-soft:   #d6dcf2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* The site's three typefaces, exactly as the theme declares them.<!-- [et_pb_line_break_holder] -->     Aquino = brand voice and headings, Bebas Neue = section headings,<!-- [et_pb_line_break_holder] -->     Quicksand = body copy. All at weight 700 on the live site. *\/<!-- [et_pb_line_break_holder] -->  --font-display: Aquino, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-head:    \"Bebas Neue\", Impact, Haettenschweiler, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-body:    Quicksand, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  width: 100%;<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  background: var(--pde-ink);<!-- [et_pb_line_break_holder] -->  padding: 0;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde *,<!-- [et_pb_line_break_holder] -->.sp-pde *::before,<!-- [et_pb_line_break_holder] -->.sp-pde *::after { box-sizing: border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the three doors ---- *\/<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-grid {<!-- [et_pb_line_break_holder] -->  display: grid;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(3, minmax(0, 1fr));<!-- [et_pb_line_break_holder] -->  gap: 3px;                       \/* the gap IS the yellow divider *\/<!-- [et_pb_line_break_holder] -->  background: var(--pde-yellow);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door {<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  height: 310px;<!-- [et_pb_line_break_holder] -->  overflow: hidden;<!-- [et_pb_line_break_holder] -->  background: var(--pde-navy);<!-- [et_pb_line_break_holder] -->  text-decoration: none;<!-- [et_pb_line_break_holder] -->  color: inherit;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door img {<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  inset: 0;<!-- [et_pb_line_break_holder] -->  width: 100%;<!-- [et_pb_line_break_holder] -->  height: 100%;<!-- [et_pb_line_break_holder] -->  object-fit: cover;<!-- [et_pb_line_break_holder] -->  object-position: center;<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  transform: scale(1.001);        \/* stops a 1px edge shimmer on zoom *\/<!-- [et_pb_line_break_holder] -->  transition: transform .45s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door:hover img,<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door:focus-visible img { transform: scale(1.06); }<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door:focus-visible { outline: 3px solid var(--pde-yellow); outline-offset: -3px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* The drink and food photos here are square (1080x1080) and this tile is<!-- [et_pb_line_break_holder] -->   landscape, so the browser has to crop them. These two lines choose WHICH<!-- [et_pb_line_break_holder] -->   part it keeps: the drinks crop favours the tops (cherry, whipped cream,<!-- [et_pb_line_break_holder] -->   mint, limes) and the food crop favours the nachos rather than the side<!-- [et_pb_line_break_holder] -->   plates. Nudge the percentages if you swap either photo. *\/<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door--drink img { object-position: center 25%; }<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door--eat   img { object-position: center 72%; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* The dark wash that keeps the words readable over any photo. *\/<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-scrim {<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  inset: 0;<!-- [et_pb_line_break_holder] -->  background: linear-gradient(to top,<!-- [et_pb_line_break_holder] -->              rgba(28,37,81,.96) 14%,<!-- [et_pb_line_break_holder] -->              rgba(28,37,81,.5)  48%,<!-- [et_pb_line_break_holder] -->              rgba(28,37,81,.05) 84%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-text {<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  left: 0; right: 0; bottom: 0;<!-- [et_pb_line_break_holder] -->  padding: 24px 26px;<!-- [et_pb_line_break_holder] -->  display: flex;<!-- [et_pb_line_break_holder] -->  flex-direction: column;<!-- [et_pb_line_break_holder] -->  gap: 7px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* An <\/p>\n<h3> so it sits properly in the page's heading order. The font is set<!-- [et_pb_line_break_holder] -->   explicitly rather than inherited, because a Code module inherits the<!-- [et_pb_line_break_holder] -->   theme's UI font (effra), not the brand font. *\/<!-- [et_pb_line_break_holder] -->.sp-pde h3.sp-pde-title {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  margin: 0;<!-- [et_pb_line_break_holder] -->  padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: 2.9rem;<!-- [et_pb_line_break_holder] -->  line-height: .92;<!-- [et_pb_line_break_holder] -->  font-weight: 700;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: #ffffff;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-line {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  font-size: .875rem;<!-- [et_pb_line_break_holder] -->  line-height: 1.5;<!-- [et_pb_line_break_holder] -->  font-weight: 400;<!-- [et_pb_line_break_holder] -->  color: var(--pde-soft);<!-- [et_pb_line_break_holder] -->  \/* Always reserve two lines here, even when the text only fills one. The<!-- [et_pb_line_break_holder] -->     text block is anchored to the bottom of the tile, so without this a<!-- [et_pb_line_break_holder] -->     longer list (PLAY) pushes its heading higher than the others and the<!-- [et_pb_line_break_holder] -->     three PLAY \/ DRINK \/ EAT headings stop lining up. 3em = two lines. *\/<!-- [et_pb_line_break_holder] -->  min-height: 3em;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-go {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  font-size: .8rem;<!-- [et_pb_line_break_holder] -->  font-weight: 700;<!-- [et_pb_line_break_holder] -->  letter-spacing: .07em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--pde-yellow);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pde .sp-pde-door:hover .sp-pde-go { text-decoration: underline; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- tablet ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 980px) {<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-door { height: 250px; }<!-- [et_pb_line_break_holder] -->  .sp-pde h3.sp-pde-title { font-size: 2.4rem; }<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-text { padding: 20px 20px; }<!-- [et_pb_line_break_holder] -->  \/* .75rem rather than .8rem so the longest PLAY line still fits on two<!-- [et_pb_line_break_holder] -->     lines at 768px. If you ADD items to a PLAY line and the three headings<!-- [et_pb_line_break_holder] -->     stop lining up, it has spilled to a third line -- change min-height<!-- [et_pb_line_break_holder] -->     below from 3em to 4.5em and they will lock back into place. *\/<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-line { font-size: .75rem; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- phone ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 767px) {<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-grid { grid-template-columns: minmax(0, 1fr); }<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-door { height: 200px; }<!-- [et_pb_line_break_holder] -->  .sp-pde h3.sp-pde-title { font-size: 2rem; }<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-text { padding: 17px 20px; gap: 5px; }<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-line { min-height: 0; }   \/* stacked - nothing to align to *\/<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- respect a reduced-motion preference ---- *\/<!-- [et_pb_line_break_holder] -->@media (prefers-reduced-motion: reduce) {<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-door img,<!-- [et_pb_line_break_holder] -->  .sp-pde .sp-pde-door:hover img { transition: none; transform: none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#f4f4f4&#8243; background_enable_image=&#8221;off&#8221; parallax=&#8221;on&#8221; background_blend=&#8221;lighten&#8221; background_enable_pattern_style=&#8221;on&#8221; background_pattern_style=&#8221;squares&#8221; background_pattern_color=&#8221;#000000&#8243; background_pattern_horizontal_offset=&#8221;-11%&#8221; background_pattern_blend_mode=&#8221;soft-light&#8221; custom_padding=&#8221;2px|0px|25px|||&#8221; background_last_edited=&#8221;on|phone&#8221; background_enable_image_phone=&#8221;off&#8221; da_disable_devices=&#8221;off|off|off&#8221; border_color_top=&#8221;#211B5A&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_margin_tablet=&#8221;&#8221; custom_margin_phone=&#8221;&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;12px||10px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; header_text_color=&#8221;#1c2551&#8243; header_2_font=&#8221;Bebas Neue||||||||&#8221; header_2_text_color=&#8221;#1C2551&#8243; header_2_font_size=&#8221;50px&#8221; custom_margin=&#8221;||-3px|||&#8221; custom_margin_tablet=&#8221;&#8221; custom_margin_phone=&#8221;&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;3.7%||0px||false|false&#8221; header_2_font_size_tablet=&#8221;55px&#8221; header_2_font_size_phone=&#8221;34px&#8221; header_2_font_size_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h2 style=\"text-align: center;\">EVENTS AT SMASH PARK ROSEVILLE<\/h2>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; text_text_color=&#8221;#000000&#8243; text_font_size=&#8221;18px&#8221; text_orientation=&#8221;center&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;5px|||||&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>From music bingo and themed trivia to epic watch parties, brunch bingo, meat raffles, and cornhole tournaments. Fun events, family-friendly activities, and 21+ entertainment\u2014all week long at Smash Park.<\/p>\n<p>[\/et_pb_text][et_pb_code _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<!--<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->  SMASH PARK LIVE EVENTS  \u2014  Roseville, MN<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Already set to Roseville, MN. Nothing in this file needs editing.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  WHERE IT GOES<!-- [et_pb_line_break_holder] -->  smashpark.com\/roseville\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  HOW TO INSTALL (about 2 minutes)<!-- [et_pb_line_break_holder] -->  1. Edit that page in Divi.<!-- [et_pb_line_break_holder] -->  2. Add a &#8220;Code&#8221; module where you want the events to appear.<!-- [et_pb_line_break_holder] -->  3. Paste this ENTIRE file into the Code box.<!-- [et_pb_line_break_holder] -->  4. Save.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Divi&#8217;s Visual Builder shows an empty box while editing \u2014 that is normal.<!-- [et_pb_line_break_holder] -->  View the live page to see the events.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  WHAT IT SHOWS<!-- [et_pb_line_break_holder] -->  Upcoming public events for Roseville, MN, live from app.smashpark.com. When your<!-- [et_pb_line_break_holder] -->  team adds or changes an event in the app, this updates by itself.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Desktop  (981px and up)    3 across, 6 events<!-- [et_pb_line_break_holder] -->    Tablet   (768 \u2013 980px)     2 across, 4 events<!-- [et_pb_line_break_holder] -->    Phone    (767px and down)  1 across, 3 events<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  A button to see everything sits under the cards at every size. Cards and the<!-- [et_pb_line_break_holder] -->  button open in a new tab. There is no section title \u2014 add your own above the<!-- [et_pb_line_break_holder] -->  Code module with a Divi Text or Heading module.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  OPTIONAL TWEAKS (on the div below)<!-- [et_pb_line_break_holder] -->    data-limit=&#8221;6&#8243;                 how many events load; must be at least the<!-- [et_pb_line_break_holder] -->                                   largest number shown above<!-- [et_pb_line_break_holder] -->    data-heading=&#8221;&#8221;                no section title; put text in the quotes to add one<!-- [et_pb_line_break_holder] -->    data-cta=&#8221;See all events&#8221;      button text; use &#8220;&#8221; to hide the button<!-- [et_pb_line_break_holder] -->  To change how many show at each screen size, edit the three &#8220;nth-child(n+N)&#8221;<!-- [et_pb_line_break_holder] -->  numbers in the styles below \u2014 N is one more than the number you want.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  If the events service can&#8217;t be reached, the block hides itself rather than<!-- [et_pb_line_break_holder] -->  showing a broken section to a customer.<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"sp-events\"<!-- [et_pb_line_break_holder] -->     data-location=&#8221;roseville&#8221;<!-- [et_pb_line_break_holder] -->     data-limit=&#8221;6&#8243;<!-- [et_pb_line_break_holder] -->     data-heading=&#8221;&#8221;<!-- [et_pb_line_break_holder] -->     data-cta=&#8221;See all events&#8221;><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->.sp-events { --sp-navy:#263c8d; --sp-ink:#0b153b; --sp-yellow:#fed614; --sp-green:#28d15b;<!-- [et_pb_line_break_holder] -->  --sp-line:#e6e8f0; --sp-muted:#5b6480; --sp-radius:14px;<!-- [et_pb_line_break_holder] -->  display:block; width:100%; margin:0 auto; box-sizing:border-box; }<!-- [et_pb_line_break_holder] -->.sp-events *, .sp-events *::before, .sp-events *::after { box-sizing:border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-heading { font-size:clamp(1.5rem,3vw,2.15rem); line-height:1.15; font-weight:800;<!-- [et_pb_line_break_holder] -->  letter-spacing:.01em; color:var(--sp-ink); margin:0 0 1.25rem; text-transform:uppercase; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Columns and event count move together, on Divi's own breakpoints:<!-- [et_pb_line_break_holder] -->     Desktop (981px and up)  3 across, 6 events<!-- [et_pb_line_break_holder] -->     Tablet  (768\u2013980px)     2 across, 4 events<!-- [et_pb_line_break_holder] -->     Phone   (767px and down) 1 across, 3 events<!-- [et_pb_line_break_holder] -->   The tablet and phone rules are in the @media blocks further down.<!-- [et_pb_line_break_holder] -->   minmax(0,1fr) lets cards shrink instead of overflowing a narrow row. *\/<!-- [et_pb_line_break_holder] -->.sp-events .sp-grid { display:grid; gap:1.25rem; grid-template-columns:repeat(3,minmax(0,1fr)); }<!-- [et_pb_line_break_holder] -->.sp-events .sp-grid > .sp-card:nth-child(n+7) { display:none; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-card { display:flex; flex-direction:column; background:#fff; border:1px solid var(--sp-line);<!-- [et_pb_line_break_holder] -->  border-radius:var(--sp-radius); overflow:hidden; text-decoration:none; color:inherit;<!-- [et_pb_line_break_holder] -->  box-shadow:0 1px 2px rgba(11,21,59,.06); transition:transform .18s ease, box-shadow .18s ease; height:100%; }<!-- [et_pb_line_break_holder] -->.sp-events a.sp-card:hover, .sp-events a.sp-card:focus-visible {<!-- [et_pb_line_break_holder] -->  transform:translateY(-3px); box-shadow:0 12px 28px rgba(11,21,59,.16); text-decoration:none; color:inherit; }<!-- [et_pb_line_break_holder] -->.sp-events a.sp-card:focus-visible { outline:3px solid var(--sp-navy); outline-offset:2px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* 3.58:1 is the banner ratio the app uploads, so nothing gets cropped *\/<!-- [et_pb_line_break_holder] -->.sp-events .sp-media { position:relative; aspect-ratio:3.58\/1; background:var(--sp-navy); overflow:hidden; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-media img { width:100%; height:100%; object-fit:cover; display:block; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-media .sp-fallback { position:absolute; inset:0; display:flex; align-items:center; justify-content:center;<!-- [et_pb_line_break_holder] -->  padding:1rem; text-align:center; font-weight:800; text-transform:uppercase; color:var(--sp-yellow);<!-- [et_pb_line_break_holder] -->  background:linear-gradient(135deg,var(--sp-navy),var(--sp-ink)); font-size:.85rem; line-height:1.2;<!-- [et_pb_line_break_holder] -->  padding-left:64px; overflow:hidden; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* To show the banner art with nothing on top of it, delete this .sp-date block<!-- [et_pb_line_break_holder] -->   and the .sp-date lines in the script \u2014 the date still shows under the title. *\/<!-- [et_pb_line_break_holder] -->.sp-events .sp-date { position:absolute; top:8px; left:8px; background:var(--sp-yellow); color:var(--sp-ink);<!-- [et_pb_line_break_holder] -->  border-radius:7px; padding:4px 7px 5px; text-align:center; min-width:40px; line-height:1;<!-- [et_pb_line_break_holder] -->  box-shadow:0 2px 6px rgba(11,21,59,.3); }<!-- [et_pb_line_break_holder] -->.sp-events .sp-date .sp-m { display:block; font-size:.55rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-date .sp-d { display:block; font-size:1.02rem; font-weight:800; margin-top:1px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-flag { position:absolute; top:10px; right:10px; background:var(--sp-ink); color:#fff;<!-- [et_pb_line_break_holder] -->  font-size:.62rem; font-weight:800; letter-spacing:.09em; text-transform:uppercase;<!-- [et_pb_line_break_holder] -->  padding:5px 9px; border-radius:999px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-body { padding:.95rem 1rem 1.05rem; display:flex; flex-direction:column; gap:.5rem; flex:1 1 auto; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-title { font-size:1.02rem; font-weight:800; line-height:1.25; color:var(--sp-ink);<!-- [et_pb_line_break_holder] -->  text-transform:uppercase; margin:0; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-when { font-size:.86rem; color:var(--sp-muted); margin:0; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-foot { margin-top:auto; padding-top:.35rem; display:flex; align-items:center;<!-- [et_pb_line_break_holder] -->  justify-content:space-between; gap:.6rem; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-price { font-size:.78rem; font-weight:800; letter-spacing:.04em; text-transform:uppercase;<!-- [et_pb_line_break_holder] -->  color:#0c5c2b; background:#e4f8ec; border-radius:999px; padding:5px 11px; white-space:nowrap; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-price.sp-paid { color:var(--sp-ink); background:var(--sp-yellow); }<!-- [et_pb_line_break_holder] -->.sp-events .sp-price.sp-out  { color:#fff; background:#8b93ab; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-go { font-size:.78rem; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--sp-navy); }<!-- [et_pb_line_break_holder] -->.sp-events a.sp-card:hover .sp-go { text-decoration:underline; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-more { margin-top:1.5rem; text-align:center; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-more a { display:inline-block; background:var(--sp-navy); color:#fff; font-weight:800;<!-- [et_pb_line_break_holder] -->  letter-spacing:.06em; text-transform:uppercase; font-size:.82rem; padding:.85rem 1.9rem;<!-- [et_pb_line_break_holder] -->  border-radius:999px; text-decoration:none; transition:background .18s ease; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-more a:hover, .sp-events .sp-more a:focus-visible { background:var(--sp-ink); color:#fff; text-decoration:none; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-events .sp-empty { padding:2rem 1rem; text-align:center; color:var(--sp-muted); font-size:.95rem; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Tablet (Divi's tablet breakpoint): 2 across, 4 events, then the button. *\/<!-- [et_pb_line_break_holder] -->@media (max-width:980px) {<!-- [et_pb_line_break_holder] -->  .sp-events .sp-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }<!-- [et_pb_line_break_holder] -->  .sp-events .sp-grid > .sp-card:nth-child(n+5) { display:none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Phone (Divi's mobile breakpoint): 1 across, 3 events, then the button. *\/<!-- [et_pb_line_break_holder] -->@media (max-width:767px) {<!-- [et_pb_line_break_holder] -->  .sp-events .sp-grid { grid-template-columns:minmax(0,1fr); }<!-- [et_pb_line_break_holder] -->  .sp-events .sp-grid > .sp-card:nth-child(n+4) { display:none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* To change how many show at each size, edit the three \"nth-child(n+N)\" numbers<!-- [et_pb_line_break_holder] -->   above. N is always one more than the number of events you want:<!-- [et_pb_line_break_holder] -->   n+7 = 6 events, n+5 = 4 events, n+4 = 3 events. *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* loading placeholders *\/<!-- [et_pb_line_break_holder] -->.sp-events .sp-skel { border:1px solid var(--sp-line); border-radius:var(--sp-radius); overflow:hidden; background:#fff; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-skel .sp-sk-img { aspect-ratio:3.58\/1; background:#eef0f6; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-skel .sp-sk-line { height:12px; margin:.85rem 1rem 0; border-radius:6px; background:#eef0f6; }<!-- [et_pb_line_break_holder] -->.sp-events .sp-skel .sp-sk-line.sp-short { width:55%; margin-bottom:1.1rem; }<!-- [et_pb_line_break_holder] -->@keyframes sp-pulse { 0%,100%{opacity:1} 50%{opacity:.5} }<!-- [et_pb_line_break_holder] -->.sp-events .sp-skel .sp-sk-img, .sp-events .sp-skel .sp-sk-line { animation:sp-pulse 1.4s ease-in-out infinite; }<!-- [et_pb_line_break_holder] -->@media (prefers-reduced-motion:reduce){<!-- [et_pb_line_break_holder] -->  .sp-events .sp-skel .sp-sk-img, .sp-events .sp-skel .sp-sk-line { animation:none }<!-- [et_pb_line_break_holder] -->  .sp-events a.sp-card { transition:none }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function () {<!-- [et_pb_line_break_holder] -->  if (window.__spEventsLoaded) { return; }<!-- [et_pb_line_break_holder] -->  window.__spEventsLoaded = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- configuration ---------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->  var CFG = {<!-- [et_pb_line_break_holder] -->    apiKey:  'AIzaSyAlk8TCoaD5AgTFAuG9e6QVnGPL-bwOILw',   \/\/ public web key from app.smashpark.com<!-- [et_pb_line_break_holder] -->    project: 'smash-park',<!-- [et_pb_line_break_holder] -->    appBase: 'https:\/\/app.smashpark.com',<!-- [et_pb_line_break_holder] -->    cacheMinutes: 15,<!-- [et_pb_line_break_holder] -->    venues: {<!-- [et_pb_line_break_holder] -->      'west-des-moines': { uid:'H2tYbiZh2SGdjCj6r9Jf', tz:'America\/Chicago'  },<!-- [et_pb_line_break_holder] -->      'la-vista':        { uid:'Aez3fKwytvLsox3gDfWC', tz:'America\/Chicago'  },<!-- [et_pb_line_break_holder] -->      'roseville':       { uid:'D2VKAp7DVyxLYquzx64p', tz:'America\/Chicago'  },<!-- [et_pb_line_break_holder] -->      'westerville':     { uid:'snmeWwrgw2QscjmMZ02S', tz:'America\/New_York' }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var FS = 'https:\/\/firestore.googleapis.com\/v1\/projects\/' + CFG.project +<!-- [et_pb_line_break_holder] -->           '\/databases\/(default)\/documents:runQuery?key=' + CFG.apiKey;<!-- [et_pb_line_break_holder] -->  var AUTH = 'https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signUp?key=' + CFG.apiKey;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- tiny helpers ----------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->  function el(tag, cls, text) {<!-- [et_pb_line_break_holder] -->    var n = document.createElement(tag);<!-- [et_pb_line_break_holder] -->    if (cls) n.className = cls;<!-- [et_pb_line_break_holder] -->    if (text != null) n.textContent = text;       \/\/ textContent = no HTML injection<!-- [et_pb_line_break_holder] -->    return n;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function store(kind) { try { return window[kind]; } catch (e) { return null; } }<!-- [et_pb_line_break_holder] -->  function cacheGet(key) {<!-- [et_pb_line_break_holder] -->    var s = store('localStorage'); if (!s) return null;<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      var o = JSON.parse(s.getItem(key) || 'null');<!-- [et_pb_line_break_holder] -->      if (o && (Date.now() - o.t) < CFG.cacheMinutes * 60000) return o.v;<!-- [et_pb_line_break_holder] -->    } catch (e) {}<!-- [et_pb_line_break_holder] -->    return null;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function cacheSet(key, v) {<!-- [et_pb_line_break_holder] -->    var s = store('localStorage'); if (!s) return;<!-- [et_pb_line_break_holder] -->    try { s.setItem(key, JSON.stringify({ t: Date.now(), v: v })); } catch (e) {}<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- guest sign-in (same thing the app does for logged-out visitors) --- *\/<!-- [et_pb_line_break_holder] -->  function getToken() {<!-- [et_pb_line_break_holder] -->    var ss = store('sessionStorage');<!-- [et_pb_line_break_holder] -->    if (ss) {<!-- [et_pb_line_break_holder] -->      try {<!-- [et_pb_line_break_holder] -->        var c = JSON.parse(ss.getItem('spEvToken') || 'null');<!-- [et_pb_line_break_holder] -->        if (c && c.exp > Date.now() + 60000) return Promise.resolve(c.tok);<!-- [et_pb_line_break_holder] -->      } catch (e) {}<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return fetch(AUTH, {<!-- [et_pb_line_break_holder] -->      method: 'POST',<!-- [et_pb_line_break_holder] -->      headers: { 'Content-Type': 'application\/json' },<!-- [et_pb_line_break_holder] -->      body: JSON.stringify({ returnSecureToken: true })<!-- [et_pb_line_break_holder] -->    }).then(function (r) {<!-- [et_pb_line_break_holder] -->      if (!r.ok) throw new Error('auth ' + r.status);<!-- [et_pb_line_break_holder] -->      return r.json();<!-- [et_pb_line_break_holder] -->    }).then(function (j) {<!-- [et_pb_line_break_holder] -->      if (ss) {<!-- [et_pb_line_break_holder] -->        try {<!-- [et_pb_line_break_holder] -->          ss.setItem('spEvToken', JSON.stringify({<!-- [et_pb_line_break_holder] -->            tok: j.idToken,<!-- [et_pb_line_break_holder] -->            exp: Date.now() + (parseInt(j.expiresIn || '3600', 10) * 1000)<!-- [et_pb_line_break_holder] -->          }));<!-- [et_pb_line_break_holder] -->        } catch (e) {}<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      return j.idToken;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- fetch upcoming events for one venue ------------------------------ *\/<!-- [et_pb_line_break_holder] -->  function fetchEvents(uid) {<!-- [et_pb_line_break_holder] -->    var cached = cacheGet('spEv_' + uid);<!-- [et_pb_line_break_holder] -->    if (cached) return Promise.resolve(cached);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return getToken().then(function (tok) {<!-- [et_pb_line_break_holder] -->      var body = {<!-- [et_pb_line_break_holder] -->        structuredQuery: {<!-- [et_pb_line_break_holder] -->          from: [{ collectionId: 'events' }],<!-- [et_pb_line_break_holder] -->          where: { compositeFilter: { op: 'AND', filters: [<!-- [et_pb_line_break_holder] -->            { fieldFilter: { field:{fieldPath:'locationUid'}, op:'EQUAL', value:{stringValue:uid} } },<!-- [et_pb_line_break_holder] -->            { fieldFilter: { field:{fieldPath:'public'},      op:'EQUAL', value:{booleanValue:true} } },<!-- [et_pb_line_break_holder] -->            { fieldFilter: { field:{fieldPath:'deleted'},     op:'EQUAL', value:{booleanValue:false} } },<!-- [et_pb_line_break_holder] -->            { fieldFilter: { field:{fieldPath:'end'}, op:'GREATER_THAN', value:{timestampValue:new Date().toISOString()} } }<!-- [et_pb_line_break_holder] -->          ]}},<!-- [et_pb_line_break_holder] -->          orderBy: [{ field:{fieldPath:'end'}, direction:'ASCENDING' }],<!-- [et_pb_line_break_holder] -->          limit: 60<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->      return fetch(FS, {<!-- [et_pb_line_break_holder] -->        method: 'POST',<!-- [et_pb_line_break_holder] -->        headers: { 'Content-Type': 'application\/json', 'Authorization': 'Bearer ' + tok },<!-- [et_pb_line_break_holder] -->        body: JSON.stringify(body)<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }).then(function (r) {<!-- [et_pb_line_break_holder] -->      if (!r.ok) throw new Error('query ' + r.status);<!-- [et_pb_line_break_holder] -->      return r.json();<!-- [et_pb_line_break_holder] -->    }).then(function (rows) {<!-- [et_pb_line_break_holder] -->      var out = (rows || [])<!-- [et_pb_line_break_holder] -->        .filter(function (x) { return x && x.document; })<!-- [et_pb_line_break_holder] -->        .map(function (x) { return flatten(x.document); })<!-- [et_pb_line_break_holder] -->        .filter(function (e) { return e.displayEvent !== false; });<!-- [et_pb_line_break_holder] -->      out.sort(function (a, b) { return a.start - b.start; });<!-- [et_pb_line_break_holder] -->      cacheSet('spEv_' + uid, out);<!-- [et_pb_line_break_holder] -->      return out;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- turn Firestore's typed JSON into plain values -------------------- *\/<!-- [et_pb_line_break_holder] -->  function val(v) {<!-- [et_pb_line_break_holder] -->    if (v == null) return null;<!-- [et_pb_line_break_holder] -->    if ('stringValue'    in v) return v.stringValue;<!-- [et_pb_line_break_holder] -->    if ('booleanValue'   in v) return v.booleanValue;<!-- [et_pb_line_break_holder] -->    if ('integerValue'   in v) return parseInt(v.integerValue, 10);<!-- [et_pb_line_break_holder] -->    if ('doubleValue'    in v) return v.doubleValue;<!-- [et_pb_line_break_holder] -->    if ('timestampValue' in v) return new Date(v.timestampValue).getTime();<!-- [et_pb_line_break_holder] -->    if ('nullValue'      in v) return null;<!-- [et_pb_line_break_holder] -->    if ('arrayValue'     in v) return ((v.arrayValue && v.arrayValue.values) || []).map(val);<!-- [et_pb_line_break_holder] -->    if ('mapValue'       in v) {<!-- [et_pb_line_break_holder] -->      var o = {}, f = (v.mapValue && v.mapValue.fields) || {};<!-- [et_pb_line_break_holder] -->      for (var k in f) o[k] = val(f[k]);<!-- [et_pb_line_break_holder] -->      return o;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return null;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function flatten(doc) {<!-- [et_pb_line_break_holder] -->    var o = {}, f = doc.fields || {};<!-- [et_pb_line_break_holder] -->    for (var k in f) o[k] = val(f[k]);<!-- [et_pb_line_break_holder] -->    o.id = doc.name.split('\/').pop();<!-- [et_pb_line_break_holder] -->    return o;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- formatting ------------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->  function parts(ms, tz) {<!-- [et_pb_line_break_holder] -->    var f = new Intl.DateTimeFormat('en-US', {<!-- [et_pb_line_break_holder] -->      timeZone: tz, month: 'short', day: 'numeric', weekday: 'short',<!-- [et_pb_line_break_holder] -->      hour: 'numeric', minute: '2-digit', hour12: true<!-- [et_pb_line_break_holder] -->    }).formatToParts(new Date(ms));<!-- [et_pb_line_break_holder] -->    var o = {};<!-- [et_pb_line_break_holder] -->    f.forEach(function (p) { o[p.type] = p.value; });<!-- [et_pb_line_break_holder] -->    return o;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function when(ev, tz) {<!-- [et_pb_line_break_holder] -->    var s = parts(ev.start, tz);<!-- [et_pb_line_break_holder] -->    var line = s.weekday + ', ' + s.month + ' ' + s.day + ' \u00b7 ' + s.hour + ':' + s.minute;<!-- [et_pb_line_break_holder] -->    if (ev.end) {<!-- [et_pb_line_break_holder] -->      var e = parts(ev.end, tz);<!-- [et_pb_line_break_holder] -->      var sameDay = (s.month === e.month && s.day === e.day);<!-- [et_pb_line_break_holder] -->      if (sameDay) {<!-- [et_pb_line_break_holder] -->        line += (s.dayPeriod === e.dayPeriod ? '' : ' ' + s.dayPeriod) +<!-- [et_pb_line_break_holder] -->                ' \u2013 ' + e.hour + ':' + e.minute + ' ' + e.dayPeriod;<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        line += ' ' + s.dayPeriod;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      line += ' ' + s.dayPeriod;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return line;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function money(cents) {<!-- [et_pb_line_break_holder] -->    if (cents % 100 === 0) return '$' + (cents \/ 100);<!-- [et_pb_line_break_holder] -->    return '$' + (cents \/ 100).toFixed(2);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- build one card --------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->  function card(ev, tz, venueUid) {<!-- [et_pb_line_break_holder] -->    var href = ev.externalRegistrationUrl ||<!-- [et_pb_line_break_holder] -->               (CFG.appBase + '\/' + venueUid + '\/events\/event-registration\/' + ev.id);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    var a = el('a', 'sp-card');<!-- [et_pb_line_break_holder] -->    a.href = href;<!-- [et_pb_line_break_holder] -->    a.target = '_blank';<!-- [et_pb_line_break_holder] -->    a.rel = 'noopener';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    var soldOut = (typeof ev.maxRegistrations === 'number') &&<!-- [et_pb_line_break_holder] -->                  (ev.currentRegistrations || 0) >= ev.maxRegistrations;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* image + date chip *\/<!-- [et_pb_line_break_holder] -->    var media = el('div', 'sp-media');<!-- [et_pb_line_break_holder] -->    if (ev.imageUrl) {<!-- [et_pb_line_break_holder] -->      var img = el('img');<!-- [et_pb_line_break_holder] -->      img.src = ev.imageUrl;<!-- [et_pb_line_break_holder] -->      img.alt = ev.name || 'Event';<!-- [et_pb_line_break_holder] -->      img.loading = 'lazy';<!-- [et_pb_line_break_holder] -->      img.decoding = 'async';<!-- [et_pb_line_break_holder] -->      img.addEventListener('error', function () {<!-- [et_pb_line_break_holder] -->        img.remove();<!-- [et_pb_line_break_holder] -->        media.appendChild(el('div', 'sp-fallback', ev.name || 'Event'));<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      media.appendChild(img);<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      media.appendChild(el('div', 'sp-fallback', ev.name || 'Event'));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    var p = parts(ev.start, tz);<!-- [et_pb_line_break_holder] -->    var chip = el('div', 'sp-date');<!-- [et_pb_line_break_holder] -->    chip.appendChild(el('span', 'sp-m', p.month));<!-- [et_pb_line_break_holder] -->    chip.appendChild(el('span', 'sp-d', p.day));<!-- [et_pb_line_break_holder] -->    media.appendChild(chip);<!-- [et_pb_line_break_holder] -->    if (soldOut) media.appendChild(el('span', 'sp-flag', 'Sold out'));<!-- [et_pb_line_break_holder] -->    a.appendChild(media);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* text *\/<!-- [et_pb_line_break_holder] -->    var body = el('div', 'sp-body');<!-- [et_pb_line_break_holder] -->    body.appendChild(el('h3', 'sp-title', ev.name || 'Event'));<!-- [et_pb_line_break_holder] -->    body.appendChild(el('p', 'sp-when', when(ev, tz)));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    var foot = el('div', 'sp-foot');<!-- [et_pb_line_break_holder] -->    var cents = (typeof ev.standardPrice === 'number') ? ev.standardPrice : 0;<!-- [et_pb_line_break_holder] -->    var priceCls = 'sp-price' + (soldOut ? ' sp-out' : (cents > 0 ? ' sp-paid' : ''));<!-- [et_pb_line_break_holder] -->    foot.appendChild(el('span', priceCls, soldOut ? 'Sold out' : (cents > 0 ? money(cents) : 'Free')));<!-- [et_pb_line_break_holder] -->    foot.appendChild(el('span', 'sp-go',<!-- [et_pb_line_break_holder] -->      soldOut ? 'Details' : (ev.eventType === 'event' ? 'Register' : 'Details')));<!-- [et_pb_line_break_holder] -->    body.appendChild(foot);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    a.appendChild(body);<!-- [et_pb_line_break_holder] -->    return a;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* ---- render one container --------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->  function render(box) {<!-- [et_pb_line_break_holder] -->    var slug  = (box.getAttribute('data-location') || '').trim().toLowerCase();<!-- [et_pb_line_break_holder] -->    var venue = CFG.venues[slug];<!-- [et_pb_line_break_holder] -->    if (!venue) {<!-- [et_pb_line_break_holder] -->      box.style.display = 'none';<!-- [et_pb_line_break_holder] -->      if (window.console) console.warn('[Smash Park events] Unknown data-location: \"' + slug +<!-- [et_pb_line_break_holder] -->        '\". Use one of: ' + Object.keys(CFG.venues).join(', '));<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    var limit   = parseInt(box.getAttribute('data-limit') || '6', 10);<!-- [et_pb_line_break_holder] -->    var heading = box.getAttribute('data-heading');<!-- [et_pb_line_break_holder] -->    var ctaText = box.getAttribute('data-cta') || 'See all events';<!-- [et_pb_line_break_holder] -->    if (heading == null) heading = 'Upcoming Events';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    box.textContent = '';<!-- [et_pb_line_break_holder] -->    if (heading) box.appendChild(el('h2', 'sp-heading', heading));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    var grid = el('div', 'sp-grid');<!-- [et_pb_line_break_holder] -->    box.appendChild(grid);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/* loading placeholders *\/<!-- [et_pb_line_break_holder] -->    var n = (limit > 0 ? Math.min(limit, 3) : 3);<!-- [et_pb_line_break_holder] -->    for (var i = 0; i < n; i++) {<!-- [et_pb_line_break_holder] -->      var sk = el('div', 'sp-skel');<!-- [et_pb_line_break_holder] -->      sk.appendChild(el('div', 'sp-sk-img'));<!-- [et_pb_line_break_holder] -->      sk.appendChild(el('div', 'sp-sk-line'));<!-- [et_pb_line_break_holder] -->      sk.appendChild(el('div', 'sp-sk-line sp-short'));<!-- [et_pb_line_break_holder] -->      grid.appendChild(sk);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    fetchEvents(venue.uid).then(function (events) {<!-- [et_pb_line_break_holder] -->      grid.textContent = '';<!-- [et_pb_line_break_holder] -->      var list = (limit > 0) ? events.slice(0, limit) : events;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (!list.length) {<!-- [et_pb_line_break_holder] -->        box.textContent = '';<!-- [et_pb_line_break_holder] -->        if (heading) box.appendChild(el('h2', 'sp-heading', heading));<!-- [et_pb_line_break_holder] -->        box.appendChild(el('div', 'sp-empty', 'No events scheduled right now \u2014 check back soon.'));<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        list.forEach(function (ev) { grid.appendChild(card(ev, venue.tz, venue.uid)); });<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (ctaText) {<!-- [et_pb_line_break_holder] -->        var more = el('div', 'sp-more');<!-- [et_pb_line_break_holder] -->        var link = el('a', null, ctaText);<!-- [et_pb_line_break_holder] -->        link.href = CFG.appBase + '\/' + venue.uid + '\/events';<!-- [et_pb_line_break_holder] -->        link.target = '_blank';<!-- [et_pb_line_break_holder] -->        link.rel = 'noopener';<!-- [et_pb_line_break_holder] -->        more.appendChild(link);<!-- [et_pb_line_break_holder] -->        box.appendChild(more);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    })['catch'](function (err) {<!-- [et_pb_line_break_holder] -->      \/* never show a broken section to a customer *\/<!-- [et_pb_line_break_holder] -->      box.style.display = 'none';<!-- [et_pb_line_break_holder] -->      if (window.console) console.warn('[Smash Park events] ' + err.message);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function start() {<!-- [et_pb_line_break_holder] -->    var boxes = document.querySelectorAll('.sp-events');<!-- [et_pb_line_break_holder] -->    for (var i = 0; i < boxes.length; i++) render(boxes[i]);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (document.readyState === 'loading') {<!-- [et_pb_line_break_holder] -->    document.addEventListener('DOMContentLoaded', start);<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    start();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#263C8D&#8221; custom_padding=&#8221;6px||4px|||&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<!--<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->  SMASH PARK  \/  PRIVATE EVENTS &#038; PARTIES  \/  Roseville<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  A quieter rebuild of the same section. Every piece of content you had is<!-- [et_pb_line_break_holder] -->  still here \u2014 all nine party tags, all four photos, the holiday offer, the<!-- [et_pb_line_break_holder] -->  reviews, both buttons. What changed is how much of it is shouting.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  WHAT I TOOK OUT  (and how to put any of it back)<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  1. THE TAGS NO LONGER SCROLL.<!-- [et_pb_line_break_holder] -->     They were a marquee: the same nine tags duplicated and animated past on<!-- [et_pb_line_break_holder] -->     a loop, in alternating yellow and teal filled bubbles. That was 18 bright<!-- [et_pb_line_break_holder] -->     moving objects directly above four photographs, and the two were fighting<!-- [et_pb_line_break_holder] -->     each other. They are now nine quiet outlined chips that simply sit there<!-- [et_pb_line_break_holder] -->     and wrap onto two lines. Same nine words, no motion, no second copy.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  2. THE REVIEWS ARE GONE.<!-- [et_pb_line_break_holder] -->     They started as two bordered cards, each with its own row of five stars.<!-- [et_pb_line_break_holder] -->     That was a lot of furniture for two sentences, so they became one line \u2014<!-- [et_pb_line_break_holder] -->     and now they are out altogether. If you want social proof back here<!-- [et_pb_line_break_holder] -->     later, one line above the buttons is the shape that worked; the quotes<!-- [et_pb_line_break_holder] -->     are still on your \/roseville\/party\/ page.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  3. THE OFFER IS ONE BAND INSTEAD OF A STACKED CARD.<!-- [et_pb_line_break_holder] -->     Flag, title, link, paragraph and fine print were five stacked elements.<!-- [et_pb_line_break_holder] -->     They are now one row with the fine print tucked under it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  4. COLOUR: FIVE DOWN TO THREE.<!-- [et_pb_line_break_holder] -->     Dark blue, yellow and orange do all the work. Teal and green now appear<!-- [et_pb_line_break_holder] -->     only in the 4px signature band across the top edge, so the section keeps<!-- [et_pb_line_break_holder] -->     its link to the rest of the page without using those colours as noise.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW TO INSTALL  (no developer needed)<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  1. Edit smashpark.com\/roseville\/ in Divi.<!-- [et_pb_line_break_holder] -->  2. Select the existing Private Events section and delete it.<!-- [et_pb_line_break_holder] -->  3. Add a Code module in its place and paste this ENTIRE file in.<!-- [et_pb_line_break_holder] -->  4. In the row settings: Design > Sizing > &#8220;Make This Row Fullwidth&#8221; = YES,<!-- [et_pb_line_break_holder] -->     and Design > Spacing > all padding 0. The photos run edge to edge.<!-- [et_pb_line_break_holder] -->  5. Save.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  No JavaScript at all now \u2014 the marquee was the only thing that needed it.<!-- [et_pb_line_break_holder] -->  Everything here is plain HTML and CSS you can edit in the Code box.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE HOLIDAY OFFER \u2014 THIS ONE HAS A DEADLINE<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  Copy is from your \/roseville\/holiday-party\/ page. &#8220;Oct 31&#8221; appears TWICE,<!-- [et_pb_line_break_holder] -->  in the flag and in the fine print. When that date passes, either update both<!-- [et_pb_line_break_holder] -->  or delete the whole <\/p>\n<div class=\"sp-pe-offer\"> &#8230; <\/div>\n<p> block. It is marked<!-- [et_pb_line_break_holder] -->  in the code and nothing else depends on it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THIS SECTION STAYS GENERAL<!-- [et_pb_line_break_holder] -->  It does not list the instant-book packages or their prices. Both ways in \u2014<!-- [et_pb_line_break_holder] -->  book it yourself, or work with a planner \u2014 live on \/book-a-party\/, and the<!-- [et_pb_line_break_holder] -->  one button here goes there. That means you can rework that page, change<!-- [et_pb_line_break_holder] -->  prices or change which packages are instant-bookable, without touching this<!-- [et_pb_line_break_holder] -->  section at all. Nothing is stated in two places, so the two cannot disagree.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE HOLIDAY BAND LINKS TO THE HOLIDAY PAGE<!-- [et_pb_line_break_holder] -->  The whole orange band is a link to \/roseville\/holiday-party\/, and it now<!-- [et_pb_line_break_holder] -->  says &#8220;Learn more&#8221; so people can see there is more to read rather than<!-- [et_pb_line_break_holder] -->  having to discover it by tapping. For the other venues, point it at that<!-- [et_pb_line_break_holder] -->  venue&#8217;s own holiday-party page.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE PHOTOS \u2014 UPLOAD THESE THREE FIRST<!-- [et_pb_line_break_holder] -->  The three you sent, cropped to 1200&#215;900 and saved as JPEGs:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      party-holiday-sweaters.jpg    217 KB  (was 4.9 MB)<!-- [et_pb_line_break_holder] -->      party-grazing-platter.jpg     220 KB  (was 1.3 MB)<!-- [et_pb_line_break_holder] -->      party-smores-bar.jpg          180 KB  (was 1.0 MB)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  617 KB for all three, down from 7.2 MB. The originals would have been a<!-- [et_pb_line_break_holder] -->  real drag on this page for no visible gain at the size these tiles render.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  Upload all three to THIS site&#8217;s Media Library (Media > Add New), then check<!-- [et_pb_line_break_holder] -->  the three URLs in the markup match. If WordPress renames one because a file<!-- [et_pb_line_break_holder] -->  of that name already exists, paste the real URL over it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  The s&#8217;mores shot is cropped slightly off-centre on purpose \u2014 the faces and<!-- [et_pb_line_break_holder] -->  the flame sit in the upper half, so a straight centre crop cut the heads.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW IT RESPONDS<!-- [et_pb_line_break_holder] -->    Desktop   three photos across<!-- [et_pb_line_break_holder] -->    Tablet    photos two across, the third below<!-- [et_pb_line_break_holder] -->    Phone     photos two across, smaller tags, buttons full width<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"sp-pe\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ INTRO ============ --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-pe-in\"><!-- [et_pb_line_break_holder] -->    <span class=\"sp-pe-eyebrow\">Private events &#038; parties<\/span><!-- [et_pb_line_break_holder] -->    <!-- EDIT \u2014 headline and the line under it --><!-- [et_pb_line_break_holder] -->    <\/p>\n<h2 class=\"sp-pe-title\">Your party.<!\u2013- [et_pb_br_holder] -\u2013>Our playground.<\/h2>\n<p><!-- [et_pb_line_break_holder] -->    <pee class=\"sp-pe-lede\">Action-packed events, flexible spaces and scratch-driven catering \u2014<!-- [et_pb_line_break_holder] -->      the premier event venue in Roseville, MN.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ THE EVENT TAGS ============<!-- [et_pb_line_break_holder] -->       One line, scrolling. The row is written TWICE \u2014 the second copy is<!-- [et_pb_line_break_holder] -->       hidden from screen readers and exists only so the loop can restart<!-- [et_pb_line_break_holder] -->       without a visible jump. EDIT BOTH COPIES if you change the list. &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-pe-tagbar\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"sp-pe-tagtrack\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<ul class=\"sp-pe-tags\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Kids birthdays<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Corporate events<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Team building<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Holiday parties<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Wedding parties<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Fundraisers<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Group Happy Hours<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Post-prom<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Celebrations<\/li>\n<p><!-- [et_pb_line_break_holder] -->      <\/ul>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<ul class=\"sp-pe-tags\" aria-hidden=\"true\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Kids birthdays<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Corporate events<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Team building<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Holiday parties<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Wedding parties<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Fundraisers<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Group Happy Hours<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Post-prom<\/li>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<li>Celebrations<\/li>\n<p><!-- [et_pb_line_break_holder] -->      <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ PHOTOS ============ --><!-- [et_pb_line_break_holder] -->  <!-- EDIT \u2014 three party shots. Upload these to THIS site's Media Library<!-- [et_pb_line_break_holder] -->       first (Media > Add New) and check each URL matches. If WordPress<!-- [et_pb_line_break_holder] -->       renames a file because one of that name already exists, paste the real<!-- [et_pb_line_break_holder] -->       URL over it. Keep the alt text accurate: it is what a screen reader<!-- [et_pb_line_break_holder] -->       and Google read. &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-pe-shots\"><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/10\/party-holiday-sweaters.jpg\"<!-- [et_pb_line_break_holder] -->         alt=&#8221;A group in holiday sweaters sharing beers and appetizers at an office party&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/10\/party-grazing-platter.jpg\"<!-- [et_pb_line_break_holder] -->         alt=&#8221;A grazing platter of charcuterie, cheese and fresh fruit&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/10\/party-smores-bar.jpg\"<!-- [et_pb_line_break_holder] -->         alt=&#8221;Guests toasting marshmallows at the s\u2019mores bar&#8221; loading=&#8221;lazy&#8221; decoding=&#8221;async&#8221;><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ====== HOLIDAY OFFER \u2014 DELETE THIS WHOLE BLOCK AFTER OCT 31 ====== --><!-- [et_pb_line_break_holder] -->  <a class=\"sp-pe-offer\" href=\"https:\/\/smashpark.com\/roseville\/holiday-party\/\"><!-- [et_pb_line_break_holder] -->    <span class=\"sp-pe-offer-row\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT \u2014 the deadline appears here AND in the fine print below --><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pe-flag\">Book by Oct 31<\/span><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pe-offer-text\"><!-- [et_pb_line_break_holder] -->        <strong>Holiday Perk Bundle<\/strong> \u2014 one perk on the house, plus a $200 credit toward your next event.<!-- [et_pb_line_break_holder] -->      <\/span><!-- [et_pb_line_break_holder] -->      <span class=\"sp-pe-offer-go\">Learn more \u2192<\/span><!-- [et_pb_line_break_holder] -->    <\/span><!-- [et_pb_line_break_holder] -->    <span class=\"sp-pe-fine\">Groups up to 75. Booked by Oct 31, 2026, hosted Nov 1 \u2013 Jan 31. $200 credit valid<!-- [et_pb_line_break_holder] -->      on events of $500+ hosted Feb 1 \u2013 May 1, 2027. Some exclusions apply.<\/span><!-- [et_pb_line_break_holder] -->  <\/a><!-- [et_pb_line_break_holder] -->  <!-- ====== END OF HOLIDAY OFFER ====== --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ BUTTONS ============ --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-pe-foot\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"sp-pe-acts\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT \u2014 buttons. Both paths live on the book-a-party page: the<!-- [et_pb_line_break_holder] -->           instant-book packages and the planner form are both there, so this<!-- [et_pb_line_break_holder] -->           one button covers everyone and that page can change without this<!-- [et_pb_line_break_holder] -->           section needing to. &#8211;><!-- [et_pb_line_break_holder] -->      <a class=\"sp-pe-btn\" href=\"https:\/\/smashpark.com\/roseville\/book-a-party\/\">Book a party<\/a><!-- [et_pb_line_break_holder] -->      <a class=\"sp-pe-link\" href=\"https:\/\/smashpark.com\/roseville\/party\/\">See the spaces &#038; catering<\/a><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->\/* ---------------------------------------------------------------------------<!-- [et_pb_line_break_holder] -->   Everything is prefixed .sp-pe so it cannot collide with Divi's own styles,<!-- [et_pb_line_break_holder] -->   or with any other module on the page.<!-- [et_pb_line_break_holder] -->--------------------------------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->.sp-pe {<!-- [et_pb_line_break_holder] -->  --pe-ink:    #1c2551;   \/* the DARK blue. No longer the background \u2014 it is now<!-- [et_pb_line_break_holder] -->                             only used for text and chips that sit on top of a<!-- [et_pb_line_break_holder] -->                             bright shape (the yellow button, the orange band).<!-- [et_pb_line_break_holder] -->                             Keep it dark: that is the whole job it does. *\/<!-- [et_pb_line_break_holder] -->  --pe-bg:     #263c8d;   \/* the section background *\/<!-- [et_pb_line_break_holder] -->  --pe-yellow: #fed614;   \/* the one loud accent: button, eyebrow, photo dividers *\/<!-- [et_pb_line_break_holder] -->  --pe-orange: #d98324;   \/* the seasonal offer ONLY \u2014 the one thing with a deadline *\/<!-- [et_pb_line_break_holder] -->  --pe-teal:   #5bb3a4;   \/* top signature band only *\/<!-- [et_pb_line_break_holder] -->  --pe-green:  #587d71;   \/* top signature band only *\/<!-- [et_pb_line_break_holder] -->  --pe-blue:   #263c8d;   \/* the lighter blue the booking tiles sit on \u2014 same<!-- [et_pb_line_break_holder] -->                             one the hero's hours strip and the Play\/Drink\/Eat<!-- [et_pb_line_break_holder] -->                             tiles use, so the three sections agree *\/<!-- [et_pb_line_break_holder] -->  --pe-soft:   #d6dcf2;   \/* body copy on dark blue *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* The site's three typefaces, exactly as the theme declares them.<!-- [et_pb_line_break_holder] -->     Aquino = brand voice and headings, Bebas Neue = section headings,<!-- [et_pb_line_break_holder] -->     Quicksand = body copy. Set explicitly because a Code module inherits<!-- [et_pb_line_break_holder] -->     the theme's UI font (effra), not the brand font. *\/<!-- [et_pb_line_break_holder] -->  --font-display: Aquino, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-body:    Quicksand, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] -->  \/* Bebas Neue is the site's third face. Nothing in this section uses it now<!-- [et_pb_line_break_holder] -->     (it carried the prices on the booking tiles, which have moved out), so it<!-- [et_pb_line_break_holder] -->     is not declared here. If you want it back for a sub-heading, add:<!-- [et_pb_line_break_holder] -->         --font-head: \"Bebas Neue\", Impact, Haettenschweiler, sans-serif;  *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  --pe-col: 1080px;       \/* matches the content column of your page *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  width: 100%;<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  background: var(--pe-bg);<!-- [et_pb_line_break_holder] -->  padding: 0 0 44px;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe *, .sp-pe *::before, .sp-pe *::after { box-sizing: border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* The 4px band of the four brand colours across the very top edge. This is<!-- [et_pb_line_break_holder] -->   the only place teal and green appear now. Delete this rule to remove it. *\/<!-- [et_pb_line_break_holder] -->.sp-pe::before {<!-- [et_pb_line_break_holder] -->  content: \"\";<!-- [et_pb_line_break_holder] -->  position: absolute; top: 0; left: 0; right: 0; height: 4px;<!-- [et_pb_line_break_holder] -->  background: linear-gradient(to right,<!-- [et_pb_line_break_holder] -->    var(--pe-yellow) 0 25%, var(--pe-teal)   25% 50%,<!-- [et_pb_line_break_holder] -->    var(--pe-orange) 50% 75%, var(--pe-green) 75% 100%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- intro ---- *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-in {<!-- [et_pb_line_break_holder] -->  max-width: var(--pe-col);<!-- [et_pb_line_break_holder] -->  margin: 0 auto;<!-- [et_pb_line_break_holder] -->  padding: 52px 22px 26px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-eyebrow {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  font-size: .76rem; font-weight: 700; letter-spacing: .18em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: var(--pe-yellow);<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe h2.sp-pe-title {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  margin: 0 0 16px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: clamp(2.1rem, 4.4vw, 3.3rem);<!-- [et_pb_line_break_holder] -->  line-height: .98; font-weight: 700; letter-spacing: normal;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* padding:0 because Divi puts padding-bottom:1em on every <pee> on the site *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-lede {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  margin: 0; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: 1.02rem; line-height: 1.55; font-weight: 400;<!-- [et_pb_line_break_holder] -->  color: var(--pe-soft); max-width: 58ch;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the event tags: one line, scrolling ------------------------------<!-- [et_pb_line_break_holder] -->   The nine tags run as a single line rather than wrapping onto two. The row<!-- [et_pb_line_break_holder] -->   is duplicated and the track slides exactly half its width, so copy two is<!-- [et_pb_line_break_holder] -->   sitting where copy one started at the moment it resets \u2014 the loop has no<!-- [et_pb_line_break_holder] -->   visible seam.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->   The chips are outlined, not filled. The earlier version alternated solid<!-- [et_pb_line_break_holder] -->   yellow and teal, which put a line of bright moving objects directly above<!-- [et_pb_line_break_holder] -->   four photographs and made the two fight. Outlined keeps them legible and<!-- [et_pb_line_break_holder] -->   lets the photos win.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->   The edges fade out rather than the row being cut off at the screen edge \u2014<!-- [et_pb_line_break_holder] -->   that is the mask-image line, and it is what stops the band looking like it<!-- [et_pb_line_break_holder] -->   has been chopped.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->   TO CHANGE THE SPEED: the 38s below. Bigger number = slower. *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-tagbar {<!-- [et_pb_line_break_holder] -->  overflow: hidden;<!-- [et_pb_line_break_holder] -->  padding: 2px 0 34px;<!-- [et_pb_line_break_holder] -->  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%);<!-- [et_pb_line_break_holder] -->          mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-tagtrack {<!-- [et_pb_line_break_holder] -->  display: flex;<!-- [et_pb_line_break_holder] -->  width: max-content;<!-- [et_pb_line_break_holder] -->  animation: sp-pe-marquee 38s linear infinite;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* pause it while someone is reading or tabbing through *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-tagbar:hover .sp-pe-tagtrack,<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-tagbar:focus-within .sp-pe-tagtrack { animation-play-state: paused; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@keyframes sp-pe-marquee {<!-- [et_pb_line_break_holder] -->  from { transform: translateX(0); }<!-- [et_pb_line_break_holder] -->  to   { transform: translateX(-50%); }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-pe ul.sp-pe-tags {<!-- [et_pb_line_break_holder] -->  list-style: none;<!-- [et_pb_line_break_holder] -->  margin: 0; padding: 0 5px 0 0;<!-- [et_pb_line_break_holder] -->  display: flex; flex-wrap: nowrap; gap: 9px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe ul.sp-pe-tags li {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  margin: 0; padding: 7px 15px;<!-- [et_pb_line_break_holder] -->  font-size: .78rem; font-weight: 700; letter-spacing: .04em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--pe-soft);<!-- [et_pb_line_break_holder] -->  \/* .42, not .24. The outline is the only thing that makes these read as<!-- [et_pb_line_break_holder] -->     chips, so it has to clear 3:1 against whatever is behind it. On the old<!-- [et_pb_line_break_holder] -->     near-black background .24 was already thin at 2.2:1; on this lighter<!-- [et_pb_line_break_holder] -->     blue it drops to 1.9:1 and the chips effectively dissolve. .42 puts it<!-- [et_pb_line_break_holder] -->     at 3.1:1. *\/<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(255,255,255,.42);<!-- [et_pb_line_break_holder] -->  border-radius: 100px;<!-- [et_pb_line_break_holder] -->  white-space: nowrap;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the photos ---- *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-shots {<!-- [et_pb_line_break_holder] -->  display: grid;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(3, minmax(0, 1fr));<!-- [et_pb_line_break_holder] -->  gap: 3px;                      \/* the gap IS the yellow divider *\/<!-- [et_pb_line_break_holder] -->  background: var(--pe-yellow);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-shots img {<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  width: 100%; height: 300px;<!-- [et_pb_line_break_holder] -->  object-fit: cover; object-position: center;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- the holiday offer -----------------------------------------------<!-- [et_pb_line_break_holder] -->   One row rather than a stacked card. The whole band is the link, so there<!-- [et_pb_line_break_holder] -->   is no separate button to look at. Orange is used here and nowhere else,<!-- [et_pb_line_break_holder] -->   which is what makes it read as \"this one expires\". *\/<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-offer {<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  max-width: var(--pe-col);<!-- [et_pb_line_break_holder] -->  margin: 30px auto 0;<!-- [et_pb_line_break_holder] -->  padding: 16px 20px;<!-- [et_pb_line_break_holder] -->  background: var(--pe-orange);<!-- [et_pb_line_break_holder] -->  border-radius: 6px;<!-- [et_pb_line_break_holder] -->  text-decoration: none;<!-- [et_pb_line_break_holder] -->  transition: filter .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-offer:hover,<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-offer:focus-visible { filter: brightness(1.07); text-decoration: none; }<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-offer-row {<!-- [et_pb_line_break_holder] -->  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-flag {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  flex: none;<!-- [et_pb_line_break_holder] -->  background: var(--pe-ink); color: #ffffff;<!-- [et_pb_line_break_holder] -->  font-size: .68rem; font-weight: 700; letter-spacing: .09em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 5px 11px; border-radius: 100px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-offer-text {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  flex: 1 1 320px;<!-- [et_pb_line_break_holder] -->  font-size: .95rem; line-height: 1.4; font-weight: 400;<!-- [et_pb_line_break_holder] -->  color: var(--pe-ink);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-offer-text strong { font-weight: 700; }<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-offer-go {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  flex: none;<!-- [et_pb_line_break_holder] -->  font-size: .78rem; font-weight: 700; letter-spacing: .06em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: var(--pe-ink);<!-- [et_pb_line_break_holder] -->  border-bottom: 2px solid rgba(28,37,81,.45); padding-bottom: 1px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-fine {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  margin-top: 9px;<!-- [et_pb_line_break_holder] -->  font-size: .7rem; line-height: 1.45; font-weight: 400;<!-- [et_pb_line_break_holder] -->  color: rgba(28,37,81,.8);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- proof and buttons ---- *\/<!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-foot {<!-- [et_pb_line_break_holder] -->  max-width: var(--pe-col);<!-- [et_pb_line_break_holder] -->  margin: 0 auto;<!-- [et_pb_line_break_holder] -->  padding: 30px 22px 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-pe .sp-pe-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-btn {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  display: inline-block;<!-- [et_pb_line_break_holder] -->  background: var(--pe-yellow); color: var(--pe-ink);<!-- [et_pb_line_break_holder] -->  font-size: .95rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 16px 30px; border-radius: 4px; text-decoration: none;<!-- [et_pb_line_break_holder] -->  transition: background .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-btn:hover,<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-btn:focus-visible { background: #ffe25c; color: var(--pe-ink); text-decoration: none; }<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-link {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  display: inline-block;<!-- [et_pb_line_break_holder] -->  color: #ffffff;<!-- [et_pb_line_break_holder] -->  font-size: .95rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 14px 26px; border-radius: 4px; text-decoration: none;<!-- [et_pb_line_break_holder] -->  box-shadow: inset 0 0 0 2px rgba(255,255,255,.5);<!-- [et_pb_line_break_holder] -->  transition: box-shadow .18s ease, background .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-link:hover,<!-- [et_pb_line_break_holder] -->.sp-pe a.sp-pe-link:focus-visible {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,.1); box-shadow: inset 0 0 0 2px #ffffff;<!-- [et_pb_line_break_holder] -->  color: #ffffff; text-decoration: none;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-pe a:focus-visible { outline: 3px solid var(--pe-yellow); outline-offset: 3px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- tablet ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 980px) {<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-in { padding: 42px 22px 28px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-shots { grid-template-columns: repeat(2, minmax(0, 1fr)); }<!-- [et_pb_line_break_holder] -->  \/* THREE photos in a TWO column grid leaves an empty fourth cell, and the<!-- [et_pb_line_break_holder] -->     grid's yellow background shows straight through it as a solid block.<!-- [et_pb_line_break_holder] -->     The third photo spans both columns instead, which fills the row and<!-- [et_pb_line_break_holder] -->     gives that shot a wider moment. If you ever go to four photos again,<!-- [et_pb_line_break_holder] -->     delete this line. *\/<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-shots img:nth-child(3) { grid-column: 1 \/ -1; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-shots img { height: 240px; }<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-offer { margin-left: 22px; margin-right: 22px; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- phone ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 767px) {<!-- [et_pb_line_break_holder] -->  .sp-pe { padding-bottom: 36px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-in { padding: 34px 20px 24px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-lede { font-size: .96rem; margin-bottom: 22px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-tagbar { padding-bottom: 26px; }<!-- [et_pb_line_break_holder] -->  .sp-pe ul.sp-pe-tags { gap: 7px; }<!-- [et_pb_line_break_holder] -->  .sp-pe ul.sp-pe-tags li { font-size: .71rem; padding: 6px 12px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-shots img { height: 180px; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-shots img:nth-child(3) { height: 200px; }   \/* the full-width one *\/<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-offer { margin-left: 20px; margin-right: 20px; padding: 15px 17px; }<!-- [et_pb_line_break_holder] -->  \/* \"Learn more\" stays visible on a phone. The whole band is still the link,<!-- [et_pb_line_break_holder] -->     but with the holiday page as its own destination people need to SEE that<!-- [et_pb_line_break_holder] -->     there is more to read, not just discover it by tapping. *\/<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-offer-go { font-size: .74rem; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-foot { padding: 26px 20px 0; }<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-btn, .sp-pe a.sp-pe-link { width: 100%; text-align: center; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- respect a reduced-motion preference ---------------------------------<!-- [et_pb_line_break_holder] -->   This matters more than it looks. Constant motion makes some people<!-- [et_pb_line_break_holder] -->   genuinely unwell, so for anyone who has asked their system to reduce it<!-- [et_pb_line_break_holder] -->   the row stops dead and becomes scrollable by hand instead \u2014 they still<!-- [et_pb_line_break_holder] -->   get all nine tags, they just move them themselves. *\/<!-- [et_pb_line_break_holder] -->@media (prefers-reduced-motion: reduce) {<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-tagtrack { animation: none; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-tagbar { overflow-x: auto; }<!-- [et_pb_line_break_holder] -->  .sp-pe .sp-pe-tagbar .sp-pe-tags[aria-hidden=\"true\"] { display: none; }<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-offer,<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-btn,<!-- [et_pb_line_break_holder] -->  .sp-pe a.sp-pe-link { transition: none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; theme_builder_area=&#8221;post_content&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_text=&#8221;Fundraising&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/10\/Fundraising.png&#8221; parallax=&#8221;on&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243; custom_padding=&#8221;0px||10px|||&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; theme_builder_area=&#8221;post_content&#8221; custom_padding=&#8221;||13px|||&#8221;][et_pb_column _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; type=&#8221;4_4&#8243; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; theme_builder_area=&#8221;post_content&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243; custom_padding=&#8221;0px|||||&#8221;]<!--<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->  SMASH PARK  \/  SERVE LOCAL  \/  Roseville<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  A centred block with a transparent background, built to sit on top of YOUR<!-- [et_pb_line_break_holder] -->  parallax image. One statement, two ways in.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW TO PUT THE PARALLAX IMAGE BEHIND IT<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  This module deliberately has NO background of its own, so whatever you set<!-- [et_pb_line_break_holder] -->  on the Divi section shows straight through.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    1. Edit smashpark.com\/roseville\/ in Divi.<!-- [et_pb_line_break_holder] -->    2. Add a standard Section, then a Code module inside it, and paste this<!-- [et_pb_line_break_holder] -->       ENTIRE file into the Code module.<!-- [et_pb_line_break_holder] -->    3. Row settings: Design > Sizing > &#8220;Make This Row Fullwidth&#8221; = YES, and<!-- [et_pb_line_break_holder] -->       Design > Spacing > all padding 0.<!-- [et_pb_line_break_holder] -->    4. SECTION settings > Background > Image: choose your photo, then set<!-- [et_pb_line_break_holder] -->       &#8220;Use Parallax Effect&#8221; = YES.<!-- [et_pb_line_break_holder] -->    5. Save.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  ON THE PARALLAX METHOD \u2014 PICK &#8220;TRUE PARALLAX&#8221;, NOT &#8220;CSS&#8221;<!-- [et_pb_line_break_holder] -->  Divi offers two. The CSS method uses background-attachment: fixed, which<!-- [et_pb_line_break_holder] -->  iOS Safari has never supported properly: the image jumps, or freezes, or<!-- [et_pb_line_break_holder] -->  renders at the wrong size. True Parallax is JavaScript and behaves on<!-- [et_pb_line_break_holder] -->  phones. Given most of your traffic is mobile, that is the one to use.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE DARK PANEL BEHIND THE WORDS IS NOT DECORATION<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  It is what stops the text becoming unreadable over a bright patch of your<!-- [et_pb_line_break_holder] -->  photo, and the opacity is not a guess. I tested every colour here against<!-- [et_pb_line_break_holder] -->  the worst case \u2014 a pure white photo behind it \u2014 because whatever survives<!-- [et_pb_line_break_holder] -->  that survives anything you choose:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      headline, white      8.9:1   (needs 4.5)<!-- [et_pb_line_break_holder] -->      body copy            8.2:1   (needs 4.5)<!-- [et_pb_line_break_holder] -->      teal rule            3.6:1   (needs 3.0, it is a shape not text)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  ONE THING I CHANGED FOR THIS REASON: the &#8220;Serve Local&#8221; label used to be<!-- [et_pb_line_break_holder] -->  teal. Over a white photo teal only reaches 3.1:1, under the 4.5:1 that<!-- [et_pb_line_break_holder] -->  small text needs, and fixing it would have meant pushing the panel to 92%<!-- [et_pb_line_break_holder] -->  opacity \u2014 which would have hidden your parallax almost completely. So the<!-- [et_pb_line_break_holder] -->  label is white, and teal became the BORDER instead, where 3:1 is the bar<!-- [et_pb_line_break_holder] -->  because it is a shape rather than something you read. Serve Local keeps its<!-- [et_pb_line_break_holder] -->  colour, you keep your photo, and the box gets a hard edge out of it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  IF YOU WANT MORE OF THE PHOTO: lower the .84 in &#8211;sl-scrim. Going below<!-- [et_pb_line_break_holder] -->  about .80 starts to put the body copy at risk over a light image.<!-- [et_pb_line_break_holder] -->  IF YOUR PHOTO IS BUSY OR BRIGHT: raise it toward .90.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  ONE BUTTON<!-- [et_pb_line_break_holder] -->      Learn more   \/roseville\/rally-and-raise\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  This section&#8217;s job is to make someone curious, not to close them. The<!-- [et_pb_line_break_holder] -->  booking form lives on that page directly under the explanation, which is<!-- [et_pb_line_break_holder] -->  where someone wants it once they know what the program actually is.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  IF YOU EVER WANT A SECOND, STRAIGHT-TO-FORM BUTTON: that page&#8217;s own &#8220;Book a<!-- [et_pb_line_break_holder] -->  Fundraiser&#8221; button uses the anchor #BookRallyRaise, so<!-- [et_pb_line_break_holder] -->  \/roseville\/rally-and-raise\/#BookRallyRaise lands people on the form itself.<!-- [et_pb_line_break_holder] -->  Add it as a second <a class=\"sp-sl-btn\"> if you want it.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  ONE THING TO FIX ON THE SITE ITSELF<!-- [et_pb_line_break_holder] -->  The Rally &#038; Raise page is live at BOTH of these:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/roseville\/rally and raise\/      (real spaces in the URL)<!-- [et_pb_line_break_holder] -->      \/roseville\/rally-and-raise\/      (clean)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  This links to the clean one. The spaces version breaks when pasted into an<!-- [et_pb_line_break_holder] -->  email, a social post or a printed flyer. Worth making the hyphenated one<!-- [et_pb_line_break_holder] -->  canonical and redirecting the other.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  THE SPACING IS YOURS \u2014 WITH ONE THING TO WATCH ON PHONES<!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  This module now has NO padding of its own. Set the space above and below on<!-- [et_pb_line_break_holder] -->  the Divi section or row, so you can tune it without touching this file.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  WHAT I KEPT: the padding INSIDE the box, which is the gap between the teal<!-- [et_pb_line_break_holder] -->  border and the words. That is not section spacing \u2014 remove it and the<!-- [et_pb_line_break_holder] -->  headline sits hard against the border.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  THE PHONE CATCH: the box is max-width 680px and centred, so on any screen<!-- [et_pb_line_break_holder] -->  wider than 680px it keeps clear of the edges on its own. BELOW 680px it has<!-- [et_pb_line_break_holder] -->  nothing holding it off, so if you set only top and bottom padding in Divi<!-- [et_pb_line_break_holder] -->  the box will run edge to edge on phones and the border will touch the<!-- [et_pb_line_break_holder] -->  screen. Set LEFT AND RIGHT padding too \u2014 around 18-22px is what it had.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<!-- [et_pb_line_break_holder] -->  HOW IT RESPONDS<!-- [et_pb_line_break_holder] -->    Desktop \/ tablet   centred panel, buttons side by side<!-- [et_pb_line_break_holder] -->    Phone (767 down)   narrower panel, buttons stacked full width<!-- [et_pb_line_break_holder] -->  ===========================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"sp-sl\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"sp-sl-box\"><!-- [et_pb_line_break_holder] -->    <!-- EDIT \u2014 label, headline, and the line under it --><!-- [et_pb_line_break_holder] -->    <span class=\"sp-sl-eyebrow\">Serve Local<\/span><!-- [et_pb_line_break_holder] -->    <\/p>\n<h2 class=\"sp-sl-title\">Raise money.<!\u2013- [et_pb_br_holder] -\u2013>Have a blast.<\/h2>\n<p><!-- [et_pb_line_break_holder] -->    <pee class=\"sp-sl-lede\">Your group books a night, your people eat and play, and<!-- [et_pb_line_break_holder] -->      <strong>25% of every food and drink tab<\/strong> goes to your cause.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"sp-sl-acts\"><!-- [et_pb_line_break_holder] -->      <!-- EDIT \u2014 the button --><!-- [et_pb_line_break_holder] -->      <a class=\"sp-sl-btn\" href=\"https:\/\/smashpark.com\/roseville\/rally-and-raise\/\">Learn more<\/a><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->\/* ---------------------------------------------------------------------------<!-- [et_pb_line_break_holder] -->   Everything is prefixed .sp-sl so it cannot collide with Divi's own styles,<!-- [et_pb_line_break_holder] -->   with the hero (.sp-rw), the Play\/Drink\/Eat tiles (.sp-pde) or the private<!-- [et_pb_line_break_holder] -->   events block (.sp-pe).<!-- [et_pb_line_break_holder] -->--------------------------------------------------------------------------- *\/<!-- [et_pb_line_break_holder] -->.sp-sl {<!-- [et_pb_line_break_holder] -->  --sl-ink:    #1c2551;   \/* the panel, and text on the yellow button *\/<!-- [et_pb_line_break_holder] -->  --sl-teal:   #5bb3a4;   \/* Serve Local's colour \u2014 the rule above the label *\/<!-- [et_pb_line_break_holder] -->  --sl-yellow: #fed614;   \/* the button \u2014 yellow still means \"click this\" *\/<!-- [et_pb_line_break_holder] -->  --sl-soft:   #d6dcf2;   \/* body copy *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* EDIT \u2014 how solid the panel is. See the note at the top before changing:<!-- [et_pb_line_break_holder] -->     .84 is the point where everything stays readable over a WHITE photo. *\/<!-- [et_pb_line_break_holder] -->  --sl-scrim:  rgba(28, 37, 81, .84);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* The site's typefaces, set explicitly because a Code module inherits the<!-- [et_pb_line_break_holder] -->     theme's UI font (effra), not the brand font. *\/<!-- [et_pb_line_break_holder] -->  --font-display: Aquino, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] -->  --font-body:    Quicksand, Helvetica, Arial, Lucida, sans-serif;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  width: 100%;<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  \/* NO background \u2014 this is what lets your Divi parallax image show through.<!-- [et_pb_line_break_holder] -->     Do not set one here; set it on the SECTION in Divi instead. *\/<!-- [et_pb_line_break_holder] -->  background: transparent;<!-- [et_pb_line_break_holder] -->  \/* NO padding \u2014 spacing is set on the Divi section\/row so you control it<!-- [et_pb_line_break_holder] -->     without editing this file. See the note at the top about phones. *\/<!-- [et_pb_line_break_holder] -->  padding: 0;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-sl *, .sp-sl *::before, .sp-sl *::after { box-sizing: border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* THE BORDER IS DOING REAL WORK, not decoration. The tinted panel alone has<!-- [et_pb_line_break_holder] -->   a soft edge, and over a busy photo its corners dissolve \u2014 it stops reading<!-- [et_pb_line_break_holder] -->   as a box and starts looking like a smudge. A hard 2px line gives it a<!-- [et_pb_line_break_holder] -->   definite edge whatever is behind it. It is teal because that is Serve<!-- [et_pb_line_break_holder] -->   Local's colour, which also means the separate teal rule above the label is<!-- [et_pb_line_break_holder] -->   no longer needed: one teal element, not two saying the same thing. *\/<!-- [et_pb_line_break_holder] -->.sp-sl .sp-sl-box {<!-- [et_pb_line_break_holder] -->  max-width: 680px;<!-- [et_pb_line_break_holder] -->  margin: 0 auto;<!-- [et_pb_line_break_holder] -->  background: var(--sl-scrim);<!-- [et_pb_line_break_holder] -->  border: 2px solid var(--sl-teal);<!-- [et_pb_line_break_holder] -->  border-radius: 10px;<!-- [et_pb_line_break_holder] -->  padding: 46px 46px 44px;<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-sl .sp-sl-eyebrow {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  display: block;<!-- [et_pb_line_break_holder] -->  font-size: .76rem; font-weight: 700; letter-spacing: .18em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-sl h2.sp-sl-title {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  margin: 0 0 18px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: clamp(2.3rem, 5vw, 3.4rem);<!-- [et_pb_line_break_holder] -->  line-height: .98; font-weight: 700; letter-spacing: normal;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase; color: #ffffff;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* padding:0 because Divi puts padding-bottom:1em on every <pee> on the site *\/<!-- [et_pb_line_break_holder] -->.sp-sl .sp-sl-lede {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-body);<!-- [et_pb_line_break_holder] -->  margin: 0 auto 30px; padding: 0;<!-- [et_pb_line_break_holder] -->  font-size: 1.1rem; line-height: 1.55; font-weight: 400;<!-- [et_pb_line_break_holder] -->  color: var(--sl-soft); max-width: 46ch;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->\/* the 25% is the one number worth seeing \u2014 white and bold lifts it out of<!-- [et_pb_line_break_holder] -->   the sentence without needing a box of its own *\/<!-- [et_pb_line_break_holder] -->.sp-sl .sp-sl-lede strong { color: #ffffff; font-weight: 700; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.sp-sl .sp-sl-acts {<!-- [et_pb_line_break_holder] -->  display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 14px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-sl a.sp-sl-btn {<!-- [et_pb_line_break_holder] -->  font-family: var(--font-display);<!-- [et_pb_line_break_holder] -->  display: inline-block;<!-- [et_pb_line_break_holder] -->  background: var(--sl-yellow); color: var(--sl-ink);<!-- [et_pb_line_break_holder] -->  font-size: .95rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  padding: 17px 30px; border-radius: 4px; text-decoration: none;<!-- [et_pb_line_break_holder] -->  transition: background .18s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.sp-sl a.sp-sl-btn:hover,<!-- [et_pb_line_break_holder] -->.sp-sl a.sp-sl-btn:focus-visible { background: #ffe25c; color: var(--sl-ink); text-decoration: none; }<!-- [et_pb_line_break_holder] -->.sp-sl a:focus-visible { outline: 3px solid var(--sl-yellow); outline-offset: 3px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- tablet ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 980px) {<!-- [et_pb_line_break_holder] -->  .sp-sl .sp-sl-box { padding: 42px 36px 40px; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- phone ---- *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 767px) {<!-- [et_pb_line_break_holder] -->  .sp-sl .sp-sl-box { padding: 34px 24px 32px; border-radius: 8px; }<!-- [et_pb_line_break_holder] -->  .sp-sl .sp-sl-lede { font-size: 1rem; margin-bottom: 26px; }<!-- [et_pb_line_break_holder] -->  .sp-sl .sp-sl-acts { gap: 11px; }<!-- [et_pb_line_break_holder] -->  .sp-sl a.sp-sl-btn { width: 100%; text-align: center; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ---- respect a reduced-motion preference ---------------------------------<!-- [et_pb_line_break_holder] -->   Note this does NOT stop Divi's parallax, which is set on the section and<!-- [et_pb_line_break_holder] -->   outside this file. If you want that to respect the setting too, that is a<!-- [et_pb_line_break_holder] -->   Divi option, not a change here. *\/<!-- [et_pb_line_break_holder] -->@media (prefers-reduced-motion: reduce) {<!-- [et_pb_line_break_holder] -->  .sp-sl a.sp-sl-btn { transition: none; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;9px||15px|||&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; width=&#8221;90%&#8221; width_tablet=&#8221;90%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|phone&#8221; max_width_tablet=&#8221;&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;27px||22px|||&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_slider arrows_custom_color=&#8221;#FED614&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; body_font=&#8221;Quicksand||||||||&#8221; background_enable_color=&#8221;off&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/Smash-Park-Pickleball-Color-Mask-scaled.jpg&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;19px&#8221; button_text_color=&#8221;#1c2551&#8243; button_border_color=&#8221;RGBA(255,255,255,0)&#8221; button_font=&#8221;Aquino||||||||&#8221; button_use_icon=&#8221;off&#8221; width_tablet=&#8221;&#8221; width_phone=&#8221;92%&#8221; width_last_edited=&#8221;on|desktop&#8221; module_alignment=&#8221;center&#8221; overflow-x=&#8221;scroll&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;37px||37px||true|false&#8221; custom_padding_tablet=&#8221;81px||59px||false|false&#8221; custom_padding_phone=&#8221;40px||59px||false|false&#8221; custom_padding_last_edited=&#8221;on|phone&#8221; link_option_url_new_window=&#8221;on&#8221; header_font_size_tablet=&#8221;29px&#8221; header_font_size_phone=&#8221;29px&#8221; header_font_size_last_edited=&#8221;on|tablet&#8221; global_colors_info=&#8221;{}&#8221; button_text_color__hover_enabled=&#8221;on|hover&#8221; button_text_color__hover=&#8221;#211B5A&#8221; button_bg_color__hover_enabled=&#8221;on|hover&#8221; button_bg_color__hover=&#8221;#FFFFFF&#8221; button_bg_enable_color__hover=&#8221;on&#8221;][et_pb_slide heading=&#8221;PICKLEBALL LEAGUES&#8221; button_text=&#8221;LEARN MORE&#8221; button_link=&#8221;https:\/\/smashpark.com\/roseville\/leagues\/&#8221; url_new_window=&#8221;on&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p style=\"text-align: center;\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: 'Bebas Neue'; font-weight: normal; font-size: xx-large;\"><\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: 'Bebas Neue'; font-weight: normal; font-size: xx-large;\">Fun. Social. Active.<br \/><\/span><\/p>\n<p style=\"text-align: center;\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: Quicksand; font-size: large;\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: Quicksand; font-weight: normal; font-size: large;\">Fall registration for pickleball and cornhole leagues opens September 25! Whether you&#8217;re brand new to the game or a seasoned player, we&#8217;ve got leagues for every skill level.<\/span><\/span><\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;3 for $30 Bundle&#8221; button_text=&#8221;Book Your Experience &#8221; button_link=&#8221;https:\/\/app.smashpark.com\/D2VKAp7DVyxLYquzx64p\/deals&#8221; url_new_window=&#8221;on&#8221; image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/RV-3-for-30-Bundle-2.png&#8221; use_bg_overlay=&#8221;on&#8221; use_text_overlay=&#8221;on&#8221; text_overlay_color=&#8221;#1C2551&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; header_level=&#8221;h3&#8243; header_text_color=&#8221;#FED614&#8243; header_font_size=&#8221;40px&#8221; background_color=&#8221;#1C2551&#8243; background_enable_color=&#8221;on&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/Boneless-Wings-Spread-04-scaled-1.jpeg&#8221; background_enable_image=&#8221;on&#8221; custom_button=&#8221;on&#8221; button_icon=&#8221;&#x24;||divi||400&#8243; custom_padding=&#8221;|||0px|false|false&#8221; header_font_size_tablet=&#8221;30px&#8221; header_font_size_phone=&#8221;33px&#8221; header_font_size_last_edited=&#8221;on|phone&#8221; inline_fonts=&#8221;Bebas Neue,Quicksand&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: 'Bebas Neue'; font-weight: normal; font-size: xx-large;\"><br \/>FOR A LIMITED TIME<br \/><\/span><\/p>\n<p><span style=\"font-family: Quicksand; font-size: large;\">$75 worth of fun for only $30? Yeah, it&#8217;s a no-brainer. Score 1 hour of any activity, a $20 food &amp; beverage voucher, and a $15 arcade card\u2014everything you need for an epic day at Smash Park\u2014for just $30.<\/span><\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;Smash Park Season Ticket&#8221; button_text=&#8221;Learn More&#8221; button_link=&#8221;https:\/\/smashpark.com\/roseville\/football\/&#8221; url_new_window=&#8221;on&#8221; image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/RV-Season-Ticket-Website.png&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; header_level=&#8221;h4&#8243; header_text_color=&#8221;#E6C229&#8243; body_font_size=&#8221;18px&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/Stadium-Background.png&#8221; background_enable_image=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p data-start=\"546\" data-end=\"779\">Unlock exclusive game day perks with the<strong data-start=\"599\" data-end=\"628\"><span>\u00a0<\/span>Smash Park Season Ticket,<\/strong> the best value for die-hard Vikings fans.<\/p>\n<p data-start=\"814\" data-end=\"1055\">\u2713 Over<span>\u00a0<\/span><strong data-start=\"821\" data-end=\"849\">$125 in exclusive offers<\/strong><br \/>\u2713<span>\u00a0<\/span><strong data-start=\"852\" data-end=\"880\">20% off food &amp; beverages<\/strong><\/p>\n<p data-start=\"1057\" data-end=\"1099\"><strong data-start=\"1057\" data-end=\"1099\">Purchase in-store while supplies last.<\/strong><\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;FREE 1 HOUR ARCADE CARD&#8221; url_new_window=&#8221;on&#8221; image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/kids-deal-arcade-card-3.png&#8221; use_bg_overlay=&#8221;on&#8221; use_text_overlay=&#8221;on&#8221; text_overlay_color=&#8221;#1C2551&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; header_level=&#8221;h3&#8243; header_text_color=&#8221;#FED614&#8243; header_font_size=&#8221;40px&#8221; background_color=&#8221;#1C2551&#8243; background_enable_color=&#8221;on&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/WV-Arcade-People.png&#8221; background_enable_image=&#8221;on&#8221; custom_button=&#8221;on&#8221; button_icon=&#8221;&#x24;||divi||400&#8243; custom_padding=&#8221;|||0px|false|false&#8221; header_font_size_tablet=&#8221;30px&#8221; header_font_size_phone=&#8221;33px&#8221; header_font_size_last_edited=&#8221;on|phone&#8221; inline_fonts=&#8221;Bebas Neue,Quicksand&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"font-family: 'Bebas Neue'; font-weight: normal; font-size: xx-large;\"><br \/>WITH EVERY KIDS MEAL PURCHASE<br \/><\/span><\/p>\n<p><span style=\"font-family: Quicksand; font-weight: normal; font-size: large;\">Every Kids Meal comes with a FREE 1-hour arcade card. Fuel up, play all afternoon, and make the most of your family outing.<\/span><\/p>\n<p><span style=\"font-family: Quicksand; font-weight: normal; font-size: large;\">Available for a limited time\u2014don&#8217;t miss it!<\/span><\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;THE HOLIDAY PARTY THAT HAS IT ALL&#8221; button_text=&#8221;BOOK NOW&#8221; use_bg_overlay=&#8221;on&#8221; use_text_overlay=&#8221;on&#8221; text_overlay_color=&#8221;#1C2551&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/Holiday-Party-Private-Events-04-scaled.png&#8221; background_enable_image=&#8221;on&#8221; custom_button=&#8221;on&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#587D71&#8243; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p class=\"p1\">Chef-crafted food, craft cocktails and mocktails, endless activities, and event spaces for groups of all sizes. Be the hero who books the holiday party that everyone actually wants to go to.<\/p>\n<p class=\"p1\"><strong>Book by October 31, 2026 to get the Holiday Perk Bundle for free!<\/strong><\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;Kids&#8217; Birthday Parties&#8221; button_text=&#8221;BOOK NOW&#8221; use_text_overlay=&#8221;on&#8221; text_overlay_color=&#8221;#5BB3A4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#1C2551&#8243; background_enable_color=&#8221;on&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/Confetti-Background-02.png&#8221; background_enable_image=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p class=\"p1\">Big fun made easy\u2014affordable kids\u2019 birthday party packages packed with fun, starting at just $25\/person.<\/p>\n<p>[\/et_pb_slide][et_pb_slide heading=&#8221;Team-Building Events&#8221; button_text=&#8221;Learn More&#8221; use_text_overlay=&#8221;on&#8221; text_overlay_color=&#8221;#1C2551&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/08\/Off-Site-Solutions.png&#8221; background_enable_image=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221; sticky_transition=&#8221;on&#8221;]<\/p>\n<p class=\"p1\">Ditch the conference room and take your next team off-site to a place that inspires creativity and authentic bonding through friendly competition. We handle the food, drinks, and fun, so you can focus on what matters most: your team.<\/p>\n<p>[\/et_pb_slide][\/et_pb_slider][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;rgba(214,214,214,0.55)&#8221; custom_padding=&#8221;17px||16px|||&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||3px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;18px&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_font_size=&#8221;54px&#8221; header_2_font=&#8221;Aquino||||||||&#8221; header_2_text_color=&#8221;#1C2551&#8243; header_2_font_size=&#8221;38px&#8221; header_3_font=&#8221;Bebas Neue||||||||&#8221; header_3_text_color=&#8221;#211B5A&#8221; header_3_font_size=&#8221;36px&#8221; header_3_line_height=&#8221;1.7em&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;|7.4%|22px|7.4%|false|true&#8221; animation_style=&#8221;fade&#8221; animation_duration=&#8221;2000ms&#8221; header_font_tablet=&#8221;&#8221; header_font_phone=&#8221;&#8221; header_font_last_edited=&#8221;on|phone&#8221; header_font_size_tablet=&#8221;63px&#8221; header_font_size_phone=&#8221;34px&#8221; header_font_size_last_edited=&#8221;on|phone&#8221; header_2_font_size_tablet=&#8221;38px&#8221; header_2_font_size_phone=&#8221;35px&#8221; header_2_font_size_last_edited=&#8221;on|phone&#8221; header_3_font_size_tablet=&#8221;36px&#8221; header_3_font_size_phone=&#8221;32px&#8221; header_3_font_size_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h2 style=\"text-align: center;\">UNDEFEATED DEALS EVERY DAY<\/h2>\n<p class=\"p1\">[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/smashpark.com\/roseville\/deals\/&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;VIEW ALL DEALS &#8221; button_alignment=&#8221;center&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;17px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#1C2551&#8243; button_font=&#8221;Aquino||||||||&#8221; button_icon_color=&#8221;#FFFFFF&#8221; custom_margin=&#8221;||15px||false|false&#8221; custom_margin_tablet=&#8221;||20px||false|false&#8221; custom_margin_phone=&#8221;||4px||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;||||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221; button_bg_color__hover_enabled=&#8221;on|desktop&#8221; button_bg_color__hover=&#8221;#1C2551&#8243;][\/et_pb_button][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_3,1_3,1_3&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/Happy-Hour.png&#8221; title_text=&#8221;Happy Hour&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; border_radii=&#8221;on|6px|6px|6px|6px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_heading title=&#8221;Happy hour &#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_font=&#8221;Bebas Neue||||||||&#8221; title_text_color=&#8221;#1C2551&#8243; title_font_size=&#8221;40px&#8221; custom_margin=&#8221;-11px||4px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_heading title=&#8221;Mon &#8211; Fri, 2PM &#8211; 6PM&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_level=&#8221;h4&#8243; title_text_color=&#8221;#D98324&#8243; custom_margin=&#8221;||8px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>Enjoy <b>$4 drinks and<\/b>\u00a0<b>half-off select shareables.<\/b><\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/smashpark.com\/westerville\/wp-content\/uploads\/sites\/18\/2026\/07\/RV-Happy-Hour.pdf&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;HAPPY HOUR MENU&#8221; button_alignment=&#8221;left&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;17px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#D98324&#8243; button_font=&#8221;Aquino||||||||&#8221; button_icon_color=&#8221;#FFFFFF&#8221; custom_margin=&#8221;||16px||false|false&#8221; custom_margin_tablet=&#8221;||20px||false|false&#8221; custom_margin_phone=&#8221;||4px||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;||||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_button][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/Park-After-Dark.png&#8221; title_text=&#8221;Park After Dark&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; border_radii=&#8221;on|6px|6px|6px|6px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_heading title=&#8221;Park After Dark&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_font=&#8221;Bebas Neue||||||||&#8221; title_text_color=&#8221;#1C2551&#8243; title_font_size=&#8221;40px&#8221; custom_margin=&#8221;-11px||4px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_heading title=&#8221;Nightly, 9PM &#8211; Close&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_level=&#8221;h4&#8243; title_text_color=&#8221;#D98324&#8243; custom_margin=&#8221;||8px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>Every night after <strong data-start=\"63\" data-end=\"80\">9 PM,<\/strong> enjoy $5 walk-in activities.<\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/smashpark.com\/roseville\/play\/&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;VIEW ACTIVITIES&#8221; button_alignment=&#8221;left&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;17px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#D98324&#8243; button_font=&#8221;Aquino||||||||&#8221; button_icon_color=&#8221;#FFFFFF&#8221; custom_margin=&#8221;||16px||false|false&#8221; custom_margin_tablet=&#8221;||20px||false|false&#8221; custom_margin_phone=&#8221;||4px||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;||||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_button][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/All-You-Can-Play-Sunday.png&#8221; title_text=&#8221;All You Can Play Sunday&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; border_radii=&#8221;on|6px|6px|6px|6px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_heading title=&#8221;Sunday Funday&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_font=&#8221;Bebas Neue||||||||&#8221; title_text_color=&#8221;#1C2551&#8243; title_font_size=&#8221;40px&#8221; custom_margin=&#8221;-11px||4px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_heading title=&#8221;Sun, 9AM &#8211; 2PM&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; title_level=&#8221;h4&#8243; title_text_color=&#8221;#D98324&#8243; custom_margin=&#8221;||8px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_heading][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p class=\"cvGsUA block-font-kerning-normal block-font-feature-liga-off block-font-feature-clig-off block-font-feature-calt-off direction-ltr align-center para-style-body\"><strong>Brunch Bingo<\/strong> (10AM &#8211; 12) and $2 breakfast cocktails all day!<\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/smashpark.com\/westerville\/wp-content\/uploads\/sites\/18\/2026\/07\/RV-Brunch.pdf&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;BRUNCH MENU&#8221; button_alignment=&#8221;left&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;17px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#D98324&#8243; button_font=&#8221;Aquino||||||||&#8221; button_icon_color=&#8221;#FFFFFF&#8221; custom_margin=&#8221;||16px||false|false&#8221; custom_margin_tablet=&#8221;||20px||false|false&#8221; custom_margin_phone=&#8221;||4px||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;||||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_button][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#FFFFFF&#8221; custom_padding=&#8221;17px||7px|||&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row column_structure=&#8221;1_2,1_2&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;40px||75px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Aquino|||on|||||&#8221; text_text_color=&#8221;#263C8D&#8221; text_font_size=&#8221;56px&#8221; text_line_height=&#8221;1em&#8221; header_font_size=&#8221;50px&#8221; background_color=&#8221;RGBA(255,255,255,0)&#8221; transform_scale=&#8221;100%|96%&#8221; transform_scale_linked=&#8221;off&#8221; custom_padding=&#8221;0px||||false|false&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p><span class=\"pa-color-highlight\">watch parties and sports<\/span><\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Quicksand||||||||&#8221; text_font_size=&#8221;18px&#8221; width=&#8221;100%&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>Watch every game on hundreds of big-screen TVs, celebrate every big play with fellow fans, and enjoy chef-crafted food, drink specials, and interactive game-day experiences. From college football and the NFL to baseball, basketball, soccer, hockey, and more, Smash Park is your destination for sports all year long.<\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/smashpark.com\/roseville\/football\/&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;VIEW Football DEALS&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_button][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2024\/04\/SmashPark_BrandTextures_YellowHalftone.png&#8221; background_pattern_horizontal_offset=&#8221;0%&#8221; border_radii=&#8221;on|9px|9px|9px|9px&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/07\/Watch-Football-at-Smash-Park-Roseville.jpeg&#8221; title_text=&#8221;Watch Football at Smash Park Roseville&#8221; _builder_version=&#8221;4.24.0&#8243; _module_preset=&#8221;default&#8221; background_pattern_repeat_origin=&#8221;bottom_right&#8221; transform_translate_linked=&#8221;off&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px|18px|16px|0px|false|false&#8221; border_radii=&#8221;on|11px|11px|11px|11px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>EVENTS AT SMASH PARK ROSEVILLEFrom music bingo and themed trivia to epic watch parties, brunch bingo, meat raffles, and cornhole tournaments. Fun events, family-friendly activities, and 21+ entertainment\u2014all week long at Smash Park. Fun. Social. Active. Fall registration for pickleball and cornhole leagues opens September 25! Whether you&#8217;re brand new to the game or a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-184","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Smash Park Roseville - Smash Park Entertainment Group<\/title>\n<meta name=\"description\" content=\"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/smashpark.com\/roseville\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Smash Park Roseville - Smash Park Entertainment Group\" \/>\n<meta property=\"og:description\" content=\"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/smashpark.com\/roseville\/\" \/>\n<meta property=\"og:site_name\" content=\"Smash Park Roseville\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-07T14:03:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/02\/1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/smashpark.com\/roseville\/\",\"url\":\"https:\/\/smashpark.com\/roseville\/\",\"name\":\"Smash Park Roseville - Smash Park Entertainment Group\",\"isPartOf\":{\"@id\":\"https:\/\/smashpark.com\/roseville\/#website\"},\"datePublished\":\"2024-04-12T15:43:22+00:00\",\"dateModified\":\"2026-10-07T14:03:07+00:00\",\"description\":\"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.\",\"breadcrumb\":{\"@id\":\"https:\/\/smashpark.com\/roseville\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/smashpark.com\/roseville\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/smashpark.com\/roseville\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/smashpark.com\/roseville\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Roseville Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/smashpark.com\/roseville\/#website\",\"url\":\"https:\/\/smashpark.com\/roseville\/\",\"name\":\"Smash Park Roseville\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/smashpark.com\/roseville\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Smash Park Roseville - Smash Park Entertainment Group","description":"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/smashpark.com\/roseville\/","og_locale":"en_US","og_type":"article","og_title":"Smash Park Roseville - Smash Park Entertainment Group","og_description":"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.","og_url":"https:\/\/smashpark.com\/roseville\/","og_site_name":"Smash Park Roseville","article_modified_time":"2026-10-07T14:03:07+00:00","og_image":[{"url":"https:\/\/smashpark.com\/roseville\/wp-content\/uploads\/sites\/16\/2026\/02\/1.png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/smashpark.com\/roseville\/","url":"https:\/\/smashpark.com\/roseville\/","name":"Smash Park Roseville - Smash Park Entertainment Group","isPartOf":{"@id":"https:\/\/smashpark.com\/roseville\/#website"},"datePublished":"2024-04-12T15:43:22+00:00","dateModified":"2026-10-07T14:03:07+00:00","description":"Discover endless fun at Smash Park Roseville. Indulge in delicious food and drinks while enjoying exciting activities like pickleball and axe throwing.","breadcrumb":{"@id":"https:\/\/smashpark.com\/roseville\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/smashpark.com\/roseville\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/smashpark.com\/roseville\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/smashpark.com\/roseville\/"},{"@type":"ListItem","position":2,"name":"Roseville Home"}]},{"@type":"WebSite","@id":"https:\/\/smashpark.com\/roseville\/#website","url":"https:\/\/smashpark.com\/roseville\/","name":"Smash Park Roseville","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/smashpark.com\/roseville\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/pages\/184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":38,"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/pages\/184\/revisions"}],"predecessor-version":[{"id":1629,"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/pages\/184\/revisions\/1629"}],"wp:attachment":[{"href":"https:\/\/smashpark.com\/roseville\/wp-json\/wp\/v2\/media?parent=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}