@designcrowd/library.brand-page 6.2.0 → 6.2.1
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.
- package/lib/src/{CreatedOnBrandCrowd-de-de-VQCQvlMg.js → CreatedOnBrandCrowd-de-de-CtvPtYF6.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DSf3BjCG.js → CreatedOnBrandCrowd-en-us-eGF-EjAX.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DGcdM9Ec.js → CreatedOnBrandCrowd-es-es-CSemsOtT.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-C9g1fc39.js → CreatedOnBrandCrowd-fr-ca-DzylX-AT.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-C9g1fc39.js → CreatedOnBrandCrowd-fr-fr-DzylX-AT.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-DSXr7Bxl.js → CreatedOnBrandCrowd-pt-br-QMUxXQsE.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-DSXr7Bxl.js → CreatedOnBrandCrowd-pt-pt-QMUxXQsE.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-BPdCL6wS.js → CreatedOnDcom-de-de-M7OoJt-1.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-CLkSTQRu.js → CreatedOnDcom-en-us-D7hMM0AI.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-CRknMAGv.js → CreatedOnDcom-es-es-CLw-BLp2.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-ClAY_dHI.js → CreatedOnDcom-fr-ca-BRu_kmeu.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-DQtv9rR-.js → CreatedOnDcom-fr-fr-IMnEv_yM.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-BbIxvmxv.js → CreatedOnDcom-pt-br-Bt6v1p27.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-BOfOesBj.js → CreatedOnDcom-pt-pt-BVsFJIJg.js} +1 -1
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +16 -2
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +17 -0
- package/lib/src/brand-page/components/page/Page.mixin.d.ts +2 -1
- package/lib/src/brand-page/components/page/Page.mixin.js +12 -7
- package/lib/src/brand-page/components/page-header/HeaderLayout.stories.d.ts +1 -0
- package/lib/src/brand-page/components/page-header/HeaderLayout.stories.js +9 -0
- package/lib/src/brand-page/components/page-header/PageHeader.mixin.d.ts +3 -1
- package/lib/src/brand-page/components/page-header/PageHeader.mixin.js +10 -4
- package/lib/src/brand-page/constants/sections/header-display.constants.d.ts +3 -0
- package/lib/src/brand-page/constants/sections/header-display.constants.js +15 -0
- package/lib/src/brand-page/models/index.d.ts +12 -0
- package/lib/src/brand-page/models/index.js +4 -0
- package/lib/src/brand-page/utils/context.util.d.ts +1 -0
- package/lib/src/brand-page/utils/context.util.js +9 -0
- package/lib/src/brand-page/utils/route.util.d.ts +1 -0
- package/lib/src/brand-page/utils/route.util.js +9 -0
- package/lib/src/brand-page/utils/view-model.util.js +53 -1
- package/lib/src/brand-page/view-models.d.ts +3 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +2 -1
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +2 -1
- package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +1626 -0
- package/lib/src/brand-page-maker/validators/section-button.validator.d.ts +5 -2
- package/lib/src/brand-page-maker/validators/section-button.validator.js +11 -15
- package/lib/src/{bundled-translations-B2q5GWTQ.js → bundled-translations-KY0aSmMp.js} +9 -9
- package/lib/src/{bundled-translations.de-DE-FhH2H_rd.js → bundled-translations.de-DE-BIFi4bYj.js} +9 -9
- package/lib/src/{bundled-translations.es-ES-_ZExxMi7.js → bundled-translations.es-ES-CHlKuPLO.js} +5 -5
- package/lib/src/{bundled-translations.fr-CA-Tg-ODIiC.js → bundled-translations.fr-CA-DR1fvm8e.js} +1 -1
- package/lib/src/{bundled-translations.fr-FR-C0sU51Mz.js → bundled-translations.fr-FR-DnpWVIQg.js} +9 -9
- package/lib/src/{bundled-translations.pt-BR-MYFIhA4u.js → bundled-translations.pt-BR-p8szTOiT.js} +17 -17
- package/lib/src/{bundled-translations.pt-PT-DeUBSzCB.js → bundled-translations.pt-PT-DEk39NhW.js} +22 -22
- package/lib/src/bundles/bundled-translations.de-DE.json +6 -1
- package/lib/src/bundles/bundled-translations.es-ES.json +6 -1
- package/lib/src/bundles/bundled-translations.fr-CA.json +6 -1
- package/lib/src/bundles/bundled-translations.fr-FR.json +6 -1
- package/lib/src/bundles/bundled-translations.json +6 -1
- package/lib/src/bundles/bundled-translations.pt-BR.json +6 -1
- package/lib/src/bundles/bundled-translations.pt-PT.json +6 -1
- package/lib/src/css/library.brand-page-brandCrowd.min.css +573 -135
- package/lib/src/css/library.brand-page-brandPage.min.css +573 -135
- package/lib/src/css/library.brand-page-designCom.min.css +573 -135
- package/lib/src/css/library.brand-page-preview.min.css +573 -135
- package/lib/src/index.mjs +1 -1
- package/lib/src/{lib-BMVF4uNy.js → lib-B38VVCSw.js} +20304 -19843
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +2 -1
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +14 -2
- package/lib/src/shared/content-settings/components/text-field/TextField.mixin.js +14 -0
- package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +1 -1
- package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +1 -0
- package/lib/src/shared/page-navigation/store/page-navigation-store.js +12 -0
- package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
- package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +2 -1
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +190 -1
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +184 -2
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +34 -2
- package/lib/src/shared/page-settings/store/page-settings-store.d.ts +2 -2
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +3 -0
- package/package.json +2 -2
- package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.vue +1 -0
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +18 -1
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue +73 -3
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue.test.ts +181 -0
- package/src/brand-page/components/page/Page.mixin.ts +21 -11
- package/src/brand-page/components/page/Page.vue +2 -0
- package/src/brand-page/components/page-header/HeaderLayout.stories.ts +10 -0
- package/src/brand-page/components/page-header/HeaderLayout.vue +415 -71
- package/src/brand-page/components/page-header/PageHeader.mixin.ts +14 -10
- package/src/brand-page/components/page-header/PageHeader.vue +16 -1
- package/src/brand-page/components/page-header/PageHeader.vue.test.ts +339 -0
- package/src/brand-page/constants/sections/header-display.constants.test.ts +44 -0
- package/src/brand-page/constants/sections/header-display.constants.ts +35 -0
- package/src/brand-page/models/header-button.model.test.ts +85 -0
- package/src/brand-page/models/index.ts +19 -0
- package/src/brand-page/utils/context.util.ts +15 -0
- package/src/brand-page/utils/route.util.ts +13 -0
- package/src/brand-page/utils/view-model.util.test.ts +151 -1
- package/src/brand-page/utils/view-model.util.ts +73 -1
- package/src/brand-page/view-models.ts +3 -0
- package/src/brand-page-maker/validators/section-button.validator.ts +23 -19
- package/src/bundles/bundled-translations.de-DE.json +6 -1
- package/src/bundles/bundled-translations.es-ES.json +6 -1
- package/src/bundles/bundled-translations.fr-CA.json +6 -1
- package/src/bundles/bundled-translations.fr-FR.json +6 -1
- package/src/bundles/bundled-translations.json +6 -1
- package/src/bundles/bundled-translations.pt-BR.json +6 -1
- package/src/bundles/bundled-translations.pt-PT.json +6 -1
- package/src/shared/content-settings/components/text-field/TextField.mixin.ts +15 -0
- package/src/shared/content-settings/components/url-field/UrlField.vue +1 -0
- package/src/shared/page-navigation/store/page-navigation-store.ts +16 -0
- package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.button-section.test.ts +131 -0
- package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.vue +65 -10
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.test.ts +305 -0
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.vue +265 -0
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.test.ts +354 -0
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +48 -9
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.header-button.test.ts +114 -0
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +38 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.de-DE.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.es-ES.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.fr-CA.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.fr-FR.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.pt-BR.json +6 -1
- package/src/shared/page-settings/components/page-settings-section-styles/i18n/page-settings-section.pt-PT.json +6 -1
- package/src/shared/page-settings/store/page-settings-store.ts +2 -0
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<header
|
|
3
3
|
data-component="header-layout"
|
|
4
|
-
:class="[
|
|
4
|
+
:class="[
|
|
5
|
+
'root',
|
|
6
|
+
'tw-items-center',
|
|
7
|
+
displayStyle,
|
|
8
|
+
showNav ? 'show-nav' : 'no-nav',
|
|
9
|
+
{ 'has-header-cta': showCta },
|
|
10
|
+
]"
|
|
5
11
|
>
|
|
6
12
|
<div class="logo-container">
|
|
7
13
|
<slot name="logo" />
|
|
@@ -11,23 +17,66 @@
|
|
|
11
17
|
<slot name="nav" />
|
|
12
18
|
</div>
|
|
13
19
|
</div>
|
|
20
|
+
<div v-if="showCta" data-test-header-layout-cta class="cta-container">
|
|
21
|
+
<slot name="cta" />
|
|
22
|
+
</div>
|
|
23
|
+
<!-- Invisible size-peer of the CTA: sits in the mirror track of the four centred-logo grids
|
|
24
|
+
so the logo stays centred from the first paint (SSR included) with no measurement and no
|
|
25
|
+
layout shift. Rendered after the real CTA so first-match test locators resolve to the
|
|
26
|
+
visible one. -->
|
|
27
|
+
<div v-if="showCtaMirror" aria-hidden="true" class="cta-mirror">
|
|
28
|
+
<slot name="cta" />
|
|
29
|
+
</div>
|
|
14
30
|
</header>
|
|
15
31
|
</template>
|
|
16
32
|
<script setup lang="ts">
|
|
17
|
-
import { withDefaults } from 'vue';
|
|
18
|
-
import
|
|
33
|
+
import { computed, withDefaults } from 'vue';
|
|
34
|
+
import {
|
|
35
|
+
HEADER_DISPLAY,
|
|
36
|
+
headerRowRendersCta,
|
|
37
|
+
type HeaderDisplayStyle,
|
|
38
|
+
} from '../../constants';
|
|
19
39
|
|
|
20
|
-
withDefaults(
|
|
40
|
+
const props = withDefaults(
|
|
21
41
|
defineProps<{
|
|
22
42
|
navId: string;
|
|
23
43
|
showNav?: boolean;
|
|
24
44
|
displayStyle: HeaderDisplayStyle;
|
|
25
45
|
logoWidth: string | number;
|
|
46
|
+
hasCta?: boolean;
|
|
26
47
|
}>(),
|
|
27
48
|
{
|
|
28
49
|
showNav: true,
|
|
50
|
+
hasCta: false,
|
|
29
51
|
},
|
|
30
52
|
);
|
|
53
|
+
|
|
54
|
+
const showCta = computed(
|
|
55
|
+
(): boolean =>
|
|
56
|
+
props.hasCta && headerRowRendersCta(props.displayStyle, props.showNav),
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
// The centered-logo grids keep the logo centred by carrying a leading "mirror" track the same
|
|
60
|
+
// width as the trailing button. A hidden copy of the button (see template) sizes that track, so
|
|
61
|
+
// the layout is right on the first paint — no measurement, no shift. Only these four styles need
|
|
62
|
+
// it: TAB_6 / TAB_NO_LOGO_2 pin the button absolutely when their nav is hidden (no mirror then),
|
|
63
|
+
// while TAB_4 and HAMBURGER_2 mirror in both nav states.
|
|
64
|
+
const showCtaMirror = computed((): boolean => {
|
|
65
|
+
if (!showCta.value) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
switch (props.displayStyle) {
|
|
70
|
+
case HEADER_DISPLAY.DESKTOP_TAB_4:
|
|
71
|
+
case HEADER_DISPLAY.DESKTOP_HAMBURGER_2:
|
|
72
|
+
return true;
|
|
73
|
+
case HEADER_DISPLAY.DESKTOP_TAB_6:
|
|
74
|
+
case HEADER_DISPLAY.DESKTOP_TAB_NO_LOGO_2:
|
|
75
|
+
return props.showNav;
|
|
76
|
+
default:
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
31
80
|
</script>
|
|
32
81
|
<style scoped>
|
|
33
82
|
.root {
|
|
@@ -37,28 +86,28 @@ withDefaults(
|
|
|
37
86
|
--hamburger-nav-height: 32px;
|
|
38
87
|
--hamburger-nav-width: 32px;
|
|
39
88
|
}
|
|
40
|
-
|
|
41
|
-
align-items: center;
|
|
42
|
-
}
|
|
89
|
+
|
|
43
90
|
.nav-container {
|
|
44
|
-
@apply tw-max-w-full;
|
|
45
|
-
overflow: hidden;
|
|
91
|
+
@apply tw-max-w-full tw-overflow-hidden;
|
|
46
92
|
}
|
|
47
93
|
.logo-container {
|
|
48
94
|
}
|
|
95
|
+
/* The rules below position this box; the button just fills whatever box it gets.
|
|
96
|
+
Never shrinks below its label: in the flex placements a wide nav compresses into its
|
|
97
|
+
carousel instead of wrapping the button's text (the grid placements floor it likewise). */
|
|
98
|
+
.cta-container {
|
|
99
|
+
@apply tw-min-w-0 tw-shrink-0;
|
|
100
|
+
}
|
|
49
101
|
|
|
50
102
|
/* DESKTOP_TAB_1 */
|
|
51
103
|
.desktop-tab-horizontal-stack-left-logo-right-menu {
|
|
52
104
|
@apply tw-flex;
|
|
53
105
|
}
|
|
54
106
|
.desktop-tab-horizontal-stack-left-logo-right-menu .nav-container {
|
|
55
|
-
flex
|
|
56
|
-
margin-left: 1rem;
|
|
107
|
+
@apply tw-flex-1 tw-ml-4;
|
|
57
108
|
}
|
|
58
109
|
.desktop-tab-horizontal-stack-left-logo-right-menu .nav-container__inner {
|
|
59
|
-
|
|
60
|
-
float: right;
|
|
61
|
-
max-width: 100%;
|
|
110
|
+
@apply tw-inline-block tw-float-right tw-max-w-full;
|
|
62
111
|
}
|
|
63
112
|
|
|
64
113
|
/* DESKTOP_TAB_2 */
|
|
@@ -66,12 +115,10 @@ withDefaults(
|
|
|
66
115
|
@apply tw-flex;
|
|
67
116
|
}
|
|
68
117
|
.desktop-tab-horizontal-stack-left-logo-left-menu .nav-container {
|
|
69
|
-
flex
|
|
70
|
-
margin-left: 1rem;
|
|
118
|
+
@apply tw-flex-1 tw-ml-4;
|
|
71
119
|
}
|
|
72
120
|
.desktop-tab-horizontal-stack-left-logo-left-menu .nav-container__inner {
|
|
73
|
-
|
|
74
|
-
max-width: 100%;
|
|
121
|
+
@apply tw-inline-block tw-max-w-full;
|
|
75
122
|
}
|
|
76
123
|
|
|
77
124
|
/* DESKTOP_TAB_3 */
|
|
@@ -82,30 +129,25 @@ withDefaults(
|
|
|
82
129
|
--logo-max-width
|
|
83
130
|
)
|
|
84
131
|
[cols-end];
|
|
85
|
-
@apply tw-gap-x-4;
|
|
86
|
-
margin-top: 1rem;
|
|
87
|
-
margin-bottom: 1rem;
|
|
132
|
+
@apply tw-gap-x-4 tw-mt-4 tw-mb-4;
|
|
88
133
|
}
|
|
89
134
|
.desktop-tab-horizontal-stack-left-logo-centered-menu .logo-container {
|
|
90
135
|
grid-column: logo-start / logo-end;
|
|
91
|
-
justify-self
|
|
136
|
+
@apply tw-justify-self-start;
|
|
92
137
|
}
|
|
93
138
|
.desktop-tab-horizontal-stack-left-logo-centered-menu .nav-container {
|
|
94
139
|
grid-column: nav-start / nav-end;
|
|
95
140
|
}
|
|
96
141
|
.desktop-tab-horizontal-stack-left-logo-centered-menu .nav-container__inner {
|
|
97
142
|
/* start - center content */
|
|
98
|
-
|
|
143
|
+
@apply tw-inline-block;
|
|
99
144
|
transform: translateX(-50%);
|
|
100
|
-
left
|
|
101
|
-
position: relative;
|
|
102
|
-
max-width: 100%;
|
|
145
|
+
@apply tw-left-1/2 tw-relative tw-max-w-full;
|
|
103
146
|
/* end - center content */
|
|
104
147
|
}
|
|
105
148
|
/* DESKTOP_TAB_4 */
|
|
106
149
|
.desktop-tab-horizontal-stack-centered-logo-right-menu {
|
|
107
|
-
@apply tw-grid;
|
|
108
|
-
@apply tw-gap-x-4;
|
|
150
|
+
@apply tw-grid tw-gap-x-4;
|
|
109
151
|
grid-template-columns:
|
|
110
152
|
[col-start] 1fr [logo-start] var(--logo-max-width)
|
|
111
153
|
[logo-end nav-start] 1fr [nav-end];
|
|
@@ -118,18 +160,15 @@ withDefaults(
|
|
|
118
160
|
}
|
|
119
161
|
.desktop-tab-horizontal-stack-centered-logo-right-menu .nav-container__inner {
|
|
120
162
|
/* start - align right content */
|
|
121
|
-
float
|
|
122
|
-
max-width: 100%;
|
|
163
|
+
@apply tw-float-right tw-max-w-full;
|
|
123
164
|
/* end - align right content */
|
|
124
165
|
}
|
|
125
166
|
/* DESKTOP_TAB_5 */
|
|
126
167
|
.desktop-tab-vertical-stack-centered-logo-centered-menu {
|
|
127
|
-
|
|
128
|
-
justify-items: center;
|
|
168
|
+
@apply tw-items-center tw-justify-items-center;
|
|
129
169
|
}
|
|
130
170
|
.desktop-tab-vertical-stack-centered-logo-centered-menu.show-nav {
|
|
131
|
-
@apply tw-grid tw-grid-rows-2;
|
|
132
|
-
@apply tw-gap-y-4;
|
|
171
|
+
@apply tw-grid tw-grid-rows-2 tw-gap-y-4;
|
|
133
172
|
grid-template-rows:
|
|
134
173
|
[row1-start] 1fr [row1-end row2-start] var(--tab-nav-height)
|
|
135
174
|
[row2-end];
|
|
@@ -141,31 +180,25 @@ withDefaults(
|
|
|
141
180
|
.desktop-tab-vertical-stack-centered-logo-centered-menu.show-nav
|
|
142
181
|
.nav-container {
|
|
143
182
|
grid-row: row2-start / row2-end;
|
|
144
|
-
|
|
183
|
+
@apply tw-w-full;
|
|
145
184
|
}
|
|
146
185
|
.desktop-tab-vertical-stack-centered-logo-centered-menu.show-nav
|
|
147
186
|
.nav-container__inner {
|
|
148
|
-
|
|
187
|
+
@apply tw-inline-block;
|
|
149
188
|
transform: translateX(-50%);
|
|
150
|
-
left
|
|
151
|
-
position: relative;
|
|
152
|
-
max-width: 100%;
|
|
189
|
+
@apply tw-left-1/2 tw-relative tw-max-w-full;
|
|
153
190
|
}
|
|
154
191
|
|
|
155
192
|
.desktop-tab-vertical-stack-centered-logo-centered-menu.no-nav {
|
|
156
|
-
@apply tw-flex;
|
|
157
|
-
justify-content: center;
|
|
193
|
+
@apply tw-flex tw-justify-center;
|
|
158
194
|
}
|
|
159
195
|
|
|
160
196
|
/* MOBILE_TAB_1 */
|
|
161
197
|
.mobile-tab-vertical-stack-centered-logo-centered-menu {
|
|
162
|
-
|
|
163
|
-
justify-items: center;
|
|
164
|
-
width: 100%;
|
|
198
|
+
@apply tw-items-center tw-justify-items-center tw-w-full;
|
|
165
199
|
}
|
|
166
200
|
.mobile-tab-vertical-stack-centered-logo-centered-menu.show-nav {
|
|
167
|
-
@apply tw-grid;
|
|
168
|
-
@apply tw-gap-y-4;
|
|
201
|
+
@apply tw-grid tw-gap-y-4;
|
|
169
202
|
grid-template-rows:
|
|
170
203
|
[row1-start] 1fr [row1-end row2-start] var(--tab-nav-height)
|
|
171
204
|
[row2-end];
|
|
@@ -176,7 +209,7 @@ withDefaults(
|
|
|
176
209
|
}
|
|
177
210
|
.mobile-tab-vertical-stack-centered-logo-centered-menu.show-nav .nav-container {
|
|
178
211
|
grid-row: row2-start / row2-end;
|
|
179
|
-
|
|
212
|
+
@apply tw-w-full;
|
|
180
213
|
}
|
|
181
214
|
|
|
182
215
|
.mobile-tab-vertical-stack-centered-logo-centered-menu.no-nav {
|
|
@@ -189,35 +222,30 @@ withDefaults(
|
|
|
189
222
|
grid-template-rows:
|
|
190
223
|
[row1-start] var(--tab-nav-height)
|
|
191
224
|
[row1-end row2-start] 1fr [row2-end];
|
|
192
|
-
@apply tw-gap-y-4;
|
|
193
|
-
justify-content: center;
|
|
194
|
-
justify-items: center;
|
|
225
|
+
@apply tw-gap-y-4 tw-justify-center tw-justify-items-center;
|
|
195
226
|
}
|
|
196
227
|
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav
|
|
197
228
|
.logo-container {
|
|
198
229
|
grid-row: row2-start / row2-end;
|
|
199
|
-
text-
|
|
230
|
+
@apply tw-text-center;
|
|
200
231
|
}
|
|
201
232
|
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav
|
|
202
233
|
.nav-container {
|
|
203
234
|
grid-row: row1-start / row1-end;
|
|
204
235
|
}
|
|
205
|
-
.
|
|
206
|
-
@apply tw-flex;
|
|
236
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.no-nav {
|
|
237
|
+
@apply tw-flex tw-justify-center;
|
|
207
238
|
}
|
|
208
239
|
/* MOBILE_TAB_2 */
|
|
209
240
|
.mobile-tab-vertical-stack-centered-menu-centered-logo {
|
|
210
|
-
|
|
211
|
-
justify-items: center;
|
|
212
|
-
width: 100%;
|
|
241
|
+
@apply tw-items-center tw-justify-items-center tw-w-full;
|
|
213
242
|
}
|
|
214
243
|
.mobile-tab-vertical-stack-centered-menu-centered-logo.show-nav {
|
|
215
244
|
@apply tw-grid;
|
|
216
245
|
grid-template-rows:
|
|
217
246
|
[row1-start] var(--tab-nav-height)
|
|
218
247
|
[row1-end row2-start] 1fr [row2-end];
|
|
219
|
-
@apply tw-gap-y-4;
|
|
220
|
-
margin-top: 1rem;
|
|
248
|
+
@apply tw-gap-y-4 tw-mt-4;
|
|
221
249
|
}
|
|
222
250
|
.mobile-tab-vertical-stack-centered-menu-centered-logo.show-nav
|
|
223
251
|
.logo-container {
|
|
@@ -225,7 +253,7 @@ withDefaults(
|
|
|
225
253
|
}
|
|
226
254
|
.mobile-tab-vertical-stack-centered-menu-centered-logo.show-nav .nav-container {
|
|
227
255
|
grid-row: row1-start / row1-end;
|
|
228
|
-
|
|
256
|
+
@apply tw-w-full;
|
|
229
257
|
}
|
|
230
258
|
.mobile-tab-vertical-stack-centered-menu-centered-logo.no-nav {
|
|
231
259
|
@apply tw-flex;
|
|
@@ -234,8 +262,7 @@ withDefaults(
|
|
|
234
262
|
/* DESKTOP_TAB_NO_LOGO_1, DESKTOP_HAMBURGER_NO_LOGO_1 */
|
|
235
263
|
.desktop-tab-left-menu-no-logo,
|
|
236
264
|
.desktop-hamburger-no-logo-left-menu {
|
|
237
|
-
@apply tw-flex;
|
|
238
|
-
justify-content: flex-start;
|
|
265
|
+
@apply tw-flex tw-justify-start;
|
|
239
266
|
}
|
|
240
267
|
.desktop-tab-left-menu-no-logo .logo-container,
|
|
241
268
|
.desktop-hamburger-no-logo-left-menu .logo-container {
|
|
@@ -271,7 +298,7 @@ withDefaults(
|
|
|
271
298
|
grid-template-columns: [logo-start] auto [nav-start] var(
|
|
272
299
|
--hamburger-nav-width
|
|
273
300
|
);
|
|
274
|
-
|
|
301
|
+
@apply tw-items-start;
|
|
275
302
|
}
|
|
276
303
|
.desktop-hamburger-horizontal-stack-left-logo-right-menu .logo-container,
|
|
277
304
|
.mobile-hamburger-horizontal-stack-left-logo-right-menu .logo-container {
|
|
@@ -281,7 +308,8 @@ withDefaults(
|
|
|
281
308
|
.desktop-hamburger-horizontal-stack-left-logo-right-menu .nav-container,
|
|
282
309
|
.mobile-hamburger-horizontal-stack-left-logo-right-menu .nav-container {
|
|
283
310
|
grid-column: nav-start;
|
|
284
|
-
|
|
311
|
+
/* The icon centres on the row's height (the logo is usually the tallest thing in it). */
|
|
312
|
+
@apply tw-self-center;
|
|
285
313
|
}
|
|
286
314
|
|
|
287
315
|
/* DESKTOP_HAMBURGER_2, MOBILE_HAMBURGER_2 */
|
|
@@ -291,7 +319,7 @@ withDefaults(
|
|
|
291
319
|
grid-template-columns:
|
|
292
320
|
[start] var(--hamburger-nav-width)
|
|
293
321
|
[logo-start] auto [nav-start] var(--hamburger-nav-width);
|
|
294
|
-
|
|
322
|
+
@apply tw-items-start;
|
|
295
323
|
}
|
|
296
324
|
.desktop-hamburger-horizontal-stack-centered-logo-right-menu .logo-container,
|
|
297
325
|
.mobile-hamburger-horizontal-stack-centered-logo-right-menu .logo-container {
|
|
@@ -301,7 +329,7 @@ withDefaults(
|
|
|
301
329
|
.desktop-hamburger-horizontal-stack-centered-logo-right-menu .nav-container,
|
|
302
330
|
.mobile-hamburger-horizontal-stack-centered-logo-right-menu .nav-container {
|
|
303
331
|
grid-column: nav-start;
|
|
304
|
-
|
|
332
|
+
@apply tw-self-center;
|
|
305
333
|
}
|
|
306
334
|
|
|
307
335
|
/* MOBILE_HAMBURGER_3 */
|
|
@@ -311,7 +339,7 @@ withDefaults(
|
|
|
311
339
|
--hamburger-nav-width
|
|
312
340
|
);
|
|
313
341
|
grid-template-areas: 'a b c';
|
|
314
|
-
|
|
342
|
+
@apply tw-items-start;
|
|
315
343
|
}
|
|
316
344
|
.mobile-hamburger-horizontal-stack-left-menu-centered-logo .logo-container {
|
|
317
345
|
@apply tw-mx-4 tw-flex tw-justify-center;
|
|
@@ -319,12 +347,12 @@ withDefaults(
|
|
|
319
347
|
}
|
|
320
348
|
.mobile-hamburger-horizontal-stack-left-menu-centered-logo .nav-container {
|
|
321
349
|
grid-area: a;
|
|
322
|
-
|
|
350
|
+
@apply tw-self-center;
|
|
323
351
|
}
|
|
324
352
|
.mobile-hamburger-horizontal-stack-left-menu-centered-logo
|
|
325
353
|
.nav-container__inner {
|
|
326
354
|
float: left;
|
|
327
|
-
max-
|
|
355
|
+
@apply tw-max-w-full;
|
|
328
356
|
}
|
|
329
357
|
|
|
330
358
|
/* MOBILE_HAMBURGER_4 */
|
|
@@ -332,7 +360,7 @@ withDefaults(
|
|
|
332
360
|
@apply tw-grid;
|
|
333
361
|
grid-template-columns: var(--hamburger-nav-width) auto;
|
|
334
362
|
grid-template-areas: 'a b';
|
|
335
|
-
|
|
363
|
+
@apply tw-items-start;
|
|
336
364
|
}
|
|
337
365
|
.mobile-hamburger-horizontal-stack-left-menu-left-logo .logo-container {
|
|
338
366
|
@apply tw-ml-4 tw-flex tw-justify-start;
|
|
@@ -340,11 +368,11 @@ withDefaults(
|
|
|
340
368
|
}
|
|
341
369
|
.mobile-hamburger-horizontal-stack-left-menu-left-logo .nav-container {
|
|
342
370
|
grid-area: a;
|
|
343
|
-
|
|
371
|
+
@apply tw-self-center;
|
|
344
372
|
}
|
|
345
373
|
.mobile-hamburger-horizontal-stack-left-menu-left-logo .nav-container__inner {
|
|
346
374
|
float: left;
|
|
347
|
-
max-
|
|
375
|
+
@apply tw-max-w-full;
|
|
348
376
|
}
|
|
349
377
|
|
|
350
378
|
/* MOBILE_HAMBURGER_NO_LOGO_1 */
|
|
@@ -369,6 +397,322 @@ withDefaults(
|
|
|
369
397
|
.mobile-hamburger-no-logo-right-menu .logo-container {
|
|
370
398
|
@apply tw-hidden;
|
|
371
399
|
}
|
|
400
|
+
|
|
401
|
+
/* Button placement — all rules only apply while the button is on (.has-header-cta), so headers without it look exactly as before. */
|
|
402
|
+
|
|
403
|
+
/* The generic Button ships section spacing; the header row, as the caller, strips it here:
|
|
404
|
+
no stack margin, no maker height floor, no icon spacer/label offset (icon room it never uses). */
|
|
405
|
+
.cta-container :deep(.bp-button),
|
|
406
|
+
.cta-mirror :deep(.bp-button) {
|
|
407
|
+
margin-bottom: 0;
|
|
408
|
+
min-height: 0;
|
|
409
|
+
}
|
|
410
|
+
.cta-container :deep(.c-button__no-icon),
|
|
411
|
+
.cta-mirror :deep(.c-button__no-icon) {
|
|
412
|
+
display: none;
|
|
413
|
+
}
|
|
414
|
+
/* Target the base label class, not a specific --offset-* variant, so the icon-gutter shift is
|
|
415
|
+
neutralised for whichever offset the button carries — a future offset swap can't slide the label. */
|
|
416
|
+
.cta-container :deep(.c-button__label),
|
|
417
|
+
.cta-mirror :deep(.c-button__label) {
|
|
418
|
+
transform: none;
|
|
419
|
+
}
|
|
420
|
+
/* Decorative styles (arrow/brush/paper) size by percentage, which collapses to zero inside the
|
|
421
|
+
header's content-sized tracks — hug the label instead. Full-width rows re-stretch below. */
|
|
422
|
+
.cta-container :deep(.bp-style-wrapper),
|
|
423
|
+
.cta-mirror :deep(.bp-style-wrapper) {
|
|
424
|
+
width: fit-content;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/* Invisible size-peer of the CTA (see template). Sized exactly like .cta-container — same
|
|
428
|
+
button-normalising :deep rules above, same max-width cap — so the leading mirror track it
|
|
429
|
+
occupies matches the trailing button track. Per-style placement is defined below. */
|
|
430
|
+
.cta-mirror {
|
|
431
|
+
visibility: hidden;
|
|
432
|
+
pointer-events: none;
|
|
433
|
+
@apply tw-min-w-0 tw-shrink-0;
|
|
434
|
+
max-width: var(--logo-max-width);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/* DESKTOP_TAB_1/2, TAB_NO_LOGO_3: extra flex child one gap after the nav — beside the links, or at the right edge when the nav is right-aligned. */
|
|
438
|
+
.desktop-tab-horizontal-stack-left-logo-right-menu .cta-container,
|
|
439
|
+
.desktop-tab-horizontal-stack-left-logo-left-menu .cta-container,
|
|
440
|
+
.desktop-tab-right-menu-no-logo .cta-container {
|
|
441
|
+
@apply tw-ml-4;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/* TAB_NO_LOGO_1: the nav sits left, so the button pins to the right edge — the same spot
|
|
445
|
+
whether the nav is shown or not (BP-6120). */
|
|
446
|
+
.desktop-tab-left-menu-no-logo .cta-container {
|
|
447
|
+
@apply tw-ml-auto;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/* Same styles with the nav hidden (single page): no nav to sit beside — button takes the right edge. */
|
|
451
|
+
.desktop-tab-horizontal-stack-left-logo-right-menu.no-nav .cta-container,
|
|
452
|
+
.desktop-tab-horizontal-stack-left-logo-left-menu.no-nav .cta-container {
|
|
453
|
+
@apply tw-ml-auto;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/* DESKTOP_TAB_3: button uses the existing spare right column, nothing else moves. */
|
|
457
|
+
.desktop-tab-horizontal-stack-left-logo-centered-menu .cta-container {
|
|
458
|
+
grid-column: nav-end / cols-end;
|
|
459
|
+
justify-self: end;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/* DESKTOP_TAB_4: adds a column for the button after the nav links, mirrored by a leading
|
|
463
|
+
track sized by the hidden button copy so the logo keeps the header's true centre. */
|
|
464
|
+
.desktop-tab-horizontal-stack-centered-logo-right-menu.has-header-cta {
|
|
465
|
+
grid-template-columns:
|
|
466
|
+
[mirror-start] minmax(max-content, auto) [col-start] 1fr
|
|
467
|
+
[logo-start] var(--logo-max-width)
|
|
468
|
+
/* The button's track never shrinks below its label, so a wide nav compresses instead. */
|
|
469
|
+
[logo-end nav-start] 1fr [nav-end cta-start] minmax(max-content, auto)
|
|
470
|
+
[cta-end];
|
|
471
|
+
}
|
|
472
|
+
.desktop-tab-horizontal-stack-centered-logo-right-menu .cta-container {
|
|
473
|
+
grid-column: cta-start / cta-end;
|
|
474
|
+
}
|
|
475
|
+
.desktop-tab-horizontal-stack-centered-logo-right-menu .cta-mirror {
|
|
476
|
+
grid-column: mirror-start / col-start;
|
|
477
|
+
/* Pinned to row 1: the mirror follows the real CTA in the DOM, so auto-placement — whose
|
|
478
|
+
cursor never moves backwards along a row — would drop it onto a second row and grow the
|
|
479
|
+
header band by the button's height. */
|
|
480
|
+
grid-row: 1;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/* DESKTOP_TAB_6, TAB_NO_LOGO_2: nav and button share the top row, so the button takes a
|
|
484
|
+
trailing column mirrored by the leading one — the nav pays for the collision it would
|
|
485
|
+
otherwise have. */
|
|
486
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav.has-header-cta,
|
|
487
|
+
.desktop-tab-centered-menu-no-logo.show-nav.has-header-cta {
|
|
488
|
+
@apply tw-grid;
|
|
489
|
+
/* The trailing track never shrinks below the button, so a wide nav compresses (its carousel
|
|
490
|
+
scrolls) rather than running under it; the leading track floors at the hidden button copy
|
|
491
|
+
so nav and logo hold the header's true centre even at full compression. */
|
|
492
|
+
grid-template-columns:
|
|
493
|
+
minmax(max-content, 1fr) [nav-start] auto
|
|
494
|
+
[nav-end cta-start] minmax(max-content, 1fr) [cta-end];
|
|
495
|
+
}
|
|
496
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav.has-header-cta
|
|
497
|
+
.nav-container,
|
|
498
|
+
.desktop-tab-centered-menu-no-logo.show-nav.has-header-cta .nav-container {
|
|
499
|
+
grid-column: nav-start / nav-end;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/* The logo shares the nav's track: that track widens to whichever is bigger, so both stay centered. */
|
|
503
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav.has-header-cta
|
|
504
|
+
.logo-container {
|
|
505
|
+
grid-column: nav-start / nav-end;
|
|
506
|
+
}
|
|
507
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav.has-header-cta
|
|
508
|
+
.cta-container,
|
|
509
|
+
.desktop-tab-centered-menu-no-logo.show-nav.has-header-cta .cta-container {
|
|
510
|
+
grid-column: cta-start / cta-end;
|
|
511
|
+
/* Top row, right edge — the shipped corner position. */
|
|
512
|
+
grid-row: 1;
|
|
513
|
+
justify-self: end;
|
|
514
|
+
align-self: start;
|
|
515
|
+
}
|
|
516
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.show-nav.has-header-cta
|
|
517
|
+
.cta-mirror,
|
|
518
|
+
.desktop-tab-centered-menu-no-logo.show-nav.has-header-cta .cta-mirror {
|
|
519
|
+
grid-column: 1 / nav-start;
|
|
520
|
+
grid-row: 1;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/* DESKTOP_TAB_5: the button shares the TOP row with the logo — the nav lives on its own
|
|
524
|
+
full-width row below — so an absolute corner pin collides with nothing and, unlike a
|
|
525
|
+
column, costs the nav no width. */
|
|
526
|
+
.desktop-tab-vertical-stack-centered-logo-centered-menu.has-header-cta {
|
|
527
|
+
@apply tw-relative;
|
|
528
|
+
}
|
|
529
|
+
.desktop-tab-vertical-stack-centered-logo-centered-menu .cta-container {
|
|
530
|
+
@apply tw-absolute tw-top-0 tw-right-0;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
/* TAB_6 with the nav hidden: no nav to collide with, so the button keeps its corner pin
|
|
534
|
+
(absolute, so it never pushes the logo off-centre; the logo keeps the band's height). */
|
|
535
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.no-nav.has-header-cta {
|
|
536
|
+
@apply tw-relative;
|
|
537
|
+
}
|
|
538
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo.no-nav .cta-container {
|
|
539
|
+
@apply tw-absolute tw-top-0 tw-right-0;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/* TAB_NO_LOGO_2 with the nav hidden: the button is the band's only content, so it stays in
|
|
543
|
+
flow (an absolute pin would collapse the header to zero height) at the same right edge. */
|
|
544
|
+
.desktop-tab-centered-menu-no-logo.no-nav .cta-container {
|
|
545
|
+
@apply tw-ml-auto;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* MOBILE_TAB_1/2: full-width button row in the centered stack. */
|
|
549
|
+
.mobile-tab-vertical-stack-centered-logo-centered-menu .cta-container,
|
|
550
|
+
.mobile-tab-vertical-stack-centered-menu-centered-logo .cta-container {
|
|
551
|
+
@apply tw-w-full tw-justify-self-stretch;
|
|
552
|
+
}
|
|
553
|
+
/* The row is definite-width, so the decorated button can span it like a section's. */
|
|
554
|
+
.mobile-tab-vertical-stack-centered-logo-centered-menu
|
|
555
|
+
.cta-container
|
|
556
|
+
:deep(.bp-style-wrapper),
|
|
557
|
+
.mobile-tab-vertical-stack-centered-menu-centered-logo
|
|
558
|
+
.cta-container
|
|
559
|
+
:deep(.bp-style-wrapper),
|
|
560
|
+
.mobile-tab-centered-menu-no-logo .cta-container :deep(.bp-style-wrapper),
|
|
561
|
+
.mobile-hamburger-no-logo-left-menu.no-nav
|
|
562
|
+
.cta-container
|
|
563
|
+
:deep(.bp-style-wrapper),
|
|
564
|
+
.mobile-hamburger-no-logo-centered-menu.no-nav
|
|
565
|
+
.cta-container
|
|
566
|
+
:deep(.bp-style-wrapper),
|
|
567
|
+
.mobile-hamburger-no-logo-right-menu.no-nav
|
|
568
|
+
.cta-container
|
|
569
|
+
:deep(.bp-style-wrapper),
|
|
570
|
+
.mobile-hamburger-horizontal-stack-left-logo-right-menu.no-nav
|
|
571
|
+
.cta-container
|
|
572
|
+
:deep(.bp-style-wrapper),
|
|
573
|
+
.mobile-hamburger-horizontal-stack-centered-logo-right-menu.no-nav
|
|
574
|
+
.cta-container
|
|
575
|
+
:deep(.bp-style-wrapper),
|
|
576
|
+
.mobile-hamburger-horizontal-stack-left-menu-centered-logo.no-nav
|
|
577
|
+
.cta-container
|
|
578
|
+
:deep(.bp-style-wrapper),
|
|
579
|
+
.mobile-hamburger-horizontal-stack-left-menu-left-logo.no-nav
|
|
580
|
+
.cta-container
|
|
581
|
+
:deep(.bp-style-wrapper) {
|
|
582
|
+
width: 100%;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/* MOBILE_TAB_1/2 with the nav hidden: the stack is a plain flex row, so the button wraps below it. */
|
|
586
|
+
.mobile-tab-vertical-stack-centered-logo-centered-menu.no-nav.has-header-cta,
|
|
587
|
+
.mobile-tab-vertical-stack-centered-menu-centered-logo.no-nav.has-header-cta {
|
|
588
|
+
@apply tw-flex-wrap tw-justify-center;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/* MOBILE_TAB_NO_LOGO_1 (nav shown or not — its flex-centre stack wraps the button either way)
|
|
592
|
+
and MOBILE_HAMBURGER_NO_LOGO_1..3 with the nav hidden: button wraps onto its own full-width
|
|
593
|
+
line below the nav, one row gap apart (the same gap the with-logo stacks use). */
|
|
594
|
+
.mobile-tab-centered-menu-no-logo.has-header-cta,
|
|
595
|
+
.mobile-hamburger-no-logo-left-menu.no-nav.has-header-cta,
|
|
596
|
+
.mobile-hamburger-no-logo-centered-menu.no-nav.has-header-cta,
|
|
597
|
+
.mobile-hamburger-no-logo-right-menu.no-nav.has-header-cta {
|
|
598
|
+
@apply tw-flex-wrap tw-gap-y-4;
|
|
599
|
+
}
|
|
600
|
+
.mobile-tab-centered-menu-no-logo .cta-container,
|
|
601
|
+
.mobile-hamburger-no-logo-left-menu.no-nav .cta-container,
|
|
602
|
+
.mobile-hamburger-no-logo-centered-menu.no-nav .cta-container,
|
|
603
|
+
.mobile-hamburger-no-logo-right-menu.no-nav .cta-container {
|
|
604
|
+
@apply tw-w-full;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/* DESKTOP_HAMBURGER_1: button gets its own column just before the hamburger icon. */
|
|
608
|
+
.desktop-hamburger-horizontal-stack-left-logo-right-menu.has-header-cta {
|
|
609
|
+
grid-template-columns: [logo-start] 1fr [cta-start] auto [nav-start] var(
|
|
610
|
+
--hamburger-nav-width
|
|
611
|
+
);
|
|
612
|
+
}
|
|
613
|
+
.desktop-hamburger-horizontal-stack-left-logo-right-menu .cta-container {
|
|
614
|
+
grid-column: cta-start;
|
|
615
|
+
/* Without an explicit row the button wraps onto a second row. */
|
|
616
|
+
grid-row: 1;
|
|
617
|
+
@apply tw-self-center;
|
|
618
|
+
/* Same gap the nav-bar styles keep between links and button. */
|
|
619
|
+
@apply tw-mr-4;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/* DESKTOP_HAMBURGER_2: button and icon share the trailing track (the button's right margin
|
|
623
|
+
reserves the icon's spot), mirrored by a leading 1fr so the logo stays truly centered.
|
|
624
|
+
The track's max-content floor means a tight header shifts the logo instead of overlapping. */
|
|
625
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.has-header-cta {
|
|
626
|
+
grid-template-columns:
|
|
627
|
+
minmax(max-content, 1fr)
|
|
628
|
+
[logo-start] auto [right-start] minmax(max-content, 1fr);
|
|
629
|
+
}
|
|
630
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.has-header-cta
|
|
631
|
+
.logo-container {
|
|
632
|
+
grid-column: logo-start;
|
|
633
|
+
}
|
|
634
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.has-header-cta
|
|
635
|
+
.nav-container {
|
|
636
|
+
grid-column: right-start;
|
|
637
|
+
grid-row: 1;
|
|
638
|
+
justify-self: end;
|
|
639
|
+
}
|
|
640
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu .cta-container {
|
|
641
|
+
grid-column: right-start;
|
|
642
|
+
grid-row: 1;
|
|
643
|
+
justify-self: end;
|
|
644
|
+
@apply tw-self-center;
|
|
645
|
+
/* Sits left of the icon: the old icon column's width plus the usual 1rem gap. */
|
|
646
|
+
margin-right: calc(var(--hamburger-nav-width) + 1rem);
|
|
647
|
+
}
|
|
648
|
+
/* The mirror reserves the icon's spot the same way the real button does (margin-right), so the
|
|
649
|
+
leading track equals button + icon + gap and the logo stays centred. */
|
|
650
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.has-header-cta
|
|
651
|
+
.cta-mirror {
|
|
652
|
+
grid-column: 1;
|
|
653
|
+
grid-row: 1;
|
|
654
|
+
margin-right: calc(var(--hamburger-nav-width) + 1rem);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/* Single page: no nav means no icon, so the button takes the right edge and the
|
|
658
|
+
leading mirror shrinks to just the button's width. */
|
|
659
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.no-nav.has-header-cta {
|
|
660
|
+
grid-template-columns:
|
|
661
|
+
minmax(max-content, 1fr)
|
|
662
|
+
[logo-start] auto [right-start] minmax(max-content, 1fr);
|
|
663
|
+
}
|
|
664
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.no-nav
|
|
665
|
+
.cta-container,
|
|
666
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu.no-nav
|
|
667
|
+
.cta-mirror {
|
|
668
|
+
/* Single page: no icon to reserve. */
|
|
669
|
+
margin-right: 0;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/* DESKTOP_HAMBURGER_NO_LOGO_1..3: button shows before the icon. */
|
|
673
|
+
.desktop-hamburger-no-logo-left-menu .cta-container,
|
|
674
|
+
.desktop-hamburger-no-logo-centered-menu .cta-container,
|
|
675
|
+
.desktop-hamburger-no-logo-right-menu .cta-container {
|
|
676
|
+
order: -1;
|
|
677
|
+
@apply tw-self-center tw-mr-4;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/* With the button on, icon + button always sit at the right whatever alignment the stored
|
|
681
|
+
style carries — the display-style picker is hidden in this state (HeaderDisplayStyle.vue). */
|
|
682
|
+
.desktop-hamburger-no-logo-left-menu.has-header-cta,
|
|
683
|
+
.desktop-hamburger-no-logo-centered-menu.has-header-cta {
|
|
684
|
+
@apply tw-justify-end;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/* MOBILE_HAMBURGER_1..4 with the nav hidden (single page): no side menu exists, so the button gets a full-width row below the logo. */
|
|
688
|
+
.mobile-hamburger-horizontal-stack-left-logo-right-menu.no-nav .cta-container,
|
|
689
|
+
.mobile-hamburger-horizontal-stack-centered-logo-right-menu.no-nav
|
|
690
|
+
.cta-container,
|
|
691
|
+
.mobile-hamburger-horizontal-stack-left-menu-centered-logo.no-nav
|
|
692
|
+
.cta-container,
|
|
693
|
+
.mobile-hamburger-horizontal-stack-left-menu-left-logo.no-nav .cta-container {
|
|
694
|
+
grid-column: 1 / -1;
|
|
695
|
+
@apply tw-w-full tw-mt-4;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/* Desktop placements: cap the button so a long label wraps to the next line (like the
|
|
699
|
+
banner's button) instead of stretching across the header. Mobile rows stay full-width. */
|
|
700
|
+
.desktop-tab-horizontal-stack-left-logo-right-menu .cta-container,
|
|
701
|
+
.desktop-tab-horizontal-stack-left-logo-left-menu .cta-container,
|
|
702
|
+
.desktop-tab-horizontal-stack-left-logo-centered-menu .cta-container,
|
|
703
|
+
.desktop-tab-horizontal-stack-centered-logo-right-menu .cta-container,
|
|
704
|
+
.desktop-tab-vertical-stack-centered-logo-centered-menu .cta-container,
|
|
705
|
+
.desktop-tab-vertical-stack-centered-menu-centered-logo .cta-container,
|
|
706
|
+
.desktop-tab-left-menu-no-logo .cta-container,
|
|
707
|
+
.desktop-tab-centered-menu-no-logo .cta-container,
|
|
708
|
+
.desktop-tab-right-menu-no-logo .cta-container,
|
|
709
|
+
.desktop-hamburger-horizontal-stack-left-logo-right-menu .cta-container,
|
|
710
|
+
.desktop-hamburger-horizontal-stack-centered-logo-right-menu .cta-container,
|
|
711
|
+
.desktop-hamburger-no-logo-left-menu .cta-container,
|
|
712
|
+
.desktop-hamburger-no-logo-centered-menu .cta-container,
|
|
713
|
+
.desktop-hamburger-no-logo-right-menu .cta-container {
|
|
714
|
+
max-width: var(--logo-max-width);
|
|
715
|
+
}
|
|
372
716
|
</style>
|
|
373
717
|
|
|
374
718
|
<style>
|