|
1 | | -// ============================================ |
2 | | -// Mobile Menu Staggered Reveal Animation |
3 | | -// ============================================ |
4 | | -@keyframes menuItemReveal { |
5 | | - from { |
6 | | - opacity: 0; |
7 | | - transform: translateY(-12px); |
8 | | - } |
9 | | - to { |
10 | | - opacity: 1; |
11 | | - transform: translateY(0); |
12 | | - } |
13 | | -} |
14 | | - |
15 | 1 | .header { |
16 | 2 | background-color: $dark-bg; |
17 | 3 | color: $dark-text; |
|
84 | 70 | width: 100%; |
85 | 71 | height: auto; |
86 | 72 | background: $dark-bg; |
87 | | - |
88 | | - // Staggered reveal - only during initial opening animation |
89 | | - // Uses a separate class to avoid re-triggering on accordion toggle |
90 | | - &.js--animating { |
91 | | - .header__link, |
92 | | - .header__dropdown { |
93 | | - opacity: 0; |
94 | | - animation: menuItemReveal 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards; |
95 | | - |
96 | | - // Staggered delays for each menu item |
97 | | - @for $i from 1 through 8 { |
98 | | - &:nth-child(#{$i}) { |
99 | | - animation-delay: #{0.03 + ($i * 0.05)}s; |
100 | | - } |
101 | | - } |
102 | | - } |
103 | | - } |
104 | 73 | } |
105 | 74 |
|
106 | 75 | .header__link { |
107 | 76 | color: $dark-text; |
108 | | - padding: 1rem 0; |
109 | | - border-top: 1px solid rgba($dark-border, 0.6); |
110 | | - font-size: 1.05rem; |
111 | | - letter-spacing: 0.01em; |
112 | | - transition: background-color 0.15s ease; |
113 | | - |
114 | | - // First item has no top border |
115 | | - &:first-child { |
116 | | - border-top: none; |
117 | | - } |
118 | | - |
119 | | - // Subtle active/tap state for mobile |
120 | | - &:active { |
121 | | - background-color: rgba(255, 255, 255, 0.04); |
122 | | - } |
| 77 | + padding: .938rem 0; |
| 78 | + border-top: 1px solid $dark-border; |
123 | 79 |
|
124 | 80 | // Reset button styles when Contact is a button |
125 | 81 | &[type="button"], |
126 | 82 | &:is(button) { |
127 | 83 | background: none; |
128 | 84 | border: none; |
129 | | - border-top: 1px solid rgba($dark-border, 0.6); |
| 85 | + border-top: 1px solid $dark-border; |
130 | 86 | font-family: inherit; |
131 | | - font-size: 1.05rem; |
| 87 | + font-size: inherit; |
132 | 88 | cursor: pointer; |
133 | 89 | display: flex; |
134 | 90 | align-items: center; |
135 | | - width: 100%; |
136 | | - text-align: left; |
137 | 91 | } |
138 | 92 | } |
139 | 93 |
|
140 | | -// Projects Dropdown - Mobile Styles (Collapsible Accordion) |
| 94 | +// Projects Dropdown - Mobile Styles |
141 | 95 | .header__dropdown { |
142 | | - border-top: 1px solid rgba($dark-border, 0.6); |
143 | | - |
144 | | - // Accordion open state |
145 | | - &.is-open { |
146 | | - .header__dropdown-chevron { |
147 | | - transform: rotate(180deg); |
148 | | - } |
149 | | - |
150 | | - .header__dropdown-menu { |
151 | | - max-height: 250px; |
152 | | - opacity: 1; |
153 | | - } |
154 | | - } |
| 96 | + border-top: 1px solid $dark-border; |
155 | 97 | } |
156 | 98 |
|
157 | 99 | .header__dropdown-trigger { |
158 | 100 | display: flex; |
159 | 101 | align-items: center; |
160 | 102 | gap: 0.5rem; |
161 | 103 | cursor: pointer; |
162 | | - padding: 1rem 0; |
163 | | - width: 100%; |
164 | | - font-size: 1.05rem; |
165 | | - letter-spacing: 0.01em; |
166 | | - transition: background-color 0.15s ease; |
167 | | - color: $dark-text; |
168 | | - // Reset button styles |
169 | | - background: none; |
170 | | - border: none; |
171 | | - font-family: inherit; |
172 | | - text-align: left; |
173 | | - |
174 | | - &:active { |
175 | | - background-color: rgba(255, 255, 255, 0.04); |
176 | | - } |
177 | 104 | } |
178 | 105 |
|
179 | 106 | .header__dropdown-chevron { |
180 | | - transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1); |
181 | | - margin-left: auto; |
| 107 | + transition: transform 0.2s ease-in-out; |
182 | 108 | } |
183 | 109 |
|
184 | 110 | .header__dropdown-menu { |
185 | 111 | display: flex; |
186 | 112 | flex-direction: column; |
187 | 113 | padding-left: 1rem; |
188 | | - // Collapsed by default on mobile |
189 | | - max-height: 0; |
190 | | - overflow: hidden; |
191 | | - opacity: 0; |
192 | | - transition: max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), |
193 | | - opacity 0.25s ease; |
194 | 114 | } |
195 | 115 |
|
196 | 116 | .header__dropdown-item { |
197 | 117 | display: flex; |
198 | 118 | align-items: center; |
199 | 119 | justify-content: space-between; |
200 | 120 | color: $dark-text; |
201 | | - padding: 0.85rem 0; |
202 | | - border-top: 1px solid rgba($dark-border, 0.4); |
203 | | - font-size: 0.95rem; |
204 | | - transition: color 0.15s ease, background-color 0.15s ease; |
205 | | - |
206 | | - &:first-child { |
207 | | - border-top: none; |
208 | | - } |
| 121 | + padding: 0.75rem 0; |
| 122 | + border-top: 1px solid $dark-border; |
| 123 | + font-size: 0.9rem; |
209 | 124 |
|
210 | | - &:active { |
211 | | - background-color: rgba(255, 255, 255, 0.04); |
| 125 | + &:hover { |
212 | 126 | color: $link-color; |
213 | 127 | } |
214 | 128 | } |
215 | 129 |
|
216 | 130 | .header__external-icon { |
217 | | - opacity: 0.5; |
| 131 | + opacity: 0.6; |
218 | 132 | flex-shrink: 0; |
219 | 133 | margin-left: 0.5rem; |
220 | | - transition: opacity 0.15s ease; |
221 | | - |
222 | | - .header__dropdown-item:active & { |
223 | | - opacity: 0.8; |
224 | | - } |
225 | | -} |
226 | | - |
227 | | -// Nested dropdown submenu (for About > Timeline) |
228 | | -.header__dropdown-submenu { |
229 | | - display: flex; |
230 | | - flex-direction: column; |
231 | | - border-top: 1px solid rgba($dark-border, 0.4); |
232 | | - padding-top: 0.5rem; |
233 | | - margin-top: 0.25rem; |
234 | | - |
235 | | - &:first-child { |
236 | | - border-top: none; |
237 | | - padding-top: 0; |
238 | | - margin-top: 0; |
239 | | - } |
240 | | -} |
241 | | - |
242 | | -.header__dropdown-label { |
243 | | - color: rgba($dark-text, 0.5); |
244 | | - font-size: 0.75rem; |
245 | | - font-weight: 600; |
246 | | - text-transform: uppercase; |
247 | | - letter-spacing: 0.08em; |
248 | | - padding: 0.5rem 0; |
249 | | -} |
250 | | - |
251 | | -.header__dropdown-item--nested { |
252 | | - padding-left: 0.75rem; |
253 | | - font-size: 0.9rem; |
254 | 134 | } |
255 | 135 |
|
256 | 136 | .header__toggle { |
|
303 | 183 | width: 0; |
304 | 184 | height: 0; |
305 | 185 | opacity: 0; |
306 | | - background-color: rgba(0, 0, 0, 0.55); |
307 | | - backdrop-filter: blur(6px); |
308 | | - -webkit-backdrop-filter: blur(6px); |
| 186 | + background-color: rgba(0, 0 , 0, .75); |
309 | 187 | z-index: 2; |
310 | | - transition: opacity 0.4s ease; |
| 188 | + transition: opacity 1s ease 0.1s; |
311 | 189 |
|
312 | 190 | &.--open { |
313 | 191 | width: 100%; |
314 | | - height: 100%; |
| 192 | + height: 120%; |
315 | 193 | opacity: 1; |
316 | 194 | } |
317 | 195 | } |
|
429 | 307 | } |
430 | 308 |
|
431 | 309 | .header__dropdown-menu { |
432 | | - // Reset mobile accordion styles for desktop |
433 | | - max-height: none; |
434 | | - overflow: visible; |
435 | 310 | position: absolute; |
436 | 311 | top: 100%; |
437 | 312 | left: 0; |
|
459 | 334 | } |
460 | 335 | } |
461 | 336 |
|
462 | | - // Desktop nested submenu styles |
463 | | - .header__dropdown-submenu { |
464 | | - border-top: 1px solid rgba($dark-border, 0.3); |
465 | | - margin: 0.25rem 0; |
466 | | - padding: 0.25rem 0; |
467 | | - |
468 | | - &:first-child { |
469 | | - border-top: none; |
470 | | - margin-top: 0; |
471 | | - padding-top: 0; |
472 | | - } |
473 | | - } |
474 | | - |
475 | | - .header__dropdown-label { |
476 | | - padding: 0.5rem 1rem 0.25rem; |
477 | | - } |
478 | | - |
479 | | - .header__dropdown-item--nested { |
480 | | - padding-left: 1.5rem; |
481 | | - font-size: 0.875rem; |
482 | | - } |
483 | 337 | } |
484 | 338 |
|
485 | 339 | // Keyboard shortcut badges in nav |
|
0 commit comments