From 2ae854c3bd9e53d232b52e445d63a8fa62c28bc5 Mon Sep 17 00:00:00 2001 From: Luke Fretwell Date: Sat, 9 May 2026 16:47:19 -0700 Subject: [PATCH] Updates to css, add redirect --- _data/nav.json | 5 - _data/nav_footer.json | 4 - _includes/feedback.html | 23 + _includes/footer.html | 22 +- _includes/header.html | 15 +- _includes/js.html | 11 + _includes/layouts/redirect.html | 13 + _includes/style.html | 12 +- content/index.html | 33 +- .../2025-11-23-scangov-website-rfp-builder.md | 31 + content/plans.html | 19 +- content/services.html | 53 - content/sso-setup-guide.md | 76 +- public/assets/img/pages/website-rfp-og.png | Bin 18222 -> 20960 bytes public/css/scangov.css | 1753 ++++++++++++++--- public/css/style.css | 652 ------ 16 files changed, 1603 insertions(+), 1119 deletions(-) create mode 100644 _includes/feedback.html create mode 100644 _includes/layouts/redirect.html create mode 100644 content/news/2025-11-23-scangov-website-rfp-builder.md delete mode 100644 content/services.html diff --git a/_data/nav.json b/_data/nav.json index 4965fdb9..474f7d60 100644 --- a/_data/nav.json +++ b/_data/nav.json @@ -14,11 +14,6 @@ "icon": "fa-solid fa-wand-magic-sparkles", "url": "/demo" }, - { - "title": "Services", - "icon": "fa-solid fa-puzzle-piece", - "url": "/services/" - }, { "title": "Login", "icon": "fa-solid fa-right-from-bracket", diff --git a/_data/nav_footer.json b/_data/nav_footer.json index 66f2b240..4ab7c059 100644 --- a/_data/nav_footer.json +++ b/_data/nav_footer.json @@ -42,10 +42,6 @@ "title": "Demo", "url": "/demo" }, - { - "title": "Services", - "url": "/services" - }, { "title": "What they say", "url": "/what-they-say/" diff --git a/_includes/feedback.html b/_includes/feedback.html new file mode 100644 index 00000000..821a69b3 --- /dev/null +++ b/_includes/feedback.html @@ -0,0 +1,23 @@ + + Get ScanGov + + \ No newline at end of file diff --git a/_includes/footer.html b/_includes/footer.html index f8084ad2..1c297ed5 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -14,15 +14,12 @@ {% endfor %} -
+
-
-

+

+

Built with - + by ScanGov

@@ -30,12 +27,21 @@
+{% include "analytics.html" %} +{% include "js.html" %} +{% include "feedback.html" %} {% include "analytics.html" %} + if(document.getElementById('dropdownMenuButton')) { + document.getElementById('dropdownMenuButton').addEventListener('click',function(e) { + let el = document.querySelector('[aria-labelledby="'+this.id+'"]') + el.classList.toggle('show'); + }) + } + {% getBundle "fontawesome" %} \ No newline at end of file diff --git a/_includes/header.html b/_includes/header.html index 82682d5d..e2a0021f 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -60,9 +60,16 @@ {% include "favicon.html" %} {% include "style.html" %} + - - + + diff --git a/_includes/js.html b/_includes/js.html index e69de29b..57e7d665 100644 --- a/_includes/js.html +++ b/_includes/js.html @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/_includes/layouts/redirect.html b/_includes/layouts/redirect.html new file mode 100644 index 00000000..58623d9e --- /dev/null +++ b/_includes/layouts/redirect.html @@ -0,0 +1,13 @@ + + + + + + + Redirecting… + + + +

Redirecting… Click here if you are not redirected.

+ + diff --git a/_includes/style.html b/_includes/style.html index 63e3759e..8381b72d 100644 --- a/_includes/style.html +++ b/_includes/style.html @@ -1,5 +1,7 @@ - -{% set css %} {% include "public/css/style.css" %} {% endset %} - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/content/index.html b/content/index.html index f71f4497..7b3dcb7b 100644 --- a/content/index.html +++ b/content/index.html @@ -11,7 +11,7 @@

Indicators

-

Holistically addressing government digital experience.

+

Holistically addressing digital experience.

{% include "indicator_list.html" %}

Indicators @@ -42,7 +42,6 @@

Why it matters

Who it's for

-

Everyone responsible for serving the public.

{% for item in who %}
@@ -105,34 +104,6 @@

GovX Awards

-
-
-

Showcase

-

Featured digital experience scorecards.

-
- {% for item in showcase %} -
- {% if item.feature %} -
-
-

- - {{ item.title }} -

-
-
- {% endif %} -
- {% endfor %} -
-

- Showcase -

-
-
@@ -148,7 +119,7 @@

Plans

Now scanning ...

-

ScanGov government digital experience reviews.

+

ScanGov digital experience reviews.

{% include "now_scanning_list.html" %}

Now scanning ... diff --git a/content/news/2025-11-23-scangov-website-rfp-builder.md b/content/news/2025-11-23-scangov-website-rfp-builder.md new file mode 100644 index 00000000..537d5c8a --- /dev/null +++ b/content/news/2025-11-23-scangov-website-rfp-builder.md @@ -0,0 +1,31 @@ +--- +title: "New ScanGov website RFP builder" +description: "Create website request for proposals based on ScanGov Standards." +date: 2025-11-23 +ogImage: pages/website-rfp-og.png +ogImageAlt: "Website RFP builder" +topics: + - ScanGov +--- + +ScanGov is proud to introduce our free [website request for proposal builder](https://scangov.com/rfp-builder/). + +You can now quickly create website RFPs based on [ScanGov Standards](https://standards.scangov.org) that include comprehensive compliance specifications for: + +* Accessibility +* AI-friendly +* Content +* Domain +* Security +* Search engine optimization +* Social media + +## How it works + +* Enter your organization/contact information +* Add general instructions (if any) +* Get your custom RFP + +## Get started + +[Build your website RFP.](https://scangov.com/rfp-builder/) diff --git a/content/plans.html b/content/plans.html index d661460d..0fe8924f 100644 --- a/content/plans.html +++ b/content/plans.html @@ -7,23 +7,6 @@ description: "ScanGov pricing." --- -

+
{% include "plans.html" %} -

* Need additional scans? Contact us for bulk discounts.

-

Need a free trial? Scan a few pages on your domain for free here.

- -
-
-
-
-

Questions?

-

Schedule demo - Contact us

-

Value added resellers

-

Making purchase for government partner?

-

Purchase enterprise with annual billing here.

-

Purchase enterprise max plan with annual billing with 2 months free here.

-
-
-
\ No newline at end of file diff --git a/content/services.html b/content/services.html deleted file mode 100644 index 1d26c16f..00000000 --- a/content/services.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: "layouts/default" -date: 2025-08-30 -modified: -author: ScanGov -title: Services -description: "Supporting government digital transformation." -ogImage: pages/services-og.png -ogImageAlt: "Puzzle piece icon centered with ScanGov logo bottom right" -img_caption: "File icon by Font Awesome" -img_link: https://fontawesome.com -type: ---- - -
-
-
- {% set category = "" %} - {% for service in services.services %} - {% if service.category != category %} - {% if category != "" %} -
- {# close card group #} - {% endif %} - {% set category = service.category %} -

{{ service.category }}

-
- {% endif %} -
-
-
-

{{ service.name }}

-
-

{{ service.description }}

-
    - {% for output in service.serviceOutput %} -
  • {{ output }}
  • - {% endfor %} -
- -
-
- -
-
- {% endfor %} -
-
-
\ No newline at end of file diff --git a/content/sso-setup-guide.md b/content/sso-setup-guide.md index 6a34931a..06a5fcd2 100644 --- a/content/sso-setup-guide.md +++ b/content/sso-setup-guide.md @@ -1,75 +1,5 @@ --- -layout: layouts/default-plain -date: 2026-02-10 -modified: 2026-02-10 -author: ScanGov -title: "SSO Setup Guide" -description: "Set up Single Sign-On (SSO) with Okta using OpenID Connect (OIDC) to let your team log in to ScanGov with their existing credentials." +layout: layouts/redirect +redirect_to: https://docs.scangov.org/single-sign-on +permalink: /sso-setup-guide/ --- - -ScanGov supports Single Sign-On (SSO) via Okta using the OpenID Connect (OIDC) protocol. This allows your team members to log in to ScanGov using their existing Okta credentials. - -## Prerequisites - -- A ScanGov organization account with a paid enterprise plan -- An Okta administrator account with permission to create applications - -## Step 1: Create an OIDC Application in Okta - -1. Log in to your Okta Admin Console -2. Go to **Applications** > **Applications** > **Create App Integration** -3. Select **OIDC - OpenID Connect** as the sign-in method -4. Select **Web Application** as the application type -5. Click **Next** - -Configure the application with the following settings: - -| Setting | Value | -|---------|-------| -| App integration name | ScanGov | -| Grant type | Authorization Code | -| Sign-in redirect URI | `https://my.scangov.com/auth/callback` | -| Sign-out redirect URI | (leave blank) | -| Controlled access | Assign to the groups or people who should have access | - -6. Click **Save** - -After saving, Okta will display your **Client ID** and **Client Secret**. You will need these in the next step. - -Also note your **Okta domain**, which looks like `https://your-org.okta.com`. You can find this in the top-right corner of the Okta Admin Console. - -## Step 2: Configure SSO in ScanGov - -1. Log in to ScanGov at [my.scangov.com](https://my.scangov.com) -2. Go to your organization settings and click **SSO** in the sidebar -3. Enter the following values: - - **Email Domain** — The email domain your team uses (e.g., `acme.gov`). Users with this email domain will be routed to your Okta for SSO login. - - **Okta Domain** — Your Okta org URL (e.g., `https://your-org.okta.com`) - - **Client ID** — The Client ID from your Okta application - - **Client Secret** — The Client Secret from your Okta application -4. Click **Save** - -## Step 3: Log In with SSO - -Once configured, team members can log in via SSO: - -1. Go to [my.scangov.com](https://my.scangov.com) and click **Sign in with SSO** -2. Enter your email address and click **Continue** -3. You will be redirected to your organization's Okta login page -4. Authenticate with Okta -5. You will be redirected back to ScanGov and logged in - -## FAQ - -**Can team members still log in with a password?** -Yes. Password login remains available for users who were directly invited and setup a password. SSO is an additional login method. - -**What happens if I update the Client Secret in Okta?** -You will need to update the Client Secret in ScanGov's SSO configuration page to match. - -**Who can configure SSO in ScanGov?** -Any logged-in member of your organization with a paid plan can access the SSO configuration page. - -## Support - -If you run into any issues setting up SSO, contact us at support@scangov.com. diff --git a/public/assets/img/pages/website-rfp-og.png b/public/assets/img/pages/website-rfp-og.png index 576b134f4dd86c7542d2f33659c2e0ef82381f11..3283b49a809a9e2765c8eb0cc8f82beede85a093 100644 GIT binary patch literal 20960 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 literal 18222 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
Yo-5g4$NOp#H&hG1mdAKb#OXi} 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 diff --git a/public/css/scangov.css b/public/css/scangov.css index 58e49ac4..ea6e3b9d 100644 --- a/public/css/scangov.css +++ b/public/css/scangov.css @@ -1,98 +1,1207 @@ /* This file is maintaned in https://github.com/ScanGov/components and copied to multiple projects during startup */ -/* Root */ +/* Fonts */ -:root, [data-bs-theme=dark], [data-bs-theme=light] { +@font-face { + font-family: "Public Sans ExtraBold"; + src: url("/assets/fonts/public-sans/ttf/PublicSans-ExtraBold.ttf") format("truetype"); +} + +@font-face { + font-family: "Public Sans Bold"; + src: url("/assets/fonts/public-sans/ttf/PublicSans-Bold.ttf") format("truetype"); +} + +@font-face { + font-family: "Public Sans Regular"; + src: url("/assets/fonts/public-sans/ttf/PublicSans-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Public Sans Light"; + src: url("/assets/fonts/public-sans/ttf/PublicSans-Light.ttf") format("truetype"); +} + +@font-face { + font-family: "Public Sans Thin"; + src: url("/assets/fonts/public-sans/ttf/PublicSans-Thin.ttf") format("truetype"); +} + +@font-face { + font-family: "JetBrains Mono Medium"; + src: url("/assets/fonts/jetbrains-mono/JetBrainsMono-Medium.ttf") format("truetype"); +} + +@font-face { + font-family: "JetBrains Mono ExtraBold"; + src: url("/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.ttf") format("truetype"); +} + +/* Dark mode (default) */ + +:root, [data-bs-theme=dark] { + color-scheme: dark; + --bs-primary: #70e17b; + --bs-primary-rgb: 112, 225, 123; + --bs-primary-text: #13171f; --bs-body-color: #fff; --bs-body-color-rgb: 255, 255, 255; --bs-body-bg: #13171f; --bs-body-bg-rgb: 19, 23, 31; - --scangov-green: #70e17b; - --scangov-green-rgb: 112, 225, 123; - --bs-link-color: var(--scangov-green); - --bs-link-color-rgb: var(--scangov-green-rgb); - --bs-success-rgb: var(--scangov-green-rgb); + --bs-body-secondary-bg: #0f1218; + --bs-link-color: #70e17b; + --bs-link-color-rgb: 112, 225, 123; --bs-link-hover-color: var(--bs-link-color); --bs-link-hover-color-rgb: 112, 225, 123; - --bs-selection-bg: var(--bs-link-color); - --bs-selection-color: var(--bs-body-bg); + --bs-link-hover-decoration: none; + --bs-highlight-bg: var(--bs-primary); + --bs-highlight-color: var(--bs-primary-text); + --bs-selection-bg: var(--bs-primary); + --bs-selection-color: var(--bs-primary-text); + --bs-btn-primary: var(--bs-primary); + --bs-btn-primary-color: var(--bs-primary-text); + --bs-btn-primary-border-color: var(--bs-primary); + --bs-btn-primary-focus-shadow-rgb: 112, 225, 123; + --bs-btn-primary-active-shadow-rgb: 112, 225, 123; + --bs-btn-primary-active-color: var(--bs-primary-text); + --bs-btn-primary-active-bg: var(--bs-primary); + --bs-btn-primary-bg: var(--bs-primary); + --bs-btn-bg: var(--bs-primary); + --bs-btn-border-color: var(--bs-primary); + --bs-btn-color: var(--bs-primary-text); + --bs-btn-hover-bg: var(--bs-primary); + --bs-btn-hover-border-color: var(--bs-primary); + --bs-btn-hover-color: var(--bs-primary-text); + --bs-nav-link-color: var(--bs-body-color); + --bs-nav-link-hover-color: var(--bs-link-color); + --bs-border-color: #252f3e; + --bs-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); + --bs-card-shadow: var(--bs-shadow); + --bs-box-shadow: var(--bs-shadow); + --bs-box-shadow-md: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.5); + --bs-secondary: var(--bs-body-color); + --bs-text-secondary: var(--bs-secondary); + --bs-badge-bg: var(--bs-primary); + --bs-badge-font-weight: 300; + --bs-border-radius-sm: .25rem; + /* WCAG 2.2 AA: #face00 on #13171f = 11.87:1 ✓ */ + --bs-text-bg-primary: #face00; + --bs-info-text-emphasis: var(--bs-body-color); + --bs-info-bg-subtle: var(--bs-body-secondary-bg); + --bs-info-border-subtle: var(--bs-border-color); + --bs-text-muted: var(--bs-body-color); --bs-font-monospace: "JetBrains Mono Medium", monospace; --bs-font-light: "Public Sans Light", sans-serif; --bs-font-bold: "Public Sans Bold", sans-serif; --bs-font-regular: "Public Sans Regular", sans-serif; - --bs-font-serif: "Merriweather Light", sans-serif; - --bs-font-thin: "Public Sans Thin", sans-serif; - --bs-font-extra-bold: "Public Sans ExtraBold", sans-serif; --bs-font-sans-serif: "Public Sans Regular", sans-serif; + --bs-text-opacity: .5; + --bs-emphasis-color: var(--bs-body-color); + --bs-form-control-color: var(--bs-body-color); + --bs-form-control-bg: var(--bs-body-bg); + --bs-form-control-border-color: var(--bs-border-color); + --bs-form-control-focus-border-color: var(--bs-primary); + --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(112, 225, 123, 0.25); + --bs-form-control-focus-color: var(--bs-body-color); + --bs-card-focus-box-shadow: 0 0 0 0.25rem rgba(112, 225, 123, 0.25); + /* Status colors */ + --bs-bg-success: #70e17b; + --bs-bg-success-rgb: 112, 225, 123; + --bs-border-success: #70e17b; + --bs-text-warning: #000000; + --bs-bg-warning: #face00; + --bs-bg-warning-rgb: 250, 206, 0; + --bs-border-warning: #face00; + --bs-text-danger: #ffffff; + --bs-bg-danger: #e41d3d; + --bs-bg-danger-rgb: 228, 29, 61; + --bs-border-danger: #e41d3d; +} + +/* Light mode */ + +[data-bs-theme=light] { + color-scheme: light; + --bs-primary: #70e17b; + --bs-primary-rgb: 112, 225, 123; + --bs-primary-text: #13171f; + --bs-body-color: #13171f; + --bs-body-color-rgb: 19, 23, 31; + --bs-body-bg: #ffffff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-body-secondary-bg: #f4f6f9; + /* WCAG 2.2 AA: #2563eb on #fff = 4.66:1 ✓ */ + --bs-link-color: #2563eb; + --bs-link-color-rgb: 37, 99, 235; + --bs-link-hover-color: var(--bs-link-color); + --bs-link-hover-color-rgb: 37, 99, 235; + --bs-link-hover-decoration: none; + --bs-highlight-bg: var(--bs-primary); + --bs-highlight-color: var(--bs-primary-text); + --bs-selection-bg: var(--bs-primary); + --bs-selection-color: var(--bs-primary-text); + --bs-btn-primary: var(--bs-primary); + --bs-btn-primary-color: var(--bs-primary-text); + --bs-btn-primary-border-color: var(--bs-primary); + --bs-btn-primary-focus-shadow-rgb: 112, 225, 123; + --bs-btn-primary-active-shadow-rgb: 112, 225, 123; + --bs-btn-primary-active-color: var(--bs-primary-text); + --bs-btn-primary-active-bg: var(--bs-primary); + --bs-btn-primary-bg: var(--bs-primary); + --bs-btn-bg: var(--bs-primary); + --bs-btn-border-color: var(--bs-primary); + --bs-btn-color: var(--bs-primary-text); + --bs-btn-hover-bg: var(--bs-primary); + --bs-btn-hover-border-color: var(--bs-primary); + --bs-btn-hover-color: var(--bs-primary-text); + --bs-nav-link-color: var(--bs-body-color); + --bs-nav-link-hover-color: var(--bs-link-color); + --bs-border-color: #d5dce8; + --bs-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.06); + --bs-card-shadow: var(--bs-shadow); + --bs-box-shadow: var(--bs-shadow); + --bs-box-shadow-md: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.15); + --bs-secondary: var(--bs-body-color); + --bs-text-secondary: var(--bs-secondary); + --bs-badge-bg: var(--bs-primary); + --bs-badge-font-weight: 300; + --bs-border-radius-sm: .25rem; + /* WCAG 2.2 AA: #8a6500 on #fff = 5.33:1 ✓ */ + --bs-text-bg-primary: #8a6500; + --bs-info-text-emphasis: var(--bs-body-color); + --bs-info-bg-subtle: var(--bs-body-secondary-bg); + --bs-info-border-subtle: var(--bs-border-color); + /* WCAG 2.2 AA: #4a5568 on #fff = 7.53:1 ✓ */ + --bs-text-muted: #4a5568; + --bs-text-opacity: .5; + --bs-emphasis-color: var(--bs-body-color); + --bs-form-control-color: var(--bs-body-color); + --bs-form-control-bg: var(--bs-body-bg); + --bs-form-control-border-color: var(--bs-border-color); + --bs-form-control-focus-border-color: var(--bs-primary); + --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(112, 225, 123, 0.25); + --bs-form-control-focus-color: var(--bs-body-color); + --bs-card-focus-box-shadow: 0 0 0 0.25rem rgba(112, 225, 123, 0.25); + /* font vars, status colors inherited from :root */ +} + +/* Status badge overrides */ + +/* WCAG 2.2 AA: #13171f on #70e17b = 8.19:1 ✓ */ +.text-bg-success { + color: #13171f !important; + background-color: #70e17b !important; +} + +/* WCAG 2.2 AA: #000 on #face00 = 15.18:1 ✓ */ +.text-bg-warning { + color: #000000 !important; + background-color: #face00 !important; +} + +/* WCAG 2.2 AA: #fff on #e41d3d = 4.73:1 ✓ */ +.text-bg-danger { + color: #ffffff !important; + background-color: #e41d3d !important; +} + +.text-bg-primary { + background-color: var(--bs-text-bg-primary) !important; + color: var(--bs-body-bg) !important; +} + +/* Theme-dependent: logo/image invert */ + +:root body footer img, +:root body ul.navbar-nav img, +[data-bs-theme=dark] body footer img, +[data-bs-theme=dark] body ul.navbar-nav img { + filter: invert(1); +} + +[data-bs-theme=light] body footer img, +[data-bs-theme=light] body ul.navbar-nav img { + filter: none; +} + +/* Theme-dependent: navbar toggler icon */ + +[data-bs-theme="light"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2819, 23, 31, 1%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +[data-bs-theme="dark"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 1%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +/* Theme-dependent: text-secondary */ + +.text-secondary { + color: rgba(19, 23, 31, var(--bs-text-opacity)) !important; +} + +[data-bs-theme=dark] .text-secondary { + color: rgba(255, 255, 255, var(--bs-text-opacity)) !important; +} + +/* General */ + +blockquote { + padding: 1rem 1rem .5rem 1rem; + margin: 1rem 0 1rem 1.5rem; + border-left: 0.25rem solid var(--bs-border-color); +} + +.text-muted { + color: var(--bs-body-color) !important; +} + +body { + color: var(--bs-body-color); + background-color: var(--bs-body-bg) !important; + font-family: var(--bs-font-sans-serif); + line-height: 1.5; +} + +strong { + font-family: var(--bs-font-bold); +} + +.navbar-brand, +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6, +.display-1, .display-2, .display-3, .display-4 { + font-family: var(--bs-font-bold); + letter-spacing: -.01rem; +} + +body.docs h2, +body.page h2, +body.docs h3, +body.page h3 { + margin-bottom: 1rem; + margin-top: 3rem; +} + +/* Lead */ + +.lead { + font-family: var(--bs-font-regular) !important; + font-size: 1.25rem; + font-weight: 300; + color: var(--bs-body-color); +} + +/* Selection */ + +::selection { + background-color: var(--bs-selection-bg); + color: var(--bs-selection-color); +} + +/* Accessibility */ + +/* Focus indicators (WCAG 2.4.7, 2.4.11) */ +:focus-visible { + outline: 3px solid var(--bs-link-color); + outline-offset: 2px; + border-radius: 2px; +} + +/* Remove outline on mouse/touch click, keep for keyboard (WCAG 2.4.7) */ +:focus:not(:focus-visible) { + outline: none; +} + +/* Minimum touch target size (WCAG 2.5.8) — exclude card children to avoid layout shift */ +a:not(.card):not(.card *):not(.stretched-link), +button:not(.card *) { + min-height: 24px; + min-width: 24px; +} + +/* Reduced motion (WCAG 2.3.3) */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} + +/* High contrast mode (WCAG 1.4.11) */ +@media (forced-colors: active) { + * { + forced-color-adjust: auto; + } +} + +/* Skip link — visible on focus for keyboard users (WCAG 2.4.1) */ +.skip-link { + position: absolute; + top: -100%; + left: 0; +} + +.skip-link:focus { + top: 0; +} + +/* Navbar */ + +#logo { + max-width: 35px; + width: 100%; + height: 100%; +} + +.navbar { + box-shadow: var(--bs-shadow); + transition: box-shadow 0.25s ease; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-font-size: 1.1em; +} + +.navbar-brand { + font-family: var(--bs-font-bold); + color: var(--bs-body-color) !important; +} + +.navbar-brand>svg { + fill: var(--bs-body-color) !important; +} + +.navbar-brand:hover { + color: var(--bs-link-color) !important; +} + +.navbar-brand:hover>svg { + fill: var(--bs-link-color) !important; +} + +.navbar-toggler-icon { + color: var(--bs-body-color) !important; +} + +.navbar-nav, +.navbar-nav .nav-link:not(.active), +a.list-group-item { + color: var(--bs-body-color) !important; + font-family: "Public Sans Regular", sans-serif !important; +} + +.nav-link { + font-family: "Public Sans Regular", sans-serif !important; +} + +.navbar-nav .nav-link:not(.active):hover, +a.list-group-item:hover { + color: var(--bs-link-color) !important; +} + +a.list-group-item:hover { + background-color: var(--bs-body-secondary-bg); +} + +.border-end { + box-shadow: var(--bs-shadow); +} + +/* Social links */ + +.social a, .social a:visited { + color: var(--bs-body-color); + display: inline-block; + margin-right: .75rem; +} + +.social a:hover { + color: var(--bs-link-color); +} + +/* External link icon (post content only) */ + +.post-content a[href^="http"]:not([href^="https://scangov.org"]):not([href^="https://standards.scangov.org"]):not([href^="https://scangov.com"]):not([href^="https://data.scangov.org"]):not([href^="http://localhost:4000/"]):not([href^="https://docs.scangov.org"])::after { + content: "\f35d"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-left: 5px; + font-size: 0.8em; + display: inline-block; +} + +.social a[href^="http"]:not([href^="https://scangov.org"]):not([href^="https://scangov.com"]):not([href^="http://localhost:4000/"]):not([href^="https://docs.scangov.org"])::after { + display: none !important; +} + +/* Breadcrumb */ + +.breadcrumb-item a, .breadcrumb-item a:visited { + color: var(--bs-link-color); + font-family: var(--bs-font-bold); + text-decoration: none; +} + +/* Links / Buttons */ + +a:hover { + text-decoration: var(--bs-link-hover-decoration); + color: var(--bs-link-hover-color); +} + +a.btn-primary, a.btn-primary:visited, .btn-primary { + background-color: var(--bs-primary) !important; + color: var(--bs-primary-text) !important; + border-radius: var(--bs-border-radius); + border: 1px solid var(--bs-primary) !important; + box-shadow: var(--bs-shadow); + cursor: pointer; + font-family: var(--bs-font-bold); + padding: .55rem; + transition: filter 0.25s ease, box-shadow 0.25s ease; +} + +a.btn-primary-outline { + background-color: var(--bs-body-bg); + color: var(--bs-body-color); + border-radius: var(--bs-border-radius-sm); + border: 1px solid var(--bs-border-color); + box-shadow: var(--bs-shadow); + cursor: pointer; + font-family: var(--bs-font-sans-serif); + padding: .55rem; + transition: filter 0.25s ease, box-shadow 0.25s ease; +} + +a.btn-primary:hover, a.btn-primary:focus, +input[type="submit"].btn-primary:hover, input[type="submit"].btn-primary:focus { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); + background-color: var(--bs-primary) !important; + color: var(--bs-primary-text) !important; + border: 1px solid var(--bs-primary) !important; +} + +a.btn-primary-outline:not(.active):hover, .btn-primary-outline:not(.active):hover, +a.btn-primary-outline:not(.active):focus { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); + border: 1px solid var(--bs-border-color); +} + +.feedback { + opacity: 0; + pointer-events: none; + visibility: hidden; + background-color: var(--bs-primary); + color: var(--bs-primary-text) !important; + border-radius: var(--bs-border-radius); + border: 1px solid var(--bs-primary); + box-shadow: var(--bs-shadow); + cursor: pointer; + font-family: var(--bs-font-bold); + padding: .55rem; + position: fixed; + bottom: 2rem; + right: 2rem; + z-index: 1000; + text-decoration: none; + transition: opacity 0.25s ease, visibility 0.25s ease, filter 0.25s ease, box-shadow 0.25s ease; +} + +.feedback.is-visible { + opacity: 1; + pointer-events: auto; + visibility: visible; +} + +.feedback svg, a.btn svg { + transition: filter 0.25s ease; +} + +.feedback:hover, .feedback:focus, +a.btn:hover, a.btn:focus, +.btn-primary:hover, .btn-primary:focus { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); + background-color: var(--bs-primary) !important; + color: var(--bs-primary-text) !important; + border-color: var(--bs-primary) !important; +} + +/* js-triggered Bootstrap classes */ +.btn-check:checked+.btn, +.btn.active:not(.nav-link), +.btn.show, +.btn:first-child:active, +:not(.btn-check)+.btn:active { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} + +/* Nav pills */ + +.nav-pills { + --bs-nav-pills-link-active-bg: var(--bs-primary); + --bs-nav-link-hover-border-color: #1a2130; +} + +[data-bs-theme=light] .nav-pills { + --bs-nav-link-hover-border-color: #b0bac8; +} + +.nav-pills .nav-link svg { + flex-shrink: 0; + width: 1em; + height: 1em; +} + +.nav-pills .nav-link { + border: 1px solid var(--bs-border-color); + box-shadow: var(--bs-shadow); + font-family: "Public Sans Regular", sans-serif !important; + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + transition: filter 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + margin-top: 0.35rem; + margin-bottom: 0.35rem; + display: inline-flex !important; + align-items: center; + width: auto; + flex-shrink: 0; +} + +.nav-pills .nav-link:not(.active):hover, +.nav-pills a.btn-primary-outline:not(.active):hover { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); + border: 1px solid var(--bs-nav-link-hover-border-color); +} + +/* Nav pills active — #13171f on #70e17b = 8.19:1 ✓ (both themes) */ +.nav-pills .nav-link.active, +.nav-pills .nav-link.active:focus, +.nav-pills a.btn-primary-outline.active, +.nav-pills a.btn-primary-outline.active:focus, +[data-bs-theme=light] .nav-pills .nav-link.active, +[data-bs-theme=light] .nav-pills .nav-link.active:focus, +[data-bs-theme=light] .nav-pills a.btn-primary-outline.active, +[data-bs-theme=light] .nav-pills a.btn-primary-outline.active:focus { + background-color: #70e17b !important; + color: #13171f !important; + border-color: #70e17b !important; + box-shadow: var(--bs-shadow); +} + +.nav-pills .nav-link.active:hover, +.nav-pills a.btn-primary-outline.active:hover, +[data-bs-theme=light] .nav-pills .nav-link.active:hover, +[data-bs-theme=light] .nav-pills a.btn-primary-outline.active:hover { + background-color: #70e17b !important; + color: #13171f !important; + border-color: #70e17b !important; + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); +} + +.nav-pills .nav-link.active i, +.nav-pills .nav-link.active svg, +.nav-pills a.btn-primary-outline.active i, +.nav-pills a.btn-primary-outline.active svg, +[data-bs-theme=light] .nav-pills .nav-link.active i, +[data-bs-theme=light] .nav-pills .nav-link.active svg, +[data-bs-theme=light] .nav-pills a.btn-primary-outline.active i, +[data-bs-theme=light] .nav-pills a.btn-primary-outline.active svg { + color: #13171f !important; +} + +.nav-pills .active { + --bs-link-color: var(--bs-body-bg); +} + +/* Pagination */ + +.active>.page-link, .page-link.active { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} + +/* Dropdown */ + +.dropdown-toggle::after { + display: none; +} + +.dropdown-toggle svg { + color: var(--bs-btn-color) !important; + transition: 0.15s color; +} + +.dropdown-toggle:hover svg, +.dropdown-toggle:focus svg { + color: var(--bs-btn-hover-color) !important; +} + +.dropdown-menu.show { + display: block; +} + +/* Badge */ + +.badge { + font-family: "Public Sans Regular", sans-serif !important; + padding: .55rem !important; + font-size: .8rem !important; + font-weight: 300; + border-radius: var(--bs-border-radius-sm) !important; +} + +.badge-primary:hover { + background-color: #fee685 !important; + /* WCAG 2.2 AA: #13171f on #fee685 = 14.42:1 ✓ */ + color: #13171f !important; +} + +/* Cards */ + +.card { + border: 1px solid var(--bs-border-color); + box-shadow: var(--bs-shadow); + width: 100%; + transition: filter 0.25s ease, box-shadow 0.25s ease; +} + +.card:focus, +.card:focus-within { + box-shadow: var(--bs-card-focus-box-shadow); +} + +a.card { + text-decoration: none; +} + +.card:not(.text-bg-success):not(.text-bg-warning):not(.text-bg-danger):hover { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); +} + +.card-header>a, +.card-header>a>svg { + color: inherit !important; +} + +.card-hover { + transition: filter 0.25s ease, box-shadow 0.25s ease; +} + +.card-hover:hover { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); +} + +/* Status cards — consistent across themes */ + +.text-bg-success.card { + border-color: #70e17b !important; +} + +.text-bg-warning.card { + border-color: #face00 !important; +} + +.text-bg-danger.card { + border-color: #e41d3d !important; +} + +.text-bg-success.card:hover, +.text-bg-warning.card:hover, +.text-bg-danger.card:hover { + filter: brightness(1.3); + box-shadow: var(--bs-box-shadow-md); +} + +/* Icons and links inside status cards match card text color */ +.card.text-bg-success i, .card.text-bg-success svg, +.card.text-bg-success a, .card.text-bg-success a:visited, .card.text-bg-success a:hover, +.card.text-bg-warning i, .card.text-bg-warning svg, +.card.text-bg-warning a, .card.text-bg-warning a:visited, .card.text-bg-warning a:hover { + color: #13171f !important; + fill: #13171f !important; +} + +.card.text-bg-danger i, .card.text-bg-danger svg, +.card.text-bg-danger a, .card.text-bg-danger a:visited, .card.text-bg-danger a:hover { + color: #ffffff !important; + fill: #ffffff !important; +} + +.text-bg-success .card-header, +.text-bg-warning .card-header, +.text-bg-danger .card-header { + background-color: rgba(255, 255, 255, 0.15) !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important; + padding: 0.75rem 1rem; + font-family: var(--bs-font-regular); + --bs-card-cap-bg: rgba(255, 255, 255, 0.15); +} + +.text-bg-success .card-body, +.text-bg-warning .card-body, +.text-bg-danger .card-body { + padding: 1rem; +} + +/* Forms */ + +.form-control { + color: var(--bs-body-color) !important; + border: 1px solid var(--bs-border-color); + box-shadow: var(--bs-shadow); + transition: filter 0.25s ease, box-shadow 0.25s ease; +} + +.form-control:hover { + filter: brightness(1.05); + box-shadow: var(--bs-box-shadow-md); +} + +.form-control:focus { + border-color: var(--bs-primary); + box-shadow: var(--bs-form-control-focus-box-shadow); + filter: none; +} + +::placeholder, ::-ms-input-placeholder { + color: var(--bs-body-color); + opacity: var(--bs-text-opacity); +} + +input[type="submit"] { + min-width: 80px; +} + +/* SVG */ + +svg { + display: inline-block; + height: 1em; + overflow: visible; + vertical-align: -.125em; + margin: 0 .3rem; + flex-shrink: 0; + width: 1em; +} + +svg.sizeicon-xl { + height: 1.5em; + max-width: 1.5em; + line-height: .04167em; +} + +table td svg { + margin: 0; +} + +/* FA size classes override the default 1em height */ +.fa-2xs svg { + height: 0.625em; +} + +.fa-xs svg { + height: 0.75em; +} + +.fa-sm svg { + height: 0.875em; +} + +.fa-lg svg { + height: 1.25em; +} + +.fa-xl svg { + height: 1.5em; +} + +.fa-2xl svg { + height: 2em; +} + +.fa-2x svg { + height: 2em; +} + +.fa-3x svg { + height: 3em; +} + +.fa-4x svg { + height: 4em; +} + +.fa-5x svg { + height: 5em; +} + +.fa-6x svg { + height: 6em; +} + +.fa-7x svg { + height: 7em; +} + +.fa-8x svg { + height: 8em; +} + +.fa-9x svg { + height: 9em; +} + +.fa-10x svg { + height: 10em; +} + +svg.fa-circle-check { + fill: var(--bs-success); +} + +svg.fa-circle-xmark { + fill: var(--bs-danger); +} + +svg.fa-circle-exclamation { + fill: var(--bs-warning); +} + +svg.fa-circle-right { + fill: var(--bs-info); +} + +/* Images */ + +main#home img { + display: block; + margin: auto; + margin-bottom: 0.5rem; +} + +/* Accessibility utilities */ + +.fa-sr-only, .fa-sr-only-focusable:not(:focus), .sr-only, .sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.d-none { + display: none; +} + +.biggest { + width: 50%; +} + +/* Timeline */ + +.timeline { + border-left: 1px solid hsl(0, 0%, 90%); + position: relative; + list-style: none; +} + +.timeline .timeline-item { + position: relative; +} + +.timeline .timeline-item:after { + position: absolute; + display: block; + top: 0; + background-color: hsl(0, 0%, 90%); + left: -38px; + border-radius: 50%; + height: 11px; + width: 11px; + content: ''; +} + +.timeline-domain { + margin-bottom: 0.25rem; +} + +.timeline-date { + font-family: var(--bs-font-bold); +} + +/* Anchor links */ + +h2 a#heading-hashtag, +h3 a#heading-hashtag { + display: none; +} + +h2:hover a#heading-hashtag, +h3:hover a#heading-hashtag { + display: revert; +} + +/* iframe */ + +iframe { + border: 1px solid var(--bs-border-color) !important; +} + +/* News posts */ + +.post-content h2 { + margin-top: 2.75rem; +} + +.post-content ul, .post-content p { + margin-bottom: 1.75rem; +} + +/* Autocomplete search */ + +.awesomplete [hidden] { + display: none; +} + +.awesomplete .visually-hidden { + position: absolute; + clip: rect(0, 0, 0, 0); +} + +.awesomplete { + display: block; + position: relative; +} + +.awesomplete>input { + display: block; +} + +.awesomplete>ul { + position: absolute; + left: 0; + z-index: 1; + min-width: 100%; + box-sizing: border-box; + list-style: none; + padding: 0; + margin: 0.2em 0 0; + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: 0.05em 0.2em 0.6em rgba(0, 0, 0, 0.2); + text-shadow: none; +} + +.awesomplete>ul:empty { + display: none; +} + +@supports (transform: scale(0)) { + .awesomplete>ul { + transition: 0.3s cubic-bezier(0.4, 0.2, 0.5, 1.4); + } + + .awesomplete>ul[hidden], + .awesomplete>ul:empty { + opacity: 0; + transform: scale(0); + display: block; + visibility: hidden; + transition-timing-function: ease; + } +} + +.awesomplete>ul>li { + position: relative; + padding: 0.7em 1em; + cursor: pointer; +} + +.awesomplete>ul>li:hover { + background: hsl(200, 40%, 80%); + color: black; +} + +.awesomplete>ul>li[aria-selected='true'] { + background: hsl(205, 40%, 40%); + color: white; +} + +.awesomplete mark { + background: hsl(65, 100%, 50%); +} + +.awesomplete li:hover mark { + background: hsl(68, 100%, 41%); +} + +.awesomplete li[aria-selected='true'] mark { + background: hsl(86, 100%, 21%); + color: inherit; +} + +/* File types */ + +a[href$=".doc"]::after, +a[href$=".docx"]::after, +a[href$=".ppt"]::after, +a[href$=".pptx"]::after, +a[href$=".xls"]::after, +a[href$=".xlsx"]::after, +a[href$=".pdf"]::after, +a[href$=".mp3"]::after, +a[href$=".mp4"]::after, +a[href$=".avi"]::after, +a[href$=".mpg"]::after, +a[href$=".mpeg"]::after, +a[href$=".mov"]::after, +a[href$=".wmv"]::after, +a[href$=".mkv"]::after, +a[href$=".jpg"]::after, +a[href$=".jpeg"]::after, +a[href$=".png"]::after, +a[href$=".gif"]::after { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + margin-left: 0.5rem; + background-size: contain; + background-repeat: no-repeat; +} + +a[href$=".doc"]::after, +a[href$=".docx"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-word.svg); +} + +a[href$=".ppt"]::after, +a[href$=".pptx"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-powerpoint.svg); +} + +a[href$=".xls"]::after, +a[href$=".xlsx"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-excel.svg); +} + +a[href$=".pdf"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-pdf.svg); +} + +a[href$=".mp3"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-audio.svg); +} + +a[href$=".mp4"]::after { + background-image: url(/assets/font-awesome/svgs/solid/file-video.svg); +} + +.fa-bluesky { + color: #96abee !important; +} + +.fa-mastodon { + color: #f8b9c5 !important; +} + +.fa-book-open-reader { + color: #c3ebfa !important; +} + +.fa-check { + color: #e7f434 !important; } -/* General */ +.fa-circle-exclamation { + color: #f8b9c5 !important; +} -body { - color: var(--bs-body-color); - background: var(--bs-body-bg); - background-color: var(--bs-body-bg); - font-family: var(--bs-font-sans-serif); +.fa-circle-plus { + color: #70e17b !important; } -strong { - font-family: var(--bs-font-bold); +.fa-circle-dot { + color: #f3bf90 !important; } -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -.display-1, -.display-2, -.display-3, -.display-4 { - font-family: var(--bs-font-bold); +.fa-circle-down { + color: #e41d3d !important; } -.text-bg-success { - color: #000 !important; +.fa-circle-up { + color: #21c834 !important; } -/* Selection */ +.fa-comments { + color: #c5c5f3 !important; +} -::selection { - background-color: var(--bs-selection-bg); - color: var(--bs-selection-color); +.fa-dolly { + color: #f5fbc1 !important; } -/* Navbar */ +.fa-file-contract { + color: #fee685 !important; +} -#logo { - max-width: 35px; - width: 100%; - height: 100%; +.fa-file-pdf { + color: #f8b9c5 !important; } -/* Breadcrumb */ +.fa-filter-circle-xmark { + color: #f8b9c5 !important; +} -.breadcrumb-item a, .breadcrumb-item a:visited { - color: var(--bs-link-color); - font-family: var(--bs-font-bold); - text-decoration: none; +.fa-fire { + color: #ffbc78 !important; } -/* Icons */ +.fa-highlighter { + color: #e7f434 !important; +} -/* Brands */ +.fa-plug-circle-bolt { + color: #fff5c2 !important; +} -.fa-bluesky { - color: #96abee !important; +.fa-puzzle-piece { + color: #98d035 !important; +} + +.fa-rotate { + color: #c5ee93 !important; +} + +.fa-share-from-square { + color: #f8b9c5 !important; } +/* Icons — dark mode (vibrant pastels on dark bg) */ + .fa-github { color: #96abee !important; } @@ -105,20 +1214,22 @@ h6, color: #c3ebfa !important; } -.fa-mastodon { - color: #f8b9c5 !important; -} - .fa-youtube { color: #fd8ba0 !important; } -/* General */ - -.fa-rotate, .fa-arrows-rotate { +.fa-arrows-rotate { color: #c5ee93 !important; } +.fa-arrow-right-to-bracket { + color: #70e17b !important; +} + +.fa-bars-progress { + color: #ffbc78; +} + .fa-bell { color: #29e1cb !important; } @@ -131,10 +1242,6 @@ h6, color: #face00 !important; } -.fa-book-open-reader { - color: #c3ebfa !important; -} - .fa-brain { color: #fdb8ae !important; } @@ -155,55 +1262,29 @@ h6, color: #ffbe2e !important; } -.fa-check { - color: #e7f434 !important; -} - .fa-check-to-slot { color: #ffb4cf !important; } -.fa-circle { - color: #97d4ea !important; -} - .fa-circle-check { color: #70e17b !important; } -.fa-circle-exclamation { - color: #f8b9c5 !important; -} - -.fa-circle-plus { - color: #70e17b !important; -} - -.fa-circle-dot { - color: #f3bf90 !important; -} - -.fa-circle-down { - color: #e41d3d !important; -} - .fa-circle-nodes { color: #c3ebfa; } -.fa-circle-up { - color: #21c834 !important; +.fa-circle-notch { + color: #e6e6e6 !important; } -/* -.fa-circle-info { - color: #b8d293 !important; +.fa-circle-question { + color: #97d4ea; } -.fa-circle-question { - color: #97d4ea !important; +.fa-circle-info { + color: #b8d293 !important; } -*/ .fa-code { color: #bbc8f5 !important; @@ -213,10 +1294,6 @@ h6, color: #c5c5f3 !important; } -.fa-comments { - color: #c5c5f3 !important; -} - .fa-crown { color: #ffe396 !important; } @@ -229,10 +1306,6 @@ h6, color: #7efbe1 !important; } -.fa-dolly { - color: #f5fbc1 !important; -} - .fa-envelope-open-text { color: #7efbe1 !important; } @@ -253,26 +1326,10 @@ h6, color: #a8f2ff; } -.fa-file-contract { - color: #fee685; -} - -.fa-file-pdf { - color: #F8B9C5; -} - .fa-filter { color: #cbc4f2; } -.fa-filter-circle-xmark { - color: #f8b9c5; -} - -.fa-fire { - color: #ffbc78 !important; -} - .fa-flag { color: #f45d79; } @@ -293,7 +1350,11 @@ h6, color: #c7efe2; } -.fa-hand, .fa-hands, .fa-hands-clapping, .fa-handshake-simple, .fa-handshake-angle, .fa-hand-peace, .fa-hand-pointer, .fa-hand-point-up, .fa-hand-point-down, .fa-hand-point-right, .fa-hand-point-left { +.fa-hand, .fa-hands, .fa-hands-clapping, +.fa-handshake-simple, .fa-handshake-angle, +.fa-hand-peace, .fa-hand-pointer, +.fa-hand-point-up, .fa-hand-point-down, +.fa-hand-point-right, .fa-hand-point-left { color: #face00; } @@ -305,14 +1366,14 @@ h6, color: #ff8d7b; } -.fa-highlighter { - color: #e7f434; -} - .fa-house { color: #f4b2ff; } +.fa-key { + color: #f8b9c5; +} + .fa-laptop { color: #9bd4cf; } @@ -325,10 +1386,6 @@ h6, color: #ffe396; } -.fa-key { - color: #f8b9c5; -} - .fa-link { color: #7efbe1; } @@ -357,14 +1414,6 @@ h6, color: #a8f2ff; } -.fa-plug-circle-bolt { - color: #fff5c2; -} - -.fa-puzzle-piece { - color: #98D035; -} - .fa-ranking-star { color: #83fcd4; } @@ -378,7 +1427,7 @@ h6, } .fa-robot { - color: #e7f434; + color: #e6e6e6; } .fa-rocket { @@ -393,14 +1442,14 @@ h6, color: #c3ebfa !important; } -.fa-scroll { - color: #fee685 !important; -} - .fa-scale-balanced { color: #e6c74c; } +.fa-scroll { + color: #fee685 !important; +} + .fa-seedling { color: #c5ee93; } @@ -409,22 +1458,12 @@ h6, color: #fbbaa7; } -.fa-share-from-square { - color: #f8b9c5; -} - .fa-share-nodes { color: #ffb4cf; } -/* -.fa-sort { - color: #fff; -} -*/ - .fa-spray-can-sparkles { - color: #f8b9c5; + color: #d0b4f5; } .fa-square-check { @@ -436,7 +1475,7 @@ h6, } .fa-table { - color: #f8b9c5; + color: #7efbe1; } .fa-timeline { @@ -452,7 +1491,7 @@ h6, } .fa-user-group { - color: #f8b9c5; + color: #96abee; } .fa-user-shield { @@ -460,160 +1499,342 @@ h6, } .fa-wand-magic-sparkles { - color: #f8b9c5; + color: #ffe396; } .fa-window-maximize { color: #ffcdd5; } -/* Buttons */ +/* Icons — light mode overrides (WCAG 2.2 AA compliant, min 4.5:1 on #fff) */ + +[data-bs-theme=light] .fa-arrow-right-to-bracket, +[data-bs-theme=light] .fa-arrows-rotate, +[data-bs-theme=light] .fa-building, +[data-bs-theme=light] .fa-circle-check, +[data-bs-theme=light] .fa-circle-info, +[data-bs-theme=light] .fa-circle-plus, +[data-bs-theme=light] .fa-puzzle-piece, +[data-bs-theme=light] .fa-rotate, +[data-bs-theme=light] .fa-seedling { + /* → #2d7a3a = 5.31:1 ✓ */ + color: #2d7a3a !important; +} + +[data-bs-theme=light] .fa-bell, +[data-bs-theme=light] .fa-diagram-project, +[data-bs-theme=light] .fa-envelope-open-text, +[data-bs-theme=light] .fa-graduation-cap, +[data-bs-theme=light] .fa-link, +[data-bs-theme=light] .fa-ranking-star, +[data-bs-theme=light] .fa-table { + /* → #0d7a6e = 5.22:1 ✓ */ + color: #0d7a6e !important; +} + +[data-bs-theme=light] .fa-bell-concierge, +[data-bs-theme=light] .fa-brain, +[data-bs-theme=light] .fa-map, +[data-bs-theme=light] .fa-server { + /* → #8a5e2d = 5.65:1 ✓ */ + color: #8a5e2d !important; +} + +[data-bs-theme=light] .fa-bolt, +[data-bs-theme=light] .fa-certificate, +[data-bs-theme=light] .fa-check, +[data-bs-theme=light] .fa-crown, +[data-bs-theme=light] .fa-dolly, +[data-bs-theme=light] .fa-face-smile, +[data-bs-theme=light] .fa-file-contract, +[data-bs-theme=light] .fa-hand, [data-bs-theme=light] .fa-hands, +[data-bs-theme=light] .fa-hands-clapping, +[data-bs-theme=light] .fa-handshake-simple, +[data-bs-theme=light] .fa-handshake-angle, +[data-bs-theme=light] .fa-hand-peace, +[data-bs-theme=light] .fa-hand-pointer, +[data-bs-theme=light] .fa-hand-point-up, +[data-bs-theme=light] .fa-hand-point-down, +[data-bs-theme=light] .fa-hand-point-right, +[data-bs-theme=light] .fa-hand-point-left, +[data-bs-theme=light] .fa-highlighter, +[data-bs-theme=light] .fa-lightbulb, +[data-bs-theme=light] .fa-magnifying-glass, +[data-bs-theme=light] .fa-plug-circle-bolt, +[data-bs-theme=light] .fa-scale-balanced, +[data-bs-theme=light] .fa-scroll, +[data-bs-theme=light] .fa-star, +[data-bs-theme=light] .fa-wand-magic-sparkles { + /* → #8a6500 = 5.33:1 ✓ */ + color: #8a6500 !important; +} + +[data-bs-theme=light] .fa-bars-progress, +[data-bs-theme=light] .fa-dashboard, +[data-bs-theme=light] .fa-fire, +[data-bs-theme=light] .fa-gauge-simple, +[data-bs-theme=light] .fa-gauge-high, +[data-bs-theme=light] .fa-rss { + /* → #8a4f00 = 6.56:1 ✓ */ + color: #8a4f00 !important; +} + +[data-bs-theme=light] .fa-book-open-reader, +[data-bs-theme=light] .fa-circle-nodes, +[data-bs-theme=light] .fa-file, +[data-bs-theme=light] .fa-file-lines, +[data-bs-theme=light] .fa-linkedin, +[data-bs-theme=light] .fa-paper-plane, +[data-bs-theme=light] .fa-percent, +[data-bs-theme=light] .fa-satellite-dish, +[data-bs-theme=light] .fa-square-check, +[data-bs-theme=light] .fa-universal-access { + /* → #1a6fa0 = 5.49:1 ✓ */ + color: #1a6fa0 !important; +} + +[data-bs-theme=light] .fa-bluesky, +[data-bs-theme=light] .fa-code, +[data-bs-theme=light] .fa-bullhorn, +[data-bs-theme=light] .fa-github, +[data-bs-theme=light] .fa-user-group { + /* → #4a6bb5 = 5.17:1 ✓ */ + color: #4a6bb5 !important; +} + +[data-bs-theme=light] .fa-comment, +[data-bs-theme=light] .fa-comments, +[data-bs-theme=light] .fa-filter, +[data-bs-theme=light] .fa-rocket { + /* → #5b4ea0 = 6.90:1 ✓ */ + color: #5b4ea0 !important; +} + +[data-bs-theme=light] .fa-circle-notch, +[data-bs-theme=light] .fa-robot { + /* → #5a5a5a = 6.90:1 ✓ */ + color: #5a5a5a !important; +} + +[data-bs-theme=light] .fa-circle-question { + /* → #1a6fa0 = 5.49:1 ✓ */ + color: #1a6fa0; +} + +[data-bs-theme=light] .fa-discord, +[data-bs-theme=light] .fa-calendar, +[data-bs-theme=light] .fa-circle-exclamation, +[data-bs-theme=light] .fa-eye, +[data-bs-theme=light] .fa-file-pdf, +[data-bs-theme=light] .fa-filter-circle-xmark, +[data-bs-theme=light] .fa-key, +[data-bs-theme=light] .fa-mastodon, +[data-bs-theme=light] .fa-newspaper, +[data-bs-theme=light] .fa-rectangle-list, +[data-bs-theme=light] .fa-share-from-square, +[data-bs-theme=light] .fa-user-astronaut { + /* → #b5476a = 5.15:1 ✓ */ + color: #b5476a !important; +} + +[data-bs-theme=light] .fa-circle-down, +[data-bs-theme=light] .fa-flag { + /* → #b52040 = 6.47:1 ✓ */ + color: #b52040 !important; +} + +[data-bs-theme=light] .fa-circle-up { + /* → #1a7a2a = 5.10:1 ✓ */ + color: #1a7a2a !important; +} + +[data-bs-theme=light] .fa-circle-dot, +[data-bs-theme=light] .fa-gear { + /* → #1a5e9e = 6.69:1 ✓ */ + color: #1a5e9e !important; +} + +[data-bs-theme=light] .fa-heart, +[data-bs-theme=light] .fa-heart-crack, +[data-bs-theme=light] .fa-lock, +[data-bs-theme=light] .fa-right-from-bracket { + /* → #c0392b = 5.44:1 ✓ */ + color: #c0392b !important; +} + +[data-bs-theme=light] .fa-house { + /* → #7a2ea0 = 7.70:1 ✓ */ + color: #7a2ea0 !important; +} + +[data-bs-theme=light] .fa-laptop { + /* → #1a6e6a = 6.03:1 ✓ */ + color: #1a6e6a !important; +} + +[data-bs-theme=light] .fa-landmark { + /* → #3a3a3a = 11.37:1 ✓ */ + color: #3a3a3a !important; +} -.btn-primary, -a.btn-primary, -a.btn-primary:visited { - background-color: var(--bs-link-color); - color: var(--bs-body-bg); - border-radius: var(--bs-border-radius); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-card-shadow); - cursor: pointer; - font-family: var(--bs-font-bold); - padding: 0.55rem; +[data-bs-theme=light] .fa-share-nodes, +[data-bs-theme=light] .fa-check-to-slot, +[data-bs-theme=light] .fa-timeline { + /* → #9e2060 = 7.42:1 ✓ */ + color: #9e2060 !important; +} + +[data-bs-theme=light] .fa-spray-can-sparkles { + /* → #6b3fa0 = 7.38:1 ✓ */ + color: #6b3fa0 !important; } -a.btn-primary-outline { - background-color: var(--bs-body-bg); - color: var(--bs-body-color); - border-radius: var(--bs-border-radius-sm); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-card-shadow); - cursor: pointer; - font-family: var(--bs-font-sans-serif); - padding: 0.55rem; +[data-bs-theme=light] .fa-user-shield { + /* → #8a4e00 = 6.62:1 ✓ */ + color: #8a4e00 !important; } -.btn-primary-outline:not(.active):hover, -a.btn-primary-outline:not(.active):hover { - background-color: var(--bs-btn-bg) !important; - color: var(--bs-body-bg); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-box-shadow-md) !important +[data-bs-theme=light] .fa-window-maximize { + /* → #a03050 = 6.92:1 ✓ */ + color: #a03050 !important; } -a.btn:not(.active):hover svg, .nav-link:not(.active):hover svg { - color: var(--bs-link-color) !important; +[data-bs-theme=light] .fa-youtube { + /* → #c0392b = 5.44:1 ✓ */ + color: #c0392b !important; } -/* Cards */ - -.card-hover { - transition: 0.5s filter; +/* Status card icons — must come last to beat FA light mode overrides */ +[data-bs-theme=light] .card.text-bg-success, +[data-bs-theme=light] .card.text-bg-success a, +[data-bs-theme=light] .card.text-bg-success a:link, +[data-bs-theme=light] .card.text-bg-success a:visited, +[data-bs-theme=light] .card.text-bg-success a:hover, +[data-bs-theme=light] .card.text-bg-success a:focus, +[data-bs-theme=light] .card.text-bg-success i, +[data-bs-theme=light] .card.text-bg-success svg, +[data-bs-theme=light] .card.text-bg-success a i, +[data-bs-theme=light] .card.text-bg-success a svg, +[data-bs-theme=light] .card.text-bg-warning, +[data-bs-theme=light] .card.text-bg-warning a, +[data-bs-theme=light] .card.text-bg-warning a:link, +[data-bs-theme=light] .card.text-bg-warning a:visited, +[data-bs-theme=light] .card.text-bg-warning a:hover, +[data-bs-theme=light] .card.text-bg-warning a:focus, +[data-bs-theme=light] .card.text-bg-warning i, +[data-bs-theme=light] .card.text-bg-warning svg, +[data-bs-theme=light] .card.text-bg-warning a i, +[data-bs-theme=light] .card.text-bg-warning a svg { + color: #13171f !important; + fill: #13171f !important; } -.card-hover:hover { - filter: brightness(1.3); +[data-bs-theme=light] .card.text-bg-danger, +[data-bs-theme=light] .card.text-bg-danger a, +[data-bs-theme=light] .card.text-bg-danger a:link, +[data-bs-theme=light] .card.text-bg-danger a:visited, +[data-bs-theme=light] .card.text-bg-danger a:hover, +[data-bs-theme=light] .card.text-bg-danger a:focus, +[data-bs-theme=light] .card.text-bg-danger i, +[data-bs-theme=light] .card.text-bg-danger svg, +[data-bs-theme=light] .card.text-bg-danger a i, +[data-bs-theme=light] .card.text-bg-danger a svg { + color: #ffffff !important; + fill: #ffffff !important; +} + +/* text-bg-dark card icons match white text */ +.card.text-bg-dark a, +.card.text-bg-dark a:link, +.card.text-bg-dark a:visited, +.card.text-bg-dark a:hover, +.card.text-bg-dark a:focus, +.card.text-bg-dark i, +.card.text-bg-dark svg, +.card.text-bg-dark a i, +.card.text-bg-dark a svg { + color: #ffffff !important; + fill: #ffffff !important; } -/* iframe */ - -iframe { - border: 1px solid var(--bs-border-color) !important; +/* Question mark help icons inherit text color via href targeting */ +a[href*="docs.scangov.org"] svg, +a[href*="docs.scangov.org"] i { + color: inherit !important; + fill: currentColor !important; } -/* Forms */ +/* Font Awesome size utilities */ +.fa-2xs { + font-size: 0.625em; +} -.form-control:focus { - border-color: var(--bs-link-color); +.fa-xs { + font-size: 0.75em; } -/* Anchor links */ +.fa-sm { + font-size: 0.875em; +} -h2 a#heading-hashtag, -h3 a#heading-hashtag { - display: none; +.fa-lg { + font-size: 1.25em; } -h2:hover a#heading-hashtag, -h3:hover a#heading-hashtag { - display: revert; +.fa-xl { + font-size: 1.5em; } -/* Bootstrap */ +.fa-2xl { + font-size: 2em; +} -.badge { - border-radius: .25rem; - font-family: 'Public Sans Light', sans-serif !important; +.fa-1x { + font-size: 1em; } -/* News posts */ +.fa-2x { + font-size: 2em; +} -.post-content h2 { - margin-top: 2.75rem; +.fa-3x { + font-size: 3em; } -.post-content ul, .post-content p { - margin-bottom: 1.75rem; +.fa-4x { + font-size: 4em; } -/* File types */ -a[href$=".doc"]::after, -a[href$=".docx"]::after, -a[href$=".ppt"]::after, -a[href$=".pptx"]::after, -a[href$=".xls"]::after, -a[href$=".xlsx"]::after, -a[href$=".pdf"]::after, -a[href$=".mp3"]::after, -a[href$=".mp4"]::after, -a[href$=".avi"]::after, -a[href$=".mpg"]::after, -a[href$=".mpeg"]::after, -a[href$=".mov"]::after, -a[href$=".wmv"]::after, -a[href$=".mkv"]::after, -a[href$=".jpg"]::after, -a[href$=".jpeg"]::after, -a[href$=".png"]::after, -a[href$=".gif"]::after { - content: ""; - display: inline-block; - width: 1em; - height: 1em; - margin-left: 0.5rem; - background-size: contain; - background-repeat: no-repeat; +.fa-5x { + font-size: 5em; } -/* Doc */ -a[href$=".doc"]::after, -a[href$=".docx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-word.svg); +.fa-6x { + font-size: 6em; } -/* PowerPoint */ -a[href$=".ppt"]::after, -a[href$=".pptx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-powerpoint.svg); +.fa-7x { + font-size: 7em; } -/* Excel */ -a[href$=".xls"]::after, -a[href$=".xlsx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-excel.svg); +.fa-8x { + font-size: 8em; } -/* PDF */ -a[href$=".pdf"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-pdf.svg); +.fa-9x { + font-size: 9em; } -/* MP3 */ -a[href$=".mp3"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-audio.svg); +.fa-10x { + font-size: 10em; } -/* MP4 */ -a[href$=".mp4"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-video.svg); +/* Table header icons match text color */ +th a i, th a svg, +th a:link i, th a:link svg, +th a:visited i, th a:visited svg, +th a:hover i, th a:hover svg, +th a:focus i, th a:focus svg { + color: var(--bs-body-color) !important; + fill: var(--bs-body-color) !important; } \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css index 33f50176..e69de29b 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1,652 +0,0 @@ -@font-face { - font-family: "Public Sans ExtraBold"; - font-display: swap; - src: url("/assets/fonts/public-sans/ttf/PublicSans-ExtraBold.ttf") format("truetype"); -} - -@font-face { - font-family: "Public Sans Bold"; - font-display: swap; - src: url("/assets/fonts/public-sans/ttf/PublicSans-Bold.ttf") format("truetype"); -} - -@font-face { - font-family: "Public Sans Regular"; - font-display: swap; - src: url("/assets/fonts/public-sans/ttf/PublicSans-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Public Sans Light"; - font-display: swap; - src: url("/assets/fonts/public-sans/ttf/PublicSans-Light.ttf") format("truetype"); -} - -@font-face { - font-family: "Public Sans Thin"; - font-display: swap; - src: url("/assets/fonts/public-sans/ttf/PublicSans-Thin.ttf") format("truetype"); -} - -@font-face { - font-family: "JetBrains Mono Medium"; - font-display: swap; - src: url("/assets/fonts/jetbrains-mono/JetBrainsMono-Medium.ttf") format("truetype"); -} - -@font-face { - font-family: "JetBrains Mono ExtraBold"; - font-display: swap; - src: url("/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.ttf") format("truetype"); -} - -@font-face { - font-family: "Playfair Display Regular"; - font-display: swap; - src: url("/assets/fonts/playfair-display/PlayfairDisplay-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Source Serif Regular"; - font-display: swap; - src: url("/assets/fonts/source-serif/SourceSerifPro-Regular.ttf") format("truetype"); -} - -/* Dark mode - -[data-bs-theme=dark] { - color-scheme: dark;*/ -:root, [data-bs-theme=dark], [data-bs-theme=light] { - --bs-body-color: #fff; - --bs-body-color-rgb: 255, 255, 255; - --bs-body-bg: #13171f; - --bs-body-bg-rgb: 19, 23, 31; - --bs-body-secondary: red; - --bs-body-secondary-bg: #0f1218; - --bs-link-color: #70e17b; - --bs-link-color-rgb: 112, 225, 123; - --bs-link-hover-color: var(--bs-link-color); - --bs-link-hover-color-rgb: 112, 225, 123; - --bs-highlight-bg: var(--bs-link-color); - --bs-highlight-color: var(--bs-body-bg); - --bs-btn-primary: var(--bs-link-color); - --bs-btn-primary-color: var(--bs-link-color); - --bs-btn-primary-border-color: var(--bs-link-color); - --bs-btn-primary-focus-shadow-rgb: 112, 225, 123; - --bs-btn-primary-active-shadow-rgb: 112, 225, 123; - --bs-btn-primary-active-color: var(--bs-link-color); - --bs-btn-primary-active-bg: var(--bs-link-color); - --bs-btn-bg: var(--bs-link-color); - --bs-btn-border-color: var(--bs-link-color); - --bs-btn-color: var(--bs-body-bg); - --bs-btn-hover-bg: var(--bs-link-color); - --bs-btn-hover-border-color: var(--bs-link-color); - --bs-btn-hover-color: #0f1218; - --bs-btn-primary-bg: var(--bs-link-color); - --bs-nav-link-color: var(--bs-body-color); - --bs-border-color: #252f3e; - --bs-link-hover-decoration: none; - --bs-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); - --bs-card-shadow: 0 0.25rem .5rem rgba(0, 0, 0, 0.1); - --bs-box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); - --bs-shadow-md: 0 0.75rem 0.5rem rgba(255, 255, 255, .25); - --bs-font-monospace: "JetBrains Mono Medium", monospace; - --bs-font-light: "Public Sans Light", sans-serif; - --bs-heading-font-family: "Public Sans Bold", sans-serif; - --bs-font-bold: "Public Sans Bold", Helvetica; - --bs-font-regular: "Public Sans Regular", sans-serif; - --bs-font-serif: "Source Serif Regular", serif; - --bs-font-thin: "Public Sans Thin", sans-serif; - --bs-font-extra-bold: "Public Sans ExtraBold", sans-serif; - --bs-font-sans-serif: "Public Sans Regular", sans-serif; - --bs-secondary: var(--bs-body-color); - --bs-nav-link-color: var(--bs-body-color); - --bs-nav-link-hover-color: var(--bs-link-color); - --bs-badge-bg: var(--bs-link-color); - --bs-border-radius: .25rem; - --bs-border-radius-sm: .25rem; - --bs-selection-bg: var(--bs-link-color); - --bs-selection-color: var(--bs-body-bg); - --bs-text-bg-primary: #face00; - --bs-text-bg-success: #4866ff; - --bs-card-hover-bg: #0f1218; - --bs-text-secondary: var(--bs-secondary); - --bs-form-control-color: var(--bs-body-color); - --bs-form-control-bg: var(--bs-body-bg); - --bs-form-control-border-color: var(--bs-border-color); - --bs-form-control-focus-border-color: var(--bs-link-color); - --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(0, 123, 255, 0.25); - --bs-form-control-focus-color: var(--bs-body-color); - --bs-text-opacity: .5; - --bs-nav-link-font-size: 1.1em; - --bs-info-text-emphasis: var(--bs-body-color); - --bs-info-bg-subtle: var(--bs-body-secondary-bg); - --bs-info-border-subtle: var(--bs-border-color); -} - -.form-control { - color: var(--bs-body-color) !important; -} - -.form-control:focus { - border-color: var(--bs-body-color); - box-shadow: 0 0.25rem 0.5rem #252f3e; -} - -::placeholder, ::-ms-input-placeholder { - color: var(--bs-body-color); - opacity: var(--bs-text-opacity); -} - -/* General */ - -body { - color: var(--bs-body-color); - background: var(--bs-body-bg); - background-color: var(--bs-body-bg); - font-family: var(--bs-font-sans-serif); -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -.display-1, -.display-2, -.display-3, -.display-4 { - font-family: var(--bs-font-bold); -} - -h1, a.btn, .feedback, .nav-pills { - letter-spacing: -.01em; -} - -body.docs h2, -body.page h2, -body.docs h3, -body.page h3 { - margin-bottom: 1rem; - margin-top: 3rem; -} - -body footer a { - color: var(--bs-body-color); -} - -body footer img, -body ul.navbar-nav img { - filter: invert(1); -} - -blockquote { - border-left: 5px solid var(--bs-link-color); - margin: 0 0 1rem 0; - padding: 0 0 0 1.5rem; -} - -blockquote p { - font-family: var(--bs-font-light) !important; - font-size: 1.15rem !important; - line-height: 1.6; -} - -.lead { - font-family: var(--bs-font-regular) !important; -} - -strong { - font-family: var(--bs-font-bold); -} - -.text-secondary { - color: rgba(255, 255, 255, var(--bs-text-opacity)) !important; -} - -/* Selection */ - -::selection { - background-color: var(--bs-selection-bg); - color: var(--bs-selection-color); -} - -/* Links */ - -a:hover { - text-decoration: var(--bs-link-hover-decoration); - color: var(--bs-link-hover-color); -} - - -.social a[href^="http"]:not([href^="https://scangov.org"]):not([href^="https://scangov.com"]):not([href^="http://localhost:4000/"]):not([href^="https://docs.scangov.org"])::after { - display: none !important; -} - -.social a, .social a:visited { - color: var(--bs-body-color); - display: inline-block; - margin-right: .75rem; -} - -.social a:hover { - color: var(--bs-link-color); -} - -a.btn-primary, a.btn-primary:visited, .btn-primary { - background-color: var(--bs-link-color); - color: var(--bs-body-bg); - border-radius: var(--bs-border-radius); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-card-shadow); - cursor: pointer; - font-family: var(--bs-font-bold); - padding: .55rem; - transition: opacity 0.5s ease-in-out; -} - -a.btn-primary-outline { - background-color: var(--bs-body-bg); - color: var(--bs-body-color); - border-radius: var(--bs-border-radius-sm); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-card-shadow); - cursor: pointer; - font-family: var(--bs-font-sans-serif); - padding: .55rem; - transition: opacity 0.5s ease-in-out; -} - -a.btn-primary-outline:not(.active):hover, .btn-primary-outline:not(.active):hover { - background-color: var(--bs-btn-bg) !important; - color: var(--bs-body-bg); - border: 1px solid var(--bs-border-color); -} - -#feedback-container { - position: fixed; - bottom: 2rem; - width: 100%; - z-index: 1000; -} - -.feedback { - opacity: 0; - background-color: var(--bs-link-color); - color: var(--bs-body-bg); - border-radius: var(--bs-border-radius); - border: 1px solid var(--bs-border-color); - box-shadow: var(--bs-card-shadow); - cursor: pointer; - font-family: var(--bs-font-bold); - padding: .55rem; - text-decoration: none; - transition: opacity 0.5s ease-in-out; -} - -.feedback svg, a.btn svg { - transition: opacity 0.5s ease-in-out; -} - -.feedback:hover, a.btn:hover, .btn-primary:hover { - background-color: var(--bs-body-bg) !important; - box-shadow: var(--bs-box-shadow-md) !important; - border: 1px solid var(--bs-border-color); - color: var(--bs-body-color) !important; - transition: all 0.5s ease; -} - -.feedback:hover svg, a.btn:hover svg { - color: var(--bs-body-color) !important; - transition: all 0.5s ease; -} - -/* Navbar */ - -.navbar { - box-shadow: var(--bs-shadow); -} - -.navbar-brand { - font-family: var(--bs-font-bold); -} - -.navbar-brand { - color: var(--bs-body-color) !important; -} - -.navbar-nav, .nav-link, .navbar-nav .nav-link, a.list-group-item { - color: var(--bs-body-color) !important; -} - -.navbar-brand:hover, .navbar-nav:hover, .nav-link:hover, .navbar-nav .nav-link:hover, a.list-group-item:hover { - color: var(--bs-link-color) !important; -} - -.navbar-brand:hover>svg { - fill: var(--bs-link-color) !important; -} - -#logo { - fill: var(--bs-body-color); - width: 100%; - /* Use percentage or specific value as per your layout */ - max-width: 45px; - /* Sets a maximum width */ -} - -a.nav-link:hover, .nav-link:hover svg, a.navbar-brand:hover, a.navbar-brand:hover svg, .navbar-brand:hover, .navbar-brand:hover svg { - color: var(--bs-link-color); -} - -a.list-group-item:hover { - background-color: #0f1218; - color: var(--bs-body-color); -} - -.border-end { - box-shadow: var(--bs-shadow); -} - -/* Cards */ - -.card { - border: var(--bs-border-color) solid 1px; - box-shadow: var(--bs-card-shadow); - width: 100%; - transition: background-color 0.5s, box-shadow 0.5s, border 0.5s; -} - -a.card { - text-decoration: none; - transition: 0.25s filter; -} - -.card:hover { - background-color: var(--bs-body-secondary-bg) !important; - box-shadow: var(--bs-box-shadow-md) !important; -} - -.card-plans:hover { - background-color: var(--bs-body-secondary-bg) !important; - border: var(--bs-link-color) solid 1px; - box-shadow: var(--bs-box-shadow-md) !important; -} - -/* Badge */ - -.badge { - font-family: "Public Sans Regular", sans-serif !important; - padding: .55rem !important; - font-size: .8rem !important; - border-radius: var(--bs-border-radius-sm) !important; -} - -.badge-primary:hover { - background-color: #fee685 !important; - color: var(--bs-body-bg) !important; -} - -.text-bg-primary { - background-color: #face00 !important; - color: var(--bs-body-bg) !important; -} - -.text-bg-success { - background-color: var(--bs-text-bg-success) !important; - color: var(--bs-body-color) !important; -} - -/* Images */ - -main#home img { - display: block; - margin: auto; - margin-bottom: 0.5rem; -} - - - -svg.fa-circle-check { - fill: var(--bs-success); -} - -svg.fa-circle-xmark { - fill: var(--bs-danger); -} - -svg.fa-circle-exclamation { - fill: var(--bs-warning); -} - -svg.fa-circle-right { - fill: var(--bs-info); -} - -/* Toggle */ - -.dropdown-toggle::after { - display: none; -} - -.dropdown-toggle svg { - color: var(--bs-btn-color) !important; - transition: 0.15s color; -} - -.dropdown-toggle:hover svg, -.dropdown-toggle:focus svg { - color: var(--bs-btn-hover-color) !important; -} - -.navbar-toggler-icon { - color: var(--bs-body-color) !important; -} - -[data-bs-theme="dark"] .navbar-toggler-icon { - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 1%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -/* Timeline */ - -.timeline { - border-left: 1px solid hsl(0, 0%, 90%); - position: relative; - list-style: none; -} - -.timeline .timeline-item { - position: relative; -} - -.timeline .timeline-item:after { - position: absolute; - display: block; - top: 0; -} - -.timeline .timeline-item:after { - background-color: hsl(0, 0%, 90%); - left: -38px; - border-radius: 50%; - height: 11px; - width: 11px; - content: ""; -} - -/* Anchor links */ - -h2 a#heading-hashtag, -h3 a#heading-hashtag { - display: none; -} - -h2:hover a#heading-hashtag, -h3:hover a#heading-hashtag { - display: revert; -} - -.post h2 { - margin: 1.25rem 0; -} - -.post ul, .post p { - margin-bottom: 1.75rem; -} - -/* File types */ -a[href$=".doc"]::after, -a[href$=".docx"]::after, -a[href$=".ppt"]::after, -a[href$=".pptx"]::after, -a[href$=".xls"]::after, -a[href$=".xlsx"]::after, -a[href$=".pdf"]::after, -a[href$=".mp3"]::after, -a[href$=".mp4"]::after, -a[href$=".avi"]::after, -a[href$=".mpg"]::after, -a[href$=".mpeg"]::after, -a[href$=".mov"]::after, -a[href$=".wmv"]::after, -a[href$=".mkv"]::after, -a[href$=".jpg"]::after, -a[href$=".jpeg"]::after, -a[href$=".png"]::after, -a[href$=".gif"]::after { - content: ""; - display: inline-block; - width: 1em; - height: 1em; - margin-left: 0.5rem; - background-size: contain; - background-repeat: no-repeat; -} - -/* Doc */ -a[href$=".doc"]::after, -a[href$=".docx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-word.svg); -} - -/* PowerPoint */ -a[href$=".ppt"]::after, -a[href$=".pptx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-powerpoint.svg); -} - -/* Excel */ -a[href$=".xls"]::after, -a[href$=".xlsx"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-excel.svg); -} - -/* PDF */ -a[href$=".pdf"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-pdf.svg); -} - -/* MP3 */ -a[href$=".mp3"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-audio.svg); -} - -/* MP4 */ -a[href$=".mp4"]::after { - background-image: url(/assets/font-awesome/svgs/solid/file-video.svg); -} - -/* Jumbotron */ - -h1 span.break { - display: block; -} - -h1 { - display: block; -} - -h1::after { - content: ""; -} - -h1::before { - content: ""; -} - -h1 { - word-wrap: break-word; -} - -h1 { - margin-bottom: 1em; -} - -h1::before { - content: ""; -} - -h1::after { - content: ""; -} - -/* add to components */ - -.active { - --bs-nav-pills-link-active-bg: var(--bs-btn-primary-bg) !important; - color: var(--bs-body-bg) !important; -} - -.nav-pills .active i, .nav-pills .active svg { - color: var(--bs-body-bg) !important; -} - -.nav-pills .active, .nav-pills .active i, .nav-pills .active svg { - --bs-link-color: var(--bs-body-bg); -} - -/* Cards */ - -.card-hover { - transition: 0.5s filter; -} - -.card-hover:hover { - filter: brightness(1.3); -} - -/* experimental svg size fixing after 11ty font awesome sprite switch */ -.nav-item svg { - max-width: 1rem; - display: inline-block; - height: 1em; - overflow: visible; - vertical-align: -.125em; -} - -/* above doesn't assign width because it messes up the who it's for section on homepage */ -.fa-solid, .fa-circle-check, .fa-5x.fa-solid, .fa-brands { - height: 1em; - width: 1em; -} - -/* Forms */ - -.form-control:focus { - border-color: var(--bs-link-color); -} - -.text-bg-danger a { - color: #fff; -} - -.text-bg-warning a { - color: #000; -} \ No newline at end of file