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( - '
', - ); - } - this._toggleMenu(); - } - - _initFullScreen() { - $("html").addClass("pp-full-screen-menu-module"); - this._toggleMenu(); - } - - _toggleMenu() { - let self = this; - let singleInstance = true; - - $(self.nodeClass) - .find(".pp-advanced-menu-mobile-toggle") - .off("click") - .on("click", function () { - if (singleInstance) { - if ($(".pp-advanced-menu.menu-open").length > 0) { - $(".pp-advanced-menu").removeClass("menu-open"); - $("html").removeClass("pp-full-screen-menu-open"); - } - } - if ($(self.nodeClass).find(".pp-advanced-menu").hasClass("menu-open")) { - $(self.nodeClass).find(".pp-advanced-menu").removeClass("menu-open"); - $(self.nodeClass).find(".pp-advanced-menu").addClass("menu-close"); - $("html").removeClass("pp-off-canvas-menu-open"); - $("html").removeClass("pp-full-screen-menu-open"); - } else { - $(self.nodeClass).find(".pp-advanced-menu").addClass("menu-open"); - $("html").addClass("pp-off-canvas-menu-open"); - self.offCanvasMenu.find("nav").attr("tabindex", "0").trigger("focus"); - $(this).attr("tabindex", "-1").trigger("blur"); - } - }); - $(self.nodeClass) - .find(".pp-advanced-menu-mobile-toggle") - .on("keyup", function (e) { - if (13 === e.keyCode || 13 === e.which) { - $(this).trigger("click"); - } - }); - $(self.nodeClass) - .find(".pp-advanced-menu .pp-menu-close-btn, .pp-clear") - .on("click", function () { - $(self.nodeClass).find(".pp-advanced-menu").removeClass("menu-open"); - $(self.nodeClass).find(".pp-advanced-menu").addClass("menu-close"); - $("html").removeClass("pp-off-canvas-menu-open"); - $("html").removeClass("pp-full-screen-menu-open"); - if ( - $(self.nodeClass) - .find(".pp-advanced-menu-mobile-toggle") - .is(":visible") - ) { - setTimeout(function () { - $(self.nodeClass) - .find(".pp-advanced-menu-mobile-toggle") - .attr("tabindex", 0) - .trigger("focus"); - }, 120); - } - if (self.offCanvasMenu && self.offCanvasMenu.length > 0) { - self.offCanvasMenu.find("nav").attr("tabindex", "-1").trigger("blur"); - } - }); - } - - _placeMobileMenuBelowRow() { - if ($(this.nodeClass + "-clone").length) { - return; - } - if ($("html").hasClass("fl-builder-is-showing-toolbar")) { - return; - } - let module = $(this.nodeClass), - clone = module.clone(), - col = module.closest(".fl-col"); - module.find("ul.menu").remove(); - clone.addClass((this.nodeClass + "-clone").replace(".", "")); - clone.find(".pp-advanced-menu-mobile-toggle").remove(); - col.after(clone); - if (module.hasClass("fl-animation")) { - clone.removeClass("fl-animation"); - } - this._menuOnClick(); - } - - _toggleMenuSearch() { - let items = $(this.wrapperClass).find(".pp-menu-search-item"), - self = this; - items.each(function () { - let item = $(this); - let button = item.find("> a"), - form = item.find(".pp-search-form"), - input = item.find(".pp-search-form__input"); - button.on("click", function (e) { - e.preventDefault(); - item.toggleClass("pp-search-active"); - if (item.hasClass("pp-search-active")) { - setTimeout(function () { - input.focus(); - self._focusMenuSearch(input); - }, 100); - } - $("body").on("click.pp-menu-search", self._hideMenuSearch.bind(self)); - }); - input - .on("focus", function () { - form.addClass("pp-search-form--focus"); - }) - .on("blur", function () { - form.removeClass("pp-search-form--focus"); - }); - }); - } - - _hideMenuSearch(e) { - if (e !== undefined) { - if ($(e.target).closest(".pp-menu-search-item").length > 0) { - return; - } - } - $(this.wrapperClass) - .find(".pp-menu-search-item") - .removeClass("pp-search-active"); - $("body").off("click.pp-menu-search"); - } - - _focusMenuSearch($el) { - if ($el[0].setSelectionRange) { - let len = $el.val().length * 2; - setTimeout(function () { - $el[0].setSelectionRange(len, len); - }, 1); - } else { - $el.val($el.val()); - } - } -} - -document.addEventListener("DOMContentLoaded", function () { - new PPAdvancedMenu({ id: "menu" }); -}); diff --git a/themes/beaver/assets/js/navigation.js b/themes/beaver/assets/js/navigation.js new file mode 100644 index 000000000..8e2f15197 --- /dev/null +++ b/themes/beaver/assets/js/navigation.js @@ -0,0 +1,29 @@ +document.addEventListener("DOMContentLoaded", function () { + document.querySelector(".js-mobile-menu-opener").addEventListener( + "click", + function (e) { + document.querySelector(".js-navigation").classList.add("-open"); + document.querySelector("body").classList.add("-open"); + }, + false, + ); + + document.querySelector(".js-mobile-menu-close").addEventListener( + "click", + function (e) { + document.querySelector(".js-navigation").classList.remove("-open"); + document.querySelector("body").classList.remove("-open"); + }, + false, + ); + + if (window.innerWidth < 1024) { + const subMenuOpeners = document.querySelectorAll(".js-sub-menu-opener") + + subMenuOpeners.forEach((subMenuOpener) => { + subMenuOpener.addEventListener("click", function (e) { + e.target.parentElement.classList.toggle("-open"); + }); + }); + } +}); diff --git a/themes/beaver/layouts/_default/baseof.html b/themes/beaver/layouts/_default/baseof.html index 8f90b8ac1..b6e87c88d 100644 --- a/themes/beaver/layouts/_default/baseof.html +++ b/themes/beaver/layouts/_default/baseof.html @@ -64,6 +64,8 @@ + {{ $navCss := resources.Get "css/navigation.css" | minify | fingerprint }} + diff --git a/themes/beaver/layouts/page/index.html b/themes/beaver/layouts/page/index.html index d09255938..22320ed7f 100644 --- a/themes/beaver/layouts/page/index.html +++ b/themes/beaver/layouts/page/index.html @@ -1,1157 +1,1157 @@ -{{ define "header" }} -{{ partial "header/critical/homepage.html" . }} - -{{ $CSS := slice - (resources.Get "css/components/pp_adv_menu.css") - (resources.Get "css/companies.css") - | resources.Concat "css/_critical.css" | postCSS | minify | fingerprint | resources.PostProcess -}} - - -{{ end }} - -{{ define "footer" }} - -{{ end }} - -{{ define "main" }} -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

- Build faster. Scale smarter. -

-
-
-
-
-
-

Streamline development, accelerate delivery, & achieve your product vision with access to turnkey engineering resources backed by world-class technical talent.

-
-
-
- -
-
-
-
-
-
-
-
- - {{ $image := .Page.Resources.Get "build-faster-scale-smarter.jpeg" }} - {{ $title := "Build Faster Scale Smarter" }} - {{ partial "img/homepage.html" (dict "image" $image "title" $title) }} -
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "logo-dark" }} -
-
-
-
-
-
-
-

{{ .Params.overview_first_value }}+

-
-
-
-
-
-
-

{{ .Params.overview_first_name }}

-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-

We helped over 160+ companies that went beyond their goals with our teams

-
-
-
- -
-
- {{ partial "companies.html" . }} -
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/bottom-blue-curved-line" }} -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-

SERVICES

-
-
-
-
-
-

- We optimize technology -

-
-
-
-
-
-

From technical strategy and innovation to talent acquisition and software development, we help empower products and teams at any stage.

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - {{ partial "svg" "theme/fractional-cto" }} -
-
- -
-
-

Get on-demand access to a CTO to help guide your technical vision, accelerate team-building, and improve development team operations.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/app-web" }} -
-
- -
-
-

Whether you’re a startup building new products or an established business upgrading existing systems, we help deliver positive outcomes.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/software-qa" }} -
-
- -
-
-

Accelerate development, streamline release cycles, and eliminate roadblocks with fully-managed software testing & QA services.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/fractional-product" }} -
-
- -
-
-

Get on-demand access to a product expert to help design UX, plan & prioritize your roadmap, and manage development schedules.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/outsourced-developer" }} -
-
- -
-
-

Increase your development capacity & reduce administrative workloads with pre-trained engineers that are ready to deploy within weeks.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/talent-recruiting" }} -
-
- -
-
-

Scale your development team & simplify the talent acquisition process with top-caliber candidates that are pre-vetted by our team.

-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-

TECHNOLOGIES

-
-
-
-
-
-

- Just like you, we choose scalable and flexible technologies -

-
-
-
-
-
-

We provide a diverse mix of experiences across the leading back-end and front-end coding languages.

-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/ruby" }} -
-
-
-
-
-
-
-

Ruby on Rails

-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/python" }} -
-
-
-
-
-
-
-

Python

-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/react" }} -
-
-
-
-
-
-
-

React.js

-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/vue" }} -
-
-
-
-
-
-
-

Vue.js

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/react" }} -
-
-
-
-
-
-
-

React Native

-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "technologies/node" }} -
-
-
-
-
-
-
-

Node.js

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

CLIENTS + CASE STUDIES

-
-
-
-
-
-

- Our client experiences -

-
-
-
-
-
-
-
-
-

We’ve delivered successful project outcomes in a variety of industries, ranging from early-stage startups to established enterprises.

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
- - {{ $pages := where .Site.RegularPages "Type" "clients" }} - {{ $pages = $pages | first 3 }} - - - {{ range $pages }} - {{ .Scratch.Set "logoVariant" "white" }} - {{ partial "clients/grid-single.html" . }} - {{ end }} - -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/bottom-blue-curved-line" }} -
-
-
-
-
-
-
-
-

WHY US?

-
-
-
-
-
-

- We help you create effective digital solutions -

-
-
-
-
-
-

Combining Talent, Technical Strategy, & Robust Development Processes

-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/homepage_prioritize" }} -
-
-
-

We Prioritize You

-
-
-
-

We only work with a few clients at a time & make those selective clients our primary focus. By putting our clients in the spotlight, we drastically improve alignment, increase work quality.

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/homepage_help_adapt" }} -
-
-
-

We Help You Adapt

-
-
-
-

Our team has a tremendous amount of experience helping startups thrive. Whether it’s pre-revenue, seed stage, or post-funding, we can help take your company to the next level from any stage.

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/homepage_reliable" }} -
-
-
-

We Are Reliable

-
-
-
-

Technical oversight and the development process is critical to the success of your project. We provide the structure needed to consistently deliver results on-time and optimize product performance.

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ partial "svg" "theme/homepage_simplify_costs" }} -
-
-
-

We Simplify Costs

-
-
-
-

Without a repeatable system for software development, it’s easy to lose control over both costs & timeline. We provide turnkey solutions that are designed to be faster, cheaper, and easier to manage.

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

- Working with teams, CTOs praise us as “trustworthy” and “reliable” -

-
-
-
-
-
-

Talk with one of our experts to get a technical strategy and planning session for your project at no cost.

-
-
-
- -
-
-
-
-
-
-
-
-
-

USE CASES

-
-
-
-
-
-

- Delivering positive technology outcomes -

-
-
-
-
-
-

We are committed to helping companies confront & conquer new software development challenges, no matter how complicated.

-
-
-
-
-
-
-
- - - - - - -
-
-
- -
-
-

Startup MVP Prototyping & Development

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - - With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • -
-

Learn More

-
-
-
-
- -
-
-

Salvage an Existing Project

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Software products often get handled by many people, teams, and leaders as it ages, which can make it harder to maintain, repair, and improve.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Without the right best practices & documentation, software codebases can become impossible to use without consultants or additional technical resources.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - We can help transform the long-term stability of your software product, providing the visibility, clarity, and control you need to get your project on track.
  • -
-

Learn More

-
-
-
-
- -
-
-

Emergency CTO Leadership

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Technology & software products need constant supervision from someone with the knowledge to reduce errors, spot problems, & prevent downtime.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a company loses technical leadership or reaches unfamiliar territory, it’s critical to find the right technical expertise as soon as possible.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to a fractional CTO, you can maintain best practices, hire developers faster, & streamline operations at a fraction of the cost of a full-time CTO
  • -
-

Learn More

-
-
-
-
- -
-
-

Empower an Existing Engineering Team

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Even a talented development team can become overwhelmed by customer complaints, technical issues, or aggressive deadlines.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a core development team is rushed or overworked, companies risk losing control over product quality & missing critical software errors.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can help support your core team and make it easier for them to adapt as the environment changes.
  • -
-

Learn More

-
-
-
-
- -
-
-

Accelerate Development & Maximize Capacity

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Software development is a delicate balancing act between speed & quality, which can be difficult to achieve.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Any team can build a high-quality product with enough time, but very few teams can deliver a high level of quality at a competitive pace.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can accelerate development speed while maintaining product quality.
  • -
-

Learn More

-
-
-
-
- -
-
-

Automate Product QA & Testing

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - The larger a software product grows, the harder it becomes to maintain, improve, and optimize it over time without issues emerging.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Without an effective system for ongoing product testing, it’s easy for hidden issues to devolve into an uncontrollable, unsustainable situation.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With our fully-managed software testing & QA services, you can accelerate development cycles while minimizing costly mistakes & product errors.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
-
- {{ partial "page/testimonials.html" . }} -
-
-
-
-
-
-
-
-
-

- Let’s get started now -

-
-
-
-
-
-

Get in touch with one of our experts to get a technical strategy & planning session for your project at no cost.

-
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
- -
- - -
-
-
-
-{{ end }} +{{ define "header" }} +{{ partial "header/critical/homepage.html" . }} + +{{ $CSS := slice + (resources.Get "css/components/pp_adv_menu.css") + (resources.Get "css/companies.css") + | resources.Concat "css/_critical.css" | postCSS | minify | fingerprint | resources.PostProcess +}} + + +{{ end }} + +{{ define "footer" }} + +{{ end }} + +{{ define "main" }} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ Build faster. Scale smarter. +

+
+
+
+
+
+

Streamline development, accelerate delivery, & achieve your product vision with access to turnkey engineering resources backed by world-class technical talent.

+
+
+
+ +
+
+
+
+
+
+
+
+ + {{ $image := .Page.Resources.Get "build-faster-scale-smarter.jpeg" }} + {{ $title := "Build Faster Scale Smarter" }} + {{ partial "img/homepage.html" (dict "image" $image "title" $title) }} +
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "logo-dark" }} +
+
+
+
+
+
+
+

{{ .Params.overview_first_value }}+

+
+
+
+
+
+
+

{{ .Params.overview_first_name }}

+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+

We helped over 160+ companies that went beyond their goals with our teams

+
+
+
+ +
+
+ {{ partial "companies.html" . }} +
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/bottom-blue-curved-line" }} +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+

SERVICES

+
+
+
+
+
+

+ We optimize technology +

+
+
+
+
+
+

From technical strategy and innovation to talent acquisition and software development, we help empower products and teams at any stage.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {{ partial "svg" "theme/fractional-cto" }} +
+
+ +
+
+

Get on-demand access to a CTO to help guide your technical vision, accelerate team-building, and improve development team operations.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/app-web" }} +
+
+ +
+
+

Whether you’re a startup building new products or an established business upgrading existing systems, we help deliver positive outcomes.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/software-qa" }} +
+
+ +
+
+

Accelerate development, streamline release cycles, and eliminate roadblocks with fully-managed software testing & QA services.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/fractional-product" }} +
+
+ +
+
+

Get on-demand access to a product expert to help design UX, plan & prioritize your roadmap, and manage development schedules.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/outsourced-developer" }} +
+
+ +
+
+

Increase your development capacity & reduce administrative workloads with pre-trained engineers that are ready to deploy within weeks.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/talent-recruiting" }} +
+
+ +
+
+

Scale your development team & simplify the talent acquisition process with top-caliber candidates that are pre-vetted by our team.

+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+

TECHNOLOGIES

+
+
+
+
+
+

+ Just like you, we choose scalable and flexible technologies +

+
+
+
+
+
+

We provide a diverse mix of experiences across the leading back-end and front-end coding languages.

+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/ruby" }} +
+
+
+
+
+
+
+

Ruby on Rails

+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/python" }} +
+
+
+
+
+
+
+

Python

+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/react" }} +
+
+
+
+
+
+
+

React.js

+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/vue" }} +
+
+
+
+
+
+
+

Vue.js

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/react" }} +
+
+
+
+
+
+
+

React Native

+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "technologies/node" }} +
+
+
+
+
+
+
+

Node.js

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

CLIENTS + CASE STUDIES

+
+
+
+
+
+

+ Our client experiences +

+
+
+
+
+
+
+
+
+

We’ve delivered successful project outcomes in a variety of industries, ranging from early-stage startups to established enterprises.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ + {{ $pages := where .Site.RegularPages "Type" "clients" }} + {{ $pages = $pages | first 3 }} + + + {{ range $pages }} + {{ .Scratch.Set "logoVariant" "white" }} + {{ partial "clients/grid-single.html" . }} + {{ end }} + +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/bottom-blue-curved-line" }} +
+
+
+
+
+
+
+
+

WHY US?

+
+
+
+
+
+

+ We help you create effective digital solutions +

+
+
+
+
+
+

Combining Talent, Technical Strategy, & Robust Development Processes

+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/homepage_prioritize" }} +
+
+
+

We Prioritize You

+
+
+
+

We only work with a few clients at a time & make those selective clients our primary focus. By putting our clients in the spotlight, we drastically improve alignment, increase work quality.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/homepage_help_adapt" }} +
+
+
+

We Help You Adapt

+
+
+
+

Our team has a tremendous amount of experience helping startups thrive. Whether it’s pre-revenue, seed stage, or post-funding, we can help take your company to the next level from any stage.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/homepage_reliable" }} +
+
+
+

We Are Reliable

+
+
+
+

Technical oversight and the development process is critical to the success of your project. We provide the structure needed to consistently deliver results on-time and optimize product performance.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ partial "svg" "theme/homepage_simplify_costs" }} +
+
+
+

We Simplify Costs

+
+
+
+

Without a repeatable system for software development, it’s easy to lose control over both costs & timeline. We provide turnkey solutions that are designed to be faster, cheaper, and easier to manage.

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ Working with teams, CTOs praise us as “trustworthy” and “reliable” +

+
+
+
+
+
+

Talk with one of our experts to get a technical strategy and planning session for your project at no cost.

+
+
+
+ +
+
+
+
+
+
+
+
+
+

USE CASES

+
+
+
+
+
+

+ Delivering positive technology outcomes +

+
+
+
+
+
+

We are committed to helping companies confront & conquer new software development challenges, no matter how complicated.

+
+
+
+
+
+
+
+ + + + + + +
+
+
+ +
+
+

Startup MVP Prototyping & Development

+
    +
  • + {{ partial "svg" "theme/homepage_tick_circle" }} + + With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • +
  • + {{ partial "svg" "theme/homepage_tick_circle" }} + Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • +
  • + {{ partial "svg" "theme/homepage_tick_circle" }} + We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • +
+

Learn More

+
+
+
+
+ +
+
+

Salvage an Existing Project

+
    +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Software products often get handled by many people, teams, and leaders as it ages, which can make it harder to maintain, repair, and improve.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Without the right best practices & documentation, software codebases can become impossible to use without consultants or additional technical resources.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + We can help transform the long-term stability of your software product, providing the visibility, clarity, and control you need to get your project on track.
  • +
+

Learn More

+
+
+
+
+ +
+
+

Emergency CTO Leadership

+
    +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Technology & software products need constant supervision from someone with the knowledge to reduce errors, spot problems, & prevent downtime.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + When a company loses technical leadership or reaches unfamiliar territory, it’s critical to find the right technical expertise as soon as possible.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + With access to a fractional CTO, you can maintain best practices, hire developers faster, & streamline operations at a fraction of the cost of a full-time CTO
  • +
+

Learn More

+
+
+
+
+ +
+
+

Empower an Existing Engineering Team

+
    +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Even a talented development team can become overwhelmed by customer complaints, technical issues, or aggressive deadlines.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + When a core development team is rushed or overworked, companies risk losing control over product quality & missing critical software errors.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + With access to on-demand engineering resources, you can help support your core team and make it easier for them to adapt as the environment changes.
  • +
+

Learn More

+
+
+
+
+ +
+
+

Accelerate Development & Maximize Capacity

+
    +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Software development is a delicate balancing act between speed & quality, which can be difficult to achieve.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Any team can build a high-quality product with enough time, but very few teams can deliver a high level of quality at a competitive pace.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + With access to on-demand engineering resources, you can accelerate development speed while maintaining product quality.
  • +
+

Learn More

+
+
+
+
+ +
+
+

Automate Product QA & Testing

+
    +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + The larger a software product grows, the harder it becomes to maintain, improve, and optimize it over time without issues emerging.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + Without an effective system for ongoing product testing, it’s easy for hidden issues to devolve into an uncontrollable, unsustainable situation.
  • +
  • + + {{ partial "svg" "theme/homepage_tick_circle" }} + With our fully-managed software testing & QA services, you can accelerate development cycles while minimizing costly mistakes & product errors.
  • +
+

Learn More

+
+
+
+
+
+
+
+
+
+
+ {{ partial "page/testimonials.html" . }} +
+
+
+
+
+
+
+
+
+

+ Let’s get started now +

+
+
+
+
+
+

Get in touch with one of our experts to get a technical strategy & planning session for your project at no cost.

+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+{{ end }} diff --git a/themes/beaver/layouts/partials/page/header.html b/themes/beaver/layouts/partials/page/header.html index 2db760a37..f20566381 100644 --- a/themes/beaver/layouts/partials/page/header.html +++ b/themes/beaver/layouts/partials/page/header.html @@ -1,121 +1,11 @@ -