diff --git a/handbook/company/communications.md b/handbook/company/communications.md index fdba85c507..c0f6a7afcd 100644 --- a/handbook/company/communications.md +++ b/handbook/company/communications.md @@ -19,7 +19,7 @@ We track competitors' capabilities and adjacent (or commonly integrated) product | Best practices for using Fleet | [Noah Talerman](https://www.linkedin.com/in/noah-talerman/) _([@noahtalerman](https://github.com/noahtalerman))_ | | What goes in a release | [Luke Heath](https://www.linkedin.com/in/lukeheath/) _([@lukeheath](https://github.com/lukeheath))_ | | Engineering output and architecture | [Luke Heath](https://www.linkedin.com/in/lukeheath/) _([@lukeheath](https://github.com/lukeheath))_ | -| Structure and intentionallity of the [Docs](https://fleetdm.com/docs/get-started/why-fleet)| [Mike Thomas](https://www.linkedin.com/in/mike-thomas-52277938) _([@mike-j-thomas](https://github.com/mike-j-thomas))_ | +| Structure and intentionality of the [Docs](https://fleetdm.com/docs/get-started/why-fleet)| [Mike Thomas](https://www.linkedin.com/in/mike-thomas-52277938) _([@mike-j-thomas](https://github.com/mike-j-thomas))_ | | Design and content of the [Docs](https://fleetdm.com/docs/get-started/why-fleet) | [Rachael Shaw](https://www.linkedin.com/in/rachaelcshaw/) _([@rachaelshaw](https://github.com/rachaelshaw))_ | | API design | [Rachael Shaw](https://www.linkedin.com/in/rachaelcshaw/) _([@rachaelshaw](https://github.com/rachaelshaw))_ | @@ -420,7 +420,9 @@ Recurring expenses related to a particular team member, such as coworking fees, - Individualized expenses should include the team member's name explicitly in the name of the expense. - If multiple team members use the same vendor for an individualized expense (for example, "WeWork"), use a separate row for each individualized expense. (For example: "Coworking, Mungojerry (WeWork)" and "Coworking, Jennyanydots (WeWork)") - Individualized expenses are always attributed to the "🔦 Business operations" department. -- These expenses are still considered non-personnel expenses, in the same way seat licenses for tools like Salesforce or GitHub are considered non-personnel expenses. +- These expenses are still considered non-personnel expenses, in the same way seat licenses for tools like Salesforce or GitHub are considered non-personnel expenses. + +For all new individualized expenses, [create an issue](https://github.com/fleetdm/confidential/issues/new?assignees=&labels=%23g-business-operations&projects=&template=custom-request.md&title=Request%3A+_______________________) to notify the Business Operations department. ## Travel diff --git a/handbook/company/pricing-features-table.yml b/handbook/company/pricing-features-table.yml index 84e8e0eb5e..4fe0279bcd 100644 --- a/handbook/company/pricing-features-table.yml +++ b/handbook/company/pricing-features-table.yml @@ -873,7 +873,7 @@ pricingTableCategories: [Endpoint operations] buzzwords: [Real-time export,Ship logs] waysToUse: - - description: Choose different file sizes for automated query results and agent logs. Coming soon (2024-01-26) #Customer-blanco + - description: Choose different file sizes for automated query results and agent logs. Coming soon (2024-04-22) #Customer-blanco moreInfoUrl: https://github.com/fleetdm/fleet/issues/11999 - industryName: File carving (AWS S3) documentationUrl: https://fleetdm.com/docs/configuration/fleet-server-configuration#s-3-file-carving-backend diff --git a/terraform/addons/geolite2/Dockerfile b/terraform/addons/geolite2/Dockerfile index aa746d4964..0f401cc461 100644 --- a/terraform/addons/geolite2/Dockerfile +++ b/terraform/addons/geolite2/Dockerfile @@ -6,8 +6,8 @@ ARG LICENSE_KEY USER root RUN mkdir -p /opt/GeoLite2 && cd /opt/GeoLite2 &&\ - wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${LICENSE_KEY}&suffix=tar.gz" -O GeoLite2-City.tar.gz &&\ - wget "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${LICENSE_KEY}&suffix=tar.gz.sha256" -O GeoLite2-City.tar.gz.sha256 &&\ + wget --max-redirect 10 "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${LICENSE_KEY}&suffix=tar.gz" -O GeoLite2-City.tar.gz &&\ + wget --max-redirect 10 "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${LICENSE_KEY}&suffix=tar.gz.sha256" -O GeoLite2-City.tar.gz.sha256 &&\ [ "$(awk '{ print $1 }' GeoLite2-City.tar.gz.sha256)" == "$(sha256sum GeoLite2-City.tar.gz | awk '{ print $1 }')" ] &&\ (tar -xzvf GeoLite2-City.tar.gz "*/GeoLite2-City.mmdb" --strip-components 1 2>/dev/null || true) &&\ rm -f GeoLite2-City.tar.gz* diff --git a/terraform/byo-vpc/README.md b/terraform/byo-vpc/README.md index 1b692a5874..941a340aa0 100644 --- a/terraform/byo-vpc/README.md +++ b/terraform/byo-vpc/README.md @@ -31,11 +31,11 @@ No requirements. | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| -| [alb\_config](#input\_alb\_config) | n/a |
object({
name = optional(string, "fleet")
subnets = list(string)
security_groups = optional(list(string), [])
access_logs = optional(map(string), {})
certificate_arn = string
allowed_cidrs = optional(list(string), ["0.0.0.0/0"])
allowed_ipv6_cidrs = optional(list(string), ["::/0"])
egress_cidrs = optional(list(string), ["0.0.0.0/0"])
egress_ipv6_cidrs = optional(list(string), ["::/0"])
extra_target_groups = optional(any, [])
https_listener_rules = optional(any, [])
tls_policy = optional(string, "ELBSecurityPolicy-TLS-1-2-2017-01")
}) | n/a | yes |
+| [alb\_config](#input\_alb\_config) | n/a | object({
name = optional(string, "fleet")
subnets = list(string)
security_groups = optional(list(string), [])
access_logs = optional(map(string), {})
certificate_arn = string
allowed_cidrs = optional(list(string), ["0.0.0.0/0"])
allowed_ipv6_cidrs = optional(list(string), ["::/0"])
egress_cidrs = optional(list(string), ["0.0.0.0/0"])
egress_ipv6_cidrs = optional(list(string), ["::/0"])
extra_target_groups = optional(any, [])
https_listener_rules = optional(any, [])
tls_policy = optional(string, "ELBSecurityPolicy-TLS-1-2-2017-01")
idle_timeout = optional(number, 60)
}) | n/a | yes |
| [ecs\_cluster](#input\_ecs\_cluster) | The config for the terraform-aws-modules/ecs/aws module | object({
autoscaling_capacity_providers = optional(any, {})
cluster_configuration = optional(any, {
execute_command_configuration = {
logging = "OVERRIDE"
log_configuration = {
cloud_watch_log_group_name = "/aws/ecs/aws-ec2"
}
}
})
cluster_name = optional(string, "fleet")
cluster_settings = optional(map(string), {
"name" : "containerInsights",
"value" : "enabled",
})
create = optional(bool, true)
default_capacity_provider_use_fargate = optional(bool, true)
fargate_capacity_providers = optional(any, {
FARGATE = {
default_capacity_provider_strategy = {
weight = 100
}
}
FARGATE_SPOT = {
default_capacity_provider_strategy = {
weight = 0
}
}
})
tags = optional(map(string))
}) | {
"autoscaling_capacity_providers": {},
"cluster_configuration": {
"execute_command_configuration": {
"log_configuration": {
"cloud_watch_log_group_name": "/aws/ecs/aws-ec2"
},
"logging": "OVERRIDE"
}
},
"cluster_name": "fleet",
"cluster_settings": {
"name": "containerInsights",
"value": "enabled"
},
"create": true,
"default_capacity_provider_use_fargate": true,
"fargate_capacity_providers": {
"FARGATE": {
"default_capacity_provider_strategy": {
"weight": 100
}
},
"FARGATE_SPOT": {
"default_capacity_provider_strategy": {
"weight": 0
}
}
},
"tags": {}
} | no |
-| [fleet\_config](#input\_fleet\_config) | The configuration object for Fleet itself. Fields that default to null will have their respective resources created if not specified. | object({
mem = optional(number, 4096)
cpu = optional(number, 512)
image = optional(string, "fleetdm/fleet:v4.40.0")
family = optional(string, "fleet")
sidecars = optional(list(any), [])
depends_on = optional(list(any), [])
mount_points = optional(list(any), [])
volumes = optional(list(any), [])
extra_environment_variables = optional(map(string), {})
extra_iam_policies = optional(list(string), [])
extra_execution_iam_policies = optional(list(string), [])
extra_secrets = optional(map(string), {})
security_groups = optional(list(string), null)
security_group_name = optional(string, "fleet")
iam_role_arn = optional(string, null)
service = optional(object({
name = optional(string, "fleet")
}), {
name = "fleet"
})
database = optional(object({
password_secret_arn = string
user = string
database = string
address = string
rr_address = optional(string, null)
}), {
password_secret_arn = null
user = null
database = null
address = null
rr_address = null
})
redis = optional(object({
address = string
use_tls = optional(bool, true)
}), {
address = null
use_tls = true
})
awslogs = optional(object({
name = optional(string, null)
region = optional(string, null)
create = optional(bool, true)
prefix = optional(string, "fleet")
retention = optional(number, 5)
}), {
name = null
region = null
prefix = "fleet"
retention = 5
})
loadbalancer = optional(object({
arn = string
}), {
arn = null
})
extra_load_balancers = optional(list(any), [])
networking = optional(object({
subnets = list(string)
security_groups = optional(list(string), null)
}), {
subnets = null
security_groups = null
})
autoscaling = optional(object({
max_capacity = optional(number, 5)
min_capacity = optional(number, 1)
memory_tracking_target_value = optional(number, 80)
cpu_tracking_target_value = optional(number, 80)
}), {
max_capacity = 5
min_capacity = 1
memory_tracking_target_value = 80
cpu_tracking_target_value = 80
})
iam = optional(object({
role = optional(object({
name = optional(string, "fleet-role")
policy_name = optional(string, "fleet-iam-policy")
}), {
name = "fleet-role"
policy_name = "fleet-iam-policy"
})
execution = optional(object({
name = optional(string, "fleet-execution-role")
policy_name = optional(string, "fleet-execution-role")
}), {
name = "fleet-execution-role"
policy_name = "fleet-iam-policy-execution"
})
}), {
name = "fleetdm-execution-role"
})
}) | {
"autoscaling": {
"cpu_tracking_target_value": 80,
"max_capacity": 5,
"memory_tracking_target_value": 80,
"min_capacity": 1
},
"awslogs": {
"create": true,
"name": null,
"prefix": "fleet",
"region": null,
"retention": 5
},
"cpu": 256,
"database": {
"address": null,
"database": null,
"password_secret_arn": null,
"rr_address": null,
"user": null
},
"depends_on": [],
"extra_environment_variables": {},
"extra_execution_iam_policies": [],
"extra_iam_policies": [],
"extra_load_balancers": [],
"extra_secrets": {},
"family": "fleet",
"iam": {
"execution": {
"name": "fleet-execution-role",
"policy_name": "fleet-iam-policy-execution"
},
"role": {
"name": "fleet-role",
"policy_name": "fleet-iam-policy"
}
},
"iam_role_arn": null,
"image": "fleetdm/fleet:v4.31.1",
"loadbalancer": {
"arn": null
},
"mem": 512,
"mount_points": [],
"networking": {
"security_groups": null,
"subnets": null
},
"redis": {
"address": null,
"use_tls": true
},
"security_group_name": "fleet",
"security_groups": null,
"service": {
"name": "fleet"
},
"sidecars": [],
"volumes": []
} | no |
+| [fleet\_config](#input\_fleet\_config) | The configuration object for Fleet itself. Fields that default to null will have their respective resources created if not specified. | object({
mem = optional(number, 4096)
cpu = optional(number, 512)
image = optional(string, "fleetdm/fleet:v4.47.1")
family = optional(string, "fleet")
sidecars = optional(list(any), [])
depends_on = optional(list(any), [])
mount_points = optional(list(any), [])
volumes = optional(list(any), [])
extra_environment_variables = optional(map(string), {})
extra_iam_policies = optional(list(string), [])
extra_execution_iam_policies = optional(list(string), [])
extra_secrets = optional(map(string), {})
security_groups = optional(list(string), null)
security_group_name = optional(string, "fleet")
iam_role_arn = optional(string, null)
service = optional(object({
name = optional(string, "fleet")
}), {
name = "fleet"
})
database = optional(object({
password_secret_arn = string
user = string
database = string
address = string
rr_address = optional(string, null)
}), {
password_secret_arn = null
user = null
database = null
address = null
rr_address = null
})
redis = optional(object({
address = string
use_tls = optional(bool, true)
}), {
address = null
use_tls = true
})
awslogs = optional(object({
name = optional(string, null)
region = optional(string, null)
create = optional(bool, true)
prefix = optional(string, "fleet")
retention = optional(number, 5)
}), {
name = null
region = null
prefix = "fleet"
retention = 5
})
loadbalancer = optional(object({
arn = string
}), {
arn = null
})
extra_load_balancers = optional(list(any), [])
networking = optional(object({
subnets = list(string)
security_groups = optional(list(string), null)
}), {
subnets = null
security_groups = null
})
autoscaling = optional(object({
max_capacity = optional(number, 5)
min_capacity = optional(number, 1)
memory_tracking_target_value = optional(number, 80)
cpu_tracking_target_value = optional(number, 80)
}), {
max_capacity = 5
min_capacity = 1
memory_tracking_target_value = 80
cpu_tracking_target_value = 80
})
iam = optional(object({
role = optional(object({
name = optional(string, "fleet-role")
policy_name = optional(string, "fleet-iam-policy")
}), {
name = "fleet-role"
policy_name = "fleet-iam-policy"
})
execution = optional(object({
name = optional(string, "fleet-execution-role")
policy_name = optional(string, "fleet-execution-role")
}), {
name = "fleet-execution-role"
policy_name = "fleet-iam-policy-execution"
})
}), {
name = "fleetdm-execution-role"
})
}) | {
"autoscaling": {
"cpu_tracking_target_value": 80,
"max_capacity": 5,
"memory_tracking_target_value": 80,
"min_capacity": 1
},
"awslogs": {
"create": true,
"name": null,
"prefix": "fleet",
"region": null,
"retention": 5
},
"cpu": 256,
"database": {
"address": null,
"database": null,
"password_secret_arn": null,
"rr_address": null,
"user": null
},
"depends_on": [],
"extra_environment_variables": {},
"extra_execution_iam_policies": [],
"extra_iam_policies": [],
"extra_load_balancers": [],
"extra_secrets": {},
"family": "fleet",
"iam": {
"execution": {
"name": "fleet-execution-role",
"policy_name": "fleet-iam-policy-execution"
},
"role": {
"name": "fleet-role",
"policy_name": "fleet-iam-policy"
}
},
"iam_role_arn": null,
"image": "fleetdm/fleet:v4.31.1",
"loadbalancer": {
"arn": null
},
"mem": 512,
"mount_points": [],
"networking": {
"security_groups": null,
"subnets": null
},
"redis": {
"address": null,
"use_tls": true
},
"security_group_name": "fleet",
"security_groups": null,
"service": {
"name": "fleet"
},
"sidecars": [],
"volumes": []
} | no |
| [migration\_config](#input\_migration\_config) | The configuration object for Fleet's migration task. | object({
mem = number
cpu = number
}) | {
"cpu": 1024,
"mem": 2048
} | no |
-| [rds\_config](#input\_rds\_config) | The config for the terraform-aws-modules/rds-aurora/aws module | object({
name = optional(string, "fleet")
engine_version = optional(string, "8.0.mysql_aurora.3.02.2")
instance_class = optional(string, "db.t4g.large")
subnets = optional(list(string), [])
allowed_security_groups = optional(list(string), [])
allowed_cidr_blocks = optional(list(string), [])
apply_immediately = optional(bool, true)
monitoring_interval = optional(number, 10)
db_parameter_group_name = optional(string)
db_parameters = optional(map(string), {})
db_cluster_parameter_group_name = optional(string)
db_cluster_parameters = optional(map(string), {})
enabled_cloudwatch_logs_exports = optional(list(string), [])
master_username = optional(string, "fleet")
snapshot_identifier = optional(string)
cluster_tags = optional(map(string), {})
}) | {
"allowed_cidr_blocks": [],
"allowed_security_groups": [],
"apply_immediately": true,
"cluster_tags": {},
"db_cluster_parameter_group_name": null,
"db_cluster_parameters": {},
"db_parameter_group_name": null,
"db_parameters": {},
"enabled_cloudwatch_logs_exports": [],
"engine_version": "8.0.mysql_aurora.3.02.2",
"instance_class": "db.t4g.large",
"master_username": "fleet",
"monitoring_interval": 10,
"name": "fleet",
"snapshot_identifier": null,
"subnets": []
} | no |
+| [rds\_config](#input\_rds\_config) | The config for the terraform-aws-modules/rds-aurora/aws module | object({
name = optional(string, "fleet")
engine_version = optional(string, "8.0.mysql_aurora.3.02.2")
instance_class = optional(string, "db.t4g.large")
subnets = optional(list(string), [])
allowed_security_groups = optional(list(string), [])
allowed_cidr_blocks = optional(list(string), [])
apply_immediately = optional(bool, true)
monitoring_interval = optional(number, 10)
db_parameter_group_name = optional(string)
db_parameters = optional(map(string), {})
db_cluster_parameter_group_name = optional(string)
db_cluster_parameters = optional(map(string), {})
enabled_cloudwatch_logs_exports = optional(list(string), [])
master_username = optional(string, "fleet")
snapshot_identifier = optional(string)
cluster_tags = optional(map(string), {})
preferred_maintenance_window = optional(string, "thu:23:00-fri:00:00")
}) | {
"allowed_cidr_blocks": [],
"allowed_security_groups": [],
"apply_immediately": true,
"cluster_tags": {},
"db_cluster_parameter_group_name": null,
"db_cluster_parameters": {},
"db_parameter_group_name": null,
"db_parameters": {},
"enabled_cloudwatch_logs_exports": [],
"engine_version": "8.0.mysql_aurora.3.02.2",
"instance_class": "db.t4g.large",
"master_username": "fleet",
"monitoring_interval": 10,
"name": "fleet",
"preferred_maintenance_window": "thu:23:00-fri:00:00",
"snapshot_identifier": null,
"subnets": []
} | no |
| [redis\_config](#input\_redis\_config) | n/a | object({
name = optional(string, "fleet")
replication_group_id = optional(string)
elasticache_subnet_group_name = optional(string, "")
allowed_security_group_ids = optional(list(string), [])
subnets = list(string)
allowed_cidrs = list(string)
availability_zones = optional(list(string), [])
cluster_size = optional(number, 3)
instance_type = optional(string, "cache.m5.large")
apply_immediately = optional(bool, true)
automatic_failover_enabled = optional(bool, false)
engine_version = optional(string, "6.x")
family = optional(string, "redis6.x")
at_rest_encryption_enabled = optional(bool, true)
transit_encryption_enabled = optional(bool, true)
parameter = optional(list(object({
name = string
value = string
})), [])
log_delivery_configuration = optional(list(map(any)), [])
tags = optional(map(string), {})
}) | {
"allowed_cidrs": null,
"allowed_security_group_ids": [],
"apply_immediately": true,
"at_rest_encryption_enabled": true,
"automatic_failover_enabled": false,
"availability_zones": [],
"cluster_size": 3,
"elasticache_subnet_group_name": "",
"engine_version": "6.x",
"family": "redis6.x",
"instance_type": "cache.m5.large",
"log_delivery_configuration": [],
"name": "fleet",
"parameter": [],
"replication_group_id": null,
"subnets": null,
"tags": {},
"transit_encryption_enabled": true
} | no |
| [vpc\_config](#input\_vpc\_config) | n/a | object({
vpc_id = string
networking = object({
subnets = list(string)
})
}) | n/a | yes |
diff --git a/terraform/byo-vpc/main.tf b/terraform/byo-vpc/main.tf
index 5948f22893..7debf4b37f 100644
--- a/terraform/byo-vpc/main.tf
+++ b/terraform/byo-vpc/main.tf
@@ -62,6 +62,8 @@ module "rds" {
skip_final_snapshot = true
snapshot_identifier = var.rds_config.snapshot_identifier
+ preferred_maintenance_window = var.rds_config.preferred_maintenance_window
+
cluster_tags = var.rds_config.cluster_tags
}
diff --git a/terraform/byo-vpc/variables.tf b/terraform/byo-vpc/variables.tf
index 139dccf8c0..e9ae55c2d6 100644
--- a/terraform/byo-vpc/variables.tf
+++ b/terraform/byo-vpc/variables.tf
@@ -25,6 +25,7 @@ variable "rds_config" {
master_username = optional(string, "fleet")
snapshot_identifier = optional(string)
cluster_tags = optional(map(string), {})
+ preferred_maintenance_window = optional(string, "thu:23:00-fri:00:00")
})
default = {
name = "fleet"
@@ -43,6 +44,7 @@ variable "rds_config" {
master_username = "fleet"
snapshot_identifier = null
cluster_tags = {}
+ preferred_maintenance_window = "thu:23:00-fri:00:00"
}
description = "The config for the terraform-aws-modules/rds-aurora/aws module"
nullable = false
diff --git a/website/assets/styles/layout.less b/website/assets/styles/layout.less
index 5efcdeced3..de314d96ae 100644
--- a/website/assets/styles/layout.less
+++ b/website/assets/styles/layout.less
@@ -57,7 +57,9 @@ html, body {
[purpose='page-header'] {
max-width: 1200px;
+ padding: 19px 64px;
height: 80px;
+ color: @core-fleet-black;
[purpose='header-logo'] {
max-width: 118px;
img {
@@ -99,23 +101,20 @@ html, body {
[purpose='mobile-nav-toggle-btn'] {
color: #192147;
- cursor: unset;
+ cursor: pointer;
font-size: 16px;
text-decoration: none;
font-family: @navigation-font;
font-weight: @bold;
height: 100%;
+ padding-left: 24px;
+ user-select: none;
img {
+ margin-left: 8px;
width: 16px;
}
}
[purpose='mobile-nav'] {
- [purpose='mobile-header-logo'] {
- img {
- height: 92px;
- width: 162px;
- }
- }
position: fixed;
min-height: 100vh;
top: 0;
@@ -124,52 +123,79 @@ html, body {
bottom: 0;
pointer-events: none;
background-color: #ffffff;
- a:not(.btn) {
- width: 100%;
- padding: 8px 24px 8px 0px;
- margin-bottom: 4px;
- font-weight: 700;
- color: #212529;
- cursor: pointer;
- }
hr {
margin-top: 4px;
margin-bottom: 8px;
}
+ [purpose='mobile-nav-header'] {
+ padding: 19px 40px;
+ height: 80px;
+ }
+ [purpose='mobile-nav-container'] {
+ padding: 8px 40px 0px 40px;
+ }
+ [purpose='mobile-header-logo'] {
+ img {
+ height: 41px;
+ width: 118px;
+ }
+ }
[purpose='mobile-nav-close-btn'] {
font-size: 16px;
+ padding-left: 24px;
+ cursor: pointer;
text-decoration: none;
+ user-select: none;
img {
width: 16px;
}
}
- [purpose='mobile-dropdown-toggle'] {
+ [purpose='mobile-dropdown-link'] {
+ width: 100%;
+ padding: 8px 24px 8px 0px;
+ margin-bottom: 8px;
font-weight: 700;
+ cursor: pointer;
+ color: @core-fleet-black;
+ &:hover {
+ color: @core-vibrant-blue;
+ text-decoration: none;
+ }
+ }
+ [purpose='mobile-dropdown-toggle'] {
+ width: 100%;
+ padding: 8px 24px 8px 0px;
+ margin-bottom: 4px;
+ font-weight: 700;
+ cursor: pointer;
color: @core-fleet-black;
- margin-bottom: 0px;
&[aria-expanded='true'] {
color: #6a67fe;
outline: none;
margin-bottom: 4px;
}
+ &:hover {
+ color: #6a67fe;
+ }
}
[purpose='mobile-nav-btn'] {
text-decoration: none;
font-weight: 700;
+ color: @core-fleet-black;
+ &:hover {
+ color: @core-vibrant-blue;
+ }
}
[purpose='mobile-dropdown'] {
- [purpose='beta-label'] {
- background: linear-gradient(90deg, #FF5C83 0%, #6A67FE 100%);
- display: inline-block;
- padding: 1px 6px;
- text-transform: uppercase;
- color: #FFF;
- font-weight: 700;
- font-size: 11px;
- line-height: 20px;
- margin-left: 8px;
- vertical-align: middle;
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ &.collapse {
+ display: none;
+ }
+ &.collapse.show {
+ display: flex;
}
span {
display: inline-flex;
@@ -192,16 +218,13 @@ html, body {
color: #6a67fe;
text-decoration: none;
}
- [purpose='beta-label'] {
- color: #FFF;
- font-weight: 700;
- font-size: 11px;
- line-height: 20px;
- margin-bottom: 0px;
+ [purpose='indented-mobile-links'] {
+ padding-left: 16px;
}
}
}
[purpose='header-nav'] {
+
[purpose='glass-header-btn'] {
color: #FFFFFF;
height: 32px;
@@ -213,11 +236,12 @@ html, body {
border-radius: 4px;
background-color: @core-vibrant-red;
text-decoration: none;
+ white-space: nowrap;
}
[purpose='header-nav-btn'][aria-expanded='true'] {
font-weight: 700;
outline: none;
- color: #192147;
+ color: @core-fleet-black-75;;
}
[purpose='header-nav-btn']:before {
display: block;
@@ -227,11 +251,22 @@ html, body {
overflow: hidden;
visibility: hidden;
}
+ [purpose='log-out-button'] {
+ padding-left: 16px;
+ color: @core-fleet-black-75;
+ white-space: nowrap;
+ &:hover {
+ color: @core-fleet-black-75;
+ font-weight: 700;
+ text-decoration: none;
+ }
+ }
[purpose='header-nav-btn'] {
- color: #192147;
+ color: @core-fleet-black-75;
font-weight: 400;
cursor: pointer;
display: inline-block;
+ padding: 6px 16px;
}
[purpose='header-nav-btn']:hover {
font-weight: 700;
@@ -248,13 +283,9 @@ html, body {
}
}
}
- [purpose='logout-btn'] {
- color: @core-fleet-black;
- text-decoration: none;
- line-height: 23px;
- }
- &:hover {
- font-weight: 700;
+ [purpose='gh-button'] {
+ margin-left: 24px;
+ margin-right: 24px;
}
[purpose='header-dropdown'] {
box-shadow: 0px 4px 40px rgba(0, 0, 0, 0.4);
@@ -263,41 +294,32 @@ html, body {
color: @core-fleet-black;
font-weight: 400;
line-height: 20px;
+ &:not(:last-of-type) {
+ margin-bottom: 4px;
+ }
}
a:hover {
color: #6a67fe;
text-decoration: none;
}
- [purpose='beta-label'] {
- background: linear-gradient(90deg, #FF5C83 0%, #6A67FE 100%);
- display: inline-block;
- padding: 1px 6px;
- text-transform: uppercase;
- color: #FFF;
- font-weight: 700;
- font-size: 11px;
- line-height: 20px;
- margin-left: 8px;
- vertical-align: middle;
+ }
+ }
+ [purpose='admin-nav'] {
+ justify-content: center;
+ a {
+ margin-left: 30px;
+ margin-right: 30px;
+ color: @core-fleet-black-75;
+ &:hover {
+ color: @core-fleet-black;
}
}
- }
-}
-[purpose='admin-nav'] {
- justify-content: center;
- a {
- margin-left: 30px;
- margin-right: 30px;
- color: @core-fleet-black-75;
- &:hover {
+ span {
color: @core-fleet-black;
+ font-weight: 600;
+ margin-right: 30px;
}
}
- span {
- color: @core-fleet-black;
- font-weight: 600;
- margin-right: 30px;
- }
}
// Footer styles
@@ -411,8 +433,6 @@ html, body {
}
}
-
-
body.detected-mobile {
// Above and beyond the media queries below, this selector (which relies on
// `parasails` automatically attaching this class, if appropriate) contains
@@ -421,9 +441,9 @@ body.detected-mobile {
// devices (like the iPad) as well as handset devices (like the iPhone).
// …
}
-@media (max-width: 992px) {
- .homepage-cta-banner+.homepage-header-top {
- top: 72px;
+@media (max-width: 991px) {
+ [purpose='page-header'] {
+ padding: 19px 40px;
}
[purpose='page-wrap'] {
padding-bottom: 460px;
@@ -432,13 +452,23 @@ body.detected-mobile {
padding: 64px 40px;
height: 460px;
}
-
[purpose='footer-socials'] {
margin-bottom: 32px;
}
}
@media (max-width: 767px) {
+ [purpose='page-header'] {
+ padding: 19px 32px;
+ [purpose='mobile-nav'] {
+ [purpose='mobile-nav-header'] {
+ padding: 19px 32px;
+ }
+ [purpose='mobile-nav-container'] {
+ padding: 8px 32px 0px 32px;
+ }
+ }
+ }
[purpose='page-wrap'] {
padding-bottom: 701px;
}
@@ -451,11 +481,6 @@ body.detected-mobile {
}
}
-@media (max-width: 605px) {
- .homepage-cta-banner + .homepage-header-top {
- top: 92px;
- }
-}
@media (max-width: 575px) {
[purpose='page-wrap'] {
padding-bottom: 925px;
@@ -463,6 +488,17 @@ body.detected-mobile {
[purpose='page-wrap'].reduced-footer-links {
padding-bottom: 97px;
}
+ [purpose='page-header'] {
+ padding: 19px 24px;
+ [purpose='mobile-nav'] {
+ [purpose='mobile-nav-header'] {
+ padding: 19px 24px;
+ }
+ [purpose='mobile-nav-container'] {
+ padding: 8px 24px 0px 24px;
+ }
+ }
+ }
[purpose='reduced-nav-footer'] {
height: 97px;
}
@@ -490,14 +526,17 @@ body.detected-mobile {
}
}
-@media (max-width: 393px) {
- .homepage-cta-banner + .homepage-header-top {
- top: 112px;
- }
-}
-@media (max-width: 330px) {
- .homepage-cta-banner + .homepage-header-top {
- top: 132px;
+@media (max-width: 375px) {
+ [purpose='page-header'] {
+ padding: 19px 16px;
+ [purpose='mobile-nav'] {
+ [purpose='mobile-nav-header'] {
+ padding: 19px 16px;
+ }
+ [purpose='mobile-nav-container'] {
+ padding: 8px 16px 0px 16px;
+ }
+ }
}
}
diff --git a/website/views/layouts/layout.ejs b/website/views/layouts/layout.ejs
index fdba214296..c5859e0bd7 100644
--- a/website/views/layouts/layout.ejs
+++ b/website/views/layouts/layout.ejs
@@ -145,147 +145,144 @@