@ticketboothapp/booking 0.1.19 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/package.json +2 -1
  2. package/src/components/BookingWidget.tsx +282 -26
  3. package/src/components/ManageBookingView.tsx +75 -23
  4. package/src/components/PostBookingDependentAddOnUpsell.tsx +1 -1
  5. package/src/components/booking/BookingProductGrid.tsx +1 -1
  6. package/src/components/booking/Calendar.module.css +3 -3
  7. package/src/components/booking/CheckoutForm.tsx +1 -1
  8. package/src/components/booking/InfoTooltip.tsx +2 -13
  9. package/src/components/booking/PickupLocationSelector.tsx +2 -2
  10. package/src/components/booking/PriceBreakdown.tsx +11 -34
  11. package/src/index.ts +3 -1
  12. package/tsconfig.json +1 -1
  13. package/src/components/JobApplicationDialog.module.css +0 -440
  14. package/src/components/JobApplicationDialog.tsx +0 -620
  15. package/src/components/PickupLocationMap.tsx +0 -110
  16. package/src/components/accordion.css +0 -27
  17. package/src/components/accordion.tsx +0 -29
  18. package/src/components/analytics/AnalyticsConsentRestore.tsx +0 -19
  19. package/src/components/analytics/AnalyticsScripts.tsx +0 -106
  20. package/src/components/analytics/CookieConsentBanner.css +0 -86
  21. package/src/components/analytics/CookieConsentBanner.tsx +0 -102
  22. package/src/components/bottom-sheet.module.css +0 -78
  23. package/src/components/bottom-sheet.tsx +0 -60
  24. package/src/components/breadcrumb.module.css +0 -40
  25. package/src/components/breadcrumb.tsx +0 -36
  26. package/src/components/client-bottom-sheet.tsx +0 -14
  27. package/src/components/conditional-footer.tsx +0 -27
  28. package/src/components/contact-us.module.css +0 -147
  29. package/src/components/contact-us.tsx +0 -49
  30. package/src/components/email-signup.css +0 -151
  31. package/src/components/email-signup.tsx +0 -63
  32. package/src/components/faq-wrapper.module.css +0 -47
  33. package/src/components/faq-wrapper.tsx +0 -15
  34. package/src/components/footer.css +0 -187
  35. package/src/components/footer.tsx +0 -143
  36. package/src/components/global-simple-modal.tsx +0 -33
  37. package/src/components/google-review-summary.module.css +0 -77
  38. package/src/components/google-review-summary.tsx +0 -50
  39. package/src/components/hero-image.css +0 -13
  40. package/src/components/hero-image.tsx +0 -44
  41. package/src/components/language-aware-link.tsx +0 -72
  42. package/src/components/language-switcher.module.css +0 -124
  43. package/src/components/language-switcher.tsx +0 -75
  44. package/src/components/map-section.css +0 -59
  45. package/src/components/map-section.tsx +0 -63
  46. package/src/components/navbar.module.css +0 -152
  47. package/src/components/navbar.tsx +0 -125
  48. package/src/components/parallax-provider.tsx +0 -11
  49. package/src/components/product-theme-pages/best-option.module.css +0 -70
  50. package/src/components/product-theme-pages/best-option.tsx +0 -35
  51. package/src/components/product-theme-pages/extended-tour-options.module.css +0 -22
  52. package/src/components/product-theme-pages/extended-tour-options.tsx +0 -11
  53. package/src/components/product-theme-pages/photo-gallery.tsx +0 -90
  54. package/src/components/product-theme-pages/product-theme-page-layout.module.css +0 -13
  55. package/src/components/product-theme-pages/product-theme-page-layout.tsx +0 -67
  56. package/src/components/product-theme-pages/top-of-fold.module.css +0 -179
  57. package/src/components/product-theme-pages/top-of-fold.tsx +0 -80
  58. package/src/components/product-tile/image-only-product-tile-desktop.module.css +0 -106
  59. package/src/components/product-tile/image-only-product-tile-desktop.tsx +0 -56
  60. package/src/components/product-tile/image-only-product-tile-mobile.module.css +0 -122
  61. package/src/components/product-tile/image-only-product-tile-mobile.tsx +0 -89
  62. package/src/components/product-tile/image-only-product-tile.tsx +0 -44
  63. package/src/components/product-tile/product-tile-card.module.css +0 -84
  64. package/src/components/product-tile/product-tile-card.tsx +0 -61
  65. package/src/components/review-highlights-section.css +0 -85
  66. package/src/components/review-highlights-section.tsx +0 -127
  67. package/src/components/season-closure-overlay.module.css +0 -99
  68. package/src/components/season-closure-overlay.tsx +0 -98
  69. package/src/components/simple-modal.tsx +0 -69
  70. package/src/components/simple-top-of-fold.module.css +0 -76
  71. package/src/components/simple-top-of-fold.tsx +0 -34
  72. package/src/components/spacer.css +0 -41
  73. package/src/components/spacer.tsx +0 -23
  74. package/src/components/star-rating.module.css +0 -74
  75. package/src/components/star-rating.tsx +0 -48
  76. package/src/components/title-subtitle.module.css +0 -10
  77. package/src/components/title-subtitle.tsx +0 -30
  78. package/src/components/translatable-reviews.tsx +0 -75
  79. package/src/components/value-props.css +0 -185
  80. package/src/components/value-props.tsx +0 -88
  81. package/src/constants/booking-guide-quiz.ts +0 -64
  82. package/src/constants/contact-info.ts +0 -2
  83. package/src/constants/faq.ts +0 -44
  84. package/src/constants/json-ld/faq-json-ld.tsx +0 -170
  85. package/src/constants/json-ld/homepage-json-ld.tsx +0 -138
  86. package/src/constants/json-ld/job-posting-json-ld.tsx +0 -92
  87. package/src/constants/json-ld/organization-json-ld.tsx +0 -62
  88. package/src/constants/json-ld/page-json-ld.tsx +0 -6
  89. package/src/constants/json-ld/product-json-ld.tsx +0 -154
  90. package/src/constants/json-ld/review-json-ld.tsx +0 -377
  91. package/src/constants/navigation-links/footer-links.ts +0 -48
  92. package/src/constants/navigation-links/nav-bar-links.ts +0 -41
  93. package/src/constants/navigation-links/navigation-link.ts +0 -6
  94. package/src/constants/quiz-recommendations.ts +0 -506
  95. package/src/constants/reviews.ts +0 -75
  96. package/src/constants/staff.ts +0 -197
  97. package/src/constants/value-props.ts +0 -58
  98. package/src/hooks/use-bottom-sheet.tsx +0 -15
  99. package/src/hooks/use-simple-modal.tsx +0 -27
  100. package/src/hooks/useEmailSubscription.tsx +0 -103
  101. package/src/hooks/useEmbeddedInIframe.ts +0 -16
  102. package/src/hooks/useQuiz.tsx +0 -210
  103. package/src/providers/bottom-sheet-provider.tsx +0 -40
  104. package/src/types/fareharbor.d.ts +0 -12
  105. package/src/types/quiz.ts +0 -59
  106. /package/src/{app/photo-sessions → lib}/photo-packages.ts +0 -0
@@ -1,14 +0,0 @@
1
- 'use client';
2
-
3
- import BottomSheet from './bottom-sheet';
4
- import { useBottomSheet } from '@/hooks/use-bottom-sheet';
5
-
6
- export default function ClientBottomSheet() {
7
- const { isOpen, content, closeSheet } = useBottomSheet();
8
-
9
- return (
10
- <BottomSheet isOpen={isOpen} onClose={closeSheet}>
11
- {content}
12
- </BottomSheet>
13
- );
14
- }
@@ -1,27 +0,0 @@
1
- 'use client';
2
-
3
- import { usePathname } from 'next/navigation';
4
- import { useEmbeddedInIframe } from '@/hooks/useEmbeddedInIframe';
5
- import Footer from './footer';
6
-
7
- export default function ConditionalFooter() {
8
- const pathname = usePathname();
9
- const embeddedInIframe = useEmbeddedInIframe();
10
-
11
- if (embeddedInIframe) {
12
- return null;
13
- }
14
-
15
- // Hide footer on subscribe/unsubscribe and partner pages
16
- if (
17
- pathname === '/subscribe' ||
18
- pathname === '/unsubscribe' ||
19
- pathname === '/live-pickups' ||
20
- pathname?.startsWith('/partner/') ||
21
- pathname?.startsWith('/partners/')
22
- ) {
23
- return null;
24
- }
25
-
26
- return <Footer />;
27
- }
@@ -1,147 +0,0 @@
1
- .contactSection {
2
- padding-bottom: 1rem; /* Reduced from 6rem */
3
- }
4
-
5
- .contactTiles {
6
- display: flex;
7
- flex-direction: column;
8
- flex: 1;
9
- gap: 1rem;
10
- }
11
-
12
- .imageContainer {
13
- width: 100%;
14
- display: flex;
15
- flex-direction: column;
16
- gap: 1rem;
17
- height: 320px;
18
- }
19
-
20
- .contactImageCaption {
21
- font-size: 0.9rem;
22
- color: var(--primary-text);
23
- text-align: center;
24
- }
25
-
26
- .imageContainer img {
27
- border-radius: var(--border-radius-small);
28
- object-fit: cover;
29
- }
30
-
31
- @media (min-width: 1024px) {
32
- .container {
33
- padding: 4rem;
34
- }
35
-
36
- .title {
37
- font-size: 4rem;
38
- }
39
-
40
- .contactTileTitle {
41
- font-size: 2.5rem;
42
- }
43
-
44
- .contactTiles {
45
- flex-direction: row;
46
- align-items: flex-start;
47
- gap: 4rem;
48
- }
49
-
50
- .imageContainer {
51
- height: 500px;
52
- flex: 1;
53
- max-width: 50%;
54
- }
55
-
56
- .contactInfo {
57
- flex: 1;
58
- display: flex;
59
- flex-direction: column;
60
- justify-content: flex-start;
61
- }
62
-
63
- .contactLink {
64
- font-size: 1.2rem;
65
- }
66
-
67
- .contactTileDescription {
68
- font-size: 1.2rem;
69
- }
70
- }
71
-
72
- @media (max-width: 1023px) {
73
- .container {
74
- padding: 1rem;
75
- }
76
-
77
- .title {
78
- font-size: 4rem;
79
- }
80
-
81
- .contactTileTitle {
82
- font-size: 1.5rem;
83
- }
84
-
85
- .contactLink {
86
- font-size: 1.1rem;
87
- }
88
-
89
- .contactTileDescription {
90
- font-size: 1.1rem;
91
- }
92
- }
93
-
94
- .contactTile {
95
- border-left: 4px solid var(--accent-orange);
96
- padding-left: 1rem;
97
- margin-bottom: 2rem;
98
- max-width: 100%; /* Ensure it doesn't overflow container */
99
- }
100
-
101
- .contactLink {
102
- text-decoration: underline;
103
- color: var(--accent-orange);
104
- font-family: monospace;
105
- word-break: break-all; /* Break long email addresses */
106
- display: inline-block; /* Helps with overflow containment */
107
- }
108
-
109
- .contactTileDescription {
110
- color: inherit;
111
- text-decoration: none;
112
- font-family: monospace; /* For that typewriter-like feel */
113
- }
114
-
115
- .contactSignOff {
116
- color: var(--accent-orange);
117
- text-decoration: none;
118
- font-size: 1.2rem;
119
- font-weight: bold;
120
- font-family: monospace; /* For that typewriter-like feel */
121
- }
122
-
123
- .contactTile h3 {
124
- margin: 0 0 0.5rem 0;
125
- font-size: 1.5rem;
126
- }
127
-
128
- .contactTile address {
129
- font-style: normal;
130
- }
131
-
132
- .title {
133
- font-weight: normal;
134
- text-align: left;
135
- margin-bottom: 1rem; /* Single margin rule here */
136
- }
137
-
138
- .contactTileTitle {
139
- text-align: left;
140
- }
141
-
142
- .contactInfo {
143
- display: flex;
144
- flex-direction: column;
145
- margin: auto 0; /* This will center it vertically */
146
- flex: 1;
147
- }
@@ -1,49 +0,0 @@
1
- 'use client';
2
-
3
- import styles from './contact-us.module.css';
4
- import defaultStrings from '@/strings';
5
- import { CONTACT_EMAIL, CONTACT_PHONE } from '@/constants/contact-info';
6
- import ViaViaImage from './image';
7
- import { IMAGES } from '@/constants/images';
8
-
9
- export default function ContactUs({ strings = defaultStrings }: { strings?: any }) {
10
- return (
11
- <section className={styles.contactSection}>
12
- <div className={styles.container}>
13
- <h3 className={styles.title}>{strings.contact.title}</h3>
14
- <div className={styles.contactTiles}>
15
- <div className={styles.contactInfo}>
16
- <div className={styles.contactTile}>
17
- <h4 className={styles.contactTileTitle}>{strings.contact.writeUs}</h4>
18
- <a href={`mailto:${CONTACT_EMAIL}`} className={styles.contactLink}>
19
- {CONTACT_EMAIL}
20
- </a>
21
- </div>
22
-
23
- <div className={styles.contactTile}>
24
- <h4 className={styles.contactTileTitle}>{strings.contact.sayHi}</h4>
25
- <a href={`tel:${CONTACT_PHONE}`} className={styles.contactLink}>
26
- {CONTACT_PHONE}
27
- </a>
28
- </div>
29
-
30
- <div className={styles.contactTile}>
31
- <h4 className={styles.contactTileTitle}>{strings.contact.weMightSpeakYourLanguage}</h4>
32
- <p className={styles.contactTileDescription}>{strings.contact.weMightSpeakYourLanguageDescription}</p>
33
- </div>
34
- </div>
35
-
36
- <div className={styles.imageContainer}>
37
- <ViaViaImage
38
- className={styles.contactImage}
39
- imageId={IMAGES.JENNA_AND_NATHAN_VIA_VIA.id}
40
- alt={IMAGES.JENNA_AND_NATHAN_VIA_VIA.alt}
41
- context="GALLERY"
42
- />
43
- <p className={styles.contactImageCaption}>{strings.contact.contactImageCaption}</p>
44
- </div>
45
- </div>
46
- </div>
47
- </section>
48
- );
49
- }
@@ -1,151 +0,0 @@
1
- /* Email signup form styles */
2
- .email-signup {
3
- display: flex;
4
- flex-direction: column;
5
- align-items: center;
6
- gap: 0.2rem;
7
- width: 100%;
8
- max-width: 500px;
9
- margin: 1rem auto;
10
- }
11
-
12
- .email-signup h3 {
13
- color: var(--accent-white);
14
- font-family: 'Poppins';
15
- font-weight: 800;
16
- font-size: 1.5rem;
17
- text-align: center;
18
- margin: 0;
19
- text-transform: lowercase;
20
- }
21
-
22
- .email-signup-form {
23
- display: flex;
24
- gap: 0.5rem;
25
- width: 100%;
26
- max-width: 450px;
27
- }
28
-
29
- .email-signup-input {
30
- flex: 1;
31
- padding: 0.5rem;
32
- border: 2px solid var(--accent-white);
33
- border-radius: 8px;
34
- background-color: transparent;
35
- color: var(--accent-white);
36
- font-family: 'Figtree';
37
- font-size: 0.92rem;
38
- outline: none;
39
- transition: border-color 0.3s ease;
40
- }
41
-
42
- .email-signup-input::placeholder {
43
- color: var(--accent-white-70);
44
- }
45
-
46
- .email-signup-input:focus {
47
- border-color: var(--accent-white);
48
- box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2);
49
- }
50
-
51
- .email-signup-submit {
52
- padding: 0.75rem 1.5rem;
53
- background-color: var(--accent-white);
54
- color: var(--accent-orange);
55
- border: 2px solid var(--accent-white);
56
- border-radius: 8px;
57
- font-family: 'Poppins';
58
- font-size: 1rem;
59
- font-weight: 800;
60
- text-transform: lowercase;
61
- cursor: pointer;
62
- transition: all 0.3s ease;
63
- white-space: nowrap;
64
- }
65
-
66
- .email-signup-submit:hover {
67
- background-color: transparent;
68
- color: var(--accent-white);
69
- }
70
-
71
- .email-signup-submit:disabled {
72
- opacity: 0.6;
73
- cursor: not-allowed;
74
- }
75
-
76
- .email-signup-success {
77
- color: var(--accent-white);
78
- font-family: 'Figtree';
79
- font-size: 1rem;
80
- text-align: center;
81
- margin-top: 0.5rem;
82
- }
83
-
84
- .email-signup-error {
85
- color: #ffcccb;
86
- font-family: 'Figtree';
87
- font-size: 1rem;
88
- text-align: center;
89
- margin-top: 0.5rem;
90
- }
91
-
92
- /* Modal-specific styles for white background */
93
- .email-signup-modal .email-signup h3 {
94
- color: var(--accent-orange) !important;
95
- }
96
-
97
- .email-signup-modal .email-signup-input {
98
- border: 2px solid var(--accent-orange) !important;
99
- background-color: #fff !important;
100
- color: var(--primary-text) !important;
101
- }
102
-
103
- .email-signup-modal .email-signup-input::placeholder {
104
- color: var(--grey-text) !important;
105
- }
106
-
107
- .email-signup-modal .email-signup-input:focus {
108
- border-color: var(--accent-orange) !important;
109
- box-shadow: 0 0 0 2px var(--accent-orange-10) !important;
110
- }
111
-
112
- .email-signup-modal .email-signup-submit {
113
- background-color: var(--accent-orange) !important;
114
- color: var(--accent-white) !important;
115
- border: 2px solid var(--accent-orange) !important;
116
- }
117
-
118
- .email-signup-modal .email-signup-submit:hover {
119
- background-color: var(--accent-orange-70) !important;
120
- color: var(--accent-white) !important;
121
- }
122
-
123
- .email-signup-modal .email-signup-success {
124
- color: #28a745 !important;
125
- }
126
-
127
- .email-signup-modal .email-signup-error {
128
- color: #dc3545 !important;
129
- }
130
-
131
- /* Mobile styles for email signup */
132
- @media (max-width: 768px) {
133
- .email-signup {
134
- max-width: 320px;
135
- }
136
-
137
- .email-signup h3 {
138
- font-size: 1.25rem;
139
- }
140
-
141
- .email-signup-form {
142
- flex-direction: column;
143
- gap: 0.75rem;
144
- }
145
-
146
- .email-signup-input,
147
- .email-signup-submit {
148
- padding: 0.8rem;
149
- font-size: 0.92rem;
150
- }
151
- }
@@ -1,63 +0,0 @@
1
- 'use client';
2
-
3
- import { useEmailSubscription } from '@/hooks/useEmailSubscription';
4
- import './email-signup.css';
5
-
6
- interface EmailSignupProps {
7
- strings: any;
8
- initialEmail?: string;
9
- autoSubmit?: boolean;
10
- source?: string;
11
- }
12
-
13
- export default function EmailSignup({ strings, initialEmail = '', autoSubmit = false, source }: EmailSignupProps) {
14
- const { email, setEmail, isSubmitting, submitStatus, subscribeEmail } = useEmailSubscription({
15
- initialEmail,
16
- autoSubmit,
17
- source
18
- });
19
-
20
- const handleEmailSubmit = async (e: React.FormEvent) => {
21
- e.preventDefault();
22
- if (!email || isSubmitting) return;
23
- await subscribeEmail(email);
24
- };
25
-
26
- return (
27
- <div className="email-signup">
28
- <h3>{strings.footer.emailSignup.title}</h3>
29
- <form className="email-signup-form" onSubmit={handleEmailSubmit}>
30
- <input
31
- type="email"
32
- value={email}
33
- onChange={(e) => setEmail(e.target.value)}
34
- placeholder={strings.footer.emailSignup.placeholder}
35
- className="email-signup-input"
36
- required
37
- />
38
- <button
39
- type="submit"
40
- disabled={isSubmitting || !email}
41
- className="email-signup-submit"
42
- >
43
- {isSubmitting ? '...' : strings.footer.emailSignup.submit}
44
- </button>
45
- </form>
46
- {submitStatus === 'success' && (
47
- <div className="email-signup-success">
48
- {strings.footer.emailSignup.success}
49
- </div>
50
- )}
51
- {submitStatus === 'error' && (
52
- <div className="email-signup-error">
53
- {strings.footer.emailSignup.error}
54
- </div>
55
- )}
56
- {submitStatus === 'duplicate' && (
57
- <div className="email-signup-success">
58
- {strings.footer.emailSignup.duplicate}
59
- </div>
60
- )}
61
- </div>
62
- );
63
- }
@@ -1,47 +0,0 @@
1
- .faqWrapper {
2
- padding-top: var(--spacing-large);
3
- padding-bottom: var(--spacing-large);
4
- display: flex;
5
- flex-direction: column;
6
- align-items: center;
7
- justify-content: center;
8
- margin: 0 auto;
9
- box-sizing: border-box;
10
- }
11
-
12
- .faqWrapperRow {
13
- display: flex;
14
- padding-bottom: var(--spacing-medium);
15
- box-sizing: border-box;
16
- width: 100%;
17
- }
18
-
19
- @media (min-width: 1024px) {
20
- .faqWrapper {
21
- width: 70%;
22
- }
23
-
24
- .faqWrapperRow {
25
- flex-direction: row;
26
- }
27
-
28
- .faqWrapperTitle {
29
- width: 30%;
30
- }
31
-
32
- .faqSection {
33
- width: 70%;
34
- box-sizing: border-box;
35
- }
36
- }
37
-
38
- @media (max-width: 1023px) {
39
- .faqWrapper {
40
- width: 100%;
41
- }
42
-
43
- .faqWrapperRow {
44
- flex-direction: column;
45
- }
46
- }
47
-
@@ -1,15 +0,0 @@
1
- import styles from "./faq-wrapper.module.css";
2
- import FAQSection from "@/app/faq/faq-section";
3
- import { faqSection } from "@/constants/faq";
4
-
5
- export default function FAQWrapper({faqSection, strings}: {faqSection: faqSection, strings: any}) {
6
- return (
7
- <div className={styles.faqWrapper}>
8
- <div className={styles.faqWrapperRow}>
9
- <h2 className={styles.faqWrapperTitle}>{strings.productThemePages.faqSection.title}</h2>
10
- <FAQSection className={styles.faqSection} faqSection={faqSection} selectionMode="single" />
11
- </div>
12
- <a href="/faq" className={styles.faqWrapperLink}>{strings.common.seeMore} →</a>
13
- </div>
14
- )
15
- }
@@ -1,187 +0,0 @@
1
- .footer-logo-container {
2
- display: flex;
3
- align-items: center;
4
- justify-content: center;
5
- width: fit-content;
6
- padding: 0 20px;
7
- }
8
-
9
- .footer-via-via-name {
10
- display: flex;
11
- align-items: center;
12
- gap: 0.5rem;
13
- }
14
-
15
- .footer-logo-letter {
16
- width: min(15vw, 60px);
17
- height: min(15vw, 60px);
18
- }
19
-
20
- /* Target all SVG paths consistently */
21
- .footer-logo-letter path {
22
- fill: var(--accent-white) !important;
23
- }
24
-
25
- /* For hover states - match opacity across all letters */
26
- .footer-container a:hover .footer-logo-letter path {
27
- fill: var(--accent-white-70) !important; /* Back to using the CSS variable */
28
- }
29
-
30
- /* Adjust sizes for mobile */
31
- @media (max-width: 768px) {
32
- .footer-logo-letter {
33
- width: min(12vw, 50px);
34
- height: min(12vw, 50px);
35
- }
36
- }
37
-
38
- /* Further adjust for very small screens */
39
- @media (max-width: 360px) {
40
- .footer-logo-letter {
41
- width: min(10vw, 40px);
42
- height: min(10vw, 40px);
43
- }
44
- }
45
-
46
- .footer-container {
47
- background-color: var(--accent-orange);
48
- display: flex;
49
- flex-direction: column;
50
- justify-content: center;
51
- align-items: center;
52
- padding: 1rem;
53
- }
54
-
55
- .footer-container p {
56
- color: var(--accent-white);
57
- }
58
-
59
- .footer-container a {
60
- color: var(--accent-white);
61
- }
62
-
63
- .footer-container .footer-icon {
64
- width: 36px;
65
- height: 36px;
66
- color: var(--accent-white);
67
- fill: var(--accent-white);
68
- }
69
-
70
- .footer-container .footer-icon:hover {
71
- color: var(--accent-white-70);
72
- fill: var(--accent-white-70);
73
- }
74
-
75
- /* Target SVG paths to override inline fill attributes */
76
- .footer-container .footer-icon path {
77
- fill: var(--accent-white) !important;
78
- }
79
-
80
- .footer-container .footer-icon:hover path {
81
- fill: var(--accent-white-70) !important;
82
- }
83
-
84
- /* Scale down Google G icon to match other social icons */
85
- .footer-container a[href*="maps.app.goo.gl"] .footer-icon {
86
- transform: scale(0.92);
87
- }
88
-
89
- /* Desktop hover */
90
- @media (min-width: 1024px) {
91
- .footer-container a:hover {
92
- color: var(--accent-white-70);
93
- }
94
- }
95
-
96
- /* Mobile styles */
97
- @media screen and (max-width: 768px) {
98
- .footer-container .button {
99
- width: 70%;
100
- }
101
- }
102
-
103
- .footer-links-container {
104
- display: flex;
105
- flex-wrap: wrap;
106
- justify-content: center;
107
- gap: 1rem;
108
- width: 70%;
109
- }
110
-
111
- /* Mobile: strict 2 columns */
112
- @media (max-width: 767px) {
113
- .footer-links-container {
114
- display: grid;
115
- grid-template-columns: repeat(2, 1fr);
116
- gap: 0.75rem;
117
- width: 90%;
118
- }
119
-
120
- .footer-links-container a {
121
- font-size: 0.8rem;
122
- min-height: 2.5rem;
123
- display: flex;
124
- align-items: center;
125
- justify-content: center;
126
- }
127
-
128
- /* Center the last item if it's alone */
129
- .footer-links-container > a:last-child:nth-child(2n - 1) {
130
- grid-column: 1 / -1;
131
- }
132
- }
133
-
134
- /* Desktop: 5 columns */
135
- @media (min-width: 768px) {
136
- .footer-links-container {
137
- display: flex;
138
- gap: 2rem;
139
- }
140
-
141
- .footer-links-container a {
142
- flex: 0 0 calc(20% - 1.6rem);
143
- min-width: fit-content;
144
- max-width: calc(20% - 1.6rem);
145
- }
146
- }
147
-
148
- .footer-links-container a {
149
- text-align: center;
150
- white-space: normal;
151
- text-decoration: none;
152
- text-transform: uppercase;
153
- font-family: 'Poppins', sans-serif;
154
- color: var(--accent-white);
155
- line-height: 1.2;
156
- padding: 0.25rem;
157
- }
158
-
159
- .footer-company-text {
160
- font-size: 0.75rem;
161
- text-transform: uppercase;
162
- text-align: center;
163
- }
164
-
165
- /* Mobile styles for company text */
166
- @media (max-width: 768px) {
167
- .footer-company-text {
168
- font-size: 0.6rem;
169
- }
170
- }
171
-
172
- .footer-moraine-magic-icon {
173
- width: 60%;
174
- max-width: 400px;
175
- height: auto;
176
- margin: 0 auto;
177
- display: block;
178
- }
179
-
180
- /* Mobile styles for moraine magic icon */
181
- @media (max-width: 768px) {
182
- .footer-moraine-magic-icon {
183
- width: 80%;
184
- max-width: 500px;
185
- }
186
- }
187
-