diff --git a/.gitignore b/.gitignore
index 7c7745f..2781bdf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,11 @@
/node_modules
/public/hot
/public/storage
+/public/css
+/public/js
+/public/sitemap.xml
+/public/main_sitemap.xml
+/public/blog_sitemap.xml
/storage/*.key
/vendor
.env
@@ -14,3 +19,4 @@ Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
+composer.lock
diff --git a/app/Helpers/Test.php b/app/Helpers/Test.php
new file mode 100644
index 0000000..52ad0a1
--- /dev/null
+++ b/app/Helpers/Test.php
@@ -0,0 +1,17 @@
+parse($text);
+}
+
+function getCurrentMarket($request)
+{
+ return Market::find($request->session()->get('current_market_id'));
+}
+
+function setCurrentMarket($request, $market)
+{
+ $request->session()->put('current_market_id', $market->id);
+}
+
+function locationRoute(string $routeName, Market $market, Location $location): string
+{
+ return LocationRouter::build($routeName, $market, $location);
+}
diff --git a/app/Http/Controllers/Api/AvailabilityController.php b/app/Http/Controllers/Api/AvailabilityController.php
new file mode 100644
index 0000000..cf0fcdd
--- /dev/null
+++ b/app/Http/Controllers/Api/AvailabilityController.php
@@ -0,0 +1,147 @@
+transformer = $transformer;
+ }
+
+ /**
+ * @var CalendarService
+ */
+ public $calendarService;
+
+ /**
+ * Get calendar service instance.
+ * @return CalendarService
+ */
+ public function getCalendaService()
+ {
+ if (empty($this->calendarService)) {
+ $this->calendarService = app(CalendarService::class);
+ }
+
+ return $this->calendarService;
+ }
+
+ /**
+ * Find slot by slot by number.
+ *
+ * Includes viertual slots.
+ *
+ * @return Slot
+ */
+ public function findByLocationSlug($locationSlug, $slotNumber)
+ {
+ $location = Location::where('slug', $locationSlug)->firstOrFail();
+ $slot = $location->findOrGenerateSlot($slotNumber);
+
+ return fractal($slot, $this->transformer)
+ ->respond();
+ }
+
+ /**
+ * Get hold.
+ *
+ * @param string $locationSlug
+ * @param string $slotNumber
+ * @return array
+ */
+ public function getHold($locationSlug, $slotNumber)
+ {
+ $location = Location::where('slug', $locationSlug)->firstOrFail();
+ $slot = $location->findOrGenerateSlot($slotNumber);
+
+ return $slot->getHold();
+ }
+
+ /**
+ * Set slot hold. Throw error if lock already exists.
+ *
+ * @param Location $location
+ * @param string $slotNumber
+ * @return array
+ */
+ public function setHold(Location $location, $slotNumber, CreateHold $request)
+ {
+ $slot = $location->findOrGenerateSlot($slotNumber);
+
+ if ($slot->hasHold()) {
+ throw ValidationException::withMessages([
+ 'slot_number' => 'The slot is already locked.',
+ ]);
+ }
+
+ $slot->setHold($request->user()->id);
+
+ return fractal($slot, $this->transformer)
+ ->includeHold()
+ ->respond();
+ }
+
+ /**
+ * Delete hold.
+ *
+ * @param string $locationSlug
+ * @param string $slotNumber
+ * @return array
+ */
+ public function deleteHold($locationSlug, $slotNumber)
+ {
+ $location = Location::where('slug', $locationSlug)->firstOrFail();
+ $slot = $location->findOrGenerateSlot($slotNumber);
+
+ return $slot->releaseHold();
+ }
+
+ /**
+ * List slots by location slug.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function indexByLocationSlug($locationSlug, IndexAvailabilities $request)
+ {
+ $calendarService = $this->getCalendaService();
+ $location = $request->getLocation();
+
+ $initialDate = $request->input('initial_date');
+ $finalDate = $request->input('final_date');
+
+ $slots = $calendarService->getLocationSlotsForDateRange($location->id, $initialDate, $finalDate);
+
+ $recurringSchedules = $calendarService->getLocationRecurringScheduleForDateRange($location->id, $initialDate, $finalDate);
+ $erasers = $calendarService->getLocationScheduleErasersForDateRange(
+ $location->id,
+ Carbon::parse($initialDate, $location->getPhpTzAttribute()),
+ Carbon::parse($finalDate ?? $initialDate, $location->getPhpTzAttribute())->addDays(1)->setTime(0, 0, 0),
+ );
+
+ $slots = $slots
+ ->applyRecurringSchedules($recurringSchedules, $initialDate, $finalDate)
+ ->applyFilters($request->filter)
+ ->removeConflicts()
+ ->applyErasers($erasers)
+ ->sortBy($request->input('sort', 'start_at'));
+
+ return fractal($slots, $this->transformer)
+ ->respond();
+ }
+}
diff --git a/app/Http/Controllers/Api/ThemesController.php b/app/Http/Controllers/Api/ThemesController.php
new file mode 100644
index 0000000..5d8918c
--- /dev/null
+++ b/app/Http/Controllers/Api/ThemesController.php
@@ -0,0 +1,38 @@
+transformer = $transformer;
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ * @param \App\Http\Requests\Theme\IndexThemes $request
+ * @return \Illuminate\Http\Response
+ */
+ public function index(IndexThemes $request)
+ {
+ $themes = EscaperoomTheme::filter($request->filter)
+ ->paginate(
+ $request->getPageSize()
+ );
+
+ return fractal($themes, $this->transformer)
+ ->respond();
+ }
+}
diff --git a/app/Http/Controllers/Web/Site/CompanyController.php b/app/Http/Controllers/Web/Site/CompanyController.php
new file mode 100644
index 0000000..c288751
--- /dev/null
+++ b/app/Http/Controllers/Web/Site/CompanyController.php
@@ -0,0 +1,35 @@
+join('phones', 'phones.id', '=', 'locations.phone_id');
+
+ $image = Image::find(43)->url;
+
+ return view('website.pages.company.company', [
+ 'market' => $current,
+ 'locations' => $locations,
+ 'html' => null, // set to true if need to use html page instead of AMP
+ 'title' => 'About The Great Escape Room',
+ 'subtitle' => 'Voted #1 Escape Room across America - A truly innovative experience that will keep you coming back for more!',
+ 'cta' => true,
+ 'seotitle' => 'About The Great Escape Room',
+ 'seodescription' => 'Find out more about The Great Escape Room, a leader in the escape room industry with ' . $locations->count() . ' locations.',
+ 'ogtitle' => 'About The Great Escape Room',
+ 'ogdescription' => 'Find out more about The Great Escape Room, a leader in the escape room industry with ' . $locations->count() . ' locations.',
+ 'canonical' => route('company'),
+ 'image' => $image,
+ 'ogimage' => $image === null ? url('img/ogimage.jpg') : $image,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Web/Site/MarketController.php b/app/Http/Controllers/Web/Site/MarketController.php
new file mode 100644
index 0000000..838f8ff
--- /dev/null
+++ b/app/Http/Controllers/Web/Site/MarketController.php
@@ -0,0 +1,98 @@
+segment(1))->first();
+ if (is_null($market)) {
+ abort(404);
+ }
+ if (! is_null($request->segment(2))) {
+ return redirect()->to($market->path);
+ }
+
+ setCurrentMarket($request, $market);
+
+ $locations = $market->locations;
+
+ // Get all rooms for those locations
+ $rooms = Room::whereIn('location_id', $locations->pluck('id'))
+ ->whereNull('closed_at')
+ ->orderByDesc('priority')
+ ->get();
+
+ $roomPriority = $rooms->pluck('priority', 'theme_id');
+ $roomnotes = $rooms->filter->note->pluck('note', 'theme_id');
+ $roomtitles = $rooms->filter->title->pluck('title', 'theme_id');
+ $roomexcerpts = $rooms->filter->excerpt->pluck('excerpt', 'theme_id');
+ $roomdescriptions = $rooms->filter->description->pluck('description', 'theme_id');
+
+ $comingsoon = $rooms->filter(function ($room) {
+ return $room->isComing();
+ })->pluck('opened_at', 'theme_id');
+
+ // Get the themes, ordered by rooms->priority exclude closed themes and remove duplicates
+ $themes = EscaperoomTheme::whereIn('id', $rooms->pluck('theme_id'))
+ ->get()
+ ->sortBy(function ($theme) use ($roomPriority) {
+ return $roomPriority[$theme->id];
+ });
+
+ $marketreviews = Review::where('is_displayable', true)->whereIn('location_id', $locations->pluck('id'))->orderByDesc('reviewed_at')->limit(6)->get();
+ if ($marketreviews->count() <= 3) {
+ $marketreviews = null;
+ }
+
+ $image = $market->image === null ? url('img/hero/tger.jpg') : $market->image->url;
+
+ return view('website.markets.show', [
+ 'market' => $market,
+ 'themes' => $themes,
+ 'availablelocations' => $this->availableLocations($themes, $rooms, $locations),
+ 'notes' => $roomnotes,
+ 'titles' => $roomtitles,
+ 'excerpts' => $roomexcerpts,
+ 'descriptions' => $roomdescriptions,
+ 'comingsoon' => $comingsoon,
+ 'reviews' => $marketreviews,
+ 'html' => null, // set to true if need to use html page instead of AMP
+ 'title' => $market->title,
+ 'subtitle' => 'Voted #1 Escape Room across America - A truly innovative experience that will keep you coming back for more!',
+ 'cta' => true,
+ 'seotitle' => $market->title,
+ 'seodescription' => $market->description,
+ 'ogtitle' => $market->title,
+ 'ogdescription' => $market->description,
+ 'canonical' => 'https://thegreatescaperoom.com'.$market->path,
+ 'image' => $image,
+ 'ogimage' => $market->ogimage === null ? $image : $market->ogimage->url,
+ ]);
+ }
+
+ private function availableLocations($themes, $rooms, $locations)
+ {
+ // For each theme, return $themeId => [locations that have this theme]
+ return $themes->mapWithKeys(function ($theme) use ($rooms, $locations) {
+ $availablerooms = $rooms->filter(function ($room) use ($theme) {
+ return $room->theme_id === $theme->id;
+ });
+
+ return [
+ $theme->id => $locations->filter(function ($location) use ($availablerooms) {
+ return $availablerooms->contains('location_id', $location->id);
+ }),
+ ];
+ });
+ }
+}
diff --git a/app/Http/Controllers/Web/Site/Pages/Booking/SlotsController.php b/app/Http/Controllers/Web/Site/Pages/Booking/SlotsController.php
new file mode 100644
index 0000000..dbe0c81
--- /dev/null
+++ b/app/Http/Controllers/Web/Site/Pages/Booking/SlotsController.php
@@ -0,0 +1,91 @@
+segment(1) === 'company') {
+ return redirect()->to($current->bookings_path);
+ }
+
+ $image = url('img/tger.jpg');
+
+ // Show the page in the company section of the site
+ if ($request->segment(1) === 'company') {
+ return view('website.pages.company.choose', [
+ 'market' => $current,
+ 'html' => null, // set to true if need to use html page instead of AMP
+ 'title' => 'Book Online at The Great Escape Room',
+ 'subtitle' => 'Please select your location from the dropdown below:',
+ 'cta' => null,
+ 'link' => 'bookings',
+ 'seotitle' => 'Book Online at The Great Escape Room',
+ 'seodescription' => 'Book Online at The Great Escape Room, a leader in the escape room industry with 12 locations. Visit our website to learn more.',
+ 'ogtitle' => 'Book Online at The Great Escape Room',
+ 'ogdescription' => 'Book Online at The Great Escape Room, a leader in the escape room industry with 12 locations. Visit our website to learn more.',
+ 'canonical' => route('bookings'),
+ 'image' => $image,
+ 'ogimage' => $image === null ? url('img/ogimage.jpg') : $image,
+ ]);
+ }
+
+ // Send to correct market if somehow they get to a URL with a different market than where the location belongs
+ if ($location && $market->id !== $location->market_id) {
+ return redirect()->to($location->bookings_path);
+ }
+
+ // If there is only one location in the market, remove the trailing location name in the route/URL
+ if ($market->locations_count === 1 && $location) {
+ return redirect()->to($market->bookings_path);
+ }
+
+ setCurrentMarket($request, $market);
+
+ // In a multi-location market, ask the user to choose a location
+ if ($market->locations_count !== 1 && ! $location) {
+ return view('website.markets.select', [
+ 'market' => $market,
+ 'html' => null, // set to true if need to use html page instead of AMP
+ 'title' => 'Book your game in '.$market->name,
+ 'subtitle' => 'Please select your '.$market->name.' location from the dropdown below:',
+ 'cta' => null,
+ 'link' => 'bookings',
+ 'seotitle' => 'Book Online at '.$market->name.' Escape Rooms',
+ 'seodescription' => $market->title.' has '.$market->rooms->count().' different escape rooms and offers private escape games for groups & parties. Book your escape room today!',
+ 'ogtitle' => 'Book Online at '.$market->name.' Escape Rooms',
+ 'ogdescription' => $market->title.' has '.$market->rooms->count().' different escape rooms and offers private escape games for groups & parties. Book your escape room today!',
+ 'canonical' => 'https://thegreatescaperoom.com'.$market->bookings_path,
+ 'image' => $image,
+ 'ogimage' => $image === null ? url('img/ogimage.jpg') : $image,
+ ]);
+ }
+
+ // If end up here, then display the bookings page
+ if (! $location) {
+ $location = $market->locations->first();
+ }
+
+ return view('website.pages.booking.slots', [
+ 'market' => $market,
+ 'location' => $location,
+ 'html' => true,
+ 'seotitle' => 'Book Online at '.$market->name.' Escape Rooms',
+ 'seodescription' => $market->title.' has '.$market->rooms->count().' different escape rooms and offers private escape games for groups & parties. Book your escape room today!',
+ 'ogtitle' => 'Book Online at '.$market->name.' Escape Rooms',
+ 'ogdescription' => $market->title.' has '.$market->rooms->count().' different escape rooms and offers private escape games for groups & parties. Book your escape room today!',
+ 'canonical' => 'https://thegreatescaperoom.com'.$location->bookings_path,
+ 'image' => $image,
+ 'ogimage' => $image === null ? url('img/ogimage.jpg') : $image,
+ ]);
+ }
+}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 30020a5..0d36725 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -33,6 +33,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
+ \Spatie\GoogleTagManager\GoogleTagManagerMiddleware::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
diff --git a/app/Http/Requests/ApiRequest.php b/app/Http/Requests/ApiRequest.php
new file mode 100644
index 0000000..34f5f59
--- /dev/null
+++ b/app/Http/Requests/ApiRequest.php
@@ -0,0 +1,102 @@
+model)) {
+ $model = app($this->getModelClass());
+
+ $parameter = $this
+ ->route()
+ ->parameter(
+ Str::singular($model->getTable())
+ );
+ if (is_object($parameter) && $this->getModelClass() == get_class($parameter)) {
+ $model = $parameter;
+ }
+ $this->model = $model;
+ }
+
+ return $this->model;
+ }
+
+ /**
+ * Get base name of model class.
+ *
+ * @return string
+ */
+ public function getModelClassBasename()
+ {
+ $baseName = class_basename($this->getModelClass());
+
+ return strtolower($baseName);
+ }
+
+ /**
+ * Get fillable fields of model.
+ *
+ * @return array
+ */
+ public function getFillable()
+ {
+ return $this->getModel()->getFillable();
+ }
+
+ /**
+ * Check if user is authorized to perform action.
+ *
+ * @param string $action
+ * @return bool
+ */
+ public function authorizeAction($action)
+ {
+ $user = $this->user();
+ $policy = Gate::getPolicyFor($this->getModel());
+
+ switch ($action) {
+ case 'viewAny':
+ case 'create':
+ return $user->can($action, $this->getModel());
+ default:
+ return $user->can($action, $this->getModel());
+ }
+ }
+
+ /**
+ * Get pagination size.
+ *
+ * @return array
+ */
+ public function getPageSize()
+ {
+ if ($this->has('page.size')) {
+ return $this->input('page.size');
+ }
+
+ return self::PAGE_SIZE;
+ }
+}
diff --git a/app/Http/Requests/Availability/CreateHold.php b/app/Http/Requests/Availability/CreateHold.php
new file mode 100644
index 0000000..fc4b584
--- /dev/null
+++ b/app/Http/Requests/Availability/CreateHold.php
@@ -0,0 +1,30 @@
+user();
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Http/Requests/Availability/IndexAvailabilities.php b/app/Http/Requests/Availability/IndexAvailabilities.php
new file mode 100644
index 0000000..33747c8
--- /dev/null
+++ b/app/Http/Requests/Availability/IndexAvailabilities.php
@@ -0,0 +1,90 @@
+has('initial_date')) {
+ return Carbon::now();
+ }
+
+ return $this->getLocation()->toUtcDateTime($this->input('initial_date'));
+ }
+
+ /**
+ * Get final date.
+ *
+ * @return Carbon
+ */
+ public function getUtclFinalDate()
+ {
+ if (! $this->has('final_date')) {
+ return Carbon::now();
+ }
+
+ return $this->getLocation()->toUtcDateTime($this->input('final_date'));
+ }
+
+ /**
+ * Get location.
+ *
+ * @return Carbon
+ */
+ public function getLocation()
+ {
+ if (empty($this->location)) {
+ $this->location = Location::where('slug', $this->route()->parameter('locationSlug'))
+ ->firstOrFail();
+ }
+
+ return $this->location;
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ 'initial_date' => [
+ 'date',
+ ],
+ 'sort' => [
+ 'in:slot_number,participants,room_id,rate_id,schedule_id,schedule_type,time,start_at,room_available_at,participants_available',
+ ],
+ 'final_date' => [
+ 'date',
+ new DayRange($this->input('initial_date', now()->format('Y-m-d')), 7),
+ ],
+ ];
+ }
+}
diff --git a/app/Http/Requests/Theme/IndexThemes.php b/app/Http/Requests/Theme/IndexThemes.php
new file mode 100644
index 0000000..91971d3
--- /dev/null
+++ b/app/Http/Requests/Theme/IndexThemes.php
@@ -0,0 +1,41 @@
+orderBy('name')->get();
+ });
+ $navescapethemes = Cache::remember('allthemes', 3600, function () {
+ return EscaperoomTheme::where('scavenger_level', '<', 4)->orderBy('name')->get();
+ });
+ $navscavengerthemes = Cache::remember('allscavengerthemes', 3600, function () {
+ return EscaperoomTheme::where('scavenger_level', '>=', 4)->orderBy('name')->get();
+ });
+
+ return $view->with('navmarkets', $navmarkets)->with('navescapethemes', $navescapethemes)->with('navscavengerthemes', $navscavengerthemes);
+ });
+
+ View::composer('website.partials.footer', function ($view) {
+ $allmarkets = Cache::remember('allmarkets', 3600, function () {
+ return Market::orderBy('state_id')->orderBy('name')->get();
+ });
+ $flmarkets = Cache::remember('flmarkets', 3600, function () {
+ return Market::join('states', 'states.id', '=', 'markets.state_id')
+ ->where('states.abbreviation', 'FL')
+ ->orderBy('markets.name')
+ ->get();
+ });
+ $midmarkets = Cache::remember('midmarkets', 3600, function () {
+ return Market::join('states', 'states.id', '=', 'markets.state_id')
+ ->where('states.abbreviation', ['MI', 'OH', 'IL'])
+ ->orderBy('markets.name')
+ ->get();
+ });
+ $nemarkets = Cache::remember('nemarkets', 3600, function () {
+ return Market::join('states', 'states.id', '=', 'markets.state_id')
+ ->where('states.abbreviation', ['NY', 'RI', 'DC', 'PA'])
+ ->orderBy('markets.name')
+ ->get();
+ });
+ $footerthemes = Cache::remember('footerthemes', 3600, function () {
+ return EscaperoomTheme::orderBy('name')->limit(7)->get();
+ });
+
+ return $view->with('allmarkets', $allmarkets)->with('flmarkets', $flmarkets)->with('midmarkets', $midmarkets)->with('nemarkets', $nemarkets)->with('footerthemes', $footerthemes);
+ });
+
+ View::composer('website.pages.company.choose', function ($view) {
+ $locationslist = Cache::remember('locationslist', 3600, function () {
+ return Location::select('locations.*', 'locations.name as location_name', 'locations.slug as location_slug', 'markets.*', 'markets.name as market_name')
+ ->join('markets', 'markets.id', '=', 'locations.market_id')
+ ->join('pages', 'pages.id', '=', 'locations.page_id')
+ ->orderBy('markets.state_id')
+ ->orderBy('markets.title')
+ ->orderBy('locations.name')->get();
+ });
+ return $view->with('locationslist', $locationslist);
+ });
}
}
diff --git a/app/Rules/DayRange.php b/app/Rules/DayRange.php
new file mode 100644
index 0000000..6fb91b0
--- /dev/null
+++ b/app/Rules/DayRange.php
@@ -0,0 +1,52 @@
+initialDate = Carbon::parse($initialDate);
+ $this->days = $days;
+ }
+
+ /**
+ * Determine if the validation rule passes.
+ *
+ * @param string $attribute
+ * @param mixed $value
+ * @return bool
+ */
+ public function passes($attribute, $value)
+ {
+ return $this->initialDate->diffInDays($value) < $this->days;
+ }
+
+ /**
+ * Get the validation error message.
+ *
+ * @return string
+ */
+ public function message()
+ {
+ return ':attribute must be maximum :value days from initial date.';
+ }
+}
diff --git a/app/Services/Breakdown.php b/app/Services/Breakdown.php
new file mode 100644
index 0000000..612285f
--- /dev/null
+++ b/app/Services/Breakdown.php
@@ -0,0 +1,148 @@
+BlockTypes['{tag'] won't work.).
+ *
+ * The second array is a list of all functions that should be called when the character is found.
+ *
+ * Leave out the 'block' or 'inline' part of the function name, as it will be prepended automatically.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+
+ $this->BlockTypes['?'][] = 'FAQSection';
+ }
+
+ protected function blockFAQSection($line)
+ {
+ if (! preg_match('/^\?{3}/', $line['text'])) {
+ return;
+ }
+
+ $block = [
+ 'char' => $line['text'][0],
+ 'element' => [
+ 'name' => 'amp-accordion',
+ 'handler' => 'elements',
+ 'attributes' => [
+ 'layout' => 'container',
+ 'disable-session-states' => '',
+ 'class' => 'ampstart-dropdown',
+ ],
+ ],
+ ];
+
+ $block['section'] = [
+ 'name' => 'section',
+ 'handler' => 'elements',
+ 'text' => [
+ [
+ 'name' => 'header',
+ 'attributes' => [
+ 'class' => 'faq-header',
+ 'role' => 'heading',
+ 'aria-expanded' => 'false',
+ ],
+ 'handler' => 'text',
+ 'text' => null,
+ ],
+ [
+ 'name' => 'div',
+ 'attributes' => [
+ 'class' => 'faq-body',
+ ],
+ 'handler' => 'lines',
+ 'text' => [],
+ ],
+ ],
+ ];
+
+ $block['element']['text'][] = &$block['section'];
+
+ return $block;
+ }
+
+ /**
+ * Appending the word `continue` to the function name will cause this function to be
+ * called to process any following lines, until $block['complete'] is set to be 'true'.
+ */
+ protected function blockFAQSectionContinue($line, $block)
+ {
+ // block is done
+ if (isset($block['complete'])) {
+ return;
+ }
+
+ // A blank newline has occurred.
+ if (isset($block['interrupted'])) {
+ $block['section']['text'][1]['text'][] = '';
+ unset($block['interrupted']);
+ }
+
+ // Check for end of the block.
+ if (preg_match('/\?{3}/', $line['text'])) {
+ $block['complete'] = true;
+
+ return $block;
+ }
+
+ // store line text for further processing
+ if (empty($block['section']['text'][0]['text'])) {
+ $block['section']['text'][0]['text'] = '## '.$line['text'];
+ } else {
+ $block['section']['text'][1]['text'][] = $line['text'];
+ }
+
+ return $block;
+ }
+
+ protected function inlineImage($excerpt)
+ {
+ $image = parent::inlineImage($excerpt);
+
+ if ($image === null) {
+ return;
+ }
+
+ $src = $image['element']['attributes']['src'];
+
+ // This could be done outside of our video list, but I prefer to have them in a database table.
+ if (substr($src, 0, 2) == 'v=') {
+ if (Video::where('name', substr($src, 2))->first()) {
+ $dbvideo = Video::where('name', substr($src, 2))->first();
+ $image['element']['name'] = 'amp-youtube';
+ $image['element']['attributes']['data-videoid'] = $dbvideo->name;
+ $image['element']['attributes']['height'] = '270';
+ $image['element']['attributes']['width'] = '480';
+ $image['element']['attributes']['src'] = null;
+ $image['element']['attributes']['alt'] = null;
+ $image['element']['attributes']['layout'] = 'responsive';
+ }
+ }
+
+ if (ctype_digit($src)) {
+ if (Image::find($src)) {
+ $dbimage = Image::find($src);
+ $image['element']['name'] = 'amp-img';
+ $image['element']['attributes']['src'] = $dbimage->url;
+ $image['element']['attributes']['height'] = $dbimage->height;
+ $image['element']['attributes']['width'] = $dbimage->width;
+ $image['element']['attributes']['alt'] = $dbimage->description;
+ $image['element']['attributes']['layout'] = 'responsive';
+ }
+ }
+
+ return $image;
+ }
+}
diff --git a/app/Transformers/AvailabilitySlotTransformer.php b/app/Transformers/AvailabilitySlotTransformer.php
new file mode 100644
index 0000000..199cf40
--- /dev/null
+++ b/app/Transformers/AvailabilitySlotTransformer.php
@@ -0,0 +1,100 @@
+ $slot->slot_number,
+ 'room_id' => $slot->room_id,
+ 'rate_id' => $slot->rate_id,
+ 'schedule_id' => $slot->schedule_id,
+ 'schedule_type' => $slot->schedule_type,
+ 'date' => $slot->date->format('Y-m-d'),
+ 'time' => $slot->time,
+ 'start_at' => (string) $slot->start_at,
+ 'end_at' => (string) $slot->end_at,
+ 'room_available_at' => (string) $slot->room_available_at,
+ 'location_start' => (string) $slot->location_start,
+ 'location_end' => (string) $slot->location_end,
+ 'location_available' => (string) $slot->location_available,
+ 'participants' => $slot->participants,
+ 'participants_blocked' => $slot->participants_blocked,
+ 'participants_available' => $slot->participants_available,
+ 'has_hold' => $slot->hasHold(),
+ 'is_virtual' => true,
+ ];
+
+ if ($slot->id) {
+ $output['id'] = $slot->id;
+ $output['is_virtual'] = false;
+ }
+
+ return $output;
+ }
+
+ /**
+ * Include room.
+ *
+ * @return League\Fractal\ItemResource
+ */
+ public function includeRoom(EscaperoomSlot $slot)
+ {
+ return $this->item($slot->room, new RoomTransformer());
+ }
+
+ /**
+ * Include hold.
+ *
+ * @return League\Fractal\ItemResource
+ */
+ public function includeHold(EscaperoomSlot $slot)
+ {
+ if (! $hold = $slot->hold) {
+ return $this->null();
+ }
+
+ return $this->item($hold, new HoldTransformer());
+ }
+
+ /**
+ * Include rate.
+ *
+ * @return League\Fractal\ItemResource
+ */
+ public function includeRate(EscaperoomSlot $slot)
+ {
+ return $this->item($slot->rate, new RateTransformer());
+ }
+}
diff --git a/app/Transformers/LocationTransformer.php b/app/Transformers/LocationTransformer.php
new file mode 100644
index 0000000..59d251f
--- /dev/null
+++ b/app/Transformers/LocationTransformer.php
@@ -0,0 +1,38 @@
+toArray();
+ }
+}
diff --git a/app/Transformers/RateTransformer.php b/app/Transformers/RateTransformer.php
new file mode 100644
index 0000000..d6acf88
--- /dev/null
+++ b/app/Transformers/RateTransformer.php
@@ -0,0 +1,67 @@
+ $rate->id,
+ 'slug' => $rate->slug,
+ 'name' => $rate->name,
+ 'public_1' => $rate->public_1,
+ 'public_2' => $rate->public_2,
+ 'public_3' => $rate->public_3,
+ 'public_4' => $rate->public_4,
+ 'public_5' => $rate->public_5,
+ 'public_6' => $rate->public_6,
+ 'public_7' => $rate->public_7,
+ 'public_8' => $rate->public_8,
+ 'public_9' => $rate->public_9,
+ 'public_10' => $rate->public_10,
+ 'private_1' => $rate->private_1,
+ 'private_2' => $rate->private_2,
+ 'private_3' => $rate->private_3,
+ 'private_4' => $rate->private_4,
+ 'private_5' => $rate->private_5,
+ 'private_6' => $rate->private_6,
+ 'private_7' => $rate->private_7,
+ 'private_8' => $rate->private_8,
+ 'private_9' => $rate->private_9,
+ 'private_10' => $rate->private_10,
+ 'private_11' => $rate->private_11,
+ 'private_12' => $rate->private_12,
+ 'private_13' => $rate->private_13,
+ 'private_14' => $rate->private_14,
+ 'private_15' => $rate->private_15,
+ 'private_16' => $rate->private_16,
+ ];
+ }
+}
diff --git a/app/Transformers/RoomTransformer.php b/app/Transformers/RoomTransformer.php
new file mode 100644
index 0000000..2c6a122
--- /dev/null
+++ b/app/Transformers/RoomTransformer.php
@@ -0,0 +1,79 @@
+ $room->id,
+ 'location_id' => $room->location_id,
+ 'theme_id' => $room->theme_id,
+ 'rate_id' => $room->rate_id,
+ 'opened_at' => $room->opened_at,
+ 'closed_at' => $room->closed_at,
+ 'participants' => $room->participants,
+ 'participants_private' => $room->participants_private,
+ 'reset_time' => $room->reset_time,
+ 'occupied_time' => $room->occupied_time,
+ 'priority' => $room->priority,
+ 'note' => $room->note,
+ 'title' => $room->title,
+ 'excerpt' => $room->excerpt,
+ 'description' => $room->description,
+ 'image_id' => $room->image_id,
+ 'poster_image_id' => $room->poster_image_id,
+ 'icon_url' => $room->icon_url,
+ 'youtube' => $room->youtube,
+ 'pitch' => $room->pitch,
+ ];
+ }
+
+ /**
+ * Include theme.
+ *
+ * @return League\Fractal\ItemResource
+ */
+ public function includeTheme(Room $room)
+ {
+ return $this->item($room->theme, new ThemeTransformer());
+ }
+
+ /**
+ * Include location.
+ *
+ * @return League\Fractal\ItemResource
+ */
+ public function includeLocation(Room $room)
+ {
+ return $this->item($room->location, new LocationTransformer());
+ }
+}
diff --git a/app/Transformers/ThemeTransformer.php b/app/Transformers/ThemeTransformer.php
new file mode 100644
index 0000000..9af25f5
--- /dev/null
+++ b/app/Transformers/ThemeTransformer.php
@@ -0,0 +1,59 @@
+ $theme->id,
+ 'slug' => $theme->slug,
+ 'name' => $theme->name,
+ 'title' => $theme->title,
+ 'excerpt' => $theme->excerpt,
+ 'description' => $theme->description,
+ 'synopsis' => $theme->synopsis,
+ 'story' => $theme->story,
+ 'info' => $theme->info,
+ 'duration' => $theme->duration,
+ 'occupied_time' => $theme->occupied_time,
+ 'scavenger_level' => $theme->scavenger_level,
+ 'puzzle_level' => $theme->puzzle_level,
+ 'escape_rate' => $theme->escape_rate,
+ 'image_id' => $theme->image_id,
+ 'video_id' => $theme->video_id,
+ 'poster_image_id' => $theme->poster_image_id,
+ 'icon_id' => $theme->icon_id,
+ 'icon_url' => $theme->icon_url,
+ 'youtube' => $theme->youtube,
+ 'pitch' => $theme->pitch,
+ ];
+ }
+}
diff --git a/composer.json b/composer.json
index 7477547..57e817c 100644
--- a/composer.json
+++ b/composer.json
@@ -6,24 +6,35 @@
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
+ "drewroberts/blog": "^4.5.4",
"fideloper/proxy": "^4.4.1",
"fruitcake/laravel-cors": "^2.0.3",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.38",
"laravel/nova": "^3.22",
- "silvanite/nova-field-cloudinary": "^1.3",
"laravel/tinker": "^2.6.1",
+ "silvanite/nova-field-cloudinary": "^1.3",
+ "spatie/laravel-googletagmanager": "^2.6",
+ "tipoff/authorization": "^2.10.0",
+ "tipoff/checkout": "^2.8.0",
+ "tipoff/discounts": "^2.2.1",
+ "tipoff/escape-room": "^2.4.0",
+ "tipoff/feedback": "^2.1",
+ "tipoff/fees": "^2.3.1",
+ "tipoff/forms": "^2.2.0",
+ "tipoff/locations": "^2.14.1",
+ "tipoff/notes": "^2.2.0",
+ "tipoff/products": "^2.2.2",
+ "tipoff/profiles": "^2.0.0",
+ "tipoff/seo": "^2.8.0",
+ "tipoff/statuses": "^2.2.1",
+ "tipoff/support": "^2.2.0",
+ "tipoff/taxes": "^2.2.1",
+ "tipoff/vouchers": "^2.4.0",
+ "tipoff/waivers": "^2.1.1",
+ "tipoff/reviews": "^2.2.1",
"tipoff/addresses": "^2.9.1",
- "tipoff/authorization": "^2.8.6",
- "tipoff/checkout": "^2.7.2",
- "tipoff/support": "^2.1.5",
- "tipoff/seo": "^2.7.6",
- "tipoff/notes": "^2.1.0",
- "tipoff/forms": "^2.1.0",
- "drewroberts/blog": "^4.5.4",
- "tipoff/escape-room": "^2.3.4",
- "tipoff/locations": "^2.12.0",
- "tipoff/scheduler": "^2.0.1",
+ "tipoff/scheduler": "^2.0.1"
},
"require-dev": {
"facade/ignition": "^2.8.3",
@@ -34,6 +45,10 @@
"phpunit/phpunit": "^9.3.3"
},
"autoload": {
+ "files": [
+ "app/Helpers/Website.php",
+ "app/Helpers/Test.php"
+ ],
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
diff --git a/config/auth.php b/config/auth.php
index 4e9cbaa..002ab7f 100644
--- a/config/auth.php
+++ b/config/auth.php
@@ -51,6 +51,12 @@
'provider' => 'users',
'hash' => false,
],
+
+ 'customer' => [
+ 'driver' => 'session',
+ 'provider' => 'users',
+ ],
+
],
/*
diff --git a/config/googletagmanager.php b/config/googletagmanager.php
new file mode 100644
index 0000000..c8b35ef
--- /dev/null
+++ b/config/googletagmanager.php
@@ -0,0 +1,27 @@
+ env('GOOGLE_TAG_MANAGER_ID', ''),
+
+ /*
+ * Enable or disable script rendering. Useful for local development.
+ */
+ 'enabled' => env('GOOGLE_TAG_MANAGER_ENABLED', true),
+
+ /*
+ * If you want to use some macro's you 'll probably store them
+ * in a dedicated file. You can optionally define the path
+ * to that file here and we will load it for you.
+ */
+ 'macroPath' => env('GOOGLE_TAG_MANAGER_MACRO_PATH', ''),
+
+ /*
+ * The key under which data is saved to the session with flash.
+ */
+ 'sessionKey' => env('GOOGLE_TAG_MANAGER_SESSION_KEY', '_googleTagManager'),
+
+];
diff --git a/mix-manifest.json b/mix-manifest.json
new file mode 100644
index 0000000..eeaabe2
--- /dev/null
+++ b/mix-manifest.json
@@ -0,0 +1,16 @@
+{
+ "/nova-components/Booking/dist/js/tool.js": "/nova-components/Booking/dist/js/tool.js",
+ "/nova-components/BookingCalendar/dist/js/tool.js": "/nova-components/BookingCalendar/dist/js/tool.js",
+ "/public/js/app.js": "/public/js/app.js",
+ "/public/js/booking.js": "/public/js/booking.js",
+ "/public/js/gifts.js": "/public/js/gifts.js",
+ "/public/js/waiver.js": "/public/js/waiver.js",
+ "/public/css/website.css": "/public/css/website.css",
+ "/public/css/feedback.css": "/public/css/feedback.css",
+ "/public/css/waiver.css": "/public/css/waiver.css",
+ "/public/css/booking.css": "/public/css/booking.css",
+ "/public/css/gifts.css": "/public/css/gifts.css",
+ "/nova-components/Booking/dist/css/tool.css": "/nova-components/Booking/dist/css/tool.css",
+ "/nova-components/BookingCalendar/dist/css/tool.css": "/nova-components/BookingCalendar/dist/css/tool.css",
+ "/public/css/app.css": "/public/css/app.css"
+}
diff --git a/package.json b/package.json
index 00c6506..badad3e 100644
--- a/package.json
+++ b/package.json
@@ -2,17 +2,68 @@
"private": true,
"scripts": {
"dev": "npm run development",
- "development": "mix",
- "watch": "mix watch",
- "watch-poll": "mix watch -- --watch-options-poll=1000",
- "hot": "mix watch --hot",
+ "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "watch": "npm run production -- --watch",
+ "watch-poll": "npm run watch -- --watch-poll",
+ "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
- "production": "mix --production"
+ "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
+ "eslint": "^7.5.0",
+ "eslint-config-standard": "^14.1.1",
+ "eslint-plugin-import": "^2.22.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^4.2.1",
+ "eslint-plugin-standard": "^4.0.1",
+ "eslint-plugin-vue": "^6.2.2",
+ "husky": "^4.2.5",
+ "lint-staged": "^10.2.11"
+ },
+ "dependencies": {
+ "@buddye/postcss-remove-important": "^1.0.3",
+ "@fortawesome/fontawesome-free": "^5.13.0",
+ "@fullcalendar/core": "^4.4.2",
+ "@fullcalendar/daygrid": "^4.4.2",
+ "@fullcalendar/resource-timegrid": "^4.4.2",
+ "@fullcalendar/resource-timeline": "^4.4.2",
+ "@fullcalendar/vue": "^4.4.2",
+ "@fullhuman/postcss-purgecss": "^2.3.0",
+ "@stripe/stripe-js": "^1.7.0",
"axios": "^0.21",
- "laravel-mix": "^6.0.6",
+ "bootstrap": "^4.5.0",
+ "cross-env": "^7.0.2",
+ "css-byebye": "^2.0.2",
+ "cssnano": "^4.1.10",
+ "icheck-bootstrap": "^3.0.1",
+ "jquery": "^3.5.1",
+ "laravel-mix": "^5.0.4",
"lodash": "^4.17.19",
- "postcss": "^8.1.14"
+ "lodash.sortby": "^4.7.0",
+ "moment": "^2.26.0",
+ "overlayscrollbars": "^1.12.0",
+ "popper.js": "^1.12",
+ "postcss": "^7.0.32",
+ "postcss-clear-empty-strings": "^1.0.0",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-loader": "^3.0.0",
+ "postcss-no-important": "^3.0.1",
+ "postcss-rm-imports": "^1.1.0",
+ "postcss-sanitize": "0.0.7",
+ "purgecss": "^2.3.0",
+ "resolve-url-loader": "^2.3.1",
+ "sass": "^1.26.8",
+ "sass-loader": "^8.0.0",
+ "signature_pad": "^3.0.0-beta.3",
+ "uuid": "^8.1.0",
+ "vue": "^2.5.17",
+ "vue-moment": "^4.1.0",
+ "vue-router": "^3.3.4",
+ "vue-signature-pad": "^2.0.2",
+ "vue-template-compiler": "^2.6.10",
+ "vue-the-mask": "^0.11.1",
+ "vuejs-datepicker": "^1.6.2",
+ "vuelidate": "^0.7.5",
+ "vuex": "^3.4.0"
}
}
diff --git a/public/img/background/testimonial-lower-left-corner.svg b/public/img/background/testimonial-lower-left-corner.svg
new file mode 100644
index 0000000..343a36a
--- /dev/null
+++ b/public/img/background/testimonial-lower-left-corner.svg
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/background/testimonial-upper-right-corner.svg b/public/img/background/testimonial-upper-right-corner.svg
new file mode 100644
index 0000000..43e7009
--- /dev/null
+++ b/public/img/background/testimonial-upper-right-corner.svg
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/background/tger-hero-bg.png b/public/img/background/tger-hero-bg.png
new file mode 100644
index 0000000..b309e7c
Binary files /dev/null and b/public/img/background/tger-hero-bg.png differ
diff --git a/public/img/background/tger-purple-halftone.png b/public/img/background/tger-purple-halftone.png
new file mode 100644
index 0000000..9ccf26f
Binary files /dev/null and b/public/img/background/tger-purple-halftone.png differ
diff --git a/public/img/background/tger-purple-halftone.svg b/public/img/background/tger-purple-halftone.svg
new file mode 100644
index 0000000..e8e9884
--- /dev/null
+++ b/public/img/background/tger-purple-halftone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/background/tger-testimonial-bg.svg b/public/img/background/tger-testimonial-bg.svg
new file mode 100644
index 0000000..b946cfe
--- /dev/null
+++ b/public/img/background/tger-testimonial-bg.svg
@@ -0,0 +1,1805 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/background/tger-yellow-halftone.png b/public/img/background/tger-yellow-halftone.png
new file mode 100644
index 0000000..9c30e8d
Binary files /dev/null and b/public/img/background/tger-yellow-halftone.png differ
diff --git a/public/img/background/tger-yellow-halftone.svg b/public/img/background/tger-yellow-halftone.svg
new file mode 100644
index 0000000..e83cfd5
--- /dev/null
+++ b/public/img/background/tger-yellow-halftone.svg
@@ -0,0 +1,19666 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/tger.jpg b/public/img/tger.jpg
new file mode 100644
index 0000000..cd05303
Binary files /dev/null and b/public/img/tger.jpg differ
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
new file mode 100644
index 0000000..5ddd485
--- /dev/null
+++ b/public/mix-manifest.json
@@ -0,0 +1,7 @@
+{
+ "/js/app.js": "/js/app.js",
+ "/js/booking.js": "/js/booking.js",
+ "/css/website.css": "/css/website.css",
+ "/css/booking.css": "/css/booking.css",
+ "/css/app.css": "/css/app.css"
+}
diff --git a/resources/js/app.js b/resources/js/app.js
index 40c55f6..cad5b8a 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -1 +1,11 @@
require('./bootstrap');
+
+window.Vue = require('vue');
+
+import moment from 'moment';
+
+Vue.prototype.moment = moment;
+
+const app = new Vue({
+ el: '#app',
+});
diff --git a/resources/js/booking.js b/resources/js/booking.js
new file mode 100644
index 0000000..d6900ad
--- /dev/null
+++ b/resources/js/booking.js
@@ -0,0 +1,29 @@
+require('./bootstrap');
+
+import Vue from 'vue';
+import VueRouter from 'vue-router';
+import moment from 'moment';
+import store from './booking/store';
+import './booking/filters';
+
+Vue.use(VueRouter);
+
+Vue.prototype.moment = moment;
+Vue.use(require('vue-moment'));
+Vue.prototype.accessToken = process.env.MIX_TGER_ACCESS_TOKEN;
+Vue.prototype.csrfToken = document.querySelector('meta[name="csrf-token"]').content;
+
+Vue.component('countdown-clock', require('./booking/components/CountdownClock').default);
+Vue.component('games-list', require('./booking/components/GamesList').default);
+Vue.component('purchase-form', require('./booking/components/PurchaseForm').default);
+Vue.component('deduction-code-form', require('./booking/components/DeductionCodeForm').default);
+
+const router = new VueRouter({
+ mode: 'history',
+});
+
+new Vue({
+ el: '#app',
+ store,
+ router,
+});
diff --git a/resources/js/booking/components/CountdownClock.vue b/resources/js/booking/components/CountdownClock.vue
new file mode 100644
index 0000000..6a40cd1
--- /dev/null
+++ b/resources/js/booking/components/CountdownClock.vue
@@ -0,0 +1,94 @@
+
+
+
+ {{ displayMinutes }}:{{ displaySeconds }}
+ (Expired)
+
+
+
Holding your booking. Please do not leave or refresh this page to secure your booking.
+
+
+
+
+
diff --git a/resources/js/booking/components/DeductionCodeForm.vue b/resources/js/booking/components/DeductionCodeForm.vue
new file mode 100644
index 0000000..e629170
--- /dev/null
+++ b/resources/js/booking/components/DeductionCodeForm.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/resources/js/booking/components/ErrorMessage.vue b/resources/js/booking/components/ErrorMessage.vue
new file mode 100644
index 0000000..bca916b
--- /dev/null
+++ b/resources/js/booking/components/ErrorMessage.vue
@@ -0,0 +1,38 @@
+
+
+ {{ message }}
+
+
+
+
diff --git a/resources/js/booking/components/GameItem.vue b/resources/js/booking/components/GameItem.vue
new file mode 100644
index 0000000..e01e024
--- /dev/null
+++ b/resources/js/booking/components/GameItem.vue
@@ -0,0 +1,254 @@
+
+
+
+
+
+ {{ item.time }}
+ {{ openAvailability }}
+
+
{{ item.time }}
+
+
+ {{ item.theme }}
+
+
{{ openAvailability }}
+
+
+
+ Select
+
+
+ Sold Out
+
+
+ Reserved
+
+
+ X
+
+
+
+
+
+
+
+
+ Show Room Description
+ Hide Room Description
+
+
+ {{ item.description }}
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/booking/components/GamesList.vue b/resources/js/booking/components/GamesList.vue
new file mode 100644
index 0000000..2076e8c
--- /dev/null
+++ b/resources/js/booking/components/GamesList.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loading...
+
+
+
+
+
+
+
+
+
Change date from {{ formattedDate }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/booking/components/PurchaseForm.vue b/resources/js/booking/components/PurchaseForm.vue
new file mode 100644
index 0000000..daa4766
--- /dev/null
+++ b/resources/js/booking/components/PurchaseForm.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
diff --git a/resources/js/booking/components/ThemeSelector.vue b/resources/js/booking/components/ThemeSelector.vue
new file mode 100644
index 0000000..256bf44
--- /dev/null
+++ b/resources/js/booking/components/ThemeSelector.vue
@@ -0,0 +1,55 @@
+
+
+
+ Filter by Theme
+
+
+
+
+ {{ theme.title }}
+
+
+
+
+
+
diff --git a/resources/js/booking/components/WaiverCard.vue b/resources/js/booking/components/WaiverCard.vue
new file mode 100644
index 0000000..3d445c8
--- /dev/null
+++ b/resources/js/booking/components/WaiverCard.vue
@@ -0,0 +1,30 @@
+
+
+
Waiver
+
+
+ {{ body }}
+
+
+
+
+
diff --git a/resources/js/booking/error-messages.js b/resources/js/booking/error-messages.js
new file mode 100644
index 0000000..6199881
--- /dev/null
+++ b/resources/js/booking/error-messages.js
@@ -0,0 +1,6 @@
+const errorMessages = {
+ generic: 'Something went wrong.',
+ timeout: 'Timeout',
+};
+
+export default errorMessages;
diff --git a/resources/js/booking/event-bus.js b/resources/js/booking/event-bus.js
new file mode 100644
index 0000000..4bfd290
--- /dev/null
+++ b/resources/js/booking/event-bus.js
@@ -0,0 +1,5 @@
+import Vue from 'vue';
+
+const EventBus = new Vue();
+
+export default EventBus;
diff --git a/resources/js/booking/filters.js b/resources/js/booking/filters.js
new file mode 100644
index 0000000..b5b3a9f
--- /dev/null
+++ b/resources/js/booking/filters.js
@@ -0,0 +1,31 @@
+import Vue from 'vue';
+import moment from 'moment';
+
+Vue.filter('dollars', function (value) {
+ if (!value) {
+ return '';
+ }
+
+ const dollars = value / 100;
+
+ return dollars.toLocaleString('en-US', {
+ style: 'currency',
+ currency: 'USD',
+ });
+});
+
+Vue.filter('timeOfDay', function (value) {
+ if (!value) {
+ return '';
+ }
+
+ return moment(value).format('hh:mm A');
+});
+
+Vue.filter('fullDate', function (value) {
+ if (!value) {
+ return '';
+ }
+
+ return moment(value).format('dddd, MMMM Do YYYY');
+});
diff --git a/resources/js/booking/mixins/loader.js b/resources/js/booking/mixins/loader.js
new file mode 100644
index 0000000..8975cca
--- /dev/null
+++ b/resources/js/booking/mixins/loader.js
@@ -0,0 +1,20 @@
+export default {
+ data() {
+ return {
+ loading: false,
+ };
+ },
+ methods: {
+ startLoading() {
+ this.loading = true;
+ },
+ stopLoading() {
+ this.loading = false;
+ },
+ },
+ computed: {
+ isLoading() {
+ return this.loading;
+ },
+ },
+};
diff --git a/resources/js/booking/mixins/redirect.js b/resources/js/booking/mixins/redirect.js
new file mode 100644
index 0000000..06c1306
--- /dev/null
+++ b/resources/js/booking/mixins/redirect.js
@@ -0,0 +1,14 @@
+export default {
+ methods: {
+ redirectTo(path) {
+ window.location.href = `${this.baseUrl}/${path}`;
+ },
+ },
+ computed: {
+ baseUrl() {
+ const pathSegments = window.location.pathname.split('/');
+
+ return `/${pathSegments[1]}/${pathSegments[2]}`;
+ },
+ },
+};
diff --git a/resources/js/booking/mixins/scroll-top.js b/resources/js/booking/mixins/scroll-top.js
new file mode 100644
index 0000000..46bfc4c
--- /dev/null
+++ b/resources/js/booking/mixins/scroll-top.js
@@ -0,0 +1,7 @@
+export default {
+ methods: {
+ scrollToTop () {
+ window.scrollTo({ top: 0, behavior: 'smooth' })
+ }
+ }
+}
diff --git a/resources/js/booking/moment-decorator.js b/resources/js/booking/moment-decorator.js
new file mode 100644
index 0000000..1791eb5
--- /dev/null
+++ b/resources/js/booking/moment-decorator.js
@@ -0,0 +1,51 @@
+import moment from 'moment'
+
+moment.prototype.previousDay = function () {
+ return this.subtract(1, 'day')
+}
+
+moment.prototype.nextDay = function () {
+ return this.add(1, 'day')
+}
+
+moment.prototype.toSimpleDateString = function () {
+ return this.format('YYYY-MM-DD')
+}
+
+moment.prototype.isMonday = function () {
+ return this.isoWeekday() === 1
+}
+
+moment.prototype.isTuesday = function () {
+ return this.isoWeekday() === 2
+}
+
+moment.prototype.isToday = function () {
+ return this.isSame(moment(), 'day')
+}
+
+moment.prototype.monthsFromNow = function () {
+ return this.diff(moment(), 'months')
+}
+
+moment.prototype.closestWeekday = function (weekdayIdentifier) {
+ const today = moment().isoWeekday()
+
+ return today <= weekdayIdentifier
+ ? moment().isoWeekday(weekdayIdentifier)
+ : moment().add(1, 'weeks').isoWeekday(weekdayIdentifier)
+}
+
+moment.prototype.toSimpleDateTimeString = function () {
+ return this.format('YYYY-MM-DD hh:mm:ss')
+}
+
+moment.prototype.isPast = function () {
+ return this.isBefore(moment(), 'day')
+}
+
+moment.prototype.isFuture = function () {
+ return this.isAfter(moment(), 'day')
+}
+
+export default moment
diff --git a/resources/js/booking/store.js b/resources/js/booking/store.js
new file mode 100644
index 0000000..5d3144d
--- /dev/null
+++ b/resources/js/booking/store.js
@@ -0,0 +1,41 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import moment from 'moment';
+
+Vue.use(Vuex);
+
+const store = new Vuex.Store({
+ state: {
+ availableGames: [],
+ },
+ getters: {
+ availableGames: (state) => {
+ return state.availableGames;
+ },
+ },
+ mutations: {
+ setAvailableGames(state, games) {
+ state.availableGames = games;
+ },
+ },
+ actions: {
+ getAvailableGames({ commit }, { locationSlug, date }) {
+ const formattedDate = moment(date).format('YYYY-MM-DD');
+
+ return window.axios
+ .get(
+ `/api/availability/${locationSlug}?include=room.theme,room.location,rate&initial_date=${formattedDate}&final_date=${formattedDate}&filter[bookable]=true`
+ )
+ .then((response) => {
+ commit('setAvailableGames', response.data.data);
+
+ return Promise.resolve(response);
+ })
+ .catch((error) => {
+ return Promise.reject(error);
+ });
+ },
+ },
+});
+
+export default store;
diff --git a/resources/sass/_about-website.scss b/resources/sass/_about-website.scss
new file mode 100644
index 0000000..cccf316
--- /dev/null
+++ b/resources/sass/_about-website.scss
@@ -0,0 +1,16 @@
+.tger-about {
+ padding: 60px 0;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 60px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 15px;
+ margin-bottom: 50px;
+ font-size: 25px;
+ }
+ }
+}
diff --git a/resources/sass/_bookings-website.scss b/resources/sass/_bookings-website.scss
new file mode 100644
index 0000000..f2e824b
--- /dev/null
+++ b/resources/sass/_bookings-website.scss
@@ -0,0 +1,23 @@
+.tger-bookings {
+ background-color: $primary;
+ height: 500px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ h2 {
+ color: $white;
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ p {
+ color: $white;
+ text-align: center;
+ font-weight: 300;
+
+ strong {
+ font-weight: 900;
+ }
+ }
+}
diff --git a/resources/sass/_buttons-website.scss b/resources/sass/_buttons-website.scss
new file mode 100644
index 0000000..e18d847
--- /dev/null
+++ b/resources/sass/_buttons-website.scss
@@ -0,0 +1,272 @@
+.button-link {
+ color: $purple;
+ font-family: $font2;
+ display: block;
+ border: none;
+ background-color: transparent;
+ transition: all 0.5s;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button0 {
+ color: $white;
+ border-color: transparent;
+ background-color: transparent;
+ padding: 0 10px;
+ font-family: $font1;
+ transition: all 0.5s;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button1 {
+ color: $white;
+ border: 2px solid $white;
+ background-color: $purple;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ border-color: $white;
+ background-color: $white;
+ color: $purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button2 {
+ color: $white;
+ background-color: $blue;
+ border: 2px solid $blue;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ border-color: $muted-blue;
+ background-color: $muted-blue;
+ color: $white;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button3 {
+ color: $blue;
+ background-color: transparent;
+ border: 2px solid $blue;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ border-color: $blue;
+ background-color: $blue;
+ color: $white;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button4 {
+ color: $white;
+ background-color: $mint;
+ border: 2px solid $mint;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ border-color: $white;
+ background-color: $white;
+ color: $mint;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button5 {
+ color: $purple;
+ background-color: transparent;
+ border: 2px solid $purple;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: $purple;
+ color: $white;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button6 {
+ color: $white;
+ background-color: $purple;
+ border: 2px solid $purple;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: $white;
+ color: $purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button7 {
+ color: $purple;
+ background-color: $white;
+ border: 2px solid $white;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: $purple;
+ border-color: $purple;
+ color: $white;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button8 {
+ color: $black;
+ border: 2px solid $black;
+ padding: 10px 15px;
+ background-color: transparent;
+ font-family: $font1;
+ transition: all 0.5s;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $white;
+ background-color: $black;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button9 {
+ color: $pink;
+ border: 2px solid $pink;
+ background-color: transparent;
+ font-family: $font1;
+ padding: 10px 15px;
+ transition: all 0.5s;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $yellow;
+ background-color: $pink;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
+
+.button10 {
+ color: $white;
+ background-color: $sold-out;
+ border: 2px solid $sold-out;
+ font-size: 15px;
+ font-weight: 500;
+ font-family: $font1;
+ text-transform: uppercase;
+ padding: 10px 15px;
+ display: block;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+}
\ No newline at end of file
diff --git a/resources/sass/_contact-website.scss b/resources/sass/_contact-website.scss
new file mode 100644
index 0000000..2eab3c5
--- /dev/null
+++ b/resources/sass/_contact-website.scss
@@ -0,0 +1,40 @@
+.tger-contact {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ p {
+ margin-bottom: 60px;
+ }
+
+ fieldset {
+ .form-group {
+ margin-bottom: 15px;
+
+ .form-control {
+ position: relative;
+ z-index: 1;
+ border-radius: 0;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_cta-website.scss b/resources/sass/_cta-website.scss
new file mode 100644
index 0000000..4f78d18
--- /dev/null
+++ b/resources/sass/_cta-website.scss
@@ -0,0 +1,56 @@
+.tger-cta {
+ margin-bottom: 200px;
+ position: relative;
+
+ &__container {
+ background-color: $purple;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ padding: 60px 0;
+ @media (max-width: 991px) {
+ padding: 100px 0 0;
+ }
+ @media (max-width: 575px) {
+ padding: 125px 0 0;
+ }
+
+ h3 {
+ color: $white;
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: center;
+ }
+ }
+
+ &__top {
+ position: relative;
+ width: 0;
+ height: 0;
+ border-right: 1300px solid $purple;
+ border-top: 175px solid transparent;
+ border-bottom: 0px solid transparent;
+ z-index: 1;
+ @media (max-width: 575px) {
+ border-top: 230px solid transparent;
+ }
+ }
+
+ &__bottom {
+ position: relative;
+ width: 0;
+ height: 0;
+ border-left: 1300px solid $purple;
+ border-top: 0px solid transparent;
+ border-bottom: 175px solid transparent;
+ z-index: 1;
+ @media (max-width: 575px) {
+ border-bottom: 230px solid transparent;
+ }
+ }
+}
diff --git a/resources/sass/_employment-website.scss b/resources/sass/_employment-website.scss
new file mode 100644
index 0000000..1137085
--- /dev/null
+++ b/resources/sass/_employment-website.scss
@@ -0,0 +1,61 @@
+.tger-employment {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ fieldset {
+ margin-top: 50px;
+
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ .tger-upload {
+ background-color: $purple;
+ color: $white;
+ padding: 5px 10px;
+ position: relative;
+ z-index: 1;
+ display: inline-block;
+
+ input[type='file'] {
+ opacity: 0;
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ left: 0;
+ top: 0;
+ z-index: 2;
+ }
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_faq-website.scss b/resources/sass/_faq-website.scss
new file mode 100644
index 0000000..4f61b0a
--- /dev/null
+++ b/resources/sass/_faq-website.scss
@@ -0,0 +1,57 @@
+.tger-faq {
+ padding: 160px 0 160px;
+ margin: -100px 0;
+ position: relative;
+ z-index: 0;
+
+ &__inner {
+ position: relative;
+ z-index: 1;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 60px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ amp-accordion {
+ section {
+ margin-bottom: 30px;
+
+ h3 {
+ background-color: $yellow;
+ border: none;
+ padding: 10px;
+ font-size: 22px;
+ margin-bottom: 0;
+ @media (max-width: 767px) {
+ font-size: 16px;
+ }
+
+ span {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ i {
+ font-size: 36px;
+ }
+ }
+ }
+
+ p {
+ border-left: 1px solid $purple;
+ border-right: 1px solid $purple;
+ border-bottom: 1px solid $purple;
+ padding: 20px;
+ }
+ }
+ }
+ }
+}
diff --git a/resources/sass/_footer-website.scss b/resources/sass/_footer-website.scss
new file mode 100644
index 0000000..14defaf
--- /dev/null
+++ b/resources/sass/_footer-website.scss
@@ -0,0 +1,201 @@
+.tger-footer__bg {
+ border-top: 100px solid transparent;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid $purple;
+ position: relative;
+ max-width: 1300px;
+ margin: 0 auto;
+ z-index: 2;
+}
+.tger-footer {
+ position: relative;
+ z-index: 1;
+ box-sizing: border-box;
+ max-width: 1300px;
+ margin: 0 auto;
+
+ &__wrapper {
+ padding: 60px 0 10px;
+ background-color: $purple;
+ }
+
+ &__mobile-main {
+ width: 90%;
+ margin: 0 auto;
+ display: flex;
+ justify-content: flex-start;
+ flex-direction: column;
+ position: relative;
+ z-index: 2;
+ @media (min-width: 768px) {
+ display: none;
+ }
+ }
+
+ &__mobile-main-column {
+ flex: 0 0 100%;
+ @media (min-width: 768px) {
+ display: none;
+ }
+ }
+
+ &__desktop-main {
+ width: 90%;
+ margin: 0 auto 100px;
+ display: flex;
+ justify-content: space-evenly;
+ position: relative;
+ z-index: 2;
+ @media (max-width: 991px) {
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ }
+ @media (max-width: 767) {
+ display: none;
+ }
+ }
+
+ &__desktop-main-column {
+ flex: 1;
+ @media (max-width: 991px) {
+ flex: 0 0 50%;
+ margin-bottom: 25px;
+ }
+ @media (max-width: 767px) {
+ display: none;
+ }
+ }
+
+ &__inner {
+ h4 {
+ text-transform: uppercase;
+ background-color: transparent;
+ border: none;
+ border-top: 1px solid $white;
+ padding: 15px 0;
+ margin: 0;
+ color: $white;
+ @media (min-width: 768px) {
+ border-color: transparent;
+ padding: 0;
+ font-size: 13px;
+ margin-bottom: 25px;
+ }
+
+ &:last-child {
+ border-bottom: 1px solid $white;
+ }
+
+ span.footer-column-heading {
+ color: $white;
+ font-size: 16px;
+ font-family: $font1;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 2px;
+ }
+ }
+
+ ul {
+ list-style: none inside;
+ padding-left: 15px;
+ margin: 0 0 20px;
+ @media (min-width: 768px) {
+ padding-left: 0;
+ }
+
+ li {
+ a {
+ color: $white;
+ font-size: 16px;
+ font-weight: 300;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+ }
+
+ &__copyright {
+ width: 90%;
+ margin: 0 auto;
+ position: relative;
+ z-index: 2;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ @media(max-width: 767px) {
+ flex-direction: column;
+ justify-content: unset;
+ }
+ }
+
+ &__copyright-left {
+ list-style: none inside;
+ display: flex;
+ padding-left: 0;
+ @media (max-width: 991px) {
+ flex-wrap: wrap;
+ }
+
+ li {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ margin-right: 20px;
+ @media (max-width: 575px) {
+ margin: 10px 10px 10px 0;
+ }
+
+ a {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+
+ &__copyright-right {
+ list-style: none inside;
+ display: flex;
+ padding-left: 0;
+ @media (max-width: 767px) {
+ justify-content: center;
+ margin-top: 15px;
+ }
+
+ li {
+ color: $white;
+ margin-right: 20px;
+ @media (max-width: 575px) {
+ margin: 10px 10px 10px 0;
+ }
+
+ a {
+ color: $white;
+ font-size: 18px;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
diff --git a/resources/sass/_gift-cards-website.scss b/resources/sass/_gift-cards-website.scss
new file mode 100644
index 0000000..4919671
--- /dev/null
+++ b/resources/sass/_gift-cards-website.scss
@@ -0,0 +1,61 @@
+.tger-gift-cards {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+ @media (max-width: 991px) {
+ padding: 160px 0 100px;
+ }
+
+ h3 {
+ margin-bottom: 0;
+ @media (max-width: 575px) {
+ font-size: 20px;
+ }
+ }
+
+ &__container {
+ display: flex;
+ justify-content: center;
+ flex-wrap: wrap;
+ width: 95%;
+ margin: 0 auto;
+
+ .card {
+ margin: 10px;
+ padding: 20px;
+ width: 250px;
+ position: relative;
+ z-index: 1;
+
+ .card-body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ height: 100%;
+
+ .card-title {
+ text-align: center;
+ font-size: 16px;
+ }
+
+ .card-text {
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+
+ &__checkout {
+ .form-control {
+ position: relative;
+ z-index: 1;
+ }
+
+ a,
+ button {
+ position: relative;
+ z-index: 1;
+ }
+ }
+}
diff --git a/resources/sass/_globals-website 2.scss b/resources/sass/_globals-website 2.scss
new file mode 100644
index 0000000..952128e
--- /dev/null
+++ b/resources/sass/_globals-website 2.scss
@@ -0,0 +1,18 @@
+.tger-website {
+ background-color: $body-bg;
+ font-family: 'Rubik', sans-serif;
+
+ .tger-website-wrapper {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $white;
+
+ .cursor-pointer {
+ cursor: pointer;
+ }
+
+ .behindnav {
+ background-color: #7c2a8b;
+ }
+ }
+}
diff --git a/resources/sass/_globals-website.scss b/resources/sass/_globals-website.scss
new file mode 100644
index 0000000..0bbc641
--- /dev/null
+++ b/resources/sass/_globals-website.scss
@@ -0,0 +1,85 @@
+.tger-website {
+ background-color: $body-bg;
+ font-family: 'Rubik', sans-serif;
+
+ .tger-website-wrapper {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $white;
+ overflow-x: hidden;
+
+ .cursor-pointer {
+ cursor: pointer;
+ }
+
+ .behindnav {
+ background-color: #7c2a8b;
+ }
+
+ .tger-main {
+ background-color: $white;
+ position: relative;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 0;
+ opacity: 0.3;
+ top: 200px;
+ @media(min-width: 768px) and (max-width: 991px) {
+ top: 500px;
+ }
+ }
+
+ .covid-notice {
+ width: 85%;
+ margin: 40px auto;
+ background-color: $yellow;
+ padding: 20px;
+ position: relative;
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+
+ .notes-image {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ }
+
+ .notes-text {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ height: 100%;
+
+ p {
+ margin-bottom: 0;
+
+ a {
+ color: $purple;
+
+ &:hover {
+ color: $muted-purple;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ span.required {
+ color: $secondary;
+ }
+ }
+}
diff --git a/resources/sass/_header-website.scss b/resources/sass/_header-website.scss
new file mode 100644
index 0000000..5aa05b4
--- /dev/null
+++ b/resources/sass/_header-website.scss
@@ -0,0 +1,148 @@
+.tger-website-header {
+ position: sticky;
+ position: -webkit-sticky;
+ top: -1px;
+ width: 100%;
+ background-color: $purple;
+ max-width: 1300px;
+ margin: 0 auto;
+ padding: 0;
+ z-index: 100;
+
+ &__navbar-container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100%;
+ width: 95%;
+ margin: 0 auto;
+ }
+
+ &__navbar-left {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ @media (max-width: 575px) {
+ flex: 0 0 25%;
+ }
+
+ .tger-logo {
+ padding-bottom: 3px;
+ @media (max-width: 575px) {
+ svg {
+ width: 106px;
+ height: 80px;
+ }
+ }
+ @media (min-width: 576px) {
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ }
+
+ .header-desktop-locations {
+ margin-left: 20px;
+ flex: 1;
+ @media (max-width: 575px) {
+ margin-left: 0px;
+ }
+
+ .button0 {
+ font-size: 20px;
+ display: flex;
+ align-items: center;
+ @media (max-width: 575px) {
+ font-size: 11px;
+ }
+ @media (max-width: 350px) {
+ display: none;
+ }
+
+ svg.location-pin {
+ width: 25px;
+ height: 47.384982638889px;
+ fill: $muted-purple;
+ transition: all 0.5s;
+ margin-right: 10px;
+ @media (max-width: 575px) {
+ width: 12px;
+ height: 22.744791666667px;
+ margin-right: 5px;
+ }
+ @media (max-width: 350px) {
+ display: none;
+ }
+ }
+
+ svg.locations-chevron {
+ width: 25px;
+ height: 25px;
+ fill: $white;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ width: 12px;
+ height: 12px;
+ }
+ @media (max-width: 350px) {
+ display: none;
+ }
+ }
+
+ &:hover {
+ svg.location-pin {
+ fill: $purple;
+ transition: all 0.5s;
+ }
+
+ svg.locations-chevron {
+ fill: $muted-purple;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+ }
+
+ &__navbar-right {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ height: 100%;
+
+ .button4 {
+ margin-right: 10px;
+ padding: 5px 15px;
+ text-align: center;
+ @media (min-width: 768px) {
+ margin-right: 30px;
+ padding: 15px 15px 12px;
+ }
+
+ &.mobile-button {
+ display: block;
+ @media (min-width: 768px) {
+ display: none;
+ }
+ }
+ &.desktop-button {
+ display: none;
+ @media (min-width: 768px) {
+ display: block;
+ }
+ }
+ }
+
+ svg {
+ fill: $white;
+ transition: all 0.5s;
+
+ &:hover {
+ fill: $muted-purple;
+ transition: all 0.5s;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_hero-website.scss b/resources/sass/_hero-website.scss
new file mode 100644
index 0000000..d57a186
--- /dev/null
+++ b/resources/sass/_hero-website.scss
@@ -0,0 +1,108 @@
+.tger-home-hero {
+ background-color: $purple;
+ position: relative;
+ box-sizing: border-box;
+ z-index: 5;
+
+ &__bg {
+ position: absolute;
+ top: 0;
+ bottom: -50px;
+ left: 0;
+ right: 0;
+ z-index: 0;
+ background-size: cover;
+ background-position: top;
+ background-repeat: no-repeat;
+ @media(min-width: 768px) and (max-width: 991px) {
+ bottom: -40px;
+ }
+ @media(min-width: 576px) and (max-width: 767px) {
+ bottom: -40px;
+ }
+ @media (max-width: 575px) {
+ bottom: -100px;
+ }
+ }
+
+ &__inner {
+ padding: 0;
+ position: relative;
+ top: 60px;
+ @media (max-width: 575px) {
+ top: 100px;
+ margin-top: -90px;
+ }
+ }
+
+ &__text {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ margin-bottom: 20px;
+ @media (max-width: 575px) {
+ height: unset;
+ margin-bottom: 10px;
+ }
+
+ h1 {
+ color: $white;
+ width: 100%;
+ text-align: left;
+ @media (max-width: 991px) {
+ text-align: center;
+ }
+ }
+
+ p {
+ color: $white;
+ width: 100%;
+ text-align: left;
+ @media (max-width: 991px) {
+ text-align: center;
+ }
+ }
+
+ .tger-button-container {
+ width: 100%;
+ display: flex;
+ justify-content: space-around;
+ @media (max-width: 575px) {
+ flex-direction: column;
+ }
+
+ a,
+ button {
+ width: 49%;
+ text-align: center;
+ @media (max-width: 575px) {
+ width: 100%;
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+
+ &__image {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .hero-image {
+ border-radius: 10px;
+ box-shadow: 0 0 11px 4px rgba($black, 0.3);
+ display: inline-block;
+ width: 100%;
+ height: auto;
+ }
+ }
+}
+
+.tger-hero-wedge {
+ border-top: 100px solid $purple;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid transparent;
+ position: relative;
+ width: 100%;
+ z-index: 2;
+}
diff --git a/resources/sass/_home-website.scss b/resources/sass/_home-website.scss
new file mode 100644
index 0000000..fbd6994
--- /dev/null
+++ b/resources/sass/_home-website.scss
@@ -0,0 +1,350 @@
+.tger-escape-rooms {
+ padding: 175px 0 60px;
+ margin-top: -100px;
+ position: relative;
+ z-index: 0;
+
+ svg.escape-room-burst-right {
+ position: absolute;
+ top: 6%;
+ right: 4%;
+ width: 150px;
+ height: 150px;
+ z-index: 1;
+ @media (max-width: 991px) {
+ top: 4%;
+ right: 1%;
+ }
+ @media (max-width: 767px) {
+ top: 5%;
+ width: 125px;
+ height: 125px;
+ }
+ @media (max-width: 575px) {
+ width: 100px;
+ height: 100px;
+ top: 6%;
+ right: 3%;
+ }
+ }
+
+ h3 {
+ color: $light-dark;
+ }
+
+ p {
+ font-weight: 300;
+ }
+
+ a {
+ display: block;
+ transition: all 0.5s;
+ position: relative;
+ z-index: 2;
+
+ amp-img.escape-room-icon {
+ img {
+ display: block;
+ max-width: 100%;
+ margin: 0 auto;
+ transition: all 0.5s;
+ }
+ }
+
+ span {
+ font-weight: 300;
+ font-family: $font2;
+ text-transform: uppercase;
+ color: $blue;
+ display: block;
+ text-align: center;
+ transition: all 0.5s;
+ }
+
+ &:hover {
+ transition: all 0.5s;
+ text-decoration: none;
+
+ amp-img.escape-room-icon {
+ img {
+ transform: scale(1.05);
+ transition: all 0.5s;
+ }
+ }
+
+ span {
+ color: $muted-blue;
+ transition: all 0.5s;
+ }
+ }
+ }
+}
+
+.tger-group-events {
+ padding: 60px 0 0;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 4px solid $yellow;
+ @media (max-width: 575px) {
+ padding-left: 15px;
+ }
+ }
+
+ &__room {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ transition: all 0.5s;
+
+ &:hover {
+ text-decoration: none;
+
+ .group-event-icon-bg {
+ transition: all 0.5s;
+ transform: scale(1.05);
+ }
+
+ .group-event-title-text {
+ span {
+ color: $muted-blue;
+ transition: all 0.5s;
+ }
+
+ span {
+ color: $muted-blue;
+ text-decoration: underline;
+ transition: all 0.5s;
+ }
+ }
+ }
+
+ .group-event-icon-bg {
+ display: block;
+ margin: 0 auto;
+ transition: all 0.5s;
+
+ img {
+ width: 300px;
+ height: 300px;
+ @media (max-width: 767px) {
+ width: 250px;
+ height: 250px;
+ }
+ @media (max-width: 575px) {
+ width: 200px;
+ height: 200px;
+ }
+ }
+ }
+
+ .group-event-title-text {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+
+ h3 {
+ color: $light-dark;
+ font-size: 24px;
+ margin-bottom: 20px;
+ transition: all 0.5s;
+ }
+
+ p {
+ color: $dark;
+ transition: all 0.5s;
+ }
+
+ span {
+ color: $blue;
+ font-size: 14px;
+ text-transform: uppercase;
+ font-weight: 500;
+ transition: all 0.5s;
+ }
+ }
+ }
+}
+
+.tger-video {
+ position: relative;
+ padding: 0 0 60px;
+
+ &__bg {
+ position: absolute;
+ top: 100px;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 0;
+ background-color: $yellow;
+ @media (max-width: 991px) {
+ top: 60px;
+ }
+ @media (max-width: 575px) {
+ width: 95%;
+ margin: 0 auto;
+ }
+ }
+
+ &__video-container {
+ position: relative;
+ z-index: 1;
+ padding: 0 40px 40px;
+ @media (max-width: 767px) {
+ padding: 0 20px 20px;
+ }
+ @media (max-width: 575px) {
+ padding: 0 10px 10px;
+ }
+ }
+}
+
+.tger-pre-footer-top {
+ padding: 0 0 60px;
+
+ .order-0 {
+ order: 0;
+ }
+ .order-1 {
+ order: 1;
+ }
+ .order-lg-0 {
+ @media (min-width: 992px) {
+ order: 0;
+ }
+ }
+ .order-lg-1 {
+ @media (min-width: 992px) {
+ order: 1;
+ }
+ }
+
+ &__text {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ height: 100%;
+
+ h2 {
+ font-size: 36px;
+ margin-bottom: 25px;
+ color: $light-dark;
+ width: 100%;
+ }
+
+ p {
+ width: 100%;
+ }
+
+ a {
+ font-size: 16px;
+ font-family: $font2;
+ text-transform: uppercase;
+ font-weight: 900;
+ width: 100%;
+ }
+ }
+
+ &__img {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ width: 100%;
+
+ amp-img.pre-footer-top-img {
+ display: block;
+ margin: 0 auto;
+ }
+ }
+}
+
+.tger-pre-footer-bottom {
+ background-color: $yellow;
+ margin-bottom: -100px;
+
+ &__top-bg {
+ border-top: 100px solid $white;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid transparent;
+ }
+
+ &__bottom-bg {
+ border-bottom: 100px solid $white;
+ border-right: 0 solid transparent;
+ border-left: 1300px solid $yellow;
+ }
+
+ .order-0 {
+ order: 0;
+ }
+ .order-1 {
+ order: 1;
+ }
+ .order-lg-0 {
+ @media (min-width: 992px) {
+ order: 0;
+ }
+ }
+ .order-lg-1 {
+ @media (min-width: 992px) {
+ order: 1;
+ }
+ }
+
+ &__text {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ height: 100%;
+ padding-top: 60px;
+ @media (max-width: 991px) {
+ padding-top: 0;
+ }
+
+ h2 {
+ font-size: 36px;
+ margin-bottom: 25px;
+ width: 100%;
+ color: $purple;
+ }
+
+ p {
+ width: 100%;
+ color: $purple;
+ }
+
+ .tger-button-container {
+ display: flex;
+ width: 100%;
+ }
+ }
+
+ &__img {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ width: 100%;
+ @media (max-width: 991px) {
+ padding-top: 60px;
+ }
+
+ amp-img.on-the-run {
+ width: 500px;
+ height: 500px;
+ display: block;
+ margin: 0 auto;
+ @media (max-width: 575px) {
+ width: 250px;
+ height: 250px;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_map-cta-website.scss b/resources/sass/_map-cta-website.scss
new file mode 100644
index 0000000..4b92f80
--- /dev/null
+++ b/resources/sass/_map-cta-website.scss
@@ -0,0 +1,231 @@
+.tger-map {
+ position: relative;
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ height: 600px;
+ margin-bottom: -170px;
+ margin-top: 60px;
+ @media (max-width: 767px) {
+ // background-position: 50% 150px;
+ }
+ @media (max-width: 575px) {
+ // background-position: 50% 80px;
+ }
+
+ &__top {
+ border-left: 1300px solid $white;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ }
+
+ &__bottom {
+ border-right: 1300px solid $white;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ }
+
+ &__box {
+ background-color: $white;
+ position: absolute;
+ top: 47%;
+ left: 25%;
+ z-index: 2;
+ transform: translate(-50%, -50%);
+ box-shadow: 0 0 25px 0px rgba(0, 0, 0, 0.5);
+ @media (max-width: 767px) {
+ top: 25%;
+ left: 50%;
+ }
+ @media (max-width: 575px) {
+ width: 300px;
+ }
+
+ .map-box-inner {
+ padding: 15px;
+ display: flex;
+ justify-content: space-between;
+
+ .map-box-left {
+ padding: 0 10px;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ padding: 0;
+ flex: 1;
+ }
+
+ h5 {
+ margin-bottom: 5px;
+ font-size: 15px;
+ font-family: $font3;
+ font-weight: 900;
+ color: $black;
+ }
+
+ small {
+ font-size: 12px;
+ display: block;
+ padding: 5px 0;
+
+ &:last-of-type {
+ margin-bottom: 0;
+ }
+
+ &.map-address {
+ color: $light-dark;
+ font-family: $font2;
+ transition: all 0.5s;
+ padding: 0;
+ }
+
+ &.map-rating-stars {
+ display: flex;
+ align-items: center;
+
+ .map-rating {
+ color: $orange;
+ font-family: $font2;
+ font-weight: 800;
+ font-size: 13px;
+ @media (max-width: 575px) {
+ font-size: 12px;
+ }
+ }
+
+ .map-stars {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 7px;
+
+ svg.review-star {
+ width: 15px;
+ height: 15px;
+ @media (max-width: 575px) {
+ width: 12px;
+ height: 12px;
+ }
+ }
+ }
+
+ .map-reviews {
+ color: $blue;
+ font-family: $font2;
+ transition: all 0.5s;
+ font-size: 13px;
+ @media (max-width: 575px) {
+ font-size: 12px;
+ }
+ }
+ }
+
+ &.map-larger-map {
+ color: $blue;
+ font-family: $font2;
+ transition: all 0.5s;
+ font-size: 14px;
+ }
+ }
+
+ &:hover {
+ text-decoration: none;
+ transition: all 0.5s;
+
+ h5 {
+ text-decoration: none;
+ }
+
+ small {
+ &.map-larger-map,
+ .map-reviews {
+ color: $muted-blue;
+ text-decoration: underline;
+ transition: all 0.5s;
+ }
+
+ .map-rating,
+ .map-stars {
+ text-decoration: none;
+ }
+ }
+ }
+ }
+
+ .map-box-right {
+ text-align: center;
+ padding: 0 10px;
+ color: $blue;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ padding: 0;
+ }
+
+ svg {
+ color: $blue;
+ transition: all 0.5s;
+ }
+
+ small {
+ font-size: 14px;
+ font-family: $font2;
+ display: block;
+ }
+
+ &:hover {
+ color: $muted-blue;
+ text-decoration: none;
+ transition: all 0.5s;
+
+ svg {
+ transform: scale(1.1);
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+ }
+}
+
+.tger-cta {
+ position: relative;
+
+ &__top {
+ border-right: 1300px solid $purple;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ }
+
+ &__bottom {
+ border-left: 1300px solid $purple;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ position: relative;
+ z-index: 1;
+ }
+
+ &__container {
+ background-color: $purple;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ padding: 30px 0;
+ @media (max-width: 991px) {
+ padding: 30px 0 0px;
+ }
+ @media (max-width: 575px) {
+ padding: 60px 0 0px;
+ }
+
+ h3 {
+ color: $white;
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: center;
+ }
+ }
+}
diff --git a/resources/sass/_markets-website.scss b/resources/sass/_markets-website.scss
new file mode 100644
index 0000000..f605492
--- /dev/null
+++ b/resources/sass/_markets-website.scss
@@ -0,0 +1,57 @@
+.tger-market-locations {
+ margin: 200px 0 0;
+
+ &__container {
+ display: flex;
+ justify-content: space-between;
+ width: 90%;
+ margin: 0 auto;
+ @media (max-width: 991px) {
+ flex-direction: column;
+ }
+ }
+
+ &__left {
+ flex: 0 0 48%;
+ @media (max-width: 991px) {
+ width: 100%;
+ order: 0;
+ }
+
+ .market-location {
+ padding: 50px 0;
+ border-bottom: 1px solid $purple;
+
+ p {
+ font-size: 24px;
+
+ a {
+ color: $primary;
+
+ &:hover {
+ color: darken($primary, 20%);
+ text-decoration: none;
+ }
+ }
+ }
+
+ &:last-of-type {
+ border-bottom: none;
+ }
+ }
+ }
+
+ &__right {
+ flex: 0 0 48%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media (max-width: 991px) {
+ width: 100%;
+ order: 1;
+ }
+
+ .market-location-map {
+ }
+ }
+}
diff --git a/resources/sass/_menus-website.scss b/resources/sass/_menus-website.scss
new file mode 100644
index 0000000..dce57cd
--- /dev/null
+++ b/resources/sass/_menus-website.scss
@@ -0,0 +1,332 @@
+amp-lightbox#menu {
+ max-width: 100%;
+ height: 100vh;
+ margin: 0 auto;
+ background-color: $body-bg;
+
+ .lightbox {
+ background-color: $white;
+ position: relative;
+ z-index: 200;
+ margin: 0 auto;
+ max-width: 1300px;
+ height: 100%;
+
+ svg#tger-menu-star-left {
+ position: absolute;
+ left: 0%;
+ top: 15%;
+ width: 125px;
+ height: 125px;
+ z-index: 2;
+ @media (max-width: 767px) {
+ display: none;
+ }
+ }
+ svg#tger-menu-burst-right {
+ position: absolute;
+ right: 1%;
+ bottom: 15%;
+ width: 125px;
+ height: 125px;
+ z-index: 2;
+ @media (max-width: 767px) {
+ display: none;
+ }
+ }
+
+ &__bg {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ top: 0;
+ opacity: 0.2;
+ background-size: 100%;
+ background-position: bottom;
+ background-repeat: no-repeat;
+ }
+
+ &__menu-header {
+ display: flex;
+ width: 92%;
+ margin: 0 auto;
+ padding-top: 5px;
+ justify-content: space-between;
+ align-items: center;
+
+ .tger-menu-logo {
+ display: flex;
+ position: relative;
+ @media (min-width: 992px) {
+ margin-top: -2px;
+ margin-left: -20px;
+
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ @media (min-width: 768px) and (max-width: 991px) {
+ margin-top: -2px;
+ margin-left: -18px;
+
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ @media (min-width: 576px) and (max-width: 767px) {
+ margin-left: -14px;
+ margin-top: -4px;
+
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ @media (max-width: 575px) {
+ margin-top: -2px;
+ margin-left: -10px;
+
+ svg {
+ width: 106px;
+ height: 80px;
+ }
+ }
+ }
+
+ .hamburger-close-link {
+ position: relative;
+ top: -2px;
+ right: -5px;
+ @media (min-width: 576px) and (max-width: 767px) {
+ right: -10px;
+ }
+ @media (min-width: 768px) and (max-width: 991px) {
+ right: -15px;
+ }
+ @media (min-width: 992px) {
+ right: -17px;
+ }
+
+ svg.menu-close-hamburger {
+ fill: $black;
+ }
+ }
+ }
+
+ &__menu-menu {
+ position: relative;
+ width: 70%;
+ margin: 0 auto;
+ height: 80%;
+ overflow-y: scroll;
+ @media (max-width: 767px) {
+ width: 95%;
+ }
+ }
+
+ &__navigation {
+ list-style: none;
+
+ li.nav-item {
+ font-size: 18px;
+ font-weight: 400;
+ padding: 10px 0;
+
+ &.active {
+ color: $purple;
+ font-weight: 900;
+ }
+
+ .nav-link {
+ color: $black;
+ font-size: 16px;
+ font-weight: 400;
+ letter-spacing: 2px;
+ padding: 0.5rem 1rem;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover {
+ text-decoration: none;
+ color: $purple;
+ background-color: $light-white;
+ }
+ }
+
+ &.dropdown {
+ .nav-link,
+ .i-amphtml-accordion-header {
+ color: $black;
+ font-size: 16px;
+ font-weight: 400;
+ letter-spacing: 2px;
+ background-color: transparent;
+ border-top: none;
+ border-left: none;
+ border-right: none;
+ transition: all 0.5s;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover {
+ text-decoration: none;
+ color: $purple;
+ background-color: $light-white;
+ transition: all 0.5s;
+
+ span.header-heading-arrow {
+ color: $purple;
+ background-color: $light-white;
+ transition: all 0.5s;
+ }
+ }
+
+ &.active,
+ &.focus {
+ outline: $purple;
+ border: $purple;
+ }
+
+ span.header-heading-arrow {
+ color: $black;
+ font-size: 16px;
+ font-weight: 400;
+ letter-spacing: 2px;
+ background-color: transparent;
+ border-color: transparent;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ i.fa.fa-angle-down {
+ font-size: 20px;
+ transition: all 0.5s;
+ }
+ }
+
+ .dropdown-arrow {
+ img {
+ top: 3px;
+ opacity: 1;
+ }
+ }
+ }
+
+ .dropdown-menu {
+ border: none;
+ border-radius: 0;
+ margin-left: 0;
+ position: relative;
+ z-index: 0;
+ padding-left: 30px;
+
+ a.dropdown-item {
+ color: $black;
+ font-size: 16px;
+ font-weight: 400;
+ letter-spacing: 2px;
+ padding: 10px;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+
+ &:hover {
+ text-decoration: none;
+ color: $purple;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &__menu-buttons {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding: 10px;
+ max-width: 70%;
+ margin: 0 auto;
+ background-color: $white;
+ @media (max-width: 767px) {
+ max-width: 95%;
+ padding: 10px 0;
+ }
+ @media (max-width: 575px) {
+ padding: 10px 0 0;
+ }
+
+ small {
+ display: block;
+ text-align: center;
+ margin-bottom: 10px;
+ @media (min-width: 576px) {
+ display: none;
+ }
+ }
+
+ .tger-button-container {
+ width: 100%;
+ display: flex;
+ justify-content: space-around;
+ @media (max-width: 575px) {
+ flex-direction: column;
+ }
+
+ a,
+ button {
+ width: 49%;
+ text-align: center;
+ @media (max-width: 575px) {
+ width: 100%;
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+
+ &__menu-locations {
+ width: 95%;
+ margin: 25px auto 0;
+ }
+
+ &__locations {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 0;
+ margin-top: 50px;
+
+ h2 {
+ font-size: 30px;
+ letter-spacing: 2px;
+ margin-bottom: 25px;
+ text-align: center;
+ @media (max-width: 575px) {
+ font-size: 14px;
+ }
+ }
+
+ p {
+ margin-bottom: 0;
+
+ select {
+ width: 200px;
+ height: 40px;
+ background-color: $white;
+ padding: 10px;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/sass/_on-the-run-website.scss b/resources/sass/_on-the-run-website.scss
new file mode 100644
index 0000000..06d6ec5
--- /dev/null
+++ b/resources/sass/_on-the-run-website.scss
@@ -0,0 +1,115 @@
+.tger-on-the-run-top {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+ }
+}
+
+.tger-on-the-run-form {
+ position: relative;
+
+ &__top-bg {
+ border-right: 1300px solid $yellow;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ position: relative;
+ z-index: 1;
+ }
+
+ &__bottom-bg {
+ border-left: 1300px solid $yellow;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__wrapper {
+ background-color: $yellow;
+ }
+
+ &__inner {
+ padding: 100px 0;
+
+ fieldset {
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+
+ input.form-check-input {
+ position: relative;
+ top: -1px;
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'] {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
+
+.tger-on-the-run-bottom {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 1;
+ opacity: 0.3;
+ top: 0px;
+ }
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_pages-location-selector.scss b/resources/sass/_pages-location-selector.scss
new file mode 100644
index 0000000..bac8fb5
--- /dev/null
+++ b/resources/sass/_pages-location-selector.scss
@@ -0,0 +1,38 @@
+.tger-location-selector {
+ position: relative;
+
+ &__top-bg {
+ border-right: 1300px solid $yellow;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ }
+
+ &__bottom-bg {
+ border-left: 1300px solid $yellow;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ }
+
+ &__wrapper {
+ background-color: $yellow;
+ }
+
+ &__inner {
+ padding: 100px 0;
+
+ h2 {
+ color: $white;
+ text-align: center;
+ margin-bottom: 15px;
+ }
+
+ form {
+ width: 50%;
+ margin: 0 auto;
+ display: block;
+ @media (max-width: 575px) {
+ width: 90%;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_privacy-pages-website.scss b/resources/sass/_privacy-pages-website.scss
new file mode 100644
index 0000000..d8030cc
--- /dev/null
+++ b/resources/sass/_privacy-pages-website.scss
@@ -0,0 +1,19 @@
+.tger-privacy-policy {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 60px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 15px;
+ margin-bottom: 50px;
+ font-size: 25px;
+ word-break: break-word;
+ }
+ }
+}
diff --git a/resources/sass/_private-parties-website.scss b/resources/sass/_private-parties-website.scss
new file mode 100644
index 0000000..3308620
--- /dev/null
+++ b/resources/sass/_private-parties-website.scss
@@ -0,0 +1,82 @@
+.tger-private-parties {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+ }
+}
+
+.tger-private-parties-form {
+ position: relative;
+ margin-bottom: -100px;
+
+ &__top-bg {
+ border-right: 1300px solid $yellow;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ position: relative;
+ z-index: 1;
+ }
+
+ &__bottom-bg {
+ border-left: 1300px solid $yellow;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ }
+
+ &__wrapper {
+ background-color: $yellow;
+ }
+
+ &__inner {
+ padding: 100px 0;
+
+ fieldset {
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+
+ input.form-check-input {
+ position: relative;
+ top: -1px;
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'] {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_reservations-website.scss b/resources/sass/_reservations-website.scss
new file mode 100644
index 0000000..bc1fa71
--- /dev/null
+++ b/resources/sass/_reservations-website.scss
@@ -0,0 +1,81 @@
+.tger-reservations {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+ @media(max-width: 575px) {
+ padding: 160px 0 60px;
+ }
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ h4 {
+ margin-bottom: 20px;
+ }
+
+ p {
+ a {
+ color: $purple;
+
+ &:hover {
+ color: lighten($purple, 10%);
+ }
+ }
+ }
+
+ fieldset {
+ margin-top: 60px;
+
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+ @media(max-width: 767px) {
+ align-items: flex-start;
+ }
+
+ input.form-check-input {
+ position: relative;
+ top: -2px;
+ margin-right: 5px;
+ @media(max-width: 767px) {
+ top: 2px;
+ }
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'] {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
diff --git a/resources/sass/_team-building-website.scss b/resources/sass/_team-building-website.scss
new file mode 100644
index 0000000..b0d7ef0
--- /dev/null
+++ b/resources/sass/_team-building-website.scss
@@ -0,0 +1,123 @@
+.tger-team-building-top {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ h3 {
+ margin-bottom: 25px;
+ }
+ }
+}
+
+.tger-team-building-form {
+ position: relative;
+
+ &__top-bg {
+ border-right: 1300px solid $yellow;
+ border-top: 100px solid transparent;
+ border-bottom: 0px solid transparent;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__bottom-bg {
+ border-left: 1300px solid $yellow;
+ border-top: 0px solid transparent;
+ border-bottom: 100px solid transparent;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__wrapper {
+ background-color: $yellow;
+ }
+
+ &__inner {
+ padding: 100px 0;
+
+ fieldset {
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+
+ input.form-check-input {
+ position: relative;
+ top: -1px;
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'] {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: flex-end;
+ }
+ }
+ }
+}
+
+.tger-team-building-bottom {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 1;
+ opacity: 0.3;
+ top: 0px;
+ }
+
+ &__inner {
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ h3 {
+ margin-bottom: 25px;
+ }
+ }
+}
diff --git a/resources/sass/_terms-of-service-website.scss b/resources/sass/_terms-of-service-website.scss
new file mode 100644
index 0000000..88e30f4
--- /dev/null
+++ b/resources/sass/_terms-of-service-website.scss
@@ -0,0 +1,19 @@
+.tger-terms-of-service {
+ margin: -100px 0;
+ padding: 160px 0 160px;
+ position: relative;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 60px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 15px;
+ margin-bottom: 50px;
+ font-size: 25px;
+ word-break: break-word;
+ }
+ }
+}
diff --git a/resources/sass/_testimonials-website.scss b/resources/sass/_testimonials-website.scss
new file mode 100644
index 0000000..cb7d844
--- /dev/null
+++ b/resources/sass/_testimonials-website.scss
@@ -0,0 +1,282 @@
+.tger-testimonials {
+ position: relative;
+ padding: 60px 0 0;
+
+ &__top {
+ background-color: $purple;
+ position: relative;
+
+ h2 {
+ font-size: 36px;
+ padding: 100px 0 100px 100px;
+ color: $white;
+ @media (max-width: 767px) {
+ padding: 100px 50px 50px;
+ }
+ @media (max-width: 575px) {
+ padding: 100px 50px;
+ }
+ }
+
+ amp-img.tger-testimonial-burst-left {
+ position: absolute;
+ top: 0%;
+ right: 2%;
+ @media (min-width: 768px) {
+ top: -10%;
+ right: 5%;
+ }
+ }
+ }
+
+ &__top-bg {
+ border-top: 100px solid transparent;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid $purple;
+ }
+
+ &__bottom-bg {
+ border-bottom: 100px solid transparent;
+ border-right: 0 solid transparent;
+ border-left: 1300px solid $purple;
+ position: relative;
+ top: -9px;
+ }
+
+ &__testimonials-container {
+ margin: 0 auto;
+ position: relative;
+ top: -150px;
+ @media (max-width: 767px) {
+ top: -130px;
+ }
+
+ .testimonials-inner-container {
+ margin: 0 auto;
+ display: flex;
+ justify-content: center;
+
+ .amp-carousel-button-prev {
+ left: 0;
+ }
+ .amp-carousel-button-next {
+ right: 0px;
+ }
+
+ .amp-carousel-button-prev,
+ .amp-carousel-button-next {
+ position: relative;
+ filter: drop-shadow(0px 1px 2px #4a4a4a);
+ width: 40px;
+ height: 40px;
+ background-color: rgba($white, 0.9);
+ border: none;
+ border-radius: 40px;
+ outline: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media (max-width: 575px) {
+ box-shadow: 0 0 20px -5px rgba($black, 0.001);
+ border-color: rgba($black, 0.001);
+ }
+
+ i {
+ color: $dark;
+ font-size: 24px;
+ }
+ }
+
+ .mobile-testimonials-carousel {
+ @media (min-width: 768px) {
+ display: none;
+ }
+
+ .testimonial {
+ position: relative;
+ background-color: $dark-blue;
+ @media (max-width: 767px) {
+ width: 90%;
+ }
+
+ svg.testimonial-upper-right-corner {
+ position: absolute;
+ top: 0;
+ right: 2.5%;
+ }
+ svg.testimonial-lower-left-corner {
+ position: absolute;
+ bottom: 0;
+ left: 2.5%;
+ }
+
+ .testimonial-inner {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ padding: 30px;
+ height: 100%;
+ width: 90%;
+ margin: 0 auto;
+
+ .testimonial-stars {
+ display: block;
+ width: 100%;
+ margin-bottom: 30px;
+
+ i {
+ color: $white;
+ }
+ }
+
+ .testimonial-callout {
+ color: $white;
+ margin-bottom: 30px;
+ width: 100%;
+ @media (max-width: 991px) {
+ font-size: 20px;
+ }
+ }
+
+ .testimonial-text {
+ color: $white;
+ width: 100%;
+ }
+
+ .testimonial-user {
+ display: flex;
+ width: 100%;
+
+ .testimonial-initial {
+ color: $white;
+ background-color: $yellow;
+ margin-right: 15px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 50px;
+ width: 50px;
+ border-radius: 40px;
+ }
+
+ .testimonial-user-meta {
+ color: $white;
+ flex: 1;
+
+ p {
+ margin-bottom: 0;
+ font-size: 300;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .desktop-testimonials-carousel {
+ @media (max-width: 767px) {
+ display: none;
+ }
+
+ .testimonials-container {
+ width: 95%;
+ display: flex;
+ justify-content: space-between;
+
+ .testimonial {
+ width: 48%;
+ height: 500px;
+ position: relative;
+ background-color: $dark-blue;
+
+ svg.testimonial-upper-right-corner {
+ position: absolute;
+ top: 0;
+ right: 2.5%;
+ }
+ svg.testimonial-lower-left-corner {
+ position: absolute;
+ bottom: 0;
+ left: 2.5%;
+ }
+
+ .testimonial-inner {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ padding: 30px;
+ height: 100%;
+ width: 100%;
+
+ .testimonial-stars {
+ display: block;
+ width: 100%;
+ margin-bottom: 30px;
+ @media (min-width: 768px) and (max-width: 991px) {
+ margin-bottom: 15px;
+ }
+
+ svg.testimonial-star {
+ fill: $white;
+ }
+ }
+
+ .testimonial-callout {
+ color: $white;
+ margin-bottom: 30px;
+ width: 100%;
+ @media (min-width: 768px) and (max-width: 991px) {
+ font-size: 16px;
+ margin-bottom: 15px;
+ }
+ @media (max-width: 767px) {
+ font-size: 20px;
+ }
+ }
+
+ .testimonial-text {
+ color: $white;
+ width: 100%;
+ @media (min-width: 768px) and (max-width: 991px) {
+ font-size: 13px;
+ }
+ }
+
+ .testimonial-user {
+ display: flex;
+ width: 100%;
+
+ .testimonial-initial {
+ color: $white;
+ background-color: $yellow;
+ margin-right: 15px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 50px;
+ width: 50px;
+ border-radius: 40px;
+ }
+
+ .testimonial-user-meta {
+ color: $white;
+ flex: 1;
+
+ p {
+ margin-bottom: 0;
+ font-weight: 300;
+ @media (min-width: 768px) and (max-width: 991px) {
+ font-size: 16px;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/resources/sass/_themes-website.scss b/resources/sass/_themes-website.scss
new file mode 100644
index 0000000..5bc574d
--- /dev/null
+++ b/resources/sass/_themes-website.scss
@@ -0,0 +1,296 @@
+.tger-theme-video {
+ padding: 160px 0 100px;
+ margin: -100px 0;
+ position: relative;
+ z-index: 1;
+
+ &__bg {
+ position: absolute;
+ top: 50px;
+ left: 0;
+ right: 0;
+ height: 270px;
+ z-index: 2;
+ background-color: $yellow;
+ @media (min-width: 992px) and (max-width: 1199px) {
+ height: 220px;
+ }
+ @media (min-width: 768px) and (max-width: 991px) {
+ height: 360px;
+ }
+ @media (min-width: 576px) and (max-width: 767px) {
+ height: 255px;
+ }
+ @media (max-width: 575px) {
+ height: 53%;
+ top: 20px;
+ max-width: 95%;
+ margin: 0 auto;
+ }
+ @media (max-width: 414px) {
+ height: 50%;
+ }
+ @media(max-width: 360px) {
+ height: 45%;
+ }
+ }
+
+ &__text {
+ @media (max-width: 991px) {
+ margin-bottom: 30px;
+ }
+ }
+
+ &__video-container {
+ position: relative;
+ z-index: 3;
+ padding: 0;
+ @media (max-width: 575px) {
+ padding: 0 5px;
+ }
+ }
+
+ &__time {
+ text-align: center;
+ margin-top: 50px;
+ }
+
+ &__monitoring {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: 30px 0;
+ padding: 20px;
+ position: relative;
+ z-index: 2;
+
+ .monitoring-image {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+
+ amp-img.tger-escape-room-monitoring {
+ display: block;
+ margin: 0 auto;
+ }
+ }
+
+ .monitoring-text {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+
+ h3 {
+ width: 100%;
+ }
+
+ p {
+ width: 100%;
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ &__notes {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: 30px 0;
+ padding: 20px;
+ position: relative;
+ z-index: 2;
+ background-color: $yellow;
+
+ .notes-image {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+
+ amp-img.tger-escape-room-notes {
+ display: block;
+ margin: 0 auto;
+
+ img {
+ @media(max-width: 575px) {
+ width: 150px;
+ height: 150px;
+ }
+ }
+ }
+ }
+
+ .notes-text {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+
+ p {
+ margin-bottom: 0;
+ }
+ }
+ }
+}
+
+.tger-themes-rooms__top-bg {
+ border-bottom: 100px solid $purple;
+ border-left: 1300px solid transparent;
+ border-right: 0 solid transparent;
+ position: relative;
+ width: 100%;
+ z-index: 1;
+}
+
+.tger-themes-rooms {
+ h2 {
+ font-size: 36px;
+ margin-bottom: 60px;
+ color: $white;
+ @media (max-width: 575px) {
+ font-size: 24px;
+ }
+ }
+
+ &__bottom-bg {
+ border-top: 100px solid $purple;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid transparent;
+ }
+
+ &__main {
+ padding: 50px 0 0;
+ background-color: $purple;
+ }
+
+ &__inner {
+ margin-bottom: 50px;
+ padding: 0 10px;
+
+ .tger-theme-icon-wrapper {
+ margin-bottom: 5px;
+
+ .tger-escape-rate-icon {
+ position: relative;
+ left: -5px;
+ }
+ }
+
+ h3 {
+ color: $white;
+ font-size: 22px;
+ @media (max-width: 767px) {
+ font-size: 18px;
+ }
+ }
+
+ p {
+ color: $white;
+ }
+ }
+}
+
+.tger-themes-other-rooms {
+ padding: 100px 0 0;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: $light-dark;
+ border-left: 5px solid $yellow;
+ @media (max-width: 575px) {
+ padding: 15px;
+ font-size: 25px;
+ }
+ }
+
+ .order-0 {
+ order: 0;
+ }
+ .order-1 {
+ order: 1;
+ }
+ .order-md-0 {
+ @media (min-width: 768px) {
+ order: 0;
+ }
+ }
+ .order-md-1 {
+ @media (min-width: 768px) {
+ order: 1;
+ }
+ }
+ .mb-5 {
+ margin-bottom: 3rem;
+ }
+
+ &__text {
+ .other-rooms-inner {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ height: 100%;
+ @media (max-width: 767px) {
+ margin-bottom: 40px;
+ text-align: center;
+ }
+
+ h3 {
+ color: $light-dark;
+ width: 100%;
+ }
+
+ p {
+ width: 100%;
+ color: $black;
+ }
+
+ span {
+ color: $blue;
+ width: 100%;
+ font-weight: 900;
+ transition: all 0.5s;
+ }
+ }
+
+ .other-rooms-image {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ amp-img {
+ transition: all 0.5s;
+ }
+ }
+
+ &:hover {
+ text-decoration: none;
+
+ .other-rooms-inner {
+ span {
+ color: lighten($blue, 10%);
+ text-decoration: underline;
+ transition: all 0.5s;
+ }
+ }
+
+ .other-rooms-image {
+ amp-img {
+ transform: scale(1.025);
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
diff --git a/resources/sass/_trust-logos-website.scss b/resources/sass/_trust-logos-website.scss
new file mode 100644
index 0000000..17b2e28
--- /dev/null
+++ b/resources/sass/_trust-logos-website.scss
@@ -0,0 +1,102 @@
+.tger-trust-logos {
+ background-color: $gray;
+ position: relative;
+ z-index: 0;
+ overflow: hidden;
+ margin-bottom: -160px;
+
+ &__inner-bg {
+ background-size: 100%;
+ background-position: top;
+ background-repeat: no-repeat;
+ opacity: 0.3;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 1;
+ }
+
+ &__top-bg {
+ border-top: 100px solid $white;
+ border-left: 0 solid transparent;
+ border-right: 1300px solid transparent;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__inner {
+ padding: 0 0 60px;
+ @media (max-width: 767px) {
+ padding: 60px 0;
+ }
+
+ h2 {
+ text-align: center;
+ margin-bottom: 10px;
+ }
+
+ span {
+ background-color: $primary;
+ height: 5px;
+ width: 75px;
+ display: block;
+ margin: 0 auto 10px;
+ }
+
+ .trust-logos-img {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ padding: 25px 0;
+ position: relative;
+ z-index: 2;
+ @media (max-width: 767px) {
+ padding: 25px;
+ }
+
+ amp-img {
+ width: 150px;
+
+ img {
+ display: inline-block;
+ margin: 0 auto;
+ }
+ }
+ }
+ }
+
+ .trust-logos-bg-small,
+ .trust-logos-bg-medium,
+ .trust-logos-bg-large,
+ .trust-logos-bg-xl {
+ position: absolute;
+ border: 1px solid rgba($purple, 0.2);
+ border-radius: 50%;
+ top: 44%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 0;
+ @media (max-width: 767px) {
+ display: none;
+ }
+ }
+ .trust-logos-bg-small {
+ height: 250px;
+ width: 250px;
+ }
+ .trust-logos-bg-medium {
+ height: 500px;
+ width: 500px;
+ }
+ .trust-logos-bg-large {
+ height: 1000px;
+ width: 1000px;
+ }
+ .trust-logos-bg-xl {
+ height: 1400px;
+ width: 1400px;
+ }
+}
diff --git a/resources/sass/_typography-website.scss b/resources/sass/_typography-website.scss
new file mode 100644
index 0000000..29dbbd8
--- /dev/null
+++ b/resources/sass/_typography-website.scss
@@ -0,0 +1,62 @@
+$font1: 'Life Savers', sans-serif;
+$font2: 'Roboto Condensed', sans-serif;
+$font3: 'Roboto Condensed', sans-serif;
+
+// Typography
+$font-family-sans-serif: 'Rubik', sans-serif;
+$font-size-base: 0.9rem;
+$line-height-base: 1.6;
+
+h1 {
+ font-family: $font3;
+ font-weight: 700;
+}
+
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: $font1;
+ font-weight: 900;
+}
+
+p,
+span,
+li,
+th,
+td,
+label {
+ font-family: $font2;
+ font-weight: 300;
+ font-size: 18px;
+}
+
+label {
+ margin-bottom: 5px;
+}
+
+input[placeholder],
+textarea[placeholder] {
+ font-family: $font1;
+ color: $muted-purple;
+}
+
+h1 {
+ text-align: left;
+ font-weight: 900;
+ font-size: 42px;
+ letter-spacing: 1.25px;
+ @media (max-width: 575px) {
+ font-size: 36px;
+ }
+}
+
+a,
+button {
+ transition: all 0.5s;
+
+ &:hover {
+ transition: all 0.5s;
+ }
+}
diff --git a/resources/sass/_variables-website.scss b/resources/sass/_variables-website.scss
new file mode 100644
index 0000000..d23e678
--- /dev/null
+++ b/resources/sass/_variables-website.scss
@@ -0,0 +1,348 @@
+// Styling
+$enable-shadows: false;
+
+/* Non-Muted */
+$purple: #84329b;
+$yellow: #ffc845;
+$pink: #e24585;
+$blue: #1a60e8;
+$dark-blue: #1b365d;
+$green: #71cc98;
+$mint: #71cc98;
+$orange: #e1523e;
+$light-grey: #f8f8f8;
+$white: #fff;
+$light-white: #f8f9fa;
+$black: #000;
+$dark: $black;
+$light-dark: lighten($dark, 40%);
+$gray: #f5f7f9;
+$menu-hover: $light-white;
+$body-bg: $light-grey;
+$sold-out: #BF140C;
+
+/* Muted */
+$muted-purple: #b884c1;
+$muted-yellow: #ffdd92;
+$muted-pink: #f697b2;
+$muted-blue: #757f9b;
+$muted-green: #a9e0c0;
+$muted-orange: #fa9a86;
+
+/* SVG Classes */
+.cls-1 {
+ fill: #b884c1;
+}
+.cls-2 {
+ fill: #fff;
+}
+.tger-menu-logo4 {
+ fill: #7c3894;
+}
+
+.svg-no-fill {
+ fill: none;
+}
+
+.svg-location-pin {
+ fill: #b086be;
+}
+
+.svg-muted-yellow {
+ fill: $muted-yellow;
+}
+
+.svg-escape-room-color1 {
+ fill: #fede9c;
+}
+.svg-escape-room-color2 {
+ fill: #7c3894;
+}
+.svg-escape-room-color3 {
+ fill: #83c89c;
+}
+
+.svg-scavenger-hunt-rooms3 {
+ fill: #d45382;
+}
+.svg-scavenger-hunt-rooms11 {
+ fill: #ffffff;
+}
+.svg-scavenger-hunt-rooms7 {
+ fill: #83c89c;
+}
+.svg-scavenger-hunt-rooms2 {
+ fill: #7c3894;
+}
+.svg-scavenger-hunt-rooms6 {
+ fill: #f7ca5e;
+}
+.svg-scavenger-hunt-rooms24 {
+ fill: none;
+}
+
+.svg-portable-escape-experience0 {
+ fill: #b884c1;
+}
+.svg-portable-escape-experience1 {
+ fill: #fa9a86;
+}
+.svg-portable-escape-experience3 {
+ fill: #e64783;
+}
+.svg-portable-escape-experience6 {
+ fill: #ffc844;
+}
+.svg-portable-escape-experience11 {
+ fill: #ffffff;
+}
+
+.svg-corporate-events11 {
+ fill: #ffffff;
+}
+.svg-corporate-events29 {
+ fill: #7c3894;
+}
+.svg-corporate-events32 {
+ fill: #f7ca5e;
+}
+.svg-corporate-events33 {
+ fill: none;
+}
+.svg-corporate-events36 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #d65a47;
+}
+.svg-corporate-events39 {
+ fill: #d65a47;
+}
+
+.svg-team-building3 {
+ fill: #d45382;
+}
+.svg-team-building6 {
+ fill: #f7ca5e;
+}
+.svg-team-building24 {
+ fill: none;
+}
+.svg-team-building27 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #83c89c;
+}
+
+.svg-private-parties6 {
+ fill: #f7ca5e;
+}
+.svg-private-parties10 {
+ fill: #d65a47;
+}
+.svg-private-parties24 {
+ fill: none;
+}
+.svg-private-parties28 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #d45382;
+}
+
+.svg-customer-service0 {
+ fill: #ffc844;
+}
+.svg-customer-service1 {
+ clip-path: url(#SVGID_2_);
+}
+.svg-customer-service2 {
+ fill: #ffdd92;
+}
+.svg-customer-service5 {
+ fill: #e64783;
+}
+.svg-customer-service6 {
+ fill: #b884c1;
+}
+.svg-customer-service8 {
+ fill: #f697b2;
+}
+.svg-customer-service13 {
+ fill: #863399;
+}
+.svg-customer-service50 {
+ fill: #f79a87;
+}
+
+.svg-on-the-run0 {
+ fill: #7f3f98;
+}
+.svg-on-the-run1 {
+ fill: #ffdd92;
+}
+.svg-on-the-run2 {
+ fill: #757f9b;
+}
+.svg-on-the-run3 {
+ fill: #e64783;
+}
+.svg-on-the-run4 {
+ fill: #b884c1;
+}
+.svg-on-the-run5 {
+ fill: #6cca98;
+}
+.svg-on-the-run6 {
+ fill: #f697b2;
+}
+.svg-on-the-run7 {
+ fill: none;
+}
+.svg-on-the-run8 {
+ fill: #fa9a86;
+}
+.svg-on-the-run9 {
+ fill: #ffffff;
+}
+.svg-on-the-run10 {
+ fill: #a9e0c0;
+}
+.svg-on-the-run11 {
+ fill: #863399;
+}
+.svg-on-the-run12 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+}
+.svg-on-the-run13 {
+ fill: none;
+ stroke: #000000;
+ stroke-width: 0.25;
+ stroke-miterlimit: 10;
+}
+.svg-on-the-run14 {
+ fill: #ffc844;
+}
+.svg-on-the-run15 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #ffc844;
+}
+.svg-on-the-run16 {
+ clip-path: url(#SVGID_2_);
+}
+.svg-on-the-run17 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #e64783;
+}
+.svg-on-the-run18 {
+ clip-path: url(#SVGID_4_);
+}
+.svg-on-the-run19 {
+ clip-path: url(#SVGID_6_);
+}
+.svg-on-the-run20 {
+ fill: #e74f3d;
+}
+.svg-on-the-run21 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #e74f3d;
+}
+.svg-on-the-run22 {
+ clip-path: url(#SVGID_8_);
+}
+.svg-on-the-run23 {
+ fill: #1c355e;
+}
+.svg-on-the-run24 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #1c355e;
+}
+.svg-on-the-run25 {
+ clip-path: url(#SVGID_10_);
+}
+.svg-on-the-run26 {
+ opacity: 0.47;
+}
+.svg-on-the-run27 {
+ clip-path: url(#SVGID_12_);
+}
+.svg-on-the-run28 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #863399;
+}
+.svg-on-the-run29 {
+ clip-path: url(#SVGID_14_);
+}
+.svg-on-the-run30 {
+ clip-path: url(#SVGID_16_);
+}
+.svg-on-the-run31 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #6cca98;
+}
+.svg-on-the-run32 {
+ clip-path: url(#SVGID_18_);
+}
+.svg-on-the-run33 {
+ clip-path: url(#SVGID_20_);
+}
+.svg-on-the-run34 {
+ clip-path: url(#SVGID_22_);
+}
+.svg-on-the-run35 {
+ opacity: 0.41;
+}
+.svg-on-the-run36 {
+ fill: none;
+ stroke: #000000;
+ stroke-width: 3;
+ stroke-miterlimit: 10;
+}
+.svg-on-the-run37 {
+ fill: none;
+ stroke: #000000;
+ stroke-miterlimit: 10;
+}
+.svg-on-the-run38 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #fa9a86;
+}
+.svg-on-the-run39 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #b884c1;
+}
+.svg-on-the-run40 {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: #ffdd92;
+}
+
+.svg-review11 {
+ fill: #ffffff;
+}
+.svg-review12 {
+ fill: $yellow;
+}
+
+.svg-review13 {
+ fill: $orange;
+}
+
+.svg-testimonial-lower-left-corner {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: $muted-blue;
+}
+
+.svg-testimonial-upper-right-corner {
+ fill-rule: evenodd;
+ clip-rule: evenodd;
+ fill: $muted-blue;
+}
diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss
new file mode 100644
index 0000000..9e357e3
--- /dev/null
+++ b/resources/sass/_variables.scss
@@ -0,0 +1,49 @@
+// Styling
+$enable-shadows: false;
+
+// Body
+$body-bg: #ffffff;
+
+// Typography
+$font1: 'Life Savers', sans-serif;
+$font2: 'Roboto Condensed', sans-serif;
+$font3: 'Roboto Condensed', sans-serif;
+$font-family-sans-serif: 'Rubik', sans-serif;
+$font-size-base: 0.9rem;
+$line-height-base: 1.6;
+
+// Colors
+$primary: #84329b;
+$dark: #000000;
+$indigo: #6574cd;
+$teal: #4dc0b5;
+$cyan: #6cb2eb;
+
+/* Non-Muted */
+$purple: #84329b;
+$yellow: #ffc845;
+$pink: #e24585;
+$blue: #1a60e8;
+$dark-blue: #1b365d;
+$green: #71cc98;
+$mint: #71cc98;
+$red: #BF140C;
+$orange: #e1523e;
+$light-grey: #f8f8f8;
+$white: #fff;
+$light-white: #f8f9fa;
+$black: #000;
+$dark: $black;
+$light-dark: lighten($dark, 40%);
+$gray: #f5f7f9;
+$menu-hover: $light-white;
+$body-bg: $light-grey;
+$sold-out: #BF140C;
+
+/* Muted */
+$muted-purple: #b884c1;
+$muted-yellow: #ffdd92;
+$muted-pink: #f697b2;
+$muted-blue: #757f9b;
+$muted-green: #a9e0c0;
+$muted-orange: #fa9a86;
diff --git a/resources/sass/_variablesfeedback.scss b/resources/sass/_variablesfeedback.scss
new file mode 100644
index 0000000..9e357e3
--- /dev/null
+++ b/resources/sass/_variablesfeedback.scss
@@ -0,0 +1,49 @@
+// Styling
+$enable-shadows: false;
+
+// Body
+$body-bg: #ffffff;
+
+// Typography
+$font1: 'Life Savers', sans-serif;
+$font2: 'Roboto Condensed', sans-serif;
+$font3: 'Roboto Condensed', sans-serif;
+$font-family-sans-serif: 'Rubik', sans-serif;
+$font-size-base: 0.9rem;
+$line-height-base: 1.6;
+
+// Colors
+$primary: #84329b;
+$dark: #000000;
+$indigo: #6574cd;
+$teal: #4dc0b5;
+$cyan: #6cb2eb;
+
+/* Non-Muted */
+$purple: #84329b;
+$yellow: #ffc845;
+$pink: #e24585;
+$blue: #1a60e8;
+$dark-blue: #1b365d;
+$green: #71cc98;
+$mint: #71cc98;
+$red: #BF140C;
+$orange: #e1523e;
+$light-grey: #f8f8f8;
+$white: #fff;
+$light-white: #f8f9fa;
+$black: #000;
+$dark: $black;
+$light-dark: lighten($dark, 40%);
+$gray: #f5f7f9;
+$menu-hover: $light-white;
+$body-bg: $light-grey;
+$sold-out: #BF140C;
+
+/* Muted */
+$muted-purple: #b884c1;
+$muted-yellow: #ffdd92;
+$muted-pink: #f697b2;
+$muted-blue: #757f9b;
+$muted-green: #a9e0c0;
+$muted-orange: #fa9a86;
diff --git a/resources/sass/_variableswaiver.scss b/resources/sass/_variableswaiver.scss
new file mode 100644
index 0000000..0986a1c
--- /dev/null
+++ b/resources/sass/_variableswaiver.scss
@@ -0,0 +1,54 @@
+// Styling
+$enable-shadows: false;
+
+// Body
+$body-bg: #ffffff;
+
+// Fonts
+@import url('https://fonts.googleapis.com/css2?family=Rubik');
+@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed');
+@import url('https://fonts.googleapis.com/css2?family=Life+Savers');
+
+// Typography
+$font1: 'Life Savers', sans-serif;
+$font2: 'Roboto Condensed', sans-serif;
+$font3: 'Roboto Condensed', sans-serif;
+$font-family-sans-serif: 'Rubik', sans-serif;
+$font-size-base: 0.9rem;
+$line-height-base: 1.6;
+
+// Colors
+$primary: #84329b;
+$dark: #000000;
+$indigo: #6574cd;
+$teal: #4dc0b5;
+$cyan: #6cb2eb;
+
+/* Non-Muted */
+$purple: #84329b;
+$yellow: #ffc845;
+$pink: #e24585;
+$blue: #1a60e8;
+$dark-blue: #1b365d;
+$green: #71cc98;
+$mint: #71cc98;
+$red: #BF140C;
+$orange: #e1523e;
+$light-grey: #f8f8f8;
+$white: #fff;
+$light-white: #f8f9fa;
+$black: #000;
+$dark: $black;
+$light-dark: lighten($dark, 40%);
+$gray: #f5f7f9;
+$menu-hover: $light-white;
+$body-bg: $light-grey;
+$sold-out: #BF140C;
+
+/* Muted */
+$muted-purple: #b884c1;
+$muted-yellow: #ffdd92;
+$muted-pink: #f697b2;
+$muted-blue: #757f9b;
+$muted-green: #a9e0c0;
+$muted-orange: #fa9a86;
diff --git a/resources/sass/app.scss b/resources/sass/app.scss
new file mode 100644
index 0000000..1ceee6c
--- /dev/null
+++ b/resources/sass/app.scss
@@ -0,0 +1,10 @@
+// Fonts
+@import url('https://fonts.googleapis.com/css2?family=Rubik');
+@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed');
+@import url('https://fonts.googleapis.com/css2?family=Life+Savers');
+
+// Variables
+@import 'variables';
+
+// Bootstrap
+@import '~bootstrap/scss/bootstrap';
diff --git a/resources/sass/booking.scss b/resources/sass/booking.scss
new file mode 100644
index 0000000..4fbf0f7
--- /dev/null
+++ b/resources/sass/booking.scss
@@ -0,0 +1,979 @@
+// Bootstrap
+@import './node_modules/bootstrap/scss/bootstrap';
+
+/* Non-Muted */
+$font1: 'Life Savers', sans-serif;
+$font2: 'Roboto Condensed', sans-serif;
+$font3: 'Roboto Condensed', sans-serif;
+
+@import 'variables-website';
+@import 'buttons-website';
+@import 'globals-website';
+
+
+.tger-booking-website-wrapper {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $white;
+ overflow-x: hidden;
+ position: relative;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 0;
+ opacity: 0.3;
+ }
+}
+
+
+.tger-booking-header {
+ position: sticky;
+ position: -webkit-sticky;
+ top: -1px;
+ width: 100%;
+ background-color: $purple;
+ max-width: 1300px;
+ margin: 0 auto;
+ padding: 0;
+ z-index: 100;
+
+ &__container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100%;
+ width: 95%;
+ margin: 0 auto;
+
+ .tger-logo {
+ padding-bottom: 3px;
+ @media (max-width: 575px) {
+ svg {
+ width: 106px;
+ height: 80px;
+ }
+ }
+ @media (min-width: 576px) {
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ }
+
+ .tger-location {
+ font-size: 20px;
+
+ svg.location-pin {
+ width: 25px;
+ height: 47.384982638889px;
+ fill: $muted-purple;
+ transition: all 0.5s;
+ margin-right: 10px;
+ // @media (max-width: 575px) {
+ // width: 12px;
+ // height: 22.744791666667px;
+ // margin-right: 5px;
+ // }
+ // @media (max-width: 350px) {
+ // display: none;
+ // }
+ }
+
+ &:hover {
+ svg.location-pin {
+ fill: $purple;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
+
+
+.tger-booking-main {
+ position: relative;
+ padding-bottom: 100px;
+
+ .covid-notice {
+ width: 85%;
+ margin: 40px auto;
+ background-color: $yellow;
+ padding: 20px;
+ position: relative;
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+
+ .notes-image {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ }
+
+ .notes-text {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ height: 100%;
+
+ p {
+ margin-bottom: 0;
+
+ a {
+ color: $purple;
+
+ &:hover {
+ color: $muted-purple;
+ }
+ }
+ }
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: center;
+ width: 50%;
+ margin: 0 auto;
+
+ .button6 {
+ text-align: center;
+ }
+ }
+
+
+ .tger-booking-games-list {
+ padding: 100px 0;
+ position: relative;
+ z-index: 0;
+ @media(max-width: 767px) {
+ padding: 60px 0;
+ }
+
+ &__header {
+ border-bottom: 1px solid $light-dark;
+ padding: 60px 0 10px;
+ @media(max-width: 767px) {
+ padding: 0 0 10px;
+ }
+
+ h1 {
+ font-family: 'Life Savers', sans-serif;
+ font-size: 32px;
+ margin-bottom: 0;
+ @media(max-width: 991px) {
+ margin-bottom: 10px;
+ font-size: 24px;
+ }
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+ }
+
+ .games-list-selectors {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ @media(max-width: 767px) {
+ flex-direction: column;
+ }
+ @media(max-width: 575px) {
+ width: 95%;
+ margin: 0 auto;
+ }
+
+ .form-control {
+ position: relative;
+ z-index: 1;
+ border-radius: 0;
+ font-size: 15px;
+ text-align: center;
+ flex: 0 0 49%;
+ @media(max-width: 767px) {
+ width: 100%;
+ margin-bottom: 5px;
+ }
+ }
+
+ select {
+ text-align-last: center;
+ text-align: center;
+ padding-left: 22px;
+ }
+
+ select,
+ input[type='text'] {
+ font-family: 'Life Savers', sans-serif;
+ text-align: center;
+ }
+
+ .games-list-selectors-datepicker {
+ flex: 0 0 49%;
+ @media(max-width: 767px) {
+ width: 100%;
+ }
+
+ div.vdp-datepicker__calendar {
+ right: 0 !important;
+ @media(max-width: 991px) {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+
+
+ &__games {
+ padding: 0 15px 60px;
+
+ .game-item {
+ padding: 15px 0;
+ border-bottom: 1px solid $purple;
+
+ &:last-of-type {
+ border-bottom: none !important;
+ }
+
+ &__top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ @media(max-width: 767px) {
+ flex-direction: column;
+ }
+
+ .game-top-left {
+ width: 80%;
+ display: flex;
+ align-items: center;
+ @media(min-width: 768px) and (max-width: 991px) {
+ width: 75%;
+ }
+ @media(max-width: 767px) {
+ width: 100%;
+ margin-bottom: 15px;
+ }
+
+ .left-mobile {
+ width: 49%;
+ display: flex;
+ flex-direction: column;
+ @media(min-width: 768px) {
+ display: none !important;
+ }
+ }
+
+ .left-desktop {
+ display: none;
+ @media(min-width: 768px) {
+ display: flex !important;
+ }
+ }
+
+ span {
+ text-transform: capitalize;
+ font-family: $font1;
+ font-weight: 900;
+ font-size: 18px;
+ @media(max-width: 575px) {
+ font-size: 16px;
+ }
+ @media(max-width: 360px) {
+ font-size: 15px;
+ }
+
+ &.game-start {
+ margin-right: 25px;
+ width: 25%;
+ @media(min-width: 768px) and (max-width: 991px) {
+ width: 16%;
+ }
+ @media(max-width: 767px) {
+ width: 100%;
+ margin-bottom: 5px;
+ }
+ }
+
+ &.game-theme {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ margin-right: 25px;
+ width: 49%;
+ @media(min-width: 768px) and (max-width: 991px) {
+ width: 45%;
+ }
+ @media(max-width: 767px) {
+ justify-content: space-between;
+ text-align: right;
+ margin-right: 0;
+ }
+
+ img {
+ max-width: 60px;
+ margin-right: 10px;
+ }
+ }
+
+ &.game-participants {
+ width: 25%;
+ @media(max-width: 767px) {
+ width: 100%;
+ }
+ }
+ }
+ }
+
+ .game-top-right {
+ @media(max-width: 767px) {
+ width: 100%;
+ }
+
+ button {
+ @media(max-width: 767px) {
+ width: 100%;
+ }
+
+ span {
+ text-transform: capitalize;
+ font-family: $font1;
+ font-weight: 900;
+ }
+
+ &.button-link {
+ text-align: right;
+ font-family: $font1;
+ font-size: 20px;
+ }
+ }
+ }
+ }
+
+ &__inner {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-gap: 10px;
+ margin: 30px 0 15px;
+ @media(max-width: 991px) {
+ grid-template-columns: repeat(1, 1fr);
+ }
+
+ .game-inner-left {
+ padding-right: 25px;
+ border-right: 1px solid $purple;
+ position: relative;
+ @media(max-width: 991px) {
+ padding-right: 0;
+ border-right: none;
+ margin-bottom: 30px;
+ }
+
+ .game-inner-left-video {
+ position: relative;
+ margin-bottom: 40px;
+
+ &__bg {
+ position: absolute;
+ top: 35px;
+ left: 0px;
+ right: 0px;
+ height: 270px;
+ z-index: 2;
+ background-color: $yellow;
+ @media (min-width: 992px) and (max-width: 1199px) {
+ height: 220px;
+ }
+ @media (min-width: 768px) and (max-width: 991px) {
+ height: 365px;
+ }
+ @media (min-width: 576px) and (max-width: 767px) {
+ height: 260px;
+ }
+ @media (max-width: 575px) {
+ height: 95%;
+ top: 20px;
+ max-width: 95%;
+ margin: 0 auto;
+ }
+ @media (max-width: 414px) {
+ height: 92%;
+ }
+ @media(max-width: 360px) {
+ height: 90%;
+ }
+ }
+
+ &__video-container {
+ position: relative;
+ z-index: 3;
+ padding: 0;
+ @media (max-width: 575px) {
+ padding: 0 5px;
+ }
+
+ .embed-container {
+ position: relative;
+ padding-bottom: 56.25%;
+ height: 0;
+ overflow: hidden;
+ max-width: 95%;
+ margin: 0 auto;
+
+ iframe,
+ object,
+ embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+
+ .game-inner-description {
+ position: relative;
+
+ button.button5 {
+ width: 100%;
+ font-family: $font1;
+ background-color: $white;
+ @media(max-width: 991px) {
+ font-size: 13px;
+ }
+
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: $purple;
+ }
+ }
+
+ p {
+ font-family: $font2;
+ font-weight: 300;
+ margin-top: 15px;
+
+ strong {
+ font-weight: 900;
+ }
+ }
+ }
+ }
+
+ .game-inner-right {
+ padding-left: 20px;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ height: 100%;
+ @media(max-width: 991px) {
+ padding-left: 0;
+ }
+
+ form {
+ width: 100%;
+
+ .tger-button-container {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ @media(max-width: 575px) {
+ flex-direction: column;
+ }
+
+ h4 {
+ font-family: $font1;
+ font-size: 18px;
+ @media(min-width: 576px) {
+ margin-bottom: 0;
+ }
+ }
+
+ p {
+ margin-bottom: 0;
+ font-family: $font2;
+ font-size: 18px;
+ }
+
+ .tger-button-container-inner {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ width: 49%;
+ @media(max-width: 575px) {
+ width: 100%;
+ justify-content: center;
+ }
+
+ button {
+ font-size: 13px;
+ padding: 5px;
+ width: 49%;
+ @media(min-width: 992px) and (max-width: 1199px) {
+ font-size: 11px;
+ }
+ }
+ }
+ }
+
+ h4 {
+ font-family: $font1;
+ font-size: 16px;
+ @media(min-width: 576px) {
+ margin-bottom: 0;
+ }
+ }
+
+ h5 {
+ font-family: $font3;
+ margin-bottom: 20px;
+ font-size: 18px;
+ font-weight: 900;
+ @media(max-width: 575px) {
+ font-size: 15px;
+ }
+ }
+
+ .form-control {
+ border-radius: 0;
+ }
+
+ .game-inner-player-number {
+ margin-bottom: 30px;
+ display: flex;
+ align-items: center;
+
+ select {
+ margin-right: 10px;
+ max-width: 60px;
+ }
+ }
+
+ .game-inner-total-continue {
+ margin-bottom: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ h3 {
+ margin-bottom: 0;
+ font-size: 20px;
+ @media(max-width: 575px) {
+ font-size: 15px;
+ }
+ }
+
+ button.button6 {
+ font-family: $font1;
+ @media(max-width: 991px) {
+ font-size: 13px;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &__bottom {
+ border-top: 1px solid $light-dark;
+ padding: 48px 0 60px;
+ @media(max-width: 767px) {
+ padding: 0 0 10px;
+ }
+
+ .change-date {
+ padding: 0 15px;
+ max-width: 750px;
+ align-items: center;
+ margin: 0 auto 0 auto;
+
+ h3 {
+ font-family: 'Life Savers', sans-serif;
+ font-size: 24px;
+ margin-bottom: 0;
+ text-align: center;
+ @media(max-width: 991px) {
+ margin-bottom: 10px;
+ font-size: 16px;
+ text-align: center;
+ }
+ @media(max-width: 575px) {
+ text-align: center;
+ }
+ }
+
+ .date-buttons {
+ padding: 10px 0;
+ margin: 0 auto 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ max-width: 300px;
+ .date-button-container {
+ width: 48%;
+ }
+ button {
+ font-size: 11px;
+ width: 100%;
+ }
+ }
+
+ .date-selector {
+ padding: 0 0 30px 0;
+ margin: 0 auto 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ max-width: 300px;
+
+ .form-control {
+ position: relative;
+ z-index: 1;
+ border-radius: 0;
+ font-size: 15px;
+ text-align: center;
+ flex: 0 0 49%;
+ @media(max-width: 767px) {
+ width: 100%;
+ margin-bottom: 5px;
+ }
+ }
+
+ select {
+ text-align-last: center;
+ text-align: center;
+ padding-left: 22px;
+ }
+
+ select,
+ input[type='text'] {
+ font-family: 'Life Savers', sans-serif;
+ text-align: center;
+ }
+
+ .date-selector-datepicker {
+ width: 300px;
+ }
+ }
+ }
+ }
+ }
+
+
+ .tger-booking-contact {
+ padding: 100px 0;
+ @media(max-width: 767px) {
+ padding: 60px 0;
+ }
+
+ h1 {
+ font-family: $font1;
+ margin-bottom: 30px;
+ }
+
+ .form-control {
+ border-radius: 0;
+ font-family: $font1;
+ }
+ }
+
+
+ .tger-booking-checkout {
+ padding: 100px 0;
+ @media(max-width: 767px) {
+ padding: 60px 0;
+ }
+
+ &__countdown {
+ background-color: $white;
+ border: 1px solid $purple;
+ display: flex;
+ justify-content: center;
+ padding: 10px;
+
+ .countdown-timer {
+ font-family: $font1;
+ display: flex;
+ align-items: center;
+ @media(max-width: 767px) {
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+
+ div {
+ margin-bottom: 10px;
+ }
+ }
+
+ span {
+ font-size: 30px;
+ margin-right: 10px;
+ color: $purple;
+ @media(max-width: 991px) {
+ font-size: 20px;
+ }
+ }
+
+ p {
+ font-family: $font3;
+ font-weight: 300;
+ margin-bottom: 0;
+ @media(max-width: 991px) {
+ font-size: 16px;
+ }
+
+ strong {
+ font-weight: 900;
+ }
+ }
+ }
+ }
+
+ &__checkout {
+ background-color: $white;
+ border: 1px solid $purple;
+ padding: 20px 15px;
+
+ .checkout-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 30px;
+
+ h3 {
+ font-family: $font1;
+ margin-bottom: 0;
+ }
+
+ button.button5 {
+
+ }
+ }
+
+ .location-waiver {
+ font-family: $font2;
+ margin: 20px 0 10px;
+ font-size: 12px;
+ }
+
+ a {
+ color: $purple;
+ font-family: $font2;
+
+ &:hover {
+ color: $muted-purple;
+ }
+ }
+
+ .form-control {
+ border-radius: 0;
+ font-family: $font1;
+ }
+
+ .StripeElement {
+ border: 1px solid #ced4da;
+ padding: 10px;
+ }
+
+ .tger-button-container {
+ display: flex;
+ align-items: center;
+ }
+ }
+
+ &__notice {
+ margin: 15px;
+ }
+
+ &__payments {
+ margin-top: 150px;
+ width: 100%;
+ max-width: 800px;
+ height: auto;
+ }
+
+ &__cart {
+ background-color: $white;
+ border: 1px solid $purple;
+ padding: 20px 15px;
+
+ h3 {
+ font-family: $font1;
+ margin-bottom: 30px;
+ }
+
+ a.button6 {
+ text-align: center;
+ margin-bottom: 20px;
+ }
+
+ .form-control {
+ border-radius: 0;
+ font-family: $font1;
+ }
+
+ ul.tger-booking-cart {
+ list-style: inside none;
+ padding: 0;
+ margin-bottom: 20px;
+ padding-bottom: 20px;
+ border-bottom: 1px solid $purple;
+
+ li {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+
+ .booking-cart-left {
+
+ span {
+ font-family: $font2;
+ display: block;
+ text-transform: capitalize;
+ @media(max-width: 575px) {
+ font-size: 14px;
+ }
+ @media(min-width: 991px) and (max-width: 1199px) {
+ font-size: 14px;
+ }
+ }
+
+ form {
+ margin-top: 5px;
+
+ .button5 {
+ width: 100%;
+
+ i.fa {
+ position: relative;
+ top: 1.5px;
+ }
+ }
+ }
+ }
+
+ .booking-cart-right {
+
+ span {
+ font-family: $font2;
+ @media(max-width: 575px) {
+ font-size: 14px;
+ }
+ @media(min-width: 991px) and (max-width: 1199px) {
+ font-size: 14px;
+ }
+ }
+
+ .booking-cart-right-image {
+ height: 100px;
+ width: 100px;
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ @media(min-width: 576px) and (max-width: 991px) {
+ height: 175px;
+ width: 175px;
+ }
+ @media(min-width: 1200px) {
+ height: 125px;
+ width: 125px;
+ }
+ }
+ }
+ }
+ }
+
+ form.coupon {
+ margin-top: 30px;
+
+ .coupon-code {
+ display: flex;
+
+ input {
+ height: 40px;
+ width: 60%;
+ border-radius: 0;
+ border: 1px solid $mint;
+ }
+
+ .button4 {
+ padding: 0 5px;
+ font-size: 12px;
+ display: inline-block;
+ flex: 1;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+.tger-booking-footer {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $purple;
+
+ &__wrapper {
+ padding: 30px 0;
+ background-color: $purple;
+ }
+
+ &__copyright {
+ width: 90%;
+ margin: 0 auto;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__copyright-left {
+ list-style: none inside;
+ display: flex;
+ padding-left: 0;
+ margin-bottom: 0;
+ @media (max-width: 991px) {
+ flex-wrap: wrap;
+ }
+
+ li {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ margin-right: 20px;
+ @media (max-width: 575px) {
+ margin: 10px 10px 10px 0;
+ }
+
+ a {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/sass/feedback.scss b/resources/sass/feedback.scss
new file mode 100644
index 0000000..960097b
--- /dev/null
+++ b/resources/sass/feedback.scss
@@ -0,0 +1,314 @@
+// Bootstrap
+@import './node_modules/bootstrap/scss/bootstrap';
+
+// Fonts
+@import url('https://fonts.googleapis.com/css2?family=Rubik');
+@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed');
+@import url('https://fonts.googleapis.com/css2?family=Life+Savers');
+
+// Variables
+@import 'variablesfeedback';
+@import 'variables-website';
+@import 'buttons-website';
+@import 'typography-website';
+@import 'globals-website';
+
+// Bootstrap
+@import '~bootstrap/scss/bootstrap';
+
+.tger-feedback-header {
+ position: sticky;
+ position: -webkit-sticky;
+ top: -1px;
+ width: 100%;
+ background-color: $purple;
+ max-width: 1300px;
+ margin: 0 auto;
+ padding: 0;
+ z-index: 100;
+
+ &__container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100%;
+ width: 95%;
+ margin: 0 auto;
+
+ .tger-logo {
+ padding-bottom: 3px;
+ @media (max-width: 575px) {
+ svg {
+ width: 106px;
+ height: 80px;
+ }
+ }
+ @media (min-width: 576px) {
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ }
+
+ .tger-location {
+ font-size: 20px;
+
+ svg.location-pin {
+ width: 25px;
+ height: 47.384982638889px;
+ fill: $muted-purple;
+ transition: all 0.5s;
+ margin-right: 10px;
+ // @media (max-width: 575px) {
+ // width: 12px;
+ // height: 22.744791666667px;
+ // margin-right: 5px;
+ // }
+ // @media (max-width: 350px) {
+ // display: none;
+ // }
+ }
+
+ &:hover {
+ svg.location-pin {
+ fill: $purple;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
+
+
+.tger-feedback-website-wrapper {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $white;
+ overflow-x: hidden;
+ position: relative;
+ min-height: 1000px;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 0;
+ opacity: 0.3;
+ }
+}
+
+
+.tger-feedback-main {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 100px 0;
+
+ .card {
+ border: none;
+ background-color: transparent;
+
+ .card-body {
+ h2 {
+ color: $purple;
+ margin-bottom: 20px;
+ }
+ }
+ }
+
+ #games {
+
+ h2 {
+ color: $purple;
+ margin-bottom: 40px;
+ }
+
+ .card {
+ border: none;
+ background-color: transparent;
+
+ img {
+ display: block;
+ max-width: 100%;
+ margin: 0 auto;
+ transition: all 0.5s;
+ }
+
+ h5 {
+ font-weight: 300;
+ font-family: $font2;
+ text-transform: uppercase;
+ color: $blue;
+ display: block;
+ text-align: center;
+ transition: all 0.5s;
+ }
+ }
+
+ .tger-button-container {
+ width: 50%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 0 auto;
+ @media(max-width: 767px) {
+ width: 75%;
+ }
+ @media(max-width: 575px) {
+ width: 100%;
+ flex-direction: column;
+ }
+
+ button {
+ width: 48%;
+ @media(max-width: 575px) {
+ margin-bottom: 10px;
+ width: 100%;
+ }
+
+ &.button5 {
+ background-color: $white;
+
+ &:hover {
+ background-color: $purple;
+ }
+ }
+ }
+ }
+ }
+
+
+ #form {
+
+ h2 {
+ color: $purple;
+ margin-bottom: 40px;
+ }
+
+ p {
+ font-size: 12px;
+ }
+
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+
+ input.form-check-input {
+ position: relative;
+ top: 1px;
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'],
+ select, select > option {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ .form-control:disabled, .form-control[readonly] {
+ background-color: transparent;
+ opacity: 1;
+ font-family: $font2;
+ font-size: 13px;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ align-items: center;
+
+ input {
+ width: 50px;
+ margin-right: 10px;
+ padding: 5px;
+
+ &.button5 {
+ background-color: $white;
+
+ &:hover {
+ background-color: $purple;
+ }
+ }
+ }
+ }
+
+ input.form-check-input {
+ position: relative;
+ top: 0px;
+ @media(max-width: 767px) {
+ position: absolute;
+ top: 1px;
+ }
+ }
+ }
+}
+
+
+.tger-feedback-footer {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $purple;
+
+ &__wrapper {
+ padding: 30px 0;
+ background-color: $purple;
+ }
+
+ &__copyright {
+ width: 90%;
+ margin: 0 auto;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__copyright-left {
+ list-style: none inside;
+ display: flex;
+ padding-left: 0;
+ margin-bottom: 0;
+ @media (max-width: 991px) {
+ flex-wrap: wrap;
+ }
+
+ li {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ margin-right: 20px;
+ @media (max-width: 575px) {
+ margin: 10px 10px 10px 0;
+ }
+
+ a {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/sass/gifts.scss b/resources/sass/gifts.scss
new file mode 100644
index 0000000..d66e351
--- /dev/null
+++ b/resources/sass/gifts.scss
@@ -0,0 +1,143 @@
+.tger-gift-cards {
+ h3 {
+ margin-bottom: 0;
+ @media (max-width: 575px) {
+ font-size: 20px;
+ }
+ }
+
+ &__container {
+ display: flex;
+ justify-content: center;
+ flex-wrap: wrap;
+ width: 95%;
+ margin: 0 auto;
+
+ .card {
+ margin: 10px;
+ width: 250px;
+ position: relative;
+ z-index: 1;
+
+ .card-header {
+ width: 100%;
+ height: 120px;
+ background-size: contain;
+ background-position: center;
+ background-repeat: no-repeat;
+ }
+
+ .card-body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ padding: 20px;
+
+ .card-title {
+ text-align: center;
+ font-size: 16px;
+ }
+
+ .card-text {
+ margin-bottom: 10px;
+ }
+ }
+ }
+ }
+
+ &__checkout {
+ width: 95%;
+ margin: 0 auto;
+
+ h2 {
+ font-size: 36px;
+ padding: 0 0 0 60px;
+ margin-bottom: 30px;
+ color: lighten(#000000, 40%);
+ border-left: 5px solid #f7c429;
+ @media (max-width: 575px) {
+ padding: 0;
+ border-left: none;
+ }
+ }
+
+ h5 {
+ margin-bottom: 25px;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ #card-element {
+ position: relative;
+ z-index: 1;
+ border-radius: 0;
+ }
+
+ .tger-button-container {
+ display: flex;
+ justify-content: space-between;
+
+ a,
+ button {
+ position: relative;
+ z-index: 1;
+
+ &.button5 {
+ background-color: #fff;
+
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: #84329b;
+ color: #fff;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+ }
+}
+
+.errors {
+ color: red;
+}
+
+.form-buttons {
+ margin-top: 30px;
+}
+
+.StripeElement {
+ box-sizing: border-box;
+ height: 40px;
+ width: 100% !important;
+ padding: 10px 12px;
+ background-color: white;
+ box-shadow: 0 1px 3px 0 #e6ebf1;
+ -webkit-transition: box-shadow 150ms ease;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ background-clip: padding-box;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+.StripeElement--focus {
+ box-shadow: 0 1px 3px 0 #cfd7df;
+}
+
+.StripeElement--invalid {
+ border-color: #fa755a;
+}
+
+.StripeElement--webkit-autofill {
+ background-color: #fefde5 !important;
+}
diff --git a/resources/sass/waiver.scss b/resources/sass/waiver.scss
new file mode 100644
index 0000000..3d6fa31
--- /dev/null
+++ b/resources/sass/waiver.scss
@@ -0,0 +1,343 @@
+// Bootstrap
+@import './node_modules/bootstrap/scss/bootstrap';
+
+// Fonts
+@import url('https://fonts.googleapis.com/css2?family=Rubik');
+@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed');
+@import url('https://fonts.googleapis.com/css2?family=Life+Savers');
+
+
+// Variables
+@import 'variableswaiver';
+@import 'variables-website';
+@import 'buttons-website';
+@import 'typography-website';
+@import 'globals-website';
+
+
+.signature-pad {
+ border: 1px solid #ccc;
+ border-radius: 0.25rem;
+}
+
+
+.tger-waiver-header {
+ position: sticky;
+ position: -webkit-sticky;
+ top: -1px;
+ width: 100%;
+ background-color: $purple;
+ max-width: 1300px;
+ margin: 0 auto;
+ padding: 0;
+ z-index: 100;
+
+ &__container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100%;
+ width: 95%;
+ margin: 0 auto;
+
+ .tger-logo {
+ padding-bottom: 3px;
+ @media (max-width: 575px) {
+ svg {
+ width: 106px;
+ height: 80px;
+ }
+ }
+ @media (min-width: 576px) {
+ svg {
+ width: 133px;
+ height: 100px;
+ }
+ }
+ }
+
+ .tger-location {
+ font-size: 20px;
+
+ svg.location-pin {
+ width: 25px;
+ height: 47.384982638889px;
+ fill: $muted-purple;
+ transition: all 0.5s;
+ margin-right: 10px;
+ // @media (max-width: 575px) {
+ // width: 12px;
+ // height: 22.744791666667px;
+ // margin-right: 5px;
+ // }
+ // @media (max-width: 350px) {
+ // display: none;
+ // }
+ }
+
+ &:hover {
+ svg.location-pin {
+ fill: $purple;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
+
+
+.tger-waiver-website-wrapper {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $white;
+ overflow-x: hidden;
+ position: relative;
+ min-height: 1000px;
+
+ &__pattern-bg {
+ background-size: 100%;
+ background-position: top center;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 0;
+ opacity: 0.3;
+ }
+}
+
+
+.tger-waiver-main {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 100px 0;
+
+ .card {
+ border: none;
+ background-color: transparent;
+
+ .card-header {
+ background-color: transparent;
+ border: none;
+
+ h2 {
+ text-align: center;
+ }
+ }
+
+ .card-body {
+
+ ul {
+ list-style: none inside;
+ padding: 0;
+ text-align: center;
+
+ li {
+ margin-bottom: 15px;
+
+ a {
+ color: $purple;
+ font-size: 18px;
+
+ &:hover {
+ color: $muted-purple;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ #games {
+
+ h2 {
+ color: $purple;
+ margin-bottom: 40px;
+ }
+
+ .card {
+ border: none;
+ background-color: transparent;
+
+ img {
+ display: block;
+ max-width: 100%;
+ margin: 0 auto;
+ transition: all 0.5s;
+ }
+
+ h5 {
+ font-weight: 300;
+ font-family: $font2;
+ text-transform: uppercase;
+ color: $blue;
+ display: block;
+ text-align: center;
+ transition: all 0.5s;
+ }
+ }
+
+ .tger-button-container {
+ width: 50%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 0 auto;
+ @media(max-width: 767px) {
+ width: 75%;
+ }
+ @media(max-width: 575px) {
+ width: 100%;
+ flex-direction: column;
+ }
+
+ button {
+ width: 48%;
+ @media(max-width: 575px) {
+ margin-bottom: 10px;
+ width: 100%;
+ }
+
+ &.button5 {
+ background-color: $white;
+
+ &:hover {
+ background-color: $purple;
+ }
+ }
+ }
+ }
+ }
+
+
+ #form {
+
+ h2 {
+ color: $purple;
+ margin-bottom: 40px;
+ }
+
+ p {
+ font-size: 12px;
+ }
+
+ .form-group {
+ margin-bottom: 15px;
+
+ label {
+ margin-bottom: 5px;
+
+ &.form-check-label {
+ display: flex;
+ align-items: center;
+
+ input.form-check-input {
+ position: relative;
+ top: 1px;
+ }
+ }
+ }
+
+ input[type='date'],
+ input[type='time'],
+ select, select > option {
+ font-family: $font1;
+ }
+
+ .form-control {
+ border-radius: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ .form-control:disabled, .form-control[readonly] {
+ background-color: transparent;
+ opacity: 1;
+ font-family: $font2;
+ font-size: 13px;
+ }
+ }
+
+ .tger-button-container {
+ display: flex;
+ align-items: center;
+
+ input {
+ width: 50px;
+ margin-right: 10px;
+ padding: 5px;
+
+ &.button5 {
+ background-color: $white;
+
+ &:hover {
+ background-color: $purple;
+ }
+ }
+ }
+ }
+
+ input.form-check-input {
+ position: relative;
+ top: 0px;
+ @media(max-width: 767px) {
+ position: absolute;
+ top: 1px;
+ }
+ }
+ }
+}
+
+
+.tger-waiver-footer {
+ max-width: 1300px;
+ margin: 0 auto;
+ background-color: $purple;
+
+ &__wrapper {
+ padding: 30px 0;
+ background-color: $purple;
+ }
+
+ &__copyright {
+ width: 90%;
+ margin: 0 auto;
+ position: relative;
+ z-index: 2;
+ }
+
+ &__copyright-left {
+ list-style: none inside;
+ display: flex;
+ padding-left: 0;
+ margin-bottom: 0;
+ @media (max-width: 991px) {
+ flex-wrap: wrap;
+ }
+
+ li {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ margin-right: 20px;
+ @media (max-width: 575px) {
+ margin: 10px 10px 10px 0;
+ }
+
+ a {
+ color: $white;
+ font-size: 12px;
+ text-transform: uppercase;
+ transition: all 0.5s;
+
+ &:hover {
+ color: $muted-purple;
+ text-decoration: none;
+ transition: all 0.5s;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/sass/website.scss b/resources/sass/website.scss
new file mode 100644
index 0000000..505f59f
--- /dev/null
+++ b/resources/sass/website.scss
@@ -0,0 +1,31 @@
+// Bootstrap
+@import '~bootstrap/scss/bootstrap';
+
+// Custom
+@import 'variables-website';
+@import 'typography-website';
+@import 'buttons-website';
+@import 'globals-website';
+@import 'header-website';
+@import 'menus-website';
+@import 'hero-website';
+@import 'home-website';
+@import 'themes-website';
+@import 'markets-website';
+@import 'bookings-website';
+@import 'privacy-pages-website';
+@import 'terms-of-service-website';
+@import 'testimonials-website';
+@import 'employment-website';
+@import 'private-parties-website';
+@import 'contact-website';
+@import 'reservations-website';
+@import 'faq-website';
+@import 'gift-cards-website';
+@import 'on-the-run-website';
+@import 'about-website';
+@import 'team-building-website';
+@import 'map-cta-website';
+@import 'trust-logos-website';
+@import 'pages-location-selector';
+@import 'footer-website';
diff --git a/resources/views/website/layout-booking.blade.php b/resources/views/website/layout-booking.blade.php
new file mode 100644
index 0000000..3b95749
--- /dev/null
+++ b/resources/views/website/layout-booking.blade.php
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ @if (isset($noindex))
+
+ @endif
+
+ @if (request()->getHttpHost() !== 'thegreatescaperoom.com')
+
+ @endif
+
+ {{ $seotitle ?? 'The Great Escape Room' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @include('website.partials.schema')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @yield('content')
+
+
+
+
+
+
+
diff --git a/resources/views/website/layout.blade.php b/resources/views/website/layout.blade.php
new file mode 100644
index 0000000..17293b5
--- /dev/null
+++ b/resources/views/website/layout.blade.php
@@ -0,0 +1,123 @@
+
+@if (isset($html))
+
+@else
+
+@endif
+
+
+
+ @if (isset($noindex))
+
+ @endif
+
+ @if (request()->getHttpHost() !== 'thegreatescaperoom.com')
+
+ @endif
+
+ {{ $seotitle ?? 'The Great Escape Room' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @include('website.partials.schema')
+
+
+
+
+
+
+
+
+
+ @if (isset($html))
+
+
+ @section('amp-scripts')
+
+
+
+
+
+
+
+
+
+
+ @show
+
+
+
+
+
+
+
+ @isset($market)
+
+ @endisset
+
+
+ @include('website.partials.header')
+
+
+
+
+
+
+ @include('website.partials.hero')
+ @yield('content')
+
+ @include('website.partials.menu')
+
+
+ @include('website.partials.footer')
+
+
+
+
+
+
diff --git a/resources/views/website/pages/booking/checkout.blade.php b/resources/views/website/pages/booking/checkout.blade.php
new file mode 100644
index 0000000..bd20082
--- /dev/null
+++ b/resources/views/website/pages/booking/checkout.blade.php
@@ -0,0 +1,119 @@
+@extends('website.layout-booking')
+
+@section('content')
+
+
+
+
+
+
+
+ @if ($errors->any())
+
+ @foreach ($errors->all() as $error)
+ {{ $error }}
+ @endforeach
+
+ @endif
+
+
+
+
+
+
+
+ @if ($cart->hasInRoomMonitors())
+
+
* Your cart contains a scavenger hunt game (Library or Gameroom) with a personal gamemaster who will join you in the room.
+
+ @endif
+
+
+
+
+
+ @if ($cart->hasInRoomMonitors())
+
Cart*
+ @else
+
Cart
+ @endif
+
+
+ Add More Games
+
+
+
+ @foreach ($cartItems as $item)
+
+
+
{{ $item->room->title }}
+
+
{{ $item->formatted_start }}
+
+
+ {{ $item->participants }} Participants
+ {{ $item->is_private ? 'Private' : 'Public' }} Game
+
+
+
Subtotal: @money($item->amount)
+
+
+
+
+
+
+ @endforeach
+
+
+ @if ($cart->deduction_codes->count())
+
+ @foreach ($cart->deduction_codes as $deductionCode)
+
+ Code {{ $deductionCode->code }}
+
+ Deduction:
+ @if (!empty($deductionCode->amount))
+ @money($deductionCode->amount)
+ @endif
+ @if (!empty($deductionCode->percent))
+ -{{$deductionCode->percent}}%
+ @endif
+
+
+ @endforeach
+
+ @endif
+
+
+ Taxes: @money($cart->total_taxes)
+ Fees: @money($cart->total_fees)
+
+
+
Total: @money($cart->total_amount) (USD)
+
+
+
+ @if (session()->has('code-applied'))
+
{{ session('code-applied') }}
+ @endif
+
+
+
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/website/pages/booking/contact-details.blade.php b/resources/views/website/pages/booking/contact-details.blade.php
new file mode 100644
index 0000000..a74621d
--- /dev/null
+++ b/resources/views/website/pages/booking/contact-details.blade.php
@@ -0,0 +1,53 @@
+@extends('website.layout-booking')
+
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/website/pages/booking/datalayer.blade.php b/resources/views/website/pages/booking/datalayer.blade.php
new file mode 100644
index 0000000..01b8701
--- /dev/null
+++ b/resources/views/website/pages/booking/datalayer.blade.php
@@ -0,0 +1,32 @@
+
\ No newline at end of file
diff --git a/resources/views/website/pages/booking/slots.blade.php b/resources/views/website/pages/booking/slots.blade.php
new file mode 100644
index 0000000..e866e64
--- /dev/null
+++ b/resources/views/website/pages/booking/slots.blade.php
@@ -0,0 +1,52 @@
+@extends('website.layout-booking')
+
+@section('content')
+ @if ($location->covid == 1)
+
+
+
+
+
+
+
+
+
+
Temporarily Closed
+
+
In order to do our part to help prevent the spread of COVID-19, we have temporarily ceased operations at {{ $market->title }}. During the appropriate phase, we will reopen with new operational procedures to ensure the safety of our participants.
+
+
+
+
+ @else
+ @if ($location->use_iframe == 1)
+ {!! $location->booking_iframe !!}
+ @else
+
+ @if ($errors->any())
+
+ @foreach ($errors->all() as $error)
+ {{ $error }}
+ @endforeach
+
+ @endif
+
+
+
+
+ @if (auth('customer')->user() && auth('customer')->user()->cart()->cartItems->count())
+
+ @endif
+
+ @endif
+ @endif
+@endsection
\ No newline at end of file
diff --git a/resources/views/website/pages/company/choose.blade.php b/resources/views/website/pages/company/choose.blade.php
new file mode 100644
index 0000000..d5f6c13
--- /dev/null
+++ b/resources/views/website/pages/company/choose.blade.php
@@ -0,0 +1,52 @@
+@extends('website.layout')
+
+@section('content')
+ @if(isset($link))
+
+
+
+
+
+
+
+
Choose your location
+
+
+
+
+
+
+
+
+ @endif
+@endsection
diff --git a/resources/views/website/partials/footer.blade.php b/resources/views/website/partials/footer.blade.php
new file mode 100644
index 0000000..1895c84
--- /dev/null
+++ b/resources/views/website/partials/footer.blade.php
@@ -0,0 +1,185 @@
+
+
diff --git a/resources/views/website/partials/header.blade.php b/resources/views/website/partials/header.blade.php
new file mode 100644
index 0000000..464af6c
--- /dev/null
+++ b/resources/views/website/partials/header.blade.php
@@ -0,0 +1,343 @@
+
\ No newline at end of file
diff --git a/resources/views/website/partials/hero.blade.php b/resources/views/website/partials/hero.blade.php
new file mode 100644
index 0000000..b3d2318
--- /dev/null
+++ b/resources/views/website/partials/hero.blade.php
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
{{ $title ?? 'The Great Escape Room' }}
+ @if(isset($subtitle))
+
{{ $subtitle }}
+ @endif
+ @if(isset($cta))
+
+ @endif
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/website/partials/menu.blade.php b/resources/views/website/partials/menu.blade.php
new file mode 100644
index 0000000..9464bb1
--- /dev/null
+++ b/resources/views/website/partials/menu.blade.php
@@ -0,0 +1,1249 @@
+
\ No newline at end of file
diff --git a/resources/views/website/partials/schema.blade.php b/resources/views/website/partials/schema.blade.php
new file mode 100644
index 0000000..b962b8a
--- /dev/null
+++ b/resources/views/website/partials/schema.blade.php
@@ -0,0 +1,145 @@
+
+@isset($market)
+ @if($market->locations()->exists())
+
+ @endif
+@endisset
\ No newline at end of file
diff --git a/routes/api.php b/routes/api.php
index bcb8b18..db7dff2 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -2,6 +2,8 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\Api\AvailabilityController;
+use App\Http\Controllers\Api\ThemesController;
/*
|--------------------------------------------------------------------------
@@ -17,3 +19,11 @@
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
+
+Route::get('availability/{locationSlug}', [AvailabilityController::class, 'indexByLocationSlug']);
+Route::get('availability/{locationSlug}/{slotNumber}', [AvailabilityController::class, 'findByLocationSlug']);
+Route::put('availability/{location:slug}/{slotNumber}/hold', [AvailabilityController::class, 'setHold']);
+Route::get('availability/{locationSlug}/{slotNumber}/hold', [AvailabilityController::class, 'getHold']);
+Route::delete('availability/{locationSlug}/{slotNumber}/hold', [AvailabilityController::class, 'deleteHold']);
+Route::resource('themes', ThemesController::class)->only('index');
+
diff --git a/routes/web.php b/routes/web.php
index b130397..df25e33 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,6 +1,10 @@
group(function () {
+ Route::get('company')->name('company');
+ //Route::get('/', CompanyController::class)->name('company');
+
+ Route::get('terms')->name('terms');
+ Route::get('privacy')->name('privacy');
+ Route::get('rooms')->name('rooms');
+ //Route::get('rooms/{theme}', ThemesController::class)->name('themes');
+ //Route::get('precautions', PrecautionsController::class)->name('precautions');
+
+ Route::get('employment', function () {
+ return view('welcome');
+ })->name('employment');
+ //Route::get('employment', EmploymentController::class)->name('employment');
+
+ Route::get('team-building', function () {
+ return view('welcome');
+ })->name('team-building');
+ //Route::get('team-building', TeamBuildingController::class)->name('team-building');
+
+ Route::get('on-the-run', function () {
+ return view('welcome');
+ })->name('on-the-run');
+ //Route::get('on-the-run', OnTheRunController::class)->name('on-the-run');
+
+ Route::get('private-parties', function () {
+ return view('welcome');
+ })->name('parties');
+ //Route::get('private-parties', PartiesController::class)->name('parties');
+
+ Route::get('contact', function () {
+ return view('welcome');
+ })->name('contact');
+ //Route::get('contact', ContactController::class)->name('contact');
+
+ Route::get('gift-certificates', function () {
+ return view('welcome');
+ })->name('gifts');
+ //Route::get('gift-certificates', GiftsController::class)->name('gifts');
+
+ Route::get('faq')->name('faq');
+
+
+ Route::get('reservations', function () {
+ return view('welcome');
+ })->name('reservations');
+ //Route::get('reservations', ReservationsController::class)->name('reservations');
+
+ Route::get('/book-online', SlotsController::class)->name('bookings');
+});
+
+Route::prefix('{market}')->group(function () {
+ Route::prefix('book-online')->group(function () {
+ /*Route::post('cart-items/{location?}', [CartItemsController::class, 'store'])->name('bookings.holds.store');
+ Route::delete('cart-items/{slotNumber}/{location?}', [CartItemsController::class, 'destroy'])->name('bookings.holds.destroy');
+ Route::get('contact-details/{location?}', [ContactDetailsController::class, 'create'])->name('bookings.contact-details.create');
+ Route::post('contact-details/{location?}', [ContactDetailsController::class, 'store'])->name('bookings.contact-details.store');
+ Route::post('voucher-applications/{location?}', [VoucherApplicationsController::class, 'store'])->name('bookings.voucher-applications.store');
+ Route::post('discount-applications/{location?}', [DiscountApplicationsController::class, 'store'])->name('bookings.discount-applications.store');
+ Route::get('checkout/{location?}', [CheckoutController::class, 'create'])->name('bookings.checkout.create');
+ Route::post('checkout/{location?}', [CheckoutController::class, 'store'])->name('bookings.checkout.store');
+ Route::get('thanks/{location?}', [PurchaseCompletedController::class, 'show'])->name('bookings.complete');
+ */
+ Route::get('{location?}', SlotsController::class)->name('bookings.slots.index');
+ });
+});
+
+Route::fallback(MarketController::class)->name('market');
+
diff --git a/webpack.mix.js b/webpack.mix.js
index 2a22dc1..951081f 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -1,4 +1,6 @@
const mix = require('laravel-mix');
+const purgecss = require('@fullhuman/postcss-purgecss')
+require('dotenv').config({ path: './.env' })
/*
|--------------------------------------------------------------------------
@@ -11,7 +13,84 @@ const mix = require('laravel-mix');
|
*/
+mix.sass('resources/sass/website.scss', 'public/css')
+ .options({
+ processCssUrls: false,
+ postCss: [
+ require('@fullhuman/postcss-purgecss')({
+ enabled: true,
+ content: [
+ 'resources/views/website/*/*/*.php',
+ 'resources/views/website/*/*.php',
+ 'resources/views/website/*.php'
+ ],
+ variables: true
+ }),
+ require('postcss-clear-empty-strings'),
+ require('postcss-discard-comments')({
+ removeAll: true
+ }),
+ require('css-byebye')({
+ rulesToRemove: [
+ '@import',
+ '@charset',
+ '.dropdown-toggle:after'
+ ]
+ }),
+ require('postcss-sanitize')({
+ removeEmpty: true,
+ rules: [{
+ prop: 'content'
+ }]
+ }),
+ require('postcss-no-important')()
+ ],
+ terser: {
+ extractComments: false
+ }
+ })
+
+ mix.js('resources/js/booking.js', 'public/js')
+ .sass('resources/sass/booking.scss', 'public/css', {},
+ [purgecss({
+ enabled: true,
+ content: [
+ 'resources/views/website/layout-booking.blade.php',
+ 'resources/js/booking.js',
+ 'resources/js/booking/components/*.vue'
+ ],
+ variables: true
+ })
+ ])
+ .options({
+ terser: {
+ extractComments: false
+ }
+ })
+
mix.js('resources/js/app.js', 'public/js')
- .postCss('resources/css/app.css', 'public/css', [
- //
- ]);
+ .sass('resources/sass/app.scss', 'public/css', {},
+ [purgecss({
+ enabled: true,
+ content: [
+ 'app/**/*.php',
+ 'resources/**/*.html',
+ 'resources/**/*.js',
+ 'resources/**/*.jsx',
+ 'resources/**/*.ts',
+ 'resources/**/*.tsx',
+ 'resources/**/*.php',
+ 'resources/**/*.vue'
+ ],
+ defaultExtractor: content => content.match(/[A-Za-z0-9-_:/]+/g) || [],
+ whitelistPatterns: [/-active$/, /-enter$/, /-leave-to$/],
+ variables: true
+ })
+ ])
+ .options({
+ terser: {
+ extractComments: false
+ }
+ })
+
+