Skip to content
Grapevine Learning Support
Contents

API reference

Everything a developer needs to connect another system to a Grapevine site: show its courses on your own website, enroll your people, follow their progress and be told when something happens. Every call can be tried here against a sample site.

Base URL

https://your-site.grapevinelearning.org/wp-json/grapevine/v1

Your own site's address, with /wp-json/grapevine/v1 after it.

Getting started

The Grapevine API lets another system use a Grapevine site's courses: list them on your own website, enroll your own people, follow their progress, grade from your own pages, and be told when something happens.

Every site has its own API, at its own address. If the site is example.grapevinelearning.org, its API is https://example.grapevinelearning.org/wp-json/grapevine/v1. A site on its own domain works the same way.

  1. The site's owner turns the API on in Site Admin → API. It is part of every paid plan.
  2. In the same place, they create a key: publishable for a web page, secret or restricted for a server.
  3. If the courses will be shown on another website, they add that website to Websites allowed to use it.

Then make your first call. Every call on this page can also be tried right here against a sample site: open any call below and choose Send.

Your first call

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Keys and signing in

Every call carries a bearer token in the Authorization header, over HTTPS. Plain HTTP is refused.

Site keys

  • Publishable (pk_…): reads the public catalog: courses, outlines and offers. Safe in a web page, from the websites the owner allowed.
  • Secret (sk_…): can do everything the owner has allowed. For a server only. A secret key sent from a web page is refused, even from an allowed website.
  • Restricted (rk_…): a server key limited to the scopes chosen for it, such as people:write or results:read.

Creating and changing courses, and managing people, also need the owner to turn on Let other systems manage courses or Let other systems manage people.

Acting for a learner

Your server links one of your users to a learner on the site with POST /learners, then asks for a learner session with POST /sessions. A session is good for 30 minutes and safe to hand to your page, which uses it for the calls under The signed-in learner.

A page or app with no server of its own signs the learner in with OAuth instead: Grapevine emails them a code and they type it back.

Acting for a teacher

Somebody who grades from your website is confirmed once with POST /teachers and a code they are emailed. After that, POST /teacher-sessions gives a session good for 15 minutes, reaching only the courses they grade.

A learner session, from your server

curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/sessions" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"learner": 1042}'

Then, in the page

const response = await fetch(
  "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me/enrollments",
  { headers: { "Authorization": `Bearer ${learnerSession}` } }
);

Requests and responses

Requests and responses are JSON. Send Content-Type: application/json with a body.

Errors

Every error has the same shape. type follows the HTTP status, code is stable and safe to branch on, message is written for a person, and param names the field at fault when there is one.

  • invalid_request_error: 400, 404, 409 and 422
  • authentication_error: 401, a missing or wrong key
  • permission_error: 403, a key or person that may not do this
  • rate_limit_error: 429, see Limits below
  • api_error: 500 and above

Lists

A list comes back as {"object": "list", "data": […], "has_more": …, "next_cursor": …}. Ask for up to 100 at a time with limit (20 by default), and pass next_cursor back as cursor for the next page. updated_since returns only what changed at or after a time, for keeping a copy in step.

Retrying safely

Calls that list an Idempotency-Key header can be retried without running twice. Send any unique string. The same request with the same key within a day returns the first answer, with Idempotent-Replayed: true. The same key with a different request is refused.

Dry runs

Enrolling, withdrawing, bulk enrollment and checkout take dry_run: the answer says what would happen, and what it would cost, without doing it.

Limits

Each key has an hourly budget, counted in what costs something rather than in requests: writes, the records created or changed, and rows, the records returned. A secret or restricted key may make 2,000 writes and read 100,000 rows an hour; a publishable key reads 100,000 rows and writes nothing. Past either, calls are refused with 429 and a Retry-After header saying when the hour turns.

An error

{
  "error": {
    "type": "invalid_request_error",
    "code": "missing_callback_param",
    "message": "Missing parameter(s): title",
    "param": "title"
  }
}

The next page

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments?limit=100&cursor=$NEXT_CURSOR" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Webhooks

Instead of asking again and again, register an endpoint and Grapevine posts each event to it as it happens: enrollment.created, enrollment.withdrawn, lesson.completed, course.completed, submission.graded, membership.granted, membership.ended and seat.redeemed.

Each delivery carries three headers: Grapevine-Event, the event's type; Grapevine-Delivery, the delivery's id; and Grapevine-Signature, which proves it came from Grapevine.

Checking the signature

The signature header reads t=<unix time>,v1=<signature>. Compute an HMAC-SHA256 of the time, a full stop and the raw request body, using the endpoint's signing secret, and compare it with v1. Refuse a delivery whose time is more than a few minutes old.

Retries

Answer with any 2xx status within 10 seconds. Anything else is retried, backing off, for about three days. Events are kept for 30 days and can be read again with GET /events, or sent again with POST /events/{id}/redeliver.

Checking a delivery, in Node

import crypto from "node:crypto";

function fromGrapevine(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  const age = Math.abs(Date.now() / 1000 - Number(parts.t));
  const expected = crypto.createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");
  return age < 300 && crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(parts.v1 || "")
  );
}

Versions and this description

The version is in the address: /grapevine/v1. Within v1, changes only add: new calls, new fields, new values. Nothing you rely on is renamed or removed, so ignore fields you do not recognize.

Each site serves the API's full OpenAPI description at /wp-json/grapevine/v1/openapi.json, without a key. Generate a client from it, or load it into a tool such as Postman. This page is built from that same description, so it lists every call there is.

The description

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/openapi.json"

Trying calls on this page

Every call below can be sent from this page to a sample site: a Grapevine site holding one course and a few invented learners. You see exactly what the API answers, errors included, without a site or a key of your own.

  • Every change is a dry run. The sample site carries out the call, returns its real answer and then undoes it, so nothing you send is kept. On your own site, only the calls listed under Dry runs take dry_run.
  • Nothing leaves the sample site. It sends no email and calls no other system.
  • The key stays on our server. The samples show where yours goes. The response under each call is what the sample site answered most recently.

The sample is shared, so calls from this page are limited to 30 every ten minutes per visitor.

Connecting an LMS

An LMS such as Canvas, Moodle, D2L Brightspace or Blackboard connects through LTI 1.3 rather than through these calls. It is set up in Site Admin → API, under LTI platforms.

  • Most LMSs register Grapevine themselves: choose Get a registration link and paste it where the LMS asks for a tool's registration URL. The link works once, within an hour.
  • Otherwise, the same section lists the addresses to enter in the LMS by hand.

Once connected, an instructor adds a course, or chosen modules and lessons, from inside the LMS. Each LMS course gets its own copy of the course, its learners are enrolled on their first click, and their grades go back to the LMS gradebook.

Courses

The catalog, a course's outline and offers, and creating, changing and trashing courses.

List the catalog, in the site's own order

GET /courses

Called with: Secret or restricted key

Query parameters

search string
Words to search titles and descriptions for.
ids string
Only these courses, in this order: a comma-separated list of ids.
bundle integer
Only the courses in this bundle, in its order.
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
updated_since string
Only what changed at or after this time (ISO 8601).
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "course",
            "id": 68,
            "title": "Facilitator Certificate",
            "excerpt": "",
            "url": "https://api-sample.grapevinelearning.org/courses/facilitator-certificate/",
            "image": null,
            "icon": null,
            "facts": [
                {
                    "key": "enrollment",
                    "label": "Enrollment",
                    "value": "Anyone"
                },
                {
                    "key": "price",
                    "label": "Price",
                    "value": "$25"
                }
            ],
            "modules": [],
            "lesson_count": 1,
            "enrollment": "open",
            "open": true,
            "full": false,
            "price": {
                "amount": 2500,
                "currency": "usd"
            },
            "updated": "2026-11-10T21:10:54Z"
        },
        {
            "object": "course",
            "id": 57,
            "title": "Leading a Small Group",
            "excerpt": "",
            "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/",
            "image": null,
            "icon": null,
            "facts": [
                {
                    "key": "enrollment",
                    "label": "Enrollment",
                    "value": "Anyone"
                }
            ],
            "modules": [
                {
                    "id": 58,
                    "title": "Getting started"
                },
                {
                    "id": 59,
                    "title": "Your first meeting"
                },
                {
                    "id": 60,
…

Create a course

POST /courses

It starts inactive — nobody can join it — unless status says otherwise. Takes the same settings as PATCH.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

title string required
description string
Plain text; paragraphs separated by a blank line.
status string
One of active, hidden, inactive
enrollment string
One of open, invite
starts string
YYYY-MM-DD, or empty to clear.
ends string
YYYY-MM-DD, or empty to clear.
release_mode string
release array of object
When each module opens: [{module, ...}], as Grapevine's course settings.
gradebook boolean
enrollment_limit integer
0 for no limit.
price number
In the site's currency, e.g. 49.00. Ignored on a course another site supplies.
promo_video string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 201

{
    "object": "course",
    "id": 75,
    "title": "A sample title",
    "description": "",
    "status": "inactive",
    "enrollment": "invite",
    "starts": null,
    "ends": null,
    "release_mode": "",
    "gradebook": true,
    "enrollment_limit": null,
    "price": null,
    "available_outside": true,
    "url": "https://api-sample.grapevinelearning.org/?post_type=course&p=75",
    "updated_at": "2026-11-10T21:43:48Z",
    "modules": []
}

One course, as its card shows it, with its description

GET /courses/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "course",
    "id": 57,
    "title": "Leading a Small Group",
    "excerpt": "",
    "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/",
    "image": null,
    "icon": null,
    "facts": [
        {
            "key": "enrollment",
            "label": "Enrollment",
            "value": "Anyone"
        }
    ],
    "modules": [
        {
            "id": 58,
            "title": "Getting started"
        },
        {
            "id": 59,
            "title": "Your first meeting"
        },
        {
            "id": 60,
            "title": "For later"
        }
    ],
    "lesson_count": 4,
    "enrollment": "open",
    "open": true,
    "full": false,
    "price": null,
    "updated": "2026-11-10T21:10:53Z",
    "description": "<p>A short sample course for trying the Grapevine API.</p>\n<p>Two modules, four lessons, and a few learners part of the way through.</p>\n"
}

Change a course and its settings

PATCH /courses/{id}

Only what is sent changes.

Called with: Secret or restricted key

Path parameters

id integer required

Body

title string
description string
Plain text; paragraphs separated by a blank line.
status string
One of active, hidden, inactive
enrollment string
One of open, invite
starts string
YYYY-MM-DD, or empty to clear.
ends string
YYYY-MM-DD, or empty to clear.
release_mode string
release array of object
When each module opens: [{module, ...}], as Grapevine's course settings.
gradebook boolean
enrollment_limit integer
0 for no limit.
price number
In the site's currency, e.g. 49.00. Ignored on a course another site supplies.
promo_video string
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 200

{
    "object": "course",
    "id": 57,
    "title": "A sample title",
    "description": "A short sample course for trying the Grapevine API.\n\nTwo modules, four lessons, and a few learners part of the way through.",
    "status": "active",
    "enrollment": "open",
    "starts": null,
    "ends": null,
    "release_mode": "",
    "gradebook": true,
    "enrollment_limit": null,
    "price": null,
    "available_outside": true,
    "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/",
    "updated_at": "2026-11-10T21:43:48Z",
    "modules": [
        {
            "object": "module",
            "id": 58,
            "title": "Getting started",
            "description": "Why groups matter, and how to prepare.",
            "implicit": false,
            "lessons": [
                {
                    "object": "lesson",
                    "id": 61,
                    "title": "Why small groups",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": true
                },
                {
                    "object": "lesson",
                    "id": 62,
                    "title": "Preparing a session",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": true
                }
            ]
        },
        {
            "object": "module",
            "id": 59,
            "title": "Your first meeting",
            "description": "",
            "implicit": false,
            "lessons": [
                {
                    "object": "lesson",
                    "id": 63,
                    "title": "Asking good questions",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": false
                },
                {
                    "object": "lesson",
                    "id": 64,
…

Move a course to the trash

DELETE /courses/{id}

POST /courses/{id}/restore brings it back.

Called with: Secret or restricted key

Path parameters

id integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "course",
    "id": 57,
    "deleted": true,
    "status": "trash"
}

A course as its editor sees it, whatever its status

GET /courses/{id}/content

every setting, and its modules and lessons including drafts.

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/content" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "course",
    "id": 57,
    "title": "Leading a Small Group",
    "description": "A short sample course for trying the Grapevine API.\n\nTwo modules, four lessons, and a few learners part of the way through.",
    "status": "active",
    "enrollment": "open",
    "starts": null,
    "ends": null,
    "release_mode": "",
    "gradebook": true,
    "enrollment_limit": null,
    "price": null,
    "available_outside": true,
    "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/",
    "updated_at": "2026-11-10T21:10:53Z",
    "modules": [
        {
            "object": "module",
            "id": 58,
            "title": "Getting started",
            "description": "Why groups matter, and how to prepare.",
            "implicit": false,
            "lessons": [
                {
                    "object": "lesson",
                    "id": 61,
                    "title": "Why small groups",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": true
                },
                {
                    "object": "lesson",
                    "id": 62,
                    "title": "Preparing a session",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": true
                }
            ]
        },
        {
            "object": "module",
            "id": 59,
            "title": "Your first meeting",
            "description": "",
            "implicit": false,
            "lessons": [
                {
                    "object": "lesson",
                    "id": 63,
                    "title": "Asking good questions",
                    "kind": "lesson",
                    "status": "publish",
                    "opened": false
                },
                {
                    "object": "lesson",
                    "id": 64,
…

Add a lesson at the end of a module (or of the course, with no module)

POST /courses/{id}/lessons

Content is block markup, as GET /lessons/{id}/content returns it.

Called with: Secret or restricted key

Path parameters

id integer required

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

title string required
module integer
kind string
content string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/lessons" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 201

{
    "object": "lesson",
    "id": 77,
    "title": "A sample title",
    "kind": "lesson",
    "status": "publish",
    "opened": false,
    "course": 57,
    "module": 76,
    "content": "",
    "answers": 0,
    "updated_at": "2026-11-10T21:43:49Z"
}

Add a module at the end of a course

POST /courses/{id}/modules

Called with: Secret or restricted key

Path parameters

id integer required

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

title string required
description string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/modules" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 201

{
    "object": "module",
    "id": 78,
    "course": 57,
    "title": "A sample title",
    "description": ""
}

The ways into a course

GET /courses/{id}/offers

the course itself, and any membership covering it.

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/offers" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "offer",
            "type": "course",
            "course": 57,
            "price": null
        }
    ],
    "has_more": false,
    "next_cursor": null
}

A course's modules and lesson titles, and when each module opens

GET /courses/{id}/outline

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/outline" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "outline",
    "course": 57,
    "release": "all",
    "modules": [
        {
            "id": 58,
            "title": "Getting started",
            "description": "Why groups matter, and how to prepare.",
            "opens": {
                "date": null,
                "days": null
            },
            "lessons": [
                {
                    "id": 61,
                    "title": "Why small groups",
                    "kind": "lesson",
                    "kind_label": "Reading · 1 question",
                    "icon": "fas fa-file-alt"
                },
                {
                    "id": 62,
                    "title": "Preparing a session",
                    "kind": "lesson",
                    "kind_label": "Reading",
                    "icon": "fas fa-file-alt"
                }
            ]
        },
        {
            "id": 59,
            "title": "Your first meeting",
            "description": "",
            "opens": {
                "date": null,
                "days": null
            },
            "lessons": [
                {
                    "id": 63,
                    "title": "Asking good questions",
                    "kind": "lesson",
                    "kind_label": "Reading · 1 question",
                    "icon": "fas fa-file-alt"
                },
                {
                    "id": 64,
                    "title": "Reflection",
                    "kind": "lesson",
                    "kind_label": "Reading · 1 question",
                    "icon": "fas fa-file-alt"
                }
            ]
        },
        {
            "id": 60,
            "title": "For later",
            "description": "",
            "opens": {
…

Take a course out of the trash, back to the state it was in

POST /courses/{id}/restore

Called with: Secret or restricted key

Path parameters

id integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/restore" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 404

{
    "error": {
        "type": "invalid_request_error",
        "code": "not_found",
        "message": "Nothing with that id is in the trash.",
        "param": null
    }
}

Make somebody on this site an instructor, contributor or assistant on a course

POST /courses/{id}/staff

Somebody already a student on it changes role.

Called with: Secret or restricted key

Path parameters

id integer required

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

user integer required
role string required
One of assistant, contributor, instructor
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/staff" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user":3631,"role":"assistant"}'

Response from the sample site 200

{
    "object": "staff",
    "course": 57,
    "user": 3631,
    "role": "assistant"
}

Take somebody off a course's staff

DELETE /courses/{id}/staff/{user}

Their row is kept, as on screen.

Called with: Secret or restricted key

Path parameters

id integer required
user integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/courses/57/staff/3631" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "staff",
    "course": 57,
    "user": 3631,
    "removed": true
}

Modules

Renaming, trashing and restoring the modules that group a course's lessons.

Rename a module, or change its description

PATCH /modules/{id}

Called with: Secret or restricted key

Path parameters

id integer required

Body

title string
description string
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/modules/60" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 200

{
    "object": "module",
    "id": 60,
    "course": 57,
    "title": "A sample title",
    "description": ""
}

Move an empty module to the trash

DELETE /modules/{id}

A module with lessons in it is refused.

Called with: Secret or restricted key

Path parameters

id integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/modules/60" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "module",
    "id": 60,
    "deleted": true,
    "status": "trash"
}

Take a module out of the trash, back to the state it was in

POST /modules/{id}/restore

Called with: Secret or restricted key

Path parameters

id integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/modules/60/restore" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 404

{
    "error": {
        "type": "invalid_request_error",
        "code": "not_found",
        "message": "Nothing with that id is in the trash.",
        "param": null
    }
}

Lessons

Reading a lesson, answering and completing it, and editing it and its questions.

A lesson, as HTML, or as typed blocks with format=blocks

GET /lessons/{id}

Fetching it opens it, as in Grapevine's own player. Answer keys are never included.

Called with: Learner session or OAuth token

Path parameters

id integer required

Query parameters

format string
One of html, blocks
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "lesson",
    "id": 63,
    "title": "Asking good questions",
    "course": 57,
    "kind": "lesson",
    "kind_label": "Lesson",
    "format": "html",
    "html": "\n<p class=\"wp-block-paragraph\">Open questions start with how, what or why, and cannot be answered with yes or no.</p>\n<div class=\"gvl-question\" data-gvl-question=\"1\" data-gvl-lesson=\"63\" data-gvl-points=\"1\"><p class=\"gvl-question__prompt\">Which is an open question?</p><ul class=\"gvl-question__options\"><li><button type=\"button\" class=\"gvl-question__option btn btn-outline-secondary\" data-gvl-choice=\"0\">Did you like it?</button></li><li><button type=\"button\" class=\"gvl-question__option btn btn-outline-secondary\" data-gvl-choice=\"1\">What stood out to you?</button></li><li><button type=\"button\" class=\"gvl-question__option btn btn-outline-secondary\" data-gvl-choice=\"2\">Is that right?</button></li></ul><p class=\"gvl-question__result\" data-gvl-question-result hidden></p></div>"
}

Change a lesson's title, kind or content

PATCH /lessons/{id}

Refused once a learner has opened it.

Called with: Secret or restricted key

Path parameters

id integer required

Body

title string
kind string
content string
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"A sample title"}'

Response from the sample site 200

{
    "object": "lesson",
    "id": 63,
    "title": "A sample title",
    "kind": "lesson",
    "status": "publish",
    "opened": false,
    "course": 57,
    "module": 59,
    "content": "<!-- wp:paragraph -->\n<p>Open questions start with how, what or why, and cannot be answered with yes or no.</p>\n<!-- /wp:paragraph --><!-- wp:gvl/question-choice {\"prompt\":\"Which is an open question?\",\"options\":[{\"text\":\"Did you like it?\",\"feedback\":\"\"},{\"text\":\"What stood out to you?\",\"feedback\":\"\"},{\"text\":\"Is that right?\",\"feedback\":\"\"}],\"correct\":1,\"points\":1,\"qid\":1} /-->",
    "answers": 0,
    "updated_at": "2026-11-10T21:43:51Z"
}

Move a lesson to the trash

DELETE /lessons/{id}

Refused once a learner has opened it.

Called with: Secret or restricted key

Path parameters

id integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "lesson",
    "id": 63,
    "deleted": true,
    "status": "trash"
}

Answer one question in the lesson

POST /lessons/{id}/answers

Send the field its kind takes: choice, chosen, typed, order, matched or body. Marked on the server; asking again returns the first verdict.

Called with: Learner session or OAuth token

Path parameters

id integer required

Body

question integer required
The question's data-gvl-question id.
choice integer
One choice: the option's index.
chosen array of integer
Several choices: the options' indexes.
typed string
Fill in the blank.
order array of integer
Put in order: the items' indexes, in the learner's order.
matched object
Match: each term's index to its partner's.
body string
Short answer. Graded later by a person.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/answers" \
  -H "Authorization: Bearer $LEARNER_SESSION" \
  -H "Content-Type: application/json" \
  -d '{"question":1}'

Response from the sample site 200

{
    "object": "answer",
    "lesson": 63,
    "question": 1,
    "already": false,
    "status": "graded",
    "correct": false,
    "feedback": "",
    "points": 0,
    "choice": 0
}

Mark a lesson complete

POST /lessons/{id}/complete

Staff are not recorded, and are told so.

Called with: Learner session or OAuth token

Path parameters

id integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/complete" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "progress",
    "course": 57,
    "lesson": 63,
    "tracked": true,
    "complete": 3,
    "total": 4,
    "percent": 75,
    "completed": [
        61,
        62,
        63
    ]
}

A lesson's source as block markup, with its questions' answer keys, and whether learners have opened it

GET /lessons/{id}/content

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/content" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "lesson",
    "id": 63,
    "title": "Asking good questions",
    "kind": "lesson",
    "status": "publish",
    "opened": false,
    "course": 57,
    "module": 59,
    "content": "<!-- wp:paragraph -->\n<p>Open questions start with how, what or why, and cannot be answered with yes or no.</p>\n<!-- /wp:paragraph --><!-- wp:gvl/question-choice {\"prompt\":\"Which is an open question?\",\"options\":[{\"text\":\"Did you like it?\",\"feedback\":\"\"},{\"text\":\"What stood out to you?\",\"feedback\":\"\"},{\"text\":\"Is that right?\",\"feedback\":\"\"}],\"correct\":1,\"points\":1,\"qid\":1} /-->",
    "answers": 0,
    "updated_at": "2026-11-10T21:10:53Z"
}

A lesson's questions with their answer keys, in order

GET /lessons/{id}/questions

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/questions" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "question",
            "id": 1,
            "lesson": 63,
            "kind": "choice",
            "attributes": {
                "prompt": "Which is an open question?",
                "options": [
                    {
                        "text": "Did you like it?",
                        "feedback": ""
                    },
                    {
                        "text": "What stood out to you?",
                        "feedback": ""
                    },
                    {
                        "text": "Is that right?",
                        "feedback": ""
                    }
                ],
                "correct": 1,
                "points": 1
            },
            "answers": 0
        }
    ],
    "has_more": false,
    "next_cursor": null
}

Add a question at the end of a lesson

POST /lessons/{id}/questions

attributes are the question block's own, as GET returns them.

Called with: Secret or restricted key

Path parameters

id integer required

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

kind string required
One of short, choice, blank, multi, order, match
attributes object required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/questions" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"short","attributes":{}}'

Response from the sample site 201

{
    "object": "question",
    "id": 2,
    "lesson": 63,
    "kind": "short",
    "attributes": [],
    "answers": 0
}

Change a question

PATCH /lessons/{id}/questions/{question}

The attributes sent replace those of the same name; the rest are kept.

Called with: Secret or restricted key

Path parameters

id integer required
question integer required

Body

attributes object required
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/questions/1" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"attributes":{}}'

Response from the sample site 200

{
    "object": "question",
    "id": 1,
    "lesson": 63,
    "kind": "choice",
    "attributes": {
        "prompt": "Which is an open question?",
        "options": [
            {
                "text": "Did you like it?",
                "feedback": ""
            },
            {
                "text": "What stood out to you?",
                "feedback": ""
            },
            {
                "text": "Is that right?",
                "feedback": ""
            }
        ],
        "correct": 1,
        "points": 1
    },
    "answers": 0
}

Remove a question

DELETE /lessons/{id}/questions/{question}

Refused once anybody has answered it.

Called with: Secret or restricted key

Path parameters

id integer required
question integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/questions/1" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "question",
    "id": 1,
    "lesson": 63,
    "deleted": true
}

Take a lesson out of the trash, back to the state it was in

POST /lessons/{id}/restore

Called with: Secret or restricted key

Path parameters

id integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/lessons/63/restore" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 404

{
    "error": {
        "type": "invalid_request_error",
        "code": "not_found",
        "message": "Nothing with that id is in the trash.",
        "param": null
    }
}

Learners

Linking your own users to learners on the site, and signing them in on your pages.

The learners linked, or waiting to be linked, to this site's API

GET /learners

Called with: Secret or restricted key

Query parameters

external_id string
Only the learner with this id of yours.
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/learners" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "learner",
            "id": 3628,
            "external_id": "user_1001",
            "email": "amara@example.com",
            "first_name": "Amara",
            "last_name": "Diallo",
            "name": "Amara Diallo",
            "status": "linked"
        },
        {
            "object": "learner",
            "id": 3629,
            "external_id": "user_1002",
            "email": "ben@example.com",
            "first_name": "Ben",
            "last_name": "Carter",
            "name": "Ben Carter",
            "status": "linked"
        },
        {
            "object": "learner",
            "id": 3630,
            "external_id": "user_1003",
            "email": "chen@example.com",
            "first_name": "Chen",
            "last_name": "Wei",
            "name": "Chen Wei",
            "status": "linked"
        },
        {
            "object": "learner",
            "id": 3631,
            "external_id": "user_1004",
            "email": "grace@example.com",
            "first_name": "Grace",
            "last_name": "Okafor",
            "name": "Grace Okafor",
            "status": "linked"
        },
        {
            "object": "learner",
            "id": 3632,
            "external_id": "user_1005",
            "email": "dana@example.com",
            "first_name": "Dana",
            "last_name": "Reyes",
            "name": "Dana Reyes",
            "status": "linked"
        }
    ],
    "has_more": false,
    "next_cursor": null
}

Create a learner, or link an existing account

POST /learners

An existing account is linked only after its owner types the code emailed to them (POST /learners/{id}/confirm). Asking again for the same email and external_id returns the same learner.

Called with: Secret or restricted key

Body

email string required
external_id string required
Your own id for this person, up to 191 characters.
first_name string
last_name string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/learners" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"new.learner@example.com","external_id":"user_2001"}'

Response from the sample site 201

{
    "object": "learner",
    "id": 3635,
    "external_id": "user_2001",
    "email": "new.learner@example.com",
    "first_name": "",
    "last_name": "",
    "name": "new.learner@example.com",
    "status": "linked"
}

One learner

GET /learners/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/learners/3628" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "learner",
    "id": 3628,
    "external_id": "user_1001",
    "email": "amara@example.com",
    "first_name": "Amara",
    "last_name": "Diallo",
    "name": "Amara Diallo",
    "status": "linked"
}

Link an existing account with the code its owner was emailed and typed into your page

POST /learners/{id}/confirm

Called with: Secret or restricted key

Path parameters

id integer required

Body

code string required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/learners/3628/confirm" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code":"123456"}'

Response from the sample site 200

{
    "object": "learner",
    "id": 3628,
    "external_id": "user_1001",
    "email": "amara@example.com",
    "first_name": "Amara",
    "last_name": "Diallo",
    "name": "Amara Diallo",
    "status": "linked"
}

A short-lived session for one linked learner, to hand to your page

POST /sessions

Mint another when it ends.

Called with: Secret or restricted key

Body

learner integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/sessions" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"learner":3632}'

Response from the sample site 201

{
    "object": "session",
    "token": "ls_pmRqXbDedA71b8wEoc1t7i3d_s7tLE2OojOb587HunbLO7e2pRiD68RtHMpn50pji",
    "learner": 3632,
    "scopes": [
        "learn:read",
        "learn:progress",
        "learn:answer",
        "learn:enroll"
    ],
    "expires_at": "2026-11-10T22:14:08Z"
}

Signing learners in

Sign-in with an emailed code, for pages and apps with no server of their own.

Email a learner the code to sign in with, from a page, for the sign-in Branch

POST /auth/code

The same answer whether or not the address has an account here. Then POST /oauth/token.

Called with: Publishable key, from a page

Body

email string required
code_challenge string required
PKCE, S256: base64url(sha256(verifier)).
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/auth/code" \
  -H "Authorization: Bearer $GRAPEVINE_PUBLISHABLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"new.learner@example.com","code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"}'

Response from the sample site 201

{
    "object": "sign_in",
    "id": "zPatGrWYVfPpZnxT3NnxHS1iGil4AzOV",
    "expires_at": "2026-11-10T21:58:48Z"
}

Register an app (RFC 7591)

POST /oauth/register

Public clients only: the app proves itself with PKCE, never with a secret.

Called with: No key

Body

redirect_uris array of string
Where to send the person back: https, or http to localhost.
client_name string
Shown to the person when they sign in, beside the address they will return to.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/oauth/register" \
  -H "Content-Type: application/json" \
  -d '{"redirect_uris":[]}'

Response from the sample site 400

{
    "error": "invalid_redirect_uri",
    "error_description": "Give one to ten redirect addresses, each https, or http to localhost."
}

Tokens for a learner (RFC 6749)

POST /oauth/token

from an authorization code, from a refresh token, or — for the sign-in Branch — from the code the learner typed (grant_type urn:grapevine:params:oauth:grant-type:email-code, with sign_in and code). PKCE with S256 throughout.

Called with: No key

Body

grant_type string
client_id string
From oauth/register, or the publishable key for the sign-in Branch.
code string
redirect_uri string
code_verifier string
refresh_token string
sign_in string
The id POST /auth/code returned.
resource string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/oauth/token" \
  -H "Content-Type: application/json" \
  -d '{"grant_type":"sample"}'

Response from the sample site 401

{
    "error": "invalid_client",
    "error_description": "That client_id is not one this site issued."
}

Enrollments

Enrolling and withdrawing your learners, one at a time or in bulk.

Your learners' enrollments, oldest first

GET /enrollments

updated_since catches every change of status, role or completion — withdrawals included.

Called with: Secret or restricted key

Query parameters

course integer
learner integer
status string
One of active, withdrawn
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
updated_since string
Only what changed at or after this time (ISO 8601).
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "enrollment",
            "id": 1,
            "learner": 3628,
            "course": {
                "id": 57,
                "title": "Leading a Small Group",
                "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
            },
            "role": "student",
            "status": "active",
            "enrolled_at": "2026-11-10T21:12:11Z",
            "progress": {
                "complete": 2,
                "total": 4,
                "percent": 50
            },
            "completed_at": null,
            "updated_at": "2026-11-10T21:12:11Z"
        },
        {
            "object": "enrollment",
            "id": 2,
            "learner": 3629,
            "course": {
                "id": 57,
                "title": "Leading a Small Group",
                "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
            },
            "role": "student",
            "status": "active",
            "enrolled_at": "2026-11-10T21:12:26Z",
            "progress": {
                "complete": 0,
                "total": 4,
                "percent": 0
            },
            "completed_at": null,
            "updated_at": "2026-11-10T21:12:26Z"
        },
        {
            "object": "enrollment",
            "id": 3,
            "learner": 3631,
            "course": {
                "id": 57,
                "title": "Leading a Small Group",
                "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
            },
            "role": "instructor",
            "status": "active",
            "enrolled_at": "2026-11-10T21:12:41Z",
            "progress": {
                "complete": 0,
                "total": 4,
                "percent": 0
            },
…

Enroll one of your linked learners as a student

POST /enrollments

Billed to the site as an enrollment added by hand. Enrolling somebody already on the course changes nothing and answers 200.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

learner integer required
course integer required
dry_run boolean
Say what would happen, and what it would cost, without doing it.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"learner":3632,"course":65}'

Response from the sample site 200

{
    "object": "preview",
    "action": "enroll",
    "learner": 3632,
    "course": 65,
    "cost": {
        "amount": 500,
        "currency": "usd",
        "label": "$5"
    }
}

Enroll up to 500 of your linked learners on one course

POST /enrollments/bulk

Each is checked now and the enrollments are queued; follow the job at GET /jobs/{id}. A dry run returns the same check, and the cost, with nothing queued.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

course integer required
learners array of integer required
dry_run boolean
Say what would happen, and what it would cost, without doing it.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments/bulk" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"course":65,"learners":[3632]}'

Response from the sample site 200

{
    "object": "preview",
    "job": null,
    "summary": {
        "enroll": 1,
        "already": 0,
        "refused": 0,
        "cost": {
            "amount": 500,
            "currency": "usd",
            "label": "$5"
        }
    },
    "rows": [
        {
            "learner": 3632,
            "action": "enroll"
        }
    ]
}

One enrollment of one of your learners

GET /enrollments/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments/1" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "enrollment",
    "id": 1,
    "learner": 3628,
    "course": {
        "id": 57,
        "title": "Leading a Small Group",
        "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
    },
    "role": "student",
    "status": "active",
    "enrolled_at": "2026-11-10T21:12:11Z",
    "progress": {
        "complete": 2,
        "total": 4,
        "percent": 50
    },
    "completed_at": null,
    "updated_at": "2026-11-10T21:12:11Z"
}

Withdraw a student

POST /enrollments/{id}/withdraw

Their progress, answers and grades are kept, and come back if they are enrolled again. Nothing is refunded.

Called with: Secret or restricted key

Path parameters

id integer required

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

dry_run boolean
Say what would happen, and what it would cost, without doing it.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/enrollments/1/withdraw" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dry_run":true}'

Response from the sample site 200

{
    "object": "preview",
    "action": "withdraw",
    "learner": 3628,
    "course": 57,
    "cost": {
        "amount": 0,
        "currency": "usd",
        "label": "$0"
    }
}

Checkout

Taking a learner's payment for a priced course on your own page.

Start paying for a course

POST /checkout

returns the client secret to confirm in Stripe.js, scoped to connectedAccount. The learner is enrolled when Stripe's webhook reaches Grapevine, not when the card is confirmed; ask GET /checkout/{intent}. With a publishable key, somebody with no account gives their name and email; an address that already has one must sign in first. A dry run returns the price.

Called with: Publishable key, from a page

Body

course integer required
first_name string
last_name string
email string
billing_first string
When somebody else pays — an employer, a sending church. With billing_email.
billing_last string
billing_email string
dry_run boolean
Return the price without starting a payment.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/checkout" \
  -H "Authorization: Bearer $GRAPEVINE_PUBLISHABLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"course":65}'

Response from the sample site 200

{
    "object": "preview",
    "course": 65,
    "price": {
        "amount": 0,
        "currency": "usd",
        "label": "$0"
    },
    "publishable_key": "pk_live_bvXboQchc3rSyS3fvi74jbNV",
    "connected_account": null
}

Whether the payment has settled and the learner is enrolled

GET /checkout/{intent}

Ask every few seconds after the card is confirmed.

Called with: Publishable key, from a page

Path parameters

intent string required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/checkout/example" \
  -H "Authorization: Bearer $GRAPEVINE_PUBLISHABLE_KEY"

The signed-in learner

What a learner session or OAuth token reads: the learner, their courses and their results.

The signed-in learner

GET /me

Called with: Learner session or OAuth token

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "learner",
    "id": 3628,
    "external_id": "user_1001",
    "email": "amara@example.com",
    "first_name": "Amara",
    "last_name": "Diallo",
    "name": "Amara Diallo",
    "status": "linked"
}

The learner's courses, with progress

GET /me/enrollments

Called with: Learner session or OAuth token

Query parameters

limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me/enrollments" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "enrollment",
            "course": {
                "id": 57,
                "title": "Leading a Small Group",
                "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
            },
            "role": "student",
            "status": "active",
            "enrolled_at": "2026-11-10T21:12:11Z",
            "progress": {
                "complete": 2,
                "total": 4,
                "percent": 50
            }
        }
    ],
    "has_more": false,
    "next_cursor": null
}

Enroll the learner on a course, as Grapevine's own Enroll button does, for the enroll Branch

POST /me/enrollments

only where they may join themselves, and billed as that button is. A course that must be paid for answers 402 payment_required; use POST /checkout. A dry run says what would happen.

Called with: Learner session or OAuth token

Body

course integer required
dry_run boolean
Say what would happen without doing it.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me/enrollments" \
  -H "Authorization: Bearer $LEARNER_SESSION" \
  -H "Content-Type: application/json" \
  -d '{"course":65}'

Response from the sample site 200

{
    "object": "preview",
    "action": "enroll",
    "course": 65
}

One of the learner's courses, by course id, with each lesson's progress and release

GET /me/enrollments/{id}

Called with: Learner session or OAuth token

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me/enrollments/57" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "enrollment",
    "course": {
        "id": 57,
        "title": "Leading a Small Group",
        "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
    },
    "role": "student",
    "status": "active",
    "enrolled_at": "2026-11-10T21:12:11Z",
    "progress": {
        "complete": 2,
        "total": 4,
        "percent": 50
    },
    "lessons": [
        {
            "id": 61,
            "title": "Why small groups",
            "completed": true,
            "released": true,
            "opens_at": null
        },
        {
            "id": 62,
            "title": "Preparing a session",
            "completed": true,
            "released": true,
            "opens_at": null
        },
        {
            "id": 63,
            "title": "Asking good questions",
            "completed": false,
            "released": true,
            "opens_at": null
        },
        {
            "id": 64,
            "title": "Reflection",
            "completed": false,
            "released": true,
            "opens_at": null
        }
    ]
}

The learner's own results on one course

GET /me/enrollments/{id}/grades

each question in a lesson released to them, with the points it carries and what they have earned.

Called with: Learner session or OAuth token

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/me/enrollments/57/grades" \
  -H "Authorization: Bearer $LEARNER_SESSION"

Response from the sample site 200

{
    "object": "grades",
    "course": 57,
    "earned": 1,
    "possible": 7,
    "questions": [
        {
            "lesson": 61,
            "lesson_title": "Why small groups",
            "question": 1,
            "kind": "choice",
            "points": 1,
            "status": "graded",
            "earned": 1,
            "correct": true,
            "feedback": ""
        },
        {
            "lesson": 63,
            "lesson_title": "Asking good questions",
            "question": 1,
            "kind": "choice",
            "points": 1,
            "status": "unanswered",
            "earned": null,
            "correct": null,
            "feedback": ""
        },
        {
            "lesson": 64,
            "lesson_title": "Reflection",
            "question": 1,
            "kind": "short",
            "points": 5,
            "status": "submitted",
            "earned": null,
            "correct": null,
            "feedback": ""
        }
    ]
}

Results

Recording and correcting a learner's result on one question.

Record a learner's result on one question, or correct the one there is

POST /results

the score and feedback, as the gradebook marks it. Grading completes the lesson.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

learner integer required
lesson integer required
question integer required
score number
Points, at most what the question is worth. Leave it out to keep the score there is.
feedback string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/results" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"learner":3632,"lesson":63,"question":1}'

Response from the sample site 201

{
    "object": "result",
    "id": 8,
    "learner": 3632,
    "lesson": 63,
    "question": 1,
    "score": null,
    "feedback": "",
    "status": "graded"
}

Teaching

Grading from your website: confirming teachers, their gradebooks and the marking queue.

The courses the teacher can grade, with the gradebook on

GET /teach/courses

Called with: Teacher session

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teach/courses" \
  -H "Authorization: Bearer $TEACHER_SESSION"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "course",
            "id": 57,
            "title": "Leading a Small Group",
            "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
        }
    ],
    "has_more": false,
    "next_cursor": null
}

One course's gradebook

GET /teach/courses/{id}/gradebook

a page of the roster, by surname, with each lesson's state and score.

Called with: Teacher session

Path parameters

id integer required

Query parameters

search string
Name or email.
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teach/courses/57/gradebook" \
  -H "Authorization: Bearer $TEACHER_SESSION"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "gradebook_row",
            "learner": 3629,
            "name": "Ben Carter",
            "email": "ben@example.com",
            "status": "active",
            "complete": 0,
            "standing": {
                "modules": [
                    {
                        "id": 58,
                        "title": "Getting started",
                        "implicit": false,
                        "lessons": 2,
                        "opened": 0,
                        "completed": 0,
                        "earned": 0,
                        "possible": 1,
                        "pending": 0,
                        "pendingPoints": 0,
                        "unanswered": 0
                    },
                    {
                        "id": 59,
                        "title": "Your first meeting",
                        "implicit": false,
                        "lessons": 2,
                        "opened": 0,
                        "completed": 0,
                        "earned": 0,
                        "possible": 6,
                        "pending": 0,
                        "pendingPoints": 0,
                        "unanswered": 2
                    },
                    {
                        "id": 60,
                        "title": "For later",
                        "implicit": false,
                        "lessons": 0,
                        "opened": 0,
                        "completed": 0,
                        "earned": 0,
                        "possible": 0,
                        "pending": 0,
                        "pendingPoints": 0,
                        "unanswered": 0
                    }
                ],
                "totals": {
                    "lessons": 4,
                    "opened": 0,
                    "completed": 0,
                    "earned": 0,
                    "possible": 7,
                    "pending": 0,
                    "pendingPoints": 0,
…

The marking queue

GET /teach/courses/{id}/queue

short answers waiting for a grade.

Called with: Teacher session

Path parameters

id string required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teach/courses/57/queue" \
  -H "Authorization: Bearer $TEACHER_SESSION"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "submission",
            "id": 2,
            "learner": 3628,
            "name": "Amara Diallo",
            "lesson": 64,
            "lesson_title": "Reflection",
            "question": 1,
            "prompt": "What would you do differently next time?",
            "points": 5,
            "body": "Start on time, and let the quiet ones speak first."
        }
    ],
    "has_more": false,
    "next_cursor": null
}

Grade an answer, or correct a grade, with optional feedback

POST /teach/submissions/{id}/grade

As Grapevine's own gradebook does.

Called with: Teacher session

Path parameters

id integer required

Body

score number
feedback string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teach/submissions/2/grade" \
  -H "Authorization: Bearer $TEACHER_SESSION" \
  -H "Content-Type: application/json" \
  -d '{"score":1}'

Response from the sample site 200

{
    "object": "submission",
    "id": 2,
    "status": "graded",
    "score": 1,
    "feedback": ""
}

A short-lived session for a confirmed teacher, to hand to your page

POST /teacher-sessions

It reaches only the courses they can grade.

Called with: Secret or restricted key

Body

teacher integer required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teacher-sessions" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"teacher":3631}'

Response from the sample site 201

{
    "object": "session",
    "token": "ts_Fw6C7rmFzmCxW3OCIRVvU6G0_xJkDIYOmCYgJKbFHLMAzCaFHxBi3QwocwtNz8FNL",
    "teacher": 3631,
    "scopes": [
        "teach:read",
        "teach:grade"
    ],
    "expires_at": "2026-11-10T21:59:24Z"
}

Ask for a linked person to grade from your website

POST /teachers

They are always emailed a code to confirm (POST /teachers/{id}/confirm), even somebody you created.

Called with: Secret or restricted key

Body

person integer required
A learner id from POST /learners.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teachers" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"person":3631}'

Response from the sample site 200

{
    "object": "teacher",
    "id": 3631,
    "external_id": "user_1004",
    "status": "linked"
}

Confirm a teacher with the code they were emailed and typed into your page

POST /teachers/{id}/confirm

Called with: Secret or restricted key

Path parameters

id integer required

Body

code string required
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/teachers/3631/confirm" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code":"123456"}'

Response from the sample site 200

{
    "object": "teacher",
    "id": 3631,
    "external_id": "user_1004",
    "status": "linked"
}

People

The people on the site and their roles, as Site Admin's Users panel shows them.

The people on this site, by name, as Site Admin's Users panel lists them

GET /users

Called with: Secret or restricted key

Query parameters

search string
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
updated_since string
Only what changed at or after this time (ISO 8601).
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/users" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "user",
            "id": 3628,
            "email": "amara@example.com",
            "first_name": "Amara",
            "last_name": "Diallo",
            "name": "Amara Diallo",
            "roles": [],
            "staff_of": []
        },
        {
            "object": "user",
            "id": 3629,
            "email": "ben@example.com",
            "first_name": "Ben",
            "last_name": "Carter",
            "name": "Ben Carter",
            "roles": [],
            "staff_of": []
        },
        {
            "object": "user",
            "id": 3630,
            "email": "chen@example.com",
            "first_name": "Chen",
            "last_name": "Wei",
            "name": "Chen Wei",
            "roles": [],
            "staff_of": []
        },
        {
            "object": "user",
            "id": 3632,
            "email": "dana@example.com",
            "first_name": "Dana",
            "last_name": "Reyes",
            "name": "Dana Reyes",
            "roles": [],
            "staff_of": []
        },
        {
            "object": "user",
            "id": 3631,
            "email": "grace@example.com",
            "first_name": "Grace",
            "last_name": "Okafor",
            "name": "Grace Okafor",
            "roles": [],
            "staff_of": [
                {
                    "course": 57,
                    "role": "instructor"
                }
            ]
        }
    ],
    "has_more": false,
…

Add somebody to this site, creating their account if there is none, with any roles

POST /users

Not an enrollment.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

email string required
first_name string required
last_name string required
roles array of string
Every role the person should hold; any left out is taken away. Leave it out to keep their roles as they are.
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/users" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"new.learner@example.com","first_name":"Dana","last_name":"Reyes"}'

Response from the sample site 201

{
    "object": "user",
    "id": 3636,
    "email": "new.learner@example.com",
    "first_name": "Dana",
    "last_name": "Reyes",
    "name": "Dana Reyes",
    "roles": [],
    "staff_of": []
}

One person on this site, their roles, and the courses they teach or help on

GET /users/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/users/3631" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "user",
    "id": 3631,
    "email": "grace@example.com",
    "first_name": "Grace",
    "last_name": "Okafor",
    "name": "Grace Okafor",
    "roles": [],
    "staff_of": [
        {
            "course": 57,
            "role": "instructor"
        }
    ]
}

Change somebody's name or roles

PATCH /users/{id}

Granting Site Admin emails them, as on screen.

Called with: Secret or restricted key

Path parameters

id integer required

Body

first_name string
last_name string
roles array of string
Every role the person should hold; any left out is taken away. Leave it out to keep their roles as they are.
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/users/3631" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Dana"}'

Response from the sample site 200

{
    "object": "user",
    "id": 3631,
    "email": "grace@example.com",
    "first_name": "Dana",
    "last_name": "Okafor",
    "name": "Dana Okafor",
    "roles": [],
    "staff_of": [
        {
            "course": 57,
            "role": "instructor"
        }
    ]
}

Take somebody off this site

DELETE /users/{id}

Their account, enrollments and work are kept.

Called with: Secret or restricted key

Path parameters

id integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/users/3631" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "user",
    "id": 3631,
    "removed": true
}

Webhooks and events

Being told when something happens, and reading what happened.

What happened in the last 30 days, oldest first, of the types this key can read

GET /events

Called with: Secret or restricted key

Query parameters

type string
One of enrollment.created, enrollment.withdrawn, lesson.completed, course.completed, submission.graded, membership.granted, membership.ended, seat.redeemed
limit integer
How many to return, 1–100.
cursor string
next_cursor from the previous page.
updated_since string
Only what changed at or after this time (ISO 8601).
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/events" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "event",
            "id": 1,
            "type": "enrollment.created",
            "created": "2026-11-10T21:12:26Z",
            "data": {
                "object": {
                    "object": "enrollment",
                    "id": 1,
                    "learner": 3628,
                    "course": {
                        "id": 57,
                        "title": "Leading a Small Group",
                        "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
                    },
                    "role": "student",
                    "status": "active",
                    "enrolled_at": "2026-11-10T21:12:11Z",
                    "progress": {
                        "complete": 0,
                        "total": 4,
                        "percent": 0
                    },
                    "completed_at": null,
                    "updated_at": "2026-11-10T21:12:11Z"
                },
                "learner": {
                    "id": 3628,
                    "external_id": "user_1001"
                }
            }
        },
        {
            "object": "event",
            "id": 2,
            "type": "enrollment.created",
            "created": "2026-11-10T21:12:41Z",
            "data": {
                "object": {
                    "object": "enrollment",
                    "id": 2,
                    "learner": 3629,
                    "course": {
                        "id": 57,
                        "title": "Leading a Small Group",
                        "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
                    },
                    "role": "student",
                    "status": "active",
                    "enrolled_at": "2026-11-10T21:12:26Z",
                    "progress": {
                        "complete": 0,
                        "total": 4,
                        "percent": 0
                    },
                    "completed_at": null,
                    "updated_at": "2026-11-10T21:12:26Z"
…

One event

GET /events/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/events/1" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "event",
    "id": 1,
    "type": "enrollment.created",
    "created": "2026-11-10T21:12:26Z",
    "data": {
        "object": {
            "object": "enrollment",
            "id": 1,
            "learner": 3628,
            "course": {
                "id": 57,
                "title": "Leading a Small Group",
                "url": "https://api-sample.grapevinelearning.org/courses/leading-a-small-group/"
            },
            "role": "student",
            "status": "active",
            "enrolled_at": "2026-11-10T21:12:11Z",
            "progress": {
                "complete": 0,
                "total": 4,
                "percent": 0
            },
            "completed_at": null,
            "updated_at": "2026-11-10T21:12:11Z"
        },
        "learner": {
            "id": 3628,
            "external_id": "user_1001"
        }
    }
}

Send an event again now, to one endpoint or to every endpoint that takes its type

POST /events/{id}/redeliver

Called with: Secret or restricted key

Path parameters

id integer required

Body

endpoint integer
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/events/1/redeliver" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endpoint":1}'

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "delivery",
            "id": 37,
            "event": 1,
            "endpoint": 1,
            "status": "pending",
            "attempts": 1,
            "next_at": "2026-11-10T21:48:50Z",
            "last_code": null,
            "last_response": "The sample site sends nothing out.",
            "last_at": "2026-11-10T21:43:50Z"
        }
    ],
    "has_more": false,
    "next_cursor": null
}

This site's webhook endpoints

GET /webhook-endpoints

Called with: Secret or restricted key

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/webhook-endpoints" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "list",
    "data": [
        {
            "object": "webhook_endpoint",
            "id": 1,
            "url": "https://example.com/hooks/grapevine",
            "events": [
                "enrollment.created",
                "lesson.completed"
            ],
            "description": "Sample endpoint: deliveries go nowhere.",
            "enabled": true,
            "created": "2026-11-10T13:06:21Z"
        },
        {
            "object": "webhook_endpoint",
            "id": 2,
            "url": "https://example.com/hooks/grapevine",
            "events": [
                "enrollment.created",
                "lesson.completed"
            ],
            "description": "Sample endpoint: deliveries go nowhere.",
            "enabled": true,
            "created": "2026-11-10T14:07:20Z"
        },
        {
            "object": "webhook_endpoint",
            "id": 3,
            "url": "https://example.com/hooks/grapevine",
            "events": [
                "enrollment.created",
                "lesson.completed"
            ],
            "description": "Sample endpoint: deliveries go nowhere.",
            "enabled": true,
            "created": "2026-11-10T20:41:42Z"
        },
        {
            "object": "webhook_endpoint",
            "id": 4,
            "url": "https://example.com/hooks/grapevine",
            "events": [
                "enrollment.created",
                "lesson.completed"
            ],
            "description": "Sample endpoint: deliveries go nowhere.",
            "enabled": true,
            "created": "2026-11-10T21:12:56Z"
        }
    ],
    "has_more": false,
    "next_cursor": null
}

Register an endpoint

POST /webhook-endpoints

The response carries its signing secret, which is never shown again.

Called with: Secret or restricted key

Headers

Idempotency-Key string
Any unique string. Sent again with the same request within a day, the first answer comes back and nothing runs twice.

Body

url string required
A public https:// address.
events array of string required
The event types to send. A restricted key may choose only the types its scopes can read.
description string
curl -X POST "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/webhook-endpoints" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/hooks/grapevine","events":["enrollment.created"]}'

Response from the sample site 201

{
    "object": "webhook_endpoint",
    "id": 5,
    "url": "https://example.com/hooks/grapevine",
    "events": [
        "enrollment.created"
    ],
    "description": "",
    "enabled": true,
    "created": "2026-11-10T21:44:25Z",
    "secret": "whsec_34a83c45d998f82061f7ce48ccc8569d9f8480fc0c7bedf3"
}

One endpoint, with its last ten deliveries

GET /webhook-endpoints/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/webhook-endpoints/4" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "webhook_endpoint",
    "id": 4,
    "url": "https://example.com/hooks/grapevine",
    "events": [
        "enrollment.created",
        "lesson.completed"
    ],
    "description": "Sample endpoint: deliveries go nowhere.",
    "enabled": true,
    "created": "2026-11-10T21:12:56Z",
    "deliveries": []
}

Change an endpoint's address, events or description, or turn it off and on

PATCH /webhook-endpoints/{id}

Called with: Secret or restricted key

Path parameters

id integer required

Body

url string
A public https:// address.
events array of string
The event types to send. A restricted key may choose only the types its scopes can read.
description string
enabled boolean
curl -X PATCH "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/webhook-endpoints/4" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/hooks/grapevine"}'

Response from the sample site 200

{
    "object": "webhook_endpoint",
    "id": 4,
    "url": "https://example.com/hooks/grapevine",
    "events": [
        "enrollment.created",
        "lesson.completed"
    ],
    "description": "Sample endpoint: deliveries go nowhere.",
    "enabled": true,
    "created": "2026-11-10T21:12:56Z"
}

Remove an endpoint

DELETE /webhook-endpoints/{id}

Deliveries still waiting for it are dropped.

Called with: Secret or restricted key

Path parameters

id integer required
curl -X DELETE "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/webhook-endpoints/4" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "webhook_endpoint",
    "id": 4,
    "deleted": true
}

Jobs

Following work the API queued, such as a bulk enrollment.

A job this key queued, and once it has run, what it did

GET /jobs/{id}

Called with: Secret or restricted key

Path parameters

id integer required
curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/jobs/1" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "job",
    "id": 1,
    "kind": "api-enrollments",
    "status": "pending",
    "result": null,
    "message": "",
    "created_at": "2026-11-10T21:12:41Z",
    "finished_at": null
}

Branches

What Grapevine Branches need from the site beyond its data: its look.

This site's look, for the Branches

GET /branches/styles

its stylesheets as one sheet a shadow root adopts, the font faces for the page's head, and font stylesheets to link.

Called with: Secret or restricted key

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/branches/styles" \
  -H "Authorization: Bearer $GRAPEVINE_SECRET_KEY"

Response from the sample site 200

{
    "object": "branch_styles",
    "version": "e3eb228e5329",
    "css": "\n\n\timg.wp-smiley, img.emoji {\n\t\tdisplay: inline !important;\n\t\tborder: none !important;\n\t\tbox-shadow: none !important;\n\t\theight: 1em !important;\n\t\twidth: 1em !important;\n\t\tmargin: 0 0.07em !important;\n\t\tvertical-align: -0.1em !important;\n\t\tbackground: none !important;\n\t\tpadding: 0 !important;\n\t}\n/* wp-block-library */\n:host{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:host{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:host .has-very-light-gray-background-color{background-color:#eee}:host .has-very-dark-gray-background-color{background-color:#313131}:host .has-very-light-gray-color{color:#eee}:host .has-very-dark-gray-color{color:#313131}:host .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:host .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:host .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:host .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:host .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:host .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:host .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:host{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:host .has-text-align-center{text-align:center}:host .has-text-align-left{text-align:left}:host .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}:host :where(.has-border-color){border-style:solid}:host :where([style^=border-color],[style*=\";border-color\"],[style*=\"; border-color\"]){border-style:solid}:host :where([style^=border-top-color],[style*=\";border-top-color\"],[style*=\"; border-top-color\"]){border-top-style:solid}:host :where([style^=border-right-color],[style*=\";border-right-color\"],[style*=\"; border-right-color\"]){border-right-style:solid}:host :where([style^=border-bottom-color],[style*=\";border-bottom-color\"],[style*=\"; border-bottom-color\"]){border-bottom-style:solid}:host :where([style^=border-left-color],[style*=\";border-left-color\"],[style*=\"; border-left-color\"]){border-left-style:solid}:host :where([style^=border-width],[style*=\";border-width\"],[style*=\"; border-width\"]){border-style:solid}:host :where([style^=border-top-width],[style*=\";border-top-width\"],[style*=\"; border-top-width\"]){border-top-style:solid}:host :where([style^=border-right-width],[style*=\";border-right-width\"],[style*=\"; border-right-width\"]){border-right-style:solid}:host :where([style^=border-bottom-width],[style*=\";border-bottom-width\"],[style*=\"; border-bottom-width\"]){border-bottom-style:solid}:host :where([style^=border-left-width],[style*=\";border-left-width\"],[style*=\"; border-left-width\"]){border-left-style:solid}:host :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}:host :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){:host :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}\n/* classic-theme-styles */\n/*! This file is auto-generated */\n.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}\n/* wp-block-accordion */\n.wp-block-accordion{box-sizing:border-box}\n/* wp-block-accordion-item */\n.wp-block-accordion-item.is-open>.wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon{transform:rotate(45deg)}@media (prefers-reduced-motion:no-preference){.wp-block-accordion-item{transition:grid-template-rows .3s ease-out}.wp-block-accordion-item>.wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon{transition:transform .2s ease-in-out}}\n/* wp-block-archives */\n.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}\n/* wp-block-avatar */\n.wp-block-avatar{line-height:0}.wp-block-avatar,.wp-block-avatar img{box-sizing:border-box}.wp-block-avatar.aligncenter{text-align:center}\n/* wp-block-breadcrumbs */\n.wp-block-breadcrumbs{box-sizing:border-box}.wp-block-breadcrumbs ol{flex-wrap:wrap;list-style:none}.wp-block-breadcrumbs li,.wp-block-breadcrumbs ol{align-items:center;display:flex;margin:0;padding:0}.wp-block-breadcrumbs li:not(:last-child):after{content:var(--separator,\"/\")/\"\";margin:0 .5em;opacity:.7}.wp-block-breadcrumbs span{color:inherit}\n/* wp-block-button */\n.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button[class*=wp-block-button__width]{width:calc(var(--wp--block-button--width)*1% - var(--wp--style--block-gap, .5em)*(1 - var(--wp--block-button--width)/100))}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button[class*=wp-block-button__width]{width:calc(var(--wp--block-button--width)*1%)}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:host :where(.wp-block-button .wp-block-button__link.is-style-outline),:host :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:host :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:host :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:host :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:host :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:transparent;background-image:none}\n/* wp-block-calendar */\n.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}.wp-block-calendar :where(table:not(.has-text-color)){color:#40464d}.wp-block-calendar :where(table:not(.has-text-color)) td,.wp-block-calendar :where(table:not(.has-text-color)) th{border-color:#ddd}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}\n/* wp-block-categories */\n.wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label:not(.screen-reader-text){display:block;width:100%}\n/* wp-block-comment-author-name */\n.wp-block-comment-author-name{box-sizing:border-box}\n/* wp-block-comment-content */\n.comment-awaiting-moderation{display:block;font-size:.875em;line-height:1.5}.wp-block-comment-content{box-sizing:border-box}\n/* wp-block-comment-date */\n.wp-block-comment-date{box-sizing:border-box}\n/* wp-block-comment-edit-link */\n.wp-block-comment-edit-link{box-sizing:border-box}\n/* wp-block-comment-reply-link */\n.wp-block-comment-reply-link{box-sizing:border-box}\n/* wp-block-comment-template */\n.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-left:2rem}.wp-block-comment-template.alignleft{float:left}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:-moz-fit-content;width:fit-content}.wp-block-comment-template.alignright{float:right}\n/* wp-block-comments */\n.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:left}.wp-block-post-comments .alignright{float:right}.wp-block-post-comments .navigation:after{clear:both;content:\"\";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}\n/* wp-block-comments-pagination */\n.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination.aligncenter{justify-content:center}\n/* wp-block-cover */\n.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:transparent}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:\"\"}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;-o-object-fit:cover;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover .wp-block-cover__embed-background,.wp-block-cover-image .wp-block-cover__embed-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;outline:none;padding:0;pointer-events:none;position:absolute;right:0;top:0;width:100%}.wp-block-cover .wp-block-cover__embed-background .wp-block-embed__wrapper,.wp-block-cover-image .wp-block-cover__embed-background .wp-block-embed__wrapper{bottom:0;height:100%;left:0;margin:0;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover .wp-block-cover__embed-background .wp-block-embed__wrapper iframe,.wp-block-cover .wp-block-cover__embed-background iframe,.wp-block-cover-image .wp-block-cover__embed-background .wp-block-embed__wrapper iframe,.wp-block-cover-image .wp-block-cover__embed-background iframe{height:100vh;left:50%;min-height:100%;min-width:100%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);width:100vw}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:host :where(.wp-block-cover h1:not(.has-text-color)),:host :where(.wp-block-cover h2:not(.has-text-color)),:host :where(.wp-block-cover h3:not(.has-text-color)),:host :where(.wp-block-cover h4:not(.has-text-color)),:host :where(.wp-block-cover h5:not(.has-text-color)),:host :where(.wp-block-cover h6:not(.has-text-color)),:host :where(.wp-block-cover p:not(.has-text-color)){color:inherit}:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__embed-background{z-index:0}:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background{z-index:0}:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}:host:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}\n/* wp-block-details */\n.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}\n/* wp-block-file */\n.wp-block-file{box-sizing:border-box}.wp-block-file:not(.wp-element-button){font-size:.8em}.wp-block-file.aligncenter{text-align:center}.wp-block-file.alignright{text-align:right}.wp-block-file *+.wp-block-file__button{margin-left:.75em}:where(.wp-block-file){margin-bottom:1.5em}.wp-block-file__embed{margin-bottom:1em}:where(.wp-block-file__button){border-radius:2em;display:inline-block;padding:.5em 1em}:where(.wp-block-file__button):where(a):active,:where(.wp-block-file__button):where(a):focus,:where(.wp-block-file__button):where(a):hover,:where(.wp-block-file__button):where(a):visited{box-shadow:none;color:#fff;opacity:.85;text-decoration:none}\n/* wp-block-footnotes */\n.editor-styles-wrapper,.entry-content{counter-reset:footnotes}a[data-fn].fn{counter-increment:footnotes;display:inline-flex;font-size:smaller;text-decoration:none;text-indent:-9999999px;vertical-align:super}a[data-fn].fn:after{content:\"[\" counter(footnotes) \"]\";float:left;text-indent:0}\n/* wp-block-gallery */\n.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,rgba(0,0,0,.7),rgba(0,0,0,.3) 70%,transparent);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{backdrop-filter:blur(3px);content:\"\";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,transparent);mask-image:linear-gradient(0deg,#000 20%,transparent);max-height:3em;pointer-events:none}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;text-align:center;text-shadow:0 0 1.5px #000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:transparent}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:transparent;border:3px solid transparent;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:hsla(0,0%,100%,.8)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:transparent transparent;scrollbar-gutter:stable both-edges;scrollbar-width:thin}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:hsla(0,0%,100%,.8) transparent}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{will-change:transform}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:hsla(0,0%,100%,.8) transparent}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,rgba(0,0,0,.4),transparent)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}\n/* wp-block-heading */\nh1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}\n/* wp-block-icon */\n.wp-block-icon{line-height:0}.wp-block-icon.aligncenter{display:flex;justify-content:center}.wp-block-icon svg{fill:currentColor;box-sizing:border-box}.wp-block-icon svg.is-flip-horizontal{transform:scaleX(-1)}.wp-block-icon svg.is-flip-vertical{transform:scaleY(-1)}.wp-block-icon svg.is-flip-horizontal.is-flip-vertical{transform:scaleX(-1) scaleY(-1)}:where(.wp-block-icon) svg{height:100%;width:100%}\n/* wp-block-image */\n.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"50\" cy=\"50\" r=\"50\"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"50\" cy=\"50\" r=\"50\"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:host :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgba(90,90,90,.25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgba(90,90,90,.25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgba(90,90,90,.25);border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}\n/* wp-block-latest-comments */\n:where(.wp-block-latest-comments){padding-left:0}ol.wp-block-latest-comments{box-sizing:border-box;margin-left:0}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){line-height:1.1}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){line-height:1.8}.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){line-height:1.5}.wp-block-latest-comments__comment{list-style:none;margin-bottom:1em}.has-avatars .wp-block-latest-comments__comment{list-style:none;min-height:2.25em}.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{margin-left:3.25em}.wp-block-latest-comments__comment-excerpt p{font-size:.875em;margin:.36em 0 1.4em}.wp-block-latest-comments__comment-date{display:block;font-size:.75em}.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;width:2.5em}.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{font-size:inherit}\n/* wp-block-latest-posts */\n.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid:not(.is-layout-grid){display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid:not(.is-layout-grid) li{margin:0 1.25em 1.25em 0;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2:not(.is-layout-grid) li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2:not(.is-layout-grid) li:nth-child(2n){margin-right:0}.wp-block-latest-posts.columns-3:not(.is-layout-grid) li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3:not(.is-layout-grid) li:nth-child(3n){margin-right:0}.wp-block-latest-posts.columns-4:not(.is-layout-grid) li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4:not(.is-layout-grid) li:nth-child(4n){margin-right:0}.wp-block-latest-posts.columns-5:not(.is-layout-grid) li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5:not(.is-layout-grid) li:nth-child(5n){margin-right:0}.wp-block-latest-posts.columns-6:not(.is-layout-grid) li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6:not(.is-layout-grid) li:nth-child(6n){margin-right:0}}@media (max-width:600px){.wp-block-latest-posts-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid){grid-template-columns:1fr}}:host :where(.wp-block-latest-posts.is-grid){padding:0}:host :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-left:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}\n/* wp-block-list */\nol,ul{box-sizing:border-box}:host :where(.wp-block-list.has-background){padding:1.25em 2.375em}\n/* wp-block-loginout */\n.wp-block-loginout{box-sizing:border-box}\n/* wp-block-media-text */\n.wp-block-media-text{box-sizing:border-box;direction:ltr;display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{grid-column:1;grid-row:1;margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:ltr;grid-column:2;grid-row:1;padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{grid-column:2;grid-row:1}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{grid-column:1;grid-row:1}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;-o-object-fit:cover;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}\n/* wp-block-navigation */\n.wp-block-navigation{position:relative}.wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none}.wp-block-navigation .wp-block-navigation-item{align-items:center;background-color:inherit;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block;z-index:1}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-left:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{stroke:currentColor;display:inline-block;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation{--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}:where(.wp-block-navigation) ul li{padding:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;opacity:0;position:absolute;z-index:2}@media not (prefers-reduced-motion){.wp-block-navigation .has-child .wp-block-navigation__submenu-container{transition:opacity .1s linear}}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{height:0;overflow:hidden;visibility:hidden;width:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1;padding:.5em 1em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:auto;margin-right:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{left:-1px;top:100%}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:transparent;content:\"\";display:block;height:100%;position:absolute;right:100%;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-right:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(-90deg)}}@media (hover:hover){.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation .has-child.open-always{align-items:var(--navigation-layout-align,initial);flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);gap:var(--wp--style--block-gap,2em)}.wp-block-navigation .has-child.open-always,.wp-block-navigation .has-child.open-always .wp-block-navigation-item{justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .has-child.open-always .wp-block-navigation__submenu-container,.wp-block-navigation .has-child.open-always.wp-block-navigation-submenu{gap:var(--wp--style--block-gap,2em)}.wp-block-navigation .has-child.open-always .wp-block-navigation-item,.wp-block-navigation .has-child.open-always .wp-block-navigation__submenu-container,.wp-block-navigation .has-child.open-always.wp-block-navigation-submenu{padding-bottom:0;padding-top:0}.wp-block-navigation .has-child.open-always .wp-block-navigation__submenu-container{padding-left:var(--wp--style--block-gap,2em);padding-right:var(--wp--style--block-gap,2em)}.wp-block-navigation .has-child.open-always .wp-block-navigation__submenu-container .wp-block-navigation-item__content{padding:0}.wp-block-navigation .has-child.open-always .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content,.wp-block-navigation .has-child.open-always>.wp-block-navigation-item__content{flex-grow:0}.wp-block-navigation .has-child.open-always>.wp-block-navigation__submenu-container{background-color:transparent;border:none;color:inherit;flex-basis:100%;height:auto;opacity:1;overflow:visible;position:static;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{left:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:transparent;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-submenu__toggle[aria-expanded=true]+.wp-block-navigation__submenu-icon>svg,.wp-block-navigation-submenu__toggle[aria-expanded=true]>svg{transform:rotate(180deg)}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:0;padding-right:.85em}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-left:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:auto;right:0}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:auto;right:100%}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid rgba(0,0,0,.15)}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{color:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-left:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{background-color:inherit;display:flex;flex-direction:column}@media not (prefers-reduced-motion){.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay){padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-left),20rem)}.wp-block-navigation__responsive-container.is-menu-open{overflow:auto;z-index:100000}.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content{padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-page-list{background:transparent!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}.wp-block-navigation__responsive-container.disable-default-overlay .wp-block-navigation__overlay-container{display:none;width:100%}.wp-block-navigation__responsive-container.disable-default-overlay .wp-block-navigation__responsive-close{max-width:none}.wp-block-navigation__responsive-container.disable-default-overlay.is-menu-open .wp-block-navigation__responsive-container-content>:not(.wp-block-navigation__overlay-container){display:none}.wp-block-navigation__responsive-container.disable-default-overlay.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__overlay-container{display:block}.wp-block-navigation__responsive-container.disable-default-overlay.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__overlay-container .wp-block-navigation__submenu-container{left:0;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay){background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay){color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:transparent;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{position:absolute;right:0;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.disable-default-overlay .wp-block-navigation__responsive-container-close{right:clamp(1rem,var(--wp--style--root--padding-left),20rem);top:clamp(1rem,var(--wp--style--root--padding-left),20rem)}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open:where(:not(.disable-default-overlay)) .wp-block-navigation__responsive-dialog{margin-top:32px}}:host.has-modal-open{overflow:hidden}\n/* wp-block-navigation-link */\n.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{outline:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}\n/* wp-block-navigation-overlay-close */\n.wp-block-navigation-overlay-close{align-items:center;background:transparent;border:none;cursor:pointer;display:inline-flex;gap:.5em;justify-content:center;padding:0;text-decoration:none}.wp-block-navigation-overlay-close:focus{outline-offset:2px}.wp-block-navigation-overlay-close svg{fill:currentColor;display:block;flex-shrink:0;height:24px;width:24px}.wp-block-navigation-overlay-close .wp-block-navigation-overlay-close__text{align-items:center;display:inline-flex}\n/* wp-block-page-list */\n.wp-block-navigation .wp-block-page-list{align-items:var(--navigation-layout-align,initial);background-color:inherit;display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .wp-block-navigation-item{background-color:inherit}.wp-block-page-list{box-sizing:border-box}\n/* wp-block-paragraph */\n.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}:host.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:host :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*=\"writing-mode:vertical-lr\"],p.has-text-align-right[style*=\"writing-mode:vertical-rl\"]{rotate:180deg}\n/* wp-block-playlist */\n.waveform-player{--wfp-accent:#71717a;--wfp-button-color:hsla(0,0%,100%,.9);--wfp-text-color:#fff;--wfp-text-secondary-color:hsla(0,0%,100%,.6);--wfp-btn-artwork-color:hsla(0,0%,100%,.9);--wfp-btn-artwork-scrim:rgba(0,0,0,.5);color:inherit;font-family:inherit;line-height:var(--waveform-line-height,1.4)}.waveform-player.waveform-theme-light{--wfp-button-color:rgba(0,0,0,.8);--wfp-text-color:#333;--wfp-text-secondary-color:rgba(0,0,0,.6)}.waveform-player *{box-sizing:border-box}.waveform-body{display:flex;flex-direction:column;gap:var(--waveform-body-gap,8px)}.waveform-track{gap:var(--waveform-track-gap,12px);position:relative}.waveform-btn,.waveform-track{align-items:center;display:flex}.waveform-btn{background:transparent;border:2px solid;border-radius:var(--wfp-btn-radius,50%);color:var(--wfp-button-color,inherit);cursor:pointer;flex-shrink:0;height:var(--wfp-btn-size,36px);justify-content:center;min-width:var(--wfp-btn-size,36px);opacity:.9;padding:0;transition:all .2s ease;width:var(--wfp-btn-size,36px)}.waveform-btn:hover:not(:disabled){opacity:1;transform:scale(1.05)}.waveform-btn-minimal{border:none;border-radius:0;height:calc(var(--wfp-btn-size, 36px)*1.1);min-width:calc(var(--wfp-btn-size, 36px)*1.1);opacity:.7;width:calc(var(--wfp-btn-size, 36px)*1.1)}.waveform-btn-minimal:hover:not(:disabled){opacity:1;transform:none}.waveform-btn.waveform-btn-minimal svg{height:calc(var(--wfp-btn-size, 36px)*.94);width:calc(var(--wfp-btn-size, 36px)*.94)}.waveform-btn:disabled{cursor:not-allowed;opacity:.3}.waveform-btn>*{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.waveform-btn svg{fill:currentColor;display:block;height:calc(var(--wfp-btn-size, 36px)*.45);width:calc(var(--wfp-btn-size, 36px)*.45)}.waveform-btn-has-artwork{--wfp-btn-size:64px;--wfp-btn-radius:8px;border:none;color:var(--wfp-btn-artwork-color);overflow:hidden;position:relative}.waveform-btn>.waveform-btn-artwork{display:block;height:100%;inset:0;-o-object-fit:cover;object-fit:cover;pointer-events:none;position:absolute;width:100%;z-index:0}.waveform-btn-has-artwork:after{background:var(--wfp-btn-artwork-scrim);content:\"\";inset:0;pointer-events:none;position:absolute;z-index:1}.waveform-btn-has-artwork>:not(.waveform-btn-artwork){position:relative;z-index:2}.waveform-icon-play svg{margin-left:1px}.waveform-container{cursor:pointer;flex:1;min-height:60px;min-width:0;position:relative;width:100%}.waveform-container:focus-visible{outline:2px solid currentColor}.waveform-container canvas{display:block;height:100%;max-width:100%;position:relative;transition:opacity .3s ease;width:100%;z-index:1}.waveform-info{align-items:center;display:flex;font-size:13px;gap:8px;min-height:20px}.waveform-text{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.waveform-title{color:var(--wfp-text-color);font-weight:500}.waveform-artist,.waveform-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waveform-artist{color:var(--wfp-text-secondary-color);font-size:11px}.waveform-bpm,.waveform-time{color:var(--wfp-text-secondary-color);flex-shrink:0;font-size:11px;white-space:nowrap}.waveform-bpm{align-items:center;display:inline-flex;gap:4px}.waveform-loading{background:rgba(0,0,0,.102)}.waveform-error,.waveform-loading{inset:0;position:absolute;z-index:10}.waveform-error{align-items:center;background:rgba(0,0,0,.2);display:flex;justify-content:center}.waveform-error-text{font-size:12px;opacity:.7;padding:0 20px;text-align:center}.waveform-markers{inset:0;pointer-events:none;position:absolute;z-index:5}.waveform-marker{background:hsla(0,0%,100%,.502);border:none;cursor:pointer;height:100%;padding:0;pointer-events:all;position:absolute;top:0;transition:all .2s;width:2px}.waveform-marker:hover{width:4px;z-index:20}.waveform-marker.active{background:currentColor;width:4px;z-index:10}.waveform-marker-tooltip{background:rgba(0,0,0,.902);border-radius:4px;bottom:calc(100% + 4px);color:#fff;font-size:11px;left:50%;opacity:0;padding:4px 8px;pointer-events:none;position:absolute;transform:translate(-50%);transition:opacity .2s;white-space:nowrap;z-index:1000}.waveform-marker.show-label .waveform-marker-tooltip,.waveform-marker:hover .waveform-marker-tooltip{opacity:1}.waveform-hover-time{background:rgba(0,0,0,.902);border-radius:4px;bottom:calc(100% + 4px);color:#fff;font-size:11px;font-variant-numeric:tabular-nums;padding:3px 7px;transform:translate(-50%);transition:opacity .15s;white-space:nowrap;z-index:1000}.waveform-hover-time,.waveform-seek-handle{opacity:0;pointer-events:none;position:absolute}.waveform-seek-handle{background:#fff;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,.349);height:11px;left:0;top:50%;transform:translate(-50%,-50%) scale(0);transition:opacity .12s ease,transform .12s ease;width:11px;z-index:6}.waveform-seek-handle.is-visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.waveform-seek-handle.is-active{transform:translate(-50%,-50%) scale(1.25)}.waveform-btn:focus-visible{outline:2px solid currentColor;outline-offset:2px}.waveform-marker:focus-visible{outline:2px solid currentColor;outline-offset:1px;width:4px}.waveform-speed{flex-shrink:0;position:relative}.speed-btn{background:transparent;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;color:inherit;cursor:pointer;font-size:11px;min-width:40px;padding:4px 8px;transition:all .2s}.speed-btn:hover{background:hsla(0,0%,100%,.051);border-color:hsla(0,0%,100%,.302)}.speed-value{font-weight:600}.speed-menu{background:rgba(0,0,0,.949);border:1px solid hsla(0,0%,100%,.2);border-radius:6px;bottom:100%;margin-bottom:4px;min-width:60px;padding:4px;position:absolute;right:0;z-index:100}.speed-option{background:transparent;border:none;border-radius:4px;color:hsla(0,0%,100%,.702);cursor:pointer;display:block;font-size:12px;padding:6px 12px;text-align:left;transition:all .2s;width:100%}.speed-option:hover{background:hsla(0,0%,100%,.102);color:#fff}.speed-option.active{background:hsla(0,0%,100%,.161);color:#fff;font-weight:600}.waveform-player.waveform-focused{border-radius:4px;outline:2px solid var(--wfp-accent);outline-offset:2px}.waveform-player:focus{outline:none}.waveform-player:focus-visible{outline:1px solid var(--wfp-accent);outline-offset:1px}.waveform-layout-preview .waveform-meta{display:none!important}.waveform-layout-preview .waveform-info{justify-content:center}.waveform-layout-preview .waveform-text{align-items:center;flex:0 1 auto;text-align:center}.waveform-player.waveform-focused{outline:none}.waveform-track.waveform-align-top{align-items:flex-start}.waveform-track.waveform-align-top .waveform-btn{margin-top:5px}.waveform-track.waveform-align-center{align-items:center}.waveform-track.waveform-align-bottom{align-items:flex-end}.waveform-track.waveform-align-bottom .waveform-btn{margin-bottom:5px}@media (max-width:480px){.waveform-btn{height:var(--wfp-btn-size,32px);min-width:var(--wfp-btn-size,32px);width:var(--wfp-btn-size,32px)}.waveform-container{min-height:50px}.waveform-info{font-size:12px}.waveform-artist,.waveform-bpm,.waveform-time{font-size:10px}}@media (prefers-reduced-motion:reduce){.waveform-player *,.waveform-player :after,.waveform-player :before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.wp-block-playlist{box-sizing:border-box}.wp-block-playlist .wp-block-playlist__waveform-player{margin:var(--wp--preset--spacing--20,.625em) 0;position:relative;width:100%}.wp-block-playlist .wp-block-playlist__waveform-player:focus-visible{outline:revert;outline-offset:revert}.wp-block-playlist .waveform-track{gap:0;height:100px}.wp-block-playlist .waveform-btn{background:currentColor;border:none;border-end-start-radius:.125rem;border-radius:0;border-start-start-radius:.125rem;height:100px;margin:0;min-width:100px;width:100px}.wp-block-playlist .waveform-btn:hover:not(:disabled){transform:none}.wp-block-playlist .waveform-btn svg{height:3rem;width:3rem}.wp-block-playlist .waveform-btn .waveform-icon-pause svg{height:2.625rem;width:2.625rem}.wp-block-playlist .waveform-player.has-play-button-artwork .waveform-btn{background-image:var(--wp--playlist--play-button-artwork);background-position:50%;background-size:cover;color:#fff}.wp-block-playlist .waveform-player.has-play-button-artwork .waveform-btn svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.45))}.wp-block-playlist .waveform-player.has-play-button-artwork .waveform-btn svg path{fill:#fff!important}.wp-block-playlist .waveform-track.waveform-align-bottom .waveform-btn{margin-bottom:0}.wp-block-playlist .waveform-btn:focus-visible,.wp-block-playlist .waveform-container:focus-visible{outline:revert;outline-offset:revert}.wp-block-playlist .waveform-artist{opacity:.7}.wp-block-playlist .waveform-artist,.wp-block-playlist .waveform-info,.wp-block-playlist .waveform-time,.wp-block-playlist .waveform-title{font-size:inherit}.wp-block-playlist .wp-block-playlist__tracklist{list-style:none;margin:0;padding-left:0}.wp-block-playlist .wp-block-playlist__tracklist.wp-block-playlist__tracklist-artist-is-hidden .wp-block-playlist-track__artist,.wp-block-playlist .wp-block-playlist__tracklist.wp-block-playlist__tracklist-is-hidden,.wp-block-playlist .wp-block-playlist__tracklist.wp-block-playlist__tracklist-length-is-hidden .wp-block-playlist-track__length{display:none}.wp-block-playlist .wp-block-playlist__tracklist.wp-block-playlist__tracklist-show-numbers{counter-reset:playlist-track}\n/* wp-block-playlist-track */\n.wp-block-playlist-track:has([aria-current=true]){background-color:color-mix(in srgb,currentColor 10%,transparent)}.wp-block-playlist-track:hover{background-color:color-mix(in srgb,currentColor 15%,transparent)}.wp-block-playlist__tracklist-show-numbers .wp-block-playlist-track{counter-increment:playlist-track}.wp-block-playlist-track .wp-block-playlist-track__button{align-items:center;background-color:transparent;border:0;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;outline-offset:2px;padding:var(--wp--preset--spacing--20,.5em);text-align:left;width:100%}.wp-block-playlist__tracklist-show-numbers .wp-block-playlist-track .wp-block-playlist-track__button:before{content:counter(playlist-track);font-size:.85em;margin-right:var(--wp--preset--spacing--20,.5em);opacity:.7;width:2ch}.wp-block-playlist-track .wp-block-playlist-track__button .wp-block-playlist-track__image{border:1px solid rgba(0,0,0,.08);box-sizing:border-box;flex:0 0 50px;height:50px;margin-right:var(--wp--preset--spacing--20,.5em);-o-object-fit:cover;object-fit:cover;width:50px}.wp-block-playlist-track .wp-block-playlist-track__button .wp-block-playlist-track__content{flex:1 1 0;min-width:0}.wp-block-playlist-track .wp-block-playlist-track__button .wp-block-playlist-track__title{display:block}.wp-block-playlist-track .wp-block-playlist-track__button .wp-block-playlist-track__artist{display:block;font-size:.85em;margin-top:.125em;opacity:.7}.wp-block-playlist-track .wp-block-playlist-track__button .wp-block-playlist-track__length{font-size:.85em;margin-left:auto;opacity:.7}\n/* wp-block-post-author */\n.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}\n/* wp-block-post-author-biography */\n.wp-block-post-author-biography{box-sizing:border-box;white-space:pre-wrap}\n/* wp-block-post-author-name */\n.wp-block-post-author-name{box-sizing:border-box}\n/* wp-block-post-comments-count */\n.wp-block-post-comments-count{box-sizing:border-box}\n/* wp-block-post-comments-form */\n:where(.wp-block-post-comments-form input:not([type=submit])),:where(.wp-block-post-comments-form textarea){border:1px solid #949494;font-family:inherit;font-size:1em}:where(.wp-block-post-comments-form input:where(:not([type=submit]):not([type=checkbox]))),:where(.wp-block-post-comments-form textarea){padding:calc(.667em + 2px)}.wp-block-post-comments-form{box-sizing:border-box}.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){font-weight:inherit}.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){font-family:inherit}.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){font-size:inherit}.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){line-height:inherit}.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){font-style:inherit}.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){letter-spacing:inherit}.wp-block-post-comments-form :where(input[type=submit]){box-shadow:none;cursor:pointer;display:inline-block;overflow-wrap:break-word;text-align:center}.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments-form .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments-form .comment-reply-title{margin-bottom:0}.wp-block-post-comments-form .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}\n/* wp-block-buttons */\n.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter{text-align:center}\n/* wp-block-post-comments-link */\n.wp-block-post-comments-link{box-sizing:border-box}\n/* wp-block-post-content */\n.wp-block-post-content{display:flow-root}\n/* wp-block-post-date */\n.wp-block-post-date{box-sizing:border-box}\n/* wp-block-post-excerpt */\n:where(.wp-block-post-excerpt){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block}\n/* wp-block-post-featured-image */\n.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:transparent}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}\n/* wp-block-post-navigation-link */\n.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{display:inline-block;margin-right:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{display:inline-block;margin-left:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link.has-text-align-left[style*=\"writing-mode: vertical-lr\"],.wp-block-post-navigation-link.has-text-align-right[style*=\"writing-mode: vertical-rl\"]{rotate:180deg}\n/* wp-block-post-template */\n.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid){grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:right;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:left;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}\n/* wp-block-post-terms */\n.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}\n/* wp-block-post-time-to-read */\n.wp-block-post-time-to-read{box-sizing:border-box}\n/* wp-block-post-title */\n.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}\n/* wp-block-query-pagination */\n.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination.aligncenter{justify-content:center}\n/* wp-block-query-title */\n.wp-block-query-title{box-sizing:border-box}\n/* wp-block-query-total */\n.wp-block-query-total{box-sizing:border-box}\n/* wp-block-read-more */\n.wp-block-read-more{display:block;width:-moz-fit-content;width:fit-content}.wp-block-read-more:where(:not([style*=text-decoration])){text-decoration:none}.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{text-decoration:none}\n/* wp-block-rss */\nul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}\n/* wp-block-search */\n.wp-block-search__button{margin-left:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{fill:currentColor;height:1.25em;min-height:24px;min-width:24px;vertical-align:text-bottom;width:1.25em}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}.wp-block-search__label{width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-left:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){-webkit-appearance:initial;-moz-appearance:initial;appearance:none;border:1px solid #949494;flex-grow:1;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){background-color:#fff;border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:right}\n/* wp-block-site-logo */\n.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:host :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px}\n/* wp-block-site-tagline */\n.wp-block-site-tagline{box-sizing:border-box}\n/* wp-block-site-title */\n.wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}\n/* wp-block-tab-list */\n:where(.wp-block-tab-list button){-moz-appearance:none;appearance:none;-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:inherit;cursor:pointer;display:block;flex-basis:inherit!important;flex-grow:inherit!important;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:var(--wp--preset--spacing--20,.5em) var(--wp--preset--spacing--30,1em);position:relative;text-align:inherit;text-decoration:none;text-transform:inherit;width:-moz-max-content;width:max-content}:where(.wp-block-tab-list button)[aria-selected=true]:before{border-bottom:2px solid;bottom:0;content:\"\";left:0;pointer-events:none;position:absolute;width:100%}\n/* wp-block-tab-panel */\n.wp-block-tab-panel:empty,.wp-block-tab-panel[hidden]{display:none!important}\n/* wp-block-tabs */\n.wp-block-tabs{box-sizing:border-box}\n/* wp-block-tag-cloud */\n.wp-block-tag-cloud{box-sizing:border-box}.wp-block-tag-cloud.aligncenter{justify-content:center;text-align:center}.wp-block-tag-cloud a{display:inline-block;margin-right:5px}.wp-block-tag-cloud span{display:inline-block;margin-left:5px;text-decoration:none}:host :where(.wp-block-tag-cloud.is-style-outline){display:flex;flex-wrap:wrap;gap:1ch}:host :where(.wp-block-tag-cloud.is-style-outline a){border:1px solid;font-size:unset!important;margin-right:0;padding:1ch 2ch;text-decoration:none!important}\n/* wp-block-term-count */\n.wp-block-term-count{box-sizing:border-box}\n/* wp-block-term-description */\n:where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0}\n/* wp-block-term-name */\n.wp-block-term-name{box-sizing:border-box}\n/* wp-block-term-template */\n.wp-block-term-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}\n/* wp-block-video */\n.wp-block-video{box-sizing:border-box}.wp-block-video video{height:auto;vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{-o-object-fit:cover;object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}\n/* wp-block-accordion-heading */\n.wp-block-accordion-heading__toggle{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;overflow:hidden;padding:var(--wp--preset--spacing--20,1em) 0;text-align:inherit;text-decoration:inherit;text-transform:inherit;width:100%;word-spacing:inherit}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title{text-decoration:underline}.wp-block-accordion-heading__toggle-title{flex:1}.wp-block-accordion-heading__toggle-icon{align-items:center;display:flex;height:1.2em;justify-content:center;width:1.2em}\n/* wp-block-accordion-panel */\n.wp-block-accordion-panel[hidden]{margin-block-start:0}\n/* wp-block-audio */\n.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}\n/* wp-block-code */\n.wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:break-spaces}\n/* wp-block-columns */\n.wp-block-columns{box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns{align-items:normal!important}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}\n/* wp-block-embed */\n.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type=\"core/embed\"],.wp-block[data-align=right]>[data-type=\"core/embed\"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type=\"core/embed\"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type=\"core/embed\"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-group.is-layout-flex .wp-block-embed{flex:1 1 0%;min-width:0}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:\"\";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}\n/* wp-block-group */\n.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}\n/* wp-block-math */\n.wp-block-math{overflow-x:auto;overflow-y:hidden}\n/* wp-block-preformatted */\n.wp-block-preformatted{box-sizing:border-box;white-space:pre-wrap}:where(.wp-block-preformatted.has-background){padding:1.25em 2.375em}\n/* wp-block-pullquote */\n.wp-block-pullquote{box-sizing:border-box;margin:0 0 1em;overflow-wrap:break-word;padding:4em 0;text-align:center}.wp-block-pullquote blockquote,.wp-block-pullquote p{color:inherit}.wp-block-pullquote blockquote{margin:0}.wp-block-pullquote p{margin-top:0}.wp-block-pullquote p:last-child{margin-bottom:0}.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{max-width:420px}.wp-block-pullquote cite,.wp-block-pullquote footer{position:relative}.wp-block-pullquote .has-text-color a{color:inherit}.wp-block-pullquote.has-text-align-left blockquote{text-align:left}.wp-block-pullquote.has-text-align-right blockquote{text-align:right}.wp-block-pullquote.has-text-align-center blockquote{text-align:center}.wp-block-pullquote.is-style-solid-color{border:none}.wp-block-pullquote.is-style-solid-color blockquote{margin-left:auto;margin-right:auto;max-width:60%}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:2em;margin-bottom:0;margin-top:0}.wp-block-pullquote.is-style-solid-color blockquote cite{font-style:normal;text-transform:none}.wp-block-pullquote :where(cite){color:inherit;display:block}\n/* wp-block-quote */\n.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}\n/* wp-block-separator */\n@charset \"UTF-8\";.wp-block-separator{border:none;border-top:2px solid}:host :where(.wp-block-separator.is-style-dots){height:auto;line-height:1;text-align:center}:host :where(.wp-block-separator.is-style-dots):before{color:currentColor;content:\"···\";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}.wp-block-separator.is-style-dots{background:none!important;border:none!important}\n/* wp-block-social-links */\n.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link{height:auto}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{fill:currentColor;color:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{stroke:#000;background-color:#fefc00;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{stroke:#000;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:host :where(.wp-block-social-links .wp-social-link a){padding:.25em}:host :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:host :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000}\n/* wp-block-spacer */\n.wp-block-spacer{clear:both}\n/* wp-block-table */\n.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:transparent;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:transparent}.wp-block-table.is-style-stripes{border-bottom:1px solid #f0f0f0}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:currentColor}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:currentColor}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}\n/* wp-block-text-columns */\n.wp-block-text-columns,.wp-block-text-columns.aligncenter{display:flex}.wp-block-text-columns .wp-block-column{margin:0 1em;padding:0}.wp-block-text-columns .wp-block-column:first-child{margin-left:0}.wp-block-text-columns .wp-block-column:last-child{margin-right:0}.wp-block-text-columns.columns-2 .wp-block-column{width:50%}.wp-block-text-columns.columns-3 .wp-block-column{width:33.3333333333%}.wp-block-text-columns.columns-4 .wp-block-column{width:25%}\n/* wp-block-verse */\npre.wp-block-verse{box-sizing:border-box;min-width:1em;overflow:auto;white-space:pre-wrap;word-break:break-word}:where(pre.wp-block-verse){font-family:inherit}\n:host{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}:host .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}:host .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:host{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:host :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}\n:host :where(.wp-block-icon svg){width: 24px;}\n:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}\n:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}\n:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}\n:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}\n:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}\n:host :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}\n/* gvl-bootstrap */\n@charset \"UTF-8\";/*!\n * Bootstrap v5.0.0-beta3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:host{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:host{scroll-behavior:smooth}}:host{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x)/ -2);margin-left:calc(var(--bs-gutter-x)/ -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)/ 2);padding-left:calc(var(--bs-gutter-x)/ 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.3333333333%}.col-2{flex:0 0 auto;width:16.6666666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.3333333333%}.col-5{flex:0 0 auto;width:41.6666666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.3333333333%}.col-8{flex:0 0 auto;width:66.6666666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.3333333333%}.col-11{flex:0 0 auto;width:91.6666666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.3333333333%}.col-sm-2{flex:0 0 auto;width:16.6666666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.3333333333%}.col-sm-5{flex:0 0 auto;width:41.6666666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.3333333333%}.col-sm-8{flex:0 0 auto;width:66.6666666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.3333333333%}.col-sm-11{flex:0 0 auto;width:91.6666666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.3333333333%}.col-md-2{flex:0 0 auto;width:16.6666666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.3333333333%}.col-md-5{flex:0 0 auto;width:41.6666666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.3333333333%}.col-md-8{flex:0 0 auto;width:66.6666666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.3333333333%}.col-md-11{flex:0 0 auto;width:91.6666666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.3333333333%}.col-lg-2{flex:0 0 auto;width:16.6666666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.3333333333%}.col-lg-5{flex:0 0 auto;width:41.6666666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.3333333333%}.col-lg-8{flex:0 0 auto;width:66.6666666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.3333333333%}.col-lg-11{flex:0 0 auto;width:91.6666666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.3333333333%}.col-xl-2{flex:0 0 auto;width:16.6666666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.3333333333%}.col-xl-5{flex:0 0 auto;width:41.6666666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.3333333333%}.col-xl-8{flex:0 0 auto;width:66.6666666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.3333333333%}.col-xl-11{flex:0 0 auto;width:91.6666666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.3333333333%}.col-xxl-2{flex:0 0 auto;width:16.6666666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.3333333333%}.col-xxl-5{flex:0 0 auto;width:41.6666666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.3333333333%}.col-xxl-8{flex:0 0 auto;width:66.6666666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.3333333333%}.col-xxl-11{flex:0 0 auto;width:91.6666666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.3333333333%}.offset-xxl-2{margin-left:16.6666666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.3333333333%}.offset-xxl-5{margin-left:41.6666666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.3333333333%}.offset-xxl-8{margin-left:66.6666666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.3333333333%}.offset-xxl-11{margin-left:91.6666666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754;padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545;padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"),url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu{top:0;right:100%;left:auto}.dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image: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, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:\"\";background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:last-of-type{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, \"/\")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1060;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1040;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-header{display:flex;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.offcanvas-backdrop::before{position:fixed;top:0;left:0;z-index:1039;width:100vw;height:100vh;content:\"\";background-color:rgba(0,0,0,.5)}.clearfix::after{display:block;clear:both;content:\"\"}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#0d6efd!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#0d6efd!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */\n/* gvl-base */\n/* The baseline this theme used to inherit from a vendored template.\n *\n * grapevine-2026 was built on the eDocs commercial template, and 254KB of its\n * compiled CSS was loaded on every page so that about sixteen rules would\n * apply. Those rules are reproduced here, measured from the rendered page\n * rather than copied by eye: every declaration below closed a difference that\n * showed up when the vendored sheets were switched off and the computed styles\n * of every element on six templates were compared.\n *\n * Kept as its own file rather than folded into gvl-2026.css because the two\n * answer different questions. This is the baseline — what an unstyled element\n * looks like. gvl-2026.css is this theme's own components, and loads after.\n *\n * Bootstrap still loads before this and still provides the grid, the utilities\n * and the component classes. Only the eDocs layer is gone.\n */\n\n/* ── Type ────────────────────────────────────────────────────────────────────\n   One declaration here reaches further than everything else in the file: the\n   letter-spacing below was measured on 119 separate elements, the font on 97\n   and the colour on 60. Three inherited properties were most of the apparent\n   difference between \"with eDocs\" and \"without\". */\n:host {\n    font-family: var(--gvl-font);\n    font-weight: 300;\n    letter-spacing: 0.015rem;\n    color: var(--gvl-text);\n}\n\n:host {\n    font-family: var(--gvl-font);\n    font-size: 16px;\n    font-weight: 400;\n    color: var(--gvl-text);\n    background-color: var(--gvl-surface-sunk);\n}\n\np {\n    font-size: 0.875rem;\n    font-weight: 400;\n    color: var(--gvl-text);\n    letter-spacing: 0.015rem;\n    margin-bottom: 15px;\n}\n\na {\n    color: var(--gvl-primary);\n    text-decoration: none;\n    transition: 0.2s ease-in-out;\n}\n\na:hover {\n    color: var(--gvl-primary-dark);\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: var(--gvl-title);\n    font-family: var(--gvl-font);\n    letter-spacing: 0.015rem;\n    margin-top: 0;\n}\n\nh1, h2, h3, h4 { font-weight: 600; }\n\n/* The template's heading scale, which is larger than Bootstrap's at every\n   step. Several of this theme's own components size their headings explicitly\n   and are unaffected; the ones that do not were relying on these. */\nh1 { font-size: 3rem; }\nh2 { font-size: 2.5rem; }\nh3 { font-size: 2.2rem; }\nh4 { font-size: 1.85rem; }\nh5 { font-size: 1.6rem; }\nh6 { font-size: 1.325rem; }\n\n/* Set explicitly rather than inherited: a list inside a panel that sets its own\n   colour would otherwise take the panel's. */\nlabel { font-size: 0.875rem; }\n\nform label {\n    color: var(--gvl-title);\n    display: inline-block;\n    margin-bottom: 0.5rem;\n}\n\n/* Fields inherit the page's letter-spacing; browsers do not give them one. */\ninput, textarea { letter-spacing: 0.015rem; }\n\nli {\n    color: var(--gvl-text);\n    font-size: 0.875rem;\n    letter-spacing: 0.015rem;\n}\n\n/* ── Layout ──────────────────────────────────────────────────────────────────\n   Bootstrap's container tops out at 1140px; this template widened it, and every\n   page was laid out against the wider one. Restored at the same breakpoints the\n   vendored sheet used. */\n@media only screen and (min-width: 992px) {\n    .container { max-width: 990px; }\n}\n\n@media only screen and (min-width: 1200px) {\n    .container { max-width: 1200px; }\n}\n\n@media only screen and (max-width: 1200px) {\n    .container { max-width: 98%; }\n}\n\n@media only screen and (max-width: 400px) {\n    .container { max-width: 100%; }\n}\n\n/* Sections carried the page's vertical rhythm. Several of this theme's own\n   sections set their own padding and are unaffected; the rest were leaning on\n   this. */\nsection {\n    position: relative;\n    padding: 30px 0;\n}\n\n/* ── Buttons ─────────────────────────────────────────────────────────────────\n   Taller and wider than Bootstrap's, with a two-pixel border and a soft shadow.\n   This is the single most visible thing the vendored sheet was doing: without\n   it every button on the site loses 18px of height and a third of its padding. */\n.btn {\n    font-family: var(--gvl-font);\n    font-weight: 500;\n    font-size: 0.875rem;\n    line-height: 1.75rem;\n    letter-spacing: 0.03rem;\n    min-width: 9.25rem;\n    padding: 0.75rem 2.5rem;\n    white-space: nowrap;\n    border: 2px solid transparent;\n    border-radius: 0.25rem;\n    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);\n    transition: 0.2s ease-in-out;\n}\n\n.btn:hover {\n    cursor: pointer;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.15);\n}\n\n/* The focus ring is suppressed by the vendored sheet. Kept, because the theme's\n   own components draw their own focus states and two rings is worse than one —\n   but NOT suppressed for keyboard users, which the original did not distinguish. */\n.btn:focus { box-shadow: none; outline: none; }\n.btn:focus-visible { outline: 2px solid var(--gvl-primary-light); outline-offset: 2px; }\n\n.btn-sm {\n    padding: 0.5rem 2.25rem;\n    font-size: 0.75rem;\n    line-height: 1.75rem;\n    min-width: 7.5rem;\n    border-radius: 0.25rem;\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);\n}\n\n.btn-sm:hover { box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15); }\n\n.btn-block { display: block !important; }\n\n.btn-primary,\n.btn-primary:focus {\n    color: #fff !important;\n    background-color: var(--gvl-primary) !important;\n    border-color: var(--gvl-primary) !important;\n}\n\n.btn-primary:hover,\n.btn-primary:active {\n    color: #fff !important;\n    background-color: var(--gvl-primary-dark) !important;\n    border-color: var(--gvl-primary-dark) !important;\n}\n\n.btn-white {\n    color: var(--gvl-title) !important;\n    background-color: #fff !important;\n    border-color: #fff !important;\n}\n\n.btn-link,\n.btn-link:focus,\n.btn-link:active {\n    color: var(--gvl-primary);\n    text-decoration: none;\n    box-shadow: none;\n}\n\n.btn-link:hover { color: var(--gvl-primary-dark) !important; }\n\n/* ── Fields ──────────────────────────────────────────────────────────────── */\n.form-control {\n    display: inline-block;\n    width: 100%;\n    height: 56px;\n    padding: 15px 20px;\n    font-family: var(--gvl-font);\n    font-size: 0.875rem;\n    font-weight: 400;\n    line-height: 1.25rem;\n    letter-spacing: 0.05rem;\n    color: var(--gvl-text);\n    background: var(--gvl-surface);\n    background-clip: padding-box;\n    border: 1px solid var(--gvl-line);\n    border-radius: 0.25rem;\n    box-shadow: none;\n    appearance: none;\n    transition: all ease-in-out 0.2s;\n}\n\ntextarea.form-control { height: auto; min-height: 120px; }\n\n/* A submit button is a fixed height, and its label sits on one line rather than\n   on .btn's 1.75rem leading — which is what makes it the same height as the\n   field above it. */\n[type=\"submit\"],\n.btn-submit {\n    height: 56px;\n    min-height: 56px;\n    max-height: 56px;\n    line-height: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) { height: 56px; }\n\n/* ── Dropdowns ───────────────────────────────────────────────────────────── */\n.dropdown-menu {\n    min-width: 210px;\n    width: max-content;\n    color: var(--gvl-title);\n    background-color: var(--gvl-surface);\n    border: none;\n    border-radius: 0.5rem;\n    padding: 10px;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.05);\n}\n\n.dropdown-item {\n    color: var(--gvl-title);\n    background-color: transparent;\n    font-size: 0.875rem;\n    font-weight: 500;\n    padding: 0.75rem 1.25rem;\n}\n\n/* ── The top bar ─────────────────────────────────────────────────────────────\n   These came from doc.css, the template's documentation skin, rather than from\n   its main stylesheet — which is why they were nearly missed: the first pass\n   read only style.css. */\n.text-link,\n.text-link:focus { color: var(--gvl-text); }\n.text-link:hover { color: var(--gvl-primary); }\n\n.top-header-nav .top-nav-item {\n    font-size: 16px;\n    font-weight: 500;\n    color: var(--gvl-title);\n    margin: 0 15px;\n    line-height: 68px;\n}\n\n.top-header-nav .top-nav-item:hover { color: var(--gvl-primary); }\n.top-header-nav .top-nav-item:last-child { margin-right: 0; }\n\n/* The sign-in button: borderless, unlike every other button on the site. This\n   one lived in doc.css rather than the main stylesheet. */\n.top-page-button {\n    margin-left: 15px;\n    padding: 14px 38px !important;\n    border: none !important;\n}\n\n/* ── The card ────────────────────────────────────────────────────────────────\n   .promo-box and .blur are the template's names for a panel and its shadow.\n   Kept as aliases of this theme's own .gvl-card so the markup can be renamed\n   without a flag day, and so a child theme that copied a template still works. */\n.promo-box,\n.gvl-card {\n    background-color: var(--gvl-surface);\n    margin-bottom: 2rem;\n    padding: 2.5rem 2rem;\n    border-radius: 0.5rem;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.05);\n}\n\n/* A lighter shadow than the panel's own, and the one the course cards use. */\n.blur {\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05) !important;\n    transition: 0.2s ease-in-out;\n}\n\n.promo-icon {\n    font-size: 40px;\n    border-radius: 0.5rem;\n    margin-top: -10px;\n    margin-bottom: 15px;\n}\n\n.box-title {\n    font-weight: 600;\n    margin-bottom: 0;\n}\n\n/* ── The four spacing and size utilities this theme actually used ────────────\n   The vendored sheet carried a full utility scale on a different footing from\n   Bootstrap's: mb-30 is thirty pixels, not Bootstrap's 3rem step. Only the ones\n   in use are reproduced — the rest went with the file. */\n.mb-15 { margin-bottom: 15px !important; }\n.mb-30 { margin-bottom: 30px !important; }\n.ml-5  { margin-left: 5px !important; }\n.mr-5  { margin-right: 5px !important; }\n.fs-12 { font-size: 12px !important; }\n.fs-20 { font-size: 20px !important; }\n\n/* gvl-fontawesome */\n/*!\n * Font Awesome Free 5.15.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:host .fa-flip-both,:host .fa-flip-horizontal,:host .fa-flip-vertical,:host .fa-rotate-90,:host .fa-rotate-180,:host .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:\"\\f26e\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-accusoft:before{content:\"\\f369\"}.fa-acquisitions-incorporated:before{content:\"\\f6af\"}.fa-ad:before{content:\"\\f641\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-card:before{content:\"\\f2bb\"}.fa-adjust:before{content:\"\\f042\"}.fa-adn:before{content:\"\\f170\"}.fa-adversal:before{content:\"\\f36a\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-air-freshener:before{content:\"\\f5d0\"}.fa-airbnb:before{content:\"\\f834\"}.fa-algolia:before{content:\"\\f36c\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-justify:before{content:\"\\f039\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-right:before{content:\"\\f038\"}.fa-alipay:before{content:\"\\f642\"}.fa-allergies:before{content:\"\\f461\"}.fa-amazon:before{content:\"\\f270\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-amilia:before{content:\"\\f36d\"}.fa-anchor:before{content:\"\\f13d\"}.fa-android:before{content:\"\\f17b\"}.fa-angellist:before{content:\"\\f209\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-down:before{content:\"\\f107\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angry:before{content:\"\\f556\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-angular:before{content:\"\\f420\"}.fa-ankh:before{content:\"\\f644\"}.fa-app-store:before{content:\"\\f36f\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-apper:before{content:\"\\f371\"}.fa-apple:before{content:\"\\f179\"}.fa-apple-alt:before{content:\"\\f5d1\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-archive:before{content:\"\\f187\"}.fa-archway:before{content:\"\\f557\"}.fa-arrow-alt-circle-down:before{content:\"\\f358\"}.fa-arrow-alt-circle-left:before{content:\"\\f359\"}.fa-arrow-alt-circle-right:before{content:\"\\f35a\"}.fa-arrow-alt-circle-up:before{content:\"\\f35b\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-arrows-alt-h:before{content:\"\\f337\"}.fa-arrows-alt-v:before{content:\"\\f338\"}.fa-artstation:before{content:\"\\f77a\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asterisk:before{content:\"\\f069\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-at:before{content:\"\\f1fa\"}.fa-atlas:before{content:\"\\f558\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-atom:before{content:\"\\f5d2\"}.fa-audible:before{content:\"\\f373\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-avianex:before{content:\"\\f374\"}.fa-aviato:before{content:\"\\f421\"}.fa-award:before{content:\"\\f559\"}.fa-aws:before{content:\"\\f375\"}.fa-baby:before{content:\"\\f77c\"}.fa-baby-carriage:before{content:\"\\f77d\"}.fa-backspace:before{content:\"\\f55a\"}.fa-backward:before{content:\"\\f04a\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-bacteria:before{content:\"\\e059\"}.fa-bacterium:before{content:\"\\e05a\"}.fa-bahai:before{content:\"\\f666\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-balance-scale-left:before{content:\"\\f515\"}.fa-balance-scale-right:before{content:\"\\f516\"}.fa-ban:before{content:\"\\f05e\"}.fa-band-aid:before{content:\"\\f462\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-barcode:before{content:\"\\f02a\"}.fa-bars:before{content:\"\\f0c9\"}.fa-baseball-ball:before{content:\"\\f433\"}.fa-basketball-ball:before{content:\"\\f434\"}.fa-bath:before{content:\"\\f2cd\"}.fa-battery-empty:before{content:\"\\f244\"}.fa-battery-full:before{content:\"\\f240\"}.fa-battery-half:before{content:\"\\f242\"}.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battle-net:before{content:\"\\f835\"}.fa-bed:before{content:\"\\f236\"}.fa-beer:before{content:\"\\f0fc\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-bell:before{content:\"\\f0f3\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bible:before{content:\"\\f647\"}.fa-bicycle:before{content:\"\\f206\"}.fa-biking:before{content:\"\\f84a\"}.fa-bimobject:before{content:\"\\f378\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-biohazard:before{content:\"\\f780\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-bity:before{content:\"\\f37a\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-blender:before{content:\"\\f517\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-blind:before{content:\"\\f29d\"}.fa-blog:before{content:\"\\f781\"}.fa-blogger:before{content:\"\\f37c\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-bold:before{content:\"\\f032\"}.fa-bolt:before{content:\"\\f0e7\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-bone:before{content:\"\\f5d7\"}.fa-bong:before{content:\"\\f55c\"}.fa-book:before{content:\"\\f02d\"}.fa-book-dead:before{content:\"\\f6b7\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-reader:before{content:\"\\f5da\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-border-all:before{content:\"\\f84c\"}.fa-border-none:before{content:\"\\f850\"}.fa-border-style:before{content:\"\\f853\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-box:before{content:\"\\f466\"}.fa-box-open:before{content:\"\\f49e\"}.fa-box-tissue:before{content:\"\\e05b\"}.fa-boxes:before{content:\"\\f468\"}.fa-braille:before{content:\"\\f2a1\"}.fa-brain:before{content:\"\\f5dc\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-broadcast-tower:before{content:\"\\f519\"}.fa-broom:before{content:\"\\f51a\"}.fa-brush:before{content:\"\\f55d\"}.fa-btc:before{content:\"\\f15a\"}.fa-buffer:before{content:\"\\f837\"}.fa-bug:before{content:\"\\f188\"}.fa-building:before{content:\"\\f1ad\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bullseye:before{content:\"\\f140\"}.fa-burn:before{content:\"\\f46a\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-bus:before{content:\"\\f207\"}.fa-bus-alt:before{content:\"\\f55e\"}.fa-business-time:before{content:\"\\f64a\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-calendar:before{content:\"\\f133\"}.fa-calendar-alt:before{content:\"\\f073\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-calendar-times:before{content:\"\\f273\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-camera:before{content:\"\\f030\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-campground:before{content:\"\\f6bb\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-capsules:before{content:\"\\f46b\"}.fa-car:before{content:\"\\f1b9\"}.fa-car-alt:before{content:\"\\f5de\"}.fa-car-battery:before{content:\"\\f5df\"}.fa-car-crash:before{content:\"\\f5e1\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-caravan:before{content:\"\\f8ff\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-caret-square-down:before{content:\"\\f150\"}.fa-caret-square-left:before{content:\"\\f191\"}.fa-caret-square-right:before{content:\"\\f152\"}.fa-caret-square-up:before{content:\"\\f151\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-carrot:before{content:\"\\f787\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cash-register:before{content:\"\\f788\"}.fa-cat:before{content:\"\\f6be\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-centercode:before{content:\"\\f380\"}.fa-centos:before{content:\"\\f789\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-chair:before{content:\"\\f6c0\"}.fa-chalkboard:before{content:\"\\f51b\"}.fa-chalkboard-teacher:before{content:\"\\f51c\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-chart-area:before{content:\"\\f1fe\"}.fa-chart-bar:before{content:\"\\f080\"}.fa-chart-line:before{content:\"\\f201\"}.fa-chart-pie:before{content:\"\\f200\"}.fa-check:before{content:\"\\f00c\"}.fa-check-circle:before{content:\"\\f058\"}.fa-check-double:before{content:\"\\f560\"}.fa-check-square:before{content:\"\\f14a\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-chess:before{content:\"\\f439\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-child:before{content:\"\\f1ae\"}.fa-chrome:before{content:\"\\f268\"}.fa-chromecast:before{content:\"\\f838\"}.fa-church:before{content:\"\\f51d\"}.fa-circle:before{content:\"\\f111\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-city:before{content:\"\\f64f\"}.fa-clinic-medical:before{content:\"\\f7f2\"}.fa-clipboard:before{content:\"\\f328\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-clock:before{content:\"\\f017\"}.fa-clone:before{content:\"\\f24d\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-cloud-download-alt:before{content:\"\\f381\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-cloud-upload-alt:before{content:\"\\f382\"}.fa-cloudflare:before{content:\"\\e07d\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-cocktail:before{content:\"\\f561\"}.fa-code:before{content:\"\\f121\"}.fa-code-branch:before{content:\"\\f126\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-codiepie:before{content:\"\\f284\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cog:before{content:\"\\f013\"}.fa-cogs:before{content:\"\\f085\"}.fa-coins:before{content:\"\\f51e\"}.fa-columns:before{content:\"\\f0db\"}.fa-comment:before{content:\"\\f075\"}.fa-comment-alt:before{content:\"\\f27a\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-comment-dots:before{content:\"\\f4ad\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-comments:before{content:\"\\f086\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-compass:before{content:\"\\f14e\"}.fa-compress:before{content:\"\\f066\"}.fa-compress-alt:before{content:\"\\f422\"}.fa-compress-arrows-alt:before{content:\"\\f78c\"}.fa-concierge-bell:before{content:\"\\f562\"}.fa-confluence:before{content:\"\\f78d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-contao:before{content:\"\\f26d\"}.fa-cookie:before{content:\"\\f563\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-copy:before{content:\"\\f0c5\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cpanel:before{content:\"\\f388\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-crop:before{content:\"\\f125\"}.fa-crop-alt:before{content:\"\\f565\"}.fa-cross:before{content:\"\\f654\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-crow:before{content:\"\\f520\"}.fa-crown:before{content:\"\\f521\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-css3:before{content:\"\\f13c\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-cut:before{content:\"\\f0c4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-dailymotion:before{content:\"\\e052\"}.fa-dashcube:before{content:\"\\f210\"}.fa-database:before{content:\"\\f1c0\"}.fa-deaf:before{content:\"\\f2a4\"}.fa-deezer:before{content:\"\\e077\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-democrat:before{content:\"\\f747\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-desktop:before{content:\"\\f108\"}.fa-dev:before{content:\"\\f6cc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-dhl:before{content:\"\\f790\"}.fa-diagnoses:before{content:\"\\f470\"}.fa-diaspora:before{content:\"\\f791\"}.fa-dice:before{content:\"\\f522\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-dice-five:before{content:\"\\f523\"}.fa-dice-four:before{content:\"\\f524\"}.fa-dice-one:before{content:\"\\f525\"}.fa-dice-six:before{content:\"\\f526\"}.fa-dice-three:before{content:\"\\f527\"}.fa-dice-two:before{content:\"\\f528\"}.fa-digg:before{content:\"\\f1a6\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-digital-tachograph:before{content:\"\\f566\"}.fa-directions:before{content:\"\\f5eb\"}.fa-discord:before{content:\"\\f392\"}.fa-discourse:before{content:\"\\f393\"}.fa-disease:before{content:\"\\f7fa\"}.fa-divide:before{content:\"\\f529\"}.fa-dizzy:before{content:\"\\f567\"}.fa-dna:before{content:\"\\f471\"}.fa-dochub:before{content:\"\\f394\"}.fa-docker:before{content:\"\\f395\"}.fa-dog:before{content:\"\\f6d3\"}.fa-dollar-sign:before{content:\"\\f155\"}.fa-dolly:before{content:\"\\f472\"}.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-donate:before{content:\"\\f4b9\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-door-open:before{content:\"\\f52b\"}.fa-dot-circle:before{content:\"\\f192\"}.fa-dove:before{content:\"\\f4ba\"}.fa-download:before{content:\"\\f019\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-drafting-compass:before{content:\"\\f568\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-dribbble-square:before{content:\"\\f397\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-drum:before{content:\"\\f569\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-dyalog:before{content:\"\\f399\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-edge:before{content:\"\\f282\"}.fa-edge-legacy:before{content:\"\\e078\"}.fa-edit:before{content:\"\\f044\"}.fa-egg:before{content:\"\\f7fb\"}.fa-eject:before{content:\"\\f052\"}.fa-elementor:before{content:\"\\f430\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-ello:before{content:\"\\f5f1\"}.fa-ember:before{content:\"\\f423\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-envira:before{content:\"\\f299\"}.fa-equals:before{content:\"\\f52c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-erlang:before{content:\"\\f39d\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-ethernet:before{content:\"\\f796\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-euro-sign:before{content:\"\\f153\"}.fa-evernote:before{content:\"\\f839\"}.fa-exchange-alt:before{content:\"\\f362\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-expand:before{content:\"\\f065\"}.fa-expand-alt:before{content:\"\\f424\"}.fa-expand-arrows-alt:before{content:\"\\f31e\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-external-link-alt:before{content:\"\\f35d\"}.fa-external-link-square-alt:before{content:\"\\f360\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-dropper:before{content:\"\\f1fb\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-facebook:before{content:\"\\f09a\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-fan:before{content:\"\\f863\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-faucet:before{content:\"\\e005\"}.fa-fax:before{content:\"\\f1ac\"}.fa-feather:before{content:\"\\f52d\"}.fa-feather-alt:before{content:\"\\f56b\"}.fa-fedex:before{content:\"\\f797\"}.fa-fedora:before{content:\"\\f798\"}.fa-female:before{content:\"\\f182\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-figma:before{content:\"\\f799\"}.fa-file:before{content:\"\\f15b\"}.fa-file-alt:before{content:\"\\f15c\"}.fa-file-archive:before{content:\"\\f1c6\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-file-download:before{content:\"\\f56d\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-export:before{content:\"\\f56e\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-file-import:before{content:\"\\f56f\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-file-medical:before{content:\"\\f477\"}.fa-file-medical-alt:before{content:\"\\f478\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-file-signature:before{content:\"\\f573\"}.fa-file-upload:before{content:\"\\f574\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-fill:before{content:\"\\f575\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-film:before{content:\"\\f008\"}.fa-filter:before{content:\"\\f0b0\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-fire:before{content:\"\\f06d\"}.fa-fire-alt:before{content:\"\\f7e4\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-firefox:before{content:\"\\f269\"}.fa-firefox-browser:before{content:\"\\e007\"}.fa-first-aid:before{content:\"\\f479\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-fish:before{content:\"\\f578\"}.fa-fist-raised:before{content:\"\\f6de\"}.fa-flag:before{content:\"\\f024\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-flask:before{content:\"\\f0c3\"}.fa-flickr:before{content:\"\\f16e\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-flushed:before{content:\"\\f579\"}.fa-fly:before{content:\"\\f417\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-font:before{content:\"\\f031\"}.fa-font-awesome:before{content:\"\\f2b4\"}.fa-font-awesome-alt:before{content:\"\\f35c\"}.fa-font-awesome-flag:before{content:\"\\f425\"}.fa-font-awesome-logo-full:before{content:\"\\f4e6\"}.fa-fonticons:before{content:\"\\f280\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-football-ball:before{content:\"\\f44e\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-forumbee:before{content:\"\\f211\"}.fa-forward:before{content:\"\\f04e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-frog:before{content:\"\\f52e\"}.fa-frown:before{content:\"\\f119\"}.fa-frown-open:before{content:\"\\f57a\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-funnel-dollar:before{content:\"\\f662\"}.fa-futbol:before{content:\"\\f1e3\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-gavel:before{content:\"\\f0e3\"}.fa-gem:before{content:\"\\f3a5\"}.fa-genderless:before{content:\"\\f22d\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-gift:before{content:\"\\f06b\"}.fa-gifts:before{content:\"\\f79c\"}.fa-git:before{content:\"\\f1d3\"}.fa-git-alt:before{content:\"\\f841\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-github:before{content:\"\\f09b\"}.fa-github-alt:before{content:\"\\f113\"}.fa-github-square:before{content:\"\\f092\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-gitlab:before{content:\"\\f296\"}.fa-gitter:before{content:\"\\f426\"}.fa-glass-cheers:before{content:\"\\f79f\"}.fa-glass-martini:before{content:\"\\f000\"}.fa-glass-martini-alt:before{content:\"\\f57b\"}.fa-glass-whiskey:before{content:\"\\f7a0\"}.fa-glasses:before{content:\"\\f530\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-globe:before{content:\"\\f0ac\"}.fa-globe-africa:before{content:\"\\f57c\"}.fa-globe-americas:before{content:\"\\f57d\"}.fa-globe-asia:before{content:\"\\f57e\"}.fa-globe-europe:before{content:\"\\f7a2\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-golf-ball:before{content:\"\\f450\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-google:before{content:\"\\f1a0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-google-pay:before{content:\"\\e079\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-gopuram:before{content:\"\\f664\"}.fa-graduation-cap:before{content:\"\\f19d\"}.fa-gratipay:before{content:\"\\f184\"}.fa-grav:before{content:\"\\f2d6\"}.fa-greater-than:before{content:\"\\f531\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-grimace:before{content:\"\\f57f\"}.fa-grin:before{content:\"\\f580\"}.fa-grin-alt:before{content:\"\\f581\"}.fa-grin-beam:before{content:\"\\f582\"}.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-grin-hearts:before{content:\"\\f584\"}.fa-grin-squint:before{content:\"\\f585\"}.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-grin-stars:before{content:\"\\f587\"}.fa-grin-tears:before{content:\"\\f588\"}.fa-grin-tongue:before{content:\"\\f589\"}.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-grin-wink:before{content:\"\\f58c\"}.fa-grip-horizontal:before{content:\"\\f58d\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-guilded:before{content:\"\\e07e\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-hacker-news-square:before{content:\"\\f3af\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-hamburger:before{content:\"\\f805\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hamsa:before{content:\"\\f665\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-hand-holding-medical:before{content:\"\\e05c\"}.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-hand-holding-water:before{content:\"\\f4c1\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-hand-paper:before{content:\"\\f256\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-hand-rock:before{content:\"\\f255\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hand-sparkles:before{content:\"\\e05d\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-hands:before{content:\"\\f4c2\"}.fa-hands-helping:before{content:\"\\f4c4\"}.fa-hands-wash:before{content:\"\\e05e\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-handshake-alt-slash:before{content:\"\\e05f\"}.fa-handshake-slash:before{content:\"\\e060\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-hard-hat:before{content:\"\\f807\"}.fa-hashtag:before{content:\"\\f292\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-hdd:before{content:\"\\f0a0\"}.fa-head-side-cough:before{content:\"\\e061\"}.fa-head-side-cough-slash:before{content:\"\\e062\"}.fa-head-side-mask:before{content:\"\\e063\"}.fa-head-side-virus:before{content:\"\\e064\"}.fa-heading:before{content:\"\\f1dc\"}.fa-headphones:before{content:\"\\f025\"}.fa-headphones-alt:before{content:\"\\f58f\"}.fa-headset:before{content:\"\\f590\"}.fa-heart:before{content:\"\\f004\"}.fa-heart-broken:before{content:\"\\f7a9\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-helicopter:before{content:\"\\f533\"}.fa-highlighter:before{content:\"\\f591\"}.fa-hiking:before{content:\"\\f6ec\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-hips:before{content:\"\\f452\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-history:before{content:\"\\f1da\"}.fa-hive:before{content:\"\\e07f\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-home:before{content:\"\\f015\"}.fa-hooli:before{content:\"\\f427\"}.fa-hornbill:before{content:\"\\f592\"}.fa-horse:before{content:\"\\f6f0\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-hospital:before{content:\"\\f0f8\"}.fa-hospital-alt:before{content:\"\\f47d\"}.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-hospital-user:before{content:\"\\f80d\"}.fa-hot-tub:before{content:\"\\f593\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-hotel:before{content:\"\\f594\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-start:before{content:\"\\f251\"}.fa-house-damage:before{content:\"\\f6f1\"}.fa-house-user:before{content:\"\\e065\"}.fa-houzz:before{content:\"\\f27c\"}.fa-hryvnia:before{content:\"\\f6f2\"}.fa-html5:before{content:\"\\f13b\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-icons:before{content:\"\\f86d\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-id-card:before{content:\"\\f2c2\"}.fa-id-card-alt:before{content:\"\\f47f\"}.fa-ideal:before{content:\"\\e013\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-image:before{content:\"\\f03e\"}.fa-images:before{content:\"\\f302\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-inbox:before{content:\"\\f01c\"}.fa-indent:before{content:\"\\f03c\"}.fa-industry:before{content:\"\\f275\"}.fa-infinity:before{content:\"\\f534\"}.fa-info:before{content:\"\\f129\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-innosoft:before{content:\"\\e080\"}.fa-instagram:before{content:\"\\f16d\"}.fa-instagram-square:before{content:\"\\e055\"}.fa-instalod:before{content:\"\\e081\"}.fa-intercom:before{content:\"\\f7af\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-invision:before{content:\"\\f7b0\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-italic:before{content:\"\\f033\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-java:before{content:\"\\f4e4\"}.fa-jedi:before{content:\"\\f669\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-jira:before{content:\"\\f7b1\"}.fa-joget:before{content:\"\\f3b7\"}.fa-joint:before{content:\"\\f595\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-journal-whills:before{content:\"\\f66a\"}.fa-js:before{content:\"\\f3b8\"}.fa-js-square:before{content:\"\\f3b9\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-key:before{content:\"\\f084\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-khanda:before{content:\"\\f66d\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-kiss:before{content:\"\\f596\"}.fa-kiss-beam:before{content:\"\\f597\"}.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-korvue:before{content:\"\\f42f\"}.fa-landmark:before{content:\"\\f66f\"}.fa-language:before{content:\"\\f1ab\"}.fa-laptop:before{content:\"\\f109\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-laptop-house:before{content:\"\\e066\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-laugh:before{content:\"\\f599\"}.fa-laugh-beam:before{content:\"\\f59a\"}.fa-laugh-squint:before{content:\"\\f59b\"}.fa-laugh-wink:before{content:\"\\f59c\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-leaf:before{content:\"\\f06c\"}.fa-leanpub:before{content:\"\\f212\"}.fa-lemon:before{content:\"\\f094\"}.fa-less:before{content:\"\\f41d\"}.fa-less-than:before{content:\"\\f536\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-level-down-alt:before{content:\"\\f3be\"}.fa-level-up-alt:before{content:\"\\f3bf\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-line:before{content:\"\\f3c0\"}.fa-link:before{content:\"\\f0c1\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-linode:before{content:\"\\f2b8\"}.fa-linux:before{content:\"\\f17c\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-list:before{content:\"\\f03a\"}.fa-list-alt:before{content:\"\\f022\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-lock:before{content:\"\\f023\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-long-arrow-alt-right:before{content:\"\\f30b\"}.fa-long-arrow-alt-up:before{content:\"\\f30c\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-luggage-cart:before{content:\"\\f59d\"}.fa-lungs:before{content:\"\\f604\"}.fa-lungs-virus:before{content:\"\\e067\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-magic:before{content:\"\\f0d0\"}.fa-magnet:before{content:\"\\f076\"}.fa-mail-bulk:before{content:\"\\f674\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-male:before{content:\"\\f183\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-map:before{content:\"\\f279\"}.fa-map-marked:before{content:\"\\f59f\"}.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-map-marker:before{content:\"\\f041\"}.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-markdown:before{content:\"\\f60f\"}.fa-marker:before{content:\"\\f5a1\"}.fa-mars:before{content:\"\\f222\"}.fa-mars-double:before{content:\"\\f227\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mask:before{content:\"\\f6fa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-medal:before{content:\"\\f5a2\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-medium:before{content:\"\\f23a\"}.fa-medium-m:before{content:\"\\f3c7\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-meh:before{content:\"\\f11a\"}.fa-meh-blank:before{content:\"\\f5a4\"}.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-memory:before{content:\"\\f538\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-menorah:before{content:\"\\f676\"}.fa-mercury:before{content:\"\\f223\"}.fa-meteor:before{content:\"\\f753\"}.fa-microblog:before{content:\"\\e01a\"}.fa-microchip:before{content:\"\\f2db\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-alt:before{content:\"\\f3c9\"}.fa-microphone-alt-slash:before{content:\"\\f539\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-microscope:before{content:\"\\f610\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-minus:before{content:\"\\f068\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-minus-square:before{content:\"\\f146\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-mix:before{content:\"\\f3cb\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-mixer:before{content:\"\\e056\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-mobile:before{content:\"\\f10b\"}.fa-mobile-alt:before{content:\"\\f3cd\"}.fa-modx:before{content:\"\\f285\"}.fa-monero:before{content:\"\\f3d0\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-money-check:before{content:\"\\f53c\"}.fa-money-check-alt:before{content:\"\\f53d\"}.fa-monument:before{content:\"\\f5a6\"}.fa-moon:before{content:\"\\f186\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-mosque:before{content:\"\\f678\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-mouse:before{content:\"\\f8cc\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-music:before{content:\"\\f001\"}.fa-napster:before{content:\"\\f3d2\"}.fa-neos:before{content:\"\\f612\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-neuter:before{content:\"\\f22c\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-node:before{content:\"\\f419\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-npm:before{content:\"\\f3d4\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-octopus-deploy:before{content:\"\\e082\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-oil-can:before{content:\"\\f613\"}.fa-old-republic:before{content:\"\\f510\"}.fa-om:before{content:\"\\f679\"}.fa-opencart:before{content:\"\\f23d\"}.fa-openid:before{content:\"\\f19b\"}.fa-opera:before{content:\"\\f26a\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-osi:before{content:\"\\f41a\"}.fa-otter:before{content:\"\\f700\"}.fa-outdent:before{content:\"\\f03b\"}.fa-page4:before{content:\"\\f3d7\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-pager:before{content:\"\\f815\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-palette:before{content:\"\\f53f\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-pallet:before{content:\"\\f482\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-parking:before{content:\"\\f540\"}.fa-passport:before{content:\"\\f5ab\"}.fa-pastafarianism:before{content:\"\\f67b\"}.fa-paste:before{content:\"\\f0ea\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-pause:before{content:\"\\f04c\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-paw:before{content:\"\\f1b0\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-peace:before{content:\"\\f67c\"}.fa-pen:before{content:\"\\f304\"}.fa-pen-alt:before{content:\"\\f305\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-pen-square:before{content:\"\\f14b\"}.fa-pencil-alt:before{content:\"\\f303\"}.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-penny-arcade:before{content:\"\\f704\"}.fa-people-arrows:before{content:\"\\e068\"}.fa-people-carry:before{content:\"\\f4ce\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-perbyte:before{content:\"\\e083\"}.fa-percent:before{content:\"\\f295\"}.fa-percentage:before{content:\"\\f541\"}.fa-periscope:before{content:\"\\f3da\"}.fa-person-booth:before{content:\"\\f756\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-phone:before{content:\"\\f095\"}.fa-phone-alt:before{content:\"\\f879\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-phone-square:before{content:\"\\f098\"}.fa-phone-square-alt:before{content:\"\\f87b\"}.fa-phone-volume:before{content:\"\\f2a0\"}.fa-photo-video:before{content:\"\\f87c\"}.fa-php:before{content:\"\\f457\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-square:before{content:\"\\e01e\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-pills:before{content:\"\\f484\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-plane:before{content:\"\\f072\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-plane-slash:before{content:\"\\e069\"}.fa-play:before{content:\"\\f04b\"}.fa-play-circle:before{content:\"\\f144\"}.fa-playstation:before{content:\"\\f3df\"}.fa-plug:before{content:\"\\f1e6\"}.fa-plus:before{content:\"\\f067\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-poll:before{content:\"\\f681\"}.fa-poll-h:before{content:\"\\f682\"}.fa-poo:before{content:\"\\f2fe\"}.fa-poo-storm:before{content:\"\\f75a\"}.fa-poop:before{content:\"\\f619\"}.fa-portrait:before{content:\"\\f3e0\"}.fa-pound-sign:before{content:\"\\f154\"}.fa-power-off:before{content:\"\\f011\"}.fa-pray:before{content:\"\\f683\"}.fa-praying-hands:before{content:\"\\f684\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-prescription-bottle-alt:before{content:\"\\f486\"}.fa-print:before{content:\"\\f02f\"}.fa-procedures:before{content:\"\\f487\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-project-diagram:before{content:\"\\f542\"}.fa-pump-medical:before{content:\"\\e06a\"}.fa-pump-soap:before{content:\"\\e06b\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-python:before{content:\"\\f3e2\"}.fa-qq:before{content:\"\\f1d6\"}.fa-qrcode:before{content:\"\\f029\"}.fa-question:before{content:\"\\f128\"}.fa-question-circle:before{content:\"\\f059\"}.fa-quidditch:before{content:\"\\f458\"}.fa-quinscape:before{content:\"\\f459\"}.fa-quora:before{content:\"\\f2c4\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-quran:before{content:\"\\f687\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-random:before{content:\"\\f074\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-react:before{content:\"\\f41b\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-readme:before{content:\"\\f4d5\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-receipt:before{content:\"\\f543\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-redo:before{content:\"\\f01e\"}.fa-redo-alt:before{content:\"\\f2f9\"}.fa-registered:before{content:\"\\f25d\"}.fa-remove-format:before{content:\"\\f87d\"}.fa-renren:before{content:\"\\f18b\"}.fa-reply:before{content:\"\\f3e5\"}.fa-reply-all:before{content:\"\\f122\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-republican:before{content:\"\\f75e\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-retweet:before{content:\"\\f079\"}.fa-rev:before{content:\"\\f5b2\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-ring:before{content:\"\\f70b\"}.fa-road:before{content:\"\\f018\"}.fa-robot:before{content:\"\\f544\"}.fa-rocket:before{content:\"\\f135\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-route:before{content:\"\\f4d7\"}.fa-rss:before{content:\"\\f09e\"}.fa-rss-square:before{content:\"\\f143\"}.fa-ruble-sign:before{content:\"\\f158\"}.fa-ruler:before{content:\"\\f545\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-running:before{content:\"\\f70c\"}.fa-rupee-sign:before{content:\"\\f156\"}.fa-rust:before{content:\"\\e07a\"}.fa-sad-cry:before{content:\"\\f5b3\"}.fa-sad-tear:before{content:\"\\f5b4\"}.fa-safari:before{content:\"\\f267\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-sass:before{content:\"\\f41e\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-save:before{content:\"\\f0c7\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-school:before{content:\"\\f549\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-scribd:before{content:\"\\f28a\"}.fa-scroll:before{content:\"\\f70e\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-search:before{content:\"\\f002\"}.fa-search-dollar:before{content:\"\\f688\"}.fa-search-location:before{content:\"\\f689\"}.fa-search-minus:before{content:\"\\f010\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-seedling:before{content:\"\\f4d8\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-sellsy:before{content:\"\\f213\"}.fa-server:before{content:\"\\f233\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-shapes:before{content:\"\\f61f\"}.fa-share:before{content:\"\\f064\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-share-square:before{content:\"\\f14d\"}.fa-shekel-sign:before{content:\"\\f20b\"}.fa-shield-alt:before{content:\"\\f3ed\"}.fa-shield-virus:before{content:\"\\e06c\"}.fa-ship:before{content:\"\\f21a\"}.fa-shipping-fast:before{content:\"\\f48b\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-shopify:before{content:\"\\e057\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-shower:before{content:\"\\f2cc\"}.fa-shuttle-van:before{content:\"\\f5b6\"}.fa-sign:before{content:\"\\f4d9\"}.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-sign-language:before{content:\"\\f2a7\"}.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-signal:before{content:\"\\f012\"}.fa-signature:before{content:\"\\f5b7\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-sink:before{content:\"\\e06d\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-sith:before{content:\"\\f512\"}.fa-skating:before{content:\"\\f7c5\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-skiing:before{content:\"\\f7c9\"}.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-skull:before{content:\"\\f54c\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-skype:before{content:\"\\f17e\"}.fa-slack:before{content:\"\\f198\"}.fa-slack-hash:before{content:\"\\f3ef\"}.fa-slash:before{content:\"\\f715\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-sliders-h:before{content:\"\\f1de\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-smile:before{content:\"\\f118\"}.fa-smile-beam:before{content:\"\\f5b8\"}.fa-smile-wink:before{content:\"\\f4da\"}.fa-smog:before{content:\"\\f75f\"}.fa-smoking:before{content:\"\\f48d\"}.fa-smoking-ban:before{content:\"\\f54d\"}.fa-sms:before{content:\"\\f7cd\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-snowboarding:before{content:\"\\f7ce\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-soap:before{content:\"\\e06e\"}.fa-socks:before{content:\"\\f696\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-sort:before{content:\"\\f0dc\"}.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-sort-amount-down:before{content:\"\\f160\"}.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-sort-amount-up:before{content:\"\\f161\"}.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-sort-down:before{content:\"\\f0dd\"}.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-sort-up:before{content:\"\\f0de\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-spa:before{content:\"\\f5bb\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-spell-check:before{content:\"\\f891\"}.fa-spider:before{content:\"\\f717\"}.fa-spinner:before{content:\"\\f110\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-square:before{content:\"\\f0c8\"}.fa-square-full:before{content:\"\\f45c\"}.fa-square-root-alt:before{content:\"\\f698\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-stackpath:before{content:\"\\f842\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-star:before{content:\"\\f005\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-star-half:before{content:\"\\f089\"}.fa-star-half-alt:before{content:\"\\f5c0\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-steam-symbol:before{content:\"\\f3f6\"}.fa-step-backward:before{content:\"\\f048\"}.fa-step-forward:before{content:\"\\f051\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-stop:before{content:\"\\f04d\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-stopwatch-20:before{content:\"\\e06f\"}.fa-store:before{content:\"\\f54e\"}.fa-store-alt:before{content:\"\\f54f\"}.fa-store-alt-slash:before{content:\"\\e070\"}.fa-store-slash:before{content:\"\\e071\"}.fa-strava:before{content:\"\\f428\"}.fa-stream:before{content:\"\\f550\"}.fa-street-view:before{content:\"\\f21d\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-stripe:before{content:\"\\f429\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-subscript:before{content:\"\\f12c\"}.fa-subway:before{content:\"\\f239\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-sun:before{content:\"\\f185\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-superscript:before{content:\"\\f12b\"}.fa-supple:before{content:\"\\f3f9\"}.fa-surprise:before{content:\"\\f5c2\"}.fa-suse:before{content:\"\\f7d6\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-swift:before{content:\"\\f8e1\"}.fa-swimmer:before{content:\"\\f5c4\"}.fa-swimming-pool:before{content:\"\\f5c5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-sync:before{content:\"\\f021\"}.fa-sync-alt:before{content:\"\\f2f1\"}.fa-syringe:before{content:\"\\f48e\"}.fa-table:before{content:\"\\f0ce\"}.fa-table-tennis:before{content:\"\\f45d\"}.fa-tablet:before{content:\"\\f10a\"}.fa-tablet-alt:before{content:\"\\f3fa\"}.fa-tablets:before{content:\"\\f490\"}.fa-tachometer-alt:before{content:\"\\f3fd\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-tape:before{content:\"\\f4db\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-taxi:before{content:\"\\f1ba\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-teeth:before{content:\"\\f62e\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-telegram-plane:before{content:\"\\f3fe\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-tenge:before{content:\"\\f7d7\"}.fa-terminal:before{content:\"\\f120\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-th:before{content:\"\\f00a\"}.fa-th-large:before{content:\"\\f009\"}.fa-th-list:before{content:\"\\f00b\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-theater-masks:before{content:\"\\f630\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-thermometer:before{content:\"\\f491\"}.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbtack:before{content:\"\\f08d\"}.fa-ticket-alt:before{content:\"\\f3ff\"}.fa-tiktok:before{content:\"\\e07b\"}.fa-times:before{content:\"\\f00d\"}.fa-times-circle:before{content:\"\\f057\"}.fa-tint:before{content:\"\\f043\"}.fa-tint-slash:before{content:\"\\f5c7\"}.fa-tired:before{content:\"\\f5c8\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-toilet-paper-slash:before{content:\"\\e072\"}.fa-toolbox:before{content:\"\\f552\"}.fa-tools:before{content:\"\\f7d9\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-torah:before{content:\"\\f6a0\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-tractor:before{content:\"\\f722\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-trademark:before{content:\"\\f25c\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-trailer:before{content:\"\\e041\"}.fa-train:before{content:\"\\f238\"}.fa-tram:before{content:\"\\f7da\"}.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-trash:before{content:\"\\f1f8\"}.fa-trash-alt:before{content:\"\\f2ed\"}.fa-trash-restore:before{content:\"\\f829\"}.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-tree:before{content:\"\\f1bb\"}.fa-trello:before{content:\"\\f181\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-trophy:before{content:\"\\f091\"}.fa-truck:before{content:\"\\f0d1\"}.fa-truck-loading:before{content:\"\\f4de\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-tshirt:before{content:\"\\f553\"}.fa-tty:before{content:\"\\f1e4\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-tv:before{content:\"\\f26c\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-twitter:before{content:\"\\f099\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-typo3:before{content:\"\\f42b\"}.fa-uber:before{content:\"\\f402\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-uikit:before{content:\"\\f403\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-uncharted:before{content:\"\\e084\"}.fa-underline:before{content:\"\\f0cd\"}.fa-undo:before{content:\"\\f0e2\"}.fa-undo-alt:before{content:\"\\f2ea\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-unity:before{content:\"\\e049\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-university:before{content:\"\\f19c\"}.fa-unlink:before{content:\"\\f127\"}.fa-unlock:before{content:\"\\f09c\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-unsplash:before{content:\"\\e07c\"}.fa-untappd:before{content:\"\\f405\"}.fa-upload:before{content:\"\\f093\"}.fa-ups:before{content:\"\\f7e0\"}.fa-usb:before{content:\"\\f287\"}.fa-user:before{content:\"\\f007\"}.fa-user-alt:before{content:\"\\f406\"}.fa-user-alt-slash:before{content:\"\\f4fa\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-user-cog:before{content:\"\\f4fe\"}.fa-user-edit:before{content:\"\\f4ff\"}.fa-user-friends:before{content:\"\\f500\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-user-injured:before{content:\"\\f728\"}.fa-user-lock:before{content:\"\\f502\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-user-minus:before{content:\"\\f503\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-user-shield:before{content:\"\\f505\"}.fa-user-slash:before{content:\"\\f506\"}.fa-user-tag:before{content:\"\\f507\"}.fa-user-tie:before{content:\"\\f508\"}.fa-user-times:before{content:\"\\f235\"}.fa-users:before{content:\"\\f0c0\"}.fa-users-cog:before{content:\"\\f509\"}.fa-users-slash:before{content:\"\\e073\"}.fa-usps:before{content:\"\\f7e1\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-utensils:before{content:\"\\f2e7\"}.fa-vaadin:before{content:\"\\f408\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-venus:before{content:\"\\f221\"}.fa-venus-double:before{content:\"\\f226\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-vest:before{content:\"\\e085\"}.fa-vest-patches:before{content:\"\\e086\"}.fa-viacoin:before{content:\"\\f237\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-vial:before{content:\"\\f492\"}.fa-vials:before{content:\"\\f493\"}.fa-viber:before{content:\"\\f409\"}.fa-video:before{content:\"\\f03d\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-virus:before{content:\"\\e074\"}.fa-virus-slash:before{content:\"\\e075\"}.fa-viruses:before{content:\"\\e076\"}.fa-vk:before{content:\"\\f189\"}.fa-vnv:before{content:\"\\f40b\"}.fa-voicemail:before{content:\"\\f897\"}.fa-volleyball-ball:before{content:\"\\f45f\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-mute:before{content:\"\\f6a9\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-up:before{content:\"\\f028\"}.fa-vote-yea:before{content:\"\\f772\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-walking:before{content:\"\\f554\"}.fa-wallet:before{content:\"\\f555\"}.fa-warehouse:before{content:\"\\f494\"}.fa-watchman-monitoring:before{content:\"\\e087\"}.fa-water:before{content:\"\\f773\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-waze:before{content:\"\\f83f\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-weibo:before{content:\"\\f18a\"}.fa-weight:before{content:\"\\f496\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-wind:before{content:\"\\f72e\"}.fa-window-close:before{content:\"\\f410\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-wine-glass-alt:before{content:\"\\f5ce\"}.fa-wix:before{content:\"\\f5cf\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-wodu:before{content:\"\\e088\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-won-sign:before{content:\"\\f159\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-wpforms:before{content:\"\\f298\"}.fa-wpressr:before{content:\"\\f3e4\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-x-ray:before{content:\"\\f497\"}.fa-xbox:before{content:\"\\f412\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-yammer:before{content:\"\\f840\"}.fa-yandex:before{content:\"\\f413\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-yen-sign:before{content:\"\\f157\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-youtube:before{content:\"\\f167\"}.fa-youtube-square:before{content:\"\\f431\"}.fa-zhihu:before{content:\"\\f63f\"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.fab{font-family:\"Font Awesome 5 Brands\"}.fab,.far{font-weight:400}.fa,.far,.fas{font-family:\"Font Awesome 5 Free\"}.fa,.fas{font-weight:900}\n/* gvl-lms */\n/* Grapevine LMS — design layer.\n *\n * Sits on top of the eDocs template (style.css + doc.css) and adds the course\n * player components. Everything visual is driven by the custom properties in\n * the token block below, so a reskin means overriding tokens — not rewriting\n * component rules. The markup the JS drives is addressed by data-* attributes\n * (data-gvl-module / data-gvl-panel / data-gvl-lesson), never by these class\n * names, so a theme is free to replace the markup wholesale.\n */\n\n/* ── Design tokens ──────────────────────────────────────────────────────── */\n\n/* In a CASCADE LAYER, and the layer is the whole point.\n *\n * These are this plugin's DEFAULTS, for a theme that brings no palette of its\n * own. They were written as a plain `:host` block, which made them something\n * else entirely: `:host` against `:host` is a specificity tie, ties are broken\n * by source order, and a plugin stylesheet is enqueued after the theme's. So\n * the defaults silently overrode every theme that had already set the same\n * tokens.\n *\n * It surfaced on grapevinelearning.org, where the marketing theme's grape\n * (#94309f) became this file's blue (#0b50d8) — but ONLY for signed-in\n * administrators, because that is the only case in which the Site Admin\n * screens pull this stylesheet onto a marketing page. The public site stayed\n * purple, so every logged-out check said the site was fine while the owner saw\n * blue on every device. Ryan found it; three rounds of my own measurements did\n * not, because all of them were logged out.\n *\n * Any unlayered rule beats any layered one, whatever the order, so a theme\n * that declares these tokens now wins by saying so — and a theme that declares\n * nothing still gets a working palette. No theme has to opt in, and nothing\n * has to be remembered at enqueue time.\n */\n@layer gvl-defaults {\n:host {\n    --gvl-primary:        #0b50d8;\n    --gvl-primary-dark:   #093c8e;\n    --gvl-primary-light:  #a4c2f4;\n    --gvl-primary-wash:   #eef3fe;\n\n    --gvl-title:          #212121;\n    --gvl-text:           #555555;\n    --gvl-muted:          #909193;\n\n    --gvl-surface:        #ffffff;\n    --gvl-surface-sunk:   #f9f9fa;\n    --gvl-line:           #f1f2f3;\n    --gvl-line-strong:    #e7e8e9;\n\n    --gvl-accent:         #0fb07a;   /* completion / progress */\n\n    /* Per-kind tints. Tokens like everything else, so a skin recolours the\n       cards along with the rest rather than being left with three stray\n       palettes it has to override by selector. */\n    --gvl-kind-reflect:      #c97a17;\n    --gvl-kind-reflect-wash: #fdf3e7;\n    --gvl-kind-quiz:         #6541c4;\n    --gvl-kind-quiz-wash:    #f0ecfd;\n    --gvl-kind-reading:      #0fb07a;\n    --gvl-kind-reading-wash: #e9f6f1;\n\n    --gvl-radius:         0.5rem;\n    --gvl-radius-lg:      1rem;\n    --gvl-shadow:         0 2px 6px rgba(33, 33, 33, .05);\n    --gvl-shadow-lift:    0 12px 28px rgba(11, 80, 216, .13);\n    --gvl-shadow-modal:   0 24px 70px rgba(0, 0, 0, .28);\n\n    --gvl-font:           'Poppins', sans-serif;\n\n    /* Layout — the template's own measurements, named so a reskin can move them. */\n    --gvl-sidebar-w:      300px;\n    --gvl-topbar-h:       90px;\n}\n}   /* @layer gvl-defaults */\n\n\n/* ── Progress (sidebar) ─────────────────────────────────────────────────── */\n.gvl-progress__title {\n    font-family: var(--gvl-font);\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin: 0 0 10px;\n}\n\n.gvl-progress__track {\n    height: 6px;\n    border-radius: 3px;\n    background-color: var(--gvl-line-strong);\n    overflow: hidden;\n}\n\n.gvl-progress__bar {\n    height: 100%;\n    width: 0;\n    border-radius: 3px;\n    background-color: var(--gvl-accent);\n    transition: width .35s ease;\n}\n\n.gvl-progress__label {\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin: 10px 0 0;\n}\n\n\n/* ── Lesson cards ───────────────────────────────────────────────────────── */\n.gvl-lessongrid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n    gap: 26px;\n}\n\n.gvl-lessoncard {\n    display: flex;\n    flex-direction: column;\n    text-align: left;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    box-shadow: var(--gvl-shadow);\n    padding: 0;\n    overflow: hidden;\n    cursor: pointer;\n    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n}\n\n.gvl-lessoncard:hover {\n    transform: translateY(-4px);\n    border-color: var(--gvl-primary-light);\n    box-shadow: var(--gvl-shadow-lift);\n}\n\n.gvl-lessoncard__media {\n    position: relative;\n    aspect-ratio: 16 / 9;\n    background-color: var(--gvl-primary-wash);\n    background-size: cover;\n    background-position: center;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.gvl-lessoncard__media--image::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(to top, rgba(9, 60, 142, .55) 0%, rgba(9, 60, 142, 0) 55%);\n}\n\n.gvl-lessoncard__label {\n    font-family: var(--gvl-font);\n    position: absolute;\n    top: 12px;\n    left: 12px;\n    z-index: 2;\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    background-color: rgba(255, 255, 255, .94);\n    color: var(--gvl-primary);\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n    padding: 5px 10px;\n    border-radius: 100px;\n}\n\n/* Play / type badge in the centre of the thumbnail. */\n.gvl-lessoncard__icon {\n    position: relative;\n    z-index: 2;\n    width: 52px;\n    height: 52px;\n    border-radius: 50%;\n    background-color: rgba(255, 255, 255, .92);\n    color: var(--gvl-primary);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    box-shadow: 0 4px 14px rgba(0, 0, 0, .16);\n    transition: transform .2s ease, background-color .2s ease, color .2s ease;\n}\n\n.gvl-lessoncard:hover .gvl-lessoncard__icon {\n    transform: scale(1.08);\n    background-color: var(--gvl-primary);\n    color: #fff;\n}\n\n.gvl-lessoncard__body {\n    padding: 18px 20px 20px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    flex: 1 1 auto;\n}\n\n.gvl-lessoncard__title {\n    font-family: var(--gvl-font);\n    font-size: 15px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.4;\n    margin: 0;\n}\n\n.gvl-lessoncard__meta {\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin: 0;\n}\n\n/* Non-video item kinds re-tint the media panel rather than changing its shape. */\n.gvl-lessoncard--reflection .gvl-lessoncard__media { background-color: var(--gvl-kind-reflect-wash); }\n.gvl-lessoncard--reflection .gvl-lessoncard__icon  { color: var(--gvl-kind-reflect); }\n.gvl-lessoncard--reflection:hover .gvl-lessoncard__icon { background-color: var(--gvl-kind-reflect); color: #fff; }\n.gvl-lessoncard--reflection .gvl-lessoncard__label { color: var(--gvl-kind-reflect); }\n\n.gvl-lessoncard--quiz .gvl-lessoncard__media,\n.gvl-lessoncard--essay .gvl-lessoncard__media { background-color: var(--gvl-kind-quiz-wash); }\n.gvl-lessoncard--quiz .gvl-lessoncard__icon,\n.gvl-lessoncard--essay .gvl-lessoncard__icon  { color: var(--gvl-kind-quiz); }\n.gvl-lessoncard--quiz:hover .gvl-lessoncard__icon,\n.gvl-lessoncard--essay:hover .gvl-lessoncard__icon { background-color: var(--gvl-kind-quiz); color: #fff; }\n.gvl-lessoncard--quiz .gvl-lessoncard__label,\n.gvl-lessoncard--essay .gvl-lessoncard__label { color: var(--gvl-kind-quiz); }\n\n.gvl-lessoncard--reading .gvl-lessoncard__media,\n.gvl-lessoncard--document .gvl-lessoncard__media { background-color: var(--gvl-kind-reading-wash); }\n.gvl-lessoncard--reading .gvl-lessoncard__icon,\n.gvl-lessoncard--document .gvl-lessoncard__icon  { color: var(--gvl-kind-reading); }\n.gvl-lessoncard--reading:hover .gvl-lessoncard__icon,\n.gvl-lessoncard--document:hover .gvl-lessoncard__icon { background-color: var(--gvl-kind-reading); color: #fff; }\n.gvl-lessoncard--reading .gvl-lessoncard__label,\n.gvl-lessoncard--document .gvl-lessoncard__label { color: var(--gvl-kind-reading); }\n\n/* Completion tick, set by the runtime from progress state. */\n.gvl-lessoncard__done {\n    position: absolute;\n    top: 12px;\n    right: 12px;\n    z-index: 2;\n    width: 26px;\n    height: 26px;\n    border-radius: 50%;\n    background-color: var(--gvl-accent);\n    color: #fff;\n    display: none;\n    align-items: center;\n    justify-content: center;\n}\n\n.gvl-lessoncard.is-complete .gvl-lessoncard__done {\n    display: flex;\n}\n\n.gvl-empty {\n    font-size: 15px;\n    color: var(--gvl-muted);\n    padding: 40px 0;\n    margin: 0;\n}\n\n\n/* ── Player modal ───────────────────────────────────────────────────────── */\n.gvl-player-backdrop {\n    position: fixed;\n    inset: 0;\n    z-index: 10000;\n    background-color: rgba(15, 20, 32, .72);\n    backdrop-filter: blur(3px);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 32px;\n}\n\n.gvl-player-backdrop[hidden] {\n    display: none;\n}\n\n.gvl-player {\n    width: 100%;\n    max-width: 1100px;\n    max-height: 100%;\n    display: flex;\n    flex-direction: column;\n    background-color: var(--gvl-surface);\n    border-radius: var(--gvl-radius-lg);\n    box-shadow: var(--gvl-shadow-modal);\n    overflow: hidden;\n}\n\n.gvl-player__head {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    padding: 18px 22px;\n    border-bottom: 1px solid var(--gvl-line);\n    flex: 0 0 auto;\n}\n\n.gvl-player__title {\n    font-family: var(--gvl-font);\n    flex: 1 1 auto;\n    min-width: 0;\n    font-size: 17px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.3;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.gvl-player__step {\n    flex: 0 0 auto;\n    font-size: 12px;\n    font-weight: 500;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n.gvl-player__close {\n    flex: 0 0 auto;\n    width: 36px;\n    height: 36px;\n    border: 0;\n    border-radius: 50%;\n    background-color: var(--gvl-line);\n    color: var(--gvl-text);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition: background-color .18s ease, color .18s ease;\n}\n\n.gvl-player__close:hover {\n    background-color: var(--gvl-primary);\n    color: #fff;\n}\n\n.gvl-player__stage {\n    flex: 1 1 auto;\n    overflow-y: auto;\n    padding: 26px;\n}\n\n/* The three stage layouts the runtime picks between. */\n.gvl-stage--video-only .gvl-stage__video {\n    width: 100%;\n}\n\n.gvl-stage--split {\n    display: grid;\n    grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);\n    gap: 28px;\n    align-items: start;\n}\n\n.gvl-stage__video {\n    position: relative;\n    aspect-ratio: 16 / 9;\n    background-color: #000;\n    border-radius: var(--gvl-radius);\n    overflow: hidden;\n}\n\n.gvl-stage__video iframe,\n.gvl-stage__video video {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n}\n\n.gvl-stage__thumb {\n    width: 100%;\n    border-radius: var(--gvl-radius);\n    display: block;\n}\n\n.gvl-stage__text {\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--gvl-text);\n}\n\n.gvl-stage__text > :first-child { margin-top: 0; }\n.gvl-stage__text > :last-child  { margin-bottom: 0; }\n\n/* The template resets list markers globally; restore them inside lesson copy. */\n.gvl-stage__text ul,\n.gvl-stage__text ol {\n    padding-left: 1.3em;\n    margin: 0 0 1em;\n}\n\n.gvl-stage__text ul { list-style: disc; }\n.gvl-stage__text ol { list-style: decimal; }\n\n.gvl-stage__text li {\n    margin-bottom: .4em;\n}\n\n.gvl-stage__text h1,\n.gvl-stage__text h2,\n.gvl-stage__text h3,\n.gvl-stage__text h4 {\n    color: var(--gvl-title);\n    font-weight: 600;\n}\n\n/* \"You're up to date\" — the player's third state, beside finished and stuck.\n * Centred in the stage where the lesson would have been, so it reads as an\n * answer rather than as an error. */\n.gvl-caught {\n    text-align: center;\n    padding: 56px 24px;\n    max-width: 44ch;\n    margin: 0 auto;\n}\n\n.gvl-caught__mark {\n    font-size: 26px;\n    color: var(--gvl-enroll, #2e7d32);\n    margin: 0 0 12px;\n}\n\n.gvl-caught__h {\n    font-size: 19px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    margin: 0 0 8px;\n    line-height: 1.3;\n}\n\n.gvl-caught__p {\n    font-size: 14px;\n    line-height: 1.6;\n    color: var(--gvl-muted);\n    margin: 0;\n}\n\n.gvl-stage__loading {\n    padding: 60px 0;\n    text-align: center;\n    color: var(--gvl-muted);\n    font-size: 14px;\n}\n\n/* Reflection / response box. */\n\n\n\n\n\n.gvl-player__explore {\n    padding: 0 26px 20px;\n    flex: 0 0 auto;\n}\n\n.gvl-player__explore[hidden] {\n    display: none;\n}\n\n.gvl-player__explore-title {\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin: 0 0 10px;\n}\n\n.gvl-player__explore a {\n    display: inline-block;\n    font-size: 13px;\n    color: var(--gvl-primary);\n    background-color: var(--gvl-primary-wash);\n    padding: 7px 14px;\n    border-radius: 100px;\n    margin: 0 8px 8px 0;\n}\n\n.gvl-player__foot {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    padding: 16px 22px;\n    border-top: 1px solid var(--gvl-line);\n    background-color: var(--gvl-surface-sunk);\n    flex: 0 0 auto;\n}\n\n\n/* ── Responsive ─────────────────────────────────────────────────────────── */\n@media (max-width: 1200px) {\n    .gvl-stage--split {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 991px) {\n    .gvl-topbar-title {\n        display: none;\n    }\n\n    .gvl-player-backdrop {\n        padding: 0;\n    }\n\n    .gvl-player {\n        max-width: none;\n        height: 100%;\n        max-height: none;\n        border-radius: 0;\n    }\n\n    /* On mobile the rail is the off-canvas drawer; let it scroll as one column. */\n    .gvl-progress {\n        margin-top: 24px;\n    }\n}\n\n@media (max-width: 575px) {\n    .gvl-lessongrid {\n        grid-template-columns: 1fr;\n        gap: 18px;\n    }\n}\n\n\n/* ── Quiz ───────────────────────────────────────────────────────────────── */\n\n\n\n\n\n\n\n\n\n/* Verdict. Never colour alone: the mark carries the meaning for anyone who\n   cannot distinguish the two hues. */\n\n\n\n\n\n\n\n/* ── Essay / response extras ────────────────────────────────────────────── */\n\n\n\n\n/* ── Document ───────────────────────────────────────────────────────────── */\n.gvl-doc {\n    display: flex;\n    flex-direction: column;\n    gap: 18px;\n}\n\n.gvl-doc__frame {\n    width: 100%;\n    height: min(70vh, 760px);\n    border: 1px solid var(--gvl-line-strong);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n}\n\n.gvl-doc__download {\n    align-self: flex-start;\n}\n\n\n/* ── Admin bar ──────────────────────────────────────────────────────────────\n * WordPress offsets the document for its own fixed bar, but the modal is\n * position:fixed and still starts at viewport 0, sliding underneath it. */\n.admin-bar .gvl-player-backdrop {\n    top: 32px;\n}\n\n@media screen and (max-width: 782px) {\n    .admin-bar .gvl-player-backdrop {\n        top: 46px;\n    }\n}\n\n\n/* ── Course page ────────────────────────────────────────────────────────────\n * The eDocs `article.html` shape: a coloured page header, a main column and a\n * sticky sidebar. */\n.gvl-pagehead {\n    padding: 54px 0 46px;\n    background-color: var(--gvl-primary);\n    color: #fff;\n}\n\n.gvl-pagehead__title {\n    font-family: var(--gvl-font);\n    font-size: clamp(26px, 4vw, 38px);\n    font-weight: 600;\n    line-height: 1.2;\n    color: #fff;\n    margin: 0 0 12px;\n}\n\n.gvl-crumbs {\n    font-size: 13px;\n    color: rgba(255, 255, 255, .78);\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n}\n\n.gvl-crumbs a {\n    color: rgba(255, 255, 255, .9);\n    text-decoration: none;\n}\n\n.gvl-crumbs a:hover {\n    color: #fff;\n    text-decoration: underline;\n}\n\n.gvl-coursepage {\n    padding: 48px 0 80px;\n    background-color: var(--gvl-surface-sunk);\n}\n\n/* Padding matched to .gvl-sidecol__block deliberately.\n *\n * The two cards' borders already lined up, but the vendored .promo-box carries\n * 2.5rem of padding against the sidebar's 22px — so the first line of text in\n * each sat 23px apart, and the pair read as misaligned even though the boxes\n * were not. Aligning the boxes is not the same as aligning what you can see. */\n.gvl-coursepage__intro {\n    padding: 22px 28px;\n    /* The sidebar cards are bordered; without a matching border this one's\n       content sat a pixel high, and the two read as different kinds of card. */\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    margin-bottom: 30px;\n    font-size: 15px;\n    line-height: 1.75;\n    color: var(--gvl-text);\n}\n\n.gvl-coursepage__intro-body > :first-child { margin-top: 0; }\n.gvl-coursepage__intro-body > :last-child  { margin-bottom: 0; }\n\n\n/* ── Syllabus accordion ─────────────────────────────────────────────────── */\n.gvl-syllabus__head {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 20px;\n    flex-wrap: wrap;\n    margin-bottom: 18px;\n}\n\n.gvl-syllabus__heading {\n    min-width: 0;\n}\n\n/* Progress and its Continue button, on the same row as the heading. */\n.gvl-syllabus__progress {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    flex: 0 1 auto;\n    min-width: 0;\n}\n\n.gvl-syllabus__progressbar {\n    min-width: 160px;\n    flex: 0 1 220px;\n}\n\n.gvl-syllabus__continue {\n    flex: 0 0 auto;\n    white-space: nowrap;\n    padding: 10px 22px !important;\n}\n\n.gvl-syllabus__title {\n    font-family: var(--gvl-font);\n    font-size: 22px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    margin: 0;\n}\n\n.gvl-syllabus__meta {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    margin: 4px 0 0;\n}\n\n/* The same totals, on the right of the header when nothing else claims that\n   side — so the row is balanced either way. */\n.gvl-syllabus__meta--right {\n    margin: 0;\n    flex: 0 0 auto;\n}\n\n.gvl-accordion__item {\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    margin-bottom: 14px;\n    overflow: hidden;\n}\n\n.gvl-accordion__heading {\n    margin: 0;\n}\n\n.gvl-accordion__button {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    width: 100%;\n    text-align: left;\n    background: none;\n    border: 0;\n    padding: 20px 22px;\n    font-family: var(--gvl-font);\n    cursor: pointer;\n    transition: background-color .18s ease;\n}\n\n.gvl-accordion__button:hover {\n    background-color: var(--gvl-surface-sunk);\n}\n\n.gvl-accordion__num {\n    flex: 0 0 30px;\n    height: 30px;\n    border-radius: 50%;\n    background-color: var(--gvl-primary-wash);\n    color: var(--gvl-primary);\n    font-size: 13px;\n    font-weight: 600;\n    line-height: 30px;\n    text-align: center;\n}\n\n.gvl-accordion__label {\n    flex: 1 1 auto;\n    min-width: 0;\n}\n\n.gvl-accordion__name {\n    display: block;\n    font-size: 16px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.35;\n}\n\n.gvl-accordion__count {\n    display: block;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin-top: 3px;\n}\n\n/* \"Opens in 5 days\" on a module heading. Beside the lesson count rather than\n * under it, because the two together are one line of fact about the module —\n * and it is set apart by weight rather than by colour so it reads as\n * information and not as a warning. */\n.gvl-accordion__when {\n    display: inline-block;\n    margin-top: 3px;\n    font-size: 12px;\n    font-weight: 600;\n    color: var(--gvl-muted);\n}\n\n.gvl-accordion__count + .gvl-accordion__when {\n    margin-left: 10px;\n    padding-left: 10px;\n    border-left: 1px solid var(--gvl-line);\n}\n\n.gvl-accordion__chevron {\n    flex: 0 0 auto;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    transition: transform .2s ease;\n}\n\n.gvl-accordion__button.collapsed .gvl-accordion__chevron {\n    transform: rotate(-90deg);\n}\n\n.gvl-accordion__body {\n    padding: 0 22px 18px;\n}\n\n.gvl-accordion__desc {\n    font-size: 14px;\n    line-height: 1.7;\n    color: var(--gvl-text);\n    margin: 0 0 16px;\n}\n\n.gvl-lessonlist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n/* Lessons with no module, sitting directly in Course Content — a single-video\n   course, or a standalone lesson.\n\n   Styled as a card so it reads as a peer of the modules around it rather than\n   as loose text that lost its container, and padded to the same 22px as\n   .gvl-accordion__body so a loose lesson's title lines up with the title of a\n   lesson inside a module. */\n.gvl-lessonlist--loose {\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    margin-bottom: 14px;\n    padding: 6px 22px;\n    overflow: hidden;\n}\n\n.gvl-lessonrow {\n    display: flex;\n    align-items: center;\n    gap: 14px;\n    width: 100%;\n    text-align: left;\n    background: none;\n    border: 0;\n    border-top: 1px solid var(--gvl-line);\n    padding: 14px 4px;\n    font-family: var(--gvl-font);\n    cursor: pointer;\n    transition: background-color .15s ease;\n}\n\n.gvl-lessonlist li:first-child .gvl-lessonrow {\n    border-top: 0;\n}\n\n.gvl-lessonrow:hover {\n    background-color: var(--gvl-primary-wash);\n}\n\n.gvl-lessonrow__icon {\n    flex: 0 0 34px;\n    height: 34px;\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-primary-wash);\n    color: var(--gvl-primary);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 13px;\n}\n\n.gvl-lessonrow--reflection .gvl-lessonrow__icon { background-color: var(--gvl-kind-reflect-wash); color: var(--gvl-kind-reflect); }\n.gvl-lessonrow--quiz .gvl-lessonrow__icon,\n.gvl-lessonrow--essay .gvl-lessonrow__icon      { background-color: var(--gvl-kind-quiz-wash);    color: var(--gvl-kind-quiz); }\n.gvl-lessonrow--reading .gvl-lessonrow__icon,\n.gvl-lessonrow--document .gvl-lessonrow__icon   { background-color: var(--gvl-kind-reading-wash); color: var(--gvl-kind-reading); }\n\n.gvl-lessonrow__text {\n    flex: 1 1 auto;\n    min-width: 0;\n}\n\n.gvl-lessonrow__title {\n    display: block;\n    font-size: 15px;\n    font-weight: 500;\n    color: var(--gvl-title);\n    line-height: 1.4;\n}\n\n.gvl-lessonrow__kind {\n    display: block;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin-top: 2px;\n}\n\n.gvl-lessonrow__done {\n    flex: 0 0 auto;\n    width: 22px;\n    height: 22px;\n    border-radius: 50%;\n    background-color: var(--gvl-accent);\n    color: #fff;\n    font-size: 10px;\n    display: none;\n    align-items: center;\n    justify-content: center;\n}\n\n.gvl-lessonrow.is-complete .gvl-lessonrow__done {\n    display: flex;\n}\n\n\n/* ── Course sidebar ─────────────────────────────────────────────────────────\n * Bootstrap's .sticky-top sets z-index:1020, which is above a themed sticky\n * header — so the sidebar scrolled OVER the header instead of beneath it.\n * Dropped to 1 so any chrome the theme layers above it wins, and the sticky\n * offset clears the bar rather than parking the panel behind it.\n *\n * --gvl-topbar-h is exactly the token for this: the plugin does not know how\n * tall a given skin's header is, but the skin declares it. */\n.gvl-sidecol {\n    top: calc(var(--gvl-topbar-h) + 24px);\n    z-index: 1;\n    /* No margin or padding of its own: the first panel has to line up with the\n       top of the course description card in the column beside it. */\n    margin: 0;\n    padding: 0;\n}\n\n/* WordPress's own bar pushes everything down again for signed-in staff. */\n.admin-bar .gvl-sidecol {\n    top: calc(var(--gvl-topbar-h) + 56px);\n}\n\n@media screen and (max-width: 782px) {\n    .admin-bar .gvl-sidecol {\n        top: calc(var(--gvl-topbar-h) + 70px);\n    }\n}\n\n.gvl-sidecol__block {\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    padding: 22px;\n    margin-bottom: 18px;\n}\n\n/* The small-caps card heading. Shared by the sidebar cards and the course\n * description, so the two columns start with the same thing on the same line —\n * which is what makes them line up structurally rather than by matched\n * padding that a later edit could quietly break. */\n.gvl-cardtitle,\n.gvl-sidecol .widget-title {\n    font-family: var(--gvl-font);\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin: 0 0 14px;\n}\n\n.gvl-enrollbox__state {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 14px;\n    font-weight: 600;\n    color: var(--gvl-accent);\n    margin: 0 0 14px;\n}\n\n.gvl-enrollbox__state--muted {\n    color: var(--gvl-muted);\n    margin-bottom: 6px;\n}\n\n.gvl-enrollbox__hint,\n.gvl-enrollbox__message {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    margin: 0;\n}\n\n.gvl-enrollbox__message[hidden] {\n    display: none;\n}\n\n.gvl-sidefacts {\n    margin: 0;\n}\n\n.gvl-sidefacts__row {\n    padding: 10px 0;\n    border-top: 1px solid var(--gvl-line);\n}\n\n.gvl-sidefacts__row:first-child {\n    border-top: 0;\n    padding-top: 0;\n}\n\n.gvl-sidefacts dt {\n    font-size: 10px;\n    font-weight: 600;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin: 0 0 3px;\n}\n\n.gvl-sidefacts dd {\n    font-size: 14px;\n    font-weight: 500;\n    color: var(--gvl-title);\n    margin: 0;\n}\n\n.gvl-instructors {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.gvl-instructors li {\n    display: flex;\n    align-items: center;\n    gap: 14px;\n    padding: 14px 0;\n    border-top: 1px solid var(--gvl-line);\n}\n\n.gvl-instructors li:first-child {\n    border-top: 0;\n    padding-top: 0;\n}\n\n/* flex-basis alone did not hold the size — the vendored base's own img rules\n * win on `width`, so the avatar rendered at its intrinsic 96px. Explicit\n * dimensions, plus object-fit so a non-square photo crops rather than\n * distorts. */\n.gvl-instructors img {\n    flex: 0 0 auto;\n    width: 44px;\n    height: 44px;\n    object-fit: cover;\n    border-radius: 50%;\n}\n\n.gvl-instructors__name {\n    display: block;\n    font-size: 14px;\n    font-weight: 600;\n    color: var(--gvl-title);\n}\n\n/* The role under the name, since the panel holds instructors and assistants\n * both. Smaller and quieter than the name, louder than the bio: it is a label,\n * not a sentence. */\n.gvl-instructors__role {\n    display: block;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin-top: 2px;\n}\n\n.gvl-instructors__bio {\n    display: block;\n    font-size: 12px;\n    line-height: 1.55;\n    color: var(--gvl-muted);\n    margin-top: 3px;\n}\n\n/* ── The release schedule, in course settings ────────────────────────────\n *\n * The whole schedule as one list, because a sequence has to be edited as one:\n * a twelve-module course set through twelve modals is a drip whose shape its\n * author has never seen. */\n.gvl-release {\n    margin-top: 18px;\n}\n\n.gvl-release__grid {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 14px;\n}\n\n.gvl-release__grid th {\n    text-align: left;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .06em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    padding: 0 10px 8px 0;\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n.gvl-release__grid td {\n    padding: 9px 10px 9px 0;\n    border-bottom: 1px solid var(--gvl-line);\n    vertical-align: middle;\n}\n\n.gvl-release__grid tr:last-child td {\n    border-bottom: 0;\n}\n\n.gvl-release__name {\n    display: block;\n    font-weight: 500;\n    color: var(--gvl-title);\n}\n\n.gvl-release__sub {\n    display: block;\n    font-size: 12px;\n    color: var(--gvl-muted);\n}\n\n.gvl-release__field {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n}\n\n/* Width by content, not by the grid: a date input and a two-digit number have\n * no business being the same size, and `width: 100%` from the form base made\n * both of them span the column. */\n.gvl-release__num {\n    width: 5.5em;\n    display: inline-block;\n}\n\n.gvl-release__date {\n    width: auto;\n    display: inline-block;\n}\n\n.gvl-release__unit {\n    font-size: 12.5px;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n/* The computed column. Tabular figures so a run of dates lines up, and the two\n * states that are not simply a date are coloured — \"open already\" reads as\n * fine, \"before the module above it\" as something to look at. */\n.gvl-release__when {\n    font-size: 12.5px;\n    color: var(--gvl-muted);\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n}\n\n.gvl-release__when.is-now {\n    color: var(--gvl-enroll, #2e7d32);\n}\n\n.gvl-release__when.is-warning {\n    color: #a5620b;\n    font-weight: 600;\n}\n\n.gvl-release__tools {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 9px;\n    margin-top: 14px;\n    padding-top: 13px;\n    border-top: 1px dashed var(--gvl-line);\n    font-size: 13px;\n}\n\n.gvl-release__tools > span {\n    display: inline-flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 9px;\n}\n\n.gvl-release__tools label {\n    margin: 0;\n    font-size: 13px;\n    color: var(--gvl-muted);\n}\n\n/* ── The preview ─────────────────────────────────────────────────────────\n * Staff see every lesson, so this is the only way an author can look at their\n * own drip. Set apart from the table above it, because it is an answer rather\n * than a field. */\n.gvl-release__preview {\n    margin-top: 16px;\n    padding: 14px;\n    border: 1px dashed var(--gvl-line);\n    border-radius: 6px;\n    background: rgba(0, 0, 0, .015);\n}\n\n.gvl-release__scrub {\n    display: flex;\n    align-items: center;\n    gap: 11px;\n    flex-wrap: wrap;\n}\n\n.gvl-release__scrub label {\n    margin: 0;\n    font-size: 13px;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n.gvl-release__range {\n    flex: 1 1 160px;\n    min-width: 120px;\n    accent-color: var(--gvl-primary, #1d5a9c);\n}\n\n.gvl-release__read {\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n}\n\n.gvl-release__preview-list {\n    list-style: none;\n    margin: 12px 0 0;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 1px;\n}\n\n.gvl-release__preview-row {\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    padding: 7px 9px;\n    border-radius: 4px;\n    font-size: 13.5px;\n    background: var(--gvl-card, #fff);\n}\n\n.gvl-release__preview-row i {\n    font-size: 11px;\n    color: var(--gvl-enroll, #2e7d32);\n    width: 13px;\n    text-align: center;\n}\n\n.gvl-release__preview-row.is-shut {\n    color: var(--gvl-muted);\n    background: transparent;\n}\n\n.gvl-release__preview-row.is-shut i {\n    color: var(--gvl-muted);\n    opacity: .7;\n}\n\n.gvl-release__preview-state {\n    margin-left: auto;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n}\n\n/* The table scrolls rather than the modal, on a narrow screen. */\n@media (max-width: 575px) {\n    .gvl-release {\n        overflow-x: auto;\n    }\n\n    .gvl-release__grid {\n        min-width: 420px;\n    }\n}\n\n.gvl-manage {\n    border-style: dashed;\n}\n\n.gvl-manage__list {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.gvl-manage__list li {\n    margin-bottom: 10px;\n}\n\n.gvl-manage__list li:last-child {\n    margin-bottom: 0;\n}\n\n.gvl-manage__list a {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    font-size: 14px;\n    color: var(--gvl-text);\n    text-decoration: none;\n}\n\n.gvl-manage__list a:hover {\n    color: var(--gvl-primary);\n}\n\n.gvl-manage__list i {\n    flex: 0 0 16px;\n    font-size: 12px;\n    color: var(--gvl-muted);\n}\n\n@media (max-width: 991px) {\n    .gvl-sidecol {\n        position: static;\n        margin-top: 30px;\n    }\n}\n\n\n/* ── Enroll, on the Enrollment row ──────────────────────────────────────────\n * The action sits with the fact it acts on, rather than in a card of its own\n * repeating what the fact already says. */\n.gvl-sidefacts__row--action {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n}\n\n/* Green regardless of the skin's primary: this is a go action, and the one\n   thing on the page a visitor is meant to press. Kept as its own token so a\n   skin can still recolour it deliberately. */\n.gvl-enrollbtn,\n.gvl-enrollbtn:focus {\n    flex: 0 0 auto;\n    background-color: var(--gvl-enroll, #1f9254) !important;\n    border-color: var(--gvl-enroll, #1f9254) !important;\n    color: #fff !important;\n    font-weight: 600;\n    padding: 7px 18px !important;\n    white-space: nowrap;\n    text-decoration: none;\n}\n\n.gvl-enrollbtn:hover,\n.gvl-enrollbtn:active {\n    background-color: var(--gvl-enroll-dark, #17703f) !important;\n    border-color: var(--gvl-enroll-dark, #17703f) !important;\n    color: #fff !important;\n}\n\n.gvl-checkoutpanel {\n    margin-top: 18px;\n    padding-top: 18px;\n    border-top: 1px solid var(--gvl-line);\n}\n\n.gvl-checkoutpanel[hidden] {\n    display: none;\n}\n\n\n/* ── Join-a-course modal ────────────────────────────────────────────────── */\n\n/* Deliberately NOT setting a border. It used to say `border: 0` to drop\n   Bootstrap's default, which was written when a border was something to remove.\n   The theme now gives every .modal-content a visible edge — its backdrop is\n   white, so a card with no edge has nothing to separate it from the page — and\n   this rule was quietly opting one modal out of that at a higher specificity. */\n.gvl-authmodal .modal-content {\n    border-radius: var(--gvl-radius-lg);\n}\n\n/* The vendored base sets .modal-header to display:block with 2.5rem padding,\n   which drops the close button below the title. */\n.gvl-authmodal .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    padding: 22px 24px 16px;\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n.gvl-authmodal .modal-title {\n    font-family: var(--gvl-font);\n    font-size: 18px;\n    font-weight: 600;\n    color: var(--gvl-title);\n}\n\n.gvl-authmodal .modal-body {\n    padding: 22px 24px 26px;\n}\n\n.gvl-authpane[hidden] {\n    display: none;\n}\n\n.gvl-field {\n    margin-bottom: 16px;\n}\n\n.gvl-field--pair {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 12px;\n}\n\n.gvl-field label {\n    display: block;\n    font-size: 12px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    margin-bottom: 5px;\n}\n\n.gvl-field input {\n    width: 100%;\n    height: 44px;\n    padding: 0 14px;\n    font-family: var(--gvl-font);\n    font-size: 15px;\n    color: var(--gvl-text);\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line-strong);\n    border-radius: var(--gvl-radius);\n}\n\n.gvl-field input:focus {\n    outline: none;\n    border-color: var(--gvl-primary-light);\n    box-shadow: 0 0 0 3px var(--gvl-primary-wash);\n}\n\n/* Filled from the account and not editable. Greyed rather than hidden: the\n   point is to show WHICH account is being bought for, which a hidden field\n   cannot do. */\n.gvl-field input.is-locked,\n.gvl-field input:disabled {\n    color: var(--gvl-muted);\n    background-color: var(--gvl-surface-sunk);\n    cursor: not-allowed;\n}\n\n.gvl-field__hint {\n    display: block;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin-top: 5px;\n}\n\n/* ── Checkout ────────────────────────────────────────────────────────────────\n   gvl-platform draws the payment form into the join modal, using the same\n   .gvl-field as the panes around it so the card does not arrive looking like a\n   form from somewhere else. These are the parts .gvl-field cannot cover: the\n   card lives inside Stripe's iframe, which cannot be styled from here — only\n   the box around it can, and it has to match an input exactly. */\n.gvl-checkout__card {\n    height: 44px;\n    padding: 13px 14px 0;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line-strong);\n    border-radius: var(--gvl-radius);\n}\n\n/* Stripe adds this class to the host when the field inside has focus; without\n   it the card is the one control on the form that never lights up. */\n.gvl-checkout__card.StripeElement--focus {\n    border-color: var(--gvl-primary-light);\n    box-shadow: 0 0 0 3px var(--gvl-primary-wash);\n}\n\n.gvl-checkout__card.StripeElement--invalid {\n    border-color: #c0392b;\n}\n\n.gvl-checkout__pay {\n    width: 100%;\n    margin-top: 4px;\n    padding: 12px !important;\n}\n\n/* Something that needs doing, at the top of the Billing panel. Red because it\n   is money that was taken and not delivered, which is the one thing on this\n   screen worth interrupting somebody for. */\n.gvl-billing__alert {\n    margin: 0 0 1.5rem;\n    padding: 1rem 1.125rem;\n    border: 1px solid #f0b4b4;\n    border-left-width: 4px;\n    border-radius: var(--gvl-radius, 6px);\n    background: #fdf3f3;\n}\n\n.gvl-billing__alert strong {\n    display: block;\n    margin-bottom: .25rem;\n    color: #8a1f1f;\n}\n\n.gvl-billing__alert p {\n    margin: 0;\n    font-size: .875rem;\n    line-height: 1.5;\n    color: var(--gvl-ink, #1d2b36);\n}\n\n/* ── Waiting for the webhook ─────────────────────────────────────────────────\n   Between Stripe confirming the card and our side hearing about it. Usually\n   under a second, occasionally longer, and the one thing it must not look like\n   is a page that has stopped. */\n\n.gvl-checkout__waiting {\n    display: flex;\n    align-items: center;\n    gap: .875rem;\n    padding: 1.25rem 0;\n}\n\n.gvl-checkout__spinner {\n    flex: 0 0 auto;\n    width: 22px;\n    height: 22px;\n    border: 2px solid var(--gvl-rule, #e7ecf1);\n    /* One arc in the brand colour is what makes it read as turning. */\n    border-top-color: var(--gvl-primary, #0b50d8);\n    border-radius: 50%;\n    animation: gvl-spin .7s linear infinite;\n}\n\n.gvl-checkout__waitingtext {\n    margin: 0;\n    font-size: .9375rem;\n    line-height: 1.5;\n    color: var(--gvl-ink, #1d2b36);\n}\n\n@keyframes gvl-spin {\n    to { transform: rotate(360deg); }\n}\n\n/* A spinner is motion with no information in it, so somebody who has asked for\n   less of that loses nothing by it stopping. The text already says what is\n   happening — which is why the message is never carried by the animation. */\n@media (prefers-reduced-motion: reduce) {\n    .gvl-checkout__spinner { animation: none; }\n}\n\n.gvl-checkout__status {\n    margin: 12px 0 0;\n    font-size: 14px;\n    color: var(--gvl-muted);\n}\n\n.gvl-checkout__status.is-error {\n    color: #c0392b;\n}\n\n.gvl-authmodal__submit {\n    width: 100%;\n    margin-top: 4px;\n    padding: 12px !important;\n}\n\n.gvl-authmodal__switch {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    text-align: center;\n    margin: 14px 0 0;\n}\n\n/* A control that reads as a link but is a button, because it performs an\n   action on this page rather than navigating anywhere. */\n.gvl-linkbtn {\n    background: none;\n    border: 0;\n    padding: 0;\n    font: inherit;\n    color: var(--gvl-primary);\n    text-decoration: underline;\n    cursor: pointer;\n}\n\n.gvl-linkbtn:hover {\n    color: var(--gvl-primary-dark);\n}\n\n.gvl-authmodal__message {\n    font-size: 14px;\n    line-height: 1.55;\n    padding: 12px 14px;\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-primary-wash);\n    color: var(--gvl-primary-dark);\n    margin: 0 0 18px;\n}\n\n.gvl-authmodal__message.is-error {\n    background-color: #fdeeee;\n    color: #a3312d;\n}\n\n.gvl-authmodal__message[hidden] {\n    display: none;\n}\n\n.gvl-billing {\n    position: relative;\n    padding: 16px;\n    margin-bottom: 18px;\n    background-color: var(--gvl-surface-sunk);\n    border-radius: var(--gvl-radius);\n}\n\n/* Top right of the sunk panel, in its padding rather than in the first field's\n   line — the section it closes is the whole block, not the field beside it. */\n.gvl-billing__close {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    padding: 6px;\n    opacity: .45;\n}\n\n.gvl-billing__close:hover,\n.gvl-billing__close:focus {\n    opacity: .85;\n}\n\n/* The first row has to clear the button, or a two-up pair of labels runs\n   underneath it. */\n.gvl-billing > .gvl-field:first-of-type {\n    padding-right: 28px;\n}\n\n.gvl-billing[hidden] {\n    display: none;\n}\n\n@media (max-width: 480px) {\n    .gvl-field--pair {\n        grid-template-columns: 1fr;\n    }\n}\n\n\n/* ── Locked rows ────────────────────────────────────────────────────────────\n * The outline of a course you cannot open yet. Listed so you can see what it\n * covers, but not dressed as something clickable — no hover, no pointer, and a\n * lock where the completion tick would be. */\n.gvl-lessonrow--locked {\n    cursor: default;\n    background: none;\n}\n\n.gvl-lessonrow--locked:hover {\n    background: none;\n}\n\n.gvl-lessonrow--locked .gvl-lessonrow__title {\n    color: var(--gvl-text);\n    font-weight: 400;\n}\n\n.gvl-lessonrow--locked .gvl-lessonrow__icon {\n    opacity: .55;\n}\n\n.gvl-lessonrow__lock {\n    flex: 0 0 auto;\n    font-size: 11px;\n    color: var(--gvl-muted);\n    opacity: .6;\n}\n\n/* The padlock's replacement when there is something to say. Sized and spaced\n * like the Done tick it sits where, so a list of rows with mixed states keeps\n * one right-hand column rather than three ragged ones. */\n.gvl-lessonrow__when {\n    flex: 0 0 auto;\n    font-size: 11px;\n    font-weight: 600;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n@media (max-width: 767px) {\n    .gvl-syllabus__progress {\n        width: 100%;\n    }\n\n    .gvl-syllabus__progressbar {\n        flex: 1 1 auto;\n    }\n}\n\n\n/* ── /login/ page ───────────────────────────────────────────────────────── */\n.gvl-loginpage {\n    padding: 56px 24px 96px;\n    background-color: var(--gvl-surface-sunk);\n}\n\n.gvl-loginpage__card {\n    max-width: 420px;\n    margin: 0 auto;\n    padding: 30px;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    box-shadow: var(--gvl-shadow);\n}\n\n/* The one line that says why a password form is on screen at all. */\n.gvl-authmodal__support {\n    color: var(--gvl-muted);\n    text-align: left;\n    margin: 0 0 16px;\n}\n\n\n/* \"Course full\" where the Enroll button would otherwise sit. */\n.gvl-sidefacts__note {\n    align-self: center;\n    font-size: .8125rem;\n    font-weight: 600;\n    color: var(--gvl-muted, #6c757d);\n    white-space: nowrap;\n}\n\n\n/* ── Front-end management forms ──────────────────────────────────────────────\n   Tokens only, no hard-coded brand colours, so a skin restyles these the same\n   way it restyles everything else. */\n.gvl-form__row { margin-bottom: 1.75rem; }\n\n/* The split row nests its labels one level deeper, so a direct-child selector\n   missed them and the date fields were styled by the browser default while\n   every other label was not. */\n.gvl-form__row > label,\n.gvl-form__row--split > div > label {\n    display: block;\n    margin-bottom: .35rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-form__row--split {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1rem;\n}\n\n@media (max-width: 575.98px) {\n    .gvl-form__row--split { grid-template-columns: 1fr; }\n}\n\n/* ── A \"?\" beside a label ────────────────────────────────────────────────────\n   Shares the popover mechanism with the learner's \"waiting to be graded\" note;\n   only the trigger differs. Small and quiet: it is there for the person who\n   wonders, and invisible to everybody else. */\n/* The label and its \"?\" on one line. The label keeps its own bottom margin, so\n   the row carries it instead. */\n.gvl-form__labelrow {\n    display: flex;\n    align-items: center;\n    gap: .125rem;\n    margin-bottom: .35rem;\n}\n\n.gvl-form__labelrow > label { margin-bottom: 0; }\n\n.gvl-help {\n    position: relative;\n    display: inline-block;\n    margin-left: .375rem;\n    vertical-align: middle;\n}\n\n.gvl-help__trigger {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 1.125rem;\n    height: 1.125rem;\n    padding: 0;\n    font-size: .6875rem;\n    font-weight: 700;\n    line-height: 1;\n    color: var(--gvl-muted, #5c6b7a);\n    background: var(--gvl-tint, #eef4f8);\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: 50%;\n    cursor: pointer;\n}\n\n.gvl-help__trigger:hover,\n.gvl-help__trigger:focus-visible,\n.gvl-help[data-gvl-note].is-open .gvl-help__trigger {\n    color: #fff;\n    background: var(--gvl-primary, #0b50d8);\n    border-color: var(--gvl-primary, #0b50d8);\n}\n\n/* Normal weight — the label it sits beside is bold, and the explanation is not. */\n.gvl-help__note { font-weight: 400; }\n\n/* An explanation with more than one case in it needs those cases separated. */\n.gvl-help__note p { margin: 0 0 .75rem; }\n.gvl-help__note p:last-child { margin-bottom: 0; }\n\n.gvl-help__heading {\n    margin: 1rem 0 .25rem;\n    font-size: .8125rem;\n    font-weight: 700;\n}\n\n.gvl-help__heading:first-child { margin-top: 0; }\n\n/* The one actionable thing in the popover, so it looks like one. */\n.gvl-help__note a {\n    color: var(--gvl-primary, #0b50d8);\n    text-decoration: underline;\n}\n\n/* Wider than the learner's one-line note: this one carries two sections. */\n.gvl-help .gvl-help__note { max-width: 22rem; }\n\n.gvl-form__hint {\n    display: block;\n    margin-top: .35rem;\n    font-size: .8125rem;\n    line-height: 1.45;\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-form__check {\n    display: flex;\n    align-items: flex-start;\n    gap: .5rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    cursor: pointer;\n}\n\n.gvl-form__check input { margin-top: .2rem; }\n\n.gvl-form__message {\n    margin: 1rem 0 0;\n    padding: .6rem .8rem;\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n    color: var(--gvl-heading, #1f2d3d);\n    font-size: .875rem;\n}\n\n.gvl-form__message.is-error {\n    background: var(--gvl-danger-tint, #fdecea);\n    color: var(--gvl-danger, #a4292c);\n}\n\n\n/* ── A course that is one video ──────────────────────────────────────────────\n   A poster that opens the full-width player, rather than an inline embed. */\n\n\n/* ── Management modal chrome ─────────────────────────────────────────────────\n   The vendored eDocs stylesheet sets .modal-header and .modal-footer to\n   display:block, which drops Bootstrap's flex layout. Two things broke: the\n   close button stopped being pushed to the right and sat under the title, and\n   the footer stopped being held out of the scrolling area — with\n   .modal-content overflow:hidden it was simply clipped, so on a 900px-tall\n   screen the Save button was rendered at y=1112 and never seen.\n\n   Scoped to this modal rather than fixed globally: the template's own modals\n   are built for that stylesheet, and re-flexing all of them to suit ours is how\n   a vendored theme starts fighting back. */\n#gvl-course-edit .modal-content,\n#gvl-add-module .modal-content,\n#gvl-add-lesson .modal-content,\n#gvl-enrollment .modal-content {\n    max-height: calc(100vh - 3.5rem);\n}\n\n/* The form wraps the header, :host and footer so everything posts together —\n   which makes IT .modal-content's only flex child, and leaves the three of them\n   with no flex context to size in. Bootstrap's scrollable modal assumes those\n   are direct children of .modal-content. Making the form the column flex\n   container puts that back: without this the body never shrinks, and the footer\n   is pushed past the clipped edge of the dialog. */\n#gvl-course-edit .modal-content > form {\n    display: flex;\n    flex-direction: column;\n    flex: 1 1 auto;\n    min-height: 0;\n}\n\n#gvl-course-edit .modal-header,\n#gvl-add-module .modal-header,\n#gvl-add-lesson .modal-header,\n#gvl-enrollment .modal-header,\n#gvl-grade .modal-header,\n#gvl-gradebook .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1rem;\n    flex-shrink: 0;\n    padding: 1.75rem 2rem 1.25rem;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n#gvl-course-edit .modal-header .btn-close,\n#gvl-add-module .modal-header .btn-close,\n#gvl-add-lesson .modal-header .btn-close,\n#gvl-enrollment .modal-header .btn-close,\n#gvl-grade .modal-header .btn-close,\n#gvl-gradebook .modal-header .btn-close {\n    display: block;\n    flex: 0 0 auto;\n    margin: 0;\n    opacity: .6;\n}\n\n#gvl-course-edit .modal-header .btn-close:hover,\n#gvl-add-module .modal-header .btn-close:hover,\n#gvl-add-lesson .modal-header .btn-close:hover,\n#gvl-enrollment .modal-header .btn-close:hover,\n#gvl-grade .modal-header .btn-close:hover,\n#gvl-gradebook .modal-header .btn-close:hover { opacity: 1; }\n\n/* min-height:0 is what actually lets a flex child scroll — without it the body\n   refuses to shrink below its content and pushes the footer out. */\n#gvl-course-edit .modal-body,\n#gvl-add-module .modal-body,\n#gvl-add-lesson .modal-body,\n#gvl-enrollment .modal-body,\n#gvl-grade .modal-body,\n#gvl-gradebook .modal-body {\n    flex: 1 1 auto;\n    min-height: 0;\n    overflow-y: auto;\n    padding: 1.75rem 2rem;\n}\n\n#gvl-course-edit .modal-footer,\n#gvl-add-module .modal-footer,\n#gvl-add-lesson .modal-footer,\n#gvl-enrollment .modal-footer,\n#gvl-grade .modal-footer,\n#gvl-gradebook .modal-footer {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: flex-end;\n    gap: .6rem;\n    flex-shrink: 0;\n    padding: 1.25rem 2rem 1.5rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n/* Delete sits apart from Cancel/Save so it is not fumbled for one of them. */\n#gvl-course-edit .modal-footer [data-gvl-course-delete] { margin-right: auto; }\n\n/* ── Modal footers on a phone ───────────────────────────────────────────────\n *\n * .btn is 9.25rem wide before it contains any text and carries 2.5rem of\n * padding either side — deliberate, and the right call on a desktop. On a\n * 412px phone the Site Admin footer's two buttons needed 364px of a 330px row,\n * so they wrapped onto separate lines and the footer grew to 183px: a third of\n * the screen spent on two buttons, which is what they looked like.\n *\n * Dividing the row between them is narrower AND the ordinary phone treatment,\n * so it reads as intended rather than as a squeeze. */\n@media (max-width: 575px) {\n\n    .modal-footer .btn {\n        flex: 1 1 0;\n        min-width: 0;\n        padding-left: .875rem;\n        padding-right: .875rem;\n    }\n\n    /* A destructive action keeps its distance by taking a row of its own.\n     * Sharing one with Cancel and Save would put Delete a thumb's width from\n     * Save on the smallest screen — margin-right:auto buys no separation once\n     * everything is stretching to fill the line. */\n    #gvl-course-edit .modal-footer [data-gvl-course-delete] {\n        flex: 1 0 100%;\n        margin-right: 0;\n        margin-bottom: .25rem;\n    }\n}\n\n/* A breathing gap between \"what the course is\" and \"how people get onto it\". */\n.gvl-form__section {\n    margin-top: 2.5rem;\n    padding-top: 2rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n/* The same gap without the rule. Space alone separates these groups; a line as\n   well made the form read as more divided than it is. */\n.gvl-form__section--plain {\n    padding-top: 0;\n    border-top: 0;\n}\n\n/* Settings need more room between them than the fields inside one setting do.\n   Each of these carries a control plus the sentence explaining it, and at the\n   old spacing a hint sat nearer the NEXT label than its own control. */\n#gvl-course-edit .gvl-form__row { margin-bottom: 2.5rem; }\n\n.gvl-form__row:last-child { margin-bottom: 0; }\n\n/* ── Management modals: the register ─────────────────────────────────────── */\n.gvl-addmember { margin-bottom: 1.75rem; }\n\n.gvl-addmember__fields {\n    display: grid;\n    grid-template-columns: 1fr auto auto;\n    gap: .75rem;\n    align-items: stretch;\n}\n\n@media (max-width: 575.98px) {\n    .gvl-addmember__fields { grid-template-columns: 1fr; }\n}\n\n/* The search field, its results panel and the role button are one row of equal\n   height. The panel is positioned, not in flow, so opening it does not shove\n   the button and the list below it down the modal. */\n.gvl-addmember__search { position: relative; min-width: 0; }\n\n\n/* The field wrapper exists only so the \"Add New User\" link can be placed\n   inside the input. It is the flex child now, so it carries the growth and the\n   input fills it — otherwise the input loses its matched height. */\n.gvl-addmember__field { position: relative; display: flex; flex: 1 1 auto; }\n.gvl-addmember__field .form-control { width: 100%; }\n\n.gvl-addmember__new {\n    position: absolute;\n    right: .5rem;\n    top: 50%;\n    transform: translateY(-50%);\n    padding: .15rem .3rem;\n    border: 0;\n    border-radius: 4px;\n    background: transparent;\n    font-size: .8125rem;\n    font-weight: 600;\n    line-height: 1.2;\n    white-space: nowrap;\n    color: var(--gvl-accent, #3399cc);\n    cursor: pointer;\n}\n\n.gvl-addmember__new:hover { text-decoration: underline; }\n\n/* Room for the link. JS replaces this with the measured width once the modal is\n   open, because the label is translated and \"Add New User\" is not its longest\n   rendering; this value only has to be close enough before that runs. */\n.gvl-addmember__field:not(.is-bare) .form-control { padding-right: 7rem; }\n\n/* Somebody already uses the address typed into the new-person form. */\n.gvl-people__dupe {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: .25rem .5rem;\n    margin: .5rem 0 0;\n    font-size: .875rem;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-people__dupe-add {\n    padding: 0;\n    border: 0;\n    background: transparent;\n    font-size: inherit;\n    font-weight: 600;\n    color: var(--gvl-accent, #3399cc);\n    text-decoration: underline;\n    cursor: pointer;\n}\n\n.gvl-addmember__search .form-control.is-chosen {\n    font-weight: 600;\n    border-color: var(--gvl-accent, #3399cc);\n}\n\n/* All three controls are the same height, and that is arranged rather than\n   guessed at: every column is a flex column of label-then-control, the row\n   stretches, and the control takes whatever height is left. Pinning a height on\n   the buttons instead gave 44px against the input's 56px, because the theme\n   pads .btn-primary differently from .btn-outline-secondary. */\n.gvl-addmember__search,\n.gvl-addmember__role,\n.gvl-addmember__action { display: flex; flex-direction: column; }\n\n.gvl-addmember__search .form-control,\n.gvl-addmember__role .btn,\n.gvl-addmember__action .btn { flex: 1 1 auto; }\n\n.gvl-addmember__role .btn,\n.gvl-addmember__action .btn { white-space: nowrap; }\n\n/* The action column has no label of its own; an empty one keeps its control on\n   the same line as the other two. */\n.gvl-addmember__action .gvl-addmember__spacer { visibility: hidden; }\n\n.gvl-addmember__role .dropdown-menu { min-width: 100%; }\n\n.gvl-addmember__panel {\n    position: absolute;\n    z-index: 20;\n    top: calc(100% + .25rem);\n    left: 0;\n    right: 0;\n    max-height: 19rem;\n    overflow-y: auto;\n    padding: .35rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-card, #fff);\n    box-shadow: 0 10px 28px rgba(0, 0, 0, .14);\n}\n\n.gvl-people { list-style: none; margin: 0; padding: 0; }\n\n.gvl-people__row {\n    display: flex;\n    align-items: center;\n    gap: .75rem;\n    width: 100%;\n    padding: .5rem .6rem;\n    border: 0;\n    border-radius: 4px;\n    background: transparent;\n    text-align: left;\n    cursor: pointer;\n}\n\n.gvl-people__row:hover:not(:disabled),\n.gvl-people__row:focus-visible { background: var(--gvl-tint, #eef4f8); }\n\n.gvl-people__row:disabled { cursor: default; opacity: .6; }\n.gvl-people__who { flex: 1 1 auto; min-width: 0; }\n\n.gvl-people__already {\n    flex: 0 0 auto;\n    font-size: .75rem;\n    color: var(--gvl-muted, #6c757d);\n    white-space: nowrap;\n}\n\n/* The \"nobody matched\" form, inside the same panel so the answer to a failed\n   search is right where the search was. */\n/* In the form's own flow, not in the results dropdown. It was in the panel\n   once; the panel is absolutely positioned and the vendored stylesheet sets\n   .modal-content overflow:hidden, so the form's last row — the one offering an\n   existing user — was cut off by the dialog edge. Inline, the modal grows. */\n.gvl-people__new {\n    display: grid;\n    gap: .5rem;\n    margin-top: .75rem;\n    padding: .75rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #f7fafc);\n}\n\n.gvl-people__none {\n    margin: 0;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-people__newfields { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }\n\n@media (max-width: 575.98px) {\n    .gvl-people__newfields { grid-template-columns: 1fr; }\n}\n\n.gvl-addmember__fields label {\n    display: block;\n    margin-bottom: .35rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-members__row {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    padding: .75rem 0;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-members__who { flex: 1 1 auto; min-width: 0; }\n\n.gvl-members__name {\n    display: block;\n    font-weight: 600;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-members__email {\n    display: block;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #6c757d);\n    overflow-wrap: anywhere;\n}\n\n.gvl-members__role {\n    flex: 0 0 auto;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* ── Management modals: the gradebook ────────────────────────────────────── */\n.gvl-gradebook-modal .modal-body { padding: 1.5rem 2rem 2.5rem; }\n\n/* The grid is the one thing here that genuinely needs width, and it still\n   outgrows it — so it scrolls inside its own box rather than the page. */\n.gvl-gradebook__scroll {\n    overflow-x: auto;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n}\n\n.gvl-gradebook {\n    border-collapse: collapse;\n    width: 100%;\n    font-size: .875rem;\n}\n\n.gvl-gradebook th,\n.gvl-gradebook td {\n    padding: .6rem .75rem;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n    text-align: center;\n    vertical-align: middle;\n}\n\n/* The learner column stays put while the lessons scroll past it — without it\n   you lose track of whose row you are reading two screens along. */\n.gvl-gradebook__learner {\n    position: sticky;\n    left: 0;\n    z-index: 2;\n    min-width: 200px;\n    text-align: left;\n    background: var(--gvl-card, #fff);\n    box-shadow: 1px 0 0 var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-gradebook thead th {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--gvl-tint, #eef4f8);\n    font-weight: 600;\n}\n\n.gvl-gradebook thead .gvl-gradebook__learner { z-index: 3; }\n\n/* Module columns are a fixed width so that a whole number of them fits the\n   frame at every size — three wide, two medium, one narrow. The pager reads\n   this width back off the rendered column and steps by exactly that many, so\n   a page never ends halfway through a module.\n\n   A fixed width rather than a max: `max-width` lets a short module name make a\n   narrow column, and then \"how many fit\" has a different answer per course. */\n.gvl-gradebook__lesson,\n.gvl-gradebook__module {\n    width: var(--gvl-gb-col, 200px);\n    min-width: var(--gvl-gb-col, 200px);\n    max-width: var(--gvl-gb-col, 200px);\n}\n\n.gvl-gradebook__lesson span,\n.gvl-gradebook__module span {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n/* A module cell stacks three facts, which is why it is not a one-line cell:\n   how far in, what scored, and what is still waiting on somebody. */\n.gvl-gradebook__cell {\n    display: table-cell;\n    min-width: 150px;\n}\n\n.gvl-gradebook__opened,\n.gvl-gradebook__score {\n    display: block;\n    white-space: nowrap;\n}\n\n.gvl-gradebook__opened {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-gradebook__opened.is-done { color: var(--gvl-primary, #0b50d8); }\n\n.gvl-gradebook__done { font-weight: 600; }\n\n.gvl-gradebook__score {\n    font-weight: 600;\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-gradebook__score.is-empty { font-weight: 400; color: var(--gvl-muted, #5c6b7a); }\n\n.gvl-gradebook__cell--total { background: var(--gvl-tint, #eef4f8); }\n\n.gvl-gradebook__cell.is-complete { background: var(--gvl-success-tint, #e8f5e9); }\n.gvl-gradebook__cell.is-pending  { background: var(--gvl-warning-tint, #fff8e1); }\n\n/* Overall sticks to the right edge the way Student sticks to the left. Paging\n   through eight modules to check a total, then paging back, is the thing the\n   two sticky columns exist to prevent — you are always looking at a name and a\n   total with the modules moving between them. */\n.gvl-gradebook__total {\n    font-weight: 600;\n    white-space: nowrap;\n    position: sticky;\n    right: 0;\n    z-index: 2;\n    background: var(--gvl-card, #fff);\n    box-shadow: -1px 0 0 var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-gradebook thead .gvl-gradebook__total {\n    z-index: 3;\n    background: var(--gvl-tint, #eef4f8);\n}\n\n/* ── Finding and paging through the STUDENTS ────────────────────────────── */\n\n/* Above the grid, and not scrolling with it: these controls change which rows\n   the server sends, where the module pager below only moves columns already on\n   the page. Putting them at opposite ends of the grid is the clearest way to\n   say they are not the same control. */\n\n.gvl-gradebook__tools {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    flex-wrap: wrap;\n    margin-bottom: 14px;\n}\n\n.gvl-gradebook__find {\n    position: relative;\n    flex: 1 1 220px;\n    max-width: 320px;\n}\n\n.gvl-gradebook__find .form-control {\n    padding-left: 34px;\n    height: 34px;\n    font-size: .875rem;\n}\n\n/* Inside the field, vertically centred on the field rather than on its text,\n   so it does not drift when the control's height changes. */\n.gvl-gradebook__findicon {\n    position: absolute;\n    left: 12px;\n    top: 50%;\n    transform: translateY(-50%);\n    pointer-events: none;\n    color: var(--gvl-muted, #5c6b7a);\n    font-size: .8125rem;\n}\n\n/* Fixed width, because the label swaps between \"A–Z\" and \"Z–A\" and a button\n   that changes size when clicked moves everything after it. Wide enough for\n   the longer of the two in both. */\n.gvl-gradebook__sort {\n    white-space: nowrap;\n    min-width: 9.5rem;\n    text-align: center;\n}\n\n/* Pushed to the far end: the count and its arrows answer \"where am I in the\n   list\", which is a different question from \"which student\", and the gap keeps\n   them from being read as one control. */\n.gvl-gradebook__people {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-left: auto;\n}\n\n.gvl-gradebook__count {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n}\n\n@media (max-width: 575px) {\n    /* The count wraps to its own line before the arrows get cramped — the\n       arrows are what gets tapped. */\n    .gvl-gradebook__people { margin-left: 0; width: 100%; }\n    .gvl-gradebook__find { max-width: none; }\n}\n\n/* ── Paging through the modules ─────────────────────────────────────────── */\n\n.gvl-gradebook__frame { position: relative; }\n\n.gvl-gradebook__pager {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    gap: 10px;\n    margin-top: 10px;\n}\n\n.gvl-gradebook__at {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-gradebook__page {\n    min-width: 34px;\n    line-height: 1;\n    font-size: 1rem;\n}\n\n.gvl-gradebook__page:disabled { opacity: .4; cursor: default; }\n\n/* Fallback widths only. The real column width is computed and set as\n   --gvl-gb-col by the pager, which is the only thing that can measure the\n   space available and divide it into three, two or one — see sizeColumns().\n   These values are what a column is before that runs, and what it stays if\n   there is no pager because every module already fits. */\n@media (max-width: 991px) {\n    .gvl-gradebook__lesson,\n    .gvl-gradebook__module { --gvl-gb-col: 190px; }\n    .gvl-gradebook__learner { min-width: 160px; }\n}\n\n@media (max-width: 767px) {\n    .gvl-gradebook__lesson,\n    .gvl-gradebook__module { --gvl-gb-col: 170px; }\n    .gvl-gradebook__learner { min-width: 130px; }\n    .gvl-gradebook th,\n    .gvl-gradebook td { padding: .5rem .5rem; }\n}\n\n/* ── \"Waiting to be graded\" ──────────────────────────────────────────────────\n   One note, two readers: the learner meets it on the syllabus, the instructor in\n   the gradebook. Click rather than hover, so it works by touch and by keyboard —\n   which also means it needs somewhere to sit without shifting the layout. */\n.gvl-pending {\n    position: relative;\n    display: inline-block;\n}\n\n.gvl-pending__badge,\n.gvl-gradebook__flag {\n    display: inline-flex;\n    align-items: center;\n    gap: .375rem;\n    padding: .125rem .5rem .125rem .375rem;\n    font-size: .75rem;\n    font-weight: 600;\n    line-height: 1.6;\n    color: #7a5a00;\n    background: var(--gvl-warning-tint, #fff8e1);\n    border: 1px solid var(--gvl-warning, #e6a700);\n    border-radius: 999px;\n    cursor: pointer;\n}\n\n.gvl-pending__badge:hover,\n.gvl-pending__badge:focus-visible,\n.gvl-gradebook__flag:hover,\n.gvl-gradebook__flag:focus-visible { background: #fff2cc; }\n\n/* This one does something when you press it, so it says so. */\n.gvl-gradebook__flag { margin-top: .375rem; }\n\n.gvl-pending__dot {\n    width: .4375rem;\n    height: .4375rem;\n    border-radius: 50%;\n    background: var(--gvl-warning, #e6a700);\n    flex: 0 0 auto;\n}\n\n/* Fixed, not absolute: in the gradebook this sits inside a table with\n   overflow-x:auto, which clips the vertical axis too — see place() in\n   gvl-lms.js, which sets top/left from the badge's position on screen. */\n.gvl-pending__note {\n    position: fixed;\n    left: 0;\n    top: 0;\n    z-index: 1080;\n    display: none;\n    width: max-content;\n    max-width: 17rem;\n    padding: .625rem .75rem;\n    font-size: .8125rem;\n    font-weight: 400;\n    line-height: 1.45;\n    text-align: left;\n    white-space: normal;\n    color: var(--gvl-ink, #1d2b36);\n    background: var(--gvl-card, #fff);\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    box-shadow: 0 4px 14px rgba(0, 0, 0, .12);\n}\n\n/* Keyed on the shared data attribute, not on either component's wrapper class.\n   The \"?\" popover reuses .gvl-pending__note for its looks but sits inside\n   .gvl-help, so a rule naming .gvl-pending matched the note and never the\n   wrapper — it opened in the DOM and stayed invisible. */\n[data-gvl-note].is-open [data-gvl-note-body] { display: block; }\n\n/* The learner's own points, under the progress bar. */\n.gvl-progress__points {\n    margin: .25rem 0 .5rem;\n    font-size: .875rem;\n    font-weight: 600;\n    font-variant-numeric: tabular-nums;\n}\n\n/* ── Reading one answer ──────────────────────────────────────────────────────\n   The answer is the content here, so it gets the room and the type; the two\n   fields under it are small because awarding a number is a small act. */\n.gvl-grade__heading { display: grid; gap: .125rem; }\n\n/* The heading here is two lines, so the close button lines up with the name\n   rather than floating level with the gap under it. */\n#gvl-grade .modal-header { align-items: flex-start; }\n\n.gvl-grade__position {\n    margin: 0;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-grade__prompt {\n    margin: 0 0 .75rem;\n    font-weight: 600;\n    font-size: 1.0625rem;\n}\n\n.gvl-grade__answer {\n    margin-bottom: 1.5rem;\n    padding: 1rem 1.125rem;\n    max-height: 22rem;\n    overflow-y: auto;\n    white-space: pre-wrap;        /* their paragraphs are theirs */\n    line-height: 1.65;\n    border-left: 3px solid var(--gvl-primary, #0b50d8);\n    border-radius: 0 var(--gvl-radius, 6px) var(--gvl-radius, 6px) 0;\n    background: var(--gvl-tint, #eef4f8);\n}\n\n.gvl-grade__award .gvl-grade__scoreline {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n}\n\n.gvl-grade__scoreline input { max-width: 7rem; }\n\n.gvl-grade__outof {\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n    white-space: nowrap;\n}\n\n/* Already marked, and being looked at again rather than for the first time.\n   Said in words, not in colour: --gvl-primary is itself green in this theme, so\n   a green \"graded\" border was indistinguishable from the ordinary one. */\n.gvl-grade__marked {\n    display: none;\n    margin-left: .5rem;\n    padding: .0625rem .4375rem;\n    font-size: .6875rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: #fff;\n    background: var(--gvl-success, #2e7d32);\n    border-radius: 999px;\n    vertical-align: .1em;\n}\n\n[data-gvl-grade].is-graded .gvl-grade__marked { display: inline-block; }\n\n/* Previous / Save / Next, with the arrows pushed to the edges they point at. */\n.gvl-grade__foot { justify-content: space-between; }\n.gvl-grade__foot [data-gvl-grade-save] { margin: 0 auto; }\n\n.gvl-document__note {\n    margin: .75rem 0 0;\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n/* ── The profile modal ───────────────────────────────────────────────────────\n   Reachable from every page, so it reuses the form rules above rather than\n   carrying its own copy of them. */\n#gvl-profile .modal-header,\n#gvl-profile .modal-body,\n#gvl-profile .modal-footer { padding-left: 2rem; padding-right: 2rem; }\n\n#gvl-profile .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1rem;\n    padding-top: 1.75rem;\n    padding-bottom: 1.25rem;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n#gvl-profile .modal-body { padding-top: 1.75rem; padding-bottom: 1.75rem; }\n\n#gvl-profile .modal-footer {\n    display: flex;\n    justify-content: flex-end;\n    gap: .6rem;\n    padding-top: 1.25rem;\n    padding-bottom: 1.5rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n/* Text, not a disabled input. A greyed-out field invites people to try it and\n   then wonder why it does nothing. */\n.gvl-profile__email {\n    margin: 0;\n    font-weight: 600;\n    word-break: break-all;\n}\n\n.gvl-profile__courses {\n    margin-top: 2rem;\n    padding-top: 1.5rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-profile__heading {\n    margin: 0 0 .75rem;\n    font-weight: 600;\n    font-size: .9375rem;\n}\n\n.gvl-profile__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n\n.gvl-profile__course {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: 1rem;\n    padding: .625rem 0;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-profile__course:last-child { border-bottom: 0; }\n\n.gvl-profile__coursename { font-weight: 600; }\n\n/* The part they play, not a status — quiet, and the same width-ish every time\n   so the column reads down the list. */\n.gvl-profile__role {\n    flex: 0 0 auto;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n/* ── Site settings ───────────────────────────────────────────────────────────\n   Drawn from a schema, so the rules here are about SHAPES of field rather than\n   about any particular setting. */\n#gvl-site-settings .modal-header,\n#gvl-site-settings .modal-body,\n#gvl-site-settings .modal-footer { padding-left: 2rem; padding-right: 2rem; }\n\n#gvl-site-settings .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1rem;\n    padding-top: 1.75rem;\n    padding-bottom: 1.25rem;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n#gvl-site-settings .modal-body { padding-top: 1.75rem; padding-bottom: 1.75rem; }\n\n#gvl-site-settings .modal-footer {\n    display: flex;\n    justify-content: flex-end;\n    gap: .6rem;\n    padding-top: 1.25rem;\n    padding-bottom: 1.5rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n/* ── Billing ─────────────────────────────────────────────────────────────────\n   Drawn by gvl-platform into a container this plugin provides, so the styles\n   live here with the rest of the modal while the Stripe code lives there. */\n/* Two different kinds of money, so two sections with their own headings:\n   Stripe (what students pay the site) and the card (what Grapevine charges the\n   site). They were one undifferentiated panel and read as one thing. */\n.gvl-billing__section + .gvl-billing__section {\n    margin-top: 2rem;\n    padding-top: 1.75rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-billing__heading {\n    margin: 0 0 1rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-billing__lede {\n    margin: 0 0 1.25rem;\n    line-height: 1.6;\n}\n\n/* A section's explanation and the state underneath it are two separate thoughts\n   — \"this is what the card does\" and \"there isn't one\" — so they get the same\n   gap as the one before the button, rather than reading as one paragraph that\n   happens to wrap. Written on the lede rather than the hint: adjacent margins\n   collapse to the larger of the two, and setting it here is the half that is\n   obvious when somebody changes the other. */\n.gvl-billing__lede + .gvl-form__hint,\n.gvl-billing__lede + .gvl-billing__testmode { margin-top: 1.75rem; }\n\n.gvl-billing__section .gvl-form__hint { margin-bottom: 0; }\n\n.gvl-billing__testmode {\n    display: inline-block;\n    margin: 0 0 1.25rem;\n    padding: .25rem .625rem;\n    font-size: .75rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: #7a5a00;\n    background: var(--gvl-warning-tint, #fff8e1);\n    border: 1px solid var(--gvl-warning, #e6a700);\n    border-radius: 999px;\n}\n\n/* The Stripe section's two facts — the account id and whether it can take\n   payments — stay a list. They ARE label/value pairs about a remote record,\n   with no physical object to draw. */\n.gvl-billing__card {\n    margin: 0 0 1.5rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    overflow: hidden;\n}\n\n.gvl-billing__row {\n    display: flex;\n    justify-content: space-between;\n    gap: 1rem;\n    padding: .75rem 1rem;\n    border-bottom: 1px solid var(--gvl-line-strong, #e7e8e9);\n}\n\n.gvl-billing__row:last-child { border-bottom: 0; }\n.gvl-billing__row dt { margin: 0; font-weight: 600; }\n.gvl-billing__row dd { margin: 0; font-variant-numeric: tabular-nums; }\n\n/* A capability somebody already has through another one. Ticked and locked\n   rather than offered, and dimmed so the lock reads as \"already yours\" instead\n   of \"broken\". */\n.gvl-users__cap.is-implied {\n    opacity: .62;\n    cursor: default;\n}\n\n.gvl-users__cap.is-implied input {\n    cursor: default;\n}\n\n/* ── The connected Stripe account ────────────────────────────────────────────\n   A card that answers one question — can this site take money — rather than a\n   table of facts about a remote record. It replaced a two-row dl whose loudest\n   element was the account id, which is the least useful thing on it. */\n.gvl-connected {\n    max-width: 29rem;\n    margin: 0 0 1.5rem;\n    padding: 1.125rem 1.25rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-left-width: 3px;\n    border-radius: var(--gvl-radius, .5rem);\n    background: var(--gvl-surface, #fff);\n}\n\n.gvl-connected.is-ready   { border-left-color: var(--gvl-accent, #0fb07a); }\n.gvl-connected.is-pending { border-left-color: var(--gvl-warning, #e6a700); }\n\n.gvl-connected__state {\n    display: flex;\n    align-items: center;\n    gap: .5rem;\n    margin: 0 0 .5rem;\n}\n\n.gvl-connected__dot {\n    flex: 0 0 auto;\n    width: .5rem;\n    height: .5rem;\n    border-radius: 50%;\n    background: var(--gvl-muted, #909193);\n}\n\n.is-ready   .gvl-connected__dot { background: var(--gvl-accent, #0fb07a); }\n.is-pending .gvl-connected__dot { background: var(--gvl-warning, #e6a700); }\n\n.gvl-connected__label {\n    font-weight: 600;\n    color: var(--gvl-title, #212121);\n}\n\n.gvl-connected__who,\n.gvl-connected__next {\n    margin: 0 0 .75rem;\n    line-height: 1.6;\n    color: var(--gvl-text, #555);\n}\n\n.gvl-connected__next { color: #7a5a00; }\n\n/* Reference, not news — quiet, and on its own line so the sentence above it\n   stays the thing that is read. */\n.gvl-connected__acct {\n    display: flex;\n    align-items: baseline;\n    gap: .5rem;\n    margin: 0;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #909193);\n}\n\n.gvl-connected__acctlabel { flex: 0 0 auto; }\n\n.gvl-connected__id {\n    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #909193);\n    background: var(--gvl-surface-sunk, #f9f9fa);\n    padding: .0625rem .375rem;\n    border-radius: .25rem;\n    /* Selectable despite being shortened: the title carries the whole id, and\n       somebody quoting it to Stripe support needs to be able to take it. */\n    user-select: all;\n}\n\n.gvl-connected__actions {\n    margin: 1rem 0 0;\n    padding-top: .875rem;\n    border-top: 1px solid var(--gvl-line, #f1f2f3);\n}\n\n/* ── The card on file ────────────────────────────────────────────────────────\n   Drawn as the card rather than as a table about it. Three of its fields are\n   printed on an object the reader is holding, so laying them out the way they\n   sit on that object means they are recognised instead of read.\n\n   Sized to an object, not to the panel: a full-width band of five label/value\n   rows read as a data table, which is the shape for comparing many records —\n   there is only ever one card here. */\n/* ── The plan, on the Billing panel ─────────────────────────────────────────\n *\n * Shaped like .gvl-connected above rather than like a table: it is ONE object\n * with a state, and the left border is where that state is said. A plan that\n * is ending reads as a warning without the words having to shout.\n */\n.gvl-planface {\n    max-width: 29rem;\n    margin: 0 0 1.5rem;\n    padding: 1.125rem 1.25rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-left-width: 3px;\n    border-left-color: var(--gvl-accent, #0fb07a);\n    border-radius: var(--gvl-radius, .5rem);\n    background: var(--gvl-surface, #fff);\n}\n\n.gvl-planface.is-ending { border-left-color: var(--gvl-warning, #e6a700); }\n\n.gvl-planface__name {\n    margin: 0 0 .25rem;\n    font-weight: 600;\n    line-height: 1.35;\n}\n\n.gvl-planface__price {\n    margin: 0 0 .5rem;\n    font-variant-numeric: tabular-nums;\n    color: var(--gvl-ink-2, #55525e);\n}\n\n.gvl-planface__renews,\n.gvl-planface__ending {\n    margin: 0 0 .5rem;\n    font-size: .9375rem;\n    color: var(--gvl-ink-2, #55525e);\n}\n\n.gvl-planface__ending { font-weight: 600; color: #7a5a00; }\n\n/* The sentence that says what SURVIVES the cancellation. Kept close to the\n * date it qualifies, because \"ends on the 30th\" read alone is the thing people\n * panic about. */\n.gvl-planface__note {\n    margin: 0 0 .875rem;\n    font-size: .875rem;\n    line-height: 1.5;\n    color: var(--gvl-ink-2, #55525e);\n}\n\n.gvl-cardface {\n    position: relative;\n    max-width: 23rem;\n    margin: 0 0 1.5rem;\n    padding: 1.125rem 1.25rem 1.25rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius-lg, 1rem);\n    background: var(--gvl-surface-sunk, #f9f9fa);\n}\n\n/* Top right, where the brand mark sits on the real thing. */\n.gvl-cardface__brand {\n    position: absolute;\n    top: 1.125rem;\n    right: 1.25rem;\n    font-size: .6875rem;\n    font-weight: 700;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--gvl-muted, #909193);\n}\n\n/* Smaller than a card's printed number would be, because the line now carries\n   a sentence as well as the digits — set at display size it would shout, and\n   there is nothing here to shout over. */\n.gvl-cardface__number {\n    margin: 0;\n    font-size: 1rem;\n    font-weight: 600;\n    letter-spacing: .02em;\n    font-variant-numeric: tabular-nums;\n    color: var(--gvl-title, #212121);\n}\n\n.gvl-cardface__expiry {\n    margin: .3125rem 0 0;\n    font-size: .8125rem;\n    font-variant-numeric: tabular-nums;\n    color: var(--gvl-muted, #909193);\n}\n\n/* The billing identity is a second thought about the same object, so it shares\n   the card and is divided from its face rather than floated off on its own. */\n.gvl-cardface__billing {\n    margin-top: 1.125rem;\n    padding-top: .9375rem;\n    border-top: 1px solid var(--gvl-line-strong, #e7e8e9);\n}\n\n.gvl-cardface__label {\n    display: block;\n    margin-bottom: .25rem;\n    font-size: .625rem;\n    font-weight: 700;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    color: var(--gvl-muted, #909193);\n}\n\n.gvl-cardface__name {\n    margin: 0;\n    font-size: .875rem;\n    font-weight: 600;\n    color: var(--gvl-title, #212121);\n}\n\n/* The formatter returns real line breaks, so the address is drawn the way it\n   would be written rather than run together with commas. pre-line keeps it one\n   text node, which means it still copies as an address. */\n.gvl-cardface__address {\n    margin: .125rem 0 0;\n    font-size: .8125rem;\n    line-height: 1.5;\n    white-space: pre-line;\n    color: var(--gvl-text, #555555);\n}\n\n/* Same gap the explanation gets from anything else that follows it: the\n   sentence above says what the card is FOR, and the card is a separate\n   thought, not a caption on that sentence. */\n.gvl-billing__lede + .gvl-cardface,\n.gvl-billing__testmode + .gvl-cardface { margin-top: 1.75rem; }\n\n/* Stripe draws its own form inside an iframe here — this page cannot read what\n   is typed into it, which is the point. Given room rather than styled. */\n.gvl-billing__address { margin-bottom: 1.25rem; }\n\n/* Matches the label Stripe draws over its own address fields, so the card row\n   does not read as a different form from the three above it. */\n.gvl-billing__label {\n    display: block;\n    margin-bottom: .3125rem;\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-billing__element {\n    margin-bottom: 1.5rem;\n    min-height: 3rem;\n}\n\n/* Room between what a section says and what it offers. The explanation and the\n   button that acts on it were a line apart, which read as one block and made the\n   destructive buttons feel attached to the sentence above them. */\n.gvl-billing__actions {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n    flex-wrap: wrap;\n    margin-top: 1.75rem;\n}\n\n/* The Connect link is a bare <a>, not in an actions row — same gap. */\n.gvl-billing__section > .btn { margin-top: 1.75rem; }\n\n/* Status text sits between what a section says and what it offers, so every\n   section reads the same way down the page: the instruction, then the state,\n   then the button. The slot is empty most of the time, so its spacing belongs\n   to the message inside it — a margin on the slot itself would hold a gap open\n   with nothing in it. */\n.gvl-billing__status .gvl-form__message { margin: 1.25rem 0 0; }\n\n/* The destructive one sits apart from the one somebody actually came for. */\n.gvl-billing__actions .btn-outline-danger { margin-left: auto; }\n\n/* The promotional video, at the head of the description card. Room beneath it\n   so the prose does not look like a caption on the player. */\n.gvl-coursepage__promo {\n    margin-bottom: 1.25rem;\n    border-radius: var(--gvl-radius, .5rem);\n    overflow: hidden;\n    background-color: #000;\n}\n\n.gvl-coursepage__promo iframe,\n.gvl-coursepage__promo video {\n    width: 100%;\n    height: 100%;\n    border: 0;\n}\n\n/* ── The course's picture ────────────────────────────────────────────────────\n   An icon or an image, never both, so the control shows one set of choices at a\n   time rather than two that have to be mentally ranked. */\n.gvl-art__preview {\n    position: relative;\n    width: 100%;\n    max-width: 260px;\n    margin-bottom: .75rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    overflow: hidden;\n}\n\n.gvl-art__preview img {\n    display: block;\n    width: 100%;\n    /* The catalogue card crops to this shape, so the preview does too — an\n       image that looks right here and wrong there is worse than no preview. */\n    aspect-ratio: 16 / 9;\n    object-fit: cover;\n}\n\n.gvl-art__clear {\n    position: absolute;\n    top: 8px;\n    right: 8px;\n    padding: 6px;\n    background-color: rgba(255, 255, 255, .9);\n    border-radius: 50%;\n}\n\n.gvl-art__icons {\n    display: flex;\n    flex-wrap: wrap;\n    gap: .5rem;\n    margin-bottom: .75rem;\n}\n\n.gvl-art__icon {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 44px;\n    height: 44px;\n    font-size: 1.125rem;\n    color: var(--gvl-muted, #909193);\n    background-color: var(--gvl-surface, #fff);\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    cursor: pointer;\n}\n\n.gvl-art__icon:hover {\n    color: var(--gvl-title, #212121);\n    border-color: var(--gvl-primary-light, #a4c2f4);\n}\n\n/* The chosen one, stated in colour AND in weight of border — a single tint is\n   hard to pick out of a row of twelve at a glance. */\n.gvl-art__icon.is-on {\n    color: var(--gvl-primary, #0b50d8);\n    background-color: var(--gvl-primary-wash, #eef3fe);\n    border-color: var(--gvl-primary, #0b50d8);\n    box-shadow: inset 0 0 0 1px var(--gvl-primary, #0b50d8);\n}\n\n.gvl-art__actions {\n    display: flex;\n    align-items: center;\n    gap: .75rem;\n    flex-wrap: wrap;\n    margin-bottom: .375rem;\n}\n\n.gvl-art__actions .gvl-form__hint { margin: 0; }\n.gvl-art__actions .gvl-form__hint.is-error { color: #c0392b; }\n\n/* ── Pages ───────────────────────────────────────────────────────────────────\n   A list that is also the navigation, so it is drawn as an outline rather than\n   a table: indentation is the only thing that says \"this sits under that\". */\n.gvl-pages__head {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 1rem;\n    margin-bottom: 1.25rem;\n}\n\n.gvl-pages__head .gvl-form__hint { margin: 0; max-width: 34em; }\n\n.gvl-pages__row {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n    padding: .625rem .75rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    background-color: var(--gvl-surface, #fff);\n    margin-bottom: .375rem;\n}\n\n/* One level in. The line is what makes a nested page read as nested while it\n   is being dragged, when the indent alone is ambiguous. */\n.gvl-pages__row.is-child {\n    margin-left: 2rem;\n    border-left: 3px solid var(--gvl-primary-light, #a4c2f4);\n}\n\n.gvl-pages__children:empty { min-height: 0; }\n\n/* A landing strip under every parent, so a page can be dropped INTO one that\n   has no children yet. Without it there is nothing to aim at. */\n.gvl-pages__children {\n    min-height: .75rem;\n    margin-left: 2rem;\n}\n\n.gvl-pages__grip {\n    color: var(--gvl-muted, #909193);\n    cursor: grab;\n}\n\n/* Indent / outdent. Quiet until the row is hovered, because the list should\n   read as a list of pages rather than a row of controls. */\n.gvl-pages__nest {\n    padding: .25rem .375rem;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #909193);\n    background: none;\n    border: 0;\n    border-radius: var(--gvl-radius, .5rem);\n    cursor: pointer;\n    opacity: .5;\n}\n\n.gvl-pages__row:hover .gvl-pages__nest { opacity: 1; }\n\n.gvl-pages__nest:hover:not(:disabled) {\n    color: var(--gvl-primary, #0b50d8);\n    background-color: var(--gvl-primary-wash, #eef3fe);\n}\n\n.gvl-pages__nest:disabled {\n    opacity: .2;\n    cursor: not-allowed;\n}\n\n/* The drop strips are nearly invisible at rest and open up while something is\n   being dragged — a target you cannot hit is the same as no target. */\n.gvl-pages__list.is-dragging .gvl-pages__children {\n    min-height: 2.25rem;\n    border: 1px dashed var(--gvl-primary-light, #a4c2f4);\n    border-radius: var(--gvl-radius, .5rem);\n    margin-bottom: .375rem;\n}\n\n.gvl-pages__title {\n    flex: 1 1 auto;\n    padding: 0;\n    text-align: left;\n    font-size: .9375rem;\n    font-weight: 600;\n    color: var(--gvl-title, #212121);\n    background: none;\n    border: 0;\n    cursor: pointer;\n}\n\n.gvl-pages__title:hover { color: var(--gvl-primary, #0b50d8); }\n\n.gvl-pages__badge {\n    padding: .125rem .5rem;\n    font-size: .6875rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n    color: var(--gvl-muted, #909193);\n    background-color: var(--gvl-surface-sunk, #f9f9fa);\n    border-radius: 1rem;\n}\n\n.gvl-pages__view {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #909193);\n}\n\n.gvl-pages__remove { color: #c0392b !important; }\n.gvl-pages__note.is-error { color: #c0392b; }\n\n/* ── Pills ───────────────────────────────────────────────────────────────────\n   One panel at a time. This was a stack with a heading over each group, which\n   works for two settings and stops working the moment one group is a list of\n   every person on the site. */\n.gvl-tabs {\n    display: flex;\n    flex-wrap: wrap;\n    gap: .375rem;\n    margin-bottom: 1.75rem;\n    padding-bottom: 1.25rem;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-tabs__pill {\n    padding: .4375rem .9375rem;\n    font-size: .875rem;\n    font-weight: 600;\n    line-height: 1.4;\n    color: var(--gvl-muted, #5c6b7a);\n    background: none;\n    border: 1px solid transparent;\n    border-radius: 999px;\n    cursor: pointer;\n}\n\n.gvl-tabs__pill:hover {\n    color: var(--gvl-ink, #1d2b36);\n    background: var(--gvl-tint, #eef4f8);\n}\n\n.gvl-tabs__pill.is-on {\n    color: #fff;\n    background: var(--gvl-primary, #0b50d8);\n    border-color: var(--gvl-primary, #0b50d8);\n}\n\n/* ── A setting that is a switch ──────────────────────────────────────────────\n   The Features pane of course bundletings: a row per thing the course can turn on,\n   with the explanation under the name rather than beside the control. Built as\n   a LIST of rows because the next feature is a second row and not a redesign. */\n\n.gvl-toggles {\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n}\n\n.gvl-toggle {\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 1.5rem;\n}\n\n/* The name and its explanation stay together and take the width; the switch is\n   a fixed object at the end of the row. */\n.gvl-toggle__text {\n    display: flex;\n    flex-direction: column;\n    gap: .25rem;\n    min-width: 0;\n}\n\n.gvl-toggle__text label { margin: 0; cursor: pointer; }\n.gvl-toggle__text .gvl-form__hint { margin: 0; }\n\n/* A real checkbox, made invisible but left in place — not display:none, which\n   takes it out of the tab order and out of form.elements. It covers the track\n   so the whole switch is the control, and the track is painted from :checked. */\n.gvl-toggle__switch {\n    position: relative;\n    flex: 0 0 auto;\n    width: 44px;\n    height: 24px;\n    margin-top: .125rem;\n}\n\n.gvl-toggle__switch input {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    opacity: 0;\n    cursor: pointer;\n    z-index: 1;\n}\n\n.gvl-toggle__track {\n    position: absolute;\n    inset: 0;\n    border-radius: 999px;\n    background: var(--gvl-rule, #e7ecf1);\n    transition: background .15s ease;\n    pointer-events: none;\n}\n\n/* The knob. */\n.gvl-toggle__track::after {\n    content: \"\";\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, .25);\n    transition: transform .15s ease;\n}\n\n.gvl-toggle__switch input:checked + .gvl-toggle__track {\n    background: var(--gvl-primary, #0b50d8);\n}\n\n.gvl-toggle__switch input:checked + .gvl-toggle__track::after {\n    transform: translateX(20px);\n}\n\n/* Keyboard focus has to be visible on the track, because the input it belongs\n   to is transparent. */\n.gvl-toggle__switch input:focus-visible + .gvl-toggle__track {\n    outline: 2px solid var(--gvl-primary, #0b50d8);\n    outline-offset: 2px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .gvl-toggle__track,\n    .gvl-toggle__track::after { transition: none; }\n}\n\n/* A label carrying more weight than the rows around it — the one setting in a\n   group that decides something the others only qualify. */\n.gvl-form__label--strong {\n    font-weight: 700;\n}\n\n/* ── The people on this site ─────────────────────────────────────────────────\n   A list that is also an editor. Each row stays a row until somebody asks to\n   change it, so twenty people read as twenty lines rather than twenty forms. */\n/* The search and the Add button share a row: they are the two things somebody\n   opens this panel to do, and Add buried under twenty rows means scrolling past\n   everybody to reach it. */\n.gvl-users__search {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n    margin-bottom: 1rem;\n}\n\n.gvl-users__search input { flex: 1 1 auto; }\n.gvl-users__add { flex: 0 0 auto; white-space: nowrap; }\n\n/* Closed until wanted, and set apart from the list below it so a half-typed\n   new person is not mistaken for a row. */\n.gvl-users__addform {\n    margin-bottom: 1.25rem;\n    padding: 1.25rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n}\n\n.gvl-users__email-field { margin-bottom: 1rem; }\n\n.gvl-users__list { min-height: 4rem; }\n\n.gvl-users__row { border-bottom: 1px solid var(--gvl-rule, #e7ecf1); }\n\n.gvl-users__head {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: 1rem;\n    flex-wrap: wrap;\n    padding: .75rem 0;\n}\n\n.gvl-users__who {\n    display: grid;\n    gap: .125rem;\n    min-width: 0;\n}\n\n.gvl-users__name { font-weight: 600; }\n\n.gvl-users__email {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n    word-break: break-all;\n}\n\n.gvl-users__meta {\n    display: flex;\n    align-items: center;\n    gap: .5rem;\n    flex: 0 0 auto;\n    flex-wrap: wrap;\n}\n\n.gvl-users__role {\n    padding: .125rem .5rem;\n    font-size: .75rem;\n    font-weight: 600;\n    line-height: 1.6;\n    color: var(--gvl-muted, #5c6b7a);\n    background: var(--gvl-tint, #eef4f8);\n    border-radius: 999px;\n    white-space: nowrap;\n}\n\n/* A capability this plugin granted, as distinct from a WordPress role. */\n.gvl-users__role--granted {\n    color: #7a5a00;\n    background: var(--gvl-warning-tint, #fff8e1);\n    border: 1px solid var(--gvl-warning, #e6a700);\n}\n\n.gvl-users__courses {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n    white-space: nowrap;\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-users__edit {\n    padding: 0;\n    font-size: .8125rem;\n    font-weight: 600;\n    color: var(--gvl-primary, #0b50d8);\n    background: none;\n    border: 0;\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n/* Closed until asked for. */\n.gvl-users__editor { display: none; }\n.gvl-users__row.is-open .gvl-users__editor {\n    display: block;\n    padding: 0 0 1.25rem;\n}\n\n.gvl-users__names {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: .75rem;\n    margin-bottom: 1rem;\n}\n\n.gvl-users__caps {\n    display: grid;\n    gap: .625rem;\n    margin-bottom: 1.125rem;\n}\n\n/* Checkbox, name, and what it lets them do — the third part is why somebody can\n   tick the right box without having to ask. */\n.gvl-users__cap {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    align-items: baseline;\n    gap: .25rem .625rem;\n    margin: 0;\n    cursor: pointer;\n}\n\n.gvl-users__caplabel { font-weight: 600; font-size: .875rem; }\n\n.gvl-users__caphint {\n    grid-column: 2;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-users__actions {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n}\n\n/* Pushed away from Save, so the destructive one is not fumbled for the other. */\n.gvl-users__remove { margin-left: auto; }\n\n.gvl-users__foot {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1rem;\n    flex-wrap: wrap;\n    margin-top: 1.25rem;\n}\n\n.gvl-users__count {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-users__pager {\n    display: flex;\n    align-items: center;\n    gap: .625rem;\n}\n\n.gvl-users__page {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n    white-space: nowrap;\n    font-variant-numeric: tabular-nums;\n}\n\n@media (max-width: 575px) {\n    .gvl-users__names { grid-template-columns: 1fr; }\n}\n\n.gvl-settings__section + .gvl-settings__section {\n    margin-top: 2rem;\n    padding-top: 1.75rem;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-settings__heading {\n    margin: 0 0 1.25rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-settings__media {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n}\n\n/* Sized to what a logo actually is — wide and short — so the preview shows the\n   proportions it will have in the bar rather than a square crop of it. */\n.gvl-settings__thumb {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 180px;\n    height: 56px;\n    flex: 0 0 auto;\n    padding: .375rem .625rem;\n    border: 1px dashed var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n    overflow: hidden;\n}\n\n.gvl-settings__thumb img {\n    max-width: 100%;\n    max-height: 100%;\n    object-fit: contain;\n}\n\n.gvl-settings__empty {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n/* The swatch IS the control, so it is sized to be clicked rather than tucked\n   beside a text field. The native picker takes a hex value for anyone pasting a\n   brand color, which is why there is no second input next to it. */\n.gvl-settings__color {\n    display: flex;\n    align-items: center;\n    gap: .875rem;\n}\n\n.gvl-settings__swatch {\n    width: 64px;\n    height: 40px;\n    padding: 0;\n    flex: 0 0 auto;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: none;\n    cursor: pointer;\n}\n\n/* Browsers wrap the actual colour in their own chrome; these strip it so the\n   swatch fills the box it was given. */\n.gvl-settings__swatch::-webkit-color-swatch-wrapper { padding: 3px; }\n.gvl-settings__swatch::-webkit-color-swatch { border: 0; border-radius: 3px; }\n.gvl-settings__swatch::-moz-color-swatch { border: 0; border-radius: 3px; }\n\n/* Nothing chosen: the swatch shows the theme's colour, and says so by being\n   quieter than a deliberate choice. */\n.gvl-settings__color.is-default .gvl-settings__swatch { opacity: .55; }\n\n.gvl-settings__mediabuttons {\n    display: flex;\n    align-items: center;\n    gap: .5rem;\n}\n\n.gvl-settings__remove { color: var(--gvl-danger, #b3261e); }\n\n/* ── Authoring controls ──────────────────────────────────────────────────────\n   Quiet until wanted: the outline is read far more often than it is edited, so\n   the tools sit at low contrast and come up on hover or keyboard focus. They\n   stay visible on touch, where there is no hover to reveal them. */\n.gvl-authortools {\n    display: inline-flex;\n    align-items: center;\n    gap: .15rem;\n    margin-left: .35rem;\n    opacity: .35;\n    transition: opacity .15s ease;\n}\n\nli:hover > .gvl-authortools,\n.gvl-accordion__heading:hover .gvl-authortools,\n.gvl-authortools:focus-within { opacity: 1; }\n\n@media (hover: none) {\n    .gvl-authortools { opacity: .8; }\n}\n\n.gvl-authortools__btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 1.9rem;\n    height: 1.9rem;\n    padding: 0;\n    border: 0;\n    border-radius: 3px;\n    background: transparent;\n    color: var(--gvl-muted, #6c757d);\n    font-size: .8125rem;\n    cursor: pointer;\n}\n\n.gvl-authortools__btn:hover { background: var(--gvl-tint, #eef4f8); color: var(--gvl-heading, #1f2d3d); }\n.gvl-authortools__btn--danger:hover { background: var(--gvl-danger-tint, #fdecea); color: var(--gvl-danger, #a4292c); }\n.gvl-authortools__btn[data-gvl-handle],\n.gvl-authortools__btn[data-gvl-module-handle] { cursor: grab; }\n.gvl-authortools__btn:active[data-gvl-handle] { cursor: grabbing; }\n\n/* A lesson row and its tools share one line. */\n.gvl-lessonlist li { display: flex; align-items: center; gap: .25rem; }\n.gvl-lessonlist li > .gvl-lessonrow { flex: 1 1 auto; min-width: 0; }\n\n/* A module with no lessons still needs somewhere to drop one. */\n.gvl-lessonlist--empty {\n    min-height: 2.5rem;\n    margin: 0;\n    border: 1px dashed var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n}\n\n.gvl-accordion__heading { display: flex; align-items: center; }\n.gvl-accordion__heading > .gvl-accordion__btn,\n.gvl-accordion__heading > button:first-child { flex: 1 1 auto; min-width: 0; }\n.gvl-authortools--module { margin-right: .5rem; }\n\n/* Dragging */\n.gvl-sorting__ghost { opacity: .4; }\n.gvl-sorting__ghost .gvl-lessonrow { border-style: dashed; }\n\n.gvl-order-status {\n    margin: 0 0 .75rem;\n    padding: .4rem .7rem;\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n    color: var(--gvl-muted, #6c757d);\n    font-size: .8125rem;\n}\n\n/* Player tools, beside the close button. */\n.gvl-player__tool {\n    border: 0;\n    background: transparent;\n    color: inherit;\n    opacity: .6;\n    width: 2.2rem;\n    height: 2.2rem;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\n.gvl-player__tool:hover { opacity: 1; background: rgba(127, 127, 127, .14); }\n.gvl-player__tool--danger:hover { color: var(--gvl-danger, #a4292c); }\n\n/* ── The two video blocks, as the player renders them ────────────────────── */\n.gvl-block-video { margin: 0 0 1.5rem; }\n.gvl-block-video__frame { width: 100%; }\n.gvl-block-video__frame iframe,\n.gvl-block-video__frame video { width: 100%; height: 100%; border: 0; }\n\n.gvl-block-video figcaption {\n    margin-top: .5rem;\n    font-size: .875rem;\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-block-videotext {\n    display: grid;\n    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);\n    gap: 1.75rem;\n    align-items: start;\n    margin: 0 0 1.75rem;\n}\n\n/* Which side the video sits on is an authored choice, so it is a class on the\n   block rather than something inferred from the order of the markup. */\n.gvl-block-videotext--right .gvl-block-videotext__media { order: 2; }\n\n@media (max-width: 767.98px) {\n    .gvl-block-videotext { grid-template-columns: 1fr; gap: 1rem; }\n    .gvl-block-videotext--right .gvl-block-videotext__media { order: 0; }\n}\n\n.gvl-block-videotext__text > :first-child { margin-top: 0; }\n.gvl-block-videotext__text > :last-child { margin-bottom: 0; }\n\n/* The media stays put while its notes scroll.\n *\n * Only the text column ever has more than a screenful in it, so scrolling to\n * read the notes dragged the video off the top of the stage — the thing being\n * described left the screen exactly when somebody started reading about it.\n * 189 of the 287 migrated lessons are this layout, so it is most of the course.\n *\n * `position: sticky` rather than giving the text column its own scrollbar:\n *\n *   - it releases at the end of its own block, so a lesson holding two of these\n *     does not pin the first video over the second one's notes;\n *   - nothing nests a scroll region inside a scroll region, which is what makes\n *     a wheel or a trackpad swipe do different things depending on where the\n *     pointer happens to be, and what strands the rest of the lesson when the\n *     inner pane swallows the gesture;\n *   - it needs no height to be measured or guessed, so it is right at every\n *     window size and stays right when the player is resized.\n *\n * The scrolling ancestor is .gvl-player__stage. `align-items: start` on the\n * grid above is load-bearing: a stretched grid item fills the row and has\n * nowhere to move to, which makes sticky silently do nothing.\n */\n@media (min-width: 768px) {\n\n    .gvl-player__stage .gvl-block-videotext__media {\n        position: sticky;\n        top: 0;\n    }\n\n    /* A picture can be any shape, and one taller than the stage would stick\n       with its own bottom permanently out of reach — scrolling could never\n       bring it back. Capped to what the stage can show, allowing for the\n       player's head, foot and padding. Video needs no such cap: the frame is\n       16:9 of a column narrower than the stage is tall. */\n    .gvl-player__stage .gvl-block-videotext__media .gvl-block-image {\n        max-height: calc(100vh - 260px);\n        width: auto;\n        max-width: 100%;\n        /* block, or margin-inline:auto does nothing to an inline image and a\n           narrow portrait picture hugs the left edge of a wide column. */\n        display: block;\n        margin-inline: auto;\n    }\n}\n\n/* Below 768px the grid above is a single column, so there is no \"other side\"\n   to keep still — a sticky video there would sit on top of the words. The rule\n   is inside the min-width query rather than undone in a max-width one, so\n   there is one place that decides it. */\n\n/* ── The blocks as the EDITOR shows them ─────────────────────────────────────\n   A labelled still, not a live embed: an iframe in the canvas swallows the\n   clicks meant for the block, so selecting or dragging it becomes a hunt for a\n   few safe pixels of border. */\n.gvl-blockedit__preview {\n    display: flex;\n    flex-direction: column;\n    gap: .3rem;\n    padding: 1.1rem 1.25rem;\n    border: 1px dashed var(--gvl-rule, #cfd8e3);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n}\n\n.gvl-blockedit__badge {\n    font-size: .7rem;\n    font-weight: 600;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--gvl-accent, #3399cc);\n}\n\n.gvl-blockedit__url {\n    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #6c757d);\n    overflow-wrap: anywhere;\n}\n\n.gvl-blockedit__caption { font-size: .875rem; color: var(--gvl-muted, #6c757d); }\n\n.gvl-blockedit--split {\n    display: grid;\n    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);\n    gap: 1.25rem;\n    align-items: start;\n}\n\n.gvl-blockedit--split.gvl-blockedit--right .gvl-blockedit__preview,\n.gvl-blockedit--split.gvl-blockedit--right .gvl-blockedit__media { order: 2; }\n\n@media (max-width: 767.98px) {\n    .gvl-blockedit--split { grid-template-columns: 1fr; }\n    .gvl-blockedit--split.gvl-blockedit--right .gvl-blockedit__preview,\n    .gvl-blockedit--split.gvl-blockedit--right .gvl-blockedit__media { order: 0; }\n}\n\n/* ── The four lesson layouts, in the canvas ──────────────────────────────────\n   The point of these is that the author edits what the reader sees, so the two\n   columns here line up with the two the player draws. The media half is still a\n   labelled still rather than a live embed, for the same reason as above. */\n.gvl-blockedit__still {\n    display: flex;\n    flex-direction: column;\n    gap: .35rem;\n    padding: 1.1rem 1.25rem;\n    border: 1px dashed var(--gvl-rule, #cfd8e3);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n    min-height: 8rem;\n    justify-content: center;\n}\n\n.gvl-blockedit__label {\n    font-size: .7rem;\n    font-weight: 600;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--gvl-accent, #3399cc);\n}\n\n.gvl-blockedit__image {\n    display: block;\n    width: 100%;\n    height: auto;\n    border-radius: var(--gvl-radius, 6px);\n}\n\n/* The media half is edited in place, because this editor has no inspector\n   sidebar to put the fields in — see the note in gvl-blocks.js. */\n.gvl-blockedit__field {\n    display: flex;\n    flex-direction: column;\n    gap: .25rem;\n    width: 100%;\n}\n\n.gvl-blockedit__field + .gvl-blockedit__field { margin-top: .6rem; }\n\n.gvl-blockedit__input {\n    width: 100%;\n    padding: .45rem .6rem;\n    border: 1px solid var(--gvl-rule, #cfd8e3);\n    border-radius: 4px;\n    background: var(--gvl-card, #fff);\n    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n    font-size: .8125rem;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-blockedit__input:focus {\n    outline: 2px solid var(--gvl-accent, #3399cc);\n    outline-offset: -1px;\n}\n\n.gvl-blockedit__still--image { gap: .6rem; }\n.gvl-blockedit__choose { align-self: flex-start; }\n\n/* The real embed in the canvas. The frame holds the 16:9; the pane around it\n   stops pretending to be one, so the URL field sits under the video rather than\n   floating in the middle of it. */\n.gvl-blockedit__frame {\n    position: relative;\n    width: 100%;\n    aspect-ratio: 16 / 9;\n    border-radius: 4px;\n    overflow: hidden;\n    background: #000;\n}\n\n.gvl-blockedit__frame iframe,\n.gvl-blockedit__frame video {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    border: 0;\n    display: block;\n}\n\n/* Takes the click that selects the block, then disappears once it is selected\n   so the video can actually be played. */\n.gvl-blockedit__shield {\n    position: absolute;\n    inset: 0;\n    cursor: pointer;\n}\n\n.gvl-blockedit__still--playing {\n    background: transparent;\n    border-style: solid;\n    padding: .6rem;\n    gap: .6rem;\n}\n\n.gvl-blockedit__media { min-width: 0; }\n\n/* The content column. It holds real blocks, so it needs the list and heading\n   rules the canvas otherwise strips — without them an author writes a list and\n   sees unindented, unmarked lines, which is exactly the \"what I see is not what\n   I get\" this work set out to remove. */\n.gvl-blockedit__body { min-width: 0; }\n\n.gvl-blockedit__body ul,\n.gvl-blockedit__body ol {\n    margin: 0 0 1rem;\n    padding-left: 1.4rem;\n}\n\n.gvl-blockedit__body ul { list-style: disc; }\n.gvl-blockedit__body ol { list-style: decimal; }\n.gvl-blockedit__body li { margin-bottom: .25rem; }\n\n.gvl-blockedit__body > :first-child { margin-top: 0; }\n.gvl-blockedit__body > :last-child { margin-bottom: 0; }\n\n/* A layout with nothing in its content side yet should still read as a column\n   waiting for text, not as empty space. */\n.gvl-blockedit__body .block-editor-inner-blocks { min-height: 3rem; }\n\n/* The text-only layout is one column, so it should fill the width. */\n.gvl-blockedit--text .gvl-blockedit__body { max-width: none; }\n\n/* ── While a lesson is being dragged ─────────────────────────────────────────\n   Collapsed modules read as drop targets rather than as furniture, so it is\n   obvious there is somewhere to aim. The panel itself opens after a moment's\n   hover — see springWatch() in gvl-authoring.js. */\n.gvl-is-sorting .gvl-accordion__item .collapse:not(.show) + .gvl-accordion__heading,\n.gvl-is-sorting .gvl-accordion__heading {\n    outline: 1px dashed transparent;\n    outline-offset: -3px;\n    transition: outline-color .15s ease, background-color .15s ease;\n}\n\n.gvl-is-sorting .gvl-accordion__heading:hover {\n    outline-color: var(--gvl-accent, #3399cc);\n    background: var(--gvl-tint, #eef4f8);\n}\n\n/* The grab cursor should follow the pointer everywhere during a drag, not only\n   over the handle it started on. */\n.gvl-is-sorting, .gvl-is-sorting * { cursor: grabbing !important; }\n\n/* The module summary lines up under the module TITLE, not under the number\n   badge beside it.\n\n   The heading lays out as: 22px button padding | 30px badge | 16px gap | title.\n   The body starts at the same 22px, so the summary needs the badge and the gap\n   back — written as that sum rather than as 46px, so it still adds up if either\n   value changes. */\n.gvl-accordion__desc {\n    margin-left: calc(30px + 16px);\n}\n\n@media (max-width: 575.98px) {\n    /* At this width the indent costs more in line length than it earns in\n       alignment. */\n    .gvl-accordion__desc { margin-left: 0; }\n}\n\n/* ── Course status: Active / Hidden / Inactive ───────────────────────────── */\n.gvl-status {\n    display: flex;\n    flex-wrap: wrap;\n    gap: .5rem;\n}\n\n.gvl-status__choice {\n    padding: .5rem 1rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-card, #fff);\n    font-size: .9375rem;\n    font-weight: 600;\n    color: var(--gvl-muted, #5c6b7a);\n    cursor: pointer;\n}\n\n.gvl-status__choice:hover { border-color: var(--gvl-accent, #3399cc); }\n\n.gvl-status__choice.is-on {\n    border-color: var(--gvl-accent, #3399cc);\n    background: var(--gvl-accent, #3399cc);\n    color: #fff;\n}\n\n/* The hint changes with the choice, so it needs room for the longest of them\n   rather than reflowing the dialog each time one is picked. */\n.gvl-form__row [data-gvl-status-hint] { display: block; min-height: 2.5em; }\n\n/* ── The lesson editor, shaped like the player ───────────────────────────────\n   The shared editor's canvas is a 720px article sheet — right for a slot\n   description or a newsletter, wrong for a lesson, which the reader meets as a\n   wide landscape panel with media beside text. Editing a lesson in a narrow\n   column means the thing being edited never looks like the thing being made.\n\n   Scoped to gvl-lms's own overlay root, NOT changed in sp-integrations: the\n   720px sheet is what spa-2026 and spc-2026 are built around, and this editor\n   is shared with them.\n\n   1100px and 1.15fr/1fr are the player's own numbers, so the split an author\n   arranges here lands in the same proportion the learner sees. */\n#gvl-lesson-editor-root .sp-block-editor-canvas {\n    max-width: 1100px;\n    padding: 2rem 2.25rem 2.5rem;\n}\n\n/* The layouts drive their own two columns, so the canvas should not also be\n   imposing an article measure on what sits inside them. */\n#gvl-lesson-editor-root .gvl-blockedit--split {\n    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);\n    gap: 1.5rem;\n}\n\n/* A landscape media pane rather than a letterbox of text: 16:9 is what every\n   embed in the player resolves to, so the author sees the shape they will get. */\n#gvl-lesson-editor-root .gvl-blockedit__still {\n    aspect-ratio: 16 / 9;\n    min-height: 0;\n    justify-content: center;\n}\n\n/* Once a video is actually embedded the frame inside owns the 16:9, so the pane\n   has to size to its contents or the field is pushed out of the box. */\n#gvl-lesson-editor-root .gvl-blockedit__still--playing {\n    aspect-ratio: auto;\n    justify-content: flex-start;\n}\n\n/* An image fills that frame the way the player's does. */\n#gvl-lesson-editor-root .gvl-blockedit__still--image {\n    aspect-ratio: auto;\n    min-height: 10rem;\n}\n\n/* Lessons are short. Without this the writing area collapses to the height of\n   whatever is in it and the panel looks half-built. */\n#gvl-lesson-editor-root .gvl-blockedit__body { min-height: 12rem; }\n\n@media (max-width: 991.98px) {\n    #gvl-lesson-editor-root .gvl-blockedit--split { grid-template-columns: 1fr; }\n    #gvl-lesson-editor-root .gvl-blockedit__still { aspect-ratio: 16 / 9; }\n}\n\n/* ── A question, as the reader meets it ──────────────────────────────────── */\n.gvl-question {\n    margin: 1.25rem 0;\n    padding: 1.1rem 1.25rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #f7fafc);\n}\n\n.gvl-question__prompt {\n    margin: 0 0 .85rem;\n    font-weight: 600;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n/* `.gvl-stage__text ul` (0,2,0) sets list-style: disc on prose lists in the\n   player, and a bare `.gvl-question__options` (0,1,0) loses to it — the options\n   rendered as a bulleted list. Scoped here so it wins wherever the question is\n   drawn, rather than only inside the stage. */\n.gvl-question__options,\n.gvl-stage__text .gvl-question__options {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    gap: .5rem;\n}\n\n/* Bootstrap owns how these look — colour, border, radius, hover, focus and the\n   disabled state all come from .btn and its variant. This only does the two\n   things Bootstrap has no opinion about: an answer runs the width of the\n   question, and its text reads from the left like a sentence rather than being\n   centred like a label. */\n.gvl-question__option {\n    display: block;\n    width: 100%;\n    text-align: left;\n    white-space: normal;\n}\n\n/* An answered question keeps its verdict visible rather than greying out — the\n   learner should still be able to read what they chose. */\n.gvl-question__option:disabled { opacity: 1; }\n.gvl-question__option.btn-success:disabled,\n.gvl-question__option.btn-danger:disabled { color: #fff; }\n.gvl-question__option.is-chosen { font-weight: 600; }\n\n.gvl-question__result { margin: .85rem 0 0; font-size: .9375rem; }\n.gvl-question__result.is-correct .gvl-question__verdict { color: #198754; font-weight: 700; }\n.gvl-question__result.is-wrong   .gvl-question__verdict { color: #dc3545; font-weight: 700; }\n.gvl-question__result.is-error   { color: #dc3545; }\n.gvl-question__feedback { color: var(--gvl-muted, #5c6b7a); }\n\n/* ── And as the author writes it ─────────────────────────────────────────── */\n.gvl-qedit {\n    padding: 1rem;\n    border: 1px dashed var(--gvl-rule, #cfd8e3);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #f7fafc);\n}\n\n.gvl-qedit__field { display: block; margin-bottom: .85rem; }\n\n.gvl-qedit__label {\n    display: block;\n    margin-bottom: .25rem;\n    font-size: .7rem;\n    font-weight: 600;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--gvl-accent, #3399cc);\n}\n\n.gvl-qedit__input {\n    width: 100%;\n    padding: .45rem .6rem;\n    border: 1px solid var(--gvl-rule, #cfd8e3);\n    border-radius: 4px;\n    background: var(--gvl-card, #fff);\n    font-size: .9375rem;\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-qedit__input:focus { outline: 2px solid var(--gvl-accent, #3399cc); outline-offset: -1px; }\n\n.gvl-qedit__options { list-style: none; margin: 0 0 .85rem; padding: 0; }\n\n.gvl-qedit__option {\n    display: grid;\n    grid-template-columns: auto 1fr auto;\n    grid-template-areas: \"pick text remove\" \"pick feedback remove\";\n    gap: .35rem .6rem;\n    align-items: center;\n    padding: .6rem;\n    margin-bottom: .5rem;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: 4px;\n    background: var(--gvl-card, #fff);\n}\n\n/* The correct one reads as correct at a glance, so an author scanning a long\n   question does not have to find the selected radio. */\n.gvl-qedit__option.is-correct { border-color: #198754; background: #f2faf5; }\n\n.gvl-qedit__pick {\n    grid-area: pick;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: .2rem;\n    cursor: pointer;\n}\n\n.gvl-qedit__picklabel {\n    font-size: .625rem;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n    color: var(--gvl-muted, #6c757d);\n    text-align: center;\n    max-width: 5.5rem;\n}\n\n.gvl-qedit__option.is-correct .gvl-qedit__picklabel { color: #198754; font-weight: 700; }\n\n/* Both selectors have to be able to beat each other's specificity, or the two\n   inputs land in the same grid cell and the second paints over the first —\n   which is exactly what happened: the option fields showed the FEEDBACK text\n   and the options themselves were underneath it, invisible.\n   `.gvl-qedit__option > .gvl-qedit__input` is 0,2,0 and plain\n   `.gvl-qedit__input--feedback` was 0,1,0, so the generic rule won. */\n.gvl-qedit__option > .gvl-qedit__input { grid-area: text; }\n.gvl-qedit__option > .gvl-qedit__input--feedback { grid-area: feedback; font-size: .8125rem; }\n.gvl-qedit__remove { grid-area: remove; }\n\n.gvl-qedit__foot { display: flex; align-items: flex-end; gap: 1rem; }\n.gvl-qedit__points { display: block; }\n.gvl-qedit__input--points { width: 5rem; }\n\n/* ── Short answer ────────────────────────────────────────────────────────── */\n\n/* The space belongs to the FOOT, not the textarea: putting it on both is how a\n   gap ends up doubled when the result message wraps onto its own line. */\n.gvl-question__write { margin-bottom: 0; }\n\n/* Outlined at rest, solid on hover.\n   The theme restyles Bootstrap's outline variant to its own green but gives it\n   no hover fill, so that part is ours. From var(--gvl-primary) rather than a\n   literal: the plugin's default is blue and each skin overrides it — a hardcoded\n   green here would be the one button that ignored the skin. */\n.gvl-question__submit:hover:not(:disabled),\n.gvl-question__submit:focus-visible:not(:disabled) {\n    background-color: var(--gvl-primary);\n    border-color: var(--gvl-primary);\n    color: #fff;\n}\n\n.gvl-question__foot {\n    display: flex;\n    align-items: center;\n    gap: .85rem;\n    flex-wrap: wrap;\n    margin-top: 1.25rem;\n}\n\n/* Their own words, read back. Set apart so it is obviously what WAS written\n   rather than somewhere still to write. */\n.gvl-question__answer {\n    margin: 0 0 .75rem;\n    padding: .75rem .9rem;\n    border-left: 3px solid var(--gvl-rule, #cfd8e3);\n    background: var(--gvl-card, #fff);\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n.gvl-question__answer > :first-child { margin-top: 0; }\n.gvl-question__answer > :last-child { margin-bottom: 0; }\n\n.gvl-question__result.is-pending .gvl-question__verdict { color: var(--gvl-muted, #5c6b7a); font-weight: 700; }\n.gvl-question__result.is-graded .gvl-question__verdict { color: #198754; font-weight: 700; }\n\n/* The author's dead preview of the answer box: visibly not for typing in. */\n.gvl-qedit__input--dead {\n    background: var(--gvl-tint, #f1f5f8);\n    color: var(--gvl-muted, #8a97a4);\n    cursor: not-allowed;\n}\n\n.gvl-qedit__note {\n    margin: 0;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-qedit--short .gvl-qedit__foot { align-items: flex-end; }\n\n/* \"No image\", first in the icon group and the default.\n   Set apart by a rule rather than by colour: it is not one of the icons, it is\n   the absence of them, and a reader scanning the row should be able to see\n   that before reading the tooltip. */\n.gvl-art__icon--none {\n    margin-right: 10px;\n    border-style: dashed;\n}\n\n.gvl-art__icon--none i { opacity: .55; }\n.gvl-art__icon--none.is-on i { opacity: 1; }\n\n/* ── Course Bundles, in Site Admin ──────────────────────────────────────────────\n   Borrows the Pages panel's row furniture rather than restating it: the two are\n   the same kind of thing — a short list that owns its own saving — and a second\n   set of nearly-identical rules is a second place for them to drift apart. */\n.gvl-bundles__list { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }\n\n.gvl-bundles__row {\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface);\n}\n\n.gvl-bundles__bar { display: flex; align-items: center; gap: 10px; padding: 10px 12px; }\n\n.gvl-bundles__count {\n    margin-left: auto;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n.gvl-bundles__editor {\n    border-top: 1px solid var(--gvl-line);\n    padding: 14px 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n}\n\n.gvl-bundles__editor[hidden] { display: none; }\n\n.gvl-bundles__courses { display: flex; flex-direction: column; gap: 6px; }\n\n.gvl-bundles__course {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 7px 10px;\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n}\n\n/* Tabular so the numbers line up as the list grows past nine. */\n.gvl-bundles__ordinal {\n    font-size: 12px;\n    font-variant-numeric: tabular-nums;\n    color: var(--gvl-muted);\n    min-width: 1.5em;\n}\n\n.gvl-bundles__coursename { flex: 1 1 auto; min-width: 0; }\n\n/* ── A dropdown you can search ───────────────────────────────────────────────\n   A button that opens a panel holding a search box above a scrolling list. The\n   panel is absolutely positioned so opening it does not push the rest of the\n   editor down — a list that shoves the thing you were reading off the screen is\n   worse than no list. */\n.gvl-picker { position: relative; }\n\n.gvl-picker__button { width: 100%; text-align: left; }\n\n.gvl-picker__panel {\n    position: absolute;\n    z-index: 5;\n    top: calc(100% + 4px);\n    left: 0;\n    right: 0;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    box-shadow: var(--gvl-shadow-modal, 0 10px 30px rgba(15, 20, 32, .18));\n    padding: 8px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n}\n\n.gvl-picker__panel[hidden] { display: none; }\n\n/* Bounded, and scrolls inside itself: a catalogue of ninety courses must not\n   make a dropdown taller than the modal containing it. */\n.gvl-picker__list {\n    max-height: 15rem;\n    overflow-y: auto;\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n}\n\n.gvl-picker__item {\n    display: flex;\n    align-items: baseline;\n    gap: 8px;\n    width: 100%;\n    text-align: left;\n    background: none;\n    border: 0;\n    border-radius: var(--gvl-radius);\n    padding: 7px 9px;\n    cursor: pointer;\n    font: inherit;\n    color: inherit;\n}\n\n.gvl-picker__item:hover,\n.gvl-picker__item:focus-visible { background-color: var(--gvl-surface-sunk); }\n\n.gvl-picker__itemtitle { flex: 1 1 auto; min-width: 0; }\n\n.gvl-picker__itemnote {\n    flex: 0 0 auto;\n    font-size: 11px;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n}\n\n.gvl-picker__empty { margin: 4px 2px; }\n\n/* A disabled arrow stays in place rather than disappearing: a row whose buttons\n   move depending on where it sits is a row you have to look at twice. */\n.gvl-bundles__course .gvl-pages__action[disabled] { opacity: .3; cursor: default; }\n\n/* A sentence above the sign-up form, shown only to somebody arriving on a seat\n   link — the one case where the form needs to explain itself. */\n.gvl-authpane__lede {\n    margin: 0 0 1rem;\n    font-size: .9rem;\n    line-height: 1.55;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* ── Invitations, in Site Admin ──────────────────────────────────────────────\n   Same furniture as the Course Bundles panel beside it: a short list of rows that\n   open. Its own class hooks alongside the shared ones, because two panels\n   answering one selector is how a click meant for one lands on the other. */\n.gvl-seats__list { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }\n\n.gvl-seats__new {\n    position: relative;\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n    padding: 14px;\n    margin-top: 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.gvl-seats__new[hidden] { display: none; }\n\n/* Out of the flow, so dismissing the form costs it no vertical space. It sits\n * beside the first field's label, which is short in every language this is in\n * so far; should one ever reach it, the label wraps rather than runs under. */\n/* Marked out from the fields around it: it is not another thing to fill in,\n * it is something the form has noticed. */\n.gvl-seats__openwarn {\n    border-left: 3px solid var(--gvl-warning, #b7791f);\n    padding-left: 10px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n}\n\n.gvl-seats__openwarn[hidden] { display: none; }\n\n.gvl-seats__cancel {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n}\n\n/* The LABEL yields to it, not the field. Giving the whole first block the\n * padding shortened its input by 24px, so one control in a stack of five\n * stopped short of the others — the sort of misalignment that is read as a\n * rendering fault rather than as room made for a button. */\n.gvl-seats__new > :first-child + * > .gvl-form__label { padding-right: 24px; }\n\n.gvl-seats__row {\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface);\n}\n\n.gvl-seats__bar { display: flex; align-items: center; gap: 10px; padding: 10px 12px; }\n\n/* Tabular, because \"3 of 5 left\" is the number somebody scans down the column\n   for and ragged digits make that harder than it needs to be. */\n.gvl-seats__count {\n    margin-left: auto;\n    font-size: 12px;\n    font-variant-numeric: tabular-nums;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n.gvl-seats__detail {\n    border-top: 1px solid var(--gvl-line);\n    padding: 14px 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.gvl-seats__detail[hidden] { display: none; }\n\n.gvl-seats__link { display: flex; gap: 8px; align-items: center; }\n.gvl-seats__link input { flex: 1 1 auto; min-width: 0; font-size: 13px; }\n\n.gvl-seats__people { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }\n\n.gvl-seats__people li {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 2px 10px;\n    align-items: baseline;\n    padding: 6px 10px;\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n}\n\n.gvl-seats__person { font-size: 13px; }\n.gvl-seats__when { font-size: 12px; color: var(--gvl-muted); margin-left: auto; }\n\n/* A withdrawn or finished invitation is not an error — it is an invitation\n   that has done its job, or been stopped on purpose. */\n.gvl-seats__row .gvl-pages__badge { flex: 0 0 auto; }\n\n/* A hint that is a warning rather than an explanation. Colour and weight only —\n   it sits where the ordinary hint sits, so moving it would make the two look\n   like different kinds of thing when they are both \"what this choice means\". */\n.gvl-form__hint.is-warning {\n    color: var(--gvl-danger, #a4292c);\n    font-weight: 500;\n}\n\n\n/* ── The page somebody buys places on ───────────────────────────────────────\n *\n * Reached from an email by a person who has never seen this site, so it is one\n * column and nothing else: what they are buying, what it costs, and the card.\n */\n.gvl-buy {\n    max-width: 34rem;\n    margin: 0 auto;\n    padding: 48px 20px 64px;\n}\n\n.gvl-buy__title {\n    margin: 0 0 12px;\n    font-size: 1.5rem;\n    line-height: 1.25;\n    text-wrap: balance;\n}\n\n.gvl-buy__lede {\n    margin: 0 0 12px;\n    color: var(--gvl-ink-soft, #555);\n}\n\n.gvl-buy__pay { margin-top: 28px; }\n\n.gvl-buy__label {\n    margin: 28px 0 6px;\n    font-weight: 600;\n}\n\n/* The link is read, copied and forwarded, so it wraps rather than running off\n * the side of a phone — and breaks anywhere, because a token has no spaces in\n * it to break at. */\n.gvl-buy__link {\n    margin: 0 0 16px;\n    padding: 12px 14px;\n    border: 1px solid var(--gvl-line, #ddd);\n    border-radius: var(--gvl-radius, 6px);\n    background-color: var(--gvl-surface-sunk, #f7f7f7);\n    overflow-wrap: anywhere;\n    word-break: break-all;\n}\n\n\n/* ── Importing a file of people ─────────────────────────────────────────── */\n\n.gvl-users__importform {\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n    padding: 14px;\n    margin-top: 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.gvl-users__importform[hidden] { display: none; }\n\n/* The problems, as a list somebody works down with their spreadsheet open\n * beside them — so it scrolls rather than pushing the button off the screen. */\n.gvl-users__importfound:not(:empty) {\n    max-height: 14rem;\n    overflow-y: auto;\n}\n\n.gvl-users__importbad { margin: 0 0 4px; }\n\n/* The number being agreed to. Not a warning colour — it is a fact, not a\n * problem — but not a footnote either. */\n.gvl-users__importcost {\n    margin: 10px 0 0;\n    font-weight: 600;\n    color: var(--gvl-title);\n}\n\n\n/* ── A reseller's customers ─────────────────────────────────────────────── */\n\n.gvl-customers__head { margin-bottom: 12px; }\n\n.gvl-customers__new {\n    /* For the dismiss X, which is taken out of the flow so closing the form\n       costs it no vertical space — the same shape as .gvl-seats__new. */\n    position: relative;\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface-sunk);\n    padding: 14px;\n    margin-bottom: 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.gvl-customers__new[hidden] { display: none; }\n\n.gvl-customers__cancel {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n}\n\n/* Two fields that are one answer — a first and last name — side by side, and\n   stacked when the panel is too narrow for two columns to be anything but two\n   cramped ones. */\n.gvl-form__pair {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 12px;\n}\n\n@media (max-width: 30rem) {\n    .gvl-form__pair { grid-template-columns: 1fr; }\n}\n\n/* The live answer about the address, on its own line under the field so that\n   one appearing does not shove the rest of the form down. Reserved height for\n   the same reason: the message changes as somebody types, and a row that grows\n   and shrinks under the cursor is worse than one that is simply there. */\n.gvl-address__verdict {\n    min-height: 1.25rem;\n    margin: 4px 0 0;\n}\n\n.gvl-address__verdict.is-ok    { color: var(--gvl-accent, #0fb07a); }\n.gvl-address__verdict.is-error { color: var(--gvl-danger, #b3261e); }\n\n/* The address field, drawn as the address it will become: the fixed halves sit\n   flush against the input so \"{name}.grapevinelearning.org\" reads as one\n   string rather than as a field with words near it. */\n.gvl-address {\n    display: flex;\n    align-items: stretch;\n    min-width: 0;\n}\n\n.gvl-address__fix {\n    display: flex;\n    align-items: center;\n    padding: 0 10px;\n    white-space: nowrap;\n    font-size: 14px;\n    color: var(--gvl-muted, #909193);\n    background: var(--gvl-surface-sunk, #f9f9fa);\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n}\n\n/* First child keeps its left corners, last child its right ones; the join in\n   the middle is square so the three read as one control. */\n.gvl-address > :first-child { border-top-right-radius: 0; border-bottom-right-radius: 0; }\n.gvl-address > :last-child  { border-top-left-radius: 0;  border-bottom-left-radius: 0; }\n.gvl-address > :not(:first-child) { margin-left: -1px; }\n\n.gvl-address__input {\n    min-width: 0;\n    flex: 1 1 auto;\n    /* Above the fixed halves so its focus ring is not clipped by them. */\n    position: relative;\n    z-index: 1;\n}\n\n.gvl-customers__row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 10px 12px;\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius);\n    background-color: var(--gvl-surface);\n    margin-bottom: 8px;\n}\n\n/* The name and what is on the site, stacked, so a row reads as one customer\n * rather than as three columns that happen to line up. */\n.gvl-customers__who {\n    flex: 1 1 auto;\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n}\n\n.gvl-customers__name {\n    font-weight: 600;\n    overflow-wrap: anywhere;\n}\n\n.gvl-customers__counts {\n    font-size: 0.875rem;\n    color: var(--gvl-ink-soft, #666);\n    font-variant-numeric: tabular-nums;\n}\n\n/* ── Grapevine's own billing area ─────────────────────────────────────────\n *\n * One card per site. Not a table: the useful reading is \"which of these needs\n * attention\", and a row of figures makes that a scan across columns rather\n * than a glance down a list.\n */\n.gvl-netsite {\n    border: 1px solid var(--gvl-line);\n    border-radius: 10px;\n    padding: 14px 16px;\n    margin: 0 0 10px;\n    background: var(--gvl-surface, #fff);\n}\n\n.gvl-netsite__head {\n    display: flex;\n    align-items: baseline;\n    flex-wrap: wrap;\n    gap: 6px 10px;\n}\n\n.gvl-netsite__name { font-size: 15.5px; }\n\n.gvl-netsite__flag {\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: .05em;\n    text-transform: uppercase;\n    padding: 2px 8px;\n    border-radius: 999px;\n    color: var(--gvl-danger, #b02a37);\n    background: var(--gvl-danger-tint, #fdeaec);\n}\n\n/* A site nobody has set up to bill is a fact, not a fault. */\n.gvl-netsite__flag--quiet {\n    color: var(--gvl-muted, #6c757d);\n    background: var(--gvl-tint, #f1f3f5);\n}\n\n.gvl-netsite__url {\n    font-size: 12.5px;\n    color: var(--gvl-muted, #6c757d);\n    margin-bottom: 10px;\n    overflow-wrap: anywhere;\n}\n\n.gvl-netsite__facts {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px 22px;\n    margin-bottom: 10px;\n}\n\n.gvl-netsite__fact { display: flex; flex-direction: column; }\n\n.gvl-netsite__label {\n    font-size: 10.5px;\n    font-weight: 700;\n    letter-spacing: .06em;\n    text-transform: uppercase;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* Figures line up whatever digits they happen to contain. */\n.gvl-netsite__value {\n    font-size: 14.5px;\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-netsite__actions { display: flex; flex-wrap: wrap; gap: 8px; }\n\n.gvl-netsite__form {\n    margin-top: 12px;\n    padding-top: 12px;\n    border-top: 1px solid var(--gvl-line);\n}\n\n/* ── A person's membership, in the Users list ─────────────────────────────\n *\n * Its own line under the head rather than another chip: it carries a date and\n * an action, and the chip row is for one-word facts.\n */\n.gvl-users__membership {\n    display: flex;\n    align-items: baseline;\n    flex-wrap: wrap;\n    gap: 4px 10px;\n    margin: 6px 0 0;\n    padding-top: 6px;\n    border-top: 1px dashed var(--gvl-line);\n    font-size: 13.5px;\n}\n\n.gvl-users__memberon { color: var(--gvl-text); font-weight: 600; }\n.gvl-users__memberoff { color: var(--gvl-muted, #6c757d); }\n\n.gvl-users__memberend {\n    padding: 0;\n    font-size: 13px;\n    color: var(--gvl-danger, #b02a37);\n}\n\n/* ── Billing History ───────────────────────────────────────────────────────\n   The third section of the Billing panel: what is owed and what has been\n   charged. A list rather than a table — it is read on a phone as often as a\n   desktop, and a four-column table at 360px is a horizontal scroll nobody\n   finds. */\n.gvl-billing__subheading {\n    margin: 1.75rem 0 .75rem;\n    font-weight: 600;\n    font-size: .8125rem;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-billing__owed {\n    margin: 0 0 1rem;\n    font-weight: 600;\n}\n\n.gvl-history {\n    margin: 0 0 1rem;\n    padding: 0;\n    list-style: none;\n}\n\n.gvl-history__item {\n    padding: .75rem 0;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-history__item:last-child { padding-bottom: 0; }\n\n/* The date and the amount on one line, the amount hard right. Laid out with\n   flex and a gap rather than with margins, so a long description wraps under\n   itself instead of pushing the amount off the edge. */\n.gvl-history__head {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: .5rem 1rem;\n}\n\n.gvl-history__what {\n    /* min-width: 0 so a long course title wraps inside the flex child rather\n       than setting the row's width — the same fix the network stat grid needed. */\n    min-width: 0;\n    flex: 1 1 auto;\n}\n\n.gvl-history__amount {\n    flex: 0 0 auto;\n    font-weight: 600;\n    /* Digits line up down the column, which is the whole point of a list of\n       amounts somebody is checking against a card statement. */\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-history__when {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-history__lines {\n    margin: .375rem 0 0;\n    padding-left: 1.125rem;\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-history__lines li { margin: .125rem 0; }\n\n.gvl-history__rest {\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-history__more { margin-top: .25rem; }\n\n/* The expiry on the card face, once it is close enough to matter. The date is\n   always printed; these states turn a fact nobody checks into one they do.\n\n   Colours follow what this stylesheet already does rather than new ones:\n   --gvl-warning is only ever a background or a border here (#e6a700 as text on\n   white is about 2:1 and unreadable), so the amber text colour is the one the\n   testmode pill already uses, and the expired state borrows the error\n   message's pair exactly. */\n.gvl-cardface__expiry.is-expiring { color: #7a5a00; font-weight: 600; }\n.gvl-cardface__expiry.is-expired  { color: var(--gvl-danger, #a4292c); font-weight: 600; }\n\n.gvl-cardface__warning {\n    margin: .5rem 0 0;\n    padding: .5rem .7rem;\n    border-radius: var(--gvl-radius, 6px);\n    font-size: .8125rem;\n    line-height: 1.5;\n    color: #7a5a00;\n    background: var(--gvl-warning-tint, #fff8e1);\n    border: 1px solid var(--gvl-warning, #e6a700);\n}\n\n.gvl-cardface__warning.is-expired {\n    color: var(--gvl-danger, #a4292c);\n    background: var(--gvl-danger-tint, #fdecea);\n    border-color: var(--gvl-danger, #a4292c);\n}\n\n/* ── Memberships (Sales) ───────────────────────────────────────────────────\n   A list of what the site sells, each row carrying what it covers, how long it\n   runs, what it costs and how many hold it. Follows the bundles panel's shape,\n   which is the neighbouring thing in the same group. */\n.gvl-memberships__list { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }\n\n.gvl-memberships__item {\n    display: flex;\n    align-items: flex-start;\n    flex-wrap: wrap;\n    gap: 8px 12px;\n    padding: 12px;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    background: var(--gvl-card, #fff);\n}\n\n/* A retired plan is still listed — people hold it — but it is plainly not on\n   sale, so it recedes rather than disappearing. */\n.gvl-memberships__item.is-retired { opacity: .72; }\n\n/* min-width: 0 so a long membership name wraps inside the flex child rather\n   than setting the row's width and pushing the buttons off the edge. */\n.gvl-memberships__main { flex: 1 1 16rem; min-width: 0; }\n\n.gvl-memberships__title { margin: 0 0 2px; font-weight: 600; }\n\n.gvl-memberships__badge {\n    margin-left: 8px;\n    padding: .1rem .4rem;\n    border-radius: 999px;\n    font-size: .6875rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: #7a5a00;\n    background: var(--gvl-warning-tint, #fff8e1);\n    border: 1px solid var(--gvl-warning, #e6a700);\n}\n\n.gvl-memberships__meta,\n.gvl-memberships__holders {\n    margin: 0;\n    font-size: .8125rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-memberships__actions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    flex: 0 0 auto;\n}\n\n.gvl-memberships__form {\n    margin-top: 14px;\n    padding: 14px;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    background: var(--gvl-tint, #eef4f8);\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n/* [hidden] needs saying: the flex display above would otherwise win. */\n.gvl-memberships__form[hidden],\n.gvl-memberships__field[hidden] { display: none; }\n\n.gvl-memberships__field { display: flex; flex-direction: column; gap: 4px; }\n\n.gvl-memberships__label {\n    font-size: .8125rem;\n    font-weight: 600;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-memberships__formactions { display: flex; gap: 8px; }\n\n/* The grant box opens inside the row it belongs to, so there is never a\n   question about which membership is being granted. */\n.gvl-memberships__grant {\n    flex: 1 0 100%;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 8px;\n    margin-top: 8px;\n    padding-top: 10px;\n    border-top: 1px solid var(--gvl-rule, #e7ecf1);\n}\n\n.gvl-memberships__grant input { flex: 1 1 14rem; min-width: 0; }\n.gvl-memberships__grant .gvl-form__hint { flex: 1 0 100%; margin: 0; }\n\n.gvl-memberships__note.is-error { color: var(--gvl-danger, #a4292c); }\n\n/* Giving a membership from the person's own row: the picker and the button sit\n   with the state they change, under it rather than beside it, so a long plan\n   name does not push the row's other columns about. */\n.gvl-users__memberpick {\n    display: block;\n    margin: .25rem 0;\n    max-width: 14rem;\n    font-size: .8125rem;\n}\n\n.gvl-users__membergive { padding-left: 0; }\n\n/* The X in a form's corner, wherever a form opens inside a panel. The forms\n   are position: relative so the button hangs in their own top-right rather\n   than the modal's. */\n.gvl-users__addform,\n.gvl-memberships__form { position: relative; }\n\n.gvl-users__addcancel,\n.gvl-memberships__cancel {\n    position: absolute;\n    top: .65rem;\n    right: .65rem;\n    /* Above the fields, so it stays clickable where a control runs full width. */\n    z-index: 1;\n}\n\n/* The Add a person form opens with a row of two unlabelled inputs, so there is\n   no heading for the X to sit beside and it landed ON the Last name field —\n   measured in the browser at 56-72 against a field starting at 66. Its own band\n   at the top, rather than shortening a field and leaving one control narrower\n   than the rest. */\n.gvl-users__addform { padding-top: 2.75rem; }\n\n/* Room for it on the LABEL, not on the field.\n   Padding on the whole first field shortened its input by 28px and left one\n   control visibly narrower than every other — and for nothing: measured in the\n   browser, the X ends at 577 and the first input begins at 588, so it was never\n   in the way. The label beside it is what could collide, and only if it is\n   long. */\n.gvl-users__addform > :not(.btn-close):first-of-type .gvl-settings__label,\n.gvl-memberships__form .gvl-memberships__field:first-of-type .gvl-memberships__label {\n    padding-right: 1.75rem;\n}\n\n/* ── Memberships offered for sale ──────────────────────────────────────────\n   The [gvl_memberships] shortcode, on a page the site writes itself. Styled\n   here rather than in gvl-platform, which ships no CSS of its own so that a\n   site restyling the LMS restyles its checkout with it. */\n.gvl-plans {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));\n    gap: 1rem;\n    margin: 1.5rem 0;\n}\n\n.gvl-plans__plan {\n    /* min-width: 0 so a long plan name wraps inside its track instead of\n       widening it and breaking the grid. */\n    min-width: 0;\n    padding: 1.25rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, .5rem);\n    background: var(--gvl-card, #fff);\n}\n\n.gvl-plans__name { margin: 0 0 .35rem; font-size: 1.125rem; }\n\n.gvl-plans__price {\n    margin: 0;\n    font-size: 1.75rem;\n    font-weight: 600;\n    line-height: 1.1;\n    font-variant-numeric: tabular-nums;\n}\n\n.gvl-plans__term {\n    margin: .15rem 0 .9rem;\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n.gvl-plans__says { margin-bottom: 1rem; font-size: .9375rem; }\n\n.gvl-plans__buy { width: 100%; }\n\n/* The card form opens inside the plan it belongs to, so there is never a\n   question about which membership is being paid for. */\n.gvl-plans__pay { margin-top: 1rem; }\n.gvl-plans__pay[hidden] { display: none; }\n\n/* One plan on the page is a single column, not a lonely card in a grid. */\n.gvl-plans:has(.gvl-plans__plan:only-child) { grid-template-columns: minmax(0, 24rem); }\n\n/* The same offer in a course sidebar: one column, no descriptions, and the\n   grid's minmax would otherwise force a 16rem track into a narrower column. */\n.gvl-plans__offer { margin-top: 1.25rem; }\n\n.gvl-plans--compact { grid-template-columns: minmax(0, 1fr); gap: .75rem; margin: 0; }\n.gvl-plans--compact .gvl-plans__plan { padding: 1rem; }\n.gvl-plans--compact .gvl-plans__name { font-size: 1rem; }\n.gvl-plans--compact .gvl-plans__price { font-size: 1.375rem; }\n\n/* ── Analytics, inside the gradebook ───────────────────────────────────────\n   Two views of one course: the register, and the shape of it. The tabs sit in\n   the modal header beside the title, because that is where the thing they\n   switch is named. */\n.gvl-gradebook__views {\n    display: flex;\n    gap: .25rem;\n    margin-left: auto;\n    margin-right: .75rem;\n}\n\n.gvl-gradebook__view {\n    border: 1px solid transparent;\n    background: transparent;\n    color: var(--gvl-muted, #5c6b7a);\n    font-weight: 500;\n}\n\n.gvl-gradebook__view.is-on {\n    background: var(--gvl-tint, #eef4f8);\n    border-color: var(--gvl-line-strong, #e7e8e9);\n    color: var(--gvl-heading, #1f2d3d);\n}\n\n/* The reports stack in one column rather than a grid: each is read, not\n   compared with the one beside it, and a grid would set a width that the\n   widest table then fights. */\n.gvl-stats__block { margin-bottom: 2rem; }\n\n.gvl-stats__heading {\n    margin: 0 0 .25rem;\n    font-weight: 600;\n    font-size: .9375rem;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n/* Why the report is worth looking at, said once, under the heading. A table\n   of numbers with no sentence over it is a table somebody has to interpret\n   before they can use it. */\n.gvl-stats__why {\n    margin: 0 0 .75rem;\n    max-width: 62ch;\n    font-size: .875rem;\n    color: var(--gvl-muted, #5c6b7a);\n}\n\n/* Wide tables scroll in their own box, so the modal body never does. */\n.gvl-stats__scroll { overflow-x: auto; }\n\n.gvl-stats__table {\n    width: 100%;\n    max-width: 44rem;\n    border-collapse: collapse;\n    font-size: .9375rem;\n}\n\n.gvl-stats__table th {\n    text-align: left;\n    padding: .4rem .75rem .4rem 0;\n    border-bottom: 1px solid var(--gvl-rule, #e7ecf1);\n    font-size: .75rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .04em;\n    color: var(--gvl-muted, #5c6b7a);\n    white-space: nowrap;\n}\n\n.gvl-stats__table td {\n    padding: .4rem .75rem .4rem 0;\n    border-bottom: 1px solid var(--gvl-rule-soft, #f1f4f7);\n}\n\n/* Figures right-aligned and tabular, so a column of them can be scanned and\n   compared rather than read one at a time. */\n.gvl-stats__table .gvl-stats__num {\n    text-align: right;\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n}\n\n.gvl-stats__table th:not(:first-child) { text-align: right; }\n\n\n/* ── One look for every panel that opens to add or edit ────────────────────\n *\n * Reviewed 2026-10-23, after Grapevine → Sites → Set plan turned out to open a\n * white area with no way out of it. Six panels, and only the two built that\n * week had both halves of the convention.\n *\n * The two halves, and why each matters:\n *\n *   1. A MUTED GROUND, so the thing that just opened is visibly a thing that\n *      just opened. On white it reads as part of the page it appeared in, and\n *      a reader cannot tell what the Save button applies to.\n *   2. An X in the corner, because the button that opened it is off screen by\n *      the time somebody has scrolled down a form, and that is exactly when a\n *      way out is looked for.\n *\n * Written as one rule over all of them rather than per panel: the next one\n * somebody adds inherits it by picking any of these class names, and a\n * convention that has to be remembered is one that will not be.\n */\n.gvl-seats__form,\n.gvl-customers__form,\n.gvl-netsite__form,\n.gvl-bundles__editor {\n    position: relative;\n    margin-top: .75rem;\n    padding: 1.25rem;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-tint, #eef4f8);\n}\n\n/* The netsite form had a top border doing the work a panel should do. With a\n   ground and a box it is a line through the middle of a filled area. */\n.gvl-netsite__form { border-top: 1px solid var(--gvl-line-strong, #e7e8e9); }\n\n.gvl-seats__cancel,\n.gvl-customers__cancel,\n.gvl-netsite__cancel,\n.gvl-bundles__cancel {\n    position: absolute;\n    top: .65rem;\n    right: .65rem;\n    z-index: 1;\n}\n\n/* Room for the X beside the first label, not by shortening the first field —\n   which was the mistake made and measured on the membership form: it left one\n   control 28px narrower than the rest for no reason, since the X sits above\n   the inputs anyway. */\n.gvl-seats__form > :first-child:not(.btn-close),\n.gvl-customers__form > :first-child:not(.btn-close),\n.gvl-netsite__form > :first-child:not(.btn-close),\n.gvl-bundles__editor > :first-child:not(.btn-close) { padding-right: 1.75rem; }\n\n/* ── The charts ────────────────────────────────────────────────────────────\n   Drawn above the numbers they summarise, never instead of them. */\n.gvl-stats__chart { margin: 0 0 .75rem; max-width: 44rem; }\n.gvl-stats__chart svg { display: block; overflow: visible; }\n\n.gvl-stats__bar { fill: var(--gvl-primary, #0b50d8); }\n\n/* The value at the end of its own bar, so two bars can be compared without a\n   trip to the axis and back. */\n.gvl-stats__value {\n    font-size: 11px;\n    font-variant-numeric: tabular-nums;\n    fill: var(--gvl-muted, #5c6b7a);\n}\n\n/* d3 writes axis text as SVG <text>, which inherits nothing useful from the\n   page — so the colour and size are set here rather than left to a default\n   that is black on every theme. */\n.gvl-stats__axis text { font-size: 11px; fill: var(--gvl-muted, #5c6b7a); }\n.gvl-stats__axis line,\n.gvl-stats__axis path { stroke: var(--gvl-rule, #e7ecf1); }\n\n.gvl-stats__nodraw { margin-bottom: 1rem; }\n\n/* Bar labels, drawn rather than left to d3's axis so they can be cut to the\n   room there is. The full text is on a <title>, which is the tooltip and what\n   a screen reader reads. */\n.gvl-stats__tick { font-size: 11px; fill: var(--gvl-muted, #5c6b7a); }\n\n/* Scope and range, in the analytics modal header beside the title: they say\n   what the whole screen is about rather than belonging to any one report. */\n.gvl-stats__controls {\n    display: flex;\n    gap: .5rem;\n    margin-left: auto;\n    margin-right: .75rem;\n    flex-wrap: wrap;\n}\n\n.gvl-stats__controls .form-select { width: auto; min-width: 9rem; }\n.gvl-stats__controls [hidden] { display: none !important; }\n\n/* ── A brand-new site, saying so ────────────────────────────────────────\n *\n * Tokens with fallbacks throughout: this renders on whatever theme the new\n * site wears, and the one certainty is that it is not this file's to choose.\n */\n.gvl-newsite {\n    background: var(--gvl-primary, #94309f);\n    color: #fff;\n}\n.gvl-newsite__inner {\n    max-width: 1240px; margin-inline: auto;\n    padding: 13px 24px;\n    display: flex; align-items: center; gap: 16px;\n}\n.gvl-newsite__words { display: grid; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.gvl-newsite__words strong { font-size: 15.5px; }\n.gvl-newsite__words span { font-size: 14px; opacity: .92; }\n.gvl-newsite__close {\n    flex: none; width: 30px; height: 30px;\n    display: grid; place-items: center;\n    color: #fff; text-decoration: none;\n    font-size: 20px; line-height: 1;\n    border: 1.5px solid rgba(255, 255, 255, .45); border-radius: 50%;\n}\n.gvl-newsite__close:hover { background: rgba(255, 255, 255, .16); color: #fff; }\n.gvl-newsite__close:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }\n\n@media (max-width: 600px) {\n    .gvl-newsite__inner { padding: 12px 16px; align-items: start; }\n    .gvl-newsite__words strong { font-size: 15px; }\n}\n\n/* ── Site Admin → API (assets/js/gvl-grapevine-api.js) ─────────────────────\n * Bootstrap does the cards, badges, alerts and buttons; these are only the\n * arrangements it has no class for. */\n.gvl-apikey__list { display: grid; gap: .75rem; margin-bottom: 1.5rem; }\n.gvl-apikey__head { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: .5rem; }\n.gvl-apikey__value { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: .5rem; }\n/* A key is one long word; without this it widens the modal on a phone. */\n.gvl-apikey__value code,\n.gvl-apikey code { word-break: break-all; }\n.gvl-apikey__new { margin-top: 1.5rem; }\n\n/* gvl-2026 */\n/* Grapevine Learning 2026 — the skin.\n *\n * Loaded AFTER the plugin's gvl-lms.css (the dependency is declared in\n * inc/enqueue.php, so the order is guaranteed rather than incidental).\n *\n * This file is the whole reskin, and it has exactly two jobs:\n *   1. override the plugin's design tokens\n *   2. style the chrome the plugin does not render — top bar, footer, and the\n *      indent that keeps them clear of the fixed course rail\n *\n * It deliberately contains no rules for .gvl-modrow, .gvl-lessoncard,\n * .gvl-player or any other LMS component. If a component needs changing, the\n * change belongs in a token — and if no token fits, the plugin is missing one.\n */\n\n/* ── 1. Tokens ──────────────────────────────────────────────────────────────\n * PLACEHOLDER PALETTE. Derived from the green (#62cb31) in the legacy theme,\n * darkened to #3c8526 so it clears 4.5:1 on white for body-sized text. Swap\n * these six values for the real brand palette; nothing else needs to change. */\n:host {\n    --gvl-primary:       #3c8526;\n    --gvl-primary-dark:  #2a5e1a;\n    --gvl-primary-light: #9dd487;\n    --gvl-primary-wash:  #eff8ea;\n    --gvl-accent:        #0b7f8f;   /* progress / completion, distinct from primary */\n\n    /* A modal floats on a 93%-white, blurred backdrop, so the ordinary rule\n       colours — #f1f2f3 and #e7e8e9 — leave it with no visible edge at all.\n       This is deliberately darker than any line used on the page itself. */\n    --gvl-modal-edge:    #d2d5d9;\n\n    --gvl-radius-lg:     0.75rem;\n\n    /* Chrome measurements the plugin's rail also reads. */\n    --gvl-sidebar-w:     300px;\n    --gvl-topbar-h:      90px;\n}\n\n/* The vendored eDocs base used to hardcode its own blue behind !important in\n * 173 places. Rather than override each one, the two vendored files now\n * reference these tokens directly (see the header comment in style.css), so\n * setting the variables above is genuinely all a reskin has to do.\n */\n\n\n/* ── 2. Top bar ─────────────────────────────────────────────────────────────\n * The eDocs template positions its top-bar nav absolutely and leaves the bar\n * position:relative, so it scrolls away. Rebuilt as a sticky flex row, which\n * also lets the brand, the page context and the nav sit on one baseline\n * without magic offsets. */\n.top-page-header {\n    position: sticky;\n    top: 0;\n    z-index: 900;\n    display: flex;\n    align-items: center;\n    gap: 28px;\n    height: var(--gvl-topbar-h);\n    padding: 0 40px;\n    background-color: var(--gvl-surface);\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n.gvl-topbar-brand {\n    flex: 0 0 auto;\n    display: flex;\n    align-items: center;\n}\n\n.gvl-topbar-brand img,\n.gvl-wordmark {\n    display: inline-flex;\n    align-items: center;\n    gap: 12px;\n    font-family: var(--gvl-font);\n    font-size: 18px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    text-decoration: none;\n}\n\n.gvl-pagenav {\n    display: inline-flex;\n    align-items: center;\n}\n\n.gvl-pagenav__toggle {\n    padding: 4px 6px;\n    margin-left: 5px;\n    margin-right: 10px;\n    font-size: 10px;\n    line-height: 1;\n    color: var(--gvl-muted);\n    background: none;\n    border: 0;\n    cursor: pointer;\n}\n\n.gvl-pagenav__toggle:hover { color: var(--gvl-primary); }\n\n/* The children open under the page they belong to.\n *\n * The wrapper starts at the page's name and the caret is at its right end, so\n * aligning to the wrapper puts the menu under the name — which is the thing\n * these items are children OF. Anchored to the caret, the list appeared to\n * belong to the page after it. */\n.gvl-pagenav .dropdown-menu {\n    left: 0;\n    right: auto;\n    margin-top: 10px;\n}\n\n/* ── The pages on a narrow bar ───────────────────────────────────────────────\n   Below the breakpoint the inline links are hidden and this takes their place.\n   Both are in the markup; CSS decides which is on screen, because the server\n   cannot know the width and a breakpoint guessed from a user agent is the\n   oldest wrong answer in the trade. */\n.gvl-pagenav__burger {\n    display: none;\n    padding: 8px 10px;\n    font-size: 16px;\n    line-height: 1;\n    color: var(--gvl-title);\n    background: none;\n    border: 0;\n    border-radius: var(--gvl-radius);\n    cursor: pointer;\n}\n\n.gvl-pagenav__burger:hover,\n.gvl-pagenav__burger[aria-expanded=\"true\"] {\n    color: var(--gvl-primary);\n    background-color: var(--gvl-primary-wash);\n}\n\n/* Anchored to the bar rather than to the button: the panel is the width of the\n   screen's edge-to-edge content, not of the control that opened it. */\n.gvl-pagenav__panel {\n    position: absolute;\n    top: var(--gvl-topbar-h);\n    left: 0;\n    right: 0;\n    z-index: 950;\n    display: flex;\n    flex-direction: column;\n    padding: 8px 0;\n    background-color: var(--gvl-surface);\n    border-bottom: 1px solid var(--gvl-line);\n    box-shadow: 0 8px 20px rgba(0, 0, 0, .08);\n}\n\n.gvl-pagenav__panel-item {\n    padding: 12px 20px;\n    font-size: 15px;\n    font-weight: 500;\n    color: var(--gvl-title);\n}\n\n.gvl-pagenav__panel-item:hover {\n    color: var(--gvl-primary);\n    background-color: var(--gvl-surface-sunk);\n}\n\n/* Nesting shown by indent and a rule, the same way the Pages list shows it. */\n.gvl-pagenav__panel-item--child {\n    padding-left: 38px;\n    font-weight: 400;\n    color: var(--gvl-text);\n}\n\n.gvl-wordmark:hover {\n    color: var(--gvl-primary);\n}\n\n/* The bar is a fixed height, so the logo is constrained by HEIGHT and lets its\n   width fall where it may — a wordmark and a square badge are both common, and\n   sizing by width would make one of them tiny and the other enormous. The cap on\n   width is a backstop against a very wide image pushing the name off screen.\n\n   51px inside a 90px bar: large enough to carry the identity, with ~19px of air\n   above and below so the bar still reads as a bar rather than as a frame around\n   the logo. The width cap moves with the height — leaving it at 180px would mean\n   a wide wordmark hit the cap first and never actually got bigger. */\n.gvl-wordmark__logo {\n    display: block;\n    height: 51px;\n    width: auto;\n    max-width: 270px;\n    object-fit: contain;\n}\n\n/* A rule between the two, so a logo that already contains words does not read as\n   running into the site name. */\n.gvl-wordmark--has-logo .gvl-wordmark__name {\n    padding-left: 12px;\n    border-left: 1px solid var(--gvl-line);\n}\n\n@media (max-width: 575px) {\n\n    /* On a narrow bar the logo is the thing that identifies the site at a\n       glance, and the name is what runs out of room first. */\n    .gvl-wordmark__logo { height: 36px; max-width: 120px; }\n\n    /* The name is not cut.\n     *\n     * It used to be capped at 9ch with an ellipsis, which on a narrow phone\n     * rendered \"Grapevi…\" — a site identifying itself by half a word. The room\n     * is bought by shrinking the logo and the type instead, because a smaller\n     * title still says who you are and a truncated one does not. */\n    .gvl-wordmark {\n        font-size: 16px;\n        gap: 8px;\n    }\n\n    .gvl-wordmark--has-logo .gvl-wordmark__name {\n        padding-left: 8px;\n        white-space: nowrap;\n    }\n}\n\n/* Undo the template's absolute positioning; the flex row handles placement. */\n.top-page-header .top-header-nav {\n    position: static;\n    flex: 0 0 auto;\n    margin-left: auto;\n    display: flex;\n    align-items: center;\n    gap: 26px;\n    height: auto;\n    line-height: 1;\n}\n\n.top-page-header .top-nav-item {\n    margin: 0;\n    line-height: 1;\n    font-size: 15px;\n    color: var(--gvl-title);\n}\n\n.top-page-header .top-nav-item:hover,\n.top-page-header .top-nav-item.is-current {\n    color: var(--gvl-primary);\n}\n\n.top-page-header .top-page-button {\n    margin-left: 4px;\n    padding: 12px 26px !important;\n}\n\n\n/* ── The account menu ────────────────────────────────────────────────────────\n * Who is signed in, and the few things they can do. Signing out used to be the\n * only control up here, which made the most destructive action in the bar the\n * easiest one to hit by accident.\n *\n * Quiet on purpose: this is wayfinding, not a call to action, and a solid\n * button competed with the one the page is actually asking you to press. */\n.gvl-account { margin-left: 4px; }\n\n.gvl-account__toggle {\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    padding: 6px 10px 6px 6px;\n    font-size: 15px;\n    line-height: 1;\n    color: var(--gvl-title);\n    background: none;\n    border: 1px solid transparent;\n    border-radius: 999px;\n    cursor: pointer;\n}\n\n.gvl-account__toggle:hover,\n.gvl-account__toggle[aria-expanded=\"true\"] {\n    border-color: var(--gvl-line);\n    background-color: var(--gvl-surface-sunk);\n}\n\n/* The icon sits underneath and the Gravatar is requested with d=blank, so a\n   person with no Gravatar gets a transparent image and the icon shows through.\n   See gvl_2026_account_menu() — it saves asking Gravatar, over the network, on\n   every page render, just to decide which of the two to draw. */\n.gvl-account__avatar {\n    position: relative;\n    display: block;\n    width: 28px;\n    height: 28px;\n    flex: 0 0 auto;\n    border-radius: 50%;\n    overflow: hidden;\n    background-color: var(--gvl-surface-sunk);\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-account__avatar .fas {\n    position: absolute;\n    inset: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 13px;\n}\n\n.gvl-account__avatar img {\n    position: relative;\n    display: block;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    object-fit: cover;\n}\n\n.gvl-account__name {\n    max-width: 14ch;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.gvl-account__caret {\n    font-size: 10px;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* Right-aligned in CSS, not by Popper.\n *\n * The markup asks for this with Bootstrap's .dropdown-menu-end, and in the\n * vendored 5.0.0-beta3 that class sets one custom property — --bs-position:end\n * — which is acted on by a rule keyed to [data-bs-popper], an attribute\n * Bootstrap's JavaScript adds when it positions the menu. That JavaScript is\n * gone; gvl-ui.js replaced it and only toggles .show. So the class was inert,\n * the menu hung from the toggle's LEFT edge, and because the toggle sits at the\n * right end of the bar a 200px menu ran past the screen — widening the document\n * itself on a phone, which is why the page could be scrolled sideways. */\n.gvl-account__menu {\n    right: 0;\n    left: auto;\n    min-width: 200px;\n    margin-top: 8px;\n    padding: 6px;\n    border: 1px solid var(--gvl-line);\n    border-radius: 10px;\n    box-shadow: 0 8px 24px rgba(0, 0, 0, .1);\n}\n\n.gvl-account__menu .dropdown-item {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 9px 12px;\n    border-radius: 6px;\n    font-size: 15px;\n}\n\n/* The label over a group of entries.\n *\n * Indented to the same column as the item LABELS rather than the icons, so the\n * heading reads as a column header over the words it describes instead of\n * floating in the icon gutter. 12px padding + 16px icon + 10px gap = 38px. */\n.gvl-account__menu .gvl-account__heading {\n    padding: 8px 12px 4px 38px;\n    margin: 0;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* Tighter than Bootstrap's default: inside a 6px-padded menu a 1rem rule\n * either side reads as a gap rather than a separator. */\n.gvl-account__menu .dropdown-divider {\n    margin: 6px 4px;\n    border-top-color: var(--gvl-line);\n    opacity: 1;\n}\n\n/* A fixed box, so the labels line up whatever width each glyph happens to be. */\n.gvl-account__menu .dropdown-item > .fas,\n.gvl-account__menu .dropdown-item > .fab {\n    width: 16px;\n    flex: 0 0 auto;\n    text-align: center;\n    font-size: 14px;\n    color: var(--gvl-muted, #6c757d);\n}\n\n.gvl-account__menu .dropdown-item:hover > .fas,\n.gvl-account__menu .dropdown-item:hover > .fab { color: inherit; }\n\n/* Last, and visibly a different kind of thing from the navigation above it. */\n.gvl-account__signout,\n.gvl-account__signout > .fas { color: var(--gvl-danger, #b3261e); }\n\n.gvl-account__signout:hover,\n.gvl-account__signout:focus {\n    color: var(--gvl-danger, #b3261e);\n    background-color: rgba(179, 38, 30, .08);\n}\n\n\n/* ── Modals ──────────────────────────────────────────────────────────────────\n * The vendored base gives .modal-content `border: none` and a 5%-opacity\n * shadow. That is a reasonable choice over a dark backdrop — and this backdrop\n * is white at 93% with a 20px blur, so the result was a white card on a white\n * ground with nothing to say where one ended and the other began.\n *\n * The backdrop is left alone: the pale, blurred page behind is the look this\n * theme wants. What the card needed was an edge of its own.\n *\n * Two shadows rather than one. The wide, soft one lifts the card off the page;\n * the tight, darker one does the work the border does on a screen where shadows\n * are turned down. Neither alone reads as \"floating above\" on white.\n */\n.modal-content {\n    border: 1px solid var(--gvl-modal-edge);\n    box-shadow:\n        0 24px 64px rgba(17, 20, 24, .16),\n        0 4px 12px rgba(17, 20, 24, .07);\n}\n\n/* The header and footer rails sit against that edge, so they take a line with a\n   little more presence than the ones used inside the body. */\n.modal-content .modal-header { border-bottom-color: var(--gvl-line-strong); }\n.modal-content .modal-footer { border-top-color: var(--gvl-line-strong); }\n\n/* ── 4. Footer ──────────────────────────────────────────────────────────────\n * Selector is `footer.gvl-footer`, not `.gvl-footer`, deliberately. The\n * vendored base carries `.doc-body footer { padding-left: 380px;\n * padding-right: 80px }` — sized for its fixed 300px sidebar, which this page\n * no longer has — and that out-specifies a single class. The result was a\n * footer indented 380px on the left and 80px on the right, holding a gap for\n * a rail that is not there. */\nfooter.gvl-footer {\n    background-color: var(--gvl-surface-sunk);\n    border-top: 1px solid var(--gvl-line);\n    padding: 28px 40px;\n}\n\n.gvl-footer__inner {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 20px;\n    flex-wrap: wrap;\n}\n\n/* Hard right, with or without a footer menu beside it.\n   margin-left:auto rather than text-align, because the credit is the only\n   child when no menu is assigned and there is nothing for space-between to\n   push it away from — it would simply sit on the left. The order swap keeps\n   the menu on the left when there is one. */\n.gvl-footer__credit {\n    order: 2;\n    margin: 0 0 0 auto;\n    font-size: 13px;\n    text-align: right;\n    color: var(--gvl-muted);\n}\n\n/* The credit carries a link now, so it needs the same restraint as the menu\n   beside it — without this the one anchor in the footer renders in the default\n   link colour against muted text and reads as an error. */\n.gvl-footer__credit a {\n    color: inherit;\n    text-decoration: underline;\n    text-underline-offset: 2px;\n}\n\n.gvl-footer__credit a:hover,\n.gvl-footer__credit a:focus-visible {\n    color: var(--gvl-primary);\n}\n\n.gvl-footer__nav { order: 1; }\n\n.gvl-footer__nav {\n    display: flex;\n    gap: 22px;\n    flex-wrap: wrap;\n}\n\n.gvl-footer__nav a {\n    font-size: 13px;\n    color: var(--gvl-muted);\n}\n\n.gvl-footer__nav a:hover {\n    color: var(--gvl-primary);\n}\n\n\n/* ── 5. Ordinary pages ──────────────────────────────────────────────────────\n * Everything that is not a course: posts, pages, search, 404. The course page\n * gets its layout from the plugin. */\n.gvl-page {\n    max-width: 820px;\n    margin: 0 auto;\n    padding: 56px 24px 80px;\n}\n\n.gvl-page__title {\n    font-family: var(--gvl-font);\n    font-size: 34px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.2;\n    margin: 0 0 8px;\n}\n\n.gvl-page__meta {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    margin: 0 0 32px;\n}\n\n.gvl-page__body {\n    font-size: 16px;\n    line-height: 1.8;\n    color: var(--gvl-text);\n}\n\n.gvl-page__body ul,\n.gvl-page__body ol {\n    padding-left: 1.3em;\n    margin: 0 0 1em;\n}\n\n.gvl-page__body ul { list-style: disc; }\n.gvl-page__body ol { list-style: decimal; }\n\n\n/* ── 6. Course listing ──────────────────────────────────────────────────────\n * A grid of course cards. Reuses the plugin's card tokens so the listing and\n * the course page read as one system. */\n.gvl-courses {\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 56px 40px 80px;\n}\n\n.gvl-courses__title {\n    font-family: var(--gvl-font);\n    font-size: 32px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    margin: 0 0 34px;\n}\n\n.gvl-courses__grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n    gap: 26px;\n}\n\n.gvl-coursecard {\n    display: flex;\n    flex-direction: column;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    box-shadow: var(--gvl-shadow);\n    overflow: hidden;\n    text-decoration: none;\n    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n}\n\n.gvl-coursecard:hover {\n    transform: translateY(-4px);\n    border-color: var(--gvl-primary-light);\n    box-shadow: var(--gvl-shadow-lift);\n}\n\n.gvl-coursecard__media {\n    aspect-ratio: 16 / 9;\n    background-color: var(--gvl-primary-wash);\n    background-size: cover;\n    background-position: center;\n}\n\n.gvl-coursecard__body {\n    padding: 20px 22px 24px;\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n    flex: 1 1 auto;\n}\n\n.gvl-coursecard__title {\n    font-size: 17px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.35;\n    margin: 0;\n}\n\n.gvl-coursecard__excerpt {\n    font-size: 14px;\n    color: var(--gvl-text);\n    line-height: 1.65;\n    margin: 0;\n}\n\n.gvl-coursecard__meta {\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin: 4px 0 0;\n}\n\n\n/* ── 7. Accessibility ───────────────────────────────────────────────────── */\n.screen-reader-text {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    margin: -1px;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0;\n}\n\n.gvl-skip:focus {\n    position: fixed;\n    top: 12px;\n    left: 12px;\n    z-index: 100000;\n    width: auto;\n    height: auto;\n    clip: auto;\n    margin: 0;\n    padding: 12px 20px;\n    background-color: var(--gvl-surface);\n    color: var(--gvl-primary);\n    border-radius: var(--gvl-radius);\n    box-shadow: var(--gvl-shadow-lift);\n}\n\n:focus-visible {\n    outline: 2px solid var(--gvl-primary);\n    outline-offset: 2px;\n}\n\n\n/* ── 8. Responsive ──────────────────────────────────────────────────────── */\n@media (max-width: 991px) {\n\n    .top-page-header {\n        padding: 0 20px;\n        gap: 16px;\n    }\n\n    .top-page-header .top-header-nav {\n        gap: 16px;\n    }\n\n    footer.gvl-footer {\n        padding: 24px 20px;\n    }\n\n    .gvl-courses {\n        padding: 36px 20px 60px;\n    }\n}\n\n@media (max-width: 575px) {\n\n    .top-page-header .top-nav-item {\n        display: none;   /* the account button stays */\n    }\n\n    /* The pages do not disappear with them — they move behind the hamburger.\n       Before this they were simply gone on a phone, which made a page somebody\n       had written unreachable from the device most likely to be reading it. */\n    .gvl-pagenav__burger { display: inline-flex; }\n\n    /* Everything the hamburger stands in for: the inline links, the wrappers\n       that hold them, and the carets that opened their children.\n       \n       These sat in the 400px block for a while — a stray brace when that block\n       was added closed this one early, and between 401px and 575px the bar\n       showed a hamburger AND a caret. Hiding the wrapper is what matters: the\n       caret is its child, and hiding only the links leaves the button behind\n       with nothing beside it. */\n    .gvl-pagenav-set .gvl-pagenav,\n    .gvl-pagenav-set .gvl-pagenav__toggle,\n    .gvl-pagenav-set > .top-nav-item { display: none !important; }\n\n    /* The bar did not fit. Measured at 390px: the brand and the nav came to\n       360px, plus 40px of padding and a 16px gap, against a 390px viewport —\n       so the home page scrolled sideways on a phone, and had been doing so\n       before the hamburger was added to it.\n\n       Three changes, in order of how much they buy: the signed-in name goes\n       (the avatar still says who you are, and it is the widest thing in the\n       bar), then the padding, then the gap. */\n    .gvl-account__name { display: none; }\n\n    .top-page-header {\n        padding: 0 12px;\n        gap: 8px;\n    }\n\n    /* Lets the brand give way rather than forcing the row wider than the\n       screen; its name already truncates. */\n    .gvl-topbar-brand { min-width: 0; }\n\n    /* And the signed-OUT bar, which has a different widest thing in it: the\n       Sign in button carries .btn's 9.25rem minimum and 38px of side padding,\n       which overflowed a 320px screen by 61px. Nothing else on the bar needs\n       it to be that wide. */\n    .top-page-header .top-page-button {\n        min-width: 0;\n        padding: 12px 18px !important;\n    }\n}\n\n/* Smaller again. At 320px the logo and the site name cannot share the row with\n   a Sign in button, and something has to give: the name goes, because a site\n   that has uploaded a logo has already said who it is and the logo is the half\n   that survives being small. A site with no logo keeps its name. */\n@media (max-width: 400px) {\n\n    /* Smaller still, and still the whole name. */\n    .gvl-wordmark { font-size: 14px; gap: 6px; }\n\n    .gvl-wordmark--has-logo .gvl-wordmark__name { padding-left: 6px; }\n\n    .gvl-wordmark__logo { height: 30px; max-width: 90px; }\n\n    .top-page-header {\n        padding: 0 8px;\n        gap: 6px;\n    }\n\n    /* The Sign in button becomes its icon.\n     *\n     * Keeping the site's name whole costs room, and this is where it comes\n     * from: a person-shaped icon in the top right corner is the most\n     * universally understood control on the web, and the word beside it was\n     * the widest thing competing with the title. */\n    .top-page-header .top-page-button span { display: none; }\n\n    .top-page-header .top-page-button {\n        padding: 12px 14px !important;\n    }\n\n    .top-page-header .top-page-button .mr-5 { margin-right: 0 !important; }\n}\n\n/* Above the breakpoint the panel never opens, whatever its hidden state. */\n@media (min-width: 576px) {\n    .gvl-pagenav__panel { display: none !important; }\n}\n\n\n/* ── Admin bar ──────────────────────────────────────────────────────────────\n * A sticky top:0 sits under WordPress's fixed admin bar for signed-in staff. */\n.admin-bar .top-page-header {\n    top: 32px;\n}\n\n@media screen and (max-width: 782px) {\n    .admin-bar .top-page-header {\n        top: 46px;\n    }\n}\n\n\n/* ── Home page ──────────────────────────────────────────────────────────────\n * Modelled on the eDocs help-center layout: a hero with a search, then the\n * \"Knowledgebase\" promo-box cards repurposed as course cards.\n *\n * The card classes below are the theme's, not the plugin's — a course card in\n * a listing is chrome, not an LMS component, and nothing in the player depends\n * on it. */\n.gvl-hero {\n    position: relative;\n    padding: 64px 24px 68px;\n    text-align: center;\n    background-color: var(--gvl-primary-wash);\n    background-size: cover;\n    background-position: center;\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n/* A featured image behind the hero would otherwise swallow the text. */\n.gvl-hero--image::before {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(to bottom, rgba(255, 255, 255, .92), rgba(255, 255, 255, .82));\n}\n\n.gvl-hero__inner {\n    position: relative;\n    max-width: 760px;\n    margin: 0 auto;\n}\n\n.gvl-hero__title {\n    font-family: var(--gvl-font);\n    font-size: clamp(30px, 5vw, 46px);\n    font-weight: 600;\n    line-height: 1.15;\n    color: var(--gvl-title);\n    margin: 0 0 16px;\n}\n\n.gvl-hero__lede {\n    font-size: 17px;\n    line-height: 1.7;\n    color: var(--gvl-text);\n    margin: 0 0 12px;\n}\n\n.gvl-hero__meta {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    flex-wrap: wrap;\n    margin: 14px 0 0;\n    font-size: 13px;\n    color: var(--gvl-muted);\n}\n\n\n\n/* ── Course cards ───────────────────────────────────────────────────────── */\n/* Less air at the top than when a heading sat here: the hero ends and the\n   courses begin. */\n.gvl-section {\n    padding: 32px 0 88px;\n}\n\n.gvl-section__title {\n    font-family: var(--gvl-font);\n    font-size: 28px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    text-align: center;\n    margin: 0 0 12px;\n}\n\n.gvl-section__lede {\n    text-align: center;\n    color: var(--gvl-muted);\n    font-size: 15px;\n    margin: 0 0 42px;\n}\n\n.gvl-coursebox {\n    /* The containing block for .stretched-link's overlay — without it the\n       overlay escapes to whatever is positioned further up and the \"card\" that\n       is clickable is the whole column, or the whole page. */\n    position: relative;\n\n    /* The card's own padding, declared here rather than inherited from the\n       vendored .promo-box, because the course image bleeds through it to the\n       card's edges and has to know by how much. Two rules sharing one number is\n       how a full-bleed image ends up with a hairline of background down one\n       side after somebody retunes a template nobody reads. */\n    --gvl-card-pad-y: 40px;\n    --gvl-card-pad-x: 32px;\n    padding: var(--gvl-card-pad-y) var(--gvl-card-pad-x);\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    margin-bottom: 0;\n    border: 1px solid var(--gvl-line);\n    border-radius: var(--gvl-radius-lg);\n    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n    cursor: pointer;\n}\n\n/* Keyboard users land on the title link, whose focus ring sits on the text. The\n   card takes the ring instead, because the card is what activating it opens. */\n.gvl-coursebox:focus-within {\n    border-color: var(--gvl-primary);\n    box-shadow: 0 0 0 3px var(--gvl-primary-wash);\n}\n\n.gvl-coursebox__title .stretched-link:focus-visible { outline: none; }\n\n/* The call to action is inert — the pointer is over the stretched link's overlay,\n   never over this — so the CARD's hover drives it.\n   \n   Styled here rather than borrowing .btn-outline-primary, which the vendored base\n   pins with `background-color: transparent !important`. Matching that would mean\n   !important on every line of the hover state, and an !important war over a\n   decorative element is a poor trade for three declarations. */\n.gvl-coursebox__cta {\n    display: inline-flex;\n    align-items: center;\n    padding: .375rem .875rem;\n    font-size: .875rem;\n    font-weight: 600;\n    line-height: 1.5;\n    color: var(--gvl-primary);\n    background-color: transparent;\n    border: 1px solid var(--gvl-primary);\n    border-radius: var(--gvl-radius);\n    pointer-events: none;\n    transition: color .2s ease, background-color .2s ease;\n}\n\n.gvl-coursebox:hover .gvl-coursebox__cta,\n.gvl-coursebox:focus-within .gvl-coursebox__cta {\n    color: #fff;\n    background-color: var(--gvl-primary);\n}\n\n.gvl-coursebox:hover {\n    transform: translateY(-4px);\n    border-color: var(--gvl-primary-light);\n    box-shadow: var(--gvl-shadow-lift);\n}\n\n.gvl-coursebox__icon {\n    color: var(--gvl-primary);\n}\n\n/* Sized to the icon's footprint so a course with art and one without produce\n   identical card geometry — a grid of two different card shapes reads as a\n   mistake. */\n/* A course's own picture, filling the top of the card edge to edge.\n   Full width and 16:9 rather than an icon-sized square: a photograph shrunk to\n   54px is a smudge, and the point of letting somebody upload one is that it\n   says something an icon cannot. The same shape the Course image control\n   previews, so what they choose is what they get.\n   Pulled out through the card's padding on three sides so it meets the border\n   with no gap, and rounded to match it — one pixel tighter than the card's own\n   radius, which is the border's width, or a sliver of card shows at each\n   corner. */\n.gvl-coursebox__thumb {\n    display: block;\n    width: auto;\n    aspect-ratio: 16 / 9;\n    margin: calc(var(--gvl-card-pad-y) * -1) calc(var(--gvl-card-pad-x) * -1) 24px;\n    border-radius: calc(var(--gvl-radius-lg) - 1px) calc(var(--gvl-radius-lg) - 1px) 0 0;\n    background-color: var(--gvl-primary-wash);\n    background-size: cover;\n    background-position: center;\n}\n\n.gvl-coursebox__title {\n    font-family: var(--gvl-font);\n    line-height: 1.35;\n    margin: 0 0 12px;\n}\n\n.gvl-coursebox__title a {\n    color: var(--gvl-title);\n    text-decoration: none;\n}\n\n.gvl-coursebox__title a:hover {\n    color: var(--gvl-primary);\n}\n\n.gvl-coursebox__excerpt {\n    font-size: 14px;\n    line-height: 1.65;\n    color: var(--gvl-text);\n    margin: 0 0 20px;\n}\n\n.gvl-coursebox__modules {\n    margin: 0 0 24px;\n    padding: 0;\n}\n\n.gvl-coursebox__modules li {\n    display: flex;\n    align-items: baseline;\n    gap: 10px;\n    font-size: 14px;\n    line-height: 1.5;\n    color: var(--gvl-text);\n    margin-bottom: 10px;\n}\n\n.gvl-coursebox__modules li:last-child {\n    margin-bottom: 0;\n}\n\n.gvl-coursebox__modules i {\n    flex: 0 0 auto;\n    font-size: 11px;\n    color: var(--gvl-primary-light);\n}\n\n.gvl-coursebox__more {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    padding-left: 21px;\n}\n\n/* Pushed to the bottom so every card's button sits on the same line, whatever\n   the excerpt and module count above it. */\n.gvl-coursebox__foot {\n    margin-top: auto;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    flex-wrap: wrap;\n}\n\n.gvl-coursebox__count {\n    font-size: 12px;\n    color: var(--gvl-muted);\n}\n\n.gvl-empty-courses {\n    text-align: center;\n    color: var(--gvl-muted);\n    padding: 40px 0;\n}\n\n\n/* ── Course facts ───────────────────────────────────────────────────────────\n * The label/value rows the live CCI catalogue shows on each card: enrollment,\n * price, dates. Rendered as a <dl> because that is what a list of label/value\n * pairs is, and laid out as a grid so the labels line up across cards. */\n.gvl-coursefacts {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 14px 26px;\n    margin: 0 0 22px;\n    padding: 16px 0;\n    border-top: 1px solid var(--gvl-line);\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n.gvl-coursefacts__row {\n    min-width: 0;\n}\n\n.gvl-coursefacts dt {\n    font-size: 10px;\n    font-weight: 600;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    margin: 0 0 4px;\n}\n\n.gvl-coursefacts dd {\n    font-size: 14px;\n    font-weight: 500;\n    color: var(--gvl-title);\n    margin: 0;\n    line-height: 1.3;\n}\n\n/* A course outside its availability window still lists, but says so rather\n   than letting someone click in and find a locked door. */\n.gvl-coursebox--closed {\n    opacity: .72;\n}\n\n.gvl-coursebox__badge {\n    display: inline-block;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n    color: var(--gvl-muted);\n    background-color: var(--gvl-surface-sunk);\n    border: 1px solid var(--gvl-line-strong);\n    padding: 3px 10px;\n    border-radius: 100px;\n}\n\n\n/* ── Management affordances ─────────────────────────────────────────────────\n * Shown only to people who can author courses. They no longer link into\n * wp-admin — that is closed to anyone without manage_options now — so creating\n * and copying both happen in modals on the front end. */\n/* It stands where the lede would be, so it sits the same way the lede does:\n   centred, with the same gap under it before the cards begin. It used to be a\n   dashed box above the heading captioned \"You can manage courses\", which spent a\n   banner telling somebody something they already knew about themselves. */\n.gvl-newcourse-control {\n    display: block;\n    text-align: center;\n    margin: 0;\n}\n\n.gvl-coursebox__status {\n    display: inline-block;\n    font-size: 10px;\n    font-weight: 600;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    color: var(--gvl-primary-dark);\n    background-color: var(--gvl-primary-wash);\n    padding: 3px 9px;\n    border-radius: 100px;\n    margin: 0 0 12px;\n    text-align: center;\n\n    /* letter-spacing adds its space AFTER the last letter too, so the text in\n       a pill sized to its own content sits one notch left of centre. Pulling\n       the box in by the same amount puts it back; without this the badge reads\n       as slightly misaligned and nothing on the page explains why. */\n    text-indent: .1em;\n}\n\n.gvl-coursebox__actions {\n    display: inline-flex;\n    align-items: center;\n    gap: 14px;\n}\n\n.gvl-coursebox__edit {\n    font-size: 13px;\n    color: var(--gvl-muted);\n    white-space: nowrap;\n}\n\n.gvl-coursebox__edit:hover {\n    color: var(--gvl-primary);\n}\n\n\n/* ── Copy a Course ──────────────────────────────────────────────────────── */\n.gvl-copymodal {\n    border: 0;\n    border-radius: var(--gvl-radius-lg);\n}\n\n/* The vendored base sets .modal-header to display:block with 2.5rem padding,\n * which drops Bootstrap's close button below the title instead of beside it.\n * Restore the flex row for this modal only — other modals on the site are the\n * base's business. */\n.gvl-copymodal .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    padding: 22px 24px 16px;\n    border-bottom: 1px solid var(--gvl-line);\n}\n\n.gvl-copymodal .modal-body {\n    padding: 20px 24px 24px;\n}\n\n.gvl-copymodal .modal-title {\n    font-family: var(--gvl-font);\n    font-size: 18px;\n    font-weight: 600;\n    color: var(--gvl-title);\n}\n\n.gvl-copymodal__lede {\n    font-size: 13px;\n    line-height: 1.6;\n    color: var(--gvl-muted);\n    margin: 0 0 18px;\n}\n\n/* Where a copy is going, above the list of what to copy. Only drawn when there\n   is more than one answer. */\n.gvl-copydest {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    align-items: center;\n    gap: 8px 12px;\n    margin: 0 0 16px;\n}\n\n.gvl-copydest label {\n    font-size: 13px;\n    font-weight: 600;\n    margin: 0;\n    white-space: nowrap;\n}\n\n/* The destination is a searchable dropdown now (gvlCombobox in gvl-2026.js),\n   so it occupies the select's column and the separate filter box is gone. */\n.gvl-combo {\n    position: relative;\n    grid-column: 2;\n    min-width: 0;\n\n    /* The modal centres its text (.gvl-newcourse-control), and a list of site\n       names centred against ragged edges is unreadable as a column — the same\n       reason .gvl-copyterms below states its alignment rather than inheriting\n       it. Set on the wrapper so the input, the rows and the empty line all get\n       it from one place. */\n    text-align: left;\n}\n\n.gvl-combo__input { width: 100%; }\n\n/* Over the modal, not inside its flow: a list that pushed the terms checkbox\n   down every time it opened would move the thing somebody is reaching for. */\n.gvl-combo__list {\n    position: absolute;\n    z-index: 5;\n    top: calc(100% + 4px);\n    left: 0;\n    right: 0;\n    max-height: 15rem;\n    overflow-y: auto;\n    margin: 0;\n    padding: 4px;\n    list-style: none;\n    background: #fff;\n    border: 1px solid var(--gvl-line-strong, #e7e8e9);\n    border-radius: 6px;\n    box-shadow: 0 8px 24px rgba(16, 24, 40, .12);\n}\n\n.gvl-combo__option {\n    padding: 7px 10px;\n    border-radius: 4px;\n    font-size: 14px;\n    line-height: 1.35;\n    cursor: pointer;\n}\n\n/* One highlight, driven by the keyboard, and the pointer moves it rather than\n   adding a second — two highlights at once is two answers to \"what does Enter\n   do\". */\n.gvl-combo__option.is-active { background: var(--gvl-primary-wash, #eef3fe); }\n\n.gvl-combo__option.is-chosen { font-weight: 600; }\n\n.gvl-combo__empty {\n    padding: 7px 10px;\n    font-size: 14px;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* Who keeps the money, under the destination it depends on.\n *\n * Left-aligned against the modal's centred text, because a checkbox whose label\n * is centred sits a long way from its own box — and the two have to read as one\n * control for the tick to mean anything. */\n.gvl-copyterms {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    align-items: start;\n    gap: 2px 8px;\n    text-align: left;\n    margin: 0 0 16px;\n}\n\n.gvl-copyterms[hidden] { display: none; }\n\n.gvl-copyterms input { margin-top: 3px; }\n\n.gvl-copyterms label {\n    font-size: 13px;\n    font-weight: 600;\n    margin: 0;\n}\n\n.gvl-copyterms .gvl-form__hint {\n    grid-column: 2;\n    font-size: 12px;\n    line-height: 1.5;\n    color: var(--gvl-muted);\n}\n\n.gvl-copylist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.gvl-copylist li + li {\n    margin-top: 8px;\n}\n\n.gvl-copyrow {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    width: 100%;\n    text-align: left;\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line-strong);\n    border-radius: var(--gvl-radius);\n    padding: 14px 16px;\n    font-family: var(--gvl-font);\n    cursor: pointer;\n    transition: border-color .15s ease, background-color .15s ease;\n}\n\n.gvl-copyrow:hover {\n    border-color: var(--gvl-primary);\n    background-color: var(--gvl-primary-wash);\n}\n\n.gvl-copyrow__title {\n    display: block;\n    font-size: 15px;\n    font-weight: 600;\n    color: var(--gvl-title);\n    line-height: 1.35;\n}\n\n.gvl-copyrow__meta {\n    display: block;\n    font-size: 12px;\n    color: var(--gvl-muted);\n    margin-top: 3px;\n}\n\n.gvl-copyrow__action {\n    flex: 0 0 auto;\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--gvl-primary);\n    white-space: nowrap;\n}\n\n.gvl-copyrow__action i {\n    font-size: 11px;\n    margin-left: 4px;\n}\n\n\n/* ── Copy a Course: search ──────────────────────────────────────────────── */\n.gvl-copysearch {\n    position: relative;\n    margin-bottom: 14px;\n}\n\n.gvl-copysearch i {\n    position: absolute;\n    left: 14px;\n    top: 50%;\n    transform: translateY(-50%);\n    font-size: 12px;\n    color: var(--gvl-muted);\n    pointer-events: none;\n}\n\n.gvl-copysearch input {\n    width: 100%;\n    height: 42px;\n    padding: 0 14px 0 36px;\n    font-family: var(--gvl-font);\n    font-size: 14px;\n    color: var(--gvl-text);\n    background-color: var(--gvl-surface);\n    border: 1px solid var(--gvl-line-strong);\n    border-radius: var(--gvl-radius);\n}\n\n.gvl-copysearch input:focus {\n    outline: none;\n    border-color: var(--gvl-primary-light);\n    box-shadow: 0 0 0 3px var(--gvl-primary-wash);\n}\n\n.gvl-copylist__empty {\n    font-size: 14px;\n    color: var(--gvl-muted);\n    text-align: center;\n    padding: 20px 0;\n    margin: 0;\n}\n\n.gvl-copylist__empty[hidden] {\n    display: none;\n}\n\n/* [hidden] must win over the flex/list display the rows otherwise take. */\n.gvl-copylist [data-gvl-copy-item][hidden] {\n    display: none !important;\n}\n\n\n@media (max-width: 575px) {\n    /* A long display name must not put the menu back off the edge. */\n    .gvl-account__menu {\n        max-width: calc(100vw - 1.5rem);\n    }\n}\n\n/* ── Course search and paging on the home page ──────────────────────────────\n   The home page is the catalogue now, so it needs the two things a catalogue\n   needs: a way to look for something, and a way through the rest of it. */\n\n.gvl-coursesearch {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin: 0 0 28px;\n}\n\n/* The field and its icon, as one object. The icon is positioned against this\n   rather than against the form: absolute with no `top` resolves to \"where a\n   flex item would have sat\", so when the form wrapped, the icon wrapped too and\n   appeared beside the button on the second row. Centred on its own wrapper it\n   tracks the input's height, with no measurement here to keep in step with the\n   input's padding. */\n.gvl-coursesearch__field {\n    position: relative;\n    display: flex;\n    /* Basis 0, not auto. With flex-wrap on, a line is broken using each item's\n       HYPOTHETICAL size — its basis — and only then do the items on that line\n       shrink. An `auto` basis is the field's content width, so the field and\n       its button were measured as too wide together and the button was pushed\n       to a second row before any shrinking was considered. A zero basis lets\n       both sit on one line, and the field then grows into whatever the button\n       leaves. */\n    flex: 1 1 0;\n    min-width: 0;\n    /* Matched to the button's height rather than set to a number: the button\n       takes its height from the button padding, and the two are now side by\n       side at every width, where before they were stacked on small screens and\n       a few pixels of difference did not show. */\n    align-self: stretch;\n}\n\n.gvl-coursesearch__icon {\n    position: absolute;\n    left: 16px;\n    top: 50%;\n    transform: translateY(-50%);\n    color: var(--gvl-muted, #6c757d);\n    font-size: 14px;\n    pointer-events: none;\n}\n\n.gvl-coursesearch input[type=\"search\"] {\n    flex: 1 1 auto;\n    min-width: 0;\n    padding: 12px 16px 12px 42px;\n    border: 1px solid var(--gvl-rule, #e7ecf1);\n    border-radius: var(--gvl-radius, 6px);\n    background: var(--gvl-card, #fff);\n    font-family: inherit;\n    font-size: .9375rem;\n}\n\n.gvl-coursesearch input[type=\"search\"]:focus {\n    outline: none;\n    border-color: var(--gvl-primary, #0b50d8);\n    box-shadow: 0 0 0 3px var(--gvl-primary-wash, rgba(11, 80, 216, .12));\n}\n\n.gvl-coursesearch .btn { flex: 0 0 auto; }\n\n.gvl-coursesearch__clear {\n    flex: 0 0 auto;\n    font-size: .875rem;\n    color: var(--gvl-muted, #6c757d);\n}\n\n/* Previous / Next. The page count sits between them so the two controls are\n   not a pair of buttons with nothing saying where you are. */\n.gvl-coursepager {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    margin-top: 32px;\n}\n\n.gvl-coursepager__count {\n    font-size: .875rem;\n    color: var(--gvl-muted, #6c757d);\n    font-variant-numeric: tabular-nums;\n}\n\n/* A disabled end of the range stays in place rather than disappearing, so the\n   controls do not shuffle sideways as you page. */\n.gvl-coursepager .is-disabled {\n    opacity: .45;\n    cursor: default;\n    pointer-events: none;\n}\n\n@media (max-width: 575px) {\n    /* The field and its button stay on one line. Giving the input 100% used to\n       push the button onto a row of its own, which reads as two unrelated\n       controls and costs a whole line to say nothing — the button is three\n       words wide and the field can simply be narrower.\n\n       Only the Clear link wraps: it is the one part that is not needed to run\n       a search, and it appears only after one has been run. */\n    .gvl-coursesearch { flex-wrap: wrap; gap: 8px; }\n    .gvl-coursesearch .btn { padding-left: 14px; padding-right: 14px; }\n    .gvl-coursesearch__clear { flex: 1 0 100%; }\n    .gvl-coursepager { gap: 10px; }\n}\n\n\n/* ── Show / hide inactive courses ───────────────────────────────────────────\n   Rendered only for someone who has inactive courses to reveal, so it is never\n   a control that does nothing. Quiet by default and marked when it is on —\n   a listing showing unpublished work should say so. */\n\n.gvl-inactive-toggle {\n    margin: -12px 0 22px;\n    font-size: .875rem;\n}\n\n.gvl-inactive-toggle__link {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    color: var(--gvl-muted, #6c757d);\n    text-decoration: none;\n}\n\n.gvl-inactive-toggle__link:hover {\n    color: var(--gvl-primary, #0b50d8);\n    text-decoration: underline;\n}\n\n.gvl-inactive-toggle__link.is-on {\n    color: var(--gvl-primary, #0b50d8);\n    font-weight: 600;\n}\n\n.gvl-inactive-toggle__link i { font-size: 12px; }\n",
    "font_faces": "@font-face{font-family:\"Font Awesome 5 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.eot\");src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.woff2\") format(\"woff2\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.woff\") format(\"woff\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.ttf\") format(\"truetype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\")}\n@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:400;font-display:block;src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.eot\");src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.woff2\") format(\"woff2\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.woff\") format(\"woff\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.ttf\") format(\"truetype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\")}\n@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:900;font-display:block;src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.eot\");src:url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.woff2\") format(\"woff2\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.woff\") format(\"woff\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.ttf\") format(\"truetype\"),url(\"https://api-sample.grapevinelearning.org/wp-content/themes/grapevine-2026/assets/webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\")}\n",
    "links": [
        "https://fonts.googleapis.com/css2?family=Poppins:wght@100;300;400;500;600&display=swap"
    ]
}

This description

This OpenAPI document, which answers without a key.

This description of the API

GET /openapi.json

Called with: No key

curl "https://your-site.grapevinelearning.org/wp-json/grapevine/v1/openapi.json"

Response from the sample site 200

{
    "openapi": "3.1.0",
    "info": {
        "title": "Grapevine API",
        "version": "v1",
        "description": "Additive changes only within v1."
    },
    "servers": [
        {
            "url": "https://api-sample.grapevinelearning.org/wp-json/grapevine/v1"
        }
    ],
    "tags": [
        {
            "name": "Courses",
            "description": "The catalog, a course's outline and offers, and creating, changing and trashing courses."
        },
        {
            "name": "Modules",
            "description": "Renaming, trashing and restoring the modules that group a course's lessons."
        },
        {
            "name": "Lessons",
            "description": "Reading a lesson, answering and completing it, and editing it and its questions."
        },
        {
            "name": "Learners",
            "description": "Linking your own users to learners on the site, and signing them in on your pages."
        },
        {
            "name": "Signing learners in",
            "description": "Sign-in with an emailed code, for pages and apps with no server of their own."
        },
        {
            "name": "Enrollments",
            "description": "Enrolling and withdrawing your learners, one at a time or in bulk."
        },
        {
            "name": "Checkout",
            "description": "Taking a learner's payment for a priced course on your own page."
        },
        {
            "name": "The signed-in learner",
            "description": "What a learner session or OAuth token reads: the learner, their courses and their results."
        },
        {
            "name": "Results",
            "description": "Recording and correcting a learner's result on one question."
        },
        {
            "name": "Teaching",
            "description": "Grading from your website: confirming teachers, their gradebooks and the marking queue."
        },
        {
            "name": "People",
            "description": "The people on the site and their roles, as Site Admin's Users panel shows them."
        },
        {
            "name": "Webhooks and events",
            "description": "Being told when something happens, and reading what happened."
…