diff --git a/_data/faq.yml b/_data/faq.yml index fd35e1500..fb44c5746 100644 --- a/_data/faq.yml +++ b/_data/faq.yml @@ -104,8 +104,8 @@ updates for our work over the long term.

- To further enhance our products, we offer limited consulting services . We directly collaborate with your team to create exceptional infrastructure, - and we then provide continuous support and maintenance for that infrastructure. In fact, Gruntwork is a 100% bootstrapped company + To further enhance our products, we offer limited consulting services . We directly collaborate with your team to create exceptional infrastructure, + and we then provide continuous support and maintenance for that infrastructure. In fact, Gruntwork is a 100% bootstrapped company where we developed the majority of our products through consulting engagements.

@@ -204,12 +204,10 @@ - question: Can I try Gruntwork Services before committing to an annual subscription? answer: |

- There are three ways you can try out Gruntwork Services with no commitment: -

    -
  1. You can try out parts of the IaC Library for free by checking out our open source modules.
  2. -
  3. Before any contracts are signed, we'd be happy to do a walkthrough of our code, training, and process.
  4. -
  5. We offer a 30-day money-back guarantee, so if for any reason you're not happy after signing up, we'll refund 100% of your money in the first 30 days. Check out "What if I want to cancel my Gruntwork Subscription?" for more info.
  6. -
+ Yes! If you’re not sure whether a Gruntwork subscription is right for you, we recommend signing up for the Team subscription on a monthly contract. That way, you pay as you go, and aren’t locked into an annual contract if you decide Gruntwork isn’t a good fit for your needs. +

+

+ We can also do extensive walkthroughs in a live discussion with you to help you evaluate if Gruntwork is right for you.

- question: What if I want to use the code with my own customers? @@ -252,19 +250,22 @@ - question: Is an annual subscription required? answer: |

- With the exception of the Reference Architecture, all our products require an annual subscription, however we can bill you either annually or monthly. Why an annual subscription? We give you access to all the code in the IaC Library, and we let you keep that code even if you cancel. If we didn't have the annual subscription requirement, customers could sign up for one day, get access to all the code, and cancel immediately. + No. With our team subscription, you can choose between a monthly or annual contract.

- However, we offer a 30-day money back guarantee, so if for any reason you're not happy after signing up, we'll let you out of the annual subscription and refund 100% of your money in the first 30 days. Check out "What if I want to cancel my Gruntwork Subscription?" for more info. + Our Enterprise subscription is designed for larger organizations and does require an annual contract. Contact our sales team to find out which solution best meets your needs.

- question: What if I want to cancel my Gruntwork Subscription? answer: |

- We offer a 30-day money-back guarantee. You can try out the Gruntwork Subscription, Professional Support, and the Reference Architecture, and if you're not happy for any reason, you can cancel within the first 30 days, and we'll let you out of the annual subscription and refund 100% of your money. + You can cancel at any time and your subscription will end when your monthly or annual term expires. +

+

+ As long as you subscribe for at least one 12-month period, you can keep using all the Gruntwork Library code you previously accessed, even if you cancel the subscription. However, you will lose access to new features, updates, and support.

- Note that if you cancel in the first 30 days, you lose the license to the code in the Infrastructure as Code Library, so you must stop using it and delete any references to it; on the other hand, if you do stick with the annual subscription, and cancel after at least one year, you can keep using all the code you had been using up to that point. See "What happens to my code if I cancel my subscription?" for more info. + See "What happens to my code if I cancel my subscription?" for more info.

- question: What happens to my code if I cancel my subscription? @@ -278,6 +279,5 @@ - question: If I require product customization or consulting support, what options are provided? answer: |

- The best way to personalize and customize products is through our limited consulting services. We are ready to collaborate closely with you to tailor our solutions according to your specific objectives. Please reach out to our team for a detailed discussion of your requirements and to explore the available options for the consulting support. + The best way to personalize and customize products is through our limited consulting services. We are ready to collaborate closely with you to tailor our solutions according to your specific objectives. Please reach out to our team for a detailed discussion of your requirements and to explore the available options for the consulting support.

- \ No newline at end of file diff --git a/_data/pricing-table-terragrunt.yml b/_data/pricing-table-terragrunt.yml new file mode 100644 index 000000000..6bbcf1f1f --- /dev/null +++ b/_data/pricing-table-terragrunt.yml @@ -0,0 +1,31 @@ +- title: Terragrunt Support + subtitle: 'no' + divider: 'no' + rows: + - row: '
Technical contacts are members of your team that can submit support requests via email.
Number of technical contacts
' + standard: '2' + enterprise: '5' + - row: Bugfix & General Support + standard: 'yes' + enterprise: 'yes' + - row: Clouds other than AWS + standard: 'yes' + enterprise: 'yes' + - row: Modules other than Gruntwork + standard: 'yes' + enterprise: 'yes' + - row: Guidance on non-standard patterns + standard: 'yes' + enterprise: 'yes' + - row: Prioritized feature requests + standard: 'yes' + enterprise: 'yes' + - row: Older versions of Terragrunt + standard: 'yes' + enterprise: 'yes' + - row: Support SLA + standard: '2-day' + enterprise: '1-day' + - row: Private Slack Channel + standard: 'no' + enterprise: 'yes' diff --git a/_data/pricing-table.yml b/_data/pricing-table.yml index 1e2db2e1d..9b72426de 100644 --- a/_data/pricing-table.yml +++ b/_data/pricing-table.yml @@ -1,133 +1,239 @@ -- title: Gruntwork Landing Zone - tooltip: +- title: Initial Setup + subtitle: 'no' + divider: 'no' + +- title: IaC Account Foundations + subtitle: 'yes' + divider: 'no' rows: - - row: 'Terraform account baselines' - tooltip: Automatically apply security baselines, defined in Terraform, to all your AWS accounts, ensuring that all of your accounts are properly configured with AWS CloudTrail, AWS Config, AWS Config rules, Amazon GuardDuty, Macie, IAM roles, IAM Access Analyzer, VPCs, and more. + - row: AWS multi-account setup standard: 'yes' enterprise: 'yes' - - row: 'Monitoring: CloudTrail, AWS Config' - tooltip: Configure monitoring and audit logging for all your AWS accounts using CloudTrail and AWS Config. + - row: '
Use Control Tower as a single pane of glass to see all your accounts and manage their controls.
Control Tower configuration
' standard: 'yes' enterprise: 'yes' - - row: 'Networking: VPCs, subnets, etc' - tooltip: Set up best-practice networking infrastructure for all of your AWS accounts, including VPCs, subnets, route tables, Internet Gateways, NAT Gateways, VPC endpoints, NACLs, and more. + - row: '
We’ll set you up with best-practice IaC folder structure and infrastructure patterns.
IaC foundations
' standard: 'yes' enterprise: 'yes' - - row: 'Scanning: GuardDuty, Macie' - tooltip: Configure security scanning for all your AWS accounts using GuardDuty and Macie. + - row: Tagging & labeling enforcement standard: 'yes' enterprise: 'yes' - - row: 'IAM: users, roles, groups' - tooltip: Use IAM users, roles, and groups for authentication and authorization in your AWS accounts. + - row: AWS multi-account setup standard: 'yes' enterprise: 'yes' - - row: 'Control Tower integration ' - tooltip: Use Control Tower to create and manage your AWS accounts, OUs, and controls, while under the hood, managing everything as code using Terraform. - standard: 'no' + - row: CIS-compliant AWS account baselines + standard: 'yes' enterprise: 'yes' - - row: 'AWS Identity Center (SSO)' - tooltip: Use Single Sign On (SSO) with an existing Identity Provider (e.g., Active Directory, Google, Okta) for authentication and authorization in your AWS accounts. + - row: Custom Account Factory baselines standard: 'no' + enterprise: 'yes' + + +- title: Gruntwork Component Setup + subtitle: 'yes' + divider: 'no' + rows: + - row: Gruntwork Pipelines setup + standard: 'yes' + enterprise: 'yes' + - row: 'Gruntwork Patcher setup
BETA
' + standard: 'yes' enterprise: 'yes' - - row: 'Guard Rails: SCPs, Config Rules' - tooltip: Configure guard rails for all your AWS accounts using Service Control Policies (SCPs) and AWS Config Rules. + +- title: Network configuration + subtitle: 'yes' + divider: 'yes' + rows: + - row: '
The standard network configuration provides an app VPC with multiple public & private subnet tiers including IGWs, public NGWs, and NACLs.
Standard secure network
configuration
' + standard: 'yes' + enterprise: 'yes' + - row: '
Work with a Gruntwork Solutions Architect to design a network that suits your needs, with features such as an AWS Transit Gateway, inspection VPC, AWS Firewall manager, RAM networks, zero-trust networks, IPAM, IPv6, and more.
Custom network design
' standard: 'no' enterprise: 'yes' -- title: Gruntwork Pipelines - tooltip: +- title: Account Factory + subtitle: 'no' + divider: 'yes' rows: - - row: 'Secure, isolated workers' - tooltip: Instead of directly giving your CI server admin-level permissions needed to launch arbitrary infrastructure, Gruntwork Pipelines enables a secure infrastructure pipeline by granting the sensitive permissions solely to an isolated worker that exposes a limited, locked down interface. + - row: Vend individual AWS accounts standard: 'yes' enterprise: 'yes' - - row: 'Plan - and - apply - workflows' - tooltip: Automatically run terraform/terragrunt 'plan' on PRs and 'apply' on merge. + - row: Centralized account approval workflow standard: 'yes' enterprise: 'yes' - - row: 'Approval workflows' - tooltip: Automatically require approvals for terraform/terragrunt 'plan' output before an 'apply' is allowed. Includes Slack integration for a ChatOps driven approach. + - row: CIS-compliant AWS baselines for all vended accounts standard: 'yes' enterprise: 'yes' - - row: 'Promotion workflows' - tooltip: 'Automatically promote releases across your environments: e.g., dev -> stage -> prod.' + - row: Gruntwork Pipelines auto-configured for all vended accounts + standard: 'yes' + enterprise: 'yes' + - row: 'Gruntwork Patcher
BETA
auto-configured for all vended accounts' + standard: 'yes' + enterprise: 'yes' + - row: Promotion workflows auto-configured for all vended accounts + standard: 'yes' + enterprise: 'yes' + - row: '
Vend a set of accounts, such as dev/stage/prod, in a single, automated operation.
Multi-account vending
' + standard: 'no' + enterprise: 'yes' + - row: '
Vend a separate infrastructure repository for each team/project.
Multi-repo vending for project/teams
' + standard: 'no' + enterprise: 'yes' + - row: Customized baselines for all vended accounts standard: 'no' enterprise: 'yes' -- title: 'Patcher' - tooltip: +- title: Pipelines + subtitle: 'no' + divider: 'yes' rows: - - row: 'CLI-driven updates' - tooltip: Use the patcher CLI to automatically update your Terraform and Terragrunt dependencies. + - row: Pull request driven workflow + standard: 'yes' + enterprise: 'yes' + - row: GitOps infrastructure deployments standard: 'yes' enterprise: 'yes' - - row: 'Patch breaking changes' - tooltip: When a new release contains breaking changes, Patcher can automatically apply patches from the maintainer to transform your code to work around the backward compatibility. + - row: Terragrunt plan/apply/destroy standard: 'yes' enterprise: 'yes' - - row: 'Automated (PR-driven) updates' - tooltip: When new releases come out, get automated pull-requests to update you to the new version. + - row: '
Due to licensing restrictions, we can only support Terraform 1.5.x and earlier.
Works with OpenTofu and Terraform
' + standard: 'yes' + enterprise: 'yes' + - row: '
Access AWS with automatically managed and rotated credentials (instead of manually managed, long-lived secrets).
Use OIDC for AWS authentication
' standard: 'no' + enterprise: 'no' + - row: '
Automatically capture the underlying user who triggered the CI/CD pipeline in the IAM role session name, so you can audit all API calls in CloudTrail.
Audit logging with intelligent pass-through
' + standard: 'yes' + enterprise: 'yes' + - row: '
Vend a set of accounts, such as dev/stage/prod, in a single, automated operation.
Multi-account vending
' + standard: 'yes' enterprise: 'yes' + - row: '
We provide a single place and tooling to vend IAM roles that give each app team the permissions they need.
Centralized IAM role provisioning
' + standard: 'yes' + enterprise: 'yes' + - row: '
Automatically provision least-privilege IAM roles for use with OIDC, limiting each team to only the GitHub repos, AWS accounts, and AWS resources they should have access to.
Least-privilege OIDC roles
' + standard: 'yes' + enterprise: 'yes' + - row: '
A “team” refers to a unique git repo used to manage infrastructure-as-code. Only git repos that use Gruntwork Pipelines require a team license.
Number of team licenses included
' + standard: '1' + enterprise: '2+' -- title: IaC Library - tooltip: +- title: 'Patcher
BETA
' + subtitle: 'no' + divider: 'yes' rows: - - row: 'Orchestration: ECS, EKS, EC2, ASG' - tooltip: Reusable, battle-tested Terraform modules for deploying application workloads on top of ECS, EKS, EC2, and ASGs. + - row: '
Keep your infrastructure modules up to date with automatic PRs for any releases of module dependencies.
Automatic PRs for module dependency updates
' standard: 'yes' enterprise: 'yes' - - row: 'Data stores: RDS, ElastiCache, S3' - tooltip: Reusable, battle-tested Terraform modules for deploying data stores such as RDS, ElastiCache, and S3. + - row: '
Keep your live infrastructure up to date with automatic PRs for any releases of module dependencies.
Automatic PRs for live infrastructure updates
' + standard: 'yes' + enterprise: 'yes' + - row: '
Safely and automatically propagate changes from dev to stage to prod, building confidence at each step.
Promote changes across
environments
' + standard: 'yes' + enterprise: 'yes' + +- title: Library + subtitle: 'no' + divider: 'no' + rows: + - row: Library user licenses + standard: '5
Upgradeable to a maximum of 30' + enterprise: '20+' + - row: Machine user licenses + standard: '2' + enterprise: '4+' + - row: Commercial maintenance for all modules standard: 'yes' enterprise: 'yes' - - row: 'Analytics: Elasticsearch, Kafka' - tooltip: Reusable, battle-tested Terraform modules for deploying analytics, search, and streaming tools such as Elasticsearch, Kafka, and Kinesis. + - row: Thoroughly tested using Terratest & Terrascan standard: 'yes' enterprise: 'yes' - - row: 'Serverless: Lambda, API Gateway' - tooltip: Reusable, battle-tested Terraform modules for deploying serverless workloads on top of Lambda and API Gateway. + - row: '
Due to licensing restrictions, we can only support Terraform 1.5.x and earlier.
Compatible with OpenTofu, Terraform, & Terragrunt
' standard: 'yes' enterprise: 'yes' - - row: 'Self-hosting (repo-copier)' - tooltip: Use the repo-copier CLI tool to copy all the Terraform code to your own version control system, including updating all internal cross-references and authentication details. + - row: Self-hosted private mirror of Gruntwork Library standard: 'no' enterprise: 'yes' +- title: AWS Foundations + subtitle: 'yes' + divider: 'no' + rows: + - row: '
Our VPC module is compliant with the CIS AWS Foundations Benchmark
CIS-compliant VPC
' + standard: 'yes' + enterprise: 'yes' + - row: '
Our account baseline module is compliant with the CIS AWS Foundations Benchmark
CIS-compliant Account Baseline
' + standard: 'yes' + enterprise: 'yes' + - row: 'Dual Stack/IPv6
BETA
' + standard: 'yes' + enterprise: 'yes' + +- title: EKS & Running Apps + subtitle: 'yes' + divider: 'no' + rows: + - row: Robust EKS cluster support + standard: 'yes' + enterprise: 'yes' + - row: CArgoCD for EKS GitOps + standard: 'yes' + enterprise: 'yes' + - row: AWS ECS, ASG, EC2, and Lambda + standard: 'yes' + enterprise: 'yes' + - row: Application and Network load balancing + standard: 'yes' + enterprise: 'yes' + +- title: Storing Data & Event Streaming + subtitle: 'yes' + divider: 'yes' + rows: + - row: RDS, Aurora + standard: 'yes' + enterprise: 'yes' + - row: S3 + standard: 'yes' + enterprise: 'yes' + - row: EFS + standard: 'yes' + enterprise: 'yes' + - row: ElastiCache + standard: 'yes' + enterprise: 'yes' + - row: MSK, SQS, SNS, Kinesis, Redshift + standard: 'yes' + enterprise: 'yes' - title: Support - tooltip: + subtitle: 'no' + divider: 'no' rows: - - row: 'Community support' - tooltip: Get support from the Gruntwork team and other Gruntwork customers via the Gruntwork Knowledge Base. + - row: '
Technical contacts are members of your team that can submit support requests via email.
Number of technical contacts
' + standard: '2' + enterprise: '5+' + - row: '
Gruntwork has partnered with KodeKloud to give your team access to over 75 best-in-class DevOps training courses.
KodeKloud training licenses
' + standard: '2' + enterprise: '5+' + - row: Basic Terragrunt support standard: 'yes' enterprise: 'yes' - - row: 'Enterprise support' - tooltip: Get support via email, a private shared Slack channel, and scheduled video calls directly from the Gruntwork team. Includes SLAs on response times. - standard: 'no' + - row: Bugfix & General Support + standard: 'yes' + enterprise: 'yes' + - row: Email Support + standard: 'yes' + enterprise: 'yes' + - row: Knowledge Base + standard: 'yes' + enterprise: 'yes' + - row: Community Slack + standard: 'yes' enterprise: 'yes' - - row: 'Guided onboarding' - tooltip: Get hands-on help, onboarding, and guidance from the Gruntwork team in setting up your DevOps Foundations. + - row: Private Slack Channel standard: 'no' enterprise: 'yes' - - row: 'Consulting' - tooltip: Gruntwork works directly with your team to build world-class infrastructure, which we then support & maintain on an ongoing basis. + - row: Support SLA standard: 'no' - enterprise: 'available' \ No newline at end of file + enterprise: '1-Day' diff --git a/assets/css/pages/pricing.scss b/assets/css/pages/pricing.scss index d53cc53df..7f70db2dc 100644 --- a/assets/css/pages/pricing.scss +++ b/assets/css/pages/pricing.scss @@ -1,5 +1,4 @@ .page-pricing { - .pricing-table { ul { padding: 0; @@ -19,7 +18,7 @@ } .badge { - background-color: #2B3745; + background-color: #2b3745; border-radius: 5px; padding: 4px 8px; color: #bfbfbf; @@ -58,7 +57,7 @@ .light { font-size: 16px; } - + &.pricing-card-wrapper { grid-template-columns: 1fr 1fr; .empty-grid-col { @@ -68,7 +67,7 @@ } @media screen and (max-width: $screen-sm) { - grid-template-columns: 1fr 1.15fr .85fr; + grid-template-columns: 1fr 1.15fr 0.85fr; .light { font-size: 14px; line-height: 20px; @@ -92,8 +91,10 @@ width: 100%; justify-content: stretch; } - - form, button, .btn { + + form, + button, + .btn { width: 100%; max-width: 100%; } @@ -112,15 +113,25 @@ @media screen and (max-width: $screen-sm) { margin-bottom: 7px; } - + @media screen and (max-width: 590px) { margin-bottom: 5px; } } } + .medium-price{ + margin-top: 24px; + margin-bottom: 1px; + } + .plans-heading { padding: 0 12px; + z-index: 1; + position: sticky; + top: 0; + background: #1d252f; + h2 { margin-bottom: 18px; font-size: 36px; @@ -139,10 +150,11 @@ } } - .plans-features { + .plans-features, .plans-features-terragrunt { hr { margin: 0; - border-color: #1A4C60; + border-color: #1a4c60; + border-width: 1px; &.with-margin { margin: 18px 0 12px; } @@ -159,7 +171,7 @@ appearance: none; width: 17px; /* Adjust the size of the checkbox */ height: 17px; /* Adjust the size of the checkbox */ - border: 1px solid #284B5D; /* Default border color */ + border: 1px solid #284b5d; /* Default border color */ border-radius: 3px; outline: none; margin-right: 12px; @@ -181,8 +193,8 @@ } &:checked { - background-color: #03C5E7; - border-color: #03C5E7; + background-color: #03c5e7; + border-color: #03c5e7; &::before { opacity: 1; @@ -232,7 +244,7 @@ display: flex; flex-direction: column; align-items: center; - justify-content: flex-end; + justify-content: center; } .popular-badge { @@ -242,7 +254,7 @@ padding: 4px 8px; line-height: normal; font-weight: 700; - border: 1px solid #1A4C60; + border: 1px solid #1a4c60; border-radius: 4px; @media screen and (max-width: $screen-md) { @@ -256,22 +268,136 @@ margin-bottom: 10px; } } + .pricing-switch-container{ + display: flex; + padding: 34px; + } + .switches-container { + width: 480px; + display: flex; + padding: 10px 0; + position: relative; + background: #262E3A; + line-height: 3rem; + border-radius: 4px; + margin-left: auto; + margin-right: auto; + border: 2px solid #181D26; + @media screen and (max-width: $screen-sm) { + font-size: 14px; + } + + } + .switches-container input { + visibility: hidden; + position: absolute; + top: 0; + } + .switches-container label { + width: 50%; + padding: 0; + margin: 0; + text-align: center; + cursor: pointer; + color: #90959E; + } + .switch-wrapper { + position: absolute; + top: 0; + bottom: 0; + width: 50%; + padding: 0.15rem; + z-index: 3; + transition: transform .5s cubic-bezier(.77, 0, .175, 1); + } + .switch-btn { + border-radius: 2px; + background: #03c5e7; + height: 100%; + } + .switch-btn div { + width: 100%; + text-align: center; + opacity: 0; + display: block; + color: #fff; + transition: opacity .2s cubic-bezier(.77, 0, .175, 1) .125s; + will-change: opacity; + position: absolute; + top: 0; + left: 0; + padding: 10px 0; + } + + /* slide the switch box from right to left */ + .switches-container input:nth-of-type(1):checked~.switch-wrapper { + transform: translateX(0%); + } + + /* slide the switch box from left to right */ + .switches-container input:nth-of-type(2):checked~.switch-wrapper { + transform: translateX(100%); + } + + /* toggle the switch box labels - first checkbox:checked - show first switch div */ + .switches-container input:nth-of-type(1):checked~.switch-wrapper .switch-btn div:nth-of-type(1) { + opacity: 1; + } + + /* toggle the switch box labels - second checkbox:checked - show second switch div */ + .switches-container input:nth-of-type(2):checked~.switch-wrapper .switch-btn div:nth-of-type(2) { + opacity: 1; + } + + .pricing-contact-banner{ + text-align: center; + background-color: rgba(3, 197, 231, 0.10); + padding: 20px 10px 30px 10px; + position: relative; + margin: 60px 0px; + h2{ + font-size: 46px; + } + .banner-container{ + margin: auto; + max-width: 600px; + } + } + + .pricing-contact-banner::before { + content: ""; + display: block; + position: absolute; + height: 55px; + width: 100%; + top: -25px; + z-index: 990; + background-image: url("../img/hr-boxes.png"); + background-position: center top; + background-repeat: no-repeat; + background-size: 80px 55px; + } + #pricingTerragrunt{ + display: none; + } .pricing-card { display: flex; flex-direction: column; align-items: center; - justify-content: space-between; - padding: 24px; + padding: 10px; background-color: #222932; border-radius: 6px; + @media screen and (max-width: $screen-sm) { + padding: 12px; + } &.pricing-card-with-image { flex-direction: row; align-items: stretch; @media screen and (max-width: $screen-sm) { flex-direction: column; padding: 16px; - border: 1px solid #1A4C60; + border: 1px solid #1a4c60; } .pricing-card-image { @@ -282,7 +408,8 @@ margin-right: 34px; padding: 88px 44px; border-radius: 10px; - background: #1C2129; + background: #1c2129; + max-width: 265px; img { object-fit: contain; } @@ -316,8 +443,8 @@ } @media screen and (max-width: 590px) { - margin-right: 0!important; // Needs to override element style - margin-left: 0!important; // Needs to override element style + margin-right: 0 !important; // Needs to override element style + margin-left: 0 !important; // Needs to override element style .annual-contract-p { max-width: 100%; @@ -367,6 +494,12 @@ } .medium-price { font-size: 24px; + margin-top: 0; + } + .pricing-contact-banner{ + h2{ + font-size: 36px; + } } } @@ -388,12 +521,12 @@ } .need-help-text { - display: inline; - margin-right: .7em; + margin-right: 0.7em; + margin-bottom: 0.7rem; } .need-help-button { - margin-bottom: .6em; + margin-bottom: 0.6em; } @media (max-width: $screen-xs-max) { @@ -419,10 +552,10 @@ display: inline-flex; align-items: center; justify-content: center; - margin-right: .5em; + margin-right: 0.5em; } li { - margin: .8em; + margin: 0.8em; counter-increment: item; font-weight: 700; } @@ -432,15 +565,16 @@ color: #06a2ff; background-color: white; } - .current-step-icon, .completed-step-icon { + .current-step-icon, + .completed-step-icon { color: #06a2ff; } // Style for "Select Plan" step on checkout page .completed-step::before { border: none; - content: '\f00c'; + content: "\f00c"; font-family: FontAwesome; - font-size: .8em; + font-size: 0.8em; color: white; background-color: #06a2ff; } @@ -452,16 +586,16 @@ .table-tooltip { z-index: 90; - min-width: 200px; + min-width: 260px; display: none; position: absolute; bottom: 120%; - left: 30%; + left: 40%; transform: translateX(-50%); font-size: $font-size-small; border-radius: 8px; transition: all ease; - @media screen and (max-width: $screen-sm) { + @media screen and (max-width: $screen-sm) { font-size: 14px; left: 70%; min-width: 150px; @@ -473,7 +607,7 @@ bottom: -15px; left: 50%; transform: translateX(-50%); - @media screen and (max-width: $screen-sm) { + @media screen and (max-width: $screen-sm) { bottom: -10px; } } @@ -483,6 +617,21 @@ span.light { position: relative; } +.light-with-line { + background-color: #1d252f; + width: max-content; + padding-right: 10px; + + &::before { + content: ""; + position: absolute; + height: 1px; + width: 100%; + background-color: #2a5f74; + z-index: -1; + } +} + .grid-container { position: relative; margin-bottom: 1px; @@ -493,11 +642,321 @@ span.light { } .grid-container.highlight:hover { - border: #1A4C60 1px solid; + border: #1a4c60 1px solid; transition: all ease; } -.grid-container.highlight:hover span{ +.grid-container.highlight:hover span { transition: all ease; color: white; -} \ No newline at end of file +} + +.pricing-sticky { + display: none; + background-color: rgba(34, 41, 50, 0.6); + position: sticky; + bottom: 100px; + transform: translateY(100px); + transition: ease; + backdrop-filter: blur(10px); + @media screen and (max-width: $screen-md) { + background-color: rgba(34, 41, 50, 0.4); + backdrop-filter: blur(19px); + } + .pricing-headline, .reference-price-desktop{ + display: none; + } +} + +.pricing-sticky-visible { + display: block; + transform: translateY(0); + visibility: visible; + bottom: 0; + z-index: 99; + .grid-container.pricing-card-wrapper { + @media screen and (max-width: $screen-sm) { + display: flex; + justify-content: center; + align-items: flex-start; + } + .popular-badge, + .annual-contract-p { + @media screen and (max-width: $screen-sm) { + display: none; + } + } + } + .page-pricing .btn.pricing-ctas { + @media screen and (max-width: $screen-sm) { + min-width: 100px !important; + } + } + .btn { + @media screen and (max-width: $screen-sm) { + min-width: 100px !important; + } + } +} +.hide-pricing-sticky{ + display: none !important; +} +.pricing-sticky-visible .annual-contract-p-mobile { + @media screen and (max-width: $screen-sm) { + display: block !important; + text-align: center; + } +} + +.pricing-card.dark { + background-color: rgba(34, 41, 50, 0.6); + opacity: 100%; + @media screen and (max-width: $screen-md) { + background-color: rgba(34, 41, 50, 0.4); + } + @media screen and (max-width: $screen-sm) { + margin-bottom: 0 !important; + padding-bottom: 0 !important; + } +} + +.price-box{ + color: #fff; +} + +.year-price, .currency{ + font-size: 44px; +} + +.contract-wrapper { + border-radius: 4px; + display: flex; + padding: 8px; + justify-content: space-evenly; + background-color: #2B3745; + .contract { + font-size: 12px; + display: flex; + justify-content: center; + align-items: center; + label{ + display: flex; + justify-content: center; + } + } + .contract input[type='radio']{ + margin: 0; + margin-right: 5px; + width: 20px; + height: 20px; + border-radius: 100%; + border: 2px solid #bfbfbf; + display: flex; + justify-content: center; + align-items: center; + accent-color: #2B3745; + appearance: none; + } + ion-radio { --border-width: 0.5px } + .contract input[type="radio"]:checked { + background-color: #03c5e7; + accent-color: #03c5e7; + } +} +.hide-on-desktop{ + display: none; +} +.show-on-mobile{ + display: none; +} + +.mobile-price-btn{ + display: none; +} +.contract-wrapper-mobile{ + display: none; +} +.subtitle-mobile-pricing{ + display: none; +} +.monthly-annual-container{ + display: none; +} +.see-details-link{ + display: none; +} +.pricing-price-section{ + display: flex; + align-items: center; + justify-content: center; +} +.pricing-headline{ + background-color: #2b3745; + width: 100%; + border-radius: 6px; + padding: 12px 0; + text-align: center; +} +.month-price-tag{ + font-size: 12px; + color: #fff; +} +.reference-price{ + display: none; +} +.additional-info-footer{ + display: block; + font-size: 12px; + margin: 0px; +} +.additional-info{ + display: none; +} +.price-description-mobile{ + font-size: 12px; + display: block; + margin-bottom: 0; +} +.description-numbers-section{ + margin-bottom: 8px; +} +@media screen and (max-width: $screen-sm) { + h1 { + font-size: 36px; + } + .lead{ + font-size: 16px; + } + .list-price-heading{ + h4{ + font-size: 16px; + } + } + .btn-checkout{ + margin-top: 0; + } + .pricing-card{ + width: 100%; + } + .mobile-price-btn{ + display: inline; + } + .contract-wrapper-mobile{ + display: flex; + } + .medium-price{ + margin-right: 0px !important; + } + .pricing-sticky{ + .price-description-mobile, .additional-info, .additional-info-footer{ + display: none; + } + .subtitle-mobile-pricing{ + display: none; + } + .see-details-link{ + display: block; + font-size: 12px; + text-decoration: underline; + font-style: italic; + } + } + .monthly-annual-container{ + display: block; + .contract-wrapper{ + justify-content: space-around; + } + } + .contract-wrapper{ + background-color: transparent; + } +} +@media screen and (max-width: 590px) { +.additional-info{ + font-size: 10px; + display: block; + margin-bottom: 0; +} +.additional-info-footer{ + display: none; +} +.hide-on-mobile{ + display: none; +} +.reference-price{ + display: block; +} +.pricing-headline{ + background-color: transparent; + font-weight: 600; + font-size: 16px; + color: #fff; +} +.hide-on-desktop{ + display: block; +} +.subtitle-mobile-pricing{ + display: flex; + justify-content: center; + color: #fff; + font-size: 12px; +} +.pricing-price-section{ + display: none; + } +.pricing-sticky{ + .pricing-headline{ + display: block; + } + .reference-price{ + display: none; + } + .subtitle-mobile-pricing{ + display: none; + } + .contract-wrapper{ + background-color: transparent; + } + .contract{ + label{ + .contract-picker-label{ + display: none; + } + } + } +} +.annual-contract-wrapper{ + display: none; +} + +.description-numbers-section-enterprise{ + display: none; +} +} +@media screen and (min-width: 590px) and (max-width:760px){ + .contract{ + label{ + .contract-picker-label{ + display: none; + } + } + } +} +@media screen and (min-width: 360px) and (max-width: 590px){ + .contract{ + label{ + .contract-picker-label{ + display: inline-block; + } + } + } +} +@media screen and (max-width: 360px){ + .contract{ + label{ + .contract-picker-label{ + display: none; + } + } + } +} diff --git a/assets/js/checkout.js b/assets/js/checkout.js index 019861795..3f94b499c 100644 --- a/assets/js/checkout.js +++ b/assets/js/checkout.js @@ -163,14 +163,58 @@ $(function () { } if (checkoutOptions.setup_deployment) { - $('#js-one-time-total').show(); + $('.js-one-time-total').show(); } else { - $("#js-one-time-total").hide(); + $(".js-one-time-total").hide(); } - $("#js-monthly-total").text(monthlyTotal.toLocaleString()); + $(".js-monthly-total").text(monthlyTotal.toLocaleString()); } _setDefaults(); _updateCheckout(); + + + var gruntworkSubscription = { + billingCycle: 'annual' + } + + var terraGruntSubscription = { + billingCycle: 'annual' + } + +$(document).ready(function() { + $('input[type=radio][name=billing-type-gruntwork]').change(function() { + if (this.value == 'annual') { + gruntworkSubscription.billingCycle = this.value; + $('.pricing-card-monthly').hide(); + $('.pricing-card-annual').show(); + $("input[name=billing-type-gruntwork][value=" + 'annual' + "]").prop('checked', true); + } + else if (this.value == 'monthly') { + gruntworkSubscription.billingCycle = this.value; + $('.pricing-card-annual').hide(); + $('.pricing-card-monthly').show(); + $("input[name=billing-type-gruntwork][value=" + 'monthly' + "]").prop('checked', true); + } + }); +}); + +$(document).ready(function() { + $('input[type=radio][name=billing-type-terragrunt]').change(function() { + if (this.value == 'annual') { + terraGruntSubscription.billingCycle = this.value; + $('.pricing-card-monthly-terragrunt').hide(); + $('.pricing-card-annual-terragrunt').show(); + $("input[name=billing-type-terragrunt][value=" + 'annual' + "]").prop('checked', true); + } + else if (this.value == 'monthly') { + terraGruntSubscription.billingCycle = this.value; + $('.pricing-card-annual-terragrunt').hide(); + $('.pricing-card-monthly-terragrunt').show(); + $("input[name=billing-type-terragrunt][value=" + 'monthly' + "]").prop('checked', true); + } + }); +}); + }); diff --git a/assets/js/main.js b/assets/js/main.js index b21314e1c..ef42b3519 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -9001,3 +9001,45 @@ $(document).ready(function () { }); } }); + + +/* Scrollable feature for Pricing page */ +(function($) { + if ($("body.pricing").length) { + $(document).ready(function() { + function showPricing() { + $('.pricing-sticky').addClass('pricing-sticky-visible'); + $('.pricing-card').addClass('dark'); + } + + function hidePricing() { + $('.pricing-sticky').removeClass('pricing-sticky-visible'); + $('.pricing-card').removeClass('dark'); + } + + $(window).on('scroll', function() { + const scrollTop = $(window).scrollTop(); + const windowHeight = $(window).height(); + + const $secondUl = $('.plans-features ul:nth-child(2)'); + const secondUlPosition = $secondUl.offset().top; + const secondUlHeight = $secondUl.height(); + + const $lastUl = $('.plans-features ul:last'); + const lastUlPosition = $lastUl.offset().top; + const lastUlHeight = $lastUl.height(); + + const threshold = 0.12; // Adjust this threshold as needed + + if ( + scrollTop <= secondUlPosition + secondUlHeight - windowHeight || + scrollTop >= lastUlPosition + lastUlHeight - windowHeight * (1 - threshold) + ) { + hidePricing(); + } else { + showPricing(); + } + }); + }); + } +})(window.jQuery); diff --git a/pages/pricing/_contact_banner.html b/pages/pricing/_contact_banner.html new file mode 100644 index 000000000..e94db53be --- /dev/null +++ b/pages/pricing/_contact_banner.html @@ -0,0 +1,6 @@ +
+ +
diff --git a/pages/pricing/_hero.html b/pages/pricing/_hero.html index 34a6c6c80..a40fcb1d6 100644 --- a/pages/pricing/_hero.html +++ b/pages/pricing/_hero.html @@ -6,5 +6,19 @@

{{ page.title }}

{{ page.excerpt }}

+
+
+ + + + +
+
+
Gruntwork Subscription
+
Terragrunt Support
+
+
+
+
diff --git a/pages/pricing/_need-help.html b/pages/pricing/_need-help.html index 94c6ac883..1f8007b1c 100644 --- a/pages/pricing/_need-help.html +++ b/pages/pricing/_need-help.html @@ -2,10 +2,11 @@

Need help deciding?

+

+ We are happy to answer your questions and provide additional information. Contact sales +

- Discounted pricing is available for non-profits, educational institutions, - and startups with fewer than 10 employees. We are happy to answer your questions and provide additional information: - contact us. + Discounted pricing is available for non-profits, educational institutions, and startups with fewer than 10 employees. Contact us to get the discounted pricing.

diff --git a/pages/pricing/_plans.html b/pages/pricing/_plans.html index 9d26dd401..4002962b1 100644 --- a/pages/pricing/_plans.html +++ b/pages/pricing/_plans.html @@ -1,6 +1,7 @@
{% include_relative _pricing-table.html %} + {% include_relative _contact_banner.html %} {% include_relative _need-help.html %} {% include_relative _aws-marketplace.html %}
diff --git a/pages/pricing/_pricing-cta-terragrunt.html b/pages/pricing/_pricing-cta-terragrunt.html new file mode 100644 index 000000000..095690ad7 --- /dev/null +++ b/pages/pricing/_pricing-cta-terragrunt.html @@ -0,0 +1,119 @@ + diff --git a/pages/pricing/_pricing-cta.html b/pages/pricing/_pricing-cta.html index 4abf81d4e..3458583ff 100644 --- a/pages/pricing/_pricing-cta.html +++ b/pages/pricing/_pricing-cta.html @@ -1,101 +1,131 @@ - diff --git a/pages/pricing/_pricing-main-row-terragrunt.html b/pages/pricing/_pricing-main-row-terragrunt.html new file mode 100644 index 000000000..c618d4c19 --- /dev/null +++ b/pages/pricing/_pricing-main-row-terragrunt.html @@ -0,0 +1,54 @@ +{% for mainRow in site.data.pricing-table-terragrunt %} + +{% if mainRow.divider == 'yes' %} +
+{% endif %} +{% endfor %} diff --git a/pages/pricing/_pricing-main-row.html b/pages/pricing/_pricing-main-row.html index 722a330d1..93a920748 100644 --- a/pages/pricing/_pricing-main-row.html +++ b/pages/pricing/_pricing-main-row.html @@ -1,41 +1,54 @@ {% for mainRow in site.data.pricing-table %} +{% if mainRow.divider == 'yes' %}
-{% endfor %} - +{% endif %} +{% endfor %} \ No newline at end of file diff --git a/pages/pricing/_pricing-table.html b/pages/pricing/_pricing-table.html index fa98469bc..3dcccf30b 100644 --- a/pages/pricing/_pricing-table.html +++ b/pages/pricing/_pricing-table.html @@ -1,23 +1,41 @@ -
+
-

Standard

+

Team

-

Enterprise

+

Enterprise


{% include_relative _pricing-main-row.html %} - {% include_relative _pricing-add-ons.html %} -
- {% include_relative _pricing.html %}
+
{% include_relative _pricing-cta.html %}
+ diff --git a/pages/pricing/_pricing.html b/pages/pricing/_pricing.html deleted file mode 100644 index 0864a47c0..000000000 --- a/pages/pricing/_pricing.html +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/pages/pricing/index.html b/pages/pricing/index.html index 59a689d9d..789a218e2 100644 --- a/pages/pricing/index.html +++ b/pages/pricing/index.html @@ -1,6 +1,6 @@ --- layout: default -title: Become a Gruntwork Subscriber +title: Pricing & Packaging excerpt: Choose the plan just right for your team. permalink: /pricing/ redirect_from: @@ -19,9 +19,46 @@
{% include_relative _plans.html %} - {% include_relative _terms.html %} - {% include_relative _pricing-faqs.html %} + {% include_relative _terms.html %} + {% include_relative _pricing-faqs.html %} {% include_relative _support.html %}
+
+
+
+
+ {% include_relative _pricing-cta.html %} +
+
+
+
+ +