From cd2c1d715dab7ec1115e81fcac1577b7f267e167 Mon Sep 17 00:00:00 2001 From: Danny van der Sluijs Date: Wed, 19 Aug 2026 20:46:07 +0200 Subject: [PATCH] chore: Stop tracking the _site build output The CI workflow builds the site from source on every push to main (hydephp/action runs `php hyde build` then uploads _site), so the committed output is never read by the deploy. Tracking it only costs us churn and merge conflicts on generated HTML, and lets the two diverge: #19 merged docs source without rebuilding _site, and the output differs depending on whether SITE_URL is set at build time. Worse, the stale files actually reach production. Hyde's CleanSiteDirectory pre-build task calls Filesystem::findFiles() with the default $recursive = false, so it only clears top-level _site/*.html and never _site/docs/. Committed files in subdirectories survive the clean and get uploaded, which is why /docs/docs/community-guide.html and /docs/docs/configuration.html are still live despite having no source in _docs/. Untracking them removes them from the next deploy. Uncomment the /_site rule that was already present in .gitignore and drop the directory from the index. The local build output is left on disk untouched; use `php hyde serve` to preview builds. Co-Authored-By: Claude Opus 5 --- .gitignore | 2 +- _site/404.html | 48 --- _site/docs/advanced-topics.html | 486 ------------------------ _site/docs/check-mode.html | 443 ---------------------- _site/docs/community-guide.html | 216 ----------- _site/docs/configuration.html | 216 ----------- _site/docs/contributors.html | 348 ----------------- _site/docs/getting-started.html | 422 --------------------- _site/docs/search.html | 459 ----------------------- _site/docs/search.json | 1 - _site/docs/strict-mode.html | 520 -------------------------- _site/index.html | 240 ------------ _site/media/app.css | 1 - _site/media/app.js | 1 - _site/media/json-schema-logo-blue.svg | 16 - _site/media/php-logo.svg | 96 ----- _site/sitemap.xml | 2 - 17 files changed, 1 insertion(+), 3516 deletions(-) delete mode 100644 _site/404.html delete mode 100644 _site/docs/advanced-topics.html delete mode 100644 _site/docs/check-mode.html delete mode 100644 _site/docs/community-guide.html delete mode 100644 _site/docs/configuration.html delete mode 100644 _site/docs/contributors.html delete mode 100644 _site/docs/getting-started.html delete mode 100644 _site/docs/search.html delete mode 100644 _site/docs/search.json delete mode 100644 _site/docs/strict-mode.html delete mode 100644 _site/index.html delete mode 100644 _site/media/app.css delete mode 100644 _site/media/app.js delete mode 100644 _site/media/json-schema-logo-blue.svg delete mode 100644 _site/media/php-logo.svg delete mode 100644 _site/sitemap.xml diff --git a/.gitignore b/.gitignore index 398efa3..d0c8784 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ .env -# /_site +/_site diff --git a/_site/404.html b/_site/404.html deleted file mode 100644 index ee8a278..0000000 --- a/_site/404.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - 404 - Page not found - - - - - - - - - - - - - - - -
-
-
-
- 404 -
- -
- -

- Sorry, the page you are looking for could not be found. -

- - - - -
- -
- -
-
-
-
- - diff --git a/_site/docs/advanced-topics.html b/_site/docs/advanced-topics.html deleted file mode 100644 index a6b2d88..0000000 --- a/_site/docs/advanced-topics.html +++ /dev/null @@ -1,486 +0,0 @@ - - - - - -JSON Schema for PHP - Advanced topics - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Advanced topics

-
-
-

Validation using schema on disk#

-

Validation of a JSON document can be done using a schema located on disk.

-
<?php
-
-$data = json_decode(file_get_contents('data.json'));
-
-// Validate
-$validator = new JsonSchema\Validator;
-$validator->validate($data, (object)['$ref' => 'file://' . realpath('schema.json')]);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

Validation using inline schema#

-

Validation of a JSON document can be done using a inline schema. This requires some additional setup of the schema storage

-
<?php
-
-$data = json_decode(file_get_contents('data.json'));
-$jsonSchemaAsString = <<<'JSON'
-{
-  "type": "object",
-  "properties": {
-    "name": { "type": "string"},
-    "email": {"type": "string"}
-  },
-  "required": ["name","email"]
-}
-JSON;
-
-$jsonSchema = json_decode($jsonSchemaAsString);
-$schemaStorage = new JsonSchema\SchemaStorage();
-$schemaStorage->addSchema('internal://mySchema', $jsonSchema);
-$validator = new JsonSchema\Validator(
-    new JsonSchema\Constraints\Factory($schemaStorage)
-);
-$validator->validate($data, $jsonSchema);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

Validation using online schema#

-

Validation of a JSON document can be done using a schema hosted online. The validator will automatically fetch the schema from the provided URL using its built-in UriRetriever.

-
<?php
-
-$data = json_decode(file_get_contents('data.json'), false);
-
-// Validate against an online schema by passing the URL as a $ref
-$validator = new JsonSchema\Validator();
-$validator->validate($data, (object)['$ref' => 'https://example.com/your/schema.json']);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

If you need more control over how the remote schema is retrieved (e.g. to cache it or pre-load it), you can use UriRetriever and SchemaStorage explicitly:

-
<?php
-
-use JsonSchema\SchemaStorage;
-use JsonSchema\Validator;
-use JsonSchema\Constraints\Factory;
-use JsonSchema\Uri\UriRetriever;
-
-$schemaUrl = 'https://example.com/your/schema.json';
-
-// Fetch the remote schema
-$retriever = new UriRetriever();
-$schema = $retriever->retrieve($schemaUrl);
-
-// Register the fetched schema so that any $ref inside it resolves correctly
-$schemaStorage = new SchemaStorage($retriever);
-$schemaStorage->addSchema($schemaUrl, $schema);
-
-$validator = new Validator(new Factory($schemaStorage));
-
-$data = json_decode(file_get_contents('data.json'), false);
-$validator->validate($data, $schema);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

Validating using strict mode#

-

Strict mode validates your document with the constraint set of a specific JSON Schema draft, instead of the -draft-agnostic default. It supports Draft 6, Draft 7 and Draft 2019-09.

-

See Strict mode for how to enable it and how the draft is selected.

-

Using custom error messages#

-

This paragraph needs to be written, want to help out? Checkout GitHub repo!

-
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/check-mode.html b/_site/docs/check-mode.html deleted file mode 100644 index c543644..0000000 --- a/_site/docs/check-mode.html +++ /dev/null @@ -1,443 +0,0 @@ - - - - - -JSON Schema for PHP - Check mode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Check mode

-
-
-

JSON Schema for PHP check mode can be configured using the flags from the Constraint class. These can be configured as default -or provided for a single validate() call.

-
$checkMode = Constraint::CHECK_MODE_NORMAL | Constraint::CHECK_MODE_VALIDATE_SCHEMA;
-
-$validator = new Validator(
-    new Factory(
-        null,
-        null,
-        $checkMode  // Setting the default check mode for all validate calls.
-    )
-);
-
-// -- OR -- 
-
-$validator->validate(
-    $data,
-    $schema,
-    $checkMode  // Or set the check mode for this validation call.
-);
-
-

Available flags#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FlagValueDescription
Constraint::CHECK_MODE_NORMAL0x00000001Validate in 'normal' mode - this is the default
Constraint::CHECK_MODE_TYPE_CAST0x00000002Enable fuzzy type checking for associative arrays and objects
Constraint::CHECK_MODE_COERCE_TYPES0x00000004Convert data types to match the schema where possible
Constraint::CHECK_MODE_APPLY_DEFAULTS0x00000008Apply default values from the schema if not set
Constraint::CHECK_MODE_EXCEPTIONS0x00000010Throw an exception immediately if validation fails
Constraint::CHECK_MODE_DISABLE_FORMAT0x00000020Do not validate "format" constraints
Constraint::CHECK_MODE_EARLY_COERCE0x00000040Apply type coercion as soon as possible
Constraint::CHECK_MODE_ONLY_REQUIRED_DEFAULTS0x00000080When applying defaults, only set values that are required
Constraint::CHECK_MODE_VALIDATE_SCHEMA0x00000100Validate the schema as well as the provided document
Constraint::CHECK_MODE_STRICT0x00000200Validate the document using the constraint set of the draft named in $schema
-

The CHECK_MODE_STRICT flag is covered in more detail on the Strict mode page.

-
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/community-guide.html b/_site/docs/community-guide.html deleted file mode 100644 index f272320..0000000 --- a/_site/docs/community-guide.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -JSON Schema for PHP - Community guide - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Community guide

-
-
-

This page needs to be written, want to help out? Checkout GitHub repo!

-
- -
- -
- - - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/configuration.html b/_site/docs/configuration.html deleted file mode 100644 index 488b464..0000000 --- a/_site/docs/configuration.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -JSON Schema for PHP - Configuration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Configuration

-
-
-

This page needs to be written, want to help out? Checkout GitHub repo!

-
- -
- -
- - - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/contributors.html b/_site/docs/contributors.html deleted file mode 100644 index 14ffc5a..0000000 --- a/_site/docs/contributors.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - -JSON Schema for PHP - Contributors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Contributors

-
-
-

JSON Schema for PHP would not exist without the dedication, time, and expertise of our community.
-Every feature, improvement, and bug fix is the result of people generously sharing their skills and ideas.
-We are deeply grateful for each and every contribution — large or small — that has helped shape this project.

-

Check out all the amazing people who have made this possible:

- - - -

Made with contrib.rocks.

-
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/getting-started.html b/_site/docs/getting-started.html deleted file mode 100644 index 1f737e4..0000000 --- a/_site/docs/getting-started.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - -JSON Schema for PHP - Getting started - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Getting started

-
-
-

Installing JSON Schema Using Composer#

-

The recommended method of installing JSON Schema is using Composer, which installs the required dependencies on -a per-project basis.

-
composer require justinrainbow/json-schema
-
-

Validating using a schema on disk#

-
<?php
-
-$data = json_decode(file_get_contents('data.json'));
-
-// Validate
-$validator = new JsonSchema\Validator;
-$validator->validate($data, (object)['$ref' => 'file://' . realpath('schema.json')]);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

Validating using an inline schema#

-
<?php
-
-use JsonSchema\Constraints\Factory;
-use JsonSchema\SchemaStorage;
-use JsonSchema\Validator;
-
-require_once './vendor/autoload.php';
-
-$data = json_decode(file_get_contents('data.json'));
-$jsonSchemaAsString = <<<'JSON'
-{
-  "type": "object",
-  "properties": {
-    "name": { "type": "string"},
-    "email": {"type": "string"}
-  },
-  "required": ["name","email"]
-}
-JSON;
-
-$jsonSchema = json_decode($jsonSchemaAsString);
-$schemaStorage = new SchemaStorage();
-$schemaStorage->addSchema('internal://mySchema', $jsonSchema);
-$validator = new Validator(new Factory($schemaStorage));
-
-$validator->validate($data, $jsonSchema);
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/search.html b/_site/docs/search.html deleted file mode 100644 index 01cad2d..0000000 --- a/_site/docs/search.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - -JSON Schema for PHP - Search - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
-

Search the JSON Schema for PHP Documentation

- -
- -
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/docs/search.json b/_site/docs/search.json deleted file mode 100644 index 594347e..0000000 --- a/_site/docs/search.json +++ /dev/null @@ -1 +0,0 @@ -[{"slug":"advanced-topics","title":"Advanced topics","content":"Advanced topics\n\nValidation using schema on disk\nValidation of a JSON document can be done using a schema located on disk.\n\nvalidate($data, (object)['$ref' => 'file:\/\/' . realpath('schema.json')]);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nValidation using inline schema\nValidation of a JSON document can be done using a inline schema. This requires some additional setup of the schema storage\naddSchema('internal:\/\/mySchema', $jsonSchema);\n$validator = new JsonSchema\\Validator(\nnew JsonSchema\\Constraints\\Factory($schemaStorage)\n);\n$validator->validate($data, $jsonSchema);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nValidation using online schema\nValidation of a JSON document can be done using a schema hosted online. The validator will automatically fetch the schema from the provided URL using its built-in UriRetriever.\n\nvalidate($data, (object)['$ref' => 'https:\/\/example.com\/your\/schema.json']);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nIf you need more control over how the remote schema is retrieved (e.g. to cache it or pre-load it), you can use UriRetriever and SchemaStorage explicitly:\n\nretrieve($schemaUrl);\n\n\/\/ Register the fetched schema so that any $ref inside it resolves correctly\n$schemaStorage = new SchemaStorage($retriever);\n$schemaStorage->addSchema($schemaUrl, $schema);\n\n$validator = new Validator(new Factory($schemaStorage));\n\n$data = jsondecode(fileget_contents('data.json'), false);\n$validator->validate($data, $schema);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nValidating using strict mode\nStrict mode validates your document with the constraint set of a specific JSON Schema draft, instead of the\ndraft-agnostic default. It supports Draft 6, Draft 7 and Draft 2019-09.\n\nSee Strict mode for how to enable it and how the draft is selected.\n\nUsing custom error messages\nThis paragraph needs to be written, want to help out? Checkout GitHub repo!","destination":"advanced-topics.html"},{"slug":"check-mode","title":"Check mode","content":"Check mode\n\nJSON Schema for PHP check mode can be configured using the flags from the Constraint class. These can be configured as default\nor provided for a single validate() call.\n\n$checkMode = Constraint::CHECKMODENORMAL | Constraint::CHECKMODEVALIDATE_SCHEMA;\n\n$validator = new Validator(\nnew Factory(\nnull,\nnull,\n$checkMode \/\/ Setting the default check mode for all validate calls.\n)\n);\n\n\/\/ -- OR --\n\n$validator->validate(\n$data,\n$schema,\n$checkMode \/\/ Or set the check mode for this validation call.\n);\n\nAvailable flags\nFlag Value Description\n:\nConstraint::CHECKMODENORMAL 0x00000001 Validate in 'normal' mode - this is the default\nConstraint::CHECKMODETYPE_CAST 0x00000002 Enable fuzzy type checking for associative arrays and objects\nConstraint::CHECKMODECOERCE_TYPES 0x00000004 Convert data types to match the schema where possible\nConstraint::CHECKMODEAPPLY_DEFAULTS 0x00000008 Apply default values from the schema if not set\nConstraint::CHECKMODEEXCEPTIONS 0x00000010 Throw an exception immediately if validation fails\nConstraint::CHECKMODEDISABLE_FORMAT 0x00000020 Do not validate \"format\" constraints\nConstraint::CHECKMODEEARLY_COERCE 0x00000040 Apply type coercion as soon as possible\nConstraint::CHECKMODEONLYREQUIREDDEFAULTS 0x00000080 When applying defaults, only set values that are required\nConstraint::CHECKMODEVALIDATE_SCHEMA 0x00000100 Validate the schema as well as the provided document\nConstraint::CHECKMODESTRICT 0x00000200 Validate the document using the constraint set of the draft named in $schema\n\nThe CHECKMODESTRICT flag is covered in more detail on the Strict mode page.","destination":"check-mode.html"},{"slug":"contributors","title":"Contributors","content":"Contributors\n\nJSON Schema for PHP would not exist without the dedication, time, and expertise of our community.\nEvery feature, improvement, and bug fix is the result of people generously sharing their skills and ideas.\nWe are deeply grateful for each and every contribution \u2014 large or small \u2014 that has helped shape this project.\n\nCheck out all the amazing people who have made this possible:\n\n\n\nMade with contrib.rocks.","destination":"contributors.html"},{"slug":"getting-started","title":"Getting started","content":"Getting started\n\nInstalling JSON Schema Using Composer\nThe recommended method of installing JSON Schema is using Composer, which installs the required dependencies on\na per-project basis.\n\ncomposer require justinrainbow\/json-schema\n\nValidating using a schema on disk\n\nvalidate($data, (object)['$ref' => 'file:\/\/' . realpath('schema.json')]);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nValidating using an inline schema\n\naddSchema('internal:\/\/mySchema', $jsonSchema);\n$validator = new Validator(new Factory($schemaStorage));\n\n$validator->validate($data, $jsonSchema);\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}","destination":"getting-started.html"},{"slug":"strict-mode","title":"Strict mode","content":"Strict mode\n\nBy default, JSON Schema for PHP validates your document with a single, draft-agnostic set of constraints. That is\nforgiving, but it means keywords that only exist in a newer draft are not evaluated the way that draft's\nspecification describes them.\n\nStrict mode changes this. When Constraint::CHECKMODESTRICT is enabled, the validator picks the constraint set\nbelonging to one specific JSON Schema draft \u2014 the dialect \u2014 and validates your document with that. The result is\nbehaviour and error messages that follow the chosen specification.\n\nEnabling strict mode\n\nStrict mode is a check mode flag, so it can be set as the default for the whole factory, or per validate() call.\n\nvalidate(\n$data,\n$schema,\n$checkMode \/\/ Strict mode for this validation call only.\n);\n\nChoosing the draft\n\nThe dialect is taken from the $schema keyword of the schema you validate against. Declare it, and your document is\nvalidated against exactly that draft.\n\nvalidate($data, $schema, Constraint::CHECKMODENORMAL | Constraint::CHECKMODESTRICT);\n\nif ($validator->isValid()) {\necho \"The supplied JSON validates against the schema.\\n\";\n} else {\necho \"JSON does not validate. Violations:\\n\";\nforeach ($validator->getErrors() as $error) {\nprintf(\"[%s] %s\\n\", $error['property'], $error['message']);\n}\n}\n\nBecause the schema declares Draft 2019-09, the dependentRequired keyword is evaluated and the missing\nbillingAddress is reported. Without strict mode, dependentRequired is not a keyword the default constraint set\nknows about, and the document is considered valid.\n\nSupported drafts\n\nStrict mode is available for a subset of the drafts the library supports.\n\nDraft $schema identifier Strict mode\n\nDraft 3 http:\/\/json-schema.org\/draft-03\/schema# Not supported\nDraft 4 http:\/\/json-schema.org\/draft-04\/schema# Not supported\nDraft 6 http:\/\/json-schema.org\/draft-06\/schema# Supported (default)\nDraft 7 http:\/\/json-schema.org\/draft-07\/schema# Supported\nDraft 2019-09 https:\/\/json-schema.org\/draft\/2019-09\/schema Supported as of 6.10.0\nDraft 2020-12 https:\/\/json-schema.org\/draft\/2020-12\/schema Not supported yet\n\nThis table describes strict mode only. Draft 3 and Draft 4 schemas remain fully usable in normal validation \u2014 they\nsimply have no dedicated strict mode constraint set.\n\nSchemas without a $schema keyword\n\nWhen the schema does not declare $schema, the validator falls back to the factory's default dialect, which is\nDraft 6. A Draft 2019-09 schema that omits $schema is therefore validated as Draft 6, and its newer keywords\nare ignored without warning.\n\nUse Factory::setDefaultDialect() to change that fallback:\n\nsetDefaultDialect(DraftIdentifiers::DRAFT201909);\n\n$validator = new Validator($factory);\n$validator->validate($data, $schema);\n\nThe JsonSchema\\DraftIdentifiers class holds a constant for every draft identifier, so you do not have to repeat the\nURIs yourself: DRAFT3, DRAFT4, DRAFT6, DRAFT7, DRAFT201909 and DRAFT202012.\n\nA $schema keyword in the schema always wins over the default dialect. The default only applies when the keyword is\nabsent.\n\nRelated\n\nStrict mode is one of several check mode flags, and can be combined with the others. See\nCheck mode for the complete list.","destination":"strict-mode.html"}] \ No newline at end of file diff --git a/_site/docs/strict-mode.html b/_site/docs/strict-mode.html deleted file mode 100644 index c382425..0000000 --- a/_site/docs/strict-mode.html +++ /dev/null @@ -1,520 +0,0 @@ - - - - - -JSON Schema for PHP - Strict mode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content -
-
- -
-

Strict mode

-
-
-

By default, JSON Schema for PHP validates your document with a single, draft-agnostic set of constraints. That is -forgiving, but it means keywords that only exist in a newer draft are not evaluated the way that draft's -specification describes them.

-

Strict mode changes this. When Constraint::CHECK_MODE_STRICT is enabled, the validator picks the constraint set -belonging to one specific JSON Schema draft — the dialect — and validates your document with that. The result is -behaviour and error messages that follow the chosen specification.

-

Enabling strict mode#

-

Strict mode is a check mode flag, so it can be set as the default for the whole factory, or per validate() call.

-
<?php
-
-use JsonSchema\Constraints\Constraint;
-use JsonSchema\Constraints\Factory;
-use JsonSchema\Validator;
-
-$checkMode = Constraint::CHECK_MODE_NORMAL | Constraint::CHECK_MODE_STRICT;
-
-$validator = new Validator(
-    new Factory(
-        null,
-        null,
-        $checkMode  // Strict mode for all validate calls on this validator.
-    )
-);
-
-// -- OR --
-
-$validator->validate(
-    $data,
-    $schema,
-    $checkMode  // Strict mode for this validation call only.
-);
-
-

Choosing the draft#

-

The dialect is taken from the $schema keyword of the schema you validate against. Declare it, and your document is -validated against exactly that draft.

-
<?php
-
-use JsonSchema\Constraints\Constraint;
-use JsonSchema\Validator;
-
-$data = json_decode('{"creditCard": "1234-5678-9012-3456"}');
-
-$schemaAsString = <<<'JSON'
-{
-  "$schema": "https://json-schema.org/draft/2019-09/schema",
-  "type": "object",
-  "properties": {
-    "creditCard": { "type": "string" },
-    "billingAddress": { "type": "string" }
-  },
-  "dependentRequired": {
-    "creditCard": ["billingAddress"]
-  }
-}
-JSON;
-
-$schema = json_decode($schemaAsString);
-
-$validator = new Validator();
-$validator->validate($data, $schema, Constraint::CHECK_MODE_NORMAL | Constraint::CHECK_MODE_STRICT);
-
-if ($validator->isValid()) {
-    echo "The supplied JSON validates against the schema.\n";
-} else {
-    echo "JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-

Because the schema declares Draft 2019-09, the dependentRequired keyword is evaluated and the missing -billingAddress is reported. Without strict mode, dependentRequired is not a keyword the default constraint set -knows about, and the document is considered valid.

-

Supported drafts#

-

Strict mode is available for a subset of the drafts the library supports.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Draft$schema identifierStrict mode
Draft 3http://json-schema.org/draft-03/schema#Not supported
Draft 4http://json-schema.org/draft-04/schema#Not supported
Draft 6http://json-schema.org/draft-06/schema#Supported (default)
Draft 7http://json-schema.org/draft-07/schema#Supported
Draft 2019-09https://json-schema.org/draft/2019-09/schemaSupported as of 6.10.0
Draft 2020-12https://json-schema.org/draft/2020-12/schemaNot supported yet
-

This table describes strict mode only. Draft 3 and Draft 4 schemas remain fully usable in normal validation — they -simply have no dedicated strict mode constraint set.

-

Schemas without a $schema keyword#

-

When the schema does not declare $schema, the validator falls back to the factory's default dialect, which is -Draft 6. A Draft 2019-09 schema that omits $schema is therefore validated as Draft 6, and its newer keywords -are ignored without warning.

-

Use Factory::setDefaultDialect() to change that fallback:

-
<?php
-
-use JsonSchema\Constraints\Constraint;
-use JsonSchema\Constraints\Factory;
-use JsonSchema\DraftIdentifiers;
-use JsonSchema\Validator;
-
-$factory = new Factory(null, null, Constraint::CHECK_MODE_NORMAL | Constraint::CHECK_MODE_STRICT);
-$factory->setDefaultDialect(DraftIdentifiers::DRAFT_2019_09);
-
-$validator = new Validator($factory);
-$validator->validate($data, $schema);
-
-

The JsonSchema\DraftIdentifiers class holds a constant for every draft identifier, so you do not have to repeat the -URIs yourself: DRAFT_3, DRAFT_4, DRAFT_6, DRAFT_7, DRAFT_2019_09 and DRAFT_2020_12.

-

A $schema keyword in the schema always wins over the default dialect. The default only applies when the keyword is -absent.

- -

Strict mode is one of several check mode flags, and can be combined with the others. See -Check mode for the complete list.

-
- -
- -
- - - - -
- - - - - - - - - - - - - - - diff --git a/_site/index.html b/_site/index.html deleted file mode 100644 index c68b1e2..0000000 --- a/_site/index.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - -JSON Schema for PHP - Index - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Skip to content - -
-
-
- -
- JSON Schema Logo - + - PHP Logo -
- - -

JSON Schema for PHP

-

- Validate, interpret, and work with JSON Schemas in PHP — fully compatible with the specifications. -

- - - -
-
- - -
-
-

Standards Compliant

-

- Implements the official JSON Schema specification - (Draft 3, 4, 6, 7 and 2019-09), ensuring predictable and reliable validation. -

-
-
-

Developer Friendly

-

- Simple, expressive API designed for modern PHP projects. Integrates easily into frameworks like Laravel, Symfony, and more. -

-
-
-

Robust validation engine

-

- Validate data against schemas with precision and speed, independently verified through the Bowtie compliance suite. -

-
-
- - -
-
-

Example

-
-
-
-$schema = json_decode(file_get_contents('person.schema.json'));
-$data = json_decode('{"name": "Alice", "age": 30}');
-
-$validator = new \JsonSchema\Validator();
-$validator->validate($data, $schema);
-
-if ($validator->isValid()) {
-    echo "✅ The supplied JSON validates against the schema.\n";
-} else {
-    echo "❌ JSON does not validate. Violations:\n";
-    foreach ($validator->getErrors() as $error) {
-        printf("[%s] %s\n", $error['property'], $error['message']);
-    }
-}
-
-            
-
-
-
- - - - - - - - - - - - - - - - - diff --git a/_site/media/app.css b/_site/media/app.css deleted file mode 100644 index 3586563..0000000 --- a/_site/media/app.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:#5956eb;--color-indigo-600:oklch(51.1% .262 276.966);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-800:oklch(26.8% .007 34.298);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-light:300;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-wide:.025em;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{top:0;right:0;bottom:0;left:0}.top-0{top:0}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-4{top:calc(var(--spacing) * 4)}.top-16{top:calc(var(--spacing) * 16)}.top-auto{top:auto}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.-left-64{left:calc(var(--spacing) * -64)}.left-0{left:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.float-left{float:left}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-8{margin:calc(var(--spacing) * 8)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-auto{margin-block:auto}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.-mt-4{margin-top:calc(var(--spacing) * -4)}.mt-1{margin-top:var(--spacing)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-auto{margin-top:auto}.mr-1{margin-right:var(--spacing)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mr-auto{margin-right:auto}.-mb-2{margin-bottom:calc(var(--spacing) * -2)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-2{margin-left:calc(var(--spacing) * -2)}.-ml-4{margin-left:calc(var(--spacing) * -4)}.-ml-6{margin-left:calc(var(--spacing) * -6)}.-ml-8{margin-left:calc(var(--spacing) * -8)}.ml-1{margin-left:var(--spacing)}.ml-32{margin-left:calc(var(--spacing) * 32)}.ml-auto{margin-left:auto}.block{display:block}.block\!{display:block!important}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.h-0{height:0}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1{height:var(--spacing)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-16{height:calc(var(--spacing) * 16)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[75vh\]{max-height:75vh}.min-h-\[300px\]{min-height:300px}.min-h-\[calc\(100vh_-_4rem\)\]{min-height:calc(100vh - 4rem)}.min-h-screen{min-height:100vh}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-16{width:calc(var(--spacing) * 16)}.w-32{width:calc(var(--spacing) * 32)}.w-64{width:calc(var(--spacing) * 64)}.w-\[70ch\]{width:70ch}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[1000px\]{max-width:1000px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-center{transform-origin:50%}.-rotate-45{rotate:-45deg}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-auto{cursor:auto}.cursor-pointer{cursor:pointer}.scroll-mt-2{scroll-margin-top:calc(var(--spacing) * 2)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-l-\[0\.325rem\]{border-left-style:var(--tw-border-style);border-left-width:.325rem}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-500{border-color:var(--color-gray-500)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-transparent{border-color:#0000}.border-yellow-400{border-color:var(--color-yellow-400)}.border-t-transparent{border-top-color:#0000}.bg-black{background-color:var(--color-black)}.bg-black\/5{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.bg-black\/5{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-current{background-color:currentColor}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-slate-400{--tw-gradient-from:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-slate-50{--tw-gradient-to:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.fill-black{fill:var(--color-black)}.object-contain{object-fit:contain}.p-0{padding:0}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-\[75\%\]{font-size:75%}.text-\[90\%\]{font-size:90%}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-stone-600{color:var(--color-stone-600)}.text-stone-800{color:var(--color-stone-800)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:grayscale-0:is(:where(.group):hover *){--tw-grayscale:grayscale(0%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:bg-black\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/5:hover{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-200\/20:hover{background-color:#e5e7eb33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-200\/20:hover{background-color:color-mix(in oklab,var(--color-gray-200) 20%,transparent)}}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-indigo-600:hover{color:var(--color-indigo-600)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:absolute:focus{position:absolute}.focus\:mx-auto:focus{margin-inline:auto}.focus\:mt-2:focus{margin-top:calc(var(--spacing) * 2)}.focus\:w-64:focus{width:calc(var(--spacing) * 64)}.focus\:p-2:focus{padding:calc(var(--spacing) * 2)}.focus\:opacity-100:focus{opacity:1}.focus\:grayscale-0:focus{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}@media(min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:h-36{height:calc(var(--spacing) * 36)}.sm\:w-36{width:calc(var(--spacing) * 36)}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:48rem){.md\:visible{visibility:visible}.md\:top-0{top:0}.md\:left-0{left:0}.md\:left-64{left:calc(var(--spacing) * 64)}.md\:mx-2{margin-inline:calc(var(--spacing) * 2)}.md\:my-0{margin-block:0}.md\:my-6{margin-block:calc(var(--spacing) * 6)}.md\:mt-0{margin-top:0}.md\:ml-0{margin-left:0}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline-block{display:inline-block}.md\:h-60{height:calc(var(--spacing) * 60)}.md\:min-h-screen{min-height:100vh}.md\:w-1\/2{width:50%}.md\:w-60{width:calc(var(--spacing) * 60)}.md\:w-\[calc\(100vw_-_16rem\)\]{width:calc(100vw - 16rem)}.md\:w-auto{width:auto}.md\:grow{flex-grow:1}.md\:grow-0{flex-grow:0}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:gap-6{gap:calc(var(--spacing) * 6)}.md\:border-none{--tw-border-style:none;border-style:none}.md\:bg-transparent{background-color:#0000}.md\:bg-white{background-color:var(--color-white)}.md\:bg-left{background-position:0}.md\:px-4{padding-inline:calc(var(--spacing) * 4)}.md\:px-16{padding-inline:calc(var(--spacing) * 16)}.md\:py-0{padding-block:0}.md\:py-16{padding-block:calc(var(--spacing) * 16)}.md\:py-20{padding-block:calc(var(--spacing) * 20)}.md\:pb-0{padding-bottom:0}.md\:pl-0{padding-left:0}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\:ml-8{margin-left:calc(var(--spacing) * 8)}.lg\:bg-center{background-position:50%}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-\[\#1b2533\]:is(.dark *){border-color:#1b2533}.dark\:border-gray-700:is(.dark *){border-color:var(--color-gray-700)}.dark\:bg-black\/10:is(.dark *){background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-black\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.dark\:bg-gray-700:is(.dark *){background-color:var(--color-gray-700)}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:is(.dark *){background-color:var(--color-gray-900)}.dark\:bg-sky-400:is(.dark *){background-color:var(--color-sky-400)}.dark\:bg-slate-400:is(.dark *){background-color:var(--color-slate-400)}.dark\:bg-slate-700:is(.dark *){background-color:var(--color-slate-700)}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:bg-yellow-300:is(.dark *){background-color:var(--color-yellow-300)}.dark\:bg-gradient-to-t:is(.dark *){--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-slate-800:is(.dark *){--tw-gradient-from:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:to-slate-400:is(.dark *){--tw-gradient-to:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:fill-gray-200:is(.dark *){fill:var(--color-gray-200)}.dark\:fill-white:is(.dark *){fill:var(--color-white)}.dark\:font-medium:is(.dark *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.dark\:text-gray-100:is(.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:is(.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:is(.dark *){color:var(--color-gray-400)}.dark\:text-indigo-400:is(.dark *){color:var(--color-indigo-400)}.dark\:text-sky-400:is(.dark *){color:var(--color-sky-400)}.dark\:text-slate-200:is(.dark *){color:var(--color-slate-200)}.dark\:text-stone-200:is(.dark *){color:var(--color-stone-200)}.dark\:text-stone-300:is(.dark *){color:var(--color-stone-300)}.dark\:text-stone-400:is(.dark *){color:var(--color-stone-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}@media(hover:hover){.dark\:hover\:bg-black\/10:is(.dark *):hover{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-black\/10:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.dark\:hover\:bg-sky-500:is(.dark *):hover{background-color:var(--color-sky-500)}.dark\:hover\:text-sky-300:is(.dark *):hover{color:var(--color-sky-300)}}@media(min-width:48rem){.dark\:md\:bg-transparent:is(.dark *){background-color:#0000}}@media print{.print\:top-0{top:0}.print\:hidden{display:none}}.prose-h1\:mb-3 :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--spacing) * 3)}.prose-p\:my-3 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--spacing) * 3)}}pre code.torchlight .line-number,pre code.torchlight .summary-caret{margin-right:calc(var(--spacing) * 4)}.prose .torchlight-link,.torchlight-link{text-decoration-line:underline}.torchlight.has-focus-lines .line:not(.line-focus){filter:blur(.095rem);opacity:.65;transition:filter .35s,opacity .35s}.torchlight.has-focus-lines:hover .line:not(.line-focus){filter:blur();opacity:1}.torchlight summary:focus{--tw-outline-style:none;outline-style:none}.torchlight details>summary::marker{display:none}.torchlight details>summary::-webkit-details-marker{display:none}.torchlight details .summary-caret:after{pointer-events:none}.torchlight .summary-caret-empty:after,.torchlight details .summary-caret-middle:after,.torchlight details .summary-caret-end:after{content:" "}.torchlight details[open] .summary-caret-start:after{content:"-"}.torchlight details:not([open]) .summary-caret-start:after{content:"+"}.torchlight details[open] .summary-hide-when-open{display:none}.torchlight details:not([open]) .summary-hide-when-open{display:block}.prose{max-width:96ch;line-height:1.5em}.prose h2{margin-top:1.5em;margin-bottom:.75em}.prose a{color:#5956eb;text-decoration:none}.prose a:hover{color:#4f46e5}.prose blockquote{color:unset;font-weight:500;font-style:unset;background-color:#80808020;border-left-color:#d1d5db;margin-top:1em;margin-bottom:1em;padding-top:.25em;padding-bottom:.25em;padding-left:.75em;line-height:1.25em}.prose blockquote p{margin-top:.25em;margin-bottom:.25em;padding-right:.25em}.prose blockquote p:before,.prose blockquote p:after{content:unset}.prose code{font:unset;background-color:#80808033;border-radius:4px;margin-left:-2px;margin-right:1px;padding-left:4px;padding-right:4px}.prose code:before,.prose code:after{content:unset}.prose pre code{font-family:Fira Code Regular,Consolas,monospace,Courier New}.prose-invert a{color:#818cf8}.prose-invert a:hover{color:#6366f1}[x-cloak]{display:none!important}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} diff --git a/_site/media/app.js b/_site/media/app.js deleted file mode 100644 index 8b13789..0000000 --- a/_site/media/app.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_site/media/json-schema-logo-blue.svg b/_site/media/json-schema-logo-blue.svg deleted file mode 100644 index 5fe7d1d..0000000 --- a/_site/media/json-schema-logo-blue.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/_site/media/php-logo.svg b/_site/media/php-logo.svg deleted file mode 100644 index 37a5e6f..0000000 --- a/_site/media/php-logo.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - Official PHP Logo - - - - image/svg+xml - - Official PHP Logo - - - Colin Viebrock - - - - - - - - - - - - Copyright Colin Viebrock 1997 - All rights reserved. - - - 1997 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/_site/sitemap.xml b/_site/sitemap.xml deleted file mode 100644 index 97643b7..0000000 --- a/_site/sitemap.xml +++ /dev/null @@ -1,2 +0,0 @@ - -https://jsonrainbow.github.io/docs/404.html2026-06-22T17:57:56+00:00monthly0.25https://jsonrainbow.github.io/docs/index.html2026-06-22T17:57:56+00:00daily1https://jsonrainbow.github.io/docs/docs/advanced-topics.html2026-08-18T21:01:17+00:00daily0.9https://jsonrainbow.github.io/docs/docs/check-mode.html2026-08-18T21:01:11+00:00daily0.9https://jsonrainbow.github.io/docs/docs/contributors.html2026-06-22T17:57:56+00:00daily0.9https://jsonrainbow.github.io/docs/docs/getting-started.html2026-08-18T20:56:55+00:00daily0.9https://jsonrainbow.github.io/docs/docs/strict-mode.html2026-08-18T21:17:44+00:00daily0.9https://jsonrainbow.github.io/docs/docs/search.json2026-08-19T18:34:12+00:00weekly0.5https://jsonrainbow.github.io/docs/docs/search.html2026-08-19T18:34:12+00:00weekly0.5