mod-build 3.6.71 → 4.0.0-alpha.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.
Files changed (149) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc +18 -0
  3. package/CHANGELOG.md +2 -240
  4. package/README.md +16 -263
  5. package/gulp-tasks/build.js +1 -1
  6. package/package.json +21 -69
  7. package/siteconfig.js +38 -0
  8. package/src/accessible-components/button/_button.scss +195 -0
  9. package/src/accessible-components/button/back-button.html +4 -0
  10. package/src/accessible-components/button/button.html +17 -0
  11. package/src/accessible-components/carousel/_carousel.scss +112 -0
  12. package/src/accessible-components/carousel/carousel.html +25 -0
  13. package/src/accessible-components/checkbox/_checkbox.scss +96 -0
  14. package/src/accessible-components/checkbox/checkbox.html +8 -0
  15. package/src/accessible-components/expand-collapse/_expand-collapse.scss +122 -0
  16. package/src/accessible-components/expand-collapse/expand-collapse.html +8 -0
  17. package/src/accessible-components/expand-collapse/expand-collapse.js +52 -0
  18. package/src/accessible-components/expand-collapse/expand-collapse.min.js +2 -0
  19. package/src/accessible-components/expand-collapse/expand-collapse.min.js.map +1 -0
  20. package/src/accessible-components/featured-block/_featured-block.scss +219 -0
  21. package/src/accessible-components/featured-block/featured-block.html +54 -0
  22. package/src/accessible-components/foot-assets/foot-assets.html +92 -0
  23. package/src/accessible-components/footer/footer.html +2 -0
  24. package/src/{templates/_partials/scripts/gtm-editorials/body/google-tag-manager-body.html → accessible-components/gtm-body/gtm-body.html} +1 -2
  25. package/src/accessible-components/head/head.html +188 -0
  26. package/src/accessible-components/header/_header.scss +289 -0
  27. package/src/accessible-components/header/header.html +66 -0
  28. package/src/accessible-components/hero/_hero.scss +371 -0
  29. package/src/accessible-components/hero/hero.html +53 -0
  30. package/src/accessible-components/how-it-works/_how-it-works.scss +217 -0
  31. package/src/accessible-components/how-it-works/how-it-works-carousel.html +12 -0
  32. package/src/accessible-components/how-it-works/how-it-works-static.html +12 -0
  33. package/src/accessible-components/how-it-works/how-it-works.html +14 -0
  34. package/src/accessible-components/information/_information.scss +92 -0
  35. package/src/accessible-components/information/information.html +26 -0
  36. package/src/accessible-components/input/_input.scss +202 -0
  37. package/src/accessible-components/input/input.html +22 -0
  38. package/src/accessible-components/input/textarea.html +9 -0
  39. package/src/accessible-components/partners/_partners.scss +232 -0
  40. package/src/accessible-components/partners/partners.html +56 -0
  41. package/src/accessible-components/picture/picture.html +19 -0
  42. package/src/accessible-components/preloader/_preloader.scss +61 -0
  43. package/src/accessible-components/preloader/preloader.html +23 -0
  44. package/src/accessible-components/progress-bar/_progress-bar.scss +119 -0
  45. package/src/accessible-components/progress-bar/progress-bar.html +21 -0
  46. package/src/accessible-components/progress-bar/progress-bar.js +37 -0
  47. package/src/accessible-components/progress-bar/progress-bar.min.js +2 -0
  48. package/src/accessible-components/progress-bar/progress-bar.min.js.map +1 -0
  49. package/src/accessible-components/radio-button/_radio-button.scss +537 -0
  50. package/src/accessible-components/radio-button/radio-button.html +34 -0
  51. package/src/accessible-components/reviews/_reviews.scss +175 -0
  52. package/src/accessible-components/reviews/reviews-carousel.html +12 -0
  53. package/src/accessible-components/reviews/reviews-static.html +12 -0
  54. package/src/accessible-components/reviews/reviews.html +37 -0
  55. package/src/accessible-components/select/_select.scss +69 -0
  56. package/src/accessible-components/select/select.html +10 -0
  57. package/src/accessible-components/steps/_steps.scss +524 -0
  58. package/src/accessible-components/steps/defaultFormFieldConfig.json +109 -0
  59. package/src/accessible-components/steps/step-fields.html +33 -0
  60. package/src/accessible-components/steps/steps.html +150 -0
  61. package/src/accessible-components/tcpa/_tcpa.scss +49 -0
  62. package/src/accessible-components/tcpa/tcpa.html +9 -0
  63. package/src/accessible-components/tile/_tile.scss +117 -0
  64. package/src/accessible-components/tile/tile.html +14 -0
  65. package/src/accessible-components/value-props/_value-props.scss +100 -0
  66. package/src/accessible-components/value-props/value-props.html +17 -0
  67. package/src/accessible-components/zip-control/_zip-control.scss +78 -0
  68. package/src/accessible-components/zip-control/zip-control.html +10 -0
  69. package/src/data/footer.js +117 -0
  70. package/src/data/seasons.js +5 -7
  71. package/src/data/theme.json +164 -0
  72. package/src/index.html +18 -0
  73. package/src/main.js +45 -0
  74. package/src/resources/scripts/abandonment/abandonment-1df90ee155f6c0893d90.min.js +2 -0
  75. package/src/resources/scripts/abandonment/abandonment.min.js +2 -0
  76. package/src/resources/scripts/footer/footer-component-7b5e263f64568573ecc0.min.js +2 -0
  77. package/src/resources/scripts/footer/footer-component.min.js +2 -0
  78. package/src/resources/scripts/helpers/initNumericOnlyFields.min.js +2 -0
  79. package/src/resources/scripts/helpers/initNumericOnlyFields.min.js.map +1 -0
  80. package/src/resources/scripts/helpers/isZipCodeValid.min.js +2 -0
  81. package/src/resources/scripts/helpers/isZipCodeValid.min.js.map +1 -0
  82. package/src/resources/scripts/mod-alytics/modalytics-0ac7d7a5a72ea67a0f47.min.js +2 -0
  83. package/src/resources/scripts/mod-alytics/modalytics.min.js +2 -0
  84. package/src/resources/scripts/mod-form/form/homeowner-77a4dd439b8db412678b.min.js +2 -0
  85. package/src/resources/scripts/mod-form/form/homeowner.min.js +2 -0
  86. package/src/resources/scripts/mod-utils/modutils-8ba40d21f559171ddd36.min.js +2 -0
  87. package/src/resources/scripts/mod-utils/modutils.min.js +2 -0
  88. package/src/resources/styles/components/abandonment/abandonment-ae63aca828944411eff7.min.css +1 -0
  89. package/src/resources/styles/components/abandonment/abandonment.min.css +1 -0
  90. package/src/resources/styles/components/footer/mod-footer-3717faf57147c62c1777.min.css +1 -0
  91. package/src/resources/styles/components/footer/mod-footer.min.css +1 -0
  92. package/src/resources/styles/components/footer/qs-footer-12bf078dc614ff221c3c.min.css +1 -0
  93. package/src/resources/styles/components/footer/qs-footer.min.css +1 -0
  94. package/src/resources/templates/modals/about/index.html +9 -0
  95. package/src/resources/templates/modals/contact-us/index.html +348 -0
  96. package/src/resources/templates/modals/faq/index.html +9 -0
  97. package/src/resources/templates/modals/privacy/index.html +236 -0
  98. package/src/resources/templates/modals/terms/index.html +166 -0
  99. package/src/scripts/has-qs-params.js +6 -5
  100. package/src/scripts/url-cleaner.js +3 -3
  101. package/src/scripts/utils.js +178 -0
  102. package/src/styles/home.scss +1 -0
  103. package/src/temp/scripts/maxmind-geoip2.js +104 -0
  104. package/src/templates/_partials/scripts/deferred-styles.html +16 -16
  105. package/src/templates/_partials/scripts/vwo-redirect-callback.html +43 -45
  106. package/src/templates/components/head.html +70 -0
  107. package/tasks/clean.js +13 -0
  108. package/tasks/grab-cdn.js +107 -0
  109. package/tasks/grab-form-helpers.js +94 -0
  110. package/tasks/grab-shared-components.js +81 -0
  111. package/tasks/grab-shared-scripts.js +267 -0
  112. package/tasks/serve.js +15 -0
  113. package/tasks/templates.js +168 -0
  114. package/template.js +801 -0
  115. package/vite.config.js +56 -0
  116. package/.eslintrc.yml +0 -59
  117. package/src/data/common.js +0 -704
  118. package/src/data/components/qs-footer.js +0 -55
  119. package/src/data/components/quote-footer.js +0 -73
  120. package/src/scripts/apt-block.js +0 -919
  121. package/src/scripts/components/custom-selects.js +0 -48
  122. package/src/scripts/components/radio-panels.js +0 -45
  123. package/src/scripts/es6-1.js +0 -6
  124. package/src/scripts/es6-2.js +0 -2
  125. package/src/scripts/qs-form.js +0 -839
  126. package/src/scripts/vendor/maxmind-geoip2.js +0 -2
  127. package/src/scripts/vendor/swiper.min.js +0 -13
  128. package/src/styles/apt-block.scss +0 -888
  129. package/src/templates/_partials/apt-block.html +0 -30
  130. package/src/templates/_partials/scripts/analytics.html +0 -4
  131. package/src/templates/_partials/scripts/go-page-hiding-snippet.html +0 -8
  132. package/src/templates/_partials/scripts/google-maps.html +0 -1
  133. package/src/templates/_partials/scripts/google-optimize.html +0 -12
  134. package/src/templates/_partials/scripts/gtm-editorials/head/google-tag-manager-head.html +0 -10
  135. package/src/templates/_partials/scripts/gtm-hil/body/google-tag-manager-body.html +0 -5
  136. package/src/templates/_partials/scripts/gtm-hil/head/google-tag-manager-head.html +0 -10
  137. package/src/templates/_partials/scripts/gtm-pro/body/google-tag-manager-body.html +0 -5
  138. package/src/templates/_partials/scripts/gtm-pro/head/google-tag-manager-head.html +0 -10
  139. package/src/templates/_partials/scripts/gtm-quote/body/google-tag-manager-body.html +0 -5
  140. package/src/templates/_partials/scripts/gtm-quote/head/google-tag-manager-head.html +0 -9
  141. package/src/templates/_partials/scripts/gtm-whitelabel/body/mod-google-tag-manager-body.html +0 -5
  142. package/src/templates/_partials/scripts/gtm-whitelabel/body/non-mod-google-tag-manager-body.html +0 -5
  143. package/src/templates/_partials/scripts/gtm-whitelabel/head/mod-google-tag-manager-head.html +0 -10
  144. package/src/templates/_partials/scripts/gtm-whitelabel/head/non-mod-google-tag-manager-head.html +0 -9
  145. package/src/templates/_partials/scripts/gtm-wordpress/body/google-tag-manager-body.html +0 -5
  146. package/src/templates/_partials/scripts/gtm-wordpress/head/google-tag-manager-head.html +0 -9
  147. package/src/templates/_partials/scripts/visual-website-optimizer.html +0 -5
  148. package/src/templates/index.html +0 -46
  149. /package/{src → public}/favicon.ico +0 -0
@@ -0,0 +1,150 @@
1
+ {{#each this.items}}
2
+ <li id="{{#if this.priority}}step{{inc this.priority}}{{else}}step{{inc @index}}{{/if}}" class="swiper-slide swiper-no-swiping step {{#if this.attributes.class}}{{this.attributes.class}}{{/if}} {{#if @first}}step--active swiper-slide-active step--first{{/if}}" {{#if @first}}data-slide="active" aria-hidden="false"{{else}}aria-hidden="true"{{/if}} tabindex="-1" data-bind="step" {{{addAttributes this 'class' 'id' 'tabindex'}}}>
3
+ <div class="step-inner">
4
+ {{#if this.customStepTopTemplate}}
5
+ {{ fileInclude this.customStepTopTemplate
6
+ stepTopOpt = this
7
+ }}
8
+ {{/if}}
9
+
10
+ {{#if this.stepHeader}}
11
+ <div class="step__header{{#xif 'this.stepHeader.attributes && this.stepHeader.attributes.class'}} {{this.stepHeader.attributes.class}}{{/xif}}" {{{addAttributes this.stepHeader 'class'}}}>
12
+ {{#if this.stepHeader.title}}
13
+ <p class="step__header-title{{#xif 'this.stepHeader.title.attributes && this.stepHeader.title.attributes.class'}} {{this.stepHeader.title.attributes.class}}{{/xif}}" {{{addAttributes this.stepHeader.title 'class'}}}>
14
+ {{#if this.stepHeader.title.mobileText}}
15
+ <span class="hidden visible-md-up">{{{this.stepHeader.title.text}}}</span>
16
+ <span class="visible-sm-down">{{{this.stepHeader.title.mobileText}}}</span>
17
+ {{else}}
18
+ {{{this.stepHeader.title.text}}}
19
+ {{/if}}
20
+ </p>
21
+ {{/if}}
22
+ {{#if this.stepHeader.subtitle}}
23
+ <div class="step__header-subtitle{{#xif 'this.stepHeader.subtitle.attributes && this.stepHeader.subtitle.attributes.class'}} {{this.stepHeader.subtitle.attributes.class}}{{/xif}}" {{{addAttributes this.stepHeader.subtitle 'class'}}}>
24
+ {{#if this.stepHeader.subtitle.text}}<p>{{{this.stepHeader.subtitle.text}}}</p>{{/if}}
25
+ {{#if this.stepHeader.subtitle.list}}
26
+ <ul class="step__header-subtitle-list">
27
+ {{#each this.stepHeader.subtitle.list}}
28
+ <li>
29
+ <span>{{{this}}}</span>
30
+ </li>
31
+ {{/each}}
32
+ </ul>
33
+ {{/if}}
34
+ </div>
35
+ {{/if}}
36
+ </div>
37
+ {{/if}}
38
+
39
+ <div class="step__content{{#xif 'this.stepContent.attributes && this.stepContent.attributes.class'}} {{this.stepContent.attributes.class}}{{/xif}}" {{{addAttributes this.stepContent 'class'}}}>
40
+ {{#if this.stepContent.overview}}
41
+ <ol class="step__overview">
42
+ {{#each this.stepContent.overview.items}}
43
+ <li class="step__overview-item">
44
+ <span class="step__overview-number" aria-hidden="true">{{this.number}}</span> {{{this.text}}}
45
+ </li>
46
+ {{/each}}
47
+ </ol>
48
+ {{/if}}
49
+
50
+ {{#if this.stepContent.title}}
51
+ <p class="step__title{{#xif 'this.stepContent.title.attributes && this.stepContent.title.attributes.class'}} {{this.stepContent.title.attributes.class}}{{/xif}}" {{{addAttributes this.stepContent.title 'class'}}}>
52
+ {{#if this.stepContent.title.mobileText}}
53
+ <span class="hidden visible-md-up">{{{this.stepContent.title.text}}}</span>
54
+ <span class="visible-sm-down">{{{this.stepContent.title.mobileText}}}</span>
55
+ {{else}}
56
+ {{{this.stepContent.title.text}}}
57
+ {{/if}}
58
+ </p>
59
+ {{/if}}
60
+
61
+ {{#if this.stepContent.subtitle}}
62
+ <p class="step__subtitle{{#xif 'this.stepContent.subtitle.attributes && this.stepContent.subtitle.attributes.class'}} {{this.stepContent.subtitle.attributes.class}}{{/xif}}" {{{addAttributes this.stepContent.subtitle 'class'}}}>
63
+ {{{this.stepContent.subtitle.text}}}
64
+ </p>
65
+ {{/if}}
66
+
67
+ <div class="step__fields">
68
+ {{#each this.stepContent.fields}}
69
+ <div class="form-group{{#xif "this.formGroup && this.formGroup.attributes && this.formGroup.attributes.class"}} {{this.formGroup.attributes.class}}{{/xif}}{{#unless this.skipErrorClass}} parent-error{{/unless}}" {{#if this.formGroup}}{{{addAttributes this.formGroup 'class'}}}{{/if}}>
70
+ {{#if this.label}}
71
+ <label class="form-group__label{{#xif 'this.label.attributes && this.label.attributes.class'}} {{this.label.attributes.class}}{{/xif}}" {{{addAttributes this.label 'class'}}}>
72
+ {{{this.label.text}}}
73
+ </label>
74
+ {{/if}}
75
+
76
+ {{ fileInclude 'src/accessible-components/steps/step-fields.html'
77
+ stepFields = this
78
+ }}
79
+
80
+ {{#if this.errorMessage}}<p id="error--{{#if this.attributes.id}}{{this.attributes.id}}{{else}}{{this.attributes.name}}{{/if}}" class="form-group__error-message">{{{this.errorMessage}}}</p>{{/if}}
81
+ {{#if this.showCityState}}<p class="form-group__city-state">City, State</p>{{/if}}
82
+ {{#if this.note}}<p class="form-group__note">{{{this.note}}}</p>{{/if}}
83
+ </div>
84
+ {{/each}}
85
+ </div>
86
+
87
+ {{#if this.stepContent.extraQuestionBlock}}
88
+ <div class="step__extra{{#if this.stepContent.extraQuestionBlock.attributes.class}} {{this.stepContent.extraQuestionBlock.attributes.class}}{{/if}}" {{{addAttributes this.stepContent.extraQuestionBlock 'class'}}}>
89
+ {{#if this.stepContent.extraQuestionBlock.title}}
90
+ <p class="step__title">
91
+ {{{this.stepContent.extraQuestionBlock.title.text}}}
92
+ </p>
93
+ {{/if}}
94
+ {{#if this.stepContent.extraQuestionBlock.subtitle}}
95
+ <div class="step__subtitle">
96
+ {{#if this.stepContent.extraQuestionBlock.subtitle.text}}
97
+ <p>{{{this.stepContent.extraQuestionBlock.subtitle.text}}}</p>
98
+ {{/if}}
99
+ </div>
100
+ {{/if}}
101
+ {{#each this.stepContent.extraQuestionBlock.fields}}
102
+ <div class="form-group{{#xif "this.formGroup && this.formGroup.attributes && this.formGroup.attributes.class"}} {{this.formGroup.attributes.class}}{{/xif}}{{#unless this.skipErrorClass}} parent-error{{/unless}}" {{#if this.formGroup}}{{{addAttributes this.formGroup 'class'}}}{{/if}}>
103
+ {{ fileInclude 'src/accessible-components/steps/step-fields.html'
104
+ stepFields = this
105
+ }}
106
+ </div>
107
+ {{/each}}
108
+ </div>
109
+ {{/if}}
110
+
111
+ {{#if this.stepContent.useRecaptcha}}
112
+ {{ fileInclude this.stepContent.useRecaptcha }}
113
+ {{/if}}
114
+
115
+ {{#xif "this.stepContent.tcpa && this.stepContent.tcpa.placement === 'above-cta'"}}
116
+ {{ fileInclude 'src/accessible-components/tcpa/tcpa.html'
117
+ tcpaText = @root.tcpaText
118
+ }}
119
+ {{/xif}}
120
+
121
+ {{#if this.stepContent.button}}
122
+ {{ fileInclude 'src/accessible-components/button/button.html'
123
+ button = this.stepContent.button
124
+ }}
125
+ {{/if}}
126
+
127
+ {{#if this.stepContent.secureText}}
128
+ <div class="step__secure-text{{#if this.stepContent.secureText.hasBorderStyle}} step__secure-text--border{{/if}}">
129
+ {{#unless this.stepContent.secureText.hideIcon}}
130
+ <i class="icon-fill-lock"></i>
131
+ {{/unless}}
132
+ {{{this.stepContent.secureText.text}}}
133
+ </div>
134
+ {{/if}}
135
+
136
+ {{#xif "this.stepContent.tcpa && this.stepContent.tcpa.placement === 'below-cta'"}}
137
+ {{ fileInclude 'src/accessible-components/tcpa/tcpa.html'
138
+ tcpaText = @root.tcpaText
139
+ }}
140
+ {{/xif}}
141
+ </div>
142
+
143
+ {{#if this.customStepBottomTemplate}}
144
+ {{ fileInclude this.customStepBottomTemplate
145
+ stepBottomOpt = this
146
+ }}
147
+ {{/if}}
148
+ </div>
149
+ </li>
150
+ {{/each}}
@@ -0,0 +1,49 @@
1
+ $tcpa-color: $color-charcoal4 !default;
2
+ $tcpa-font-size: .75rem !default;
3
+ $tcpa-font-weight: 400 !default;
4
+ $tcpa-line-height: 1.35 !default;
5
+ $tcpa-margin: 20px auto !default;
6
+ $tcpa-text-align: left !default;
7
+
8
+ $tcpa-link-color: $tcpa-color !default;
9
+ $tcpa-link-text-decoration: underline !default;
10
+ $tcpa-link-transition: $base-transition !default;
11
+ $tcpa-link-hover-color: darken($tcpa-color, 20%) !default;
12
+ $tcpa-link-focus-outline: 1px solid $tcpa-color !default;
13
+ $tcpa-link-focus-outline-offset: 2px !default;
14
+
15
+ .tcpa {
16
+ color: $tcpa-color;
17
+ font-size: $tcpa-font-size;
18
+ font-weight: $tcpa-font-weight;
19
+ line-height: $tcpa-line-height;
20
+ margin: $tcpa-margin;
21
+ text-align: $tcpa-text-align;
22
+
23
+ label {
24
+ font-weight: $tcpa-font-weight;
25
+ }
26
+
27
+ a {
28
+ color: $tcpa-link-color;
29
+ text-decoration: $tcpa-link-text-decoration;
30
+ transition: $tcpa-link-transition;
31
+
32
+ &:focus {
33
+ color: $tcpa-link-hover-color;
34
+ outline: $tcpa-link-focus-outline;
35
+ outline-offset: $tcpa-link-focus-outline-offset;
36
+ }
37
+ }
38
+ }
39
+
40
+ @include breakpoint-md {
41
+ .tcpa {
42
+ a {
43
+ &:hover,
44
+ &:active {
45
+ color: $tcpa-link-hover-color;
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,9 @@
1
+ <div class="tcpa form-tcpa">
2
+ <input name="leadToken" id="leadid_token" type="hidden" value=""/>
3
+ <label>
4
+ <input type="hidden" id="leadid_tcpa_disclosure" />
5
+ <span id="tcpa-copy" data-tcpa-loaded>
6
+ {{{tcpaText}}}
7
+ </span>
8
+ </label>
9
+ </div>
@@ -0,0 +1,117 @@
1
+ $tile-height: 100% !default;
2
+ $tile-width: 100% !default;
3
+ $tile-display: inline-flex !default;
4
+ $tile-flex-direction: column !default;
5
+ $tile-justify-content: center !default;
6
+
7
+ $tile-border-transition: border-color .15s ease-in-out !default;
8
+
9
+ $tile-bg-background-position: center 1px !default;
10
+ $tile-bg-border-radius: 5px !default;
11
+ $tile-bg-box-shadow: 0 3px 4px 0 rgba(#000, .2) !default;
12
+ $tile-bg-border-color: transparent !default;
13
+ $tile-bg-border-width: 2px !default;
14
+ $tile-bg-border-border-radius: 8px !default;
15
+ $tile-bg-hover-border-color: $color-charcoal3 !default;
16
+ $tile-bg-font-size: 1.125rem !default;
17
+ $tile-bg-font-weight: 700 !default;
18
+ $tile-bg-text-color: $color-white !default;
19
+ $tile-bg-text-transform: uppercase !default;
20
+
21
+ $tile-icon-border-color: darken($color-charcoal3, 5%) !default;
22
+ $tile-icon-hover-border-color: darken($tile-icon-border-color, 20%) !default;
23
+ $tile-icon-border-radius: 4px !default;
24
+ $tile-icon-border-width: 1px !default;
25
+ $tile-icon-box-shadow: 0 2px 4px 0 rgba(#000, .1) !default;
26
+ $tile-icon-font-size: .75rem !default;
27
+ $tile-icon-font-weight: 700 !default;
28
+ $tile-icon-text-color: $color-charcoal8 !default;
29
+ $tile-icon-img-width: 100% !default;
30
+ $tile-icon-img-height: 90px !default;
31
+
32
+ .tile {
33
+ display: $tile-display;
34
+ flex-direction: $tile-flex-direction;
35
+ height: $tile-height;
36
+ justify-content: $tile-justify-content;
37
+ width: $tile-width;
38
+
39
+ &--background-image {
40
+ .tile__background-image {
41
+ background-position: $tile-bg-background-position;
42
+ background-size: cover;
43
+ border-radius: $tile-bg-border-radius;
44
+ box-shadow: $tile-bg-box-shadow;
45
+ height: 100%;
46
+ left: 0;
47
+ position: absolute;
48
+ top: 0;
49
+ width: 100%;
50
+
51
+ &::before {
52
+ border: $tile-bg-border-width solid $tile-bg-border-color;
53
+ border-radius: $tile-bg-border-border-radius;
54
+ content: '';
55
+ height: calc(100% + 8px);
56
+ left: -4px;
57
+ position: absolute;
58
+ top: -4px;
59
+ transition: $tile-border-transition;
60
+ width: calc(100% + 8px);
61
+ z-index: -1;
62
+ }
63
+ }
64
+
65
+ .tile__text {
66
+ color: $tile-bg-text-color;
67
+ font-size: $tile-bg-font-size;
68
+ font-weight: $tile-bg-font-weight;
69
+ position: relative;
70
+ text-transform: $tile-bg-text-transform;
71
+ z-index: 2;
72
+ }
73
+
74
+ &:hover {
75
+ .tile__background-image {
76
+ &::before {
77
+ border-color: $tile-bg-hover-border-color;
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ &--icon {
84
+ .tile__icon {
85
+ height: $tile-icon-img-height;
86
+ width: $tile-icon-img-width;
87
+ }
88
+
89
+ .tile__text {
90
+ color: $tile-icon-text-color;
91
+ display: inline-block;
92
+ font-size: $tile-icon-font-size;
93
+ font-weight: $tile-icon-font-weight;
94
+
95
+ &::before {
96
+ border: $tile-icon-border-width solid $tile-icon-border-color;
97
+ border-radius: $tile-icon-border-radius;
98
+ box-shadow: $tile-icon-box-shadow;
99
+ content: '';
100
+ display: block;
101
+ height: 100%;
102
+ left: 0;
103
+ position: absolute;
104
+ top: 0;
105
+ transition: $tile-border-transition;
106
+ width: 100%;
107
+ }
108
+ }
109
+ &:hover {
110
+ .tile__text {
111
+ &::before {
112
+ border-color: $tile-icon-hover-border-color;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,14 @@
1
+ {{#if this.field}}
2
+ <div class="tile {{#if this.field.backgroundImage}}tile--background-image{{else}}tile--icon{{/if}}">
3
+ {{#if this.field.backgroundImage}}
4
+ <div class="tile__background-image {{#if this.field.backgroundImage.class}}{{this.field.backgroundImage.class}}{{/if}}" {{#if this.field.backgroundImage.url}}style="background-image: url('{{#if this.field.backgroundImage.useCDN}}https://{{x 'process.env.NODE_ENV'}}{{/if}}{{this.field.backgroundImage.url}}')"{{/if}}></div>
5
+ {{/if}}
6
+ {{#if this.field.picture}}
7
+ {{ fileInclude 'src/accessible-components/picture/picture.html'
8
+ picture = this.field.picture
9
+ class = 'tile__icon'
10
+ }}
11
+ {{/if}}
12
+ <span class="tile__text">{{{this.field.text}}}</span>
13
+ </div>
14
+ {{/if}}
@@ -0,0 +1,100 @@
1
+ $value-props-display: none !default;
2
+ $value-props-display-tablet: block !default;
3
+ $value-props-display-desktop: $value-props-display-tablet !default;
4
+ $value-props-backdrop-filter: blur(4px) !default;
5
+ $value-props-background-color: rgba($color-charcoal6,.85) !default;
6
+ $value-props-border-radius: 2px !default;
7
+ $value-props-border-radius-desktop: 2px 0 0 2px !default;
8
+ $value-props-color: $color-white !default;
9
+ $value-props-margin: 0 auto 20px !default;
10
+ $value-props-margin-tablet: 0 auto 30px !default;
11
+ $value-props-margin-desktop: 0 0 0 auto !default;
12
+ $value-props-max-width: 100% !default;
13
+ $value-props-padding: 30px 0 !default;
14
+ $value-props-padding-desktop: $value-props-padding !default;
15
+
16
+ $value-props-wrapper-display: flex !default;
17
+ $value-props-wrapper-flex-direction: row !default;
18
+ $value-props-wrapper-justify-content: space-evenly !default;
19
+
20
+ $value-props-icon-height: 40px !default;
21
+ $value-props-icon-width: $value-props-icon-height !default;
22
+ $value-props-icon-height-desktop: $value-props-icon-height !default;
23
+ $value-props-icon-width-desktop: $value-props-icon-width !default;
24
+
25
+ $value-props-item-border-left: 0 !default;
26
+ $value-props-item-flex: 0 0 25% !default;
27
+ $value-props-item-padding: 0 15px !default;
28
+ $value-props-item-text-align: center !default;
29
+
30
+ $value-props-description-font-size: 12px !default;
31
+ $value-props-description-font-size-desktop: 16px !default;
32
+ $value-props-description-font-weight: normal !default;
33
+ $value-props-description-line-height: 1.25 !default;
34
+ $value-props-description-margin: 10px auto 0 !default;
35
+ $value-props-description-width: 100% !default;
36
+
37
+ .value-props {
38
+ backdrop-filter: $value-props-backdrop-filter;
39
+ background-color: $value-props-background-color;
40
+ border-radius: $value-props-border-radius;
41
+ color: $value-props-color;
42
+ display: $value-props-display;
43
+ margin: $value-props-margin;
44
+ max-width: $value-props-max-width;
45
+ padding: $value-props-padding;
46
+
47
+ &__wrapper {
48
+ display: $value-props-wrapper-display;
49
+ flex-direction: $value-props-wrapper-flex-direction;
50
+ justify-content: $value-props-wrapper-justify-content;
51
+ }
52
+
53
+ &__item {
54
+ flex: $value-props-item-flex;
55
+ padding: $value-props-item-padding;
56
+ text-align: $value-props-item-text-align;
57
+
58
+ ~ .value-props__item {
59
+ border-left: $value-props-item-border-left;
60
+ }
61
+ }
62
+
63
+ &__icon {
64
+ height: $value-props-icon-height;
65
+ width: $value-props-icon-width;
66
+ }
67
+
68
+ &__description {
69
+ font-size: $value-props-description-font-size;
70
+ font-weight: $value-props-description-font-weight;
71
+ line-height: $value-props-description-line-height;
72
+ margin: $value-props-description-margin;
73
+ width: $value-props-description-width;
74
+ }
75
+ }
76
+
77
+ @include breakpoint-md {
78
+ .value-props {
79
+ display: $value-props-display-tablet;
80
+ margin: $value-props-margin-tablet;
81
+ padding: $value-props-padding-desktop;
82
+
83
+ &__icon {
84
+ height: $value-props-icon-height-desktop;
85
+ width: $value-props-icon-width-desktop;
86
+ }
87
+
88
+ &__description {
89
+ font-size: $value-props-description-font-size-desktop;
90
+ }
91
+ }
92
+ }
93
+
94
+ @include breakpoint-lg {
95
+ .value-props {
96
+ border-radius: $value-props-border-radius-desktop;
97
+ display: $value-props-display-desktop;
98
+ margin: $value-props-margin-desktop;
99
+ }
100
+ }
@@ -0,0 +1,17 @@
1
+ {{#if this.props}}
2
+ <div class="value-props{{#if this.props.attributes.class}} {{this.props.attributes.class}}{{/if}}" {{{addAttributes this.props 'class'}}}>
3
+ <ul class="value-props__wrapper">
4
+ {{#each this.props.items}}
5
+ <li class="value-props__item">
6
+ {{#if this.picture}}
7
+ {{ fileInclude 'src/accessible-components/picture/picture.html'
8
+ picture = this.picture
9
+ class = 'value-props__icon'
10
+ }}
11
+ {{/if}}
12
+ {{#if this.description}}<p class="value-props__description" data-theme-template="vp">{{{this.description}}}</p>{{/if}}
13
+ </li>
14
+ {{/each}}
15
+ </ul>
16
+ </div>
17
+ {{/if}}
@@ -0,0 +1,78 @@
1
+ $zip-control-background-color: transparent !default;
2
+ $zip-control-border: none !default;
3
+ $zip-control-color: $color-charcoal4 !default;
4
+ $zip-control-font-family: $base-font-family !default;
5
+ $zip-control-font-size: .875rem !default;
6
+ $zip-control-font-weight: 700 !default;
7
+ $zip-control-line-height: 1.25 !default;
8
+ $zip-control-margin: 0 0 5px !default;
9
+ $zip-control-padding: 2px 5px !default;
10
+ $zip-control-text-align: right !default;
11
+ $zip-control-transition: $base-transition !default;
12
+
13
+ $zip-control-focus-outline: 1px solid rgba($zip-control-color, .5) !default;
14
+ $zip-control-focus-outline-offset: 2px !default;
15
+
16
+ $zip-control-hover-color: darken($zip-control-color, 20%) !default;
17
+
18
+ $zip-control-edit-color: $zip-control-color !default;
19
+ $zip-control-edit-hover-color: $zip-control-edit-color !default;
20
+ $zip-control-edit-font-size: $zip-control-font-size !default;
21
+ $zip-control-edit-margin-left: 0 !default;
22
+ $zip-control-edit-text-decoration: none !default;
23
+
24
+ .zip-control {
25
+ &__button {
26
+ background-color: $zip-control-background-color;
27
+ border: $zip-control-border;
28
+ font-family: $zip-control-font-family;
29
+ font-size: $zip-control-font-size;
30
+ font-weight: $zip-control-font-weight;
31
+ line-height: $zip-control-line-height;
32
+ margin: $zip-control-margin;
33
+ padding: $zip-control-padding;
34
+ text-align: $zip-control-text-align;
35
+ transition: $zip-control-transition;
36
+
37
+ &:focus {
38
+ outline: $zip-control-focus-outline;
39
+ outline-offset: $zip-control-focus-outline-offset;
40
+ }
41
+ }
42
+
43
+ &__location,
44
+ &__zipcode {
45
+ color: $zip-control-color;
46
+ transition: $zip-control-transition;
47
+ }
48
+
49
+ &__edit,
50
+ &__icon {
51
+ color: $zip-control-edit-color;
52
+ font-size: $zip-control-edit-font-size;
53
+ margin-left: $zip-control-edit-margin-left;
54
+ text-decoration: $zip-control-edit-text-decoration;
55
+ transition: $zip-control-transition;
56
+ }
57
+ }
58
+
59
+ @include breakpoint-md {
60
+ .zip-control {
61
+ &__button {
62
+ &:hover,
63
+ &:active,
64
+ &:focus {
65
+ color: $zip-control-hover-color;
66
+
67
+ .zip-control__location {
68
+ color: $zip-control-hover-color;
69
+ }
70
+
71
+ .zip-control__edit,
72
+ .zip-control__icon {
73
+ color: $zip-control-edit-hover-color;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,10 @@
1
+ <div class="zip-control" id="zip-control">
2
+ <button class="zip-control__button" id="zip-control__button" aria-label="Edit Zip Code">
3
+ <span class="zip-control__location user-location">City, State</span>
4
+ {{#if this.field.editText}}
5
+ <span class="zip-control__edit">{{this.field.editText}}</span>
6
+ {{else}}
7
+ <i class="zip-control__icon icon-fill-edit"></i>
8
+ {{/if}}
9
+ </button>
10
+ </div>
@@ -0,0 +1,117 @@
1
+ /* contains data for qs-footer and quote-footer */
2
+ export default function(siteData) {
3
+ let trade = '';
4
+ if (siteData?.contractor_trade) {
5
+ trade = `&trade=${siteData.contractor_trade}`;
6
+ } else if (siteData?.primary_trade) {
7
+ trade = `&trade=${siteData.primary_trade.replace(/[\s]+|_/g, '-').toLowerCase()}`;
8
+ }
9
+
10
+ const footerKey = siteData.isQSPage ? 'qsFooterData' : 'quoteFooterData';
11
+
12
+ const qsLinks = [
13
+ {
14
+ name: 'About',
15
+ url: '/about/',
16
+ modal: true,
17
+ company: true
18
+ },
19
+ {
20
+ name: 'Privacy Notice',
21
+ url: '/privacy/',
22
+ modal: true
23
+ },
24
+ {
25
+ name: 'Affiliates',
26
+ url: 'https://modernize.com/contact?publisher',
27
+ modal: false
28
+ },
29
+ {
30
+ name: 'Terms of Use',
31
+ url: '/terms/',
32
+ modal: true
33
+ },
34
+ {
35
+ name: 'Contact Us',
36
+ url: '/contact-us/',
37
+ modal: true
38
+ },
39
+ {
40
+ name: 'California - Do not sell my info',
41
+ url: 'https://privacy-central.securiti.ai/#/dsr/983cfd4b-c36a-4601-89e9-b651e5a05708',
42
+ modal: false
43
+ }
44
+ ]
45
+
46
+ const quoteLinks = [
47
+ {
48
+ url: 'about',
49
+ text: 'About Us',
50
+ modal: true
51
+ },
52
+ {
53
+ url: 'terms',
54
+ text: 'Terms of Use',
55
+ modal: true
56
+ },
57
+ {
58
+ url: 'privacy',
59
+ text: 'Privacy Policy',
60
+ modal: true
61
+ },
62
+ {
63
+ url: 'https://modernize.com/contact?publisher',
64
+ text: 'I\'m a publisher',
65
+ modal: false,
66
+ target: '_blank'
67
+ }
68
+ ]
69
+
70
+ const quoteSpecific = {
71
+ capchaDisclosure: {
72
+ text: 'This site is protected by reCAPTCHA and the Google',
73
+ privacy: {
74
+ text: 'Privacy Policy',
75
+ url: 'https://policies.google.com/privacy'
76
+ },
77
+ terms: {
78
+ text: 'Terms&nbsp;of&nbsp;Service',
79
+ url: 'https://policies.google.com/terms'
80
+ }
81
+ },
82
+ privacyLinks: [
83
+ {
84
+ text: 'California&nbsp;Privacy',
85
+ anchor: 'ccpa',
86
+ modal: true
87
+ },
88
+ {
89
+ text: 'New&nbsp;York&nbsp;Privacy',
90
+ anchor: 'nyna',
91
+ modal: true
92
+ },
93
+ {
94
+ text: 'Do&nbsp;Not&nbsp;Sell&nbsp;My&nbsp;Personal&nbsp;Information',
95
+ anchor: 'uspi',
96
+ modal: true
97
+ }
98
+ ],
99
+ }
100
+
101
+ const data = {
102
+ [footerKey]: {
103
+ links: [
104
+ ...siteData.isQSPage ? qsLinks : quoteLinks,
105
+ ],
106
+ copyright: `${siteData.isQSPage ? 'QuinStreet, Inc.' : ''} All&nbsp;Rights&nbsp;Reserved.`,
107
+ contractor: {
108
+ text: 'Are you a contractor?',
109
+ linkText: 'Join Our Contractor Network',
110
+ link: 'https://modernize.com/pro/register/leads/?utm_campaign=quinstreet-referral' + trade
111
+ },
112
+ ...siteData.isQSPage ? null : quoteSpecific,
113
+ }
114
+ }
115
+
116
+ return data;
117
+ }
@@ -1,8 +1,6 @@
1
- var seasons = {
2
- "warmerWeather": {
3
- "firstDay": "04-14",
4
- "lastDay": "09-25"
1
+ export const seasons = {
2
+ 'warmerWeather': {
3
+ 'firstDay': '04-14',
4
+ 'lastDay': '09-25'
5
5
  }
6
- }
7
-
8
- module.exports = seasons;
6
+ }