howdy-jekyll-theme 1.0.0

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 (93) hide show
  1. checksums.yaml +7 -0
  2. data/AGENTS.md +49 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE +21 -0
  5. data/README.md +431 -0
  6. data/_includes/analytics.html +19 -0
  7. data/_includes/blog-pagination.html +31 -0
  8. data/_includes/comments.html +46 -0
  9. data/_includes/dark-mode-toggle.html +18 -0
  10. data/_includes/head.html +137 -0
  11. data/_includes/hero-carousel.html +80 -0
  12. data/_includes/logo.html +5 -0
  13. data/_includes/navigation.html +24 -0
  14. data/_includes/newsletter.html +10 -0
  15. data/_includes/share-buttons.html +70 -0
  16. data/_includes/social-links.html +37 -0
  17. data/_includes/toc.html +29 -0
  18. data/_layouts/autopage_collection.html +43 -0
  19. data/_layouts/blog.html +42 -0
  20. data/_layouts/default.html +86 -0
  21. data/_layouts/home.html +5 -0
  22. data/_layouts/page.html +33 -0
  23. data/_layouts/post.html +76 -0
  24. data/_layouts/project.html +61 -0
  25. data/_plugins/sort_projects.rb +6 -0
  26. data/_plugins/user_colors.rb +68 -0
  27. data/_posts/2026-01-01-beyond-pixels.md +21 -0
  28. data/_posts/2026-01-02-collaboration.md +25 -0
  29. data/_posts/2026-01-03-design-feeling.md +25 -0
  30. data/_posts/2026-01-04-finding-inspiration.md +25 -0
  31. data/_posts/2026-01-05-freebies.md +35 -0
  32. data/_posts/2026-01-06-ux-research-methods.md +25 -0
  33. data/_posts/2026-01-07-color-theory.md +25 -0
  34. data/_posts/2026-01-08-responsive-design.md +25 -0
  35. data/_posts/2026-01-09-web-performance.md +25 -0
  36. data/_posts/2026-01-10-mobile-first.md +25 -0
  37. data/_posts/2026-04-15-crafting-visual-hierarchy.md +27 -0
  38. data/_posts/2026-04-16-building-design-systems.md +27 -0
  39. data/_posts/2026-04-18-accessibility-matters.md +25 -0
  40. data/_posts/2026-04-19-motion-design.md +29 -0
  41. data/_posts/2026-04-20-typography-basics.md +25 -0
  42. data/_posts/2026-04-22-product-design-best-practices.md +239 -0
  43. data/_projects/atlas.md +26 -0
  44. data/_projects/luminous.md +26 -0
  45. data/_projects/nova.md +31 -0
  46. data/_projects/osaka.md +26 -0
  47. data/_sass/_base.scss +181 -0
  48. data/_sass/_components.scss +767 -0
  49. data/_sass/_dark-mode.scss +39 -0
  50. data/_sass/_layout.scss +1033 -0
  51. data/_sass/_typography.scss +394 -0
  52. data/_sass/_user-colors.scss +1 -0
  53. data/_sass/_variables.scss +165 -0
  54. data/about.md +62 -0
  55. data/assets/css/main.scss +10 -0
  56. data/assets/css/swiper-bundle.min.css +13 -0
  57. data/assets/fonts/ChaumontScript-Regular.otf +0 -0
  58. data/assets/fonts/DMSans-Italic-Variable.ttf +0 -0
  59. data/assets/fonts/DMSans-Variable.ttf +0 -0
  60. data/assets/illustrations/analytics.svg +218 -0
  61. data/assets/illustrations/business-strategy.svg +161 -0
  62. data/assets/illustrations/designer.svg +267 -0
  63. data/assets/illustrations/email.svg +123 -0
  64. data/assets/illustrations/friends-taking-selfie.svg +189 -0
  65. data/assets/illustrations/launch.svg +230 -0
  66. data/assets/illustrations/love-animals.svg +83 -0
  67. data/assets/illustrations/meeting.svg +292 -0
  68. data/assets/illustrations/mobile-shopping.svg +113 -0
  69. data/assets/illustrations/online-shopping.svg +148 -0
  70. data/assets/illustrations/oops-something-went-wrong.svg +97 -0
  71. data/assets/illustrations/podcast.svg +199 -0
  72. data/assets/illustrations/presentation.svg +138 -0
  73. data/assets/illustrations/programmer.svg +240 -0
  74. data/assets/illustrations/task-management.svg +174 -0
  75. data/assets/illustrations/tasks-complete.svg +161 -0
  76. data/assets/illustrations/travel-booking-hotel.svg +214 -0
  77. data/assets/illustrations/video-call.svg +178 -0
  78. data/assets/images/apple-touch-icon.png +0 -0
  79. data/assets/images/favicon-dark.png +0 -0
  80. data/assets/images/favicon-light.png +0 -0
  81. data/assets/images/howdy-theme-dark.png +0 -0
  82. data/assets/images/howdy-theme-light.png +0 -0
  83. data/assets/images/og-image.png +0 -0
  84. data/assets/js/hero-carousel.js +36 -0
  85. data/assets/js/mobile-nav.js +62 -0
  86. data/assets/js/swiper-bundle.min.js +13 -0
  87. data/assets/js/swiper-bundle.min.js.map +1 -0
  88. data/assets/js/theme-toggle.js +54 -0
  89. data/assets/resume.pdf +683 -0
  90. data/contact.md +74 -0
  91. data/howdy-jekyll-theme.gemspec +25 -0
  92. data/lib/howdy-jekyll-theme.rb +19 -0
  93. metadata +245 -0
@@ -0,0 +1,1033 @@
1
+ // Howdy Jekyll Theme - Layout Styles
2
+
3
+ @use "variables" as *;
4
+
5
+ // Scrollbar styling
6
+ ::-webkit-scrollbar {
7
+ width: 6px;
8
+ }
9
+
10
+ ::-webkit-scrollbar-track {
11
+ background: transparent;
12
+ }
13
+
14
+ ::-webkit-scrollbar-thumb {
15
+ background-color: var(--howdy-border);
16
+ border-radius: 3px;
17
+
18
+ &:hover {
19
+ background-color: var(--howdy-text-muted);
20
+ }
21
+ }
22
+
23
+ * {
24
+ scrollbar-width: thin;
25
+ scrollbar-color: var(--howdy-border) transparent;
26
+ }
27
+
28
+ // Page load animation
29
+ @keyframes howdy-fade-in {
30
+ 0% {
31
+ opacity: 0;
32
+ transform: translateY(16px);
33
+ }
34
+ 100% {
35
+ opacity: 1;
36
+ transform: translateY(0);
37
+ }
38
+ }
39
+
40
+ @keyframes howdy-fade-only {
41
+ 0% {
42
+ opacity: 0;
43
+ }
44
+ 100% {
45
+ opacity: 1;
46
+ }
47
+ }
48
+
49
+ // Page exit transition — content only, keeps hero/nav persistent
50
+ body.howdy-navigating {
51
+ .content-area,
52
+ .company-logos,
53
+ .stats {
54
+ opacity: 0;
55
+ transition: opacity 0.15s var(--howdy-ease-in);
56
+ will-change: opacity;
57
+ }
58
+ }
59
+
60
+ // Hero content — container always visible, inner content fades in
61
+ .hero-content {
62
+ position: relative;
63
+ width: 100%;
64
+ height: 100%;
65
+ min-height: 280px;
66
+ overflow: hidden;
67
+ border-radius: var(--howdy-radius-lg);
68
+ background: linear-gradient(135deg, var(--howdy-bg-green-tint), var(--howdy-bg-blue-tint));
69
+ opacity: 0;
70
+ transition: opacity 0.5s var(--howdy-ease-out);
71
+
72
+ @media (max-width: $howdy-md) {
73
+ min-height: 200px;
74
+ }
75
+
76
+ @media (max-width: $howdy-sm) {
77
+ min-height: 160px;
78
+ }
79
+ }
80
+
81
+ body.loaded .hero-content {
82
+ opacity: 1;
83
+ }
84
+
85
+ // Carousel container starts invisible, fades in smoothly
86
+ .hero-carousel {
87
+ opacity: 0;
88
+ transform: scale(1.02);
89
+ transition: opacity 0.5s var(--howdy-ease-out), transform 0.5s var(--howdy-ease-out);
90
+ }
91
+
92
+ body.loaded .hero-carousel {
93
+ opacity: 1;
94
+ transform: scale(1);
95
+ }
96
+
97
+ body.loaded .content-area {
98
+ > * {
99
+ opacity: 0;
100
+ animation: howdy-fade-in 0.5s var(--howdy-ease-out) forwards;
101
+ }
102
+
103
+ > *:nth-child(1) { animation-delay: 0.05s; }
104
+ > *:nth-child(2) { animation-delay: 0.1s; }
105
+ > *:nth-child(3) { animation-delay: 0.15s; }
106
+ > *:nth-child(4) { animation-delay: 0.2s; }
107
+ > *:nth-child(5) { animation-delay: 0.25s; }
108
+ > *:nth-child(6) { animation-delay: 0.3s; }
109
+ > *:nth-child(7) { animation-delay: 0.35s; }
110
+ > *:nth-child(8) { animation-delay: 0.4s; }
111
+ > *:nth-child(9) { animation-delay: 0.45s; }
112
+ > *:nth-child(10) { animation-delay: 0.5s; }
113
+ > *:nth-child(n+11) { animation-delay: 0.55s; }
114
+ }
115
+
116
+ body.loaded .hero-image {
117
+ opacity: 0;
118
+ animation: howdy-fade-only 0.6s var(--howdy-ease-out) forwards;
119
+ }
120
+
121
+ body.loaded .logo-overlay {
122
+ opacity: 0;
123
+ animation: howdy-fade-only 0.5s var(--howdy-ease-out) forwards;
124
+ animation-delay: 0.3s;
125
+ }
126
+
127
+ body.loaded .posts-grid,
128
+ body.loaded .projects-grid {
129
+ .post-card,
130
+ .project-card {
131
+ opacity: 0;
132
+ animation: howdy-fade-in 0.4s var(--howdy-ease-out) forwards;
133
+ }
134
+
135
+ .post-card:nth-child(1),
136
+ .project-card:nth-child(1) { animation-delay: 0.1s; }
137
+ .post-card:nth-child(2),
138
+ .project-card:nth-child(2) { animation-delay: 0.15s; }
139
+ .post-card:nth-child(3),
140
+ .project-card:nth-child(3) { animation-delay: 0.2s; }
141
+ .post-card:nth-child(4),
142
+ .project-card:nth-child(4) { animation-delay: 0.25s; }
143
+ .post-card:nth-child(n+5),
144
+ .project-card:nth-child(n+5) { animation-delay: 0.3s; }
145
+ }
146
+
147
+ // Two-column section — fills viewport height
148
+ .two-column {
149
+ display: flex;
150
+ flex-flow: row;
151
+ flex: none;
152
+ place-content: center;
153
+ align-items: center;
154
+ gap: var(--howdy-two-col-gap-xxl);
155
+ width: 100%;
156
+ height: 100vh;
157
+ padding: 0;
158
+ position: relative;
159
+ overflow: hidden;
160
+ transition: var(--howdy-transition);
161
+
162
+ @media (max-width: $howdy-xl) {
163
+ gap: var(--howdy-two-col-gap-xl);
164
+ }
165
+
166
+ @media (max-width: $howdy-lg) {
167
+ flex-direction: column;
168
+ gap: var(--howdy-two-col-gap-lg);
169
+ height: min-content;
170
+ }
171
+
172
+ @media (max-width: $howdy-md) {
173
+ gap: var(--howdy-two-col-gap-md);
174
+ }
175
+
176
+ @media (max-width: $howdy-sm) {
177
+ gap: var(--howdy-two-col-gap-sm);
178
+ }
179
+
180
+ @media (max-width: $howdy-xs) {
181
+ gap: var(--howdy-two-col-gap-xs);
182
+ }
183
+ }
184
+
185
+ // Left section (image) — gets 1.2x flex weight
186
+ .left-section {
187
+ display: flex;
188
+ flex-flow: row;
189
+ flex: 1.2 0 0;
190
+ place-content: center;
191
+ align-items: center;
192
+ gap: 10px;
193
+ height: 100%;
194
+ padding: var(--howdy-spacing-md) 0;
195
+ position: relative;
196
+ overflow: hidden;
197
+ transition: var(--howdy-transition);
198
+ width: 1px;
199
+
200
+ @media (max-width: $howdy-xl) {
201
+ height: 100%;
202
+ padding: var(--howdy-hero-padding-xl) 0;
203
+ }
204
+
205
+ @media (max-width: $howdy-lg) {
206
+ flex: none;
207
+ width: 100%;
208
+ height: var(--howdy-hero-height-lg);
209
+ padding: var(--howdy-hero-padding-lg) 0;
210
+ margin-top: var(--howdy-hero-padding-lg);
211
+ }
212
+
213
+ @media (max-width: $howdy-md) {
214
+ height: auto;
215
+ padding: var(--howdy-hero-padding-md) 0;
216
+ margin-top: var(--howdy-hero-padding-md);
217
+ }
218
+
219
+ @media (max-width: $howdy-sm) {
220
+ height: var(--howdy-hero-height-md);
221
+ padding: var(--howdy-hero-padding-sm) 0;
222
+ margin-top: var(--howdy-hero-padding-sm);
223
+ }
224
+
225
+ @media (max-width: $howdy-xs) {
226
+ height: var(--howdy-hero-height-sm);
227
+ padding: var(--howdy-hero-padding-xs) 0;
228
+ margin-top: var(--howdy-hero-padding-xs);
229
+ }
230
+ }
231
+
232
+ // Container inside left section
233
+ .left-container {
234
+ display: flex;
235
+ flex-flow: row;
236
+ flex: 1 0 0;
237
+ place-content: center;
238
+ align-items: center;
239
+ gap: 10px;
240
+ height: 100%;
241
+ padding: 0 0 0 var(--howdy-spacing-md);
242
+ position: relative;
243
+ overflow: hidden;
244
+ transition: var(--howdy-transition);
245
+ width: 1px;
246
+
247
+ @media (max-width: $howdy-xl) {
248
+ padding: 0 var(--howdy-hero-padding-xl);
249
+ width: 100%;
250
+ height: 100%;
251
+ }
252
+
253
+ @media (max-width: $howdy-lg) {
254
+ padding: 0 var(--howdy-hero-padding-lg);
255
+ width: 100%;
256
+ height: var(--howdy-hero-height-lg);
257
+ }
258
+
259
+ @media (max-width: $howdy-md) {
260
+ height: var(--howdy-hero-height-md);
261
+ padding: 0 var(--howdy-hero-padding-md);
262
+ }
263
+
264
+ @media (max-width: $howdy-sm) {
265
+ height: var(--howdy-hero-height-sm);
266
+ padding: 0 var(--howdy-hero-padding-sm);
267
+ }
268
+
269
+ @media (max-width: $howdy-xs) {
270
+ height: var(--howdy-hero-height-xs);
271
+ padding: 0 var(--howdy-hero-padding-xs);
272
+ }
273
+ }
274
+
275
+ // Image wrapper inside left container
276
+ .image-wrapper {
277
+ display: flex;
278
+ flex-flow: column;
279
+ flex: 1 0 0;
280
+ place-content: flex-start;
281
+ align-items: center;
282
+ gap: 124px;
283
+ height: 100%;
284
+ padding: 0;
285
+ position: relative;
286
+ overflow: visible;
287
+ transition: var(--howdy-transition);
288
+ width:1px;
289
+
290
+ @media (max-width: $howdy-lg) {
291
+ flex: none;
292
+ height: 100%;
293
+ width: 100%;
294
+ overflow: hidden;
295
+ }
296
+
297
+ @media (max-width: $howdy-md) {
298
+ height: 100%;
299
+ }
300
+
301
+ @media (max-width: $howdy-sm) {
302
+ height: 100%;
303
+ }
304
+ }
305
+
306
+ // Hero image
307
+ .hero-image {
308
+ width: 100%;
309
+ height: 100%;
310
+ object-fit: cover;
311
+ border-radius: var(--howdy-radius-lg);
312
+ }
313
+
314
+ // Hero placeholder
315
+ .hero-placeholder {
316
+ width: 100%;
317
+ height: 100%;
318
+ background: linear-gradient(135deg, var(--howdy-bg-green-tint), var(--howdy-bg-blue-tint));
319
+ border-radius: var(--howdy-radius-lg);
320
+ }
321
+
322
+ // Logo overlay on hero image
323
+ .logo-overlay {
324
+ position: absolute;
325
+ top: 0;
326
+ left: 0;
327
+ right: 0;
328
+ bottom: 0;
329
+ z-index: 2;
330
+ padding: 20px 24px;
331
+ display: flex;
332
+ align-items: flex-start;
333
+ justify-content: flex-start;
334
+ pointer-events: none;
335
+ background: rgba(255, 255, 255, 0.15);
336
+ overflow: hidden;
337
+
338
+ .site-logo {
339
+ pointer-events: auto;
340
+ }
341
+
342
+ @media (max-width: $howdy-md) {
343
+ padding: 12px 0;
344
+ }
345
+
346
+ @media (max-width: $howdy-sm) {
347
+ padding: 12px 0;
348
+ }
349
+ }
350
+
351
+ // Right section (content) — column direction, scrollable
352
+ .right-section {
353
+ display: flex;
354
+ flex-flow: column;
355
+ flex: 1 0 0;
356
+ place-content: flex-start;
357
+ align-items: flex-start;
358
+ gap: 0;
359
+ width: 1px;
360
+ height: 100%;
361
+ padding: var(--howdy-spacing-lg) 0 0;
362
+ position: relative;
363
+ overflow-y: auto;
364
+ transition: var(--howdy-transition);
365
+ scrollbar-width: thin;
366
+ scrollbar-color: var(--howdy-border) transparent;
367
+
368
+ @media (max-width: $howdy-lg) {
369
+ flex: none;
370
+ width: 100%;
371
+ height: min-content;
372
+ padding: 0;
373
+ margin-top: var(--howdy-spacing-lg);
374
+ }
375
+
376
+ @media (max-width: $howdy-md) {
377
+ padding: 0;
378
+ margin-top: var(--howdy-spacing-md);
379
+ }
380
+
381
+ @media (max-width: $howdy-sm) {
382
+ margin-top: var(--howdy-spacing-sm);
383
+ }
384
+ }
385
+
386
+ // Hero subtitle
387
+ .hero-subtitle {
388
+ font-size: 18px;
389
+
390
+ @media (max-width: $howdy-xl) {
391
+ font-size: 16px;
392
+ }
393
+
394
+ @media (max-width: $howdy-sm) {
395
+ font-size: 15px;
396
+ }
397
+ }
398
+
399
+ // Content wrapper inside right section
400
+ .content-wrapper {
401
+ display: flex;
402
+ flex-flow: column;
403
+ flex: 1 0 0;
404
+ justify-content: flex-start;
405
+ align-items: stretch;
406
+ gap: 15%;
407
+ width: 100%;
408
+ height: 1px;
409
+ padding: 0;
410
+ position: relative;
411
+ transition: var(--howdy-transition);
412
+
413
+ @media (max-width: $howdy-lg) {
414
+ flex: none;
415
+ width: 100%;
416
+ height: min-content;
417
+ padding: 0 0 var(--howdy-content-wrapper-padding-lg);
418
+ }
419
+
420
+ @media (max-width: $howdy-md) {
421
+ padding: 0 0 var(--howdy-content-wrapper-padding-md);
422
+ }
423
+
424
+ @media (max-width: $howdy-sm) {
425
+ padding: 0 0 var(--howdy-content-wrapper-padding-sm);
426
+ }
427
+
428
+ @media (max-width: $howdy-xs) {
429
+ padding: 0 0 var(--howdy-content-wrapper-padding-xs);
430
+ }
431
+ }
432
+
433
+ // Content area
434
+ .content-area {
435
+ display: flex;
436
+ flex-flow: column;
437
+ flex: none;
438
+ place-content: flex-start;
439
+ align-items: stretch;
440
+ gap: var(--howdy-content-gap-xxl);
441
+ width: 100%;
442
+ max-width: 720px;
443
+ height: min-content;
444
+ padding: 0 var(--howdy-content-area-padding-xl) var(--howdy-content-area-padding-y);
445
+ position: relative;
446
+ overflow-x: hidden;
447
+ transition: var(--howdy-transition);
448
+
449
+ @media (max-width: $howdy-xl) {
450
+ max-width: none;
451
+ gap: var(--howdy-content-gap-xl);
452
+ padding: 56px var(--howdy-content-area-padding-xl) var(--howdy-content-area-padding-xl-bottom);
453
+ }
454
+
455
+ @media (max-width: $howdy-lg) {
456
+ gap: var(--howdy-content-gap-lg);
457
+ padding: 0 var(--howdy-content-area-padding-lg) var(--howdy-content-area-padding-lg-bottom);
458
+ }
459
+
460
+ @media (max-width: $howdy-md) {
461
+ padding: 0 var(--howdy-content-area-padding-md) var(--howdy-content-area-padding-md-bottom);
462
+ gap: var(--howdy-content-gap-md);
463
+ }
464
+
465
+ @media (max-width: $howdy-sm) {
466
+ padding: 0 var(--howdy-content-area-padding-sm) var(--howdy-content-area-padding-sm-bottom);
467
+ gap: var(--howdy-content-gap-sm);
468
+ }
469
+
470
+ @media (max-width: $howdy-xs) {
471
+ padding: 0 var(--howdy-content-area-padding-xs) var(--howdy-content-area-padding-xs-bottom);
472
+ gap: var(--howdy-content-gap-xs);
473
+ }
474
+ }
475
+
476
+ // Detail page metadata (category, date, year)
477
+ .detail-meta {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: var(--howdy-spacing-md);
481
+ margin-bottom: var(--howdy-spacing-md);
482
+ flex-wrap: wrap;
483
+
484
+ @media (max-width: $howdy-sm) {
485
+ gap: var(--howdy-spacing-sm);
486
+ }
487
+ }
488
+
489
+ .detail-year,
490
+ .detail-date {
491
+ color: var(--howdy-text-muted);
492
+ font-size: 14px;
493
+ font-weight: 500;
494
+ }
495
+
496
+ .detail-subtitle {
497
+ color: var(--howdy-text-secondary);
498
+ margin-top: var(--howdy-spacing-md);
499
+ }
500
+
501
+ // Detail content area (post/project)
502
+ .detail-content {
503
+ margin-top: var(--howdy-spacing-lg);
504
+ }
505
+
506
+ .detail-content h2,
507
+ .detail-content h3,
508
+ .detail-content h4 {
509
+ color: var(--howdy-text-primary);
510
+ margin-top: var(--howdy-spacing-lg);
511
+ margin-bottom: var(--howdy-spacing-md);
512
+ }
513
+
514
+ .detail-content p {
515
+ margin-bottom: var(--howdy-spacing-md);
516
+ }
517
+
518
+ // Detail navigation (back links, post navigation)
519
+ .detail-nav {
520
+ display: flex;
521
+ flex-direction: row;
522
+ gap: var(--howdy-detail-nav-gap-xxl);
523
+ margin-top: var(--howdy-spacing-xl);
524
+ margin-bottom: var(--howdy-spacing-md);
525
+ width: 100%;
526
+
527
+ @media (max-width: $howdy-md) {
528
+ flex-wrap: wrap;
529
+ gap: var(--howdy-detail-nav-gap-md);
530
+ margin-top: var(--howdy-spacing-48);
531
+ }
532
+
533
+ @media (max-width: $howdy-sm) {
534
+ flex-direction: column;
535
+ gap: var(--howdy-detail-nav-gap-sm);
536
+ }
537
+
538
+ @media (max-width: $howdy-xs) {
539
+ gap: var(--howdy-detail-nav-gap-xs);
540
+ }
541
+
542
+ .btn {
543
+ min-width: 0;
544
+ max-width: 45%;
545
+
546
+ @media (max-width: $howdy-md) {
547
+ max-width: none;
548
+ flex: 1;
549
+ }
550
+
551
+ @media (max-width: $howdy-sm) {
552
+ max-width: none;
553
+ }
554
+
555
+ @media (max-width: $howdy-xs) {
556
+ max-width: none;
557
+ }
558
+ }
559
+
560
+ .btn-label {
561
+ overflow: hidden;
562
+ text-overflow: ellipsis;
563
+ white-space: nowrap;
564
+ }
565
+ }
566
+
567
+ // Header (navigation area)
568
+ .site-header {
569
+ display: flex;
570
+ flex-flow: row;
571
+ flex: none;
572
+ place-content: center space-between;
573
+ align-items: center;
574
+ width: 100%;
575
+ height: min-content;
576
+ padding: 0 0 0 var(--howdy-spacing-sm);
577
+ position: relative;
578
+ transition: var(--howdy-transition);
579
+
580
+ @media (max-width: $howdy-xl) {
581
+ justify-content: space-between;
582
+ gap: 0;
583
+ padding: 0;
584
+ }
585
+
586
+ @media (max-width: $howdy-lg) {
587
+ flex-wrap: wrap;
588
+ justify-content: flex-start;
589
+ gap: var(--howdy-header-gap-lg);
590
+ }
591
+
592
+ @media (max-width: $howdy-md) {
593
+ gap: var(--howdy-header-gap-md);
594
+ }
595
+
596
+ @media (max-width: $howdy-sm) {
597
+ gap: var(--howdy-header-gap-sm);
598
+ }
599
+ }
600
+
601
+ // Logo
602
+ .site-logo {
603
+ text-decoration: none;
604
+ display: inline-block;
605
+ transform: rotate(-20deg);
606
+ transition: var(--howdy-transition);
607
+
608
+ .site-logo-svg {
609
+ overflow: visible;
610
+ }
611
+
612
+ .logo-text {
613
+ font-family: 'Chaumont Script', var(--howdy-font-script);
614
+ font-weight: 400;
615
+ font-size: 64px;
616
+ fill: #fff;
617
+ transition: fill var(--howdy-transition);
618
+ }
619
+
620
+ &:hover .logo-text {
621
+ fill: var(--howdy-accent-green);
622
+ }
623
+
624
+ @media (max-width: $howdy-lg) {
625
+ .site-logo-svg {
626
+ width: 140px;
627
+ height: 70px;
628
+ }
629
+
630
+ .logo-text {
631
+ font-size: 56px;
632
+ }
633
+ }
634
+
635
+ @media (max-width: $howdy-md) {
636
+ .site-logo-svg {
637
+ width: 120px;
638
+ height: 60px;
639
+ }
640
+
641
+ .logo-text {
642
+ font-size: 48px;
643
+ }
644
+ }
645
+
646
+ @media (max-width: $howdy-sm) {
647
+ .site-logo-svg {
648
+ width: 100px;
649
+ height: 50px;
650
+ }
651
+
652
+ .logo-text {
653
+ font-size: 40px;
654
+ }
655
+ }
656
+ }
657
+
658
+ // Navigation
659
+ .site-nav {
660
+ display: flex;
661
+ flex-flow: row;
662
+ gap: var(--howdy-spacing-lg);
663
+ align-items: center;
664
+
665
+ @media (max-width: $howdy-xl) {
666
+ position: fixed;
667
+ top: 0;
668
+ right: 0;
669
+ bottom: 0;
670
+ width: 280px;
671
+ max-width: 80vw;
672
+ flex-direction: column;
673
+ justify-content: center;
674
+ align-items: flex-start;
675
+ gap: var(--howdy-spacing-lg);
676
+ padding: var(--howdy-nav-padding-xxl);
677
+ background-color: var(--howdy-bg-white);
678
+ border-left: 1px solid var(--howdy-border);
679
+ transform: translateX(100%);
680
+ transition: transform 0.3s var(--howdy-ease-in-out);
681
+ z-index: 1000;
682
+ overflow-y: auto;
683
+ }
684
+
685
+ @media (max-width: $howdy-sm) {
686
+ width: 100%;
687
+ max-width: 100vw;
688
+ padding: var(--howdy-nav-padding-sm);
689
+ }
690
+
691
+ a {
692
+ font-size: 14px;
693
+ font-weight: 500;
694
+ min-height: 32px;
695
+ display: inline-flex;
696
+ align-items: center;
697
+ justify-content: center;
698
+ padding: 6px 16px;
699
+ border-radius: var(--howdy-radius-full);
700
+ color: var(--howdy-text-secondary);
701
+ transition: var(--howdy-transition);
702
+
703
+ &:hover {
704
+ color: var(--howdy-text-primary);
705
+ background-color: var(--howdy-bg-light-gray);
706
+ }
707
+
708
+ &.active {
709
+ color: var(--howdy-accent-green);
710
+ background-color: var(--howdy-bg-green-tint);
711
+
712
+ &:hover {
713
+ color: var(--howdy-accent-green);
714
+ background-color: var(--howdy-bg-green-tint);
715
+ }
716
+ }
717
+ }
718
+ }
719
+
720
+ html.nav-open .site-nav {
721
+ @media (max-width: $howdy-xl) {
722
+ transform: translateX(0);
723
+ }
724
+ }
725
+
726
+ .nav-toggle {
727
+ display: none;
728
+ width: 44px;
729
+ height: 44px;
730
+ padding: 10px;
731
+ background: none;
732
+ border: 1px solid var(--howdy-border);
733
+ border-radius: var(--howdy-radius-full);
734
+ cursor: pointer;
735
+ transition: var(--howdy-transition);
736
+ align-items: center;
737
+ justify-content: center;
738
+ color: var(--howdy-text-primary);
739
+
740
+ &:hover {
741
+ border-color: var(--howdy-accent-green);
742
+ color: var(--howdy-accent-green);
743
+ }
744
+
745
+ @media (max-width: $howdy-xxl) {
746
+ display: flex;
747
+ position: fixed;
748
+ top: 16px;
749
+ right: 16px;
750
+ z-index: 1001;
751
+ background-color: var(--howdy-bg-white);
752
+ }
753
+
754
+ @media (max-width: $howdy-sm) {
755
+ top: 12px;
756
+ right: 12px;
757
+ }
758
+ }
759
+
760
+ .nav-toggle-icon,
761
+ .nav-toggle-icon::before,
762
+ .nav-toggle-icon::after {
763
+ display: block;
764
+ width: 20px;
765
+ height: 2px;
766
+ background-color: currentColor;
767
+ border-radius: 1px;
768
+ transition: transform 0.3s ease, opacity 0.3s ease;
769
+ }
770
+
771
+ .nav-toggle-icon {
772
+ position: relative;
773
+
774
+ &::before,
775
+ &::after {
776
+ content: '';
777
+ position: absolute;
778
+ left: 0;
779
+ }
780
+
781
+ &::before {
782
+ top: -6px;
783
+ }
784
+
785
+ &::after {
786
+ top: 6px;
787
+ }
788
+ }
789
+
790
+ html.nav-open .nav-toggle-icon {
791
+ background-color: transparent;
792
+
793
+ &::before {
794
+ transform: translateY(6px) rotate(45deg);
795
+ }
796
+
797
+ &::after {
798
+ transform: translateY(-6px) rotate(-45deg);
799
+ }
800
+ }
801
+
802
+ // Mobile nav overlay
803
+ .nav-overlay {
804
+ display: none;
805
+ }
806
+
807
+ html.nav-open .nav-overlay {
808
+ @media (max-width: $howdy-xl) {
809
+ display: block;
810
+ position: fixed;
811
+ inset: 0;
812
+ background-color: rgba(0, 0, 0, 0.3);
813
+ z-index: 999;
814
+ pointer-events: auto;
815
+ }
816
+ }
817
+
818
+ // Button container
819
+ .button-group {
820
+ display: flex;
821
+ flex-flow: wrap;
822
+ flex: none;
823
+ place-content: center flex-start;
824
+ align-items: center;
825
+ gap: var(--howdy-spacing-md);
826
+ width: 100%;
827
+ height: min-content;
828
+ padding: 0;
829
+ position: relative;
830
+ transition: var(--howdy-transition);
831
+ }
832
+
833
+ // Badge (Now booking)
834
+ .badge {
835
+ display: inline-block;
836
+ padding: 8px 16px;
837
+ background-color: var(--howdy-bg-green-tint);
838
+ color: var(--howdy-accent-green);
839
+ border-radius: var(--howdy-radius-full);
840
+ font-weight: 500;
841
+ font-size: 14px;
842
+ letter-spacing: 0.01em;
843
+ transition: var(--howdy-transition);
844
+
845
+ @media (max-width: $howdy-sm) {
846
+ font-size: 12px;
847
+ padding: 6px 12px;
848
+ }
849
+ }
850
+
851
+ // Company logos section
852
+ .company-logos {
853
+ width: 100%;
854
+ max-width: 100%;
855
+ overflow: hidden;
856
+ mask-image: linear-gradient(to right, rgba(0,0,0,0) 0%, rgb(0,0,0) 25%, rgb(0,0,0) 75%, rgba(0,0,0,0) 100%);
857
+ }
858
+
859
+ .logo-link {
860
+ text-decoration: none;
861
+ color: inherit;
862
+ display: inline-flex;
863
+ align-items: center;
864
+
865
+ &:hover .logo-svg {
866
+ color: var(--howdy-text-primary);
867
+ }
868
+ }
869
+
870
+ .logo-img {
871
+ flex-shrink: 0;
872
+ height: 20px;
873
+ width: auto;
874
+ opacity: 0.5;
875
+ filter: grayscale(100%);
876
+ transition: opacity var(--howdy-transition), filter var(--howdy-transition);
877
+
878
+ .logo-link:hover & {
879
+ opacity: 1;
880
+ }
881
+ }
882
+
883
+ .logo-svg {
884
+ flex-shrink: 0;
885
+ height: 20px;
886
+ width: auto;
887
+ color: var(--howdy-text-muted);
888
+ transition: color var(--howdy-transition);
889
+ }
890
+
891
+ .logos-scroll {
892
+ display: flex;
893
+ gap: 40px;
894
+ align-items: center;
895
+ width: max-content;
896
+ animation: scroll 30s linear infinite;
897
+
898
+ @media (max-width: $howdy-md) {
899
+ gap: 24px;
900
+ animation-duration: 25s;
901
+ }
902
+
903
+ @media (max-width: $howdy-sm) {
904
+ gap: 16px;
905
+ animation-duration: 20s;
906
+ }
907
+ }
908
+
909
+ .logo-item {
910
+ flex-shrink: 0;
911
+ font-family: var(--howdy-font-primary);
912
+ font-size: 14px;
913
+ font-weight: 500;
914
+ color: var(--howdy-text-muted);
915
+ letter-spacing: 0.06em;
916
+ text-transform: uppercase;
917
+ }
918
+
919
+ @keyframes scroll {
920
+ 0% {
921
+ transform: translateX(0);
922
+ }
923
+ 100% {
924
+ transform: translateX(-50%);
925
+ }
926
+ }
927
+
928
+ // Stats section
929
+ .stats {
930
+ text-align: center;
931
+ padding: var(--howdy-spacing-lg) 0;
932
+
933
+ .stat-number {
934
+ font-family: var(--howdy-font-primary);
935
+ font-weight: 900;
936
+ font-size: 48px;
937
+ color: var(--howdy-text-primary);
938
+ transition: var(--howdy-transition);
939
+
940
+ @media (max-width: $howdy-md) {
941
+ font-size: 36px;
942
+ }
943
+
944
+ @media (max-width: $howdy-sm) {
945
+ font-size: 28px;
946
+ }
947
+ }
948
+
949
+ .stat-label {
950
+ @extend .body-large !optional;
951
+ color: var(--howdy-text-secondary);
952
+ }
953
+ }
954
+
955
+ // Hero carousel
956
+ .hero-carousel {
957
+ position: relative;
958
+ width: 100%;
959
+ height: 100%;
960
+
961
+ .swiper-wrapper {
962
+ height: 100%;
963
+ }
964
+
965
+ .swiper-slide {
966
+ display: flex;
967
+ align-items: stretch;
968
+ }
969
+
970
+ .hero-carousel__slide {
971
+ width: 100%;
972
+ height: 100%;
973
+ object-fit: cover;
974
+ display: block;
975
+ }
976
+
977
+ .swiper-pagination-bullet {
978
+ width: 8px;
979
+ height: 8px;
980
+ border-radius: 50%;
981
+ border: none;
982
+ background-color: rgba(255, 255, 255, 0.4);
983
+ cursor: pointer;
984
+ padding: 0;
985
+ transition: background-color 0.3s ease, transform 0.3s ease;
986
+ opacity: 1;
987
+
988
+ &.swiper-pagination-bullet-active {
989
+ background-color: #fff;
990
+ transform: scale(1.2);
991
+ }
992
+
993
+ &:hover {
994
+ background-color: rgba(255, 255, 255, 0.8);
995
+ }
996
+ }
997
+
998
+ .hero-carousel__dots {
999
+ position: absolute;
1000
+ bottom: 16px;
1001
+ left: 0;
1002
+ width: 100%;
1003
+ text-align: center;
1004
+ z-index: 3;
1005
+ }
1006
+ }
1007
+
1008
+ // 404 error page
1009
+ .error-code {
1010
+ font-family: var(--howdy-font-mono);
1011
+ font-size: 120px;
1012
+ font-weight: 400;
1013
+ color: var(--howdy-accent-green);
1014
+ line-height: 1;
1015
+ margin-bottom: 8px;
1016
+ }
1017
+
1018
+ .error-title {
1019
+ font-family: var(--howdy-font-primary);
1020
+ font-size: 24px;
1021
+ font-weight: 600;
1022
+ color: var(--howdy-text-primary);
1023
+ margin-bottom: 8px;
1024
+ }
1025
+
1026
+ .error-message {
1027
+ font-family: var(--howdy-font-primary);
1028
+ font-size: 16px;
1029
+ color: var(--howdy-text-muted);
1030
+ max-width: 40ch;
1031
+ }
1032
+
1033
+