diff --git a/hugo.toml b/hugo.toml
index aa27d67d5..8928e389c 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -57,42 +57,48 @@ disableKinds = []
[[menu.main]]
parent = "services"
identifier = "fractional-cto"
- name = "Fractional CTO"
+ title = "Fractional CTO"
+ name = "Get on-demand access to a CTO to help guide your technical vision, accelerate team-building, and improve development team operations."
pageRef= "/services/fractional-cto/"
weight = 1
[[menu.main]]
parent = "services"
identifier = "fractional-product"
- name = "Fractional Product Management"
+ title = "Fractional Product Management"
+ name = "Get on-demand access to a product expert to help design UX, plan & prioritize your roadmap, and manage development schedules."
pageRef= "/services/fractional-product-management/"
weight = 2
[[menu.main]]
parent = "services"
identifier = "app-web"
- name = "App/Web Development"
+ title = "App/Web Development"
+ name = "Whether you’re a startup building new products or an established business upgrading existing systems, we help deliver positive outcomes."
pageRef= "/services/app-web-development/"
weight = 3
[[menu.main]]
parent = "services"
identifier = "outsourced-developer"
- name = "Outsourced Developer Staffing"
+ title = "Outsourced Developer Staffing"
+ name = "Increase your development capacity & reduce administrative workloads with pre-trained engineers that are ready to deploy within weeks."
pageRef= "/services/outsourced-developer-staffing/"
weight = 4
[[menu.main]]
parent = "services"
identifier = "software-qa"
- name = "Software AQA & Testing"
+ title = "Software AQA & Testing"
+ name = "Accelerate development, streamline release cycles, and eliminate roadblocks with fully-managed software testing & QA services."
pageRef= "/services/software-qa-cat/"
weight = 5
[[menu.main]]
parent = "services"
identifier = "talent-recruiting"
- name = "Talent Recruiting & Training"
+ title = "Talent Recruiting & Training"
+ name = "Scale your development team & simplify the talent acquisition process with top-caliber candidates that are pre-vetted by our team."
pageRef= "/services/talent-recruiting-training/"
weight = 6
@@ -105,42 +111,48 @@ disableKinds = []
[[menu.main]]
parent = "usecases"
identifier = "startup-mvp"
- name = "Startup MVP Prototyping & Development"
+ title = "Startup MVP Prototyping & Development"
+ name = "Whether creating an interactive prototype to validate the user experience or building out a Minimum Viable Product (MVP) for initial customers, we help startups accelerate the path from idea to revenue."
pageRef= "/use-cases/startup-mvp-prototyping-development/"
weight = 1
[[menu.main]]
parent = "usecases"
identifier = "salvage-project"
- name = "Salvage an Existing Project"
+ title = "Salvage an Existing Project"
+ name = "The sooner a software project is salvaged, the better chance it has of being a viable long-term investment. We can help transform your product, providing the visibility, clarity, and control you need to get your project on track."
pageRef= "/use-cases/salvage-existing-project/"
weight = 2
[[menu.main]]
parent = "usecases"
identifier = "empower-team"
- name = "Empower an Existing Engineering Team"
+ title = "Empower an Existing Engineering Team"
+ name = "The easiest & fastest way to grow software development capacity is by using a trusted technology partner that can deploy pre-trained developers on-demand without the need for additional supervision."
pageRef= "/use-cases/empower-existing-engineering-team/"
weight = 3
[[menu.main]]
parent = "usecases"
identifier = "emergency-cto"
- name = "Emergency CTO Leadership"
+ title = "Emergency CTO Leadership"
+ name = "To maintain visibility, accountability, and control over technology outcomes when a critical team member leaves, companies need on-demand access to technical leadership to help keep the status quo for IT intact."
pageRef= "/use-cases/emergency-cto-leadership/"
weight = 4
[[menu.main]]
parent = "usecases"
identifier = "automate-product"
- name = "Automate Product QA & Testing"
+ title = "Automate Product QA & Testing"
+ name = "To enable faster product development while eliminating the risks of costly mistakes, companies need access to a reliable product testing & QA resource that can ensure quality at any scale."
pageRef= "/use-cases/automate-product-qa-testing/"
weight = 5
[[menu.main]]
parent = "usecases"
identifier = "accelerate-dev"
- name = "Accelerate Development & Maximize Capacity"
+ title = "Accelerate Development & Maximize Capacity"
+ name = "Our developers are ready to deploy within weeks (not months), giving companies the ability to accelerate their software development process while still maintaining control over engineering quality."
pageRef= "/use-cases/accelerate-development-maximize-capacity/"
weight = 6
diff --git a/postcss.config.js b/postcss.config.js
index e586857f7..a324de440 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -8,14 +8,7 @@ const purgecss = require("@fullhuman/postcss-purgecss")({
standard: [
"button, input[type=button], input[type=submit]",
// pp adv menu
- "pp-advanced-menu", "pp-advanced-menu-accordion-collapse", "off-canvas", "pp-menu-position-below",
- "menu-close", "menu-open",
- "pp-active", "focus", "pp-menu-submenu-right", "mega-menu-disabled", "mega-menu",
- "pp-off-canvas-menu-module", "pp-off-canvas-menu-open", "pp-full-screen-menu-module",
- "pp-full-screen-menu-open", "fl-node-menu-clone", "pp-search-form--focus", "first-click",
-
- "pp-advanced-menu", "pp-advanced-menu-accordion-collapse", "pp-menu-default", "pp-menu-align-right",
- "pp-menu-position-below", "fl-module-content", "fl-node-content",
+ "-open",
// pp adv tabs
"pp-tabs", "pp-tabs-label", "pp-tab-active", "pp-tabs-panel", "pp-tabs-panel-content",
@@ -34,7 +27,7 @@ const purgecss = require("@fullhuman/postcss-purgecss")({
],
deep: [
- /^fl-page/
+ /^fl-page/, /^navigation/, /^menu-close/, /^top-panel/, /^menu-opener/
],
greedy: [
diff --git a/tests/fixtures/screenshots/404.png b/tests/fixtures/screenshots/404.png
index 854f19562..22191e354 100644
Binary files a/tests/fixtures/screenshots/404.png and b/tests/fixtures/screenshots/404.png differ
diff --git a/tests/fixtures/screenshots/about_us.png b/tests/fixtures/screenshots/about_us.png
index fb9978e3c..1c2cf278f 100644
Binary files a/tests/fixtures/screenshots/about_us.png and b/tests/fixtures/screenshots/about_us.png differ
diff --git a/tests/fixtures/screenshots/blog/index.png b/tests/fixtures/screenshots/blog/index.png
index 7d1ca5755..e539616db 100644
Binary files a/tests/fixtures/screenshots/blog/index.png and b/tests/fixtures/screenshots/blog/index.png differ
diff --git a/tests/fixtures/screenshots/blog/post.png b/tests/fixtures/screenshots/blog/post.png
index f3b9e904e..08ae503be 100644
Binary files a/tests/fixtures/screenshots/blog/post.png and b/tests/fixtures/screenshots/blog/post.png differ
diff --git a/tests/fixtures/screenshots/careers.png b/tests/fixtures/screenshots/careers.png
index c34fc3498..4bb4de34c 100644
Binary files a/tests/fixtures/screenshots/careers.png and b/tests/fixtures/screenshots/careers.png differ
diff --git a/tests/fixtures/screenshots/clients.png b/tests/fixtures/screenshots/clients.png
index 5c063c980..6be98f70f 100644
Binary files a/tests/fixtures/screenshots/clients.png and b/tests/fixtures/screenshots/clients.png differ
diff --git a/tests/fixtures/screenshots/contact_us.png b/tests/fixtures/screenshots/contact_us.png
index b28c325c7..2626bdc9f 100644
Binary files a/tests/fixtures/screenshots/contact_us.png and b/tests/fixtures/screenshots/contact_us.png differ
diff --git a/tests/fixtures/screenshots/free_consultation.png b/tests/fixtures/screenshots/free_consultation.png
index 9fd3437cd..204df14f1 100644
Binary files a/tests/fixtures/screenshots/free_consultation.png and b/tests/fixtures/screenshots/free_consultation.png differ
diff --git a/tests/fixtures/screenshots/homepage.png b/tests/fixtures/screenshots/homepage.png
index 67e29e71f..74f35bd49 100644
Binary files a/tests/fixtures/screenshots/homepage.png and b/tests/fixtures/screenshots/homepage.png differ
diff --git a/tests/fixtures/screenshots/homepage/_clients.png b/tests/fixtures/screenshots/homepage/_clients.png
index 6631d4160..b5f36fe64 100644
Binary files a/tests/fixtures/screenshots/homepage/_clients.png and b/tests/fixtures/screenshots/homepage/_clients.png differ
diff --git a/tests/fixtures/screenshots/mobile/404.png b/tests/fixtures/screenshots/mobile/404.png
index 4d678924a..67c0789bf 100644
Binary files a/tests/fixtures/screenshots/mobile/404.png and b/tests/fixtures/screenshots/mobile/404.png differ
diff --git a/tests/fixtures/screenshots/mobile/blog/index.png b/tests/fixtures/screenshots/mobile/blog/index.png
index a3e988226..284ce5247 100644
Binary files a/tests/fixtures/screenshots/mobile/blog/index.png and b/tests/fixtures/screenshots/mobile/blog/index.png differ
diff --git a/tests/fixtures/screenshots/mobile/blog/post.png b/tests/fixtures/screenshots/mobile/blog/post.png
index c37c6212b..bdad8b47e 100644
Binary files a/tests/fixtures/screenshots/mobile/blog/post.png and b/tests/fixtures/screenshots/mobile/blog/post.png differ
diff --git a/tests/fixtures/screenshots/mobile/contact_us.png b/tests/fixtures/screenshots/mobile/contact_us.png
index 28f56ef47..b440ee740 100644
Binary files a/tests/fixtures/screenshots/mobile/contact_us.png and b/tests/fixtures/screenshots/mobile/contact_us.png differ
diff --git a/tests/fixtures/screenshots/mobile/nav/hamburger_menu.png b/tests/fixtures/screenshots/mobile/nav/hamburger_menu.png
index 01aa6ac59..5a7da0f11 100644
Binary files a/tests/fixtures/screenshots/mobile/nav/hamburger_menu.png and b/tests/fixtures/screenshots/mobile/nav/hamburger_menu.png differ
diff --git a/tests/fixtures/screenshots/mobile/nav/hamburger_menu/services.png b/tests/fixtures/screenshots/mobile/nav/hamburger_menu/services.png
index 60f86667b..b8a609049 100644
Binary files a/tests/fixtures/screenshots/mobile/nav/hamburger_menu/services.png and b/tests/fixtures/screenshots/mobile/nav/hamburger_menu/services.png differ
diff --git a/tests/fixtures/screenshots/nav/services.png b/tests/fixtures/screenshots/nav/services.png
index a4c3c2405..77e53627d 100644
Binary files a/tests/fixtures/screenshots/nav/services.png and b/tests/fixtures/screenshots/nav/services.png differ
diff --git a/tests/fixtures/screenshots/nav/use_cases.png b/tests/fixtures/screenshots/nav/use_cases.png
index e420c8f4d..aafb1f40a 100644
Binary files a/tests/fixtures/screenshots/nav/use_cases.png and b/tests/fixtures/screenshots/nav/use_cases.png differ
diff --git a/tests/fixtures/screenshots/services/app_web_development.png b/tests/fixtures/screenshots/services/app_web_development.png
index 8e1469651..11221b1f7 100644
Binary files a/tests/fixtures/screenshots/services/app_web_development.png and b/tests/fixtures/screenshots/services/app_web_development.png differ
diff --git a/tests/fixtures/screenshots/services/fractional_cto.png b/tests/fixtures/screenshots/services/fractional_cto.png
index 8210a5856..8902248f9 100644
Binary files a/tests/fixtures/screenshots/services/fractional_cto.png and b/tests/fixtures/screenshots/services/fractional_cto.png differ
diff --git a/tests/mobile_site_test.rb b/tests/mobile_site_test.rb
index 725001e04..db5afc19f 100644
--- a/tests/mobile_site_test.rb
+++ b/tests/mobile_site_test.rb
@@ -62,19 +62,17 @@ def test_careers
def test_top_bar_hamburger_menu
visit "/"
- find(".pp-advanced-menu-mobile-toggle.hamburger").click
- wait_menu_to_render
+ open_mobile_menu
- assert_matches_screenshot "nav/hamburger_menu", wait: nil, stability_time_limit: nil
+ assert_matches_screenshot "nav/hamburger_menu", wait: 1, stability_time_limit: 0.025
end
def test_top_bar_hamburger_menu_services
visit "/"
- find(".pp-advanced-menu-mobile-toggle.hamburger").click
- wait_menu_to_render
+ open_mobile_menu
- find(".pp-menu-toggle", match: :first).click
+ find(".js-sub-menu-opener", match: :first).click
wait_menu_to_render
assert_matches_screenshot "nav/hamburger_menu/services", wait: nil, stability_time_limit: nil
@@ -103,6 +101,11 @@ def test_not_found
private
+ def open_mobile_menu
+ find(".js-mobile-menu-opener").click
+ wait_menu_to_render
+ end
+
def wait_menu_to_render
sleep 1
end
diff --git a/themes/beaver/assets/css/586.css b/themes/beaver/assets/css/586.css
index c4a52daa8..ca930b83a 100644
--- a/themes/beaver/assets/css/586.css
+++ b/themes/beaver/assets/css/586.css
@@ -281,192 +281,6 @@ body a, body .fl-button, body .pp-button, body button, body input[type="submit"]
}
}
-/* Header */
-header.fl-theme-builder-header-scrolled {
- background-color: #FFF;
- box-shadow: 0 1px 25px rgba(57, 63, 72, 0.1);
-}
-
-header.fl-theme-builder-header-shrink ul.menu > li {
- padding: 25px 0;
-}
-
-header ul.menu > li {
- padding-top: 30px;
- padding-bottom: 30px;
-}
-
-header ul.menu > li.menu-item-has-children .menu-item-text .pp-menu-toggle {
- right: -7px !important;
- transition: all 0.3s ease-in-out;
-}
-
-header ul.menu > li.menu-item-has-children:hover .menu-item-text .pp-menu-toggle {
- transform: rotate(180deg);
-}
-
-header ul.menu > li > ul.sub-menu {
- padding: 30px !important;
- transform: translateX(-40%);
- display: grid !important;
- grid-template-columns: 1fr 1fr;
- row-gap: 30px;
- column-gap: 40px;
-}
-
-header ul.menu > li > ul.sub-menu > li > a {
- display: grid;
- grid-template-columns: 26px auto;
- grid-template-rows: auto;
- column-gap: 20px;
- grid-template-areas: "icon menu" "icon description";
- transition: all 0.3s ease-in-out;
-}
-
-header ul.menu > li > ul.sub-menu > li > a .menu-item-text {
- grid-area: menu;
- line-height: 1.25;
-}
-
-header ul.menu > li > ul.sub-menu > li > a .menu-desc {
- font-size: 14px;
- font-weight: 300;
- grid-area: description;
- margin-bottom: 0;
- margin-top: 5px;
- color: #7E7E7E !important;
-}
-
-header ul.menu > li > ul.sub-menu > li > a .menu-image {
- background-repeat: no-repeat;
- background-size: contain;
- width: 27px;
- height: auto;
- grid-area: icon;
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-fractional-cto .menu-desc::before {
- content: "Get on-demand access to a CTO to help guide your technical vision, accelerate team-building, and improve development team operations.";
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-app-web .menu-desc::before {
- content: "Whether you’re a startup building new products or an established business upgrading existing systems, we help deliver positive outcomes.";
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-software-qa .menu-desc::before {
- content: "Accelerate development, streamline release cycles, and eliminate roadblocks with fully-managed software testing & QA services.";
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-fractional-product .menu-desc::before {
- content: "Get on-demand access to a product expert to help design UX, plan & prioritize your roadmap, and manage development schedules.";
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-outsourced-developer .menu-desc::before {
- content: "Increase your development capacity & reduce administrative workloads with pre-trained engineers that are ready to deploy within weeks.";
-}
-
-header ul.menu > li > ul.sub-menu > li.submenu-talent-recruiting .menu-desc::before {
- content: "Scale your development team & simplify the talent acquisition process with top-caliber candidates that are pre-vetted by our team.";
-}
-
-@media (min-width: 861px) {
- header ul.menu > li > ul.sub-menu::before {
- position: absolute;
- width: 0;
- height: 0;
- content: "";
- border-style: solid;
- border-width: 15px 0 15px 15px;
- border-color: transparent transparent transparent #FFF;
- right: unset !important;
- top: -20px !important;
- left: 45% !important;
- transform: rotate(270deg) !important;
- }
-}
-
-@media (max-width: 1115px) {
- header ul.menu > li > ul.sub-menu {
- transform: translateX(-30%);
- }
-
- header ul.menu > li > ul.sub-menu::before {
- left: 33% !important;
- }
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-startup-mvp .menu-desc::before {
- content: "Whether creating an interactive prototype to validate the user experience or building out a Minimum Viable Product (MVP) for initial customers, we help startups accelerate the path from idea to revenue.";
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-salvage-project .menu-desc::before {
- content: "The sooner a software project is salvaged, the better chance it has of being a viable long-term investment. We can help transform your product, providing the visibility, clarity, and control you need to get your project on track.";
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-emergency-cto .menu-desc::before {
- content: "To maintain visibility, accountability, and control over technology outcomes when a critical team member leaves, companies need on-demand access to technical leadership to help keep the status quo for IT intact.";
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-empower-team .menu-desc::before {
- content: "The easiest & fastest way to grow software development capacity is by using a trusted technology partner that can deploy pre-trained developers on-demand without the need for additional supervision.";
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-accelerate-dev .menu-desc::before {
- content: "Our developers are ready to deploy within weeks (not months), giving companies the ability to accelerate their software development process while still maintaining control over engineering quality.";
-}
-
-header ul.menu > li.menu-usecases ul.sub-menu li.submenu-automate-product .menu-desc::before {
- content: "To enable faster product development while eliminating the risks of costly mistakes, companies need access to a reliable product testing & QA resource that can ensure quality at any scale.";
-}
-
-header ul.menu > li.current-page-ancestor > a {
- color: #1A8CFF !important;
-}
-
-header ul.menu > li.current-page-ancestor > .pp-has-submenu-container > a {
- color: #1A8CFF !important;
-}
-
-header ul.menu > li.current-page-ancestor > .pp-has-submenu-container > a .pp-menu-toggle::before {
- border-color: #1A8CFF;
-}
-
-header ul.menu > li.jt-active > a {
- color: #1A8CFF !important;
-}
-
-header ul.menu > li.pp-has-submenu.pp-menu-submenu-right .sub-menu {
- right: unset !important;
-}
-
-header ul.menu > li.menu-company ul.sub-menu, header ul.menu > li.menu-resources ul.sub-menu {
- width: 386px;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon {
- margin-right: 20px;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon a {
- font-size: 20px;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon a i.fa-facebook {
- color: #4267B2;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon a i.fa-instagram {
- color: #CD486B;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon a i.fa-twitter {
- color: #00ACEE;
-}
-
-nav.pp-menu-nav .pp-social-icons span.pp-social-icon a i.fa-github {
- color: #121212;
-}
-
/* Footer */
footer .legal-links .fl-rich-text ul {
padding-left: 0;
diff --git a/themes/beaver/assets/css/navigation.css b/themes/beaver/assets/css/navigation.css
new file mode 100644
index 000000000..a975ca889
--- /dev/null
+++ b/themes/beaver/assets/css/navigation.css
@@ -0,0 +1,413 @@
+.btn,
+.btn:hover {
+ padding: 10px 18px;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ border-radius: 25px;
+ text-decoration: none;
+ white-space: nowrap;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.btn-primary {
+ background-color: #1a8cff;
+ color: #fff !important;
+}
+
+.btn-primary:hover {
+ background-color: #007af4;
+}
+
+.top-panel {
+ padding: 15px 20px 0;
+ position: absolute;
+ width: 100%;
+ z-index: 100;
+
+ @media (max-width: 1024px) {
+ padding: 20px;
+ }
+}
+
+.top-panel .wrapper {
+ max-width: 1280px;
+ width: auto;
+ padding: 0;
+ margin: 0 auto;
+}
+
+.top-panel .content {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.top-panel .logo {
+ width: 200px;
+ height: auto;
+ display: block;
+}
+
+.navigation {
+ @media (max-width: 1024px) {
+ position: fixed;
+ background-color: #fff;
+ top: 0;
+ bottom: 0;
+ width: 320px;
+ right: -320px;
+ z-index: 10;
+ transition: .3s;
+ }
+}
+
+.menu-opener {
+ display: none;
+ width: 30px;
+ height: 19px;
+ border: solid #121212;
+ border-width: 3px 0;
+ position: relative;
+ cursor: pointer;
+
+ @media (max-width: 1024px) {
+ display: block;
+ }
+}
+
+.menu-opener:before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 3px;
+ background-color: #121212;
+ left: 0;
+ top: 50%;
+ margin-top: -1px;
+}
+
+.menu-close {
+ display: none;
+ width: 25px;
+ height: 25px;
+ position: absolute;
+ top: 24px;
+ left: 16px;
+ cursor: pointer;
+}
+
+.menu-close:before {
+ content: '';
+ position: absolute;
+ height: 2px;
+ background-color: #121212;
+ left: 4px;
+ right: 4px;
+ top: 50%;
+ margin-top: -1px;
+ transform: rotate(45deg);
+}
+
+.menu-close:after {
+ content: '';
+ position: absolute;
+ height: 2px;
+ background-color: #121212;
+ left: 4px;
+ right: 4px;
+ top: 50%;
+ margin-top: -1px;
+ transform: rotate(-45deg);
+}
+
+.navigation.-open .menu-close {
+ @media (max-width: 1024px) {
+ display: block;
+ }
+}
+
+.navigation .list {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.navigation.-open + .menu-opener {
+ @media (max-width: 1024px) {
+ display: none;
+ }
+}
+
+.navigation .item {
+ padding: 15px 0;
+ margin-right: 9px;
+ position: relative;
+}
+
+.navigation .item:last-child {
+ margin-right: 0;
+}
+
+.navigation .item .arrow {
+ content: '';
+ position: absolute;
+ top: 50%;
+ right: 0;
+ margin-top: -6px;
+ width: 9px;
+ height: 9px;
+ border-color: #121212;
+ border-style: solid;
+ border-width: 0 2px 2px 0;
+ transform-origin: 70% 70%;
+ transform: rotate(45deg);
+ transition: .3s;
+}
+
+.navigation .link {
+ padding: 15px;
+ display: inline-block;
+ vertical-align: top;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 24px;
+ color: #121212;
+ text-decoration: none;
+ transition: .3s;
+}
+
+ .navigation .-active .link {
+ color: #1a8cff;
+}
+
+.navigation .item.-active .arrow {
+ border-color: #1a8cff;
+}
+
+.navigation .sub-menu {
+ display: none;
+ background-color: #fff;
+ box-shadow: 0 10px 40px rgba(0,0,0,.1);
+ border-radius: 20px;
+ padding: 30px 30px 0;
+ margin: 30px 0 0;
+ position: absolute;
+ top: 100%;
+ margin-top: 0;
+ left: 0;
+ z-index: 10;
+ text-align: left;
+ width: 888px;
+ transform: translateX(-40%);
+ font-size: 0;
+ line-height: 0;
+
+ @media (max-width: 1080px) {
+ width: 720px;
+ }
+}
+
+.navigation .sub-menu:before {
+ position: absolute;
+ content: '';
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-width: 15px 0 15px 15px;
+ border-color: transparent transparent transparent #fff;
+ right: unset!important;
+ top: -20px !important;
+ left: 45% !important;
+ transform: rotate(270deg) !important;
+}
+
+.navigation .sub-item {
+ display: inline-block;
+ vertical-align: middle;
+ width: 50%;
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 300;
+ margin-bottom: 30px;
+}
+
+.navigation .sub-link {
+ display: block;
+ text-decoration: none;
+}
+
+.navigation .sub-image {
+ float: left;
+ background-repeat: no-repeat;
+ background-size: contain;
+ width: 27px;
+ height: auto;
+}
+
+.navigation .sub-holder {
+ overflow: hidden;
+ padding-left: 20px;
+ padding-right: 45px;
+ padding: 0 20px;
+}
+
+.navigation .sub-name {
+ font-weight: 700;
+ font-size: 20px;
+ line-height: 26px;
+ color: #121212;
+ transition: .3s;
+}
+
+.navigation .sub-item:hover .sub-name {
+ color: #1a8cff;
+}
+
+.navigation .sub-text {
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 300;
+ margin-bottom: 0;
+ margin-top: 5px;
+ color: #7e7e7e;
+}
+
+@media (min-width: 1025px) {
+ .navigation .item:hover .sub-menu {
+ display: block;
+ }
+
+ .navigation .item:hover .link {
+ color: #1a8cff;
+ }
+
+ .navigation .item:hover .arrow {
+ transform: rotate(225deg);
+ border-color: #1a8cff;
+ }
+}
+
+@media (max-width: 1024px) {
+ .navigation.-open {
+ right: 0;
+ overflow-y: auto;
+ }
+
+ .navigation:before {
+ position: fixed;
+ content: '';
+ left: 0;
+ right: 320px;
+ top: 0;
+ bottom: 0;
+ background-color: rgba(0,0,0,.8);
+ z-index: -1;
+ opacity: 0;
+ transition: .3s;
+ }
+
+ .navigation.-open:before {
+ opacity: 1;
+ }
+
+ .navigation.-open .list {
+ display: block;
+ padding: 70px 20px 20px;
+ }
+
+ body.-open {
+ overflow: hidden;
+ }
+
+ .navigation .btn {
+ display: block;
+ text-align: center;
+ font-weight: 300;
+ line-height: 22px;
+ font-size: 16px;
+ background-color: #121212;
+ color: #fff;
+ border-radius: 6px;
+ margin-top: 10px;
+ }
+
+ .navigation .item {
+ padding: 0;
+ margin: 0;
+ }
+
+ .navigation .link {
+ padding: 14px 0;
+ }
+
+ .navigation .sub-holder {
+ padding-right: 0;
+ }
+
+ .navigation .sub-menu {
+ width: auto;
+ position: static;
+ padding: 0;
+ margin: 0;
+ transform: none;
+ box-shadow: none;
+ transition: .3s;
+ display: block;
+ max-height: 0;
+ overflow: hidden;
+ }
+
+ .navigation .item.-open .sub-menu {
+ max-height: 350px;
+ }
+
+ .navigation .sub-menu:before,
+ .navigation .sub-menu:after {
+ display: none;
+ }
+
+ .navigation .sub-item {
+ width: auto;
+ display: block;
+ margin-bottom: 15px;
+ }
+
+ .navigation .sub-link {
+ display: flex;
+ align-items: center;
+ }
+
+ .navigation .sub-image {
+ float: none;
+ }
+
+ .navigation .sub-name {
+ font-size: 16px;
+ line-height: 24px;
+ }
+
+ .navigation .sub-text {
+ display: none;
+ }
+
+ .navigation .item .arrow {
+ top: 25px;
+ }
+
+ .navigation .item.-open .arrow {
+ transform: rotate(225deg);
+ }
+
+ .navigation .item:hover .arrow {
+ border-color: inherit;
+ }
+ .navigation .item:hover .link,
+ .navigation .sub-item:hover .sub-name {
+ color: inherit;
+ }
+}
diff --git a/themes/beaver/assets/css/style.css b/themes/beaver/assets/css/style.css
index 32f90b305..101bf2877 100644
--- a/themes/beaver/assets/css/style.css
+++ b/themes/beaver/assets/css/style.css
@@ -1,24 +1,3 @@
-/*
-Theme Name: Beaver Builder Theme
-Theme URI: http://www.wpbeaverbuilder.com/?utm_medium=bb-pro&utm_source=bb-theme&utm_campaign=themes-admin-page
-Version: 1.7.14
-Description: A customizable theme with a simple yet robust set of theme options.
-Author: The Beaver Builder Team
-Author URI: http://www.wpbeaverbuilder.com/?utm_medium=bb-pro&utm_source=bb-theme&utm_campaign=themes-admin-page
-License: GNU General Public License v2.0
-License URI: http://www.gnu.org/licenses/gpl-2.0.html
-Text Domain: fl-automator
-*/
-/*
-
-WARNING! DO NOT EDIT THEME FILES IF YOU PLAN ON UPDATING!
-
-Theme files will be overwritten and your changes will be lost
-when updating. Instead, add custom code in the admin under
-Appearance > Theme Settings > Code or create a child theme.
-
-*/
-
.fl-node-ha6dj4z7r51f:last-child > .fl-col-content {
border-right-width: 0;
}
@@ -31,10 +10,6 @@ Appearance > Theme Settings > Code or create a child theme.
overflow: hidden;
}
-.g-recaptcha {
- float: left;
-}
-
/*Blog*/
.blog {
padding: 135px 0 50px;
diff --git a/themes/beaver/assets/js/bb-theme/pp_advanced_menu.js b/themes/beaver/assets/js/bb-theme/pp_advanced_menu.js
deleted file mode 100644
index 2d90a904e..000000000
--- a/themes/beaver/assets/js/bb-theme/pp_advanced_menu.js
+++ /dev/null
@@ -1,744 +0,0 @@
-class PPAdvancedMenu {
- constructor(settings) {
- this.settingsId = settings.id;
- this.nodeClass = `.fl-node-${settings.id}`;
- this.wrapperClass = `${this.nodeClass} .pp-advanced-menu`;
- this.breakpoints = { large: 1200, medium: 1115, small: 860, custom: 768 };
- this.currentBrowserWidth = window.innerWidth;
- this.offCanvasMenu = null;
- this.$submenus = null;
-
- this._initMenu();
-
- window.addEventListener("resize", (e) => {
- const width = window.innerWidth;
- if (width !== this.currentBrowserWidth) {
- this._initMenu();
- this._clickOrHover();
- this.currentBrowserWidth = width;
- }
- });
-
- document.body.addEventListener("click", (e) => {
- const wrapper = document.querySelector(this.wrapperClass);
- const mobileToggle = wrapper.querySelector(
- ".pp-advanced-menu-mobile-toggle",
- );
-
- if (
- mobileToggle &&
- mobileToggle.classList.contains("pp-active") &&
- "hamburger" !== "expanded"
- ) {
- if (e.target.closest(".fl-module-pp-advanced-menu")) return;
- if (
- e.target.closest(".pp-advanced-menu") &&
- e.target.tagName === "INPUT"
- )
- return;
- if (e.target.classList.contains("pp-menu-close-btn")) return;
- mobileToggle.click();
- }
-
- if (wrapper) {
- wrapper
- .querySelectorAll(".pp-has-submenu")
- .forEach((el) => el.classList.remove("focus", "pp-active"));
- wrapper
- .querySelectorAll(".pp-has-submenu .sub-menu")
- .forEach((el) => el.classList.remove("focus"));
- wrapper
- .querySelectorAll(".pp-has-submenu-container")
- .forEach((el) => el.classList.remove("focus"));
- wrapper
- .querySelectorAll(".pp-menu-toggle")
- .forEach((el) => el.setAttribute("aria-expanded", false));
- }
- });
-
- document.addEventListener("keyup", (e) => {
- if (e.key === "Escape") {
- const wrapper = document.querySelector(this.wrapperClass);
- wrapper
- .querySelectorAll(".pp-has-submenu")
- .forEach((el) => el.classList.remove("focus", "pp-active"));
- wrapper
- .querySelectorAll(".pp-has-submenu .sub-menu")
- .forEach((el) => el.classList.remove("focus"));
- wrapper
- .querySelectorAll(".pp-has-submenu-container")
- .forEach((el) => el.classList.remove("focus"));
- wrapper
- .querySelectorAll(".pp-menu-toggle")
- .forEach((el) => el.setAttribute("aria-expanded", false));
- const focusedToggle = wrapper.querySelector(".pp-menu-toggle.focus");
- if (focusedToggle && focusedToggle.offsetParent !== null) {
- setTimeout(() => focusedToggle.focus(), 100);
- }
- }
- });
- }
-
- _isMobile() {
- return window.innerWidth <= this.breakpoints.small;
- }
-
- _isMedium() {
- return window.innerWidth <= this.breakpoints.medium;
- }
-
- _isCustom() {
- return window.innerWidth <= this.breakpoints.custom;
- }
-
- _isTouch() {
- let prefixes = " -webkit- -moz- -o- -ms- ".split(" ");
- let mq = function (query) {
- return window.matchMedia(query).matches;
- };
- if (
- "ontouchstart" in window ||
- (window.DocumentTouch && document instanceof DocumentTouch)
- ) {
- return true;
- }
- let query = ["(", prefixes.join("touch-enabled),("), "heartz", ")"].join(
- "",
- );
- return mq(query);
- }
-
- _isMenuToggle() {
- return !!(
- ((this._isMobile() && true) ||
- (this._isMedium() && false) ||
- (this._isCustom() && false)) &&
- $(this.nodeClass).find(".pp-advanced-menu-mobile-toggle").is(":visible")
- );
- }
-
- _initMenu() {
- this._setupSubmenu();
- this._menuOnFocus();
- this._submenuOnClick();
- if ($(this.nodeClass).length) {
- this._initMegaMenus();
- }
- let self = this;
- $(this.wrapperClass)
- .find(".pp-has-submenu-container")
- .on("click", function (e) {
- if ("off-canvas" !== "off-canvas" && "off-canvas" !== "full-screen") {
- if (self._isTouch()) {
- if (!$(this).hasClass("first-click")) {
- e.preventDefault();
- $(this).addClass("first-click");
- }
- }
- }
- });
- $(this.wrapperClass)
- .find("li.pp-has-submenu a")
- .on(
- "keyup",
- function (e) {
- if (
- $(e.target).hasClass("pp-menu-toggle") &&
- !$(this.nodeClass)
- .find(".pp-advanced-menu-mobile-toggle")
- .is(":visible")
- ) {
- if (e.which === 1 || e.which === 13 || e.which === undefined) {
- e.preventDefault();
- e.stopPropagation();
- $(e.target).parents("li.pp-has-submenu").toggleClass("pp-active");
- if (
- $(e.target).parents("li.pp-has-submenu").hasClass("pp-active")
- ) {
- $(e.target).attr("aria-expanded", true);
- } else {
- $(e.target).attr("aria-expanded", false);
- }
- }
- }
- }.bind(this),
- );
- if (this._isMenuToggle()) {
- $(this.wrapperClass).off("mouseenter mouseleave");
- this._menuOnClick();
- this._clickOrHover();
- } else {
- $(this.wrapperClass).off("click");
- this._submenuOnRight();
- this._submenuRowZindexFix();
- }
- if ("hamburger" !== "expanded") {
- this._toggleForMobile();
- this._initOffCanvas();
- }
- $(this.wrapperClass)
- .find("li:not(.menu-item-has-children)")
- .on(
- "click",
- "a",
- function (e) {
- if ($(e.target).closest(".pp-menu-search-item").length > 0) {
- return;
- }
- $(this.nodeClass).find(".pp-advanced-menu").removeClass("menu-open");
- $(this.nodeClass).find(".pp-advanced-menu").addClass("menu-close");
- $("html")
- .removeClass("pp-off-canvas-menu-open")
- .removeClass("pp-full-screen-menu-open");
- }.bind(this),
- );
- if ($(this.wrapperClass).find(".pp-menu-search-item").length) {
- this._toggleMenuSearch();
- }
- }
-
- _setupSubmenu() {
- $(this.wrapperClass + " ul.sub-menu").each(function () {
- $(this).closest("li").attr("aria-haspopup", "true");
- });
- }
-
- _menuOnFocus() {
- $(this.nodeClass)
- .off("focus")
- .on(
- "focus",
- "a",
- function (e) {
- let $menuItem = $(e.target).parents(".menu-item").first(),
- $parents = $(e.target).parentsUntil(this.wrapperClass);
- $(".pp-advanced-menu .focus:not(.pp-menu-toggle)").removeClass(
- "focus",
- );
- $menuItem.addClass("focus");
- $parents.addClass("focus");
- }.bind(this),
- )
- .on(
- "focusout",
- "a",
- function (e) {
- if ($(".pp-advanced-menu .focus").hasClass("pp-has-submenu")) {
- $(e.target)
- .parentsUntil(this.wrapperClass)
- .find(".pp-has-submenu-container")
- .removeClass("first-click");
- }
- }.bind(this),
- );
- $(this.nodeClass)
- .off("focus", ".pp-menu-toggle")
- .on(
- "focus",
- ".pp-menu-toggle",
- function (e) {
- $(e.target).addClass("focus");
- }.bind(this),
- )
- .off("blur", ".pp-menu-toggle")
- .on(
- "blur",
- ".pp-menu-toggle",
- function (e) {
- if (
- $(e.target).parents("li.pp-has-submenu.pp-active").length === 0 ||
- $(e.target).parents("li.pp-has-submenu.pp-active").parent("ul.menu")
- .length === 0
- ) {
- $(e.target).removeClass("focus");
- }
- }.bind(this),
- );
- }
-
- _menuOnClick() {
- let self = this;
- let $mainItem = "";
- $(this.wrapperClass)
- .off()
- .on(
- "click.pp-advanced-menu keyup",
- ".pp-has-submenu-container",
- function (e) {
- let isValidEvent =
- e.which === 1 || e.which === 13 || e.which === undefined;
- if (!isValidEvent) {
- return;
- }
- if (e.which === 13 && !$(e.target).hasClass("pp-menu-toggle")) {
- return;
- }
- if (self._isTouch()) {
- if (!$(this).hasClass("first-click")) {
- e.preventDefault();
- $(this).addClass("first-click");
- }
- }
- e.stopPropagation();
- let isMainEl = $(e.target)
- .parents(".menu-item")
- .parent()
- .parent()
- .hasClass("pp-advanced-menu");
- if (isMainEl && $mainItem === "") {
- $mainItem = $(e.target).parents(".menu-item");
- }
- let $link = $(e.target).parents(".pp-has-submenu").first(),
- $subMenu = $link.children(".sub-menu").first(),
- $href = $link
- .children(".pp-has-submenu-container")
- .first()
- .find("> a")
- .attr("href"),
- $subMenuParents = $(e.target).parents(".sub-menu"),
- $activeParent = $(e.target).closest(".pp-has-submenu.pp-active");
- if ($activeParent.length > 0) {
- $activeParent
- .find(".pp-menu-toggle")
- .first()
- .attr("aria-expanded", true);
- } else {
- $activeParent
- .find(".pp-menu-toggle")
- .first()
- .attr("aria-expanded", false);
- }
- if (
- !$subMenu.is(":visible") ||
- $(e.target).hasClass("pp-menu-toggle") ||
- ($subMenu.is(":visible") &&
- (typeof $href === "undefined" || $href === "#"))
- ) {
- if (
- !$(this.wrapperClass).hasClass(
- "pp-advanced-menu-accordion-collapse",
- )
- ) {
- e.preventDefault();
- }
- if ($(e.target).hasClass("pp-menu-toggle")) {
- e.stopPropagation();
- e.preventDefault();
- }
- } else {
- e.stopPropagation();
- window.location.href = $href;
- return;
- }
- if (
- $(this.wrapperClass).hasClass("pp-advanced-menu-accordion-collapse")
- ) {
- if (
- $link.parents(".menu-item").length &&
- !$link.parents(".menu-item").hasClass("pp-active")
- ) {
- $(".menu .pp-active", this.wrapperClass)
- .not($link)
- .removeClass("pp-active");
- } else if (
- $link.parents(".menu-item").hasClass("pp-active") &&
- $link.parent(".sub-menu").length
- ) {
- $(".menu .pp-active", this.wrapperClass)
- .not($link)
- .not($activeParent)
- .removeClass("pp-active");
- }
- $(".sub-menu", this.wrapperClass)
- .not($subMenu)
- .not($subMenuParents)
- .slideUp("normal");
- }
- if ($(self.wrapperClass).find(".sub-menu:visible").length > 0) {
- $(self.wrapperClass)
- .find(".sub-menu:visible")
- .parent()
- .addClass("pp-active");
- }
- $subMenu.slideToggle(400, function () {
- $(e.target)
- .parents(".pp-has-submenu-container")
- .parent()
- .parent()
- .find("> .menu-item.pp-active")
- .removeClass("pp-active");
- if ($mainItem !== "") {
- $mainItem
- .parent()
- .find(".menu-item.pp-active")
- .removeClass("pp-active");
- $(self.wrapperClass)
- .find(".sub-menu")
- .parent()
- .removeClass("pp-active");
- if ($(self.wrapperClass).find(".sub-menu:visible").length > 0) {
- $(self.wrapperClass)
- .find(".sub-menu:visible")
- .parent()
- .addClass("pp-active");
- } else {
- $link.toggleClass("pp-active");
- $mainItem.removeClass("pp-active");
- }
- } else {
- $link.toggleClass("pp-active");
- }
- if (!$subMenu.is(":visible")) {
- $subMenu.parent().removeClass("pp-active");
- $subMenu
- .parent()
- .find("> .pp-has-submenu-container .pp-menu-toggle")
- .attr("aria-expanded", false);
- } else {
- $subMenu
- .parent()
- .find("> .pp-has-submenu-container .pp-menu-toggle")
- .attr("aria-expanded", true);
- }
- });
- }.bind(this),
- );
- }
-
- _submenuOnClick() {
- $(this.wrapperClass + " .sub-menu")
- .off()
- .on(
- "click",
- "a",
- function (e) {
- if ($(e.target).parent().hasClass("focus")) {
- $(e.target).parentsUntil(this.wrapperClass).removeClass("focus");
- }
- }.bind(this),
- );
- }
-
- _clickOrHover() {
- this.$submenus = this.$submenus || $(this.wrapperClass).find(".sub-menu");
- let $wrapper = $(this.wrapperClass),
- $menu = $wrapper.find(".menu");
- let $li = $wrapper.find(".pp-has-submenu");
- if (this._isMenuToggle()) {
- $li.each(function () {
- if (!$(this).hasClass("pp-active")) {
- $(this).find(".sub-menu").fadeOut();
- }
- });
- } else {
- $li.each(function () {
- if (!$(this).hasClass("pp-active")) {
- $(this).find(".sub-menu").css({
- display: "",
- opacity: "",
- });
- }
- });
- }
- }
-
- _submenuOnRight() {
- $(this.wrapperClass)
- .on(
- "mouseenter focus",
- ".pp-has-submenu",
- function (e) {
- if ($(e.currentTarget).find(".sub-menu").length === 0) {
- return;
- }
- let $link = $(e.currentTarget),
- $parent = $link.parent(),
- $subMenu = $link.find(".sub-menu"),
- subMenuWidth = $subMenu.width(),
- subMenuPos = 0,
- winWidth = window.innerWidth;
- if ($link.closest(".pp-menu-submenu-right").length !== 0) {
- $link.addClass("pp-menu-submenu-right");
- } else if ($("body").hasClass("rtl")) {
- subMenuPos = $parent.is(".sub-menu")
- ? $parent.offset().left - subMenuWidth
- : $link.offset().left - subMenuWidth;
- if (subMenuPos <= 0) {
- $link.addClass("pp-menu-submenu-right");
- }
- } else {
- subMenuPos = $parent.is(".sub-menu")
- ? $parent.offset().left + $parent.width() + subMenuWidth
- : $link.offset().left + subMenuWidth;
- if (subMenuPos > winWidth) {
- $link.addClass("pp-menu-submenu-right");
- }
- }
- }.bind(this),
- )
- .on(
- "mouseleave",
- ".pp-has-submenu",
- function (e) {
- $(e.currentTarget).removeClass("pp-menu-submenu-right");
- }.bind(this),
- );
- }
-
- _submenuRowZindexFix(e) {
- $(this.wrapperClass)
- .on(
- "mouseenter",
- "ul.menu > .pp-has-submenu",
- function (e) {
- if ($(e.currentTarget).find(".sub-menu").length === 0) {
- return;
- }
- $(this.nodeClass)
- .closest(".fl-row")
- .find(".fl-row-content")
- .css("z-index", "10");
- }.bind(this),
- )
- .on(
- "mouseleave",
- "ul.menu > .pp-has-submenu",
- function (e) {
- $(this.nodeClass)
- .closest(".fl-row")
- .find(".fl-row-content")
- .css("z-index", "");
- }.bind(this),
- );
- }
-
- _toggleForMobile() {
- let $wrapper = null,
- $menu = null,
- self = this;
- if (this._isMenuToggle()) {
- $wrapper = $(this.wrapperClass);
- $menu = $wrapper.find(".menu");
-
- $wrapper.on("click", ".pp-advanced-menu-mobile-toggle", function (e) {
- $(this).toggleClass("pp-active");
- $menu.slideToggle();
- e.stopPropagation();
- });
-
- $menu.on("click", '.menu-item > a[href*="#"]', function (e) {
- let $href = $(this).attr("href"),
- $targetID = "";
- if ($href !== "#") {
- $targetID = $href.split("#")[1];
- if ($("body").find("#" + $targetID).length > 0) {
- e.preventDefault();
- $(this).toggleClass("pp-active");
- setTimeout(function () {
- $("html, body").animate(
- { scrollTop: $("#" + $targetID).offset().top },
- 1000,
- function () {
- window.location.hash = $targetID;
- },
- );
- }, 500);
- if (!self._isMenuToggle()) {
- $menu.slideToggle();
- }
- }
- }
- });
- } else {
- $wrapper = $(this.wrapperClass);
- $menu = $wrapper.children(".menu");
- $wrapper.find(".pp-advanced-menu-mobile-toggle").removeClass("pp-active");
- $menu.css({ display: "" });
- }
- }
-
- _initMegaMenus() {
- let module = $(this.nodeClass),
- rowContent = module.closest(".fl-row-content"),
- rowWidth = rowContent.width(),
- megas = module.find(".mega-menu"),
- disabled = module.find(".mega-menu-disabled"),
- isToggle = this._isMenuToggle();
- if (isToggle) {
- megas.removeClass("mega-menu").addClass("mega-menu-disabled");
- module.find("li.mega-menu-disabled > ul.sub-menu").css("width", "");
- rowContent.css("position", "");
- } else {
- disabled.removeClass("mega-menu-disabled").addClass("mega-menu");
- module.find("li.mega-menu > ul.sub-menu").css("width", rowWidth + "px");
- rowContent.css("position", "relative");
- }
- }
-
- _initOffCanvas() {
- $("html").addClass("pp-off-canvas-menu-module");
- $("html").addClass("pp-off-canvas-menu-" + "right");
- if (
- null === this.offCanvasMenu &&
- $(this.nodeClass).find(".pp-advanced-menu.off-canvas").length > 0
- ) {
- this.offCanvasMenu = $(this.nodeClass).find(
- ".pp-advanced-menu.off-canvas",
- );
- }
- if (
- $("#pp-advanced-menu-off-canvas-" + this.settingsId).length === 0 &&
- null !== this.offCanvasMenu
- ) {
- this.offCanvasMenu
- .appendTo("body")
- .wrap(
- '