diff --git a/.github/ISSUE_TEMPLATE/request-wiki-addition.yml b/.github/ISSUE_TEMPLATE/request-wiki-addition.yml new file mode 100644 index 00000000..6137b60e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request-wiki-addition.yml @@ -0,0 +1,87 @@ +name: Request Wiki Addition +description: Request to have your wiki added to the IRWA website. +title: "[New Wiki] " +labels: ["wiki addition request"] +body: + - type: markdown + attributes: + value: | + Welcome! Please only request wikis to be added that are part of the Indie Roblox Wiki Alliance (IRWA). To join the alliance, please see [this page](https://indierobloxwikis.org/joining/) for more information. + Note that a bureaucrat on the wiki must either submit this request or confirm it for it to be handled. You should only continue with this form if you have applied and have been accepted via our Discord Server. + + Here is a preview of how a listing looks like: Image + + - type: input + id: wiki-url + attributes: + label: Wiki URL + description: The URL to your wiki. + placeholder: https://dovedale.wiki + validations: + required: true + + - type: input + id: wiki-name + attributes: + label: Wiki Name + description: Your chosen display name for the wiki + placeholder: Dovedale Railway Wiki + validations: + required: true + + - type: textarea + id: wiki-logo + attributes: + label: Wiki Logo + description: | + Please attach your wiki logo image here. The image will be displayed as **400x400px**. + You can drag and drop the file into this text box, or click the attachment icon to upload it. + placeholder: Drag and drop your chosen logo image here... + validations: + required: true + + - type: checkboxes + id: social-links + attributes: + label: Wiki Social Links + description: Your wiki listing includes some social links. Please select what you would like to add. + options: + - label: Wiki Discord + - label: Game/Community Discord + - label: Twitter / X + - label: Ko-fi/Patreon/Donation Page (Only for self-hosted sites to cover costs) + - label: Other (please describe in the additional info field below) + + - type: textarea + id: social-links-urls + attributes: + label: Social Link URLs + description: Provide the URLs for each social link you selected above. One per line. + placeholder: | + Wiki Discord: https://discord.gg/hmqCYg4P23 + Game Discord: https://discord.gg/dovedale + Twitter: https://twitter.com/DovedaleRailway + Ko-fi: https://ko-fi.com/Dovedale + + - type: textarea + id: wiki-staff + attributes: + label: Wiki Staff + description: Let us know the names of your staff team. + placeholder: Billie, Jaiden, Uchu, Bonnie + + - type: textarea + id: wiki-description + attributes: + label: Wiki Description + description: Please give a short and succinct description of your wiki for others. We may edit this for clarity or to fix grammar. + placeholder: The official and independent community focused wiki site for Dovedale Railway that works with developers to provide the best in class information for the game. + + + - type: checkboxes + id: captchas + attributes: + label: Before you submit... + description: Please complete the following declaration + options: + - label: I confirm my wiki that I am submitting is already an existing approved IRWA member, and all the information I am submitting is true and accurate. diff --git a/.github/workflows/compile-less.yml b/.github/workflows/compile-less.yml index 10f5a4e6..aabd5291 100644 --- a/.github/workflows/compile-less.yml +++ b/.github/workflows/compile-less.yml @@ -2,9 +2,6 @@ name: Compile LESS to CSS on: push: - branches: - - main - - patch-1 paths: - '**/*.less' workflow_dispatch: @@ -15,6 +12,7 @@ concurrency: permissions: contents: write + pull-requests: write jobs: build: @@ -35,21 +33,28 @@ jobs: - name: Compile all LESS to CSS run: | # Find all .less files, excluding those starting with _ (common for partials) - # and also excluding mixins.less which is a known partial here - find . -name "*.less" ! -name "_*" ! -name "mixins.less" | while read -r file; do + find . -name "*.less" ! -name "_*" | while read -r file; do css_file="${file%.less}.css" echo "Compiling $file to $css_file" lessc --math=strict "$file" "$css_file" done - - name: Commit and push CSS changes - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git add "**/*.css" - if git diff --cached --quiet; then - echo "No changes to commit" - else - git commit -m "Auto-compile LESS to CSS" - git push - fi + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "style: compile LESS to CSS" + committer: GitHub + author: github-actions[bot] + branch: patch/compile-less/${{ github.ref_name }} + base: ${{ github.ref_name }} + title: "Update Compiled CSS" + body: "This is an automated PR to compile LESS to CSS." + delete-branch: true + + - name: Auto-merge PR + if: steps.cpr.outputs.pull-request-operation == 'created' + run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --admin + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..1e0f2ab5 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,46 @@ +name: Deploy Jekyll site to Pages + +on: + push: + branches: ["patch-1"] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' + bundler-cache: true + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Build with Jekyll + run: bundle exec jekyll build + env: + JEKYLL_ENV: production + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + deploy: + environment: + name: Production + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/js-minify.yml b/.github/workflows/js-minify.yml new file mode 100644 index 00000000..37255c8f --- /dev/null +++ b/.github/workflows/js-minify.yml @@ -0,0 +1,50 @@ +name: Minify JS +on: + push: + paths: + - 'assets/js/scripts.js' # Only trigger when source JS changes + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + minify-and-sync: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Minifier + run: npm install -g terser + + - name: Minify JavaScript + run: | + # Minify the JS asset used by the site + terser assets/js/scripts.js -o assets/js/scripts.min.js + + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "style: minify scripts.js" + committer: GitHub + author: github-actions[bot] + branch: patch/sync-scripts-js/${{ github.ref_name }} + base: ${{ github.ref_name }} + title: "Update Minified scripts.js" + body: "Automated PR to update scripts.min.js" + delete-branch: true + + - name: Auto-merge PR + if: steps.cpr.outputs.pull-request-operation == 'created' + run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --admin + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/sync-docs.yml b/.github/workflows/sync-docs.yml index aff7e243..1627decf 100644 --- a/.github/workflows/sync-docs.yml +++ b/.github/workflows/sync-docs.yml @@ -18,7 +18,7 @@ jobs: - name: Fetch USAGE.md and add Front Matter run: | # Create the nested directory - mkdir -p docs/robloxapi + mkdir -p pages # Download the raw file curl -s https://raw.githubusercontent.com/Roblox-Indie-Wikis/mediawiki-extensions-RobloxAPI/master/USAGE.md -o usage_raw.md @@ -34,17 +34,24 @@ jobs: { echo "---" echo "layout: page" - echo "body_class: page-template robloxapi toc-enabled" + echo "body_class: page-template robloxapi toc-enabled bg-include page-robloxapi" echo "title: Roblox API Documentation" echo "description: Documentation for the RobloxAPI extension, which provides easy access to the Roblox API via parser functions." + echo "redirect_from: /docs/robloxapi" + echo "permalink: /robloxapi/" + echo "image: /assets/promofiles/RobloxAPIMainThumbnail.png" + echo "twitter:" + echo " card: summary_large_image" echo "---" echo "# Roblox API Documentation" echo "" + echo "
" + echo "" echo "The RobloxAPI extension provides easy access to the Roblox API via parser functions. The Roblox API is generally very poorly documented, and using the ExternalData extension or Lua modules can be a steep learning curve which may not be viable. This extension aims to make it easy for you to grab data from Roblox and put it on your wiki, using simple parser functions." echo "{% raw %}" cat usage_no_toc.md echo "{% endraw %}" - } > docs/robloxapi/index.md + } > pages/robloxapi.md # Clean up temporary files rm usage_raw.md usage_no_toc.md @@ -59,11 +66,11 @@ jobs: author: github-actions[bot] branch: patch/sync-docs title: "Update Roblox API Documentation" - body: "This is an automated PR to sync documentation." + body: "This is an automated PR to sync documentation with Roblox-Indie-Wikis/mediawiki-extensions-RobloxAPI." delete-branch: true - name: Auto-merge PR if: steps.cpr.outputs.pull-request-operation == 'created' - run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --merge --admin + run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --admin env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.ADMIN_GH_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 10e25eee..8dc8430b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ _site/ .jekyll-metadata vendor/ .bundle/ +*.log +/home/jules/verification/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7c752169 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "githubPullRequests.ignoredPullRequestBranches": [ + "patch-1" + ] +} \ No newline at end of file diff --git a/security.txt b/.well-known/security.txt similarity index 90% rename from security.txt rename to .well-known/security.txt index 17305d59..802eb5e9 100644 --- a/security.txt +++ b/.well-known/security.txt @@ -1,5 +1,5 @@ Contact: security@enews.link -Expires: 2026-01-01T00:00:00.000Z +Expires: 2027-01-01T00:00:00.000Z Preferred-Languages: en, zh Canonical: https://indierobloxwikis.org/security.txt Instructions: Please do not post the vulnerability publicly by using our wikis servers or bug trackers for that. Rather, please read mail us at the address above, and we will get back to you shortly. \ No newline at end of file diff --git a/404.html b/404.html index 1ef89564..74b67cd2 100644 --- a/404.html +++ b/404.html @@ -1,6 +1,6 @@ --- layout: default -title: "404 - Page Not Found" +title: Page Not Found permalink: /404.html body_class: error-template main_class: page--error @@ -10,4 +10,4 @@

404

The page you are looking for does not exist.

Go back to Home - + \ No newline at end of file diff --git a/Gemfile b/Gemfile index c4f939b6..93dd0a19 100644 --- a/Gemfile +++ b/Gemfile @@ -5,4 +5,10 @@ gem "jekyll", "~> 4.3.4" group :jekyll_plugins do gem "jekyll-feed", "~> 0.17" gem "jekyll-sitemap" + gem 'jekyll-redirect-from' + gem 'jekyll-seo-tag' end + +gem "csv" +gem "base64" +gem "mutex_m" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 852cec0d..19977031 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,9 +3,11 @@ GEM specs: addressable (2.8.9) public_suffix (>= 2.0.2, < 8.0) + base64 (0.3.0) bigdecimal (4.0.1) colorator (1.1.0) concurrent-ruby (1.3.6) + csv (3.3.5) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -16,6 +18,7 @@ GEM ffi (1.17.3-arm-linux-gnu) ffi (1.17.3-arm-linux-musl) ffi (1.17.3-arm64-darwin) + ffi (1.17.3-x64-mingw-ucrt) ffi (1.17.3-x86-linux-gnu) ffi (1.17.3-x86-linux-musl) ffi (1.17.3-x86_64-darwin) @@ -34,6 +37,9 @@ GEM google-protobuf (4.34.0-arm64-darwin) bigdecimal rake (~> 13.3) + google-protobuf (4.34.0-x64-mingw-ucrt) + bigdecimal + rake (~> 13.3) google-protobuf (4.34.0-x86-linux-gnu) bigdecimal rake (~> 13.3) @@ -70,8 +76,12 @@ GEM webrick (~> 1.7) jekyll-feed (0.17.0) jekyll (>= 3.7, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) jekyll-sass-converter (3.1.0) sass-embedded (~> 1.75) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) jekyll-watch (2.2.1) @@ -87,6 +97,7 @@ GEM rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) mercenary (0.4.0) + mutex_m (0.3.0) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (7.0.5) @@ -120,6 +131,8 @@ GEM google-protobuf (~> 4.31) sass-embedded (1.97.3-riscv64-linux-musl) google-protobuf (~> 4.31) + sass-embedded (1.97.3-x64-mingw-ucrt) + google-protobuf (~> 4.31) sass-embedded (1.97.3-x86_64-darwin) google-protobuf (~> 4.31) sass-embedded (1.97.3-x86_64-linux-android) @@ -147,6 +160,7 @@ PLATFORMS riscv64-linux-gnu riscv64-linux-musl ruby + x64-mingw-ucrt x86-linux-gnu x86-linux-musl x86_64-darwin @@ -156,15 +170,22 @@ PLATFORMS x86_64-linux-musl DEPENDENCIES + base64 + csv jekyll (~> 4.3.4) jekyll-feed (~> 0.17) + jekyll-redirect-from + jekyll-seo-tag jekyll-sitemap + mutex_m CHECKSUMS addressable (2.8.9) sha256=cc154fcbe689711808a43601dee7b980238ce54368d23e127421753e46895485 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7 colorator (1.1.0) sha256=e2f85daf57af47d740db2a32191d1bdfb0f6503a0dfbc8327d0c9154d5ddfc38 concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab + csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f em-websocket (0.5.3) sha256=f56a92bde4e6cb879256d58ee31f124181f68f8887bd14d53d5d9a292758c6a8 eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 ffi (1.17.3) sha256=0e9f39f7bb3934f77ad6feab49662be77e87eedcdeb2a3f5c0234c2938563d4c @@ -173,6 +194,7 @@ CHECKSUMS ffi (1.17.3-arm-linux-gnu) sha256=5bd4cea83b68b5ec0037f99c57d5ce2dd5aa438f35decc5ef68a7d085c785668 ffi (1.17.3-arm-linux-musl) sha256=0d7626bb96265f9af78afa33e267d71cfef9d9a8eb8f5525344f8da6c7d76053 ffi (1.17.3-arm64-darwin) sha256=0c690555d4cee17a7f07c04d59df39b2fba74ec440b19da1f685c6579bb0717f + ffi (1.17.3-x64-mingw-ucrt) sha256=5f1d7d067a9a1058ad183dba25b05557cd51c85fc1768c49338eabc1cf242d7c ffi (1.17.3-x86-linux-gnu) sha256=868a88fcaf5186c3a46b7c7c2b2c34550e1e61a405670ab23f5b6c9971529089 ffi (1.17.3-x86-linux-musl) sha256=f0286aa6ef40605cf586e61406c446de34397b85dbb08cc99fdaddaef8343945 ffi (1.17.3-x86_64-darwin) sha256=1f211811eb5cfaa25998322cdd92ab104bfbd26d1c4c08471599c511f2c00bb5 @@ -183,6 +205,7 @@ CHECKSUMS google-protobuf (4.34.0-aarch64-linux-gnu) sha256=0ab8a8a97976a2265d647e69b3ff1980c89184abdaf06d36091856c5ab37cc55 google-protobuf (4.34.0-aarch64-linux-musl) sha256=0632a86df6d320eac3b335bd779499d43ad8ee6d1f8c8494b773ed5d3d5c6ab4 google-protobuf (4.34.0-arm64-darwin) sha256=f83967a8095a9da676b79ba372c58fef2ca3878428bd40febfce65b3752c90d1 + google-protobuf (4.34.0-x64-mingw-ucrt) sha256=f5a5bedf5ad7b388e29abd45d30a43712016fcbd5c8ac8d7ee76ce3493ae5fb0 google-protobuf (4.34.0-x86-linux-gnu) sha256=21108e5cee407cb46c38f96fa93ea1ea8e463a45c8031261df3f9131458db4e3 google-protobuf (4.34.0-x86-linux-musl) sha256=58cb40ce43e2dc559eef112ff8d522aad489ba90f693eb95fdd946eaa6cc81e9 google-protobuf (4.34.0-x86_64-darwin) sha256=4a5b67281993345adca54bb32947f25a289597eafaa240e5b714d0a740f99321 @@ -192,7 +215,9 @@ CHECKSUMS i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 jekyll (4.3.4) sha256=c488282c2819c392d34d3a3784eacde2cde4b61c8e3c9c9295f6c01fb1754404 jekyll-feed (0.17.0) sha256=689aab16c877949bb9e7a5c436de6278318a51ecb974792232fd94d8b3acfcc3 + jekyll-redirect-from (0.16.0) sha256=6635cae569ef9b0f90ffb71ec014ba977177fafb44d32a2b0526288d4d9be6db jekyll-sass-converter (3.1.0) sha256=83925d84f1d134410c11d0c6643b0093e82e3a3cf127e90757a85294a3862443 + jekyll-seo-tag (2.8.0) sha256=3f2ed1916d56f14ebfa38e24acde9b7c946df70cb183af2cb5f0598f21ae6818 jekyll-sitemap (1.4.0) sha256=0de08c5debc185ea5a8f980e1025c7cd3f8e0c35c8b6ef592f15c46235cf4218 jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1 kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa @@ -201,6 +226,7 @@ CHECKSUMS listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 + mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 pathutil (0.16.2) sha256=e43b74365631cab4f6d5e4228f812927efc9cb2c71e62976edcb252ee948d589 public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c @@ -220,6 +246,7 @@ CHECKSUMS sass-embedded (1.97.3-riscv64-linux-android) sha256=201426b3e58611aa8cf34a7574df51905ec42fefb5a69982cc8497ac7fb26a6b sass-embedded (1.97.3-riscv64-linux-gnu) sha256=d7bac32f4de55c589a036da13ac4482bf5b7dfac980b4c0203d31a1bd9f07622 sass-embedded (1.97.3-riscv64-linux-musl) sha256=621d981d700e2b8d0459b5ea696fff746dfa07d6b6bbc70cd982905214b07888 + sass-embedded (1.97.3-x64-mingw-ucrt) sha256=72994dcfacc0559789a3624c78c5fa66962379bb8d8c0d6dea85906c5b6e66ee sass-embedded (1.97.3-x86_64-darwin) sha256=578f167907ee2a4d355a5a40bcf35d2e3eb90c87008dcd9ce31a2c4a877697f6 sass-embedded (1.97.3-x86_64-linux-android) sha256=8f5e179bee8610be432499f228ea4e53ab362b1db0da1ae3cd3e76b114712372 sass-embedded (1.97.3-x86_64-linux-gnu) sha256=173a4d0dbe2fffdf7482bd3e82fb597dfc658c18d1e8fd746aa7d5077ed4e850 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..d6794c74 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Independent Roblox Wiki Alliance + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Link Select.cur b/Link Select.cur deleted file mode 100644 index f59625bb..00000000 Binary files a/Link Select.cur and /dev/null differ diff --git a/Normal Select.cur b/Normal Select.cur deleted file mode 100644 index 64a19377..00000000 Binary files a/Normal Select.cur and /dev/null differ diff --git a/README.md b/README.md index 35bbdc0d..207cd48f 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,35 @@ -# About -This is the repository for the Independent Roblox Wiki Alliance site, which you can view at https://indierobloxwikis.org. Join our server [here](https://discord.gg/74qrU7qBqx)! +This is the repository for the Independent Roblox Wiki Alliance site, which you can view at https://indierobloxwikis.org. Join our [Discord server](https://discord.com/invite/qZwvwnPZsd)! The site is built using [Jekyll](https://jekyllrb.com/). -# Contributing -To contribute, you can open a Pull Request with your changes. +## Contributing +To contribute, you can open a Pull Request with your changes. If you haven't already, start by [forking](https://help.github.com/en/articles/fork-a-repo) this repository. [Create a new branch](https://help.github.com/en/desktop/contributing-to-projects/creating-a-branch-for-your-work) in your fork, and submit your changes for review. -# Adding your wiki +### Development Guidelines +To ensure the site remains maintainable and synchronized, please follow these rules: +- Do **not** edit the `.css` files located in `/assets/css` directly. This project uses LESS for styling. Please make all style changes in the `.less` files; these will be automatically compiled and converted via a GitHub Actions process upon deployment. +- Do **not** manually edit the `/robloxapi` page. This page is automatically synced with the [RobloxAPI extension](https://github.com/Roblox-Indie-Wikis/mediawiki-extensions-RobloxAPI) repository. Any manual changes made here will be overwritten during the next sync. -If you have been accepted into the alliance, your request should automatically be processed by a coordinator. If you don't see it within 3 days on the website, open an issue with all the details. +### Locally host the site +If you'd like to preview your changes before publishing a PR, follow these steps: +1. Install Jekyll and its prerequisites ([see here](https://jekyllrb.com/docs/installation/)) +2. Run `bundle install` to install dependencies +3. Run `bundle exec jekyll serve` to run the site locally -# Internal steps to adding wiki -Updates are now data-driven: -- Insert logo into `media/` -- Add wiki details to `_data/members.yml` (the carousel on the front page and the members list are both generated from this file). +## Adding your wiki +There are two ways to add your wiki. You may open an issue request and have us do the work for you, or you may add it yourself via a pull request. To open an issue, use [this form](https://github.com/Roblox-Indie-Wikis/irwa-website/issues/new?template=request-wiki-addition.yml). +If you wish to add it yourself, please open a pull request doing the following: +1. Insert logo into `/assets/wiki-logos` +2. Add wiki details to `_data/members.yml` (the carousel on the front page and the members list are both generated from this file). This is the format: +```yaml +- name: + link: + logo: "/assets/wiki-logos/LogoHere.svg" (svg is recommended if logo is basic; if monochrome, place the white version here) + description: "Lorem ipsum" + game_link: + discord: + joined: "January 2030" + team: + - name: A + - name: B +``` diff --git a/_config.yml b/_config.yml index 8cae0774..762e05eb 100644 --- a/_config.yml +++ b/_config.yml @@ -1,20 +1,25 @@ -title: Indie Roblox Wikis Alliance -description: We support independent wikis. Putting wiki management back to communities. Not corporations. +title: Independent Roblox Wiki Alliance +description: We support independent wikis. Putting wiki management back to communities, not corporations. +image: /assets/website/IRWA-Logo1.svg url: "https://indierobloxwikis.org" -# baseurl: "" -# Set baseurl to the subpath of the GitHub Pages URL if hosting on a subpath. -# Currently set to "/irwa-website" for testing at https://whostacking.github.io/irwa-website/ -baseurl: "/irwa-website" + +twitter: + card: summary # Build settings theme: null # We are using a custom layout plugins: - jekyll-feed - jekyll-sitemap + - jekyll-redirect-from + - jekyll-seo-tag +highlighter: rouge + +social: + links: + - https://github.com/Roblox-Indie-Wikis exclude: - - Gemfile - - Gemfile.lock - vendor/ - README.md - .gitignore @@ -23,7 +28,6 @@ exclude: - verify_migration.py - README-PUBLII.md - # Permalinks # Default to directory-based structure to maintain consistency with original paths defaults: diff --git a/_data/members.yml b/_data/members.yml index 921c2eea..03c96511 100644 --- a/_data/members.yml +++ b/_data/members.yml @@ -1,113 +1,145 @@ - name: Fischipedia link: https://fischipedia.org - logo: /media/files/Fisch.png + logo: /assets/wiki-logos/Fisch.png description: "Explore a growing world with your trusty rod, and maybe even reel in some new friends along the way!" game_link: https://www.roblox.com/games/16732694052/Fisch-FISCHFEST discord: https://discord.gg/fischwiki - joined: "December 2024" + joined: "March 2025" team: - - name: Fisch Staff + - name: junekept + - name: Buildaroo + - name: Celeranis + - name: veiiorra - name: Guts & Blackpowder Wiki link: https://gbp.miraheze.org - logo: /media/files/GBP.webp - description: "The official wiki of Guts & Blackpowder, housing comprehensive database for information regarding the game, such as Game Mechanics, Equipment, Maps, and much more. Created and maintained by the Developers, Game Staff, and Wiki Team." + logo: /assets/wiki-logos/GBP.webp + description: "The official wiki of Guts & Blackpowder, housing comprehensive database for information regarding the game, such as Game Mechanics, Equipment, Maps, and much more. Created and maintained by the Developers, Game Staff, and Wiki Team." game_link: https://www.roblox.com/games/12334109280/Guts-Blackpowder twitter: https://x.com/gutsblackpowder - joined: "January 2024" + joined: "February 2025" team: - - name: Developer - - name: Wiki Team + - name: Einc - name: Untitled Tag Game Wiki link: https://tagging.wiki - logo: /media/files/UTGLogo.png - description: "A community-driven untitled tag game wiki encyclopedia that anyone can edit! Spawn in maps, choose a gamemode, play with runners, and WIN!" + logo: /assets/wiki-logos/UTG.png + description: "The official untitled tag game wiki that anyone can edit! Spawn in maps, choose a gamemode, play with runners, and WIN!" game_link: https://www.roblox.com/games/14044547200/untitled-tag-game twitter: https://x.com/utgwiki discord: https://discord.gg/vXZ54WR7fp - joined: "February 2024" + joined: "February 2025" team: - name: Concavz - - name: Splatched - -- name: Pressure Wiki - link: https://urbanshade.org - logo: /media/files/Pressure.png - description: "The official wiki for Pressure, a horror survival game by Urbanshade: Hadal Division." - game_link: https://www.roblox.com/games/12411473842/Pressure - discord: https://discord.gg/t8mtkpxabp - joined: "March 2024" - team: - - name: Mooncloud + - name: splatched - name: Dovedale Railway Wiki link: https://dovedale.wiki - logo: /media/files/Dovedale.png - description: "The official and independent community focused wiki site for Dovedale Railway that works with developers to provides the best in class information for the game." + logo: /assets/wiki-logos/Dovedale_White.svg + description: "The official and independent community focused wiki site for Dovedale Railway that works with developers to provide the best in class information for the game." game_link: https://www.roblox.com/games/12018816388/2-0-Dovedale-Railway discord: https://discord.gg/RkaqNZKc status: https://status.dovedale.wiki kofi: https://ko-fi.com/dovedale - joined: "April 2024" + joined: "March 2025" team: - name: enews + - name: jaiden + - name: Bob85 + - name: Dgox + - name: Aeywoo - name: Hybrid Cafe Wiki link: https://hybridcafe.wiki - logo: /media/files/HybridCafeLogo_Black.svg - description: "We write about The Hybrid Café, a game by ArenaDev. Staff and maintain the most dangerous café in town and uncover its secrets." + logo: /assets/wiki-logos/HybridCafe_White.svg + description: "We write about The Hybrid Café, a game by ArenaDev. Staff and maintain the most dangerous café in town and uncover its secrets." game_link: https://www.roblox.com/games/132813250731469/QUESTS-The-Hybrid-Cafe discord: https://discord.gg/d69skQeKfg twitter: https://x.com/arenawiki - joined: "May 2024" + joined: "February 2025" team: - name: enews + - name: uchuu + - name: Billie - name: Something Evil Will Happen Wiki link: https://sewh.miraheze.org/ - logo: /media/files/SEWH.png - description: "The wiki documenting the game Something Evil Will Happen, a chaotic survival-disaster party game." + logo: /assets/wiki-logos/SEWH.png + description: "The wiki documenting the game Something Evil Will Happen, a chaotic survival-disaster party game." game_link: https://www.roblox.com/games/16991287194/RECODE-something-evil-will-happen discord: https://discord.com/invite/HbGJazBq9u - joined: "June 2024" + joined: "August 2025" team: - name: Rose - name: Patred + - name: Nago + - name: Progeest - name: Cinna + - name: ampersand - name: Restaurant Tycoon 3 Wiki link: https://rt3.ugwiki.org - logo: /media/files/RT3.png - description: "The officially endorsed Restaurant Tycoon 3 Wiki, an encyclopedia that encompasses everything RT3! Find out about everything from codes and recent updates to worker and build mode information!" + logo: /assets/wiki-logos/RT3.png + description: "The officially endorsed Restaurant Tycoon 3 Wiki, an encyclopedia that encompasses everything RT3! Find out about everything from codes and recent updates to worker and build mode information!" discord: https://discord.gg/42sSnpjV38 - joined: "July 2024" + joined: "October 2025" team: - - name: RT3 Staff + - name: orix + - name: Phoenix - name: 3D Planets Simulator Wiki link: https://3ps.miraheze.org - logo: /media/files/3DPS.png - description: "The official database for 3D Planets Simulator, A space-themed colonization and industry game based on Roblox. Join now and explore the Blue Galaxy!" + logo: /assets/wiki-logos/3DPS.svg + description: "The official database for 3D Planets Simulator, A space-themed colonization and industry game based on Roblox. Join now and explore the Blue Galaxy!" discord: https://discord.gg/BetFzeDmcH - joined: "August 2024" + joined: "November 2025" team: - - name: 3DPS Staff + - name: Crimrix + - name: Spacelemoon + - name: Fsh + - name: Inky Bendy - name: PHIGHTING! Wiki link: https://phighting.wiki/ - logo: /media/files/PHIGHTING.png - description: "The official wiki for PHIGHTING!, the character-driven class-based third person shooter that reimagines classic Roblox! Come enter the PHIGHT!" + logo: /assets/wiki-logos/PHIGHTING.png + description: "The official wiki for PHIGHTING!, the character-driven class-based third person shooter that reimagines classic Roblox! Come enter the PHIGHT!" game_link: https://www.roblox.com/games/7138009149/PHIGHTING-ALPHA discord: https://discord.gg/boggio - joined: "September 2024" + joined: "September 2025" team: - - name: Boggio + - name: NINJISY + - name: bee + - name: TarT - name: Roblox D-DAY Wiki link: https://robloxdday.miraheze.org - logo: "/media/files/D-DAY (Temp).png" - description: "This officially-recognized wiki is dedicated to the Roblox game D-DAY, providing the most accurate information possible to its fans." - joined: "October 2024" + logo: "/assets/wiki-logos/D-DAY.png" + description: "This officially-recognized wiki is dedicated to the Roblox game D-DAY, providing the most accurate information possible to its fans." + joined: "December 2025" + team: + - name: poopy kibble + +- name: Anime Vanguards Wiki + link: https://wiki.vanguards.gg + logo: "/assets/wiki-logos/AnimeVanguards_White.svg" + description: "With many fans to provide for in the Anime Tower Defense (ATD) scene, the Anime Vanguards Wiki aims to deliver, being officially developer supported and maintained by our in-house wiki staff. Whether it's comprehensive information coverage or gorgeous UI elements, we always seek to bring the best experience possible to the players through our passion." + game_link: https://www.roblox.com/games/16146832113/Anime-Vanguards + discord: https://discord.gg/animevanguards + joined: "March 2026" + team: + - name: lewisakura + - name: Salticidae44 + - name: Sunny + - name: Digo + - name: .sh1zu + - name: Feverdream + +- name: PARKOUR Reborn Wiki + link: https://parkourreborn.wiki + logo: "/assets/wiki-logos/ParkourReborn.png" + description: "The official wiki for the Roblox game PARKOUR Reborn. Explore the city of Verna by mastering movement mechanics and unlocking gear. Hop on Reborn!" + game_link: https://www.roblox.com/games/11639495622/PARKOUR-Reborn + discord: https://discord.gg/eU8F9AUuSW + joined: "April 2026" team: - - name: D-DAY Staff + - name: lightning \ No newline at end of file diff --git a/_data/partners.yml b/_data/partners.yml index 2a21840e..345462bc 100644 --- a/_data/partners.yml +++ b/_data/partners.yml @@ -1,11 +1,11 @@ - name: Indie Wiki Federation link: https://indiewikifederation.org/ - logo: /media/files/IWF Logo.png + logo: /assets/wiki-logos/IWF_Logo.png description: The Independent Wiki Federation (IWF) welcomes independent wikis to join with the goal of growing our member communities, support and collaborating within. The IWF was formed with a mission to include gaming and non-gaming independent wikis, reaching independent wikis scattered throughout the internet, and to provide independent wikis with opportunities for growing their community's online reach. discord: https://discord.gg/kyAMMnCGa4 twitter: https://x.com/indiewikifed - name: Roblox Fandom Interwiki link: https://community.fandom.com/wiki/Template:RobloxWikis/doc - logo: /media/files/RobloxFandomInterwiki.webp + logo: /assets/wiki-logos/RobloxFandomInterwiki.webp description: The Roblox Fandom Interwiki is a project designed to bring numerous Roblox wiki communities on Fandom together through one main template. While revolving around the Fandom platform, the project supports the works and goals of the IRWA project. diff --git a/_includes/entity-modal.html b/_includes/entity-modal.html new file mode 100644 index 00000000..6bca5217 --- /dev/null +++ b/_includes/entity-modal.html @@ -0,0 +1,41 @@ + + diff --git a/_includes/footer.html b/_includes/footer.html index 1f58650b..933cf016 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,14 +1,26 @@ + \ No newline at end of file diff --git a/_includes/head.html b/_includes/head.html index 38dcc64b..25cf6eb1 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -1,38 +1,25 @@ -{% if page.title %}{{ page.title }} - {% endif %}{{ site.title }} - - - - +{% seo %} - - - - - - - - - - - - - - -{% if page.url == "/members/" %} - +{% unless page.image %} + + + +{% endunless %} + + + + + + + +{% if page.url == "/members/" or page.url == "/partners/" %} + {% endif %} - - - - - + +{% if page.url == "/" %} + +{% endif %} \ No newline at end of file diff --git a/_includes/header.html b/_includes/header.html index 4f5fa972..b5295b21 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -1,17 +1,16 @@ -
+ diff --git a/_layouts/default.html b/_layouts/default.html index c394949c..fa6c7dfb 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,10 +1,10 @@ - + {% include head.html %} - -
+ +
{% include header.html %}
{{ content }} @@ -21,7 +21,24 @@ relatedContainerForOverlayMenuSelector: '.navbar', }; - + + + + {% if page.body_class contains 'robloxapi' %} + + + + + + {% endif %} + + {% if page.body_class contains 'toc-enabled' %} + + + + + {% endif %} + - + - - - - + \ No newline at end of file diff --git a/_layouts/page.html b/_layouts/page.html index 46755a51..366d9cef 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -2,9 +2,6 @@ layout: default ---
-
-

{{ page.title }}

-
{{ content }} diff --git a/about/index.html b/about/index.html deleted file mode 100644 index 06c51022..00000000 --- a/about/index.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: page -body_class: page-template -title: About -description: Learn about the Independent Roblox Wiki Alliance mission and why we support independence. ---- - -

About

-

This project was created from a small chat for several Roblox wiki representatives to connect independent Roblox wikis and their communities together, and grew to the alliance we have today.

-
-

Why Independence?

-

Wiki hosting companies such as Fandom are some of the most popular places to host wikis for games and communities. However, such companies generally provide a poor experience.

-

As an administrator for a wiki, your goal is to make the best website for your community and or fans. But that goal clashes with the goal of the company running the wiki farm – to earn as much money off your site and content. Communities thus have no full say over how their site is monetised, how it looks, and sometimes what content it hosts.

-

Since its founding, wiki companies like Fandom has received millions of dollars from private investors, venture capitalists, private equity firms and companies. When companies invest, they only expect one thing - more profits back. We believe this is not an ideal way of running a wiki or wiki farm.

-

We thus believe a better world for wikis is possible with independent wikis — Where the decisions can be made with the community in mind, and for the community. Our alliance seeks to unite, assist and help other wikis who are independent, in the process of moving, or wish to move. All our wikis have this freedom, and their sites reflects that.

-

We thus support fully independent wikis, or wiki farms/organisations like Miraheze, who are included as they are generally community-friendly hosts, and level off decent levels of control to the community.

-

The IRWA Approach

-

Project Independence

-

One of our biggest goals is supporting wikis to achieve the freedom to govern themselves and make their own choices without the interference of external influences.

-

Supporting Projects

-

Successful wikis need proper tools and backing. We help projects find the resources and support that they need to find their own style and succeed.

-

Connecting Creators

-

We believe knowledge grows through connection. We are creating a network of like-minded wiki creators to exchange information and promote mutual assistance and collaboration.

-

Contact

-

Official Enquiries & Press:

-

Email our communications team →

-

General Enquiries & Joining

-

Join our server and review #applications →

-

Security:

-

Review our security.txt file →

-

Features

- - - - - - -
-
Miraheze Monthly: February 2026
- Read More → -
diff --git a/alliance-partners/index.html b/alliance-partners/index.html deleted file mode 100644 index fa30003a..00000000 --- a/alliance-partners/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: page -body_class: page-template -title: Alliance Partnership -description: Our partners are other wiki alliances and websites that have mutually partnered with us to support our mission. ---- - -

Alliance Partners

-

Our partners are other wiki alliances and websites that have mutually partnered with us to support our mission and to promote collaboration towards our shared goals. Take a look at our partner sites here!

-

Interested in a partnership? Join our discord server and get in contact!

- - - - {% for partner in site.data.partners %} - - - - - {% endfor %} - -
- -
- {{ partner.name }} -
-
-
-

{{ partner.name }}
- {{ partner.description }}
- - - - {% if partner.discord %} - - - - {% endif %} - {% if partner.twitter %} - - - - {% endif %} -

-
diff --git a/assets/backgrounds/3PS_Dirt_Thing.png b/assets/backgrounds/3PS_Dirt_Thing.png new file mode 100644 index 00000000..783224bd Binary files /dev/null and b/assets/backgrounds/3PS_Dirt_Thing.png differ diff --git a/assets/backgrounds/3PS_Nature.png b/assets/backgrounds/3PS_Nature.png new file mode 100644 index 00000000..7a1a8dcd Binary files /dev/null and b/assets/backgrounds/3PS_Nature.png differ diff --git a/assets/backgrounds/3PS_Sun.png b/assets/backgrounds/3PS_Sun.png new file mode 100644 index 00000000..86983733 Binary files /dev/null and b/assets/backgrounds/3PS_Sun.png differ diff --git a/assets/backgrounds/Anime_Vanguards_BG.png b/assets/backgrounds/Anime_Vanguards_BG.png new file mode 100644 index 00000000..fff41630 Binary files /dev/null and b/assets/backgrounds/Anime_Vanguards_BG.png differ diff --git a/assets/backgrounds/D-DAY_Omaha_Beach.png b/assets/backgrounds/D-DAY_Omaha_Beach.png new file mode 100644 index 00000000..18d0deef Binary files /dev/null and b/assets/backgrounds/D-DAY_Omaha_Beach.png differ diff --git a/assets/backgrounds/Dovedale_Central.png b/assets/backgrounds/Dovedale_Central.png new file mode 100644 index 00000000..f7af5a32 Binary files /dev/null and b/assets/backgrounds/Dovedale_Central.png differ diff --git a/assets/backgrounds/Dovedale_Sunset.png b/assets/backgrounds/Dovedale_Sunset.png new file mode 100644 index 00000000..7d64b03b Binary files /dev/null and b/assets/backgrounds/Dovedale_Sunset.png differ diff --git a/assets/backgrounds/Dovedale_Tunnel.png b/assets/backgrounds/Dovedale_Tunnel.png new file mode 100644 index 00000000..ea6c8701 Binary files /dev/null and b/assets/backgrounds/Dovedale_Tunnel.png differ diff --git a/assets/backgrounds/Fisch_Ancient_Isle.png b/assets/backgrounds/Fisch_Ancient_Isle.png new file mode 100644 index 00000000..531ba965 Binary files /dev/null and b/assets/backgrounds/Fisch_Ancient_Isle.png differ diff --git a/assets/backgrounds/Fisch_Toxic_Grove.png b/assets/backgrounds/Fisch_Toxic_Grove.png new file mode 100644 index 00000000..477168cf Binary files /dev/null and b/assets/backgrounds/Fisch_Toxic_Grove.png differ diff --git a/assets/backgrounds/Fisch_Trade_Plaza.png b/assets/backgrounds/Fisch_Trade_Plaza.png new file mode 100644 index 00000000..2dc78060 Binary files /dev/null and b/assets/backgrounds/Fisch_Trade_Plaza.png differ diff --git a/assets/backgrounds/GBP_London.png b/assets/backgrounds/GBP_London.png new file mode 100644 index 00000000..ddd9bad7 Binary files /dev/null and b/assets/backgrounds/GBP_London.png differ diff --git a/assets/backgrounds/GBP_San_Sebastian.png b/assets/backgrounds/GBP_San_Sebastian.png new file mode 100644 index 00000000..7c9c7cce Binary files /dev/null and b/assets/backgrounds/GBP_San_Sebastian.png differ diff --git a/assets/backgrounds/PHIGHTING_Crossroads_v2.png b/assets/backgrounds/PHIGHTING_Crossroads_v2.png new file mode 100644 index 00000000..1088f43e Binary files /dev/null and b/assets/backgrounds/PHIGHTING_Crossroads_v2.png differ diff --git a/assets/backgrounds/PHIGHTING_Crossroads_v2_2.png b/assets/backgrounds/PHIGHTING_Crossroads_v2_2.png new file mode 100644 index 00000000..9fb8166d Binary files /dev/null and b/assets/backgrounds/PHIGHTING_Crossroads_v2_2.png differ diff --git a/assets/backgrounds/PHIGHTING_Crossroads_v2_3.png b/assets/backgrounds/PHIGHTING_Crossroads_v2_3.png new file mode 100644 index 00000000..c44c2229 Binary files /dev/null and b/assets/backgrounds/PHIGHTING_Crossroads_v2_3.png differ diff --git a/assets/backgrounds/Parkour_Reborn_Fragment.png b/assets/backgrounds/Parkour_Reborn_Fragment.png new file mode 100644 index 00000000..c05fa5cf Binary files /dev/null and b/assets/backgrounds/Parkour_Reborn_Fragment.png differ diff --git a/assets/backgrounds/Parkour_Reborn_Stack.png b/assets/backgrounds/Parkour_Reborn_Stack.png new file mode 100644 index 00000000..3df21ca8 Binary files /dev/null and b/assets/backgrounds/Parkour_Reborn_Stack.png differ diff --git a/assets/backgrounds/Restaurant_Tycoon_3_Farm.png b/assets/backgrounds/Restaurant_Tycoon_3_Farm.png new file mode 100644 index 00000000..2c2d059e Binary files /dev/null and b/assets/backgrounds/Restaurant_Tycoon_3_Farm.png differ diff --git a/assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png b/assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png new file mode 100644 index 00000000..56112c03 Binary files /dev/null and b/assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png differ diff --git a/assets/backgrounds/RobloxAPI_Mesh_Gradient.webp b/assets/backgrounds/RobloxAPI_Mesh_Gradient.webp new file mode 100644 index 00000000..8a917619 Binary files /dev/null and b/assets/backgrounds/RobloxAPI_Mesh_Gradient.webp differ diff --git a/assets/backgrounds/SEWH_Mountain_Lodge.png b/assets/backgrounds/SEWH_Mountain_Lodge.png new file mode 100644 index 00000000..e38dbfdb Binary files /dev/null and b/assets/backgrounds/SEWH_Mountain_Lodge.png differ diff --git a/assets/backgrounds/SEWH_Ravenrock_Island.png b/assets/backgrounds/SEWH_Ravenrock_Island.png new file mode 100644 index 00000000..a9cde14a Binary files /dev/null and b/assets/backgrounds/SEWH_Ravenrock_Island.png differ diff --git a/assets/backgrounds/SEWH_Town.png b/assets/backgrounds/SEWH_Town.png new file mode 100644 index 00000000..97df5371 Binary files /dev/null and b/assets/backgrounds/SEWH_Town.png differ diff --git a/assets/backgrounds/UTG_Raven_Ranch.png b/assets/backgrounds/UTG_Raven_Ranch.png new file mode 100644 index 00000000..1ffc1f55 Binary files /dev/null and b/assets/backgrounds/UTG_Raven_Ranch.png differ diff --git a/assets/backgrounds/UTG_Skylands.png b/assets/backgrounds/UTG_Skylands.png new file mode 100644 index 00000000..9273382a Binary files /dev/null and b/assets/backgrounds/UTG_Skylands.png differ diff --git a/assets/backgrounds/UTG_Tokyo_Town.png b/assets/backgrounds/UTG_Tokyo_Town.png new file mode 100644 index 00000000..143b6f33 Binary files /dev/null and b/assets/backgrounds/UTG_Tokyo_Town.png differ diff --git a/assets/backgrounds/day-sky.png b/assets/backgrounds/day-sky.png new file mode 100644 index 00000000..d2e87b89 Binary files /dev/null and b/assets/backgrounds/day-sky.png differ diff --git a/assets/backgrounds/frosted-texture.png b/assets/backgrounds/frosted-texture.png new file mode 100644 index 00000000..d02a8c6e Binary files /dev/null and b/assets/backgrounds/frosted-texture.png differ diff --git a/assets/backgrounds/futuristic-city.png b/assets/backgrounds/futuristic-city.png new file mode 100644 index 00000000..f5bb79d0 Binary files /dev/null and b/assets/backgrounds/futuristic-city.png differ diff --git a/assets/css/_mixins.css b/assets/css/_mixins.css new file mode 100644 index 00000000..e69de29b diff --git a/assets/css/_mixins.less b/assets/css/_mixins.less new file mode 100644 index 00000000..2040c3b9 --- /dev/null +++ b/assets/css/_mixins.less @@ -0,0 +1,56 @@ +.overlay-mixin() { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: oklch(from #000 l c h / 0.6); + backdrop-filter: blur(5px); + transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); + + @starting-style { + backdrop-filter: blur(0px); + } +} + +.button-mixin(@hue: var(--hue, 142.5)) { + background: linear-gradient(to bottom, oklch(0.6653 0.2227 @hue), oklch(0.4724 0.1604 @hue)); + box-shadow: 0 8px 20px -3px oklch(from #000 l c h / 0.12); + border: 1px solid oklch(0.4724 0.1604 @hue); + color: #fff; + cursor: pointer; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; + font: normal 600 0.8888888889rem var(--font-body); + padding: 0.5rem 0.75rem; + vertical-align: top; + text-align: center; + transition: all 0.2s ease-out; + will-change: transform; + width: 100%; + word-break: normal; + + @media all and (min-width: 20em) { + width: auto; + } + + &:hover { + color: #fff; + background: linear-gradient(to bottom, oklch(0.8198 0.2429 @hue), oklch(0.6172 0.2099 @hue)); + box-shadow: 0 12px 20px 0 oklch(from #000 l c h / 0.12); + text-decoration: none; + } + + &:focus-visible { + outline: 2px solid currentcolor; + outline-offset: 2px; + } + + &:disabled { + background: var(--neutral-2); + color: var(--neutral-9); + cursor: not-allowed; + } +} \ No newline at end of file diff --git a/assets/css/editor.css b/assets/css/editor.css deleted file mode 100644 index 89146048..00000000 --- a/assets/css/editor.css +++ /dev/null @@ -1,3 +0,0 @@ -/* - * Add your own CSS code for the WYSIWYG editor - */ \ No newline at end of file diff --git a/assets/css/main.css b/assets/css/main.css deleted file mode 100644 index e0e52ec1..00000000 --- a/assets/css/main.css +++ /dev/null @@ -1,2290 +0,0 @@ -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - padding: 0; -} - -article, -aside, -footer, -header, -hgroup, -main, -nav, -section { - display: block; -} - -li { - list-style: none; -} - -img { - height: auto; - max-width: 100%; - vertical-align: top; -} - -button, -input, -select, -textarea { - font: inherit; -} - -address { - font-style: normal; -} - -::-moz-selection { - background: var(--color); - color: var(--white); -} - -::selection { - background: var(--color); - color: var(--white); -} - -::-webkit-input-placeholder { - color: var(--text-color); -} - -::-moz-placeholder { - color: var(--text-color); -} - -:-ms-input-placeholder { - color: var(--text-color); -} - -::-ms-input-placeholder { - color: var(--text-color); -} - -::placeholder { - color: var(--text-color); -} - -html { - font-size: var(--font-size); - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - scroll-behavior: smooth; -} -html.no-scroll { - overflow: hidden; -} - -body { - background: var(--page-bg); - color: var(--text-color); - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - letter-spacing: var(--letter-spacing); - line-height: var(--line-height); - min-height: 100vh; - padding: 0; - -ms-scroll-chaining: none; - overscroll-behavior: none; -} - -a { - color: var(--link-color); - text-decoration: none; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; -} -a:hover { - color: var(--link-color-hover); -} -a:active { - color: var(--link-color-hover); -} -a:focus { - color: var(--link-color-hover); - outline: none; -} - -.invert { - color: var(--link-color-hover); - text-decoration: none; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; -} -.invert:hover { - color: var(--link-color); -} -.invert:active { - color: var(--link-color); -} -.invert:focus { - color: var(--link-color); - outline: none; -} - -p, -ul, -ol, -dl, -pre { - margin-top: calc(var(--baseline) * 7); -} - -blockquote, -figure, -hr, -pre, -table { - margin-top: calc(var(--baseline) * 9); - margin-bottom: calc(var(--baseline) * 9); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: var(--headings-color); - font-family: var(--font-heading); - font-variation-settings: "wght" var(--headings-weight); - font-style: var(--headings-style); - -ms-hyphens: manual; - hyphens: manual; - letter-spacing: var(--headings-letter-spacing); - line-height: var(--headings-line-height); - margin-top: calc(var(--baseline) * 11); - text-transform: var(--headings-transform); -} - -h1, -.h1 { - font-size: clamp(1.8020324707rem, 1.8020324707rem + 0.7637520432 * (100vw - 20rem) / 80, 2.565784514rem); -} - -h2, -.h2 { - font-size: clamp(1.423828125rem, 1.423828125rem + 0.6034584045 * (100vw - 20rem) / 80, 2.0272865295rem); -} - -h3, -.h3 { - font-size: clamp(1.265625rem, 1.265625rem + 0.5364074707 * (100vw - 20rem) / 80, 1.8020324707rem); -} - -h4, -.h4 { - font-size: clamp(1.125rem, 1.125rem + 0.298828125 * (100vw - 20rem) / 80, 1.423828125rem); -} - -h5, -.h5 { - font-size: clamp(1rem, 1rem + 0.265625 * (100vw - 20rem) / 80, 1.265625rem); -} - -h6, -.h6 { - font-size: clamp(1rem, 1rem + 0.125 * (100vw - 20rem) / 80, 1.125rem); -} - -h1 + *, -h2 + *, -h3 + *, -h4 + *, -h5 + *, -h6 + * { - margin-top: calc(var(--baseline) * 4); -} - -b, -strong { - font-variation-settings: "wght" var(--font-weight-bold); -} - -blockquote { - -webkit-box-sizing: content-box; - box-sizing: content-box; - margin-left: auto; - margin-right: auto; - max-width: 80%; - padding: calc(var(--baseline) * 22) 0 calc(var(--baseline) * 12); - position: relative; - font-size: clamp(1.265625rem, 1.265625rem + 0.158203125 * (100vw - 20rem) / 80, 1.423828125rem); -} -@media all and (min-width: 37.5em) { - blockquote { - max-width: 60%; - } -} -blockquote::before { - color: var(--light); - content: "“"; - font: var(--font-weight-normal) 720%/0.9 Georgia, Times, Times New Roman, serif; - left: -15%; - position: absolute; - top: calc(var(--baseline) * 11); -} -@media all and (min-width: 37.5em) { - blockquote::before { - left: -20%; - } -} -blockquote > :nth-child(1) { - margin-top: 0; -} - -ul, -ol { - margin-left: 3ch; -} -ul > li, -ol > li { - list-style: inherit; - padding: 0 0 calc(var(--baseline) * 2) 1ch; -} -ul ul, -ul ol, -ol ul, -ol ol { - margin-bottom: calc(var(--baseline) * 2); - margin-top: calc(var(--baseline) * 2); -} - -dl dt { - font-variation-settings: "wght" var(--font-weight-bold); -} - -code { - background-color: rgba(var(--inline-code), 0.1); - border-radius: 3px; - color: rgb(var(--inline-code)); - font-size: 1rem; - font-family: var(--monospace); - padding: 0.25rem 0.5rem; -} - -pre { - background-color: var(--lighter); - border-radius: var(--border-radius); - font-size: 1rem; - max-height: var(--pre-height); - padding: calc(var(--baseline) * 6); - white-space: pre-wrap !important; - word-wrap: break-word; - width: 100%; -} -pre code { - background-color: var(--lighter); - color: inherit !important; - font-size: inherit; - padding: 0; -} - -table { - border: 1px solid var(--light); - border-left: none; - border-collapse: collapse; - border-spacing: 0; - vertical-align: top; - text-align: left; - width: 100%; -} -table th { - font-variation-settings: "wght" var(--font-weight-bold); - padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4); -} -table td { - border-top: 1px solid var(--light); - border-left: 1px solid var(--light); - padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4); -} - -figcaption { - color: var(--gray-1); - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - font-size: 0.7901234568rem; - margin-top: calc(var(--baseline) * 4); - text-align: center; -} - -kbd { - background: var(--dark); - border-radius: 3px; - color: var(--white); - font-family: var(--monospace); - font-size: 0.8888em; - padding: 0.125rem 0.375rem; -} - -sub, -sup { - font-size: 65%; -} - -small { - font-size: 0.7901234568rem; -} - -hr, -.separator { - background: none; - border: none; - height: auto; - line-height: 1; - max-width: none; - text-align: center; -} -hr::before, -.separator::before { - content: "***"; - color: var(--dark); - font-size: 1.265625rem; - font-variation-settings: "wght" var(--font-weight-bold); - letter-spacing: 1.265625rem; - padding-left: 1.265625rem; -} - -.separator--dot::before { - content: "*"; - color: var(--dark); - font-size: 1.265625rem; - font-variation-settings: "wght" var(--font-weight-bold); - letter-spacing: 1.265625rem; - padding-left: 1.265625rem; -} -.separator--long-line { - position: relative; -} -.separator--long-line::before { - content: ""; - height: 1.265625rem; -} -.separator--long-line::after { - border-top: 1px solid var(--light); - content: ""; - height: 1px; - position: absolute; - width: 100%; - top: 50%; - left: 0; -} - -.btn, [type=button], -[type=submit], -button { - background: var(--color); - -webkit-box-shadow: 0px 8px 20px -3px rgba(var(--dark-rgb), 0.12); - box-shadow: 0px 8px 20px -3px rgba(var(--dark-rgb), 0.12); - border: none; - border-radius: var(--border-radius); - color: white; - cursor: pointer; - display: inline-block; - font: var(--font-weight-normal) 0.8888888889rem var(--font-heading); - padding: 0.75rem 1rem; - vertical-align: top; - text-align: center; - -webkit-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; - will-change: transform; - width: 100%; -} -@media all and (min-width: 20em) { - .btn, [type=button], - [type=submit], - button { - width: auto; - } -} -.btn:hover, [type=button]:hover, -[type=submit]:hover, -button:hover, .btn:focus, [type=button]:focus, -[type=submit]:focus, -button:focus { - color: white; - -webkit-box-shadow: 0 12px 20px 0 rgba(var(--dark-rgb), 0.12); - box-shadow: 0 12px 20px 0 rgba(var(--dark-rgb), 0.12); - text-decoration: none; - -webkit-transform: translateY(-3px); - transform: translateY(-3px); -} -.btn:focus, [type=button]:focus, -[type=submit]:focus, -button:focus { - outline: none; -} -.btn:disabled, [type=button]:disabled, -[type=submit]:disabled, -button:disabled { - background-color: var(--light); - color: var(--dark); - cursor: not-allowed; -} -.btn--white { - background: var(--white); - color: var(--gray-1); -} -.btn--white:hover, .btn--white:focus { - color: var(--color); -} -@media all and (max-width: 19.9375em) { - .btn + .btn, [type=button] + .btn, - [type=submit] + .btn, - button + .btn, .btn + [type=button], [type=button] + [type=button], - [type=submit] + [type=button], - button + [type=button], - .btn + [type=submit], - [type=button] + [type=submit], - [type=submit] + [type=submit], - button + [type=submit], - .btn + button, - [type=button] + button, - [type=submit] + button, - button + button { - margin-top: calc(var(--baseline) * 2); - } -} - -[type=button], -[type=submit], -button { - -webkit-appearance: none; - -moz-appearance: none; -} - -::-webkit-input-placeholder { - color: var(--gray-2); - opacity: 1; -} - -::-moz-placeholder { - color: var(--gray-2); - opacity: 1; -} - -:-ms-input-placeholder { - color: var(--gray-2); - opacity: 1; -} - -::-ms-input-placeholder { - color: var(--gray-2); - opacity: 1; -} - -::placeholder { - color: var(--gray-2); - opacity: 1; -} - -fieldset { - border: 1px solid var(--light); - border-radius: 4px; - margin: 0 0 calc(var(--baseline) * 6); - padding: 1.5rem; -} -fieldset > legend { - margin-left: -1rem; - padding: 0 1rem; -} - -legend { - font-variation-settings: "wght" var(--headings-weight); -} - -label { - font-variation-settings: "wght" var(--headings-weight); - margin: 0 1rem calc(var(--baseline) * 3) 0; -} - -option { - font-variation-settings: "wght" var(--font-weight-normal); -} - -[type=text], -[type=url], -[type=tel], -[type=number], -[type=email], -[type=search], -textarea, -select { - background-color: var(--white); - border: none; - border: 1px solid var(--light); - border-radius: var(--border-radius); - color: var(--text-color); - font-size: 1rem; - outline: none; - padding: 0.5rem 0.74rem; - width: 100%; - -webkit-appearance: none; - -moz-appearance: none; -} -@media all and (min-width: 37.5em) { - [type=text], - [type=url], - [type=tel], - [type=number], - [type=email], - [type=search], - textarea, - select { - width: auto; - } -} -[type=text]:focus, -[type=url]:focus, -[type=tel]:focus, -[type=number]:focus, -[type=email]:focus, -[type=search]:focus, -textarea:focus, -select:focus { - border-color: var(--color); -} - -input[type=checkbox], -input[type=radio] { - color: var(--text-color); - opacity: 0; - position: absolute; -} -input[type=checkbox] + label, -input[type=radio] + label { - display: block; - font-variation-settings: "wght" var(--font-weight-normal); - position: relative; - margin-left: -1px; - cursor: pointer; - padding: 0 0 0 calc(var(--baseline) * 9); -} -input[type=checkbox] + label::before, -input[type=radio] + label::before { - background-color: var(--white); - border: 1px solid var(--light); - border-radius: 2px; - content: ""; - display: block; - height: calc(var(--baseline) * 5); - left: 0; - line-height: calc(var(--baseline) * 5); - margin-right: calc(var(--baseline) * 5); - position: absolute; - text-align: center; - top: var(--baseline); - width: calc(var(--baseline) * 5); -} -input[type=checkbox]:checked + label::before, -input[type=radio]:checked + label::before { - background-image: none !important; - content: ""; - border-color: var(--color); -} -input[type=checkbox]:checked + label::after, -input[type=radio]:checked + label::after { - content: ""; - display: block; - width: 6px; - height: 9px; - border: solid var(--color); - border-width: 0 2px 2px 0; - left: calc(var(--baseline) * 1.1); - position: absolute; - top: calc(var(--baseline) * 3); - -webkit-transform: rotate(45deg) translate(0, -50%); - transform: rotate(45deg) translate(0, -50%); -} - -input[type=radio] + label::before { - border-radius: 50%; -} - -[type=file] { - margin-bottom: calc(var(--baseline) * 6); - width: 100%; -} - -select { - border-radius: var(--border-radius); - max-width: 100%; - width: auto; - position: relative; -} -select:not([multiple]) { - background: url('data:image/svg+xml;utf8,') no-repeat 90% 50%; - background-size: 8px; - padding-right: calc(var(--baseline) * 12); -} - -select[multiple] { - border: 1px solid var(--light); - padding: calc(var(--baseline) * 6); - width: 100%; -} -select[multiple]:hover { - border-color: var(--light); -} -select[multiple]:focus { - border-color: var(--color); -} -select[multiple]:disabled { - background-color: var(--light); - cursor: not-allowed; -} -select[multiple]:disabled:hover { - border-color: var(--light); -} - -textarea { - display: block; - overflow: auto; - resize: vertical; - max-width: 100%; -} - -.header { - align-items: center; - display: flex; - height: var(--navbar-height); - margin-top: 2rem; - max-width: var(--page-width); - position: relative; -} -@media all and (min-width: 80.0625em) and (min-height: 50em) { - .header { - margin-top: 3rem; - } -} - -.logo { - order: 1; - color: var(--dark) !important; - font-family: var(--font-logo); - font-variation-settings: "wght" var(--font-weight-bold); - font-size: 1.423828125rem; - line-height: 1; - margin-right: auto; - white-space: nowrap; -} -@media all and (max-width: 74.9375em) { - .logo { - text-align: center; - } -} -.logo > img { - height: 4rem; - -o-object-fit: contain; - object-fit: contain; - padding: calc(var(--baseline) * 2) 0; - width: auto; -} - -.search { - margin-right: 1.5rem; - order: 2; - text-align: right; - z-index: 99; -} -@media all and (min-width: 56.25em) { - .search { - margin: 0 0 0 1.5rem; - order: 3; - } -} -.search__btn { - border: none; - background: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - margin-bottom: 0; - padding-right: 0; - padding-left: 0; - width: auto; -} -.search__btn:hover, .search__btn:focus { - outline: none; - -webkit-transform: translateY(0); - transform: translateY(0); -} -.search__btn:hover > svg, .search__btn:focus > svg { - fill: var(--color); -} -.search__btn > svg { - display: inline-block; - fill: var(--gray-1); - -webkit-transition: all 0.24s ease; - transition: all 0.24s ease; - vertical-align: middle; -} -.search__input { - background: none; - border: none; - font-size: 0.8888888889rem; - padding: 0 1rem 0 0; - width: 100%; -} -@media all and (min-width: 37.5em) { - .search__input { - min-width: 18rem; - } -} -.search__input:focus { - color: var(--dark); -} -.search__input:focus::-webkit-input-placeholder { - color: var(--gray-2) !important; - opacity: 0.66; -} -.search__input:focus::-moz-placeholder { - color: var(--gray-2) !important; - opacity: 0.66; -} -.search__input:focus:-ms-input-placeholder { - color: var(--gray-2) !important; - opacity: 0.66; -} -.search__input:focus::-ms-input-placeholder { - color: var(--gray-2) !important; - opacity: 0.66; -} -.search__input:focus::placeholder { - color: var(--gray-2) !important; - opacity: 0.66; -} -.search__form { - align-items: center; - display: flex; - justify-content: space-between; -} -.search__button { - -webkit-box-shadow: unset; - box-shadow: unset; - width: auto !important; -} -.search__button:hover, .search__button:focus { - -webkit-transform: translateY(0); - transform: translateY(0); -} -.search__overlay { - background: var(--lighter); - border-radius: var(--border-radius); - border: 2px solid var(--light); - left: 0; - opacity: 0; - padding: calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 4); - position: absolute; - right: 0; - top: 0; - -webkit-transition: all 0.24s ease-out; - transition: all 0.24s ease-out; - visibility: hidden; - z-index: 100; -} -@media all and (min-width: 56.25em) { - .search__overlay { - background: var(--lighter); - border: none; - left: auto; - top: var(--navbar-height); - -webkit-transform: translateY(calc(var(--baseline) * -3)); - transform: translateY(calc(var(--baseline) * -3)); - } -} -.search__overlay.expanded { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 1; - display: block; - visibility: visible; -} -.search__form { - align-items: center; - display: flex; - justify-content: space-between; -} - -.navbar { - order: 3; - position: relative; -} -@media all and (min-width: 56.25em) { - .navbar { - order: 2; - } -} -.navbar .navbar__menu { - display: flex; - list-style: none; - margin: 0; - padding: 0; -} -@media all and (max-width: 56.1875em) { - .navbar .navbar__menu { - display: none; - } -} -.navbar .navbar__menu li { - display: block; - font-size: 0.8888888889rem; - font-family: var(--font-menu); - line-height: var(--line-height); - padding: 0; - position: relative; - white-space: nowrap; -} -.navbar .navbar__menu li a, -.navbar .navbar__menu li span[aria-haspopup=true] { - color: var(--link-color-hover); - display: block; - padding: 0 0.75rem; - -webkit-transition: all 0.24s ease-out; - transition: all 0.24s ease-out; -} -.navbar .navbar__menu li a:active, .navbar .navbar__menu li a:focus, .navbar .navbar__menu li a:hover, -.navbar .navbar__menu li span[aria-haspopup=true]:active, -.navbar .navbar__menu li span[aria-haspopup=true]:focus, -.navbar .navbar__menu li span[aria-haspopup=true]:hover { - color: var(--link-color); -} -.navbar .navbar__menu li span { - color: var(--dark); - cursor: default; - display: block; - padding: 0 0.5rem; -} -.navbar .navbar__menu > li { - line-height: var(--navbar-height); -} -.navbar .navbar__menu > li:hover > a, .navbar .navbar__menu > li:hover > span[aria-haspopup=true] { - color: var(--link-color); -} -.navbar .navbar__menu > li:hover > [aria-haspopup=true] { - -webkit-box-shadow: none; - box-shadow: none; -} -.navbar .navbar__menu > li:hover.has-submenu::after { - content: ""; - border-color: var(--link-color); -} -.navbar .navbar__menu > li.has-submenu { - position: relative; -} -.navbar .has-submenu:active > .navbar__submenu, -.navbar .has-submenu:focus > .navbar__submenu, -.navbar .has-submenu:hover > .navbar__submenu { - left: 0; - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - visibility: visible; - margin-top: 0; -} -.navbar .has-submenu:active > .navbar__submenu.is-right-submenu, -.navbar .has-submenu:focus > .navbar__submenu.is-right-submenu, -.navbar .has-submenu:hover > .navbar__submenu.is-right-submenu { - left: auto; - right: 0; - -webkit-transform-origin: right top; - transform-origin: right top; -} -.navbar .has-submenu .has-submenu:active > .navbar__submenu, -.navbar .has-submenu .has-submenu:focus > .navbar__submenu, -.navbar .has-submenu .has-submenu:hover > .navbar__submenu { - top: 0; - margin-top: 0; -} -.navbar .has-submenu .has-submenu:active > .navbar__submenu.is-right-submenu, -.navbar .has-submenu .has-submenu:focus > .navbar__submenu.is-right-submenu, -.navbar .has-submenu .has-submenu:hover > .navbar__submenu.is-right-submenu { - top: 0; - margin-top: 0; -} -.navbar .navbar__submenu { - background: var(--lighter); - border-radius: var(--border-radius); - left: -9999px; - list-style-type: none; - margin: 0 0 0.75rem; - padding: 0.75rem 1.5rem; - position: absolute; - text-align: left; - visibility: hidden; - white-space: nowrap; - z-index: 1; - opacity: 0; - -webkit-transform: scale(0.8); - transform: scale(0.8); - -webkit-transform-origin: 0 top; - transform-origin: 0 top; - -webkit-transition: opacity 0.15s, -webkit-transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); - transition: opacity 0.15s, -webkit-transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); - transition: opacity 0.15s, transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); - transition: opacity 0.15s, transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1), -webkit-transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); - will-change: transform; -} -.navbar .navbar__submenu__submenu { - z-index: 2; -} -.navbar .navbar__submenu li { - line-height: 1.5; - font-variation-settings: "wght" var(--font-weight-normal); - padding: 0 0.25rem; - text-transform: none; -} -.navbar .navbar__submenu li:last-child { - border: none; -} -.navbar .navbar__submenu li a, -.navbar .navbar__submenu li span[aria-haspopup=true] { - padding: 0.5rem 0; - -webkit-transition: all 0.24s ease; - transition: all 0.24s ease; -} -.navbar .navbar__submenu li span { - padding: 0.5rem 1.25rem; -} -.navbar .navbar__toggle { - background: var(--light); - border: none; - -webkit-box-shadow: none; - box-shadow: none; - color: var(--link-color); - cursor: pointer; - display: block; - font-variation-settings: "wght" var(--font-weight-bold); - line-height: 1; - overflow: visible; - text-transform: none; - z-index: 2004; -} -@media all and (min-width: 56.25em) { - .navbar .navbar__toggle { - display: none; - } -} -.navbar .navbar__toggle:hover, .navbar .navbar__toggle:focus { - -webkit-box-shadow: none; - box-shadow: none; - outline: none; - -webkit-transform: none; - transform: none; -} - -.navbar_mobile_sidebar { - background: var(--page-bg); - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.25); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.25); - height: 100vh; - left: 0; - max-width: 400px; - overflow: auto; - position: fixed; - top: 0; - -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); - transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); - width: 80%; - z-index: 1000; -} -.navbar_mobile_sidebar.is-hidden { - left: -400px; -} -.navbar_mobile_sidebar .navbar__menu { - margin: 24px; -} -.navbar_mobile_sidebar .navbar__menu li { - font-family: var(--font-heading); - font-size: 16px; - list-style: none; - line-height: 1.3; - margin: 0; - padding: 0; -} -.navbar_mobile_sidebar .navbar__menu li a, -.navbar_mobile_sidebar .navbar__menu li .is-separator { - color: var(--dark); - display: block; - padding: 10px 20px 10px 0; - position: relative; -} -.navbar_mobile_sidebar .navbar__menu li a:active, .navbar_mobile_sidebar .navbar__menu li a:focus, .navbar_mobile_sidebar .navbar__menu li a:hover, -.navbar_mobile_sidebar .navbar__menu li .is-separator:active, -.navbar_mobile_sidebar .navbar__menu li .is-separator:focus, -.navbar_mobile_sidebar .navbar__menu li .is-separator:hover { - color: var(--color); -} -.navbar_mobile_sidebar .navbar__menu li a[aria-haspopup=true]::after, -.navbar_mobile_sidebar .navbar__menu li .is-separator[aria-haspopup=true]::after { - border-right: 1px solid var(--color); - border-top: 1px solid var(--color); - content: ""; - height: 6px; - position: absolute; - right: 6%; - top: 47%; - -webkit-transform: translate(0, -47%) rotate(135deg); - transform: translate(0, -47%) rotate(135deg); - width: 6px; -} -.navbar_mobile_sidebar .navbar__submenu { - margin: 0 0 0 24px; - padding: 0; - visibility: hidden; -} -.navbar_mobile_sidebar .navbar__submenu[aria-hidden=false] { - visibility: visible; -} -.navbar_mobile_sidebar .navbar__submenu_wrapper { - height: 0; - opacity: 0; - overflow: hidden; - -webkit-transition: all 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); - transition: all 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); -} -.navbar_mobile_sidebar .navbar__submenu_wrapper.is-active { - height: auto; - opacity: 1; -} -.navbar_mobile_sidebar__overlay { - background: rgba(0, 0, 0, 0.6); - height: 100%; - opacity: 1; - pointer-events: auto; - position: fixed; - top: 0; - -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); - transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); - width: 100%; - z-index: 1000; -} -.navbar_mobile_sidebar__overlay.is-hidden { - opacity: 0; - pointer-events: none; -} - -.container { - -webkit-box-sizing: content-box; - box-sizing: content-box; - margin-left: auto; - margin-right: auto; - max-width: var(--page-width); - overflow: hidden; - padding: 0 var(--page-margin); -} -.container--narrow { - max-width: var(--entry-width); -} - -.main { - margin-top: var(--magic-number); -} - -.hero { - color: var(--gray-1); - font-size: clamp(1rem, 1rem + 0.125 * (100vw - 20rem) / 80, 1.125rem); - padding-bottom: var(--magic-number); - max-width: var(--entry-width); -} -.hero h1 { - margin-top: 0; -} -.hero h1 sup { - font-variation-settings: "wght" var(--font-weight-normal); - font-size: 1.125rem; - vertical-align: top; -} -.hero p { - margin-top: calc(var(--baseline) * 2); -} -.hero--centered { - margin-left: auto; - margin-right: auto; - text-align: center; -} -.hero--centered p { - margin: calc(var(--baseline) * 4) auto 0; -} - -.l-options { - align-items: flex-start; - display: flex; - gap: 2rem; - justify-content: space-between; - margin-bottom: calc(var(--baseline) * 7); -} -@media all and (min-width: 80.0625em) and (min-height: 50em) { - .l-options { - margin-bottom: calc(var(--baseline) * 10); - } -} -@media all and (max-width: 37.4375em) { - .l-options.nomobile { - display: none; - } -} - -.filter { - margin: 0 -0.5rem; - line-height: 1.4; -} -.filter__item { - background: none; - -webkit-box-shadow: none; - box-shadow: none; - cursor: pointer; - display: inline-block; - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - font-size: 0.8888888889rem; - margin: 0; - padding: 0 0.5rem; - text-transform: none; -} -.filter__item:hover, .filter__item:focus { - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transform: none; - transform: none; -} -.filter__item.is-active { - color: var(--link-color); - -webkit-text-stroke: 0.5px var(--link-color); - pointer-events: none; -} - -.switchers { - align-items: center; - display: flex; - margin-left: auto; -} -@media all and (max-width: 37.4375em) { - .switchers { - display: none; - } -} -.switchers__item { - background: none; - -webkit-box-shadow: none; - box-shadow: none; - color: var(--gray-2); - padding: 0 0.5rem; -} -.switchers__item:hover, .switchers__item:focus { - background: inherit; - -webkit-box-shadow: inherit; - box-shadow: inherit; - color: var(--color); - -webkit-transform: translateY(0); - transform: translateY(0); -} -.switchers__item.is-active { - color: var(--gray-1); - cursor: default; -} - -.l-grid { - -webkit-box-sizing: content-box; - box-sizing: content-box; - display: flex; - flex-wrap: wrap; - margin: calc(-1 * var(--cards-gap)) calc(-0.5 * var(--cards-gap)); - position: relative; -} -.l-grid .c-card { - width: 100%; -} -.l-grid .c-card__wrapper { - margin: var(--cards-gap) calc(var(--cards-gap) / 2); -} -@media all and (min-width: 37.5em) { - .l-grid--2 .c-card { - width: 49.999%; - } -} -@media all and (min-width: 37.5em) { - .l-grid--3 .c-card { - width: 49.999%; - } -} -@media all and (min-width: 75em) { - .l-grid--3 .c-card { - width: 33.333%; - } -} -@media all and (min-width: 37.5em) { - .l-grid--4 .c-card { - width: 49.999%; - } -} -@media all and (min-width: 75em) { - .l-grid--4 .c-card { - width: 33.333%; - } -} -@media all and (min-width: 85em) { - .l-grid--4 .c-card { - width: 24.999%; - } -} -@media all and (min-width: 37.5em) { - .l-grid--1 .c-card { - width: 100%; - } -} - -.c-card { - list-style: none; - padding: 0; -} -@media all and (min-width: 37.5em) { - .c-card--rows .c-card__wrapper { - display: flex; - justify-content: space-between; - } - .c-card--rows .c-card__image { - flex: 0 1 70%; - } - .c-card--rows .c-card__content { - flex: 0 1 20%; - } -} -.c-card__wrapper { - height: 100%; - position: relative; -} -.c-card__wrapper:hover .c-card__image { - -webkit-box-shadow: var(--box-shadow-hover); - box-shadow: var(--box-shadow-hover); - -webkit-transform: scale(1.02); - transform: scale(1.02); -} -.c-card__image { - background-color: var(--lighter); - border-radius: var(--border-radius); - -webkit-box-shadow: var(--box-shadow); - box-shadow: var(--box-shadow); - display: block; - height: var(--card-image-height); - margin: 0; - overflow: hidden; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; - will-change: transform; - width: 100%; -} -.c-card__image > img { - -o-object-fit: cover; - object-fit: cover; - -o-object-position: center; - object-position: center; - height: inherit; - display: block; - width: inherit; -} -.c-card__image--up > img { - -o-object-position: top; - object-position: top; -} -.c-card__image--down > img { - -o-object-position: bottom; - object-position: bottom; -} -.c-card__content { - padding: calc(var(--baseline) * 7) 0; -} -.c-card__title { - font-size: 1rem; - margin: 0; -} -.c-card__title > a:after { - background: transparent; - content: ""; - cursor: pointer; - left: 0; - height: 100%; - position: absolute; - top: 0; - width: 100%; - z-index: 0; -} -.c-card__text { - color: var(--gray-1); - font-size: 0.8888888889rem; - line-height: 1.4; - margin: calc(var(--baseline) * 3) 0; -} -.c-card__meta { - color: var(--gray-1); - display: flex; - font-size: 0.7901234568rem; - margin-top: 0; - position: relative; - z-index: 1; -} -.c-card__meta a { - color: var(--gray-1); - text-decoration: none; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; -} -.c-card__meta a:hover { - color: var(--link-color); -} -.c-card__meta a:active { - color: var(--link-color); -} -.c-card__meta a:focus { - color: var(--link-color); - outline: none; -} -.c-card__meta a + a { - margin-left: var(--baseline); -} - -.content { - position: relative; -} -.content__inner { - max-width: var(--entry-width); - margin: auto; - max-width: var(--entry-width); -} -.content__header { - padding-bottom: calc(var(--magic-number) / 2); -} -.content__header + .content__featured-image { - margin-top: calc(var(--magic-number) / 3.5); -} -.content__featured-image { - margin-top: 0; - margin-bottom: calc(var(--magic-number) / 1.5); -} -.content__featured-image__inner { - background-color: var(--lighter); - border-radius: var(--border-radius); - -webkit-box-shadow: var(--box-shadow); - box-shadow: var(--box-shadow); - height: var(--featured-image-height); -} -.content__featured-image img { - display: block; - height: inherit; - -o-object-fit: cover; - object-fit: cover; - max-width: var(--page-width); - width: 100%; -} -.content__featured-image--full { - margin-left: calc(-50vw + 50% + var(--page-margin)); - margin-right: calc(-50vw + 50% + var(--page-margin)); - padding: 0; - text-align: center; -} -.content__featured-image--full img { - max-width: 100%; -} -.content__title { - margin-top: 0; -} -.content__meta { - color: var(--gray-1); - font-size: 0.8888888889rem; - margin-top: calc(var(--baseline) * 5); -} -@media all and (min-width: 48em) { - .content__meta__left, .content__meta__right { - display: inline-block; - } -} -@media all and (min-width: 31.25em) { - .content__meta__left * + *::before, .content__meta__right * + *::before { - content: "•"; - padding-right: 0.5rem; - } -} -@media all and (min-width: 48em) { - .content__meta__left + .content__meta__left::before, .content__meta__left + .content__meta__right::before, .content__meta__right + .content__meta__left::before, .content__meta__right + .content__meta__right::before { - content: "•"; - padding-right: 0.5rem; - } -} -.content__entry > :nth-child(1) { - margin-top: 0; -} -.content__entry a:not(.btn):not([type=button]):not([type=submit]):not(button):hover { - text-decoration: underline; - -webkit-text-decoration-skip: ink; - text-decoration-skip: ink; -} -.content__author { - font-variation-settings: "wght" var(--font-weight-bold); - margin-right: 0.75rem; -} -.content__author > img { - display: none; -} -@media all and (min-width: 48em) { - .content__author > img { - border-radius: 50%; - display: inline-block; - height: calc(var(--baseline) * 6); - margin-right: var(--baseline); - width: calc(var(--baseline) * 6); - } -} -.content__date, .content__updated { - display: inline-block; - margin: 0 0.5rem 0 0; -} -.content__tag-share { - display: flex; - gap: 1rem; - justify-content: space-between; -} -.content__tag { - font-size: 0.8888888889rem; -} -.content__tag__title { - font-size: inherit; - display: inline-block; - margin: 0 0.5rem 0 0; -} -.content__tag__list { - display: inline; - margin: 0; -} -.content__tag__list li { - color: var(--gray-1); - display: inline-block; - list-style: none; - margin-right: 0.5rem; - padding: 0; -} -.content__share { - flex: 0 0 auto; - font-size: 1rem; - margin-left: -1rem; - position: relative; -} -.content__share > a { - display: inline-block; - margin: 0 0 0 1rem; -} -.content__share > a:hover { - text-decoration: none; -} -.content__share > a svg { - fill: var(--gray-1); - height: 1rem; - pointer-events: none; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; - width: 1rem; -} -.content__footer { - margin-top: calc(var(--magic-number) / 2); -} -.content__related { - margin-top: var(--magic-number); -} -.content__related__title { - font-size: 1rem; - border-top: 1px solid var(--light); - padding: 2rem 0 calc(2rem + 2vmin); -} - -.post__image--left { - float: left; - margin-bottom: calc(var(--baseline) * 6); - margin-right: calc(var(--baseline) * 6); - max-width: 50%; -} -.post__image--right { - float: right; - margin-bottom: calc(var(--baseline) * 6); - margin-left: calc(var(--baseline) * 6); - max-width: 50%; -} -.post__image--center { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} -.post__image--wide { - display: block; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); - text-align: center; -} -.post__image--wide a, -.post__image--wide img { - display: block; - height: auto; - margin: auto; - max-width: var(--page-width); - width: 100%; -} -.post__image--full { - display: block; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); - text-align: center; -} -.post__image--full a, -.post__image--full img { - display: block; - height: auto; - width: 100%; -} -.post__image figcaption a { - color: var(--gray-2); - text-decoration: none; - -webkit-transition: all 0.12s linear; - transition: all 0.12s linear; -} -.post__image figcaption a:hover { - color: var(--dark); -} -.post__image figcaption a:active { - color: var(--dark); -} -.post__image figcaption a:focus { - color: var(--dark); - outline: none; -} -.post__video, .post__iframe { - position: relative; - display: block; - margin-top: calc(var(--baseline) * 9); - margin-bottom: calc(var(--baseline) * 9); - overflow: hidden; - padding: 0; - width: 100%; -} -.post__video::before, .post__iframe::before { - display: block; - content: ""; - padding-top: var(--embed-aspect-ratio); -} -.post__video iframe, .post__video video, .post__iframe iframe, .post__iframe video { - border: none; - height: 100%; - left: 0; - position: absolute; - top: 0; - bottom: 0; - width: 100%; -} -.post__toc { - border: 2px solid var(--light); - border-radius: var(--border-radius); - font-size: 0.8888888889rem; - color: var(--color); - margin-bottom: calc(var(--baseline) * 9); - padding: 2rem; -} -.post__toc h3 { - color: var(--link-color); - font-size: 1rem; - margin: 0 0 calc(var(--baseline) * 3); -} -.post__toc ul { - counter-reset: item; - list-style: decimal; - margin: 0; - padding: 0 0 0 2ch; -} -.post__toc ul li { - counter-increment: item; - padding: 0 0 0 calc(var(--baseline) * 2); -} -.post__toc ul ul { - margin-top: 0; - padding: 0 0 0 calc(var(--baseline) * 2); -} -.post__toc ul ul li { - display: block; -} -.post__toc ul ul li:before { - content: counters(item, ".") ". "; - margin-left: -1rem; - margin-right: var(--baseline); -} - -.banner--before-content { - margin-bottom: var(--magic-number); -} -.banner--after-content { - margin-top: var(--magic-number); -} - -.page--author__avatar { - -webkit-box-shadow: 1px 16px 18px -6px rgba(0, 0, 0, 0.2); - box-shadow: 1px 16px 18px -6px rgba(0, 0, 0, 0.2); - border-radius: 50%; - height: 5rem; - margin: 0 0 calc(var(--baseline) * 6); - width: 5rem; -} -@media all and (min-width: 37.5em) { - .page--author__avatar { - height: 6rem; - width: 6rem; - } -} -.page--author__details { - align-items: center; - border-top: 1px solid var(--light); - font-size: 0.8888888889rem; - display: inline-flex; - margin-top: calc(var(--baseline) * 6); - padding: calc(var(--baseline) * 4) 3rem 0; -} -@media all and (max-width: 37.4375em) { - .page--author__details { - flex-wrap: wrap; - justify-content: center; - padding: calc(var(--baseline) * 4) 0 0; - } -} -.page--author__details span { - flex-basis: 100%; -} -@media all and (min-width: 37.5em) { - .page--author__details span { - flex-basis: auto; - margin-right: 2rem; - } -} -.page--author__details a { - margin-left: 0.3rem; -} -.page--error__title { - font-size: clamp(6.583250172rem, 6.583250172rem + 8.4311510216 * (100vw - 20rem) / 80, 15.0144011936rem); -} -.page--error__btn { - margin-top: calc(var(--baseline) * 7) !important; -} -.page--search form { - align-items: flex-start; - display: flex; - flex-wrap: wrap; -} -@media all and (max-width: 37.4375em) { - .page--search input { - margin-bottom: calc(var(--baseline) * 2); - } -} -@media all and (min-width: 20em) { - .page--search input { - flex: 1 0 auto; - margin-right: calc(var(--baseline) * 2); - } -} -@media all and (max-width: 37.4375em) { - .page--search button { - width: 100%; - } -} - -.subpages { - border-top: 1px solid var(--light); - margin-top: var(--magic-number); -} -.subpages__list { - list-style: initial; - margin-left: 2ch; -} -.subpages__list ul { - list-style: initial; - margin: 0 0 0 2ch; -} -.subpages__list li { - padding: 0 0 0 1ch; -} - -.align-left { - text-align: left; -} - -.align-right { - text-align: right; -} - -.align-center { - text-align: center; -} - -.align-justify { - text-align: justify; -} - -.msg { - background-color: var(--lighter); - border-left: 4px solid transparent; - border-radius: var(--border-radius); - font-size: 0.8888888889rem; - padding: calc(var(--baseline) * 6) calc(var(--baseline) * 8); -} -.msg--highlight { - border-color: var(--yellow); -} -.msg--info { - border-color: var(--blue); -} -.msg--success { - border-color: var(--green); -} -.msg--warning { - border-color: var(--red); -} - -.dropcap:first-letter { - float: left; - font-family: var(--font-heading); - font-size: 4.1098906729rem; - line-height: 0.7; - margin-right: calc(var(--baseline) * 2); - padding: calc(var(--baseline) * 2) calc(var(--baseline) * 2) calc(var(--baseline) * 2) 0; -} - -.pec-wrapper { - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100%; -} -.pec-overlay { - align-items: center; - background-color: var(--light); - font-size: 14px; - display: none; - height: inherit; - justify-content: center; - line-height: 1.4; - padding: 1rem; - position: relative; - text-align: center; -} -@media all and (min-width: 37.5em) { - .pec-overlay { - font-size: 16px; - line-height: var(--line-height); - padding: 1rem 2rem; - } -} -.pec-overlay.is-active { - display: flex; -} -.pec-overlay-inner p { - margin: 0 0 1rem; -} - -.is-img-loading { - overflow: hidden; - position: relative; -} -.is-img-loading::after, .is-img-loading::before { - content: ""; - display: block; - position: absolute; - height: 100%; - width: 2px; - top: -100%; - left: 20%; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(75%, rgba(var(--color-rgb), 0.15)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(var(--color-rgb), 0.15) 75%, rgba(0, 0, 0, 0) 100%); - -webkit-animation: preloader 2s cubic-bezier(0.4, 0.26, 0, 0.97) 0s infinite; - animation: preloader 2s cubic-bezier(0.4, 0.26, 0, 0.97) 0s infinite; -} -.is-img-loading::before { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; - left: 80%; -} -@-webkit-keyframes preloader { - 0% { - top: -100%; - } - 100% { - top: 100%; - } -} -@keyframes preloader { - 0% { - top: -100%; - } - 100% { - top: 100%; - } -} - -@media all and (min-width: 56.25em) { - .lines::after, .lines::before { - content: ""; - display: block; - position: absolute; - height: 50vh; - width: 2px; - top: -50%; - left: 20vw; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(75%, rgba(var(--color-rgb), 0.15)), color-stop(0%, rgba(0, 0, 0, 0))); - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(var(--color-rgb), 0.15) 75%, rgba(0, 0, 0, 0) 0%); - -webkit-animation: run var(--animated-lines-time) cubic-bezier(0.4, 0.26, 0, 0.97) 0s infinite forwards; - animation: run var(--animated-lines-time) cubic-bezier(0.4, 0.26, 0, 0.97) 0s infinite forwards; - z-index: -1; - } -} -.lines::before { - -webkit-animation-delay: 2s; - animation-delay: 2s; - left: 40vw; -} -@-webkit-keyframes run { - 0% { - top: -50%; - } - 100% { - top: 100%; - } -} -@keyframes run { - 0% { - top: -50%; - } - 100% { - top: 100%; - } -} -.lines--right::after { - -webkit-animation-delay: 4s; - animation-delay: 4s; - left: 60vw; -} -.lines--right::before { - -webkit-animation-delay: 6s; - animation-delay: 6s; - left: 80vw; -} - -.facebook:hover svg { - fill: #0866FF; -} - -.twitter:hover svg { - fill: #000000; -} - -.mix:hover svg { - fill: #fd8235; -} - -.instagram:hover svg { - fill: #000000; -} - -.vimeo:hover svg { - fill: #1ab7ea; -} - -.pinterest:hover svg { - fill: #bd081c; -} - -.youtube:hover svg { - fill: #cd201f; -} - -.linkedin:hover svg { - fill: #007bb6; -} - -.buffer:hover svg { - fill: #333333; -} - -.whatsapp:hover svg { - fill: #25D366; -} - -.pocket:hover svg { - fill: #ED4255; -} - -.pagination { - clear: both; - display: flex; - flex-wrap: wrap; - font-size: 0.8888888889rem; - justify-content: center; - margin-top: calc(2rem + 2vmin); -} -.pagination a { - border: 2px solid transparent; - border-radius: var(--border-radius); - display: inline-block; - color: var(--gray-1); - margin: 0 0.25rem; - padding: 0.5rem 1rem; - text-align: center; -} -.pagination a:hover { - background-color: var(--lighter); - color: var(--gray-1); -} -.pagination-active { - background-color: var(--lighter); - color: var(--color) !important; - font-variation-settings: "wght" var(--font-weight-bold); - pointer-events: none; -} -.pagination-inactive { - border: 2px solid transparent; - color: var(--gray-2) !important; - margin: 0 0.25rem; - pointer-events: none; - padding: 0.5rem 1rem; - opacity: 0.6; -} -.pagination-first, .pagination-last { - display: none; -} -@media all and (min-width: 56.25em) { - .pagination-first, .pagination-last { - display: block; - } -} - -.view-more { - display: flex; - margin: 0.5rem auto 0; -} - -.newsletter { - background-color: var(--lighter); - margin: var(--magic-number) 0; - padding: calc(var(--magic-number) / 1.5) var(--page-margin); -} -.newsletter__title { - margin-top: 0; -} -.newsletter__desc { - color: var(--gray-1); - font-size: 0.8888888889rem; -} -@media all and (min-width: 56.25em) { - .newsletter__desc { - max-width: 85%; - } -} -.newsletter form { - display: flex; - flex-wrap: wrap; - flex-direction: column; - gap: 1rem; - margin-top: calc(var(--baseline) * 5); -} -@media all and (min-width: 37.5em) { - .newsletter form { - flex-direction: row; - } -} -.newsletter input[type=text], -.newsletter input[type=email] { - flex: 1; -} -@media all and (max-width: 37.4375em) { - .newsletter input[type=submit] { - width: 100%; - } -} - -.footer { - border-top: 1px solid var(--light); - color: var(--gray-1); - font-size: 0.7901234568rem; - margin-top: var(--magic-number); - margin-bottom: calc(var(--magic-number) / 2); - padding-top: calc(var(--magic-number) / 3); -} -@media all and (max-width: 56.1875em) { - .footer { - padding-top: calc(var(--magic-number) / 2); - text-align: center; - } -} -@media all and (min-width: 56.25em) { - .footer { - display: flex; - justify-content: space-between; - } -} -.footer h3 { - margin: 0 0 calc(var(--baseline) * 5); -} -.footer__copy { - font-size: 0.7901234568rem; -} -.footer__nav { - font-size: 0.8888888889rem; - margin: 0 0 calc(var(--baseline) * 2); -} -@media all and (min-width: 56.25em) { - .footer__nav { - font-size: 0.7901234568rem; - margin: 0; - } -} -.footer__nav li { - display: inline-block; - margin: 0 0.4rem 0 0; - padding: 0; - position: relative; -} -.footer__nav li + li::before { - content: "•"; - padding-right: 0.4rem; -} -@media all and (max-width: 56.1875em) { - .footer__left + .footer__right { - margin-top: calc(var(--baseline) * 4); - } -} -@media all and (min-width: 56.25em) { - .footer__right { - flex: 0 0 auto; - margin-left: auto; - } -} -.footer__social a { - display: inline-block; - padding: 0 0.75rem; - vertical-align: middle; -} -@media all and (min-width: 56.25em) { - .footer__social a { - padding: 0 0 0 1.5rem; - } -} -.footer__social a > svg { - display: inline-block; - fill: var(--gray-1); - height: 0.875rem; - pointer-events: none; - -webkit-transition: all 0.12s linear 0s; - transition: all 0.12s linear 0s; - width: 0.875rem; -} -.footer__social a:hover > svg { - opacity: 1; -} -.footer__bttop { - background: var(--color); - border-color: var(--white) !important; - bottom: calc(var(--baseline) * 5); - border-radius: 50%; - line-height: 1; - opacity: 0; - padding: 0.45rem; - position: fixed; - right: 2rem; - text-align: center; - width: auto !important; - visibility: hidden; - z-index: 999; - -webkit-transform: translateY(1rem); - transform: translateY(1rem); -} -@media all and (min-width: 56.25em) { - .footer__bttop { - bottom: calc(var(--baseline) * 10); - } -} -.footer__bttop:hover { - opacity: 1; -} -.footer__bttop > svg { - fill: var(--white); - height: 23px; - margin: 0; - width: 23px; -} -.footer__bttop.is-visible { - opacity: 1; - visibility: visible; - -webkit-transform: translateY(0); - transform: translateY(0); -} - -.gallery { - margin: calc(var(--baseline) * 9) calc(var(--gallery-gap) * -1) calc(var(--baseline) * 2); -} -@media all and (min-width: 20em) { - .gallery { - display: flex; - flex-wrap: wrap; - } -} -@media all and (min-width: 56.25em) { - .gallery-wrapper--wide { - display: flex; - justify-content: center; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); - } - .gallery-wrapper--wide .gallery { - max-width: calc(var(--page-width) + var(--gallery-gap) * 2); - width: calc(100% + var(--gallery-gap) * 2); - } -} -.gallery-wrapper--full { - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); -} -@media all and (min-width: 20em) { - .gallery[data-columns="1"] .gallery__item { - flex: 1 0 100%; - } -} -@media all and (min-width: 30em) { - .gallery[data-columns="2"] .gallery__item { - flex: 1 0 50%; - } -} -@media all and (min-width: 37.5em) { - .gallery[data-columns="3"] .gallery__item { - flex: 1 0 33.333%; - } -} -@media all and (min-width: 56.25em) { - .gallery[data-columns="4"] .gallery__item { - flex: 0 1 25%; - } -} -@media all and (min-width: 56.25em) { - .gallery[data-columns="5"] .gallery__item { - flex: 0 1 20%; - } -} -@media all and (min-width: 56.25em) { - .gallery[data-columns="6"] .gallery__item { - flex: 0 1 16.666%; - } -} -@media all and (min-width: 56.25em) { - .gallery[data-columns="7"] .gallery__item { - flex: 1 0 14.285%; - } -} -@media all and (min-width: 56.25em) { - .gallery[data-columns="8"] .gallery__item { - flex: 1 0 12.5%; - } -} -.gallery__item { - margin: 0; - padding: var(--gallery-gap); - position: relative; -} -@media all and (min-width: 20em) { - .gallery__item { - flex: 1 0 50%; - } -} -@media all and (min-width: 30em) { - .gallery__item { - flex: 1 0 33.333%; - } -} -@media all and (min-width: 37.5em) { - .gallery__item { - flex: 1 0 25%; - } -} -.gallery__item a { - background-color: var(--lighter); - display: block; - height: 100%; - width: 100%; -} -.gallery__item a::after { - background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.4)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0) 100%); - bottom: var(--gallery-gap); - content: ""; - display: block; - opacity: 0; - left: var(--gallery-gap); - height: calc(100% - var(--gallery-gap) * 2); - position: absolute; - right: var(--gallery-gap); - top: var(--gallery-gap); - -webkit-transition: all 0.24s ease-out; - transition: all 0.24s ease-out; - width: calc(100% - var(--gallery-gap) * 2); -} -.gallery__item a:hover::after { - opacity: 1; -} -.gallery__item img { - display: block; - height: 100%; - -o-object-fit: cover; - object-fit: cover; - width: 100%; -} -.gallery__item figcaption { - bottom: 1.2rem; - color: white; - left: 50%; - opacity: 0; - position: absolute; - text-align: center; - -webkit-transform: translate(-50%, 1.2rem); - transform: translate(-50%, 1.2rem); - -webkit-transition: all 0.24s ease-out; - transition: all 0.24s ease-out; -} -.gallery__item:hover figcaption { - opacity: 1; - -webkit-transform: translate(-50%, 0); - transform: translate(-50%, 0); -} - -.pswp--dark .pswp__bg { - background: var(--black); -} -.pswp--dark .pswp__button, -.pswp--dark .pswp__button--arrow--left:before, -.pswp--dark .pswp__button--arrow--right:before { - background-image: url(../svg/gallery-icons-light.svg); -} -.pswp--light .pswp__bg { - background: var(--white); -} -.pswp--light .pswp__counter { - color: var(--dark); -} -.pswp--light .pswp__caption__center { - color: var(--text-color); -} -.pswp--light .pswp__button, -.pswp--light .pswp__button--arrow--left:before, -.pswp--light .pswp__button--arrow--right:before { - background-image: url(../svg/gallery-icons-dark.svg); -} -.pswp .pswp__button { - -webkit-box-shadow: none; - box-shadow: none; -} \ No newline at end of file diff --git a/assets/css/members.css b/assets/css/members.css index 310422a1..b85b83ec 100644 --- a/assets/css/members.css +++ b/assets/css/members.css @@ -1,264 +1,358 @@ .members-grid { - display: flex; - flex-wrap: wrap; - gap: 15px; - justify-content: center; - padding: 20px 0; + display: flex; + flex-wrap: wrap; + gap: 15px; + justify-content: center; + padding: 20px 0; + margin-top: 1rem; } - .member-box { - background: var(--color); - box-shadow: 0px 8px 20px -3px rgba(var(--dark-rgb), 0.12); - border: none; - border-radius: var(--border-radius); - color: white !important; - cursor: pointer; - display: flex; - justify-content: center; - align-items: center; - gap: 10px; - padding: 1.5rem; - font-family: var(--font-heading); - font-weight: var(--font-weight-normal); - font-size: 0.8888888889rem; - transition: all 0.2s ease-out; - will-change: transform; - text-decoration: none; - flex-grow: 1; -} - + background: linear-gradient(to bottom, oklch(0.6653 0.2227 260), oklch(0.4724 0.1604 260)); + box-shadow: 0 8px 20px -3px oklch(from #000 l c h / 0.12); + border: 1px solid oklch(0.4724 0.1604 260); + color: #fff; + cursor: pointer; + display: inline-flex; + justify-content: center; + gap: 5px; + font: normal 600 0.88888889rem var(--font-body); + padding: 0.5rem 0.75rem; + vertical-align: top; + text-align: center; + transition: all 0.2s ease-out; + will-change: transform; + width: 100%; + word-break: normal; + flex-direction: column; + justify-content: start; + align-items: center; + gap: 10px; + padding: 1.2rem; + text-decoration: none; + flex: 1 1 150px; + width: 100%!important; + position: relative; + z-index: 0; + overflow: hidden; +} +@media all and (min-width: 20em) { + .member-box { + width: auto; + } +} .member-box:hover { - transform: translateY(-3px); - box-shadow: 0 12px 20px 0 rgba(var(--dark-rgb), 0.12); + color: #fff; + background: linear-gradient(to bottom, oklch(0.8198 0.2429 260), oklch(0.6172 0.2099 260)); + box-shadow: 0 12px 20px 0 oklch(from #000 l c h / 0.12); + text-decoration: none; +} +.member-box:focus-visible { + outline: 2px solid currentcolor; + outline-offset: 2px; +} +.member-box:disabled { + background: var(--neutral-2); + color: var(--neutral-9); + cursor: not-allowed; +} +.member-box::before { + content: ''; + position: absolute; + inset: 0; + background: repeating-linear-gradient(116deg, transparent 10%, rgba(255, 255, 255, 0.04) 10%, rgba(255, 255, 255, 0.04) 15%, transparent 15%, transparent 20%, rgba(255, 255, 255, 0.04) 20%, rgba(255, 255, 255, 0.04) 22.5%, transparent 22.5%); + z-index: -1; + opacity: 0; + transition: 0.5s opacity; +} +.member-box:hover::before { + opacity: 1; +} +@media screen and (max-width: 800px) { + .member-box { + flex: 1 1 30%; + } } - .member-box-logo { - width: auto; - height: 100px; + width: 100px; + height: 100px; + object-fit: contain; +} +.member-box:hover .member-box-logo { + transform: scale(1.1); } - /* Modal Styles */ .modal-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.7); - display: none; - align-items: center; - justify-content: center; - z-index: 10000; - opacity: 0; - transition: opacity 0.3s, display 0.3s allow-discrete; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: oklch(from #000 l c h / 0.6); + backdrop-filter: blur(5px); + transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); + @starting-style { + backdrop-filter: blur(0px); + } + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + visibility: hidden; + pointer-events: none; + opacity: 0; + transition: opacity 0.3s, visibility 0.3s; } - .modal-overlay.active { - display: flex; - opacity: 1; -} - -@starting-style { - .modal-overlay.active { - opacity: 0; - } -} - -.modal-content { - background: var(--white); - width: 90%; - max-width: 900px; - max-height: 80svh; - display: flex; - flex-direction: row; - position: relative; - border-radius: var(--border-radius); - overflow: scroll; - box-shadow: 0 20px 40px rgba(0,0,0,0.3); + visibility: visible; + pointer-events: auto; + opacity: 1; + @starting-style { opacity: 0; - transform: translateY(20px); - transition: transform 0.3s ease-out, opacity 0.3s ease-out; + } } - .modal-overlay.active .modal-content { - opacity: 1; - transform: translateY(0); + opacity: 1; + transform: translateY(0); + @starting-style { + opacity: 0; + transform: translateY(20px); + } } - -@starting-style { - .modal-overlay.active .modal-content { - opacity: 0; - transform: translateY(20px); - } +.modal-content { + background: var(--neutral-base); + width: 90%; + max-width: 900px; + max-height: 80svh; + display: flex; + flex-direction: row; + position: relative; + border-radius: var(--border-radius); + overflow: auto; + box-shadow: 0 20px 40px oklch(from #000 l c h / 0.3); + opacity: 0; + transform: translateY(20px); + transition: transform 0.3s ease-out, opacity 0.3s ease-out; +} +@media screen and (max-width: 800px) { + .modal-content { + max-height: 90svh; + } } - .modal-close { - position: absolute; - top: 15px; - right: 15px; - background: var(--lighter); - border: none; - border-radius: 50%; - width: 32px; - height: 32px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - z-index: 10; - font-size: 20px; - color: var(--dark); - transition: background 0.2s; -} - + position: absolute; + top: 15px; + right: 15px; + background: var(--neutral-5); + border: none; + border-radius: 50%; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + z-index: 10; + font-size: 20px; + color: var(--neutral-9); + transition: background 0.2s; +} .modal-close:hover { - background: var(--light); + background: var(--neutral-2); } - .modal-left { - flex: 0 0 300px; - background: #f8f9fa; - display: flex; - align-items: center; - justify-content: center; - padding: 20px; -} - + flex: 0 0 300px; + background: var(--neutral-2); + display: flex; + align-items: center; + justify-content: center; + padding: 20px; + position: relative; + overflow: hidden; +} +.modal-left::before { + content: ""; + position: absolute; + inset: -20px; + background-image: var(--logo-url); + background-size: cover; + background-position: center; + filter: blur(40px) saturate(2); + opacity: 0.5; + z-index: 0; +} +.modal-left::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(circle at center, transparent 30%, var(--neutral-2) 100%); + z-index: 1; +} .modal-left img { - width: 100%; - height: 100%; - object-fit: contain; + width: 100%; + height: 100%; + object-fit: contain; + position: relative; + z-index: 2; +} +@media screen and (max-width: 800px) { + .modal-left { + flex: unset; + } + .modal-left img { + width: unset; + height: 15vh; + } } - .modal-right { - flex: 1; - padding: 40px; + flex: 1; + padding: 40px; } - /* Grid Layout for Modal Content */ .modal-header-grid { - display: grid; - grid-template-columns: 1fr 200px; - grid-template-rows: auto auto auto; - gap: 20px; - grid-template-areas: - "title title" - "desc meta" -} - + display: grid; + grid-template-columns: 1fr 200px; + grid-template-rows: auto auto auto; + gap: 20px; + grid-template-areas: "title title" "desc meta"; +} +.modal-header-grid.no-meta { + grid-template-columns: 1fr; + grid-template-rows: auto auto; + grid-template-areas: "title" "desc"; +} .modal-title-area { - grid-area: title; + grid-area: title; } - .modal-title-area h2 { - margin: 0 0 10px 0; - font-size: 2rem; + margin: 0 0 10px 0; + font-size: 2rem; } - #modalDescription { - margin: 0; - grid-area: desc; - color: var(--gray-1); - font-size: 0.95rem; - line-height: 1.6; + margin: 0; + grid-area: desc; + font-size: 0.95rem; + line-height: 1.6; } - .modal-meta-area { - grid-area: meta; - display: flex; - flex-direction: column; - gap: 15px; + grid-area: meta; + display: flex; + flex-direction: column; + gap: 15px; } - .meta-item { - display: flex; - flex-direction: column; + display: flex; + flex-direction: column; } - .meta-label { - font-size: 0.75rem; - font-weight: bold; - text-transform: uppercase; - color: var(--gray-2); - margin-bottom: 2px; + font-size: 0.75rem; + font-weight: bold; + text-transform: uppercase; + color: var(--neutral-8); + margin-bottom: 2px; } - .meta-value { - font-size: 0.9rem; - font-weight: var(--font-weight-normal); + font-size: 0.9rem; + font-weight: var(--font-weight-normal); } - .team-list { - display: flex; - flex-wrap: wrap; - gap: 5px; + display: flex; + flex-wrap: wrap; + gap: 5px; } - .team-tag { - background: var(--lighter); - padding: 2px 8px; - border-radius: 4px; - font-size: 0.8rem; + background: var(--neutral-3); + padding: 2px 8px; + border-radius: 4px; + font-size: 0.8rem; } - .modal-footer-grid { - margin-top: 30px; - padding-top: 20px; - border-top: 1px solid var(--light); - display: flex; - justify-content: space-between; - align-items: center; -} - + margin-top: 30px; + padding-top: 20px; + border-top: 1px solid var(--neutral-2); + display: flex; + justify-content: space-between; + align-items: center; +} .modal-socials { - display: flex; - gap: 15px; + display: flex; + gap: 15px; } - .modal-socials a { - color: var(--color); - font-weight: bold; - font-size: 0.9rem; - text-decoration: none; -} - -.modal-socials a:hover { - text-decoration: underline; -} - -.btn-game-link { - background: var(--dark); - color: white !important; - padding: 8px 16px; - border-radius: var(--border-radius); - font-size: 0.85rem; - font-weight: bold; - transition: transform 0.2s; -} - -.btn-game-link:hover { - transform: translateY(-2px); -} - + color: var(--neutral-6); + text-decoration: none; + display: flex; + align-items: center; +} +.modal-socials a .social-icon { + filter: var(--social-icon-filter, grayscale(1) brightness(0.5)); + transition: filter 0.2s, transform 0.2s; +} +.modal-socials a:hover .social-icon { + transform: scale(1.1); +} +.btn-site-link { + background: linear-gradient(to bottom, oklch(0.6653 0.2227 142.5), oklch(0.4724 0.1604 142.5)); + box-shadow: 0 8px 20px -3px oklch(from #000 l c h / 0.12); + border: 1px solid oklch(0.4724 0.1604 142.5); + color: #fff; + cursor: pointer; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; + font: normal 600 0.88888889rem var(--font-body); + padding: 0.5rem 0.75rem; + vertical-align: top; + text-align: center; + transition: all 0.2s ease-out; + will-change: transform; + width: 100%; + word-break: normal; + padding: 8px 16px!important; + font-size: 0.85rem !important; + font-weight: bold; + transition: transform 0.2s; +} +@media all and (min-width: 20em) { + .btn-site-link { + width: auto; + } +} +.btn-site-link:hover { + color: #fff; + background: linear-gradient(to bottom, oklch(0.8198 0.2429 142.5), oklch(0.6172 0.2099 142.5)); + box-shadow: 0 12px 20px 0 oklch(from #000 l c h / 0.12); + text-decoration: none; +} +.btn-site-link:focus-visible { + outline: 2px solid currentcolor; + outline-offset: 2px; +} +.btn-site-link:disabled { + background: var(--neutral-2); + color: var(--neutral-9); + cursor: not-allowed; +} +.btn-site-link:hover { + transform: translateY(-2px); +} @media (max-width: 850px) { - .modal-content { - flex-direction: column; - } - - .modal-left { - flex: 0 0 200px; - } - - .modal-header-grid { - grid-template-columns: 1fr; - } - - .modal-title-area, #modalDescription, .modal-meta-area { - grid-column: 1 / 2; - grid-row: auto; - } - - .member-box-logo { - height: 50px; - } + .modal-content { + flex-direction: column; + } + .modal-left { + flex: 0 0 200px; + } + .modal-header-grid { + grid-template-columns: 1fr; + } + .modal-title-area, + #modalDescription, + .modal-meta-area { + grid-column: 1 / 2; + grid-row: auto; + } + .member-box-logo { + height: 50px; + } } diff --git a/assets/css/members.less b/assets/css/members.less new file mode 100644 index 00000000..a30163eb --- /dev/null +++ b/assets/css/members.less @@ -0,0 +1,322 @@ +@import "_mixins.less"; + +.members-grid { + display: flex; + flex-wrap: wrap; + gap: 15px; + justify-content: center; + padding: 20px 0; + margin-top: 1rem; +} + +.member-box { + .button-mixin(260); + flex-direction: column; + justify-content: start; + align-items: center; + gap: 10px; + padding: 1.2rem; + text-decoration: none; + flex: 1 1 150px; + width: 100%!important; + position: relative; + z-index: 0; + overflow: hidden; + + &::before { + content: ''; + position: absolute; + inset: 0; + background: repeating-linear-gradient(116deg,transparent 10%,rgba(255, 255, 255, 0.04) 10%,rgba(255, 255, 255, 0.04) 15%,transparent 15%,transparent 20%,rgba(255, 255, 255, 0.04) 20%,rgba(255, 255, 255, 0.04) 22.5%,transparent 22.5%); + z-index: -1; + opacity: 0; + transition: .5s opacity; + } + + &:hover { + &::before { + opacity: 1; + } + } + + @media screen and (max-width: 800px) { + flex: 1 1 30%; + } +} + +.member-box-logo { + width: 100px; + height: 100px; + object-fit: contain; + + .member-box:hover & { + transform: scale(1.1); + } +} + +/* Modal Styles */ +.modal-overlay { + .overlay-mixin(); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + visibility: hidden; + pointer-events: none; + opacity: 0; + transition: opacity 0.3s, visibility 0.3s; + + &.active { + visibility: visible; + pointer-events: auto; + opacity: 1; + + @starting-style { + opacity: 0; + } + + & .modal-content { + opacity: 1; + transform: translateY(0); + + @starting-style { + opacity: 0; + transform: translateY(20px); + } + } + } +} + +.modal-content { + background: var(--neutral-base); + width: 90%; + max-width: 900px; + max-height: 80svh; + display: flex; + flex-direction: row; + position: relative; + border-radius: var(--border-radius); + overflow: auto; + box-shadow: 0 20px 40px oklch(from #000 l c h / 0.3); + opacity: 0; + transform: translateY(20px); + transition: transform 0.3s ease-out, opacity 0.3s ease-out; + + @media screen and (max-width: 800px) { + max-height: 90svh; + } +} + +.modal-close { + position: absolute; + top: 15px; + right: 15px; + background: var(--neutral-5); + border: none; + border-radius: 50%; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + z-index: 10; + font-size: 20px; + color: var(--neutral-9); + transition: background 0.2s; + + &:hover { + background: var(--neutral-2); + } +} + +.modal-left { + flex: 0 0 300px; + background: var(--neutral-2); + display: flex; + align-items: center; + justify-content: center; + padding: 20px; + position: relative; + overflow: hidden; + + &::before { + content: ""; + position: absolute; + inset: -20px; + background-image: var(--logo-url); + background-size: cover; + background-position: center; + filter: blur(40px) saturate(2); + opacity: 0.5; + z-index: 0; + } + + &::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(circle at center, transparent 30%, var(--neutral-2) 100%); + z-index: 1; + } + + & img { + width: 100%; + height: 100%; + object-fit: contain; + position: relative; + z-index: 2; + } + + @media screen and (max-width: 800px) { + flex: unset; + + & img { + width: unset; + height: 15vh; + } + } +} + +.modal-right { + flex: 1; + padding: 40px; +} + +/* Grid Layout for Modal Content */ +.modal-header-grid { + display: grid; + grid-template-columns: 1fr 200px; + grid-template-rows: auto auto auto; + gap: 20px; + grid-template-areas: + "title title" + "desc meta"; +} + +.modal-header-grid.no-meta { + grid-template-columns: 1fr; + grid-template-rows: auto auto; + grid-template-areas: + "title" + "desc"; +} + +.modal-title-area { + grid-area: title; + + & h2 { + margin: 0 0 10px 0; + font-size: 2rem; + } +} + +#modalDescription { + margin: 0; + grid-area: desc; + font-size: 0.95rem; + line-height: 1.6; +} + +.modal-meta-area { + grid-area: meta; + display: flex; + flex-direction: column; + gap: 15px; +} + +.meta-item { + display: flex; + flex-direction: column; +} + +.meta-label { + font-size: 0.75rem; + font-weight: bold; + text-transform: uppercase; + color: var(--neutral-8); + margin-bottom: 2px; +} + +.meta-value { + font-size: 0.9rem; + font-weight: var(--font-weight-normal); +} + +.team-list { + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.team-tag { + background: var(--neutral-3); + padding: 2px 8px; + border-radius: 4px; + font-size: 0.8rem; +} + +.modal-footer-grid { + margin-top: 30px; + padding-top: 20px; + border-top: 1px solid var(--neutral-2); + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal-socials { + display: flex; + gap: 15px; + + & a { + color: var(--neutral-6); + text-decoration: none; + display: flex; + align-items: center; + + & .social-icon { + filter: var(--social-icon-filter, grayscale(1) brightness(0.5)); + transition: filter 0.2s, transform 0.2s; + } + + &:hover .social-icon { + transform: scale(1.1); + } + } +} + +.btn-site-link { + .button-mixin(142.5); + padding: 8px 16px!important; + font-size: 0.85rem!important; + font-weight: bold; + transition: transform 0.2s; + + &:hover { + transform: translateY(-2px); + } +} + +@media (max-width: 850px) { + .modal-content { + flex-direction: column; + } + + .modal-left { + flex: 0 0 200px; + } + + .modal-header-grid { + grid-template-columns: 1fr; + } + + .modal-title-area, #modalDescription, .modal-meta-area { + grid-column: 1 / 2; + grid-row: auto; + } + + .member-box-logo { + height: 50px; + } +} \ No newline at end of file diff --git a/assets/css/overflow.css b/assets/css/overflow.css new file mode 100644 index 00000000..7440f9a7 --- /dev/null +++ b/assets/css/overflow.css @@ -0,0 +1,97 @@ +/* Table Overflow Wrapper Styles */ +.overflow-wrapper { + position: relative; + display: flex; + max-width: max-content; +} +.overflow-wrapper:has(.overflow-content > .wikitable) { + margin-block: var(--space-md); + margin-inline: var(--border-width-base); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow-border); +} +.overflow-wrapper:has(.overflow-content > .wikitable--fluid) { + max-width: none; +} +.overflow-content { + width: 100%; + overflow: auto hidden; + border: 1px solid oklch(from var(--text-color) l c h / 0.1); + border-radius: 1rem; +} +.overflow-content > table { + display: table; + max-width: none; + margin-block: 0; + overflow: initial; + box-shadow: none; + border: unset; +} +.overflow-content > table thead { + border-bottom: 1px solid oklch(from var(--text-color) l c h / 0.1); +} +.overflow-content > table td { + border: unset; +} +.overflow-content > table tr:hover { + background: rgba(255, 255, 255, 0.04); +} +.overflow--left > .overflow-content { + -webkit-mask-image: linear-gradient(90deg, transparent, #000 2rem); + mask-image: linear-gradient(90deg, transparent, #000 2rem); +} +.overflow--right > .overflow-content { + -webkit-mask-image: linear-gradient(270deg, transparent, #000 2rem); + mask-image: linear-gradient(270deg, transparent, #000 2rem); +} +.overflow--left.overflow--right > .overflow-content { + -webkit-mask-image: linear-gradient(90deg, transparent, #000 2rem, #000 calc(100% - 2rem), transparent); + mask-image: linear-gradient(90deg, transparent, #000 2rem, #000 calc(100% - 2rem), transparent); +} +.overflow-nav { + position: absolute; + inset: 0; + display: flex; + justify-content: space-between; + pointer-events: none; +} +.overflow-navButton { + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 100%; + padding: 0; + appearance: none; + cursor: pointer; + background: transparent; + border: 0; + border-radius: var(--border-radius-medium); + visibility: hidden; + pointer-events: none; +} +.overflow-navButton::before { + width: 1.25rem; +} +.overflow--left .overflow-navButton-left { + z-index: 3; + visibility: visible; + pointer-events: auto; +} +.overflow-navButton-left::before { + transform: rotate(-90deg); +} +.overflow--right .overflow-navButton-right { + z-index: 3; + visibility: visible; + pointer-events: auto; +} +.overflow-navButton-right::before { + transform: rotate(90deg); +} +.overflow-navButton:hover { + background-color: rgba(255, 255, 255, 0.04); +} +.overflow-navButton:active { + background-color: rgba(255, 255, 255, 0.08); +} diff --git a/assets/css/overflow.less b/assets/css/overflow.less new file mode 100644 index 00000000..0056f2b7 --- /dev/null +++ b/assets/css/overflow.less @@ -0,0 +1,116 @@ +/* Table Overflow Wrapper Styles */ + +.overflow-wrapper { + position: relative; + display: flex; + max-width: max-content +} + +.overflow-wrapper:has(.overflow-content > .wikitable) { + margin-block:var(--space-md);margin-inline: var(--border-width-base); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow-border) +} + +.overflow-wrapper:has(.overflow-content > .wikitable--fluid) { + max-width: none +} + +.overflow-content { + width: 100%; + overflow: auto hidden; + border: 1px solid oklch(from var(--text-color) l c h / 0.1); + border-radius: 1rem; + + > table { + display: table; + max-width: none; + margin-block:0; + overflow: initial; + box-shadow: none; + border: unset; + + thead { + border-bottom: 1px solid oklch(from var(--text-color) l c h / 0.1); + } + + td { + border: unset; + } + + tr:hover { + background: rgba(255, 255, 255, 0.04); + } + } +} + +.overflow--left > .overflow-content { + -webkit-mask-image: linear-gradient(90deg,transparent,#000 2rem); + mask-image: linear-gradient(90deg,transparent,#000 2rem) +} + +.overflow--right > .overflow-content { + -webkit-mask-image: linear-gradient(270deg,transparent,#000 2rem); + mask-image: linear-gradient(270deg,transparent,#000 2rem) +} + +.overflow--left.overflow--right > .overflow-content { + -webkit-mask-image: linear-gradient(90deg,transparent,#000 2rem,#000 calc(100% - 2rem),transparent); + mask-image: linear-gradient(90deg,transparent,#000 2rem,#000 calc(100% - 2rem),transparent) +} + +.overflow-nav { + position: absolute; + inset: 0; + display: flex; + justify-content: space-between; + pointer-events: none +} + +.overflow-navButton { + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 100%; + padding: 0; + appearance: none; + cursor: pointer; + background: transparent; + border: 0; + border-radius: var(--border-radius-medium); + visibility: hidden; + pointer-events: none +} + +.overflow-navButton::before { + width: 1.25rem +} + +.overflow--left .overflow-navButton-left { + z-index: 3; + visibility: visible; + pointer-events: auto +} + +.overflow-navButton-left::before { + transform: rotate(-90deg) +} + +.overflow--right .overflow-navButton-right { + z-index: 3; + visibility: visible; + pointer-events: auto +} + +.overflow-navButton-right::before { + transform: rotate(90deg) +} + +.overflow-navButton:hover { + background-color: rgba(255, 255, 255, 0.04) +} + +.overflow-navButton:active { + background-color: rgba(255, 255, 255, 0.08) +} \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css index 761d477a..068abbc8 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1,108 +1,437 @@ +/* Syntax highlighting */ +.highlight { + background: var(--neutral-1); + border-radius: var(--border-radius); + padding: calc(var(--baseline) * 6); + /* Comment */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Namespace */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Decorator */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Label */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Bin */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Affix */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Delimiter */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Function.Magic */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Name.Variable.Magic */ + /* Literal.Number.Integer.Long */ +} +.highlight pre { + background: transparent; + padding: 0; + margin: 0; + border-radius: 0; + font-size: 1rem; + line-height: 1.4; +} +.highlight .c { + color: var(--neutral-6); + font-style: italic; +} +.highlight .k { + color: var(--primary-8); + font-weight: bold; +} +.highlight .o { + color: var(--neutral-7); +} +.highlight .cm { + color: var(--neutral-6); + font-style: italic; +} +.highlight .cp { + color: var(--secondary-6); +} +.highlight .c1 { + color: var(--neutral-6); + font-style: italic; +} +.highlight .cs { + color: var(--neutral-6); + font-style: italic; +} +.highlight .gd { + color: var(--red); +} +.highlight .ge { + font-style: italic; +} +.highlight .gr { + color: var(--red); +} +.highlight .gh { + color: var(--primary-8); + font-weight: bold; +} +.highlight .gi { + color: var(--tertiary-6); +} +.highlight .go { + color: var(--neutral-5); +} +.highlight .gp { + color: var(--primary-8); + font-weight: bold; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: var(--secondary-6); + font-weight: bold; +} +.highlight .gt { + color: var(--blue); +} +.highlight .kc { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kd { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kn { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kp { + color: var(--primary-8); +} +.highlight .kr { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kt { + color: var(--tertiary-8); +} +.highlight .m { + color: var(--secondary-8); +} +.highlight .s { + color: var(--secondary-6); +} +.highlight .na { + color: var(--tertiary-6); +} +.highlight .nb { + color: var(--primary-6); +} +.highlight .nc { + color: var(--primary-8); + font-weight: bold; +} +.highlight .no { + color: var(--secondary-6); +} +.highlight .nd { + color: var(--secondary-6); +} +.highlight .ni { + color: var(--neutral-6); + font-weight: bold; +} +.highlight .ne { + color: var(--red); + font-weight: bold; +} +.highlight .nf { + color: var(--primary-8); +} +.highlight .nl { + color: var(--yellow); +} +.highlight .nn { + color: var(--primary-8); + font-weight: bold; +} +.highlight .nt { + color: var(--primary-6); + font-weight: bold; +} +.highlight .nv { + color: var(--neutral-8); +} +.highlight .ow { + color: var(--secondary-6); + font-weight: bold; +} +.highlight .w { + color: var(--neutral-4); +} +.highlight .mb { + color: var(--secondary-8); +} +.highlight .mf { + color: var(--secondary-8); +} +.highlight .mh { + color: var(--secondary-8); +} +.highlight .mi { + color: var(--secondary-8); +} +.highlight .mo { + color: var(--secondary-8); +} +.highlight .sa { + color: var(--secondary-6); +} +.highlight .sb { + color: var(--secondary-6); +} +.highlight .sc { + color: var(--secondary-6); +} +.highlight .dl { + color: var(--secondary-6); +} +.highlight .sd { + color: var(--secondary-6); +} +.highlight .s2 { + color: var(--secondary-6); +} +.highlight .se { + color: var(--secondary-6); +} +.highlight .sh { + color: var(--secondary-6); +} +.highlight .si { + color: var(--secondary-6); +} +.highlight .sx { + color: var(--secondary-6); +} +.highlight .sr { + color: var(--secondary-6); +} +.highlight .s1 { + color: var(--secondary-6); +} +.highlight .ss { + color: var(--secondary-6); +} +.highlight .bp { + color: var(--primary-6); +} +.highlight .fm { + color: var(--primary-8); +} +.highlight .vc { + color: var(--neutral-8); +} +.highlight .vg { + color: var(--neutral-8); +} +.highlight .vi { + color: var(--neutral-8); +} +.highlight .vm { + color: var(--neutral-8); +} +.highlight .il { + color: var(--secondary-8); +} @font-face { - font-family: Raleway; - src: url('../dynamic/fonts/raleway/raleway.woff2') format('woff2'); - font-weight: 100 900; - font-display: swap; - font-style: normal + font-family: "Bricolage Grotesque"; + src: url('../fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz\,wdth\,wght.ttf') format('truetype'); + font-weight: 200 800; + font-display: swap; + font-style: normal; } - @font-face { - font-family: Raleway; - src: url('../dynamic/fonts/raleway/raleway-italic.woff2') format('woff2'); - font-weight: 100 900; - font-display: swap; - font-style: italic + font-family: "Cascadia Code"; + src: url('../fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: normal; } - @font-face { - font-family: Lora; - src: url('../dynamic/fonts/lora/lora.woff2') format('woff2'); - font-weight: 400 700; - font-display: swap; - font-style: normal + font-family: "Cascadia Code"; + src: url('../fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: italic; } - @font-face { - font-family: Lora; - src: url('../dynamic/fonts/lora/lora-italic.woff2') format('woff2'); - font-weight: 400 700; - font-display: swap; - font-style: italic + font-family: "Instrument Sans"; + src: url('../fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth\,wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: normal; } - -:root { - --page-margin: 8vmin; - --page-width: 1440px; - --entry-width: 66ch; - --navbar-height: 3rem; - --border-radius: 3px; - --cards-gap: 1rem; - --featured-image-height: 40vmin; - --animated-lines-time: 3s; - --gallery-gap: 0.5rem; - --magic-number: 4rem; - --baseline: .25rem; - --font-body: 'Raleway', sans-serif; - --font-heading: 'Lora', serif; - --font-logo: var(--font-body); - --font-menu: var(--font-body); - --font-size: clamp(1rem, 1rem + (0.1499999999999999 * ((100vw - 20rem) / 80)), 1.15rem); - --font-weight-normal: 400; - --font-weight-bold: 700; - --line-height: 1.6; - --letter-spacing: 0em; - --headings-weight: 700; - --headings-transform: none; - --headings-style: normal; - --headings-letter-spacing: -0.03em; - --headings-line-height: 1.2; - --card-image-height: calc(12rem + 13vmin); - --white: #FFFFFF; - --black: #000000; - --green: #00C899; - --blue: #3DBFE2; - --red: #EB7F9B; - --yellow: #FFC76B; - --dark: #283149; - --dark-rgb: 40, 49, 73; - --gray-1: #5f5f74; - --gray-2: #9196A2; - --light: #d4d2e1; - --lighter: #DBDDE6; - --color: #6f689b; - --color-rgb: 111, 104, 155; - --page-bg: linear-gradient(110deg, rgba(215, 218, 227, 1) 0%, rgba(242, 243, 248, 1) 100%); - --text-color: #343435; - --headings-color: #283149; - --link-color: #6f689b; - --link-color-hover: #283149; - --inline-code: 255, 81, 81; - --box-shadow: 0px 4.4px 4.5px -100px rgba(var(--dark-rgb), 0.174), 0px 12.3px 12.5px -100px rgba(var(--dark-rgb), 0.25), 0px 29.5px 30.1px -100px rgba(var(--dark-rgb), 0.326), 0px 98px 100px -100px rgba(var(--dark-rgb), 0.5); - --box-shadow-hover: 0px 5.4px 4.5px -100px rgba(var(--dark-rgb), 0.174), 0px 15px 12.5px -100px rgba(var(--dark-rgb), 0.25), 0px 36.2px 30.1px -100px rgba(var(--dark-rgb), 0.326), 0px 120px 100px -100px rgba(var(--dark-rgb), 0.5) +@font-face { + font-family: "Instrument Sans"; + src: url('../fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth\,wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: italic; } - -@media all and (min-width:56.25em) { - :root { - --magic-number: 6rem - } +@view-transition { + navigation: auto; } - -@media all and (min-width:80.0625em) and (min-height:50em) { - :root { - --cards-gap: 1.8rem; - --magic-number: 8rem - } +/* palette */ +:root { + --social-icon-filter: invert(1) brightness(0.8); + --primary-base: #669cff; + --primary-1: #151C29; + --primary-2: #161F2F; + --primary-3: #162B52; + --primary-4: #15336C; + --primary-5: #1A3D7E; + --primary-6: #030303; + --primary-7: #3768C5; + --primary-8: #84B5FF; + --primary-9: #CFE2FF; + --secondary-base: #94651e; + --secondary-1: #1E170F; + --secondary-2: #311F06; + --secondary-3: #432500; + --secondary-4: #512E00; + --secondary-5: #5F3C00; + --secondary-6: #94651E; + --secondary-7: #865808; + --secondary-8: #FECA87; + --secondary-9: #FFE2B1; + --tertiary-base: #1a7e2f; + --tertiary-1: #0B140B; + --tertiary-2: #162B18; + --tertiary-3: #123D18; + --tertiary-4: #154B1E; + --tertiary-5: #195B24; + --tertiary-6: #1A7E2F; + --tertiary-7: #1D6D2C; + --tertiary-8: #74D07D; + --tertiary-9: #AEF7B3; + --neutral-base: #1C1C1A; + --neutral-1: #232321; + --neutral-2: #2C2C28; + --neutral-3: #32322F; + --neutral-4: #383835; + --neutral-5: #40403D; + --neutral-6: #5a5a57; + --neutral-7: #50504d; + --neutral-8: #B4B4B0; + --neutral-9: #EDEDE9; + --white: #FFFFFF; + --black: #000000; + --green: #00C899; + --blue: #3DBFE2; + --red: #EB7F9B; + --yellow: #FFC76B; +} +:root { + --bg: url('../../assets/backgrounds/futuristic-city.png'); + --page-margin: 8vmin; + --page-width: 1440px; + --entry-width: 95ch; + --navbar-height: 4rem; + --border-radius: 3px; + --cards-gap: 1rem; + --featured-image-height: 40vmin; + --gallery-gap: 0.5rem; + --magic-number: 4rem; + --baseline: 0.25rem; + --font-body: 'Instrument Sans', sans-serif; + --font-heading: 'Bricolage Grotesque', serif; + --font-monospace: 'Cascadia Code', monospace; + --font-logo: var(--font-body); + --font-menu: var(--font-body); + --font-size: clamp(1rem, 1.15rem, 1.15rem); + --font-weight-normal: 400; + --font-weight-bold: 700; + --line-height: 1.6; + --letter-spacing: 0em; + --headings-weight: 700; + --headings-transform: none; + --headings-style: normal; + --headings-letter-spacing: -0.03em; + --headings-line-height: 1.2; + --card-image-height: calc(12rem + 13vmin); + --page-bg: var(--neutral-base); + --text-color: var(--neutral-9); + --link-color: var(--primary-base); + --monospace: var(--font-monospace); + --box-shadow: 0px 4.4px 4.5px -100px oklch(from #000 l c h / 0.174), 0px 12.3px 12.5px -100px oklch(from #000 l c h / 0.25), 0px 29.5px 30.1px -100px oklch(from #000 l c h / 0.326), 0px 98px 100px -100px oklch(from #000 l c h / 0.5); + --box-shadow-hover: 0px 5.4px 4.5px -100px oklch(from #000 l c h / 0.174), 0px 15px 12.5px -100px oklch(from #000 l c h / 0.25), 0px 36.2px 30.1px -100px oklch(from #000 l c h / 0.326), 0px 120px 100px -100px oklch(from #000 l c h / 0.5); +} +@media screen and (max-width: 800px) { + :root { + --navbar-height: 40px; + } +} +@media all and (min-width: 56.25em) { + :root { + --magic-number: 6rem; + } +} +@media all and (min-width: 80.0625em) and (min-height: 50em) { + :root { + --cards-gap: 1.8rem; + --magic-number: 8rem; + } } - *, :after, :before { - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - padding: 0 + box-sizing: border-box; + margin: 0; + padding: 0; } - article, aside, footer, @@ -111,538 +440,469 @@ hgroup, main, nav, section { - display: block + display: block; } - li { - list-style: none + list-style: none; +} +.li { + fill: none; + stroke-linecap: round; + stroke-linejoin: round; + vertical-align: middle; } - img { - height: auto; - max-width: 100%; - vertical-align: top + height: auto; + max-width: 100%; + vertical-align: top; } - button, input, select, textarea { - font: inherit + font: inherit; } - address { - font-style: normal + font-style: normal; } - ::-moz-selection { - background: var(--color); - color: var(--white) + background: var(--link-color); + color: var(--white); } - ::selection { - background: var(--color); - color: var(--white) -} - -::-webkit-input-placeholder { - color: var(--text-color) -} - -::-moz-placeholder { - color: var(--text-color) -} - -:-ms-input-placeholder { - color: var(--text-color) + background: var(--link-color); + color: var(--white); } - -::-ms-input-placeholder { - color: var(--text-color) -} - ::placeholder { - color: var(--text-color) + color: var(--text-color); } - html { - font-size: var(--font-size); - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - scroll-behavior: smooth + font-size: var(--font-size); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; } - html.no-scroll { - overflow: hidden + overflow: hidden; } - body { - background: var(--page-bg); - color: var(--text-color); - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - letter-spacing: var(--letter-spacing); - line-height: var(--line-height); - min-height: 100vh; - padding: 0; - -ms-scroll-chaining: none; - overscroll-behavior: none + background: var(--page-bg); + color: var(--text-color); + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + letter-spacing: var(--letter-spacing); + line-height: var(--line-height); + padding: 0; + overscroll-behavior: none; +} +body::before { + content: ''; + position: absolute; + inset: 0; + background: var(--bg); + background-size: cover; + background-position: center; + opacity: 1; + z-index: -2; + transition: 1s opacity; + @starting-style { + opacity: 0; + } +} +body.home-template::before, +body.bg-include::before { + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.4), transparent); +} +body:not(.home-template):not(.bg-include)::before { + display: none; +} +body.page-onboarding::before { + --bg: url('../../assets/promofiles/OnboardingMainThumbnail.png'); +} +body.page-robloxapi::before { + --bg: url('../../assets/backgrounds/RobloxAPI_Mesh_Gradient.webp'); } - a { - color: var(--link-color); - text-decoration: none; - -webkit-transition: all .12s linear; - transition: all .12s linear -} - -a:hover { - color: var(--link-color-hover) -} - -a:active { - color: var(--link-color-hover) -} - -a:focus { - color: var(--link-color-hover); - outline: 0 -} - -.invert { - color: var(--link-color-hover); - text-decoration: none; - -webkit-transition: all .12s linear; - transition: all .12s linear + color: var(--link-color); + text-decoration: none; + transition: all 0.12s linear; } - -.invert:hover { - color: var(--link-color) -} - -.invert:active { - color: var(--link-color) +.img-invert { + filter: invert(1); } - -.invert:focus { - color: var(--link-color); - outline: 0 +.img-rounded { + border-radius: 20px; } - dl, ol, p, pre, ul { - margin-top: calc(var(--baseline) * 7) + margin-top: calc(var(--baseline) * 7); } - blockquote, figure, hr, pre, table { - margin-top: calc(var(--baseline) * 9); - margin-bottom: calc(var(--baseline) * 9) + margin-top: calc(var(--baseline) * 9); + margin-bottom: calc(var(--baseline) * 9); } - h1, h2, h3, h4, h5, h6 { - color: var(--headings-color); - font-family: var(--font-heading); - font-variation-settings: "wght" var(--headings-weight); - font-style: var(--headings-style); - -ms-hyphens: manual; - hyphens: manual; - letter-spacing: var(--headings-letter-spacing); - line-height: var(--headings-line-height); - margin-top: calc(var(--baseline) * 11); - text-transform: var(--headings-transform) + color: var(--text-color); + font-family: var(--font-heading); + font-variation-settings: "wght" var(--headings-weight); + font-style: var(--headings-style); + hyphens: manual; + letter-spacing: var(--headings-letter-spacing); + line-height: var(--headings-line-height); + margin-top: calc(var(--baseline) * 11); + text-transform: var(--headings-transform); + scroll-margin-top: 60px; } - .h1, h1 { - font-size: clamp(1.8020324707rem, 1.8020324707rem + .7637520432 * (100vw - 20rem) / 80, 2.565784514rem) + font-size: clamp(1.80203247rem, calc(1.80203247rem + 0.76375204 * (100vw - 20rem) / 80), 2.56578451rem); } - .h2, h2 { - font-size: clamp(1.423828125rem, 1.423828125rem + .6034584045 * (100vw - 20rem) / 80, 2.0272865295rem) + font-size: clamp(1.42382813rem, calc(1.42382813rem + 0.6034584 * (100vw - 20rem) / 80), 2.02728653rem); } - .h3, h3 { - font-size: clamp(1.265625rem, 1.265625rem + .5364074707 * (100vw - 20rem) / 80, 1.8020324707rem) + font-size: clamp(1.265625rem, calc(1.265625rem + 0.53640747 * (100vw - 20rem) / 80), 1.80203247rem); } - .h4, h4 { - font-size: clamp(1.125rem, 1.125rem + .298828125 * (100vw - 20rem) / 80, 1.423828125rem) + font-size: clamp(1.125rem, calc(1.125rem + 0.29882813 * (100vw - 20rem) / 80), 1.42382813rem); } - .h5, h5 { - font-size: clamp(1rem, 1rem + .265625 * (100vw - 20rem) / 80, 1.265625rem) + font-size: clamp(1rem, calc(1rem + 0.265625 * (100vw - 20rem) / 80), 1.265625rem); } - .h6, h6 { - font-size: clamp(1rem, 1rem + .125 * (100vw - 20rem) / 80, 1.125rem) + font-size: clamp(1rem, calc(1rem + 0.125 * (100vw - 20rem) / 80), 1.125rem); } - -h1+*, -h2+*, -h3+*, -h4+*, -h5+*, -h6+* { - margin-top: calc(var(--baseline) * 4) +h1 + *, +h2 + *, +h3 + *, +h4 + *, +h5 + *, +h6 + * { + margin-top: calc(var(--baseline) * 4); } - b, strong { - font-variation-settings: "wght" var(--font-weight-bold) + font-variation-settings: "wght" var(--font-weight-bold); } - blockquote { - -webkit-box-sizing: content-box; - box-sizing: content-box; - margin-left: auto; - margin-right: auto; - max-width: 80%; - padding: calc(var(--baseline) * 22) 0 calc(var(--baseline) * 12); - position: relative; - font-size: clamp(1.265625rem, 1.265625rem + .158203125 * (100vw - 20rem) / 80, 1.423828125rem) + box-sizing: content-box; + margin-left: auto; + margin-right: auto; + max-width: 80%; + padding: calc(var(--baseline) * 22) 0 calc(var(--baseline) * 12); + position: relative; + font-size: clamp(1.265625rem, calc(1.265625rem + 0.15820313 * (100vw - 20rem) / 80), 1.42382813rem); +} +@media all and (min-width: 37.5em) { + blockquote { + max-width: 60%; + } } - -@media all and (min-width:37.5em) { - blockquote { - max-width: 60% - } -} - blockquote::before { - color: var(--light); - content: "“"; - font: var(--font-weight-normal) 720%/0.9 Georgia, Times, Times New Roman, serif; - left: -15%; - position: absolute; - top: calc(var(--baseline) * 11) + color: var(--primary-base); + content: "“"; + font: var(--font-weight-normal) 720%/0.9 Georgia, Times, Times New Roman, serif; + left: -15%; + position: absolute; + top: calc(var(--baseline) * 11); } - -@media all and (min-width:37.5em) { - blockquote::before { - left: -20% - } +@media all and (min-width: 37.5em) { + blockquote::before { + left: -20%; + } } - -blockquote>:first-child { - margin-top: 0 +blockquote > :first-child { + margin-top: 0; } - ol, ul { - margin-left: 3ch + margin-left: 3ch; } - -ol>li, -ul>li { - list-style: inherit; - padding: 0 0 calc(var(--baseline) * 2) 1ch +ol > li, +ul > li { + list-style: inherit; + padding: 0 0 calc(var(--baseline) * 2) 1ch; } - ol ol, -ol ul, ul ol, +ol ul, ul ul { - margin-bottom: calc(var(--baseline) * 2); - margin-top: calc(var(--baseline) * 2) + margin-bottom: calc(var(--baseline) * 2); + margin-top: calc(var(--baseline) * 2); } - dl dt { - font-variation-settings: "wght" var(--font-weight-bold) + font-variation-settings: "wght" var(--font-weight-bold); } - code { - background-color: rgba(var(--inline-code), .1); - border-radius: 3px; - color: rgb(var(--inline-code)); - font-size: 1rem; - font-family: var(--monospace); - padding: .25rem .5rem + background-color: oklch(from var(--primary-base) l c h / 0.1); + border-radius: 3px; + color: var(--primary-8); + font-size: 1rem; + font-family: var(--monospace); + padding: 0.25rem 0.5rem; } - pre { - background-color: var(--lighter); - border-radius: var(--border-radius); - font-size: 1rem; - max-height: var(--pre-height); - padding: calc(var(--baseline) * 6); - white-space: pre-wrap !important; - word-wrap: break-word; - width: 100% + background-color: var(--neutral-1); + border-radius: var(--border-radius); + font-size: 1rem; + max-height: var(--pre-height); + padding: calc(var(--baseline) * 6); + white-space: pre-wrap !important; + word-wrap: break-word; + width: 100%; } - pre code { - background-color: var(--lighter); - color: inherit !important; - font-size: inherit; - padding: 0 + background-color: transparent; + color: inherit !important; + font-size: inherit; + padding: 0; } - table { - border: 1px solid var(--light); - border-left: none; - border-collapse: collapse; - border-spacing: 0; - vertical-align: top; - text-align: left; - width: 100% + border: 1px solid var(--neutral-2); + border-left: none; + border-collapse: collapse; + border-spacing: 0; + vertical-align: top; + text-align: left; + width: 100%; + overflow-wrap: normal; } - table th { - font-variation-settings: "wght" var(--font-weight-bold); - padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4) + font-variation-settings: "wght" var(--font-weight-bold); + padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4); } - table td { - border-top: 1px solid var(--light); - border-left: 1px solid var(--light); - padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4) + border-top: 1px solid var(--black); + border-left: 1px solid var(--black); + padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4); } - figcaption { - color: var(--gray-1); - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - font-size: .7901234568rem; - margin-top: calc(var(--baseline) * 4); - text-align: center + color: var(--neutral-6); + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + font-size: 0.79012346rem; + margin-top: calc(var(--baseline) * 4); + text-align: center; } - kbd { - background: var(--dark); - border-radius: 3px; - color: var(--white); - font-family: var(--monospace); - font-size: .8888em; - padding: .125rem .375rem + background: var(--neutral-9); + border-radius: 3px; + color: var(--black); + font-family: var(--monospace); + font-size: 0.8888em; + padding: 0.125rem 0.375rem; } - sub, sup { - font-size: 65% + font-size: 65%; } - small { - font-size: .7901234568rem + font-size: 0.79012346rem; } - .separator, hr { - background: 0 0; - border: none; - height: auto; - line-height: 1; - max-width: none; - text-align: center + background: 0 0; + border: none; + height: auto; + line-height: 1; + max-width: none; + text-align: center; } - .separator::before, hr::before { - content: "***"; - color: var(--dark); - font-size: 1.265625rem; - font-variation-settings: "wght" var(--font-weight-bold); - letter-spacing: 1.265625rem; - padding-left: 1.265625rem -} - -.separator--dot::before { - content: "*"; - color: var(--dark); - font-size: 1.265625rem; - font-variation-settings: "wght" var(--font-weight-bold); - letter-spacing: 1.265625rem; - padding-left: 1.265625rem + content: "***"; + color: var(--neutral-9); + font-size: 1.265625rem; + font-variation-settings: "wght" var(--font-weight-bold); + letter-spacing: 1.265625rem; + padding-left: 1.265625rem; +} +.separator--dot::before, +hr.separator--dot::before { + content: "*"; + color: var(--neutral-9); + font-size: 1.265625rem; + font-variation-settings: "wght" var(--font-weight-bold); + letter-spacing: 1.265625rem; + padding-left: 1.265625rem; } - .separator--long-line { - position: relative + position: relative; } - .separator--long-line::before { - content: ""; - height: 1.265625rem + content: ""; + height: 1.265625rem; } - .separator--long-line::after { - border-top: 1px solid var(--light); - content: ""; - height: 1px; - position: absolute; - width: 100%; - top: 50%; - left: 0 + border-top: 1px solid var(--neutral-2); + content: ""; + height: 1px; + position: absolute; + width: 100%; + top: 50%; + left: 0; } - .btn, [type=button], [type=submit], button { - background: var(--color); - -webkit-box-shadow: 0 8px 20px -3px rgba(var(--dark-rgb), .12); - box-shadow: 0 8px 20px -3px rgba(var(--dark-rgb), .12); - border: none; - border-radius: var(--border-radius); - color: #fff; - cursor: pointer; - display: inline-block; - font: var(--font-weight-normal) 0.8888888889rem var(--font-heading); - padding: .75rem 1rem; - vertical-align: top; - text-align: center; - -webkit-transition: all .2s ease-out; - transition: all .2s ease-out; - will-change: transform; - width: 100% -} - -@media all and (min-width:20em) { - - .btn, - [type=button], - [type=submit], - button { - width: auto - } + background: linear-gradient(to bottom, oklch(0.6653 0.2227 260), oklch(0.4724 0.1604 260)); + box-shadow: 0 8px 20px -3px oklch(from #000 l c h / 0.12); + border: 1px solid oklch(0.4724 0.1604 260); + color: #fff; + cursor: pointer; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; + font: normal 600 0.88888889rem var(--font-body); + padding: 0.5rem 0.75rem; + vertical-align: top; + text-align: center; + transition: all 0.2s ease-out; + will-change: transform; + width: 100%; + word-break: normal; +} +@media all and (min-width: 20em) { + .btn, + [type=button], + [type=submit], + button { + width: auto; + } } - -.btn:focus, .btn:hover, -[type=button]:focus, [type=button]:hover, -[type=submit]:focus, [type=submit]:hover, -button:focus, button:hover { - color: #fff; - -webkit-box-shadow: 0 12px 20px 0 rgba(var(--dark-rgb), .12); - box-shadow: 0 12px 20px 0 rgba(var(--dark-rgb), .12); - text-decoration: none; - -webkit-transform: translateY(-3px); - transform: translateY(-3px) + color: #fff; + background: linear-gradient(to bottom, oklch(0.8198 0.2429 260), oklch(0.6172 0.2099 260)); + box-shadow: 0 12px 20px 0 oklch(from #000 l c h / 0.12); + text-decoration: none; +} +.btn:focus-visible, +[type=button]:focus-visible, +[type=submit]:focus-visible, +button:focus-visible { + outline: 2px solid currentcolor; + outline-offset: 2px; } - -.btn:focus, -[type=button]:focus, -[type=submit]:focus, -button:focus { - outline: 0 -} - .btn:disabled, [type=button]:disabled, [type=submit]:disabled, button:disabled { - background-color: var(--light); - color: var(--dark); - cursor: not-allowed + background: var(--neutral-2); + color: var(--neutral-9); + cursor: not-allowed; +} +.btn-external { + background: linear-gradient(to bottom, oklch(0.6653 0.2227 142.5), oklch(0.4724 0.1604 142.5)); + box-shadow: 0 8px 20px -3px oklch(from #000 l c h / 0.12); + border: 1px solid oklch(0.4724 0.1604 142.5); + color: #fff; + cursor: pointer; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; + font: normal 600 0.88888889rem var(--font-body); + padding: 0.5rem 0.75rem; + vertical-align: top; + text-align: center; + transition: all 0.2s ease-out; + will-change: transform; + width: 100%; + word-break: normal; +} +@media all and (min-width: 20em) { + .btn-external { + width: auto; + } +} +.btn-external:hover { + color: #fff; + background: linear-gradient(to bottom, oklch(0.8198 0.2429 142.5), oklch(0.6172 0.2099 142.5)); + box-shadow: 0 12px 20px 0 oklch(from #000 l c h / 0.12); + text-decoration: none; +} +.btn-external:focus-visible { + outline: 2px solid currentcolor; + outline-offset: 2px; +} +.btn-external:disabled { + background: var(--neutral-2); + color: var(--neutral-9); + cursor: not-allowed; +} +@media all and (max-width: 19.9375em) { + .btn + .btn, + .btn + [type=button], + .btn + [type=submit], + .btn + button, + [type=button] + .btn, + [type=button] + [type=button], + [type=button] + [type=submit], + [type=button] + button, + [type=submit] + .btn, + [type=submit] + [type=button], + [type=submit] + [type=submit], + [type=submit] + button, + button + .btn, + button + [type=button], + button + [type=submit], + button + button { + margin-top: calc(var(--baseline) * 2); + } } - -.btn--white { - background: var(--white); - color: var(--gray-1) -} - -.btn--white:focus, -.btn--white:hover { - color: var(--color) -} - -@media all and (max-width:19.9375em) { - - .btn+.btn, - .btn+[type=button], - .btn+[type=submit], - .btn+button, - [type=button]+.btn, - [type=button]+[type=button], - [type=button]+[type=submit], - [type=button]+button, - [type=submit]+.btn, - [type=submit]+[type=button], - [type=submit]+[type=submit], - [type=submit]+button, - button+.btn, - button+[type=button], - button+[type=submit], - button+button { - margin-top: calc(var(--baseline) * 2) - } -} - [type=button], [type=submit], button { - -webkit-appearance: none; - -moz-appearance: none -} - -::-webkit-input-placeholder { - color: var(--gray-2); - opacity: 1 -} - -::-moz-placeholder { - color: var(--gray-2); - opacity: 1 + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } - -:-ms-input-placeholder { - color: var(--gray-2); - opacity: 1 -} - -::-ms-input-placeholder { - color: var(--gray-2); - opacity: 1 -} - ::placeholder { - color: var(--gray-2); - opacity: 1 + color: var(--neutral-4); + opacity: 1; } - fieldset { - border: 1px solid var(--light); - border-radius: 4px; - margin: 0 0 calc(var(--baseline) * 6); - padding: 1.5rem + border: 1px solid var(--neutral-2); + border-radius: 4px; + margin: 0 0 calc(var(--baseline) * 6); + padding: 1.5rem; } - -fieldset>legend { - margin-left: -1rem; - padding: 0 1rem +fieldset > legend { + margin-left: -1rem; + padding: 0 1rem; } - legend { - font-variation-settings: "wght" var(--headings-weight) + font-variation-settings: "wght" var(--headings-weight); } - label { - font-variation-settings: "wght" var(--headings-weight); - margin: 0 1rem calc(var(--baseline) * 3) 0 + font-variation-settings: "wght" var(--headings-weight); + margin: 0 1rem calc(var(--baseline) * 3) 0; } - option { - font-variation-settings: "wght" var(--font-weight-normal) + font-variation-settings: "wght" var(--font-weight-normal); } - [type=email], [type=number], [type=search], @@ -651,33 +911,29 @@ option { [type=url], select, textarea { - background-color: var(--white); - border: none; - border: 1px solid var(--light); - border-radius: var(--border-radius); - color: var(--text-color); - font-size: 1rem; - outline: 0; - padding: .5rem .74rem; - width: 100%; - -webkit-appearance: none; - -moz-appearance: none -} - -@media all and (min-width:37.5em) { - - [type=email], - [type=number], - [type=search], - [type=tel], - [type=text], - [type=url], - select, - textarea { - width: auto - } + background-color: var(--white); + border: 1px solid var(--neutral-2); + border-radius: var(--border-radius); + color: var(--text-color); + font-size: 1rem; + padding: 0.5rem 0.74rem; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} +@media all and (min-width: 37.5em) { + [type=email], + [type=number], + [type=search], + [type=tel], + [type=text], + [type=url], + select, + textarea { + width: auto; + } } - [type=email]:focus, [type=number]:focus, [type=search]:focus, @@ -686,1394 +942,1274 @@ textarea { [type=url]:focus, select:focus, textarea:focus { - border-color: var(--color) + border-color: var(--link-color); } - input[type=checkbox], input[type=radio] { - color: var(--text-color); - opacity: 0; - position: absolute -} - -input[type=checkbox]+label, -input[type=radio]+label { - display: block; - font-variation-settings: "wght" var(--font-weight-normal); - position: relative; - margin-left: -1px; - cursor: pointer; - padding: 0 0 0 calc(var(--baseline) * 9) + color: var(--text-color); + opacity: 0; + position: absolute; +} +input[type=checkbox] + label, +input[type=radio] + label { + display: block; + font-variation-settings: "wght" var(--font-weight-normal); + position: relative; + margin-left: -1px; + cursor: pointer; + padding: 0 0 0 calc(var(--baseline) * 9); +} +input[type=checkbox] + label::before, +input[type=radio] + label::before { + background-color: var(--white); + border: 1px solid var(--neutral-2); + border-radius: 2px; + content: ""; + display: block; + height: calc(var(--baseline) * 5); + left: 0; + line-height: calc(var(--baseline) * 5); + margin-right: calc(var(--baseline) * 5); + position: absolute; + text-align: center; + top: var(--baseline); + width: calc(var(--baseline) * 5); +} +input[type=checkbox]:checked + label::before, +input[type=radio]:checked + label::before { + background-image: none !important; + content: ""; + border-color: var(--link-color); +} +input[type=checkbox]:checked + label::after, +input[type=radio]:checked + label::after { + content: ""; + display: block; + width: 6px; + height: 9px; + border: solid var(--link-color); + border-width: 0 2px 2px 0; + left: calc(var(--baseline) * 1.1); + position: absolute; + top: calc(var(--baseline) * 3); + transform: rotate(45deg) translate(0, -50%); +} +input[type=checkbox]:focus + label::before, +input[type=radio]:focus + label::before, +input[type=checkbox]:focus-visible + label::before, +input[type=radio]:focus-visible + label::before { + outline: 2px solid var(--link-color); + outline-offset: 2px; +} +input[type=radio] + label::before { + border-radius: 50%; } - -input[type=checkbox]+label::before, -input[type=radio]+label::before { - background-color: var(--white); - border: 1px solid var(--light); - border-radius: 2px; - content: ""; - display: block; - height: calc(var(--baseline) * 5); - left: 0; - line-height: calc(var(--baseline) * 5); - margin-right: calc(var(--baseline) * 5); - position: absolute; - text-align: center; - top: var(--baseline); - width: calc(var(--baseline) * 5) -} - -input[type=checkbox]:checked+label::before, -input[type=radio]:checked+label::before { - background-image: none !important; - content: ""; - border-color: var(--color) -} - -input[type=checkbox]:checked+label::after, -input[type=radio]:checked+label::after { - content: ""; - display: block; - width: 6px; - height: 9px; - border: solid var(--color); - border-width: 0 2px 2px 0; - left: calc(var(--baseline) * 1.1); - position: absolute; - top: calc(var(--baseline) * 3); - -webkit-transform: rotate(45deg) translate(0, -50%); - transform: rotate(45deg) translate(0, -50%) -} - -input[type=radio]+label::before { - border-radius: 50% -} - [type=file] { - margin-bottom: calc(var(--baseline) * 6); - width: 100% + margin-bottom: calc(var(--baseline) * 6); + width: 100%; } - select { - border-radius: var(--border-radius); - max-width: 100%; - width: auto; - position: relative + border-radius: var(--border-radius); + max-width: 100%; + width: auto; + position: relative; } - select:not([multiple]) { - background: url('data:image/svg+xml;utf8,') no-repeat 90% 50%; - background-size: 8px; - padding-right: calc(var(--baseline) * 12) + background: url('data:image/svg+xml;utf8,') no-repeat 90% 50%; + background-size: 8px; + padding-right: calc(var(--baseline) * 12); } - select[multiple] { - border: 1px solid var(--light); - padding: calc(var(--baseline) * 6); - width: 100% + border: 1px solid var(--neutral-2); + padding: calc(var(--baseline) * 6); + width: 100%; } - select[multiple]:hover { - border-color: var(--light) + border-color: var(--neutral-2); } - select[multiple]:focus { - border-color: var(--color) + border-color: var(--link-color); } - select[multiple]:disabled { - background-color: var(--light); - cursor: not-allowed + background-color: var(--neutral-2); + cursor: not-allowed; } - select[multiple]:disabled:hover { - border-color: var(--light) + border-color: var(--neutral-2); } - textarea { - display: block; - overflow: auto; - resize: vertical; - max-width: 100% -} - -.header { - align-items: center; - display: flex; - height: var(--navbar-height); - margin-top: 2rem; - max-width: var(--page-width); - position: relative -} - -@media all and (min-width:80.0625em) and (min-height:50em) { - .header { - margin-top: 3rem - } + display: block; + overflow: auto; + resize: vertical; + max-width: 100%; +} +.site-header { + align-items: center; + display: flex; + height: var(--navbar-height); + position: fixed; + top: 0px; + /* background: linear-gradient(to bottom, #1952a6, #123f83); + border-bottom: 2px solid #0a2246; */ + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + width: 100%; + z-index: 999; +} +.site-header::before, +.site-header::after { + content: ''; + position: absolute; + inset: 0; + mask-image: linear-gradient(to bottom, black 75%, transparent); + z-index: -1; +} +.site-header::before { + background: transparent; + opacity: 0.1; + transition: 0.5s background, 0.5s opacity; +} +.site-header::after { + opacity: 0; + backdrop-filter: blur(0); + transition: 0.5s backdrop-filter, 0.5s opacity; +} +.site-header.scrolled::before { + /* frosted glass texture found the website you'd least expect; thank you https://www.microsoft.com/en-us/edge/welcome ! */ + background: url('../../assets/backgrounds/frosted-texture.png'); + background-repeat: repeat; + background-size: 200px 200px; + opacity: 0.1; + z-index: -1; +} +.site-header.scrolled::after { + opacity: 1; + backdrop-filter: blur(14px); + z-index: -2; } - .logo { - order: 1; - color: var(--dark) !important; - font-family: var(--font-logo); - font-variation-settings: "wght" var(--font-weight-bold); - font-size: 1.423828125rem; - line-height: 1; - margin-right: auto; - white-space: nowrap -} - -@media all and (max-width:74.9375em) { - .logo { - text-align: center - } + order: 1; + color: var(--neutral-9) !important; + font-family: var(--font-logo); + font-variation-settings: "wght" var(--font-weight-bold); + font-size: 1.42382813rem; + line-height: 1; + margin-right: auto; + white-space: nowrap; + height: 60%; + aspect-ratio: 1; +} +@media all and (max-width: 74.9375em) { + .logo { + text-align: center; + } +} +.logo > img { + height: 100%; + object-fit: contain; + width: auto; +} +.logo:hover > img, +.logo:focus-within > img { + transform: rotate(5deg); } - -.logo>img { - height: 4rem; - -o-object-fit: contain; - object-fit: contain; - padding: calc(var(--baseline) * 2) 0; - width: auto -} - .search { - margin-right: 1.5rem; - order: 2; - text-align: right; - z-index: 99 -} - -@media all and (min-width:56.25em) { - .search { - margin: 0 0 0 1.5rem; - order: 3 - } -} - -.search__btn { - border: none; - background: 0 0 !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - margin-bottom: 0; - padding-right: 0; - padding-left: 0; - width: auto -} - -.search__btn:focus, -.search__btn:hover { - outline: 0; - -webkit-transform: translateY(0); - transform: translateY(0) -} - -.search__btn:focus>svg, -.search__btn:hover>svg { - fill: var(--color) -} - -.search__btn>svg { - display: inline-block; - fill: var(--gray-1); - -webkit-transition: all .24s ease; - transition: all .24s ease; - vertical-align: middle -} - -.search__input { - background: 0 0; - border: none; - font-size: .8888888889rem; - padding: 0 1rem 0 0; - width: 100% -} - -@media all and (min-width:37.5em) { - .search__input { - min-width: 18rem - } -} - -.search__input:focus { - color: var(--dark) -} - -.search__input:focus::-webkit-input-placeholder { - color: var(--gray-2) !important; - opacity: .66 -} - -.search__input:focus::-moz-placeholder { - color: var(--gray-2) !important; - opacity: .66 -} - -.search__input:focus:-ms-input-placeholder { - color: var(--gray-2) !important; - opacity: .66 + margin-right: 1.5rem; + order: 2; + text-align: right; + z-index: 99; +} +@media all and (min-width: 56.25em) { + .search { + margin: 0 0 0 1.5rem; + order: 3; + } +} +.search .search__btn { + border: none; + background: 0 0 !important; + box-shadow: none !important; + margin-bottom: 0; + padding-right: 0; + padding-left: 0; + width: auto; +} +.search .search__btn:focus, +.search .search__btn:hover { + transform: translateY(0); +} +.search .search__btn:focus > svg, +.search .search__btn:hover > svg { + fill: var(--link-color); +} +.search .search__btn > svg { + display: inline-block; + fill: var(--neutral-6); + transition: all 0.24s ease; + vertical-align: middle; +} +.search .search__input { + background: 0 0; + border: none; + font-size: 0.88888889rem; + padding: 0 1rem 0 0; + width: 100%; +} +@media all and (min-width: 37.5em) { + .search .search__input { + min-width: 18rem; + } +} +.search .search__input:focus { + color: var(--neutral-9); +} +.search .search__input:focus::placeholder { + color: var(--neutral-4) !important; + opacity: 0.66; +} +.search .search__form { + align-items: center; + display: flex; + justify-content: space-between; +} +.search .search__button { + box-shadow: unset; + width: auto !important; +} +.search .search__button:focus, +.search .search__button:hover { + transform: translateY(0); +} +.search .search__overlay { + background: var(--neutral-1); + border-radius: var(--border-radius); + border: 2px solid var(--neutral-2); + left: 0; + opacity: 0; + padding: calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 4); + position: absolute; + right: 0; + top: 0; + transition: all 0.24s ease-out; + visibility: hidden; + z-index: 100; +} +@media all and (min-width: 56.25em) { + .search .search__overlay { + background: var(--neutral-1); + border: none; + left: auto; + top: var(--navbar-height); + transform: translateY(calc(var(--baseline) * -3)); + } +} +.search .search__overlay.expanded { + transform: translateY(0); + opacity: 1; + display: block; + visibility: visible; } - -.search__input:focus::-ms-input-placeholder { - color: var(--gray-2) !important; - opacity: .66 -} - -.search__input:focus::placeholder { - color: var(--gray-2) !important; - opacity: .66 -} - -.search__form { - align-items: center; - display: flex; - justify-content: space-between -} - -.search__button { - -webkit-box-shadow: unset; - box-shadow: unset; - width: auto !important -} - -.search__button:focus, -.search__button:hover { - -webkit-transform: translateY(0); - transform: translateY(0) -} - -.search__overlay { - background: var(--lighter); - border-radius: var(--border-radius); - border: 2px solid var(--light); - left: 0; - opacity: 0; - padding: calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 4); - position: absolute; - right: 0; - top: 0; - -webkit-transition: all .24s ease-out; - transition: all .24s ease-out; - visibility: hidden; - z-index: 100 -} - -@media all and (min-width:56.25em) { - .search__overlay { - background: var(--lighter); - border: none; - left: auto; - top: var(--navbar-height); - -webkit-transform: translateY(calc(var(--baseline) * -3)); - transform: translateY(calc(var(--baseline) * -3)) - } -} - -.search__overlay.expanded { - -webkit-transform: translateY(0); - transform: translateY(0); - opacity: 1; - display: block; - visibility: visible -} - .navbar { - order: 3; - position: relative + order: 3; + position: relative; + height: 100%; } - -@media all and (min-width:56.25em) { - .navbar { - order: 2 - } +@media all and (min-width: 56.25em) { + .navbar { + order: 2; + } } - .navbar .navbar__menu { - display: flex; - list-style: none; - margin: 0; - padding: 0 + display: flex; + list-style: none; + margin: 0; + padding: 0; } - -@media all and (max-width:56.1875em) { - .navbar .navbar__menu { - display: none - } +@media all and (max-width: 56.1875em) { + .navbar .navbar__menu { + display: none; + } } - .navbar .navbar__menu li { - display: block; - font-size: .8888888889rem; - font-family: var(--font-menu); - line-height: var(--line-height); - padding: 0; - position: relative; - white-space: nowrap + display: block; + font-size: 16px; + font-weight: bold; + font-family: var(--font-menu); + line-height: var(--line-height); + padding: 0; + position: relative; + white-space: nowrap; } - .navbar .navbar__menu li a, .navbar .navbar__menu li span[aria-haspopup=true] { - color: var(--link-color-hover); - display: block; - padding: 0 .75rem; - -webkit-transition: all .24s ease-out; - transition: all .24s ease-out + color: #fff; + padding: 0px 10px; + transition: all 0.24s ease-out; } - -.navbar .navbar__menu li a:active, -.navbar .navbar__menu li a:focus, .navbar .navbar__menu li a:hover, -.navbar .navbar__menu li span[aria-haspopup=true]:active, -.navbar .navbar__menu li span[aria-haspopup=true]:focus, -.navbar .navbar__menu li span[aria-haspopup=true]:hover { - color: var(--link-color) +.navbar .navbar__menu li span[aria-haspopup=true]:hover, +.navbar .navbar__menu li a:focus-within, +.navbar .navbar__menu li span[aria-haspopup=true]:focus-within { + text-decoration: underline; } - .navbar .navbar__menu li span { - color: var(--dark); - cursor: default; - display: block; - padding: 0 .5rem + color: var(--neutral-9); + cursor: default; + display: block; + padding: 0 0.5rem; +} +.navbar .navbar__menu li.active { + opacity: 0.5; +} +.navbar .navbar__menu li.has-submenu { + position: relative; +} +.navbar .navbar__menu li.has-submenu:active > .navbar__submenu, +.navbar .navbar__menu li.has-submenu:focus > .navbar__submenu, +.navbar .navbar__menu li.has-submenu:focus-within > .navbar__submenu, +.navbar .navbar__menu li.has-submenu:hover > .navbar__submenu { + left: 0; + opacity: 1; + transform: scale(1); + visibility: visible; + margin-top: 0; +} +.navbar .navbar__menu li.has-submenu:active > .navbar__submenu.is-right-submenu, +.navbar .navbar__menu li.has-submenu:focus > .navbar__submenu.is-right-submenu, +.navbar .navbar__menu li.has-submenu:focus-within > .navbar__submenu.is-right-submenu, +.navbar .navbar__menu li.has-submenu:hover > .navbar__submenu.is-right-submenu { + left: auto; + right: 0; + transform-origin: right top; +} +.navbar .navbar__menu li.has-submenu .has-submenu:active > .navbar__submenu, +.navbar .navbar__menu li.has-submenu .has-submenu:focus > .navbar__submenu, +.navbar .navbar__menu li.has-submenu .has-submenu:focus-within > .navbar__submenu, +.navbar .navbar__menu li.has-submenu .has-submenu:hover > .navbar__submenu { + top: 0; + margin-top: 0; +} +.navbar .navbar__menu > li { + line-height: var(--navbar-height); +} +.navbar .navbar__menu > li:hover { + /* &>a, + &>span[aria-haspopup=true] { + color: var(--link-color) + } */ +} +.navbar .navbar__menu > li:hover > [aria-haspopup=true] { + box-shadow: none; +} +.navbar .navbar__menu > li:hover.has-submenu::after { + content: ""; + border-color: var(--link-color); } - -.navbar .navbar__menu>li { - line-height: var(--navbar-height) -} - -.navbar .navbar__menu>li:hover>a, -.navbar .navbar__menu>li:hover>span[aria-haspopup=true] { - color: var(--link-color) -} - -.navbar .navbar__menu>li:hover>[aria-haspopup=true] { - -webkit-box-shadow: none; - box-shadow: none -} - -.navbar .navbar__menu>li:hover.has-submenu::after { - content: ""; - border-color: var(--link-color) -} - -.navbar .navbar__menu>li.has-submenu { - position: relative -} - -.navbar .has-submenu:active>.navbar__submenu, -.navbar .has-submenu:focus>.navbar__submenu, -.navbar .has-submenu:hover>.navbar__submenu { - left: 0; - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - visibility: visible; - margin-top: 0 -} - -.navbar .has-submenu:active>.navbar__submenu.is-right-submenu, -.navbar .has-submenu:focus>.navbar__submenu.is-right-submenu, -.navbar .has-submenu:hover>.navbar__submenu.is-right-submenu { - left: auto; - right: 0; - -webkit-transform-origin: right top; - transform-origin: right top -} - -.navbar .has-submenu .has-submenu:active>.navbar__submenu, -.navbar .has-submenu .has-submenu:focus>.navbar__submenu, -.navbar .has-submenu .has-submenu:hover>.navbar__submenu { - top: 0; - margin-top: 0 -} - -.navbar .has-submenu .has-submenu:active>.navbar__submenu.is-right-submenu, -.navbar .has-submenu .has-submenu:focus>.navbar__submenu.is-right-submenu, -.navbar .has-submenu .has-submenu:hover>.navbar__submenu.is-right-submenu { - top: 0; - margin-top: 0 -} - .navbar .navbar__submenu { - background: var(--lighter); - border-radius: var(--border-radius); - left: -9999px; - list-style-type: none; - margin: 0 0 .75rem; - padding: .75rem 1.5rem; - position: absolute; - text-align: left; - visibility: hidden; - white-space: nowrap; - z-index: 1; - opacity: 0; - -webkit-transform: scale(.8); - transform: scale(.8); - -webkit-transform-origin: 0 top; - transform-origin: 0 top; - -webkit-transition: opacity .15s, -webkit-transform .3s cubic-bezier(.275, 1.375, .8, 1); - transition: opacity .15s, -webkit-transform .3s cubic-bezier(.275, 1.375, .8, 1); - transition: opacity .15s, transform .3s cubic-bezier(.275, 1.375, .8, 1); - transition: opacity .15s, transform .3s cubic-bezier(.275, 1.375, .8, 1), -webkit-transform .3s cubic-bezier(.275, 1.375, .8, 1); - will-change: transform -} - -.navbar .navbar__submenu__submenu { - z-index: 2 + background: var(--neutral-1); + border-radius: var(--border-radius); + left: -9999px; + list-style-type: none; + margin: 0 0 0.75rem; + padding: 0.75rem 1.5rem; + position: absolute; + text-align: left; + visibility: hidden; + white-space: nowrap; + z-index: 1; + opacity: 0; + transform: scale(0.8); + transform-origin: 0 top; + transition: opacity 0.15s, transform 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); + will-change: transform; +} +.navbar .navbar__submenu .navbar__submenu__submenu { + z-index: 2; } - .navbar .navbar__submenu li { - line-height: 1.5; - font-variation-settings: "wght" var(--font-weight-normal); - padding: 0 .25rem; - text-transform: none + line-height: 1.5; + font-variation-settings: "wght" var(--font-weight-normal); + padding: 0 0.25rem; + text-transform: none; } - .navbar .navbar__submenu li:last-child { - border: none + border: none; } - .navbar .navbar__submenu li a, .navbar .navbar__submenu li span[aria-haspopup=true] { - padding: .5rem 0; - -webkit-transition: all .24s ease; - transition: all .24s ease + padding: 0.5rem 0; + transition: all 0.24s ease; } - .navbar .navbar__submenu li span { - padding: .5rem 1.25rem + padding: 0.5rem 1.25rem; } - .navbar .navbar__toggle { - background: var(--light); - border: none; - -webkit-box-shadow: none; - box-shadow: none; - color: var(--link-color); - cursor: pointer; - display: block; - font-variation-settings: "wght" var(--font-weight-bold); - line-height: 1; - overflow: visible; - text-transform: none; - z-index: 2004 -} - -@media all and (min-width:56.25em) { - .navbar .navbar__toggle { - display: none - } + background: transparent; + border: none; + box-shadow: none; + color: #fff; + cursor: pointer; + display: block; + font-family: var(--font-menu); + font-variation-settings: "wght" var(--font-weight-bold); + line-height: 1; + overflow: visible; + text-transform: none; + z-index: 2004; + height: 100%; +} +@media all and (min-width: 56.25em) { + .navbar .navbar__toggle { + display: none; + } } - .navbar .navbar__toggle:focus, .navbar .navbar__toggle:hover { - -webkit-box-shadow: none; - box-shadow: none; - outline: 0; - -webkit-transform: none; - transform: none + box-shadow: none; + transform: none; + background: var(--navbar-hover-bg); } - .navbar_mobile_sidebar { - background: var(--page-bg); - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .25); - box-shadow: 0 0 5px rgba(0, 0, 0, .25); - height: 100vh; - left: 0; - max-width: 400px; - overflow: auto; - position: fixed; - top: 0; - -webkit-transition: all .3s cubic-bezier(0, 0, .3, 1); - transition: all .3s cubic-bezier(0, 0, .3, 1); - width: 80%; - z-index: 1001 + background: oklch(from var(--page-bg) l c h / 80%); + backdrop-filter: blur(15px); + box-shadow: 0 0 5px oklch(from var(--black) l c h / 0.25); + height: 100vh; + left: 0; + max-width: 400px; + overflow: auto; + position: fixed; + top: 0; + transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); + width: 80%; + z-index: 1001; } - .navbar_mobile_sidebar.is-hidden { - left: -400px; - visibility: hidden + left: -400px; + visibility: hidden; } - .navbar_mobile_sidebar .navbar__menu { - margin: 24px + margin: 24px; } - .navbar_mobile_sidebar .navbar__menu li { - font-family: var(--font-heading); - font-size: 16px; - list-style: none; - line-height: 1.3; - margin: 0; - padding: 0 + font-family: var(--font-heading); + font-size: 16px; + list-style: none; + line-height: 1.3; + margin: 0; + padding: 0; } - .navbar_mobile_sidebar .navbar__menu li .is-separator, .navbar_mobile_sidebar .navbar__menu li a { - color: var(--dark); - display: block; - padding: 10px 20px 10px 0; - position: relative + color: var(--neutral-9); + display: block; + padding: 10px 20px 10px 0; + position: relative; } - .navbar_mobile_sidebar .navbar__menu li .is-separator:active, -.navbar_mobile_sidebar .navbar__menu li .is-separator:focus, -.navbar_mobile_sidebar .navbar__menu li .is-separator:hover, .navbar_mobile_sidebar .navbar__menu li a:active, +.navbar_mobile_sidebar .navbar__menu li .is-separator:focus, .navbar_mobile_sidebar .navbar__menu li a:focus, +.navbar_mobile_sidebar .navbar__menu li .is-separator:hover, .navbar_mobile_sidebar .navbar__menu li a:hover { - color: var(--color) + color: var(--link-color); } - .navbar_mobile_sidebar .navbar__menu li .is-separator[aria-haspopup=true]::after, .navbar_mobile_sidebar .navbar__menu li a[aria-haspopup=true]::after { - border-right: 1px solid var(--color); - border-top: 1px solid var(--color); - content: ""; - height: 6px; - position: absolute; - right: 6%; - top: 47%; - -webkit-transform: translate(0, -47%) rotate(135deg); - transform: translate(0, -47%) rotate(135deg); - width: 6px + border-right: 1px solid var(--link-color); + border-top: 1px solid var(--link-color); + content: ""; + height: 6px; + position: absolute; + right: 6%; + top: 47%; + transform: translate(0, -47%) rotate(135deg); + width: 6px; } - .navbar_mobile_sidebar .navbar__submenu { - margin: 0 0 0 24px; - padding: 0; - visibility: hidden + margin: 0 0 0 24px; + padding: 0; + visibility: hidden; } - .navbar_mobile_sidebar .navbar__submenu[aria-hidden=false] { - visibility: visible + visibility: visible; } - .navbar_mobile_sidebar .navbar__submenu_wrapper { - height: 0; - opacity: 0; - overflow: hidden; - -webkit-transition: all .3s cubic-bezier(.275, 1.375, .8, 1); - transition: all .3s cubic-bezier(.275, 1.375, .8, 1) + height: 0; + opacity: 0; + overflow: hidden; + transition: all 0.3s cubic-bezier(0.275, 1.375, 0.8, 1); } - .navbar_mobile_sidebar .navbar__submenu_wrapper.is-active { - height: auto; - opacity: 1 + height: auto; + opacity: 1; } - .navbar_mobile_sidebar__overlay { - background: rgba(0, 0, 0, .6); - height: 100%; - opacity: 1; - pointer-events: auto; - position: fixed; - top: 0; - -webkit-transition: all .3s cubic-bezier(0, 0, .3, 1); - transition: all .3s cubic-bezier(0, 0, .3, 1); - width: 100%; - z-index: 1000 + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: oklch(from #000 l c h / 0.6); + backdrop-filter: blur(5px); + transition: all 0.3s cubic-bezier(0, 0, 0.3, 1); + @starting-style { + backdrop-filter: blur(0px); + } + z-index: 1000; + opacity: 1; + pointer-events: auto; } - .navbar_mobile_sidebar__overlay.is-hidden { - opacity: 0; - pointer-events: none + opacity: 0; + pointer-events: none; } - .container { - -webkit-box-sizing: content-box; - box-sizing: content-box; - margin-left: auto; - margin-right: auto; - max-width: var(--page-width); - overflow: hidden; - padding: 0 var(--page-margin) + /* thank you stella sora wiki! https://stellasora.miraheze.org */ + background-size: 40px 40px; + background-image: linear-gradient(to right, #7070e00a 1px, transparent 1px), linear-gradient(to bottom, #7070e00a 1px, transparent 1px); + box-sizing: content-box; + overflow-wrap: break-word; } - -.container--narrow { - max-width: var(--entry-width) +.home-template .container { + overflow-x: hidden; } - -.main { - margin-top: var(--magic-number) +.container > * { + padding-left: var(--page-margin); + padding-right: var(--page-margin); +} +.container--narrow { + max-width: var(--entry-width); +} +.home-template .landing { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; + max-width: 75ch; + margin: auto; + position: relative; +} +.home-template .landing-stats { + display: flex; + justify-content: space-evenly; + gap: 1rem; + margin-top: calc(var(--baseline) * 9); + width: 100%; +} +@media screen and (max-width: 800px) { + .home-template .landing-stats { + flex-direction: column; + gap: 0.5rem; + justify-content: center; + } +} +.home-template .landing-scroll-chevron-wrapper { + position: absolute; + bottom: 20px; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; + width: 50px; + transition: 0.5s all; + transition-delay: 0.1s; + animation: auto linear hidechevronsoon both; + animation-timeline: scroll(root block); + animation-range: entry 5% cover 15%; +} +.home-template .landing-scroll-chevron-wrapper .landing-scroll-chevron { + width: 100%; + aspect-ratio: 1; + animation: chevronloop 2s infinite forwards; +} +.home-template .landing .highlight { + background: transparent; + padding: unset; +} +@keyframes hidechevronsoon { + from { + opacity: 0.2; + } + to { + opacity: 0; + } +} +@keyframes chevronloop { + 0% { + transform: translateY(-15px); + opacity: 0; + } + 50% { + transform: translateY(0); + opacity: 0.5; + } + 100% { + transform: translateY(15px); + opacity: 0; + } +} +.home-template .landing-blockquote { + padding: unset; + margin-left: unset; + margin-right: unset; + max-width: unset; + text-align: center; +} +.home-template .landing-blockquote strong { + color: var(--primary-7); +} +.home-template .landing-blockquote::before { + display: none; +} +.home-template .landing-huge-quote { + margin-bottom: calc(var(--baseline) * 60); +} +body:not(.home-template) .main { + margin-top: var(--magic-number); +} +@media screen and (max-width: 800px) { + body:not(.home-template) .main { + margin-top: var(--magic-number); + } +} +@media screen and (min-width: 1119px) { + body:not(.home-template) .main { + padding-left: 0 !important; + padding-right: 0 !important; + } } - .hero { - color: var(--gray-1); - font-size: clamp(1rem, 1rem + .125 * (100vw - 20rem) / 80, 1.125rem); - padding-bottom: var(--magic-number); - max-width: var(--entry-width) + opacity: 0.75; + font-size: clamp(1rem, calc(1rem + 0.125 * (100vw - 20rem) / 80), 1.125rem); + padding-bottom: var(--magic-number); + max-width: var(--entry-width); } - .hero h1 { - margin-top: 0 + margin-top: 0; } - .hero h1 sup { - font-variation-settings: "wght" var(--font-weight-normal); - font-size: 1.125rem; - vertical-align: top + font-variation-settings: "wght" var(--font-weight-normal); + font-size: 1.125rem; + vertical-align: top; } - .hero p { - margin-top: calc(var(--baseline) * 2) + margin-top: calc(var(--baseline) * 2); +} +.error-template .hero { + color: white !important; } - .hero--centered { - margin-left: auto; - margin-right: auto; - text-align: center + margin-left: auto; + margin-right: auto; + text-align: center; } - .hero--centered p { - margin: calc(var(--baseline) * 4) auto 0 + margin: calc(var(--baseline) * 4) auto 0; } - .l-options { - align-items: flex-start; - display: flex; - gap: 2rem; - justify-content: space-between; - margin-bottom: calc(var(--baseline) * 7) + align-items: flex-start; + display: flex; + gap: 2rem; + justify-content: space-between; + margin-bottom: calc(var(--baseline) * 7); +} +@media all and (min-width: 80.0625em) and (min-height: 50em) { + .l-options { + margin-bottom: calc(var(--baseline) * 10); + } +} +@media all and (max-width: 37.4375em) { + .l-options.nomobile { + display: none; + } } - -@media all and (min-width:80.0625em) and (min-height:50em) { - .l-options { - margin-bottom: calc(var(--baseline) * 10) - } -} - -@media all and (max-width:37.4375em) { - .l-options.nomobile { - display: none - } -} - .filter { - margin: 0 -.5rem; - line-height: 1.4 -} - -.filter__item { - background: 0 0; - -webkit-box-shadow: none; - box-shadow: none; - cursor: pointer; - display: inline-block; - font-family: var(--font-body); - font-variation-settings: "wght" var(--font-weight-normal); - font-size: .8888888889rem; - margin: 0; - padding: 0 .5rem; - text-transform: none + margin: 0 -0.5rem; + line-height: 1.4; +} +.filter .filter__item { + background: 0 0; + box-shadow: none; + cursor: pointer; + display: inline-block; + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + font-size: 0.88888889rem; + margin: 0; + padding: 0 0.5rem; + text-transform: none; +} +.filter .filter__item:focus, +.filter .filter__item:hover { + box-shadow: none; + transform: none; +} +.filter .filter__item.is-active { + color: var(--link-color); + -webkit-text-stroke: 0.5px var(--link-color); + pointer-events: none; } - -.filter__item:focus, -.filter__item:hover { - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transform: none; - transform: none -} - -.filter__item.is-active { - color: var(--link-color); - -webkit-text-stroke: 0.5px var(--link-color); - pointer-events: none -} - .switchers { - align-items: center; - display: flex; - margin-left: auto + align-items: center; + display: flex; + margin-left: auto; +} +@media all and (max-width: 37.4375em) { + .switchers { + display: none; + } +} +.switchers .switchers__item { + background: 0 0; + box-shadow: none; + color: var(--neutral-4); + padding: 0 0.5rem; +} +.switchers .switchers__item:focus, +.switchers .switchers__item:hover { + background: inherit; + box-shadow: inherit; + color: var(--link-color); + transform: translateY(0); +} +.switchers .switchers__item.is-active { + color: var(--neutral-6); + cursor: default; } - -@media all and (max-width:37.4375em) { - .switchers { - display: none - } -} - -.switchers__item { - background: 0 0; - -webkit-box-shadow: none; - box-shadow: none; - color: var(--gray-2); - padding: 0 .5rem -} - -.switchers__item:focus, -.switchers__item:hover { - background: inherit; - -webkit-box-shadow: inherit; - box-shadow: inherit; - color: var(--color); - -webkit-transform: translateY(0); - transform: translateY(0) -} - -.switchers__item.is-active { - color: var(--gray-1); - cursor: default -} - .l-grid { - -webkit-box-sizing: content-box; - box-sizing: content-box; - display: flex; - flex-wrap: wrap; - margin: calc(-1 * var(--cards-gap)) calc(-.5 * var(--cards-gap)); - position: relative + box-sizing: content-box; + display: flex; + flex-wrap: wrap; + margin: calc(-1 * var(--cards-gap)) calc(-0.5 * var(--cards-gap)); + position: relative; } - .l-grid .c-card { - width: 100% -} - -.l-grid .c-card__wrapper { - margin: var(--cards-gap) calc(var(--cards-gap)/ 2) -} - -@media all and (min-width:37.5em) { - .l-grid--2 .c-card { - width: 49.999% - } -} - -@media all and (min-width:37.5em) { - .l-grid--3 .c-card { - width: 49.999% - } -} - -@media all and (min-width:75em) { - .l-grid--3 .c-card { - width: 33.333% - } -} - -@media all and (min-width:37.5em) { - .l-grid--4 .c-card { - width: 49.999% - } -} - -@media all and (min-width:75em) { - .l-grid--4 .c-card { - width: 33.333% - } + width: 100%; +} +.l-grid .c-card .c-card__wrapper { + margin: var(--cards-gap) calc(var(--cards-gap)/2); +} +@media all and (min-width: 37.5em) { + .l-grid--2 .c-card { + width: 49.999%; + } +} +@media all and (min-width: 37.5em) { + .l-grid--3 .c-card { + width: 49.999%; + } +} +@media all and (min-width: 75em) { + .l-grid--3 .c-card { + width: 33.333%; + } +} +@media all and (min-width: 37.5em) { + .l-grid--4 .c-card { + width: 49.999%; + } +} +@media all and (min-width: 75em) { + .l-grid--4 .c-card { + width: 33.333%; + } +} +@media all and (min-width: 85em) { + .l-grid--4 .c-card { + width: 24.999%; + } +} +@media all and (min-width: 37.5em) { + .l-grid--1 .c-card { + width: 100%; + } } - -@media all and (min-width:85em) { - .l-grid--4 .c-card { - width: 24.999% - } -} - -@media all and (min-width:37.5em) { - .l-grid--1 .c-card { - width: 100% - } -} - .c-card { - list-style: none; - padding: 0 -} - -@media all and (min-width:37.5em) { - .c-card--rows .c-card__wrapper { - display: flex; - justify-content: space-between - } - - .c-card--rows .c-card__image { - flex: 0 1 70% - } - - .c-card--rows .c-card__content { - flex: 0 1 20% - } + list-style: none; + padding: 0; +} +@media all and (min-width: 37.5em) { + .c-card--rows .c-card__wrapper { + display: flex; + justify-content: space-between; + } + .c-card--rows .c-card__image { + flex: 0 1 70%; + } + .c-card--rows .c-card__content { + flex: 0 1 20%; + } } - .c-card__wrapper { - height: 100%; - position: relative + height: 100%; + position: relative; } - .c-card__wrapper:hover .c-card__image { - -webkit-box-shadow: var(--box-shadow-hover); - box-shadow: var(--box-shadow-hover); - -webkit-transform: scale(1.02); - transform: scale(1.02) + box-shadow: var(--box-shadow-hover); + transform: scale(1.02); } - .c-card__image { - background-color: var(--lighter); - border-radius: var(--border-radius); - -webkit-box-shadow: var(--box-shadow); - box-shadow: var(--box-shadow); - display: block; - height: var(--card-image-height); - margin: 0; - overflow: hidden; - -webkit-transition: all .12s linear; - transition: all .12s linear; - will-change: transform; - width: 100% -} - -.c-card__image>img { - -o-object-fit: cover; - object-fit: cover; - -o-object-position: center; - object-position: center; - height: inherit; - display: block; - width: inherit -} - -.c-card__image--up>img { - -o-object-position: top; - object-position: top -} - -.c-card__image--down>img { - -o-object-position: bottom; - object-position: bottom + background-color: var(--neutral-1); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow); + display: block; + height: var(--card-image-height); + margin: 0; + overflow: hidden; + transition: all 0.12s linear; + will-change: transform; + width: 100%; +} +.c-card__image > img { + object-fit: cover; + object-position: center; + height: inherit; + display: block; + width: inherit; +} +.c-card__image--up > img { + object-position: top; +} +.c-card__image--down > img { + object-position: bottom; } - .c-card__content { - padding: calc(var(--baseline) * 7) 0 + padding: calc(var(--baseline) * 7) 0; } - .c-card__title { - font-size: 1rem; - margin: 0 -} - -.c-card__title>a:after { - background: 0 0; - content: ""; - cursor: pointer; - left: 0; - height: 100%; - position: absolute; - top: 0; - width: 100%; - z-index: 0 + font-size: 1rem; + margin: 0; +} +.c-card__title > a:after { + background: 0 0; + content: ""; + cursor: pointer; + left: 0; + height: 100%; + position: absolute; + top: 0; + width: 100%; + z-index: 0; } - .c-card__text { - color: var(--gray-1); - font-size: .8888888889rem; - line-height: 1.4; - margin: calc(var(--baseline) * 3) 0 + color: var(--neutral-6); + font-size: 0.88888889rem; + line-height: 1.4; + margin: calc(var(--baseline) * 3) 0; } - .c-card__meta { - color: var(--gray-1); - display: flex; - font-size: .7901234568rem; - margin-top: 0; - position: relative; - z-index: 1 + color: var(--neutral-6); + display: flex; + font-size: 0.79012346rem; + margin-top: 0; + position: relative; + z-index: 1; } - .c-card__meta a { - color: var(--gray-1); - text-decoration: none; - -webkit-transition: all .12s linear; - transition: all .12s linear -} - -.c-card__meta a:hover { - color: var(--link-color) + color: var(--neutral-6); + text-decoration: none; + transition: all 0.12s linear; } - -.c-card__meta a:active { - color: var(--link-color) -} - +.c-card__meta a:hover, +.c-card__meta a:active, .c-card__meta a:focus { - color: var(--link-color); - outline: 0 + color: var(--link-color); } - -.c-card__meta a+a { - margin-left: var(--baseline) +.c-card__meta a + a { + margin-left: var(--baseline); } - .content { - position: relative + position: relative; +} +@media screen and (min-width: 1119px) { + .content { + padding-left: calc(var(--magic-number) * 2); + padding-right: calc(var(--magic-number) * 2); + } + body.toc-enabled .content { + display: grid; + gap: var(--magic-number); + grid-template-areas: "content toc"; + grid-template-columns: minmax(0, 1300px) 240px; + } } - .content__inner { - max-width: var(--entry-width); - margin: auto + grid-area: content; } - -.content__header { - padding-bottom: calc(var(--magic-number)/ 2) +body:not(.toc-enabled) .content__inner { + max-width: var(--entry-width); + margin: auto; } - -.content__header+.content__featured-image { - margin-top: calc(var(--magic-number)/ 3.5) +.toc-wrapper { + grid-area: toc; } - .content__featured-image { - margin-top: 0; - margin-bottom: calc(var(--magic-number)/ 1.5) -} - -.content__featured-image__inner { - background-color: var(--lighter); - border-radius: var(--border-radius); - -webkit-box-shadow: var(--box-shadow); - box-shadow: var(--box-shadow); - height: var(--featured-image-height) -} - -.content__featured-image img { - display: block; - height: inherit; - -o-object-fit: cover; - object-fit: cover; - max-width: var(--page-width); - width: 100% -} - -.content__featured-image--full { - margin-left: calc(-50vw + 50% + var(--page-margin)); - margin-right: calc(-50vw + 50% + var(--page-margin)); - padding: 0; - text-align: center -} - -.content__featured-image--full img { - max-width: 100% -} - -.content__title { - margin-top: 0 + margin-top: 0; + margin-bottom: calc(var(--magic-number)/1.5); } - -.content__meta { - color: var(--gray-1); - font-size: .8888888889rem; - margin-top: calc(var(--baseline) * 5) +.content__featured-image .content__featured-image__inner { + background-color: var(--neutral-1); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow); + height: var(--featured-image-height); } - -@media all and (min-width:48em) { - - .content__meta__left, - .content__meta__right { - display: inline-block - } +.content__featured-image img { + display: block; + height: inherit; + object-fit: cover; + max-width: var(--page-width); + width: 100%; } - -@media all and (min-width:31.25em) { - - .content__meta__left *+::before, - .content__meta__right *+::before { - content: "•"; - padding-right: .5rem - } +.content__featured-image--full { + margin-left: calc(-50vw + 50% + var(--page-margin)); + margin-right: calc(-50vw + 50% + var(--page-margin)); + padding: 0; + text-align: center; } - -@media all and (min-width:48em) { - - .content__meta__left+.content__meta__left::before, - .content__meta__left+.content__meta__right::before, - .content__meta__right+.content__meta__left::before, - .content__meta__right+.content__meta__right::before { - content: "•"; - padding-right: .5rem - } +.content__featured-image--full img { + max-width: 100%; } - -.content__entry>:first-child { - margin-top: 0 +.content__meta { + color: var(--neutral-6); + font-size: 0.88888889rem; + margin-top: calc(var(--baseline) * 5); +} +@media all and (min-width: 48em) { + .content__meta .content__meta__left, + .content__meta .content__meta__right { + display: inline-block; + } +} +@media all and (min-width: 31.25em) { + .content__meta .content__meta__left * + ::before, + .content__meta .content__meta__right * + ::before { + content: "•"; + padding-right: 0.5rem; + } +} +@media all and (min-width: 48em) { + .content__meta .content__meta__left + .content__meta__left::before, + .content__meta .content__meta__left + .content__meta__right::before, + .content__meta .content__meta__right + .content__meta__left::before, + .content__meta .content__meta__right + .content__meta__right::before { + content: "•"; + padding-right: 0.5rem; + } +} +.content__entry > :first-child { + margin-top: 0; } - .content__entry a:not(.btn):not([type=button]):not([type=submit]):not(button):hover { - text-decoration: underline; - -webkit-text-decoration-skip: ink; - text-decoration-skip: ink + text-decoration: underline; + text-decoration-skip: ink; } - .content__author { - font-variation-settings: "wght" var(--font-weight-bold); - margin-right: .75rem + font-variation-settings: "wght" var(--font-weight-bold); + margin-right: 0.75rem; } - -.content__author>img { - display: none +.content__author > img { + display: none; } - -@media all and (min-width:48em) { - .content__author>img { - border-radius: 50%; - display: inline-block; - height: calc(var(--baseline) * 6); - margin-right: var(--baseline); - width: calc(var(--baseline) * 6) - } +@media all and (min-width: 48em) { + .content__author > img { + border-radius: 50%; + display: inline-block; + height: calc(var(--baseline) * 6); + margin-right: var(--baseline); + width: calc(var(--baseline) * 6); + } } - .content__date, .content__updated { - display: inline-block; - margin: 0 .5rem 0 0 + display: inline-block; + margin: 0 0.5rem 0 0; } - .content__tag-share { - display: flex; - gap: 1rem; - justify-content: space-between + display: flex; + gap: 1rem; + justify-content: space-between; } - .content__tag { - font-size: .8888888889rem + font-size: 0.88888889rem; } - -.content__tag__title { - font-size: inherit; - display: inline-block; - margin: 0 .5rem 0 0 +.content__tag .content__tag__title { + font-size: inherit; + display: inline-block; + margin: 0 0.5rem 0 0; } - -.content__tag__list { - display: inline; - margin: 0 +.content__tag .content__tag__list { + display: inline; + margin: 0; } - -.content__tag__list li { - color: var(--gray-1); - display: inline-block; - list-style: none; - margin-right: .5rem; - padding: 0 +.content__tag .content__tag__list li { + color: var(--neutral-6); + display: inline-block; + list-style: none; + margin-right: 0.5rem; + padding: 0; } - .content__share { - flex: 0 0 auto; - font-size: 1rem; - margin-left: -1rem; - position: relative + flex: 0 0 auto; + font-size: 1rem; + margin-left: -1rem; + position: relative; } - -.content__share>a { - display: inline-block; - margin: 0 0 0 1rem +.content__share > a { + display: inline-block; + margin: 0 0 0 1rem; } - -.content__share>a:hover { - text-decoration: none +.content__share > a:hover { + text-decoration: none; } - -.content__share>a svg { - fill: var(--gray-1); - height: 1rem; - pointer-events: none; - -webkit-transition: all .12s linear; - transition: all .12s linear; - width: 1rem +.content__share > a svg { + fill: var(--neutral-6); + height: 1rem; + pointer-events: none; + transition: all 0.12s linear; + width: 1rem; } - .content__footer { - margin-top: calc(var(--magic-number)/ 2) + margin-top: calc(var(--magic-number)/2); } - .content__related { - margin-top: var(--magic-number) + margin-top: var(--magic-number); } - -.content__related__title { - font-size: 1rem; - border-top: 1px solid var(--light); - padding: 2rem 0 calc(2rem + 2vmin) +.content__related .content__related__title { + font-size: 1rem; + border-top: 1px solid var(--neutral-2); + padding: 2rem 0 calc(2rem + 2vmin); } - .post__image--left { - float: left; - margin-bottom: calc(var(--baseline) * 6); - margin-right: calc(var(--baseline) * 6); - max-width: 50% + float: left; + margin-bottom: calc(var(--baseline) * 6); + margin-right: calc(var(--baseline) * 6); + max-width: 50%; } - .post__image--right { - float: right; - margin-bottom: calc(var(--baseline) * 6); - margin-left: calc(var(--baseline) * 6); - max-width: 50% + float: right; + margin-bottom: calc(var(--baseline) * 6); + margin-left: calc(var(--baseline) * 6); + max-width: 50%; } - .post__image--center { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center + display: block; + margin-left: auto; + margin-right: auto; + text-align: center; +} +.post__image--center img { + max-height: 150px; + width: auto; } - .post__image--wide { - display: block; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); - text-align: center + display: block; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + text-align: center; } - .post__image--wide a, .post__image--wide img { - display: block; - height: auto; - margin: auto; - max-width: var(--page-width); - width: 100% + display: block; + height: auto; + margin: auto; + max-width: var(--page-width); + width: 100%; } - .post__image--full { - display: block; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin); - text-align: center + display: block; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + text-align: center; } - .post__image--full a, .post__image--full img { - display: block; - height: auto; - width: 100% + display: block; + height: auto; + width: 100%; } - .post__image figcaption a { - color: var(--gray-2); - text-decoration: none; - -webkit-transition: all .12s linear; - transition: all .12s linear -} - -.post__image figcaption a:hover { - color: var(--dark) -} - -.post__image figcaption a:active { - color: var(--dark) + color: var(--neutral-4); + text-decoration: none; + transition: all 0.12s linear; } - +.post__image figcaption a:hover, +.post__image figcaption a:active, .post__image figcaption a:focus { - color: var(--dark); - outline: 0 + color: var(--neutral-9); } - .post__iframe, .post__video { - position: relative; - display: block; - margin-top: calc(var(--baseline) * 9); - margin-bottom: calc(var(--baseline) * 9); - overflow: hidden; - padding: 0; - width: 100% + position: relative; + display: block; + margin-top: calc(var(--baseline) * 9); + margin-bottom: calc(var(--baseline) * 9); + overflow: hidden; + padding: 0; + width: 100%; } - .post__iframe::before, .post__video::before { - display: block; - content: ""; - padding-top: var(--embed-aspect-ratio) + display: block; + content: ""; + padding-top: var(--embed-aspect-ratio); } - .post__iframe iframe, -.post__iframe video, .post__video iframe, +.post__iframe video, .post__video video { - border: none; - height: 100%; - left: 0; - position: absolute; - top: 0; - bottom: 0; - width: 100% + border: none; + height: 100%; + left: 0; + position: absolute; + top: 0; + bottom: 0; + width: 100%; } - .post__toc { - border: 2px solid var(--light); - border-radius: var(--border-radius); - font-size: .8888888889rem; - color: var(--color); - margin-bottom: calc(var(--baseline) * 9); - padding: 2rem + border: 2px solid var(--neutral-2); + border-radius: var(--border-radius); + font-size: 0.88888889rem; + color: var(--link-color); + margin-bottom: calc(var(--baseline) * 9); + padding: 2rem; } - .post__toc h3 { - color: var(--link-color); - font-size: 1rem; - margin: 0 0 calc(var(--baseline) * 3) + color: var(--link-color); + font-size: 1rem; + margin: 0 0 calc(var(--baseline) * 3); } - .post__toc ul { - counter-reset: item; - list-style: decimal; - margin: 0; - padding: 0 0 0 2ch + counter-reset: item; + list-style: decimal; + margin: 0; + padding: 0 0 0 2ch; } - .post__toc ul li { - counter-increment: item; - padding: 0 0 0 calc(var(--baseline) * 2) + counter-increment: item; + padding: 0 0 0 calc(var(--baseline) * 2); } - .post__toc ul ul { - margin-top: 0; - padding: 0 0 0 calc(var(--baseline) * 2) + margin-top: 0; + padding: 0 0 0 calc(var(--baseline) * 2); } - .post__toc ul ul li { - display: block + display: block; } - .post__toc ul ul li:before { - content: counters(item, ".") ". "; - margin-left: -1rem; - margin-right: var(--baseline) + content: counters(item, ".") ". "; + margin-left: -1rem; + margin-right: var(--baseline); } - .banner--before-content { - margin-bottom: var(--magic-number) + margin-bottom: var(--magic-number); } - .banner--after-content { - margin-top: var(--magic-number) + margin-top: var(--magic-number); } - .page--author__avatar { - -webkit-box-shadow: 1px 16px 18px -6px rgba(0, 0, 0, .2); - box-shadow: 1px 16px 18px -6px rgba(0, 0, 0, .2); - border-radius: 50%; - height: 5rem; - margin: 0 0 calc(var(--baseline) * 6); - width: 5rem -} - -@media all and (min-width:37.5em) { - .page--author__avatar { - height: 6rem; - width: 6rem - } + box-shadow: 1px 16px 18px -6px oklch(from var(--black) l c h / 0.2); + border-radius: 50%; + height: 5rem; + margin: 0 0 calc(var(--baseline) * 6); + width: 5rem; +} +@media all and (min-width: 37.5em) { + .page--author__avatar { + height: 6rem; + width: 6rem; + } } - .page--author__details { - align-items: center; - border-top: 1px solid var(--light); - font-size: .8888888889rem; - display: inline-flex; - margin-top: calc(var(--baseline) * 6); - padding: calc(var(--baseline) * 4) 3rem 0 + align-items: center; + border-top: 1px solid var(--neutral-2); + font-size: 0.88888889rem; + display: inline-flex; + margin-top: calc(var(--baseline) * 6); + padding: calc(var(--baseline) * 4) 3rem 0; +} +@media all and (max-width: 37.4375em) { + .page--author__details { + flex-wrap: wrap; + justify-content: center; + padding: calc(var(--baseline) * 4) 0 0; + } } - -@media all and (max-width:37.4375em) { - .page--author__details { - flex-wrap: wrap; - justify-content: center; - padding: calc(var(--baseline) * 4) 0 0 - } -} - .page--author__details span { - flex-basis: 100% + flex-basis: 100%; } - -@media all and (min-width:37.5em) { - .page--author__details span { - flex-basis: auto; - margin-right: 2rem - } +@media all and (min-width: 37.5em) { + .page--author__details span { + flex-basis: auto; + margin-right: 2rem; + } } - .page--author__details a { - margin-left: .3rem + margin-left: 0.3rem; } - .page--error__title { - font-size: clamp(6.583250172rem, 6.583250172rem + 8.4311510216 * (100vw - 20rem) / 80, 15.0144011936rem) + font-size: clamp(6.58325017rem, calc(6.58325017rem + 8.43115102 * (100vw - 20rem) / 80), 15.01440119rem); } - .page--error__btn { - margin-top: calc(var(--baseline) * 7) !important + margin-top: calc(var(--baseline) * 2) !important; } - .page--search form { - align-items: flex-start; - display: flex; - flex-wrap: wrap -} - -@media all and (max-width:37.4375em) { - .page--search input { - margin-bottom: calc(var(--baseline) * 2) - } -} - -@media all and (min-width:20em) { - .page--search input { - flex: 1 0 auto; - margin-right: calc(var(--baseline) * 2) - } + align-items: flex-start; + display: flex; + flex-wrap: wrap; +} +@media all and (max-width: 37.4375em) { + .page--search form input { + margin-bottom: calc(var(--baseline) * 2); + } +} +@media all and (min-width: 20em) { + .page--search form input { + flex: 1 0 auto; + margin-right: calc(var(--baseline) * 2); + } +} +@media all and (max-width: 37.4375em) { + .page--search form button { + width: 100%; + } } - -@media all and (max-width:37.4375em) { - .page--search button { - width: 100% - } -} - .subpages { - border-top: 1px solid var(--light); - margin-top: var(--magic-number) + border-top: 1px solid var(--neutral-2); + margin-top: var(--magic-number); } - -.subpages__list { - list-style: initial; - margin-left: 2ch +.subpages .subpages__list { + list-style: initial; + margin-left: 2ch; } - -.subpages__list ul { - list-style: initial; - margin: 0 0 0 2ch +.subpages .subpages__list ul { + list-style: initial; + margin: 0 0 0 2ch; } - -.subpages__list li { - padding: 0 0 0 1ch +.subpages .subpages__list li { + padding: 0 0 0 1ch; } - .align-left { - text-align: left + text-align: left; } - .align-right { - text-align: right + text-align: right; } - .align-center { - text-align: center + text-align: center; } - .align-justify { - text-align: justify + text-align: justify; } - .msg { - background-color: var(--lighter); - border-left: 4px solid transparent; - border-radius: var(--border-radius); - font-size: .8888888889rem; - padding: calc(var(--baseline) * 6) calc(var(--baseline) * 8) + background: linear-gradient(to bottom, var(--primary-5), var(--primary-1)); + border: 1px solid var(--primary-5); + font-size: 0.88888889rem; + padding: calc(var(--baseline) * 5) calc(var(--baseline) * 5); } - -.msg--highlight { +/* .msg--highlight { border-color: var(--yellow) } @@ -2087,731 +2223,752 @@ textarea { .msg--warning { border-color: var(--red) -} - +} */ .dropcap:first-letter { - float: left; - font-family: var(--font-heading); - font-size: 4.1098906729rem; - line-height: .7; - margin-right: calc(var(--baseline) * 2); - padding: calc(var(--baseline) * 2) calc(var(--baseline) * 2) calc(var(--baseline) * 2) 0 + float: left; + font-family: var(--font-heading); + font-size: 4.10989067rem; + line-height: 0.7; + margin-right: calc(var(--baseline) * 2); + padding: calc(var(--baseline) * 2) calc(var(--baseline) * 2) calc(var(--baseline) * 2) 0; } - .pec-wrapper { - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100% + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; } - .pec-overlay { - align-items: center; - background-color: var(--light); - font-size: 14px; - display: none; - height: inherit; - justify-content: center; - line-height: 1.4; - padding: 1rem; - position: relative; - text-align: center + align-items: center; + background-color: var(--neutral-2); + font-size: 14px; + display: none; + height: inherit; + justify-content: center; + line-height: 1.4; + padding: 1rem; + position: relative; + text-align: center; +} +@media all and (min-width: 37.5em) { + .pec-overlay { + font-size: 16px; + line-height: var(--line-height); + padding: 1rem 2rem; + } } - -@media all and (min-width:37.5em) { - .pec-overlay { - font-size: 16px; - line-height: var(--line-height); - padding: 1rem 2rem - } -} - .pec-overlay.is-active { - display: flex + display: flex; } - .pec-overlay-inner p { - margin: 0 0 1rem + margin: 0 0 1rem; } - .is-img-loading { - overflow: hidden; - position: relative + overflow: hidden; + position: relative; } - .is-img-loading::after, .is-img-loading::before { - content: ""; - display: block; - position: absolute; - height: 100%; - width: 2px; - top: -100%; - left: 20%; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(75%, rgba(var(--color-rgb), .15)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgba(var(--color-rgb), .15) 75%, rgba(0, 0, 0, 0) 100%); - -webkit-animation: preloader 2s cubic-bezier(.4, .26, 0, .97) 0s infinite; - animation: preloader 2s cubic-bezier(.4, .26, 0, .97) 0s infinite + content: ""; + display: block; + position: absolute; + height: 100%; + width: 2px; + top: -100%; + left: 20%; + background: linear-gradient(to bottom, oklch(from var(--black) l c h / 0) 0, oklch(from var(--primary-base) l c h / 0.15) 75%, oklch(from var(--black) l c h / 0) 100%); + animation: preloader 2s cubic-bezier(0.4, 0.26, 0, 0.97) 0s infinite; } - .is-img-loading::before { - -webkit-animation-delay: .2s; - animation-delay: .2s; - left: 80% -} - -@-webkit-keyframes preloader { - 0% { - top: -100% - } - - 100% { - top: 100% - } + animation-delay: 0.2s; + left: 80%; } - @keyframes preloader { - 0% { - top: -100% - } - - 100% { - top: 100% - } -} - -@media all and (min-width:56.25em) { - - .lines::after, - .lines::before { - content: ""; - display: block; - position: absolute; - height: 50vh; - width: 2px; - top: -50%; - left: 20vw; - background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(75%, rgba(var(--color-rgb), .15)), color-stop(0, rgba(0, 0, 0, 0))); - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgba(var(--color-rgb), .15) 75%, rgba(0, 0, 0, 0) 0); - -webkit-animation: run var(--animated-lines-time) cubic-bezier(.4, .26, 0, .97) 0s infinite forwards; - animation: run var(--animated-lines-time) cubic-bezier(.4, .26, 0, .97) 0s infinite forwards; - z-index: -1 - } -} - -.lines::before { - -webkit-animation-delay: 2s; - animation-delay: 2s; - left: 40vw -} - -@-webkit-keyframes run { - 0% { - top: -50% - } - - 100% { - top: 100% - } -} - -@keyframes run { - 0% { - top: -50% - } - - 100% { - top: 100% - } -} - -.lines--right::after { - -webkit-animation-delay: 4s; - animation-delay: 4s; - left: 60vw -} - -.lines--right::before { - -webkit-animation-delay: 6s; - animation-delay: 6s; - left: 80vw + 0% { + top: -100%; + } + 100% { + top: 100%; + } } - .facebook:hover svg { - fill: #0866FF + fill: #0866FF; } - .twitter:hover svg { - fill: #000000 + fill: var(--black); } - .mix:hover svg { - fill: #fd8235 + fill: #fd8235; } - .instagram:hover svg { - fill: #000000 + fill: var(--black); } - .vimeo:hover svg { - fill: #1ab7ea + fill: #1ab7ea; } - .pinterest:hover svg { - fill: #bd081c + fill: #bd081c; } - .youtube:hover svg { - fill: #cd201f + fill: #cd201f; } - .linkedin:hover svg { - fill: #007bb6 + fill: #007bb6; } - .buffer:hover svg { - fill: #333333 + fill: var(--neutral-8); } - .whatsapp:hover svg { - fill: #25D366 + fill: #25D366; } - .pocket:hover svg { - fill: #ED4255 + fill: #ED4255; } - .pagination { - clear: both; - display: flex; - flex-wrap: wrap; - font-size: .8888888889rem; - justify-content: center; - margin-top: calc(2rem + 2vmin) + clear: both; + display: flex; + flex-wrap: wrap; + font-size: 0.88888889rem; + justify-content: center; + margin-top: calc(2rem + 2vmin); } - .pagination a { - border: 2px solid transparent; - border-radius: var(--border-radius); - display: inline-block; - color: var(--gray-1); - margin: 0 .25rem; - padding: .5rem 1rem; - text-align: center + border: 2px solid transparent; + border-radius: var(--border-radius); + display: inline-block; + color: var(--neutral-6); + margin: 0 0.25rem; + padding: 0.5rem 1rem; + text-align: center; } - .pagination a:hover { - background-color: var(--lighter); - color: var(--gray-1) + background-color: var(--neutral-1); + color: var(--neutral-6); } - .pagination-active { - background-color: var(--lighter); - color: var(--color) !important; - font-variation-settings: "wght" var(--font-weight-bold); - pointer-events: none + background-color: var(--neutral-1); + color: var(--link-color) !important; + font-variation-settings: "wght" var(--font-weight-bold); + pointer-events: none; } - .pagination-inactive { - border: 2px solid transparent; - color: var(--gray-2) !important; - margin: 0 .25rem; - pointer-events: none; - padding: .5rem 1rem; - opacity: .6 + border: 2px solid transparent; + color: var(--neutral-4) !important; + margin: 0 0.25rem; + pointer-events: none; + padding: 0.5rem 1rem; + opacity: 0.6; } - .pagination-first, .pagination-last { - display: none + display: none; } - -@media all and (min-width:56.25em) { - - .pagination-first, - .pagination-last { - display: block - } +@media all and (min-width: 56.25em) { + .pagination-first, + .pagination-last { + display: block; + } } - .view-more { - display: flex; - margin: .5rem auto 0 + display: flex; + margin: 0.5rem auto 0; } - .newsletter { - background-color: var(--lighter); - margin: var(--magic-number) 0; - padding: calc(var(--magic-number)/ 1.5) var(--page-margin) + background-color: var(--neutral-1); + margin: var(--magic-number) 0; + padding: calc(var(--magic-number)/1.5) var(--page-margin); } - -.newsletter__title { - margin-top: 0 +.newsletter .newsletter__title { + margin-top: 0; } - -.newsletter__desc { - color: var(--gray-1); - font-size: .8888888889rem +.newsletter .newsletter__desc { + color: var(--neutral-6); + font-size: 0.88888889rem; } - -@media all and (min-width:56.25em) { - .newsletter__desc { - max-width: 85% - } +@media all and (min-width: 56.25em) { + .newsletter .newsletter__desc { + max-width: 85%; + } } - .newsletter form { - display: flex; - flex-wrap: wrap; - flex-direction: column; - gap: 1rem; - margin-top: calc(var(--baseline) * 5) + display: flex; + flex-wrap: wrap; + flex-direction: column; + gap: 1rem; + margin-top: calc(var(--baseline) * 5); } - -@media all and (min-width:37.5em) { - .newsletter form { - flex-direction: row - } +@media all and (min-width: 37.5em) { + .newsletter form { + flex-direction: row; + } } - .newsletter input[type=email], .newsletter input[type=text] { - flex: 1 + flex: 1; } - -@media all and (max-width:37.4375em) { - .newsletter input[type=submit] { - width: 100% - } +@media all and (max-width: 37.4375em) { + .newsletter input[type=submit] { + width: 100%; + } } - .footer { - border-top: 1px solid var(--light); - color: var(--gray-1); - font-size: .7901234568rem; - margin-top: var(--magic-number); - margin-bottom: calc(var(--magic-number)/ 2); - padding-top: calc(var(--magic-number)/ 3) + color: var(--neutral-6); + margin-top: var(--magic-number); +} +@media all and (max-width: 56.1875em) { + .footer { + text-align: center; + } + .footer__links { + justify-content: center; + } +} +@media all and (min-width: 56.25em) { + .footer { + display: flex; + justify-content: space-between; + align-items: center; + padding: 2rem calc(clamp(8rem, 5vw, 12rem) - var(--entry-width)); + max-width: var(--entry-width); + margin: calc(var(--magic-number) * 2) auto auto auto; + } + .footer__right { + flex-grow: 1; + max-width: 35ch; + } + .home-template .footer { + margin: -2rem auto auto auto !important; + } } - -@media all and (max-width:56.1875em) { - .footer { - padding-top: calc(var(--magic-number)/ 2); - text-align: center - } -} - -@media all and (min-width:56.25em) { - .footer { - display: flex; - justify-content: space-between - } -} - .footer h3 { - margin: 0 0 calc(var(--baseline) * 5) -} - -.footer__copy { - font-size: .7901234568rem -} - -.footer__nav { - font-size: .8888888889rem; - margin: 0 0 calc(var(--baseline) * 2) -} - -@media all and (min-width:56.25em) { - .footer__nav { - font-size: .7901234568rem; - margin: 0 - } -} - -.footer__nav li { - display: inline-block; - margin: 0 .4rem 0 0; - padding: 0; - position: relative -} - -.footer__nav li+li::before { - content: "•"; - padding-right: .4rem -} - -@media all and (max-width:56.1875em) { - .footer__left+.footer__right { - margin-top: calc(var(--baseline) * 4) - } -} - -@media all and (min-width:56.25em) { - .footer__right { - flex: 0 0 auto; - margin-left: auto - } -} - -.footer__social a { - display: inline-block; - padding: 0 .75rem; - vertical-align: middle -} - -@media all and (min-width:56.25em) { - .footer__social a { - padding: 0 0 0 1.5rem - } -} - -.footer__social a>svg { - display: inline-block; - fill: var(--gray-1); - height: .875rem; - pointer-events: none; - -webkit-transition: all .12s linear 0s; - transition: all .12s linear 0s; - width: .875rem -} - -.footer__social a:hover>svg { - opacity: 1 -} - -.footer__bttop { - background: var(--color); - border-color: var(--white) !important; - bottom: calc(var(--baseline) * 5); - border-radius: 50%; - line-height: 1; - opacity: 0; - padding: .45rem; - position: fixed; - right: 2rem; - text-align: center; - width: auto !important; - visibility: hidden; - z-index: 999; - -webkit-transform: translateY(1rem); - transform: translateY(1rem) -} - -@media all and (min-width:56.25em) { - .footer__bttop { - bottom: calc(var(--baseline) * 10) - } -} - -.footer__bttop:hover { - opacity: 1 -} - -.footer__bttop>svg { - fill: var(--white); - height: 23px; - margin: 0; - width: 23px -} - -.footer__bttop.is-visible { - opacity: 1; - visibility: visible; - -webkit-transform: translateY(0); - transform: translateY(0) + margin: 0 0 calc(var(--baseline) * 5); +} +.footer .footer__copy { + font-size: 0.79012346rem; +} +.footer .footer__left { + max-width: 20ch; + font-size: xx-large; + font-variation-settings: "wght" 800; + line-height: 2.3rem; + display: inline-flex; + flex-direction: column; +} +.footer .footer__links { + display: inline-flex; + flex-direction: row; + gap: 1rem; + opacity: 0.3; +} +.footer .footer__nav { + display: flex; + flex-wrap: wrap; + font-size: 0.88888889rem; + margin: 0 0 calc(var(--baseline) * 2); +} +@media all and (min-width: 56.25em) { + .footer .footer__nav { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); + font-size: 0.79012346rem; + margin: 0; + } +} +.footer .footer__nav li { + display: inline-block; + padding: 0; + position: relative; + flex: 1; +} +@media all and (min-width: 56.25em) { + .footer .footer__nav li { + margin: 0 0.4rem 0 0; + } +} +.footer .footer__nav li:last-child { + margin-right: unset; +} +.footer .footer__nav li a { + display: block; + padding: 0.5rem 1rem; + border-radius: 4px; + color: var(--text-color); + font-variation-settings: "wght" 600; +} +.footer .footer__nav li a:hover { + background-color: rgba(255, 255, 255, 0.03); +} +@media all and (max-width: 56.1875em) { + .footer .footer__left + .footer__right { + margin: calc(var(--baseline) * 8) 0; + } +} +@media all and (min-width: 56.25em) { + .footer .footer__right { + margin-left: auto; + } +} +.footer .footer__social a { + display: inline-block; + padding: 0 0.75rem; + vertical-align: middle; +} +@media all and (min-width: 56.25em) { + .footer .footer__social a { + padding: 0 0 0 1.5rem; + } +} +.footer .footer__social a > svg { + display: inline-block; + fill: var(--neutral-6); + height: 0.875rem; + pointer-events: none; + transition: all 0.12s linear 0s; + width: 0.875rem; +} +.footer .footer__social a:hover > svg { + opacity: 1; +} +.footer .footer__bttop { + background: oklch(from var(--primary-3) l c h / 0.6); + border: unset !important; + /* border: 2px solid var(--white) !important; */ + bottom: calc(var(--baseline) * 5); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + width: 44px !important; + height: 44px; + padding: 0.5rem; + line-height: 1; + opacity: 0; + position: fixed; + right: 2rem; + text-align: center; + visibility: hidden; + z-index: 999; + transform: translateY(1rem); +} +.footer .footer__bttop:hover { + opacity: 1; + transform: translateY(-3px); +} +.footer .footer__bttop > svg { + fill: var(--white); + height: 24px; + margin: 0; + width: 24px; +} +.footer .footer__bttop.is-visible { + opacity: 1; + visibility: visible; + transform: translateY(0); } - .gallery { - margin: calc(var(--baseline) * 9) calc(var(--gallery-gap) * -1) calc(var(--baseline) * 2) -} - -@media all and (min-width:20em) { - .gallery { - display: flex; - flex-wrap: wrap - } + margin: calc(var(--baseline) * 9) calc(var(--gallery-gap) * -1) calc(var(--baseline) * 2); +} +@media all and (min-width: 20em) { + .gallery { + display: flex; + flex-wrap: wrap; + } +} +@media all and (min-width: 20em) { + .gallery[data-columns="1"] .gallery__item { + flex: 1 0 100%; + } +} +@media all and (min-width: 30em) { + .gallery[data-columns="2"] .gallery__item { + flex: 1 0 50%; + } +} +@media all and (min-width: 37.5em) { + .gallery[data-columns="3"] .gallery__item { + flex: 1 0 33.333%; + } +} +@media all and (min-width: 56.25em) { + .gallery[data-columns="4"] .gallery__item { + flex: 0 1 25%; + } +} +@media all and (min-width: 56.25em) { + .gallery[data-columns="5"] .gallery__item { + flex: 0 1 20%; + } +} +@media all and (min-width: 56.25em) { + .gallery[data-columns="6"] .gallery__item { + flex: 0 1 16.666%; + } +} +@media all and (min-width: 56.25em) { + .gallery[data-columns="7"] .gallery__item { + flex: 1 0 14.285%; + } +} +@media all and (min-width: 56.25em) { + .gallery[data-columns="8"] .gallery__item { + flex: 1 0 12.5%; + } +} +@media all and (min-width: 56.25em) { + .gallery-wrapper--wide { + display: flex; + justify-content: center; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + } + .gallery-wrapper--wide .gallery { + max-width: calc(var(--page-width) + var(--gallery-gap) * 2); + width: calc(100% + var(--gallery-gap) * 2); + } } - -@media all and (min-width:56.25em) { - .gallery-wrapper--wide { - display: flex; - justify-content: center; - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin) - } - - .gallery-wrapper--wide .gallery { - max-width: calc(var(--page-width) + var(--gallery-gap) * 2); - width: calc(100% + var(--gallery-gap) * 2) - } -} - .gallery-wrapper--full { - margin-left: calc(-50vw + 50%); - margin-right: calc(-50vw + 50%); - padding: 0 var(--page-margin) -} - -@media all and (min-width:20em) { - .gallery[data-columns="1"] .gallery__item { - flex: 1 0 100% - } -} - -@media all and (min-width:30em) { - .gallery[data-columns="2"] .gallery__item { - flex: 1 0 50% - } + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); } - -@media all and (min-width:37.5em) { - .gallery[data-columns="3"] .gallery__item { - flex: 1 0 33.333% - } -} - -@media all and (min-width:56.25em) { - .gallery[data-columns="4"] .gallery__item { - flex: 0 1 25% - } -} - -@media all and (min-width:56.25em) { - .gallery[data-columns="5"] .gallery__item { - flex: 0 1 20% - } -} - -@media all and (min-width:56.25em) { - .gallery[data-columns="6"] .gallery__item { - flex: 0 1 16.666% - } -} - -@media all and (min-width:56.25em) { - .gallery[data-columns="7"] .gallery__item { - flex: 1 0 14.285% - } -} - -@media all and (min-width:56.25em) { - .gallery[data-columns="8"] .gallery__item { - flex: 1 0 12.5% - } -} - .gallery__item { - margin: 0; - padding: var(--gallery-gap); - position: relative + margin: 0; + padding: var(--gallery-gap); + position: relative; } - -@media all and (min-width:20em) { - .gallery__item { - flex: 1 0 50% - } +@media all and (min-width: 20em) { + .gallery__item { + flex: 1 0 50%; + } } - -@media all and (min-width:30em) { - .gallery__item { - flex: 1 0 33.333% - } +@media all and (min-width: 30em) { + .gallery__item { + flex: 1 0 33.333%; + } } - -@media all and (min-width:37.5em) { - .gallery__item { - flex: 1 0 25% - } +@media all and (min-width: 37.5em) { + .gallery__item { + flex: 1 0 25%; + } } - .gallery__item a { - background-color: var(--lighter); - display: block; - height: 100%; - width: 100% + background-color: var(--neutral-1); + display: block; + height: 100%; + width: 100%; } - .gallery__item a::after { - background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, .4)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(0, 0, 0, .4) 0, rgba(0, 0, 0, 0) 100%); - bottom: var(--gallery-gap); - content: ""; - display: block; - opacity: 0; - left: var(--gallery-gap); - height: calc(100% - var(--gallery-gap) * 2); - position: absolute; - right: var(--gallery-gap); - top: var(--gallery-gap); - -webkit-transition: all .24s ease-out; - transition: all .24s ease-out; - width: calc(100% - var(--gallery-gap) * 2) + background: linear-gradient(to top, oklch(from var(--black) l c h / 0.4) 0, oklch(from var(--black) l c h / 0) 100%); + bottom: var(--gallery-gap); + content: ""; + display: block; + opacity: 0; + left: var(--gallery-gap); + height: calc(100% - var(--gallery-gap) * 2); + position: absolute; + right: var(--gallery-gap); + top: var(--gallery-gap); + transition: all 0.24s ease-out; + width: calc(100% - var(--gallery-gap) * 2); } - .gallery__item a:hover::after { - opacity: 1 + opacity: 1; } - .gallery__item img { - display: block; - height: 100%; - -o-object-fit: cover; - object-fit: cover; - width: 100% + display: block; + height: 100%; + object-fit: cover; + width: 100%; } - .gallery__item figcaption { - bottom: 1.2rem; - color: #fff; - left: 50%; - opacity: 0; - position: absolute; - text-align: center; - -webkit-transform: translate(-50%, 1.2rem); - transform: translate(-50%, 1.2rem); - -webkit-transition: all .24s ease-out; - transition: all .24s ease-out + bottom: 1.2rem; + color: var(--white); + left: 50%; + opacity: 0; + position: absolute; + text-align: center; + transform: translate(-50%, 1.2rem); + transition: all 0.24s ease-out; } - .gallery__item:hover figcaption { - opacity: 1; - -webkit-transform: translate(-50%, 0); - transform: translate(-50%, 0) -} - -.pswp--dark .pswp__bg { - background: var(--black) -} - -.pswp--dark .pswp__button, -.pswp--dark .pswp__button--arrow--left:before, -.pswp--dark .pswp__button--arrow--right:before { - background-image: url(../svg/gallery-icons-light.svg) -} - -.pswp--light .pswp__bg { - background: var(--white) -} - -.pswp--light .pswp__counter { - color: var(--dark) -} - -.pswp--light .pswp__caption__center { - color: var(--text-color) + opacity: 1; + transform: translate(-50%, 0); } - -.pswp--light .pswp__button, -.pswp--light .pswp__button--arrow--left:before, -.pswp--light .pswp__button--arrow--right:before { - background-image: url(../svg/gallery-icons-dark.svg) -} - .pswp .pswp__button { - -webkit-box-shadow: none; - box-shadow: none + box-shadow: none; } - .pswp--zoom-allowed .pswp__img { - cursor: default !important + cursor: default !important; } - img[loading] { - opacity: 0 + opacity: 1; } - -img.is-loaded { - opacity: 1; - transition: opacity 1s cubic-bezier(.215, .61, .355, 1) +img[loading].is-loading { + opacity: 0; } - -.content__title { - display: none +img.is-loaded { + opacity: 1; + transition: opacity 1s cubic-bezier(0.215, 0.61, 0.355, 1); } - .btn { - font-family: Raleway, sans-serif; - font-weight: 400; - font-style: normal + margin: 2px; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; +} +.btn-light { + background: var(--primary-2) !important; + color: var(--text-color) !important; } - .body { - font-weight: 400; - font-style: normal + font-weight: 400; + font-style: normal; } - .mp-header { - font-size: 60px; - text-align: center + font-size: clamp(2.5rem, 8vw, 60px); + text-align: center; } - .content__inner.content__header { - display: none + display: none; } - .logo-carousel { - mask-image: linear-gradient(to right, hsla(0, 0%, 0%, 0), hsl(0, 0%, 0%) 20%, hsl(0, 0%, 0%) 80%, hsla(0, 0%, 0%, 0)) + mask-image: linear-gradient(to right, oklch(from var(--black) l c h / 0), var(--black) 20%, var(--black) 80%, oklch(from var(--black) l c h / 0)); + position: relative; + --logo-slide-width: 150px; } - .logo-track { - display: flex; - animation: scroll 23s linear infinite; - width: calc(230px * 10) + display: flex; + animation: scroll 23s linear infinite; + width: calc(var(--logo-slide-width) * 12); } - .logo-track:hover { - animation-play-state: paused + animation-play-state: paused; +} +@keyframes scroll { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(calc(var(--logo-slide-width) * -12)); + } } - .logo-slide { - width: 150px; - padding: 0 30px; - flex-shrink: 0; - display: flex; - justify-content: center; - align-items: center + width: var(--logo-slide-width); + padding: 0 30px; + flex-shrink: 0; + display: flex; + justify-content: center; + align-items: center; } - .logo-slide img { - width: 100%; - height: auto; - opacity: .8; - transition: opacity .3s ease + width: 100%; + height: auto; + opacity: 0.8; + transition: opacity 0.3s ease; } - .logo-slide a:hover img { - opacity: 1 -} - -@keyframes scroll { - 0% { - transform: translateX(0) - } - - 100% { - transform: translateX(calc(-230px * 5)) - } -} - -.logo-carousel::after, -.logo-carousel::before { - content: ""; - position: absolute; - top: 0; - width: 150px; - height: 100%; - z-index: 2; - pointer-events: none -} - -.logo-carousel::before { - left: 0; - background: linear-gradient(to right, #d7dae3 0, rgba(215, 218, 227, .75) 30%, rgba(215, 218, 227, .5) 50%, rgba(215, 218, 227, .25) 70%, rgba(215, 218, 227, 0) 100%) -} - -.logo-carousel::after { - right: 0; - background: linear-gradient(to left, #f2f3f8 0, rgba(242, 243, 248, .75) 30%, rgba(242, 243, 248, .5) 50%, rgba(242, 243, 248, .25) 70%, rgba(242, 243, 248, 0) 100%) + opacity: 1; +} +.flex-container { + display: flex; + flex-wrap: wrap; + gap: 60px; + width: 100%; +} +.flex-container > div { + flex: 1; + font-size: medium; +} +.flex-container.plain-simple-divs { + margin-top: calc(var(--baseline) * 4); +} +.flex-container.plain-simple-divs > div { + background: oklch(from var(--neutral-2) l c h / 60%); + padding: 2rem; + border-radius: 20px; + min-width: 35%; +} +.flex-container.plain-simple-divs > div > h5 { + margin-top: 0; +} +@media screen and (max-width: 800px) { + .flex-container.plain-simple-divs > div { + min-width: 100%; + } +} +.subtitle-below-heading { + display: flex; + flex-wrap: wrap; + gap: 5px 15px; + margin-top: unset; + font-size: medium; + opacity: 0.75; +} +.material-symbols { + height: 20px; +} +.text-highlight { + background: var(--primary-5); +} +.landing-content h1 { + margin-top: unset; +} +.secondary-container { + border: 1px solid rgba(255, 255, 255, 0.3); + background: linear-gradient(to bottom, oklch(from var(--primary-1) l c h / 60%), var(--primary-1)); + position: relative; + overflow: hidden; + padding: 2rem; +} +.secondary-container::before { + content: ""; + position: absolute; + inset: 0; + background: url(../../assets/backgrounds/day-sky.png); + background-size: cover; + background-position: center; + border-radius: inherit; + filter: blur(2px); + transform: scale(1.1); + z-index: -1; +} +.secondary-container > h2 { + margin-top: 0; + grid-area: title; +} +.secondary-container > p { + grid-area: desc; +} +.secondary-container > p:last-child { + grid-area: buttons; +} +.landing-project-showcase { + display: flex; + justify-content: space-between; + gap: 2rem; + flex-wrap: wrap; + margin-top: calc(var(--baseline) * 35); + margin-bottom: calc(var(--baseline) * 35); + align-items: center; +} +@media screen and (min-width: 800px) { + .landing-project-showcase > div { + flex: 1; + } +} +@media screen and (max-width: 800px) { + .landing-project-showcase { + flex-direction: column; + } +} +.landing-project-showcase h1 { + margin-top: unset; +} +.landing-project-showcase > div { + display: inline-flex; + flex-direction: column; + align-items: start; + gap: 0.5rem; +} +.landing-project-showcase > div > p { + color: oklch(from var(--text-color) l c h / 0.6); + margin-top: unset; +} +.landing-project-showcase:nth-child(1 of .landing-project-showcase) { + margin-top: calc(var(--baseline) * 50) !important; +} +.landing-project-showcase:last-of-type { + margin-bottom: calc(var(--baseline) * 70) !important; +} +@keyframes appear { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +.project-container { + background: oklch(from var(--neutral-2) l c h / 60%); + backdrop-filter: blur(10px); + padding: 2rem; + border-radius: 20px; + min-width: 35%; + font-size: medium; + margin: 2rem 1rem; + display: grid; + gap: calc(var(--baseline) * 6); + grid-template-areas: "info image" "desc image"; +} +.project-container h1, +.project-container h2, +.project-container h3, +.project-container h4, +.project-container h5 { + margin-top: 0; +} +.project-container .post__image--right { + margin-top: unset; +} +@media screen and (max-width: 800px) { + .project-container { + margin-left: unset; + margin-right: unset; + padding: 0 0 2rem 0; + grid-template-areas: "image" "info" "desc"; + background: transparent; + backdrop-filter: unset; + border: 1px solid rgba(255, 255, 255, 0.03); + } + .project-container-info, + .project-container-desc { + padding: 0 1rem; + z-index: 1; + } + .project-container-image { + width: 100% !important; + height: auto !important; + margin-bottom: -25%; + mask-image: linear-gradient(to bottom, black, rgba(0, 0, 0, 0.75) 55%, transparent); + pointer-events: none; + } +} +.project-container-image { + grid-area: image; +} +.project-container-info { + grid-area: info; +} +.project-container-desc { + grid-area: desc; +} +.project-container-desc > p:first-child { + margin-top: unset; +} +#floating { + position: absolute; + background: oklch(from var(--neutral-2) l c h / 60%); + padding: 0.5rem; + box-sizing: border-box; + font-size: 0.8rem; + margin: 10px; + backdrop-filter: blur(10px); + pointer-events: none; + opacity: 0; + transform: translateY(-30px); + transition: opacity 0.2s ease, transform 0.2s ease; +} +#floating.visible { + opacity: 1; + transform: translateY(0); +} +.aspect-ratio-169 { + aspect-ratio: 16 / 9; +} +.size-cover { + object-fit: cover; + background-size: cover; } diff --git a/assets/css/style.less b/assets/css/style.less new file mode 100644 index 00000000..dbb6e4c8 --- /dev/null +++ b/assets/css/style.less @@ -0,0 +1,2966 @@ +@import "_mixins.less"; +@import "syntax-highlighting.less"; + +@font-face { + font-family: "Bricolage Grotesque"; + src: url('../fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz\,wdth\,wght.ttf') format('truetype'); + font-weight: 200 800; + font-display: swap; + font-style: normal; +} + +@font-face { + font-family: "Cascadia Code"; + src: url('../fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: normal; +} + +@font-face { + font-family: "Cascadia Code"; + src: url('../fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: italic; +} + +@font-face { + font-family: "Instrument Sans"; + src: url('../fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth\,wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: normal; +} + +@font-face { + font-family: "Instrument Sans"; + src: url('../fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth\,wght.ttf') format('truetype'); + font-weight: 200 700; + font-display: swap; + font-style: italic; +} + +@view-transition { + navigation: auto; +} + +/* palette */ +:root { + --social-icon-filter: invert(1) brightness(0.8); + --primary-base: #669cff; + --primary-1: #151C29; + --primary-2: #161F2F; + --primary-3: #162B52; + --primary-4: #15336C; + --primary-5: #1A3D7E; + --primary-6: #030303; + --primary-7: #3768C5; + --primary-8: #84B5FF; + --primary-9: #CFE2FF; + + --secondary-base: #94651e; + --secondary-1: #1E170F; + --secondary-2: #311F06; + --secondary-3: #432500; + --secondary-4: #512E00; + --secondary-5: #5F3C00; + --secondary-6: #94651E; + --secondary-7: #865808; + --secondary-8: #FECA87; + --secondary-9: #FFE2B1; + + --tertiary-base: #1a7e2f; + --tertiary-1: #0B140B; + --tertiary-2: #162B18; + --tertiary-3: #123D18; + --tertiary-4: #154B1E; + --tertiary-5: #195B24; + --tertiary-6: #1A7E2F; + --tertiary-7: #1D6D2C; + --tertiary-8: #74D07D; + --tertiary-9: #AEF7B3; + + --neutral-base: #1C1C1A; + --neutral-1: #232321; + --neutral-2: #2C2C28; + --neutral-3: #32322F; + --neutral-4: #383835; + --neutral-5: #40403D; + --neutral-6: #5a5a57; + --neutral-7: #50504d; + --neutral-8: #B4B4B0; + --neutral-9: #EDEDE9; + + --white: #FFFFFF; + --black: #000000; + + --green: #00C899; + --blue: #3DBFE2; + --red: #EB7F9B; + --yellow: #FFC76B; +} + +:root { + --bg: url('../../assets/backgrounds/futuristic-city.png'); + --page-margin: 8vmin; + --page-width: 1440px; + --entry-width: 95ch; + --navbar-height: 4rem; + --border-radius: 3px; + --cards-gap: 1rem; + --featured-image-height: 40vmin; + --gallery-gap: 0.5rem; + --magic-number: 4rem; + --baseline: .25rem; + --font-body: 'Instrument Sans', sans-serif; + --font-heading: 'Bricolage Grotesque', serif; + --font-monospace: 'Cascadia Code', monospace; + --font-logo: var(--font-body); + --font-menu: var(--font-body); + --font-size: clamp(1rem, 1.15rem, 1.15rem); + --font-weight-normal: 400; + --font-weight-bold: 700; + --line-height: 1.6; + --letter-spacing: 0em; + --headings-weight: 700; + --headings-transform: none; + --headings-style: normal; + --headings-letter-spacing: -0.03em; + --headings-line-height: 1.2; + --card-image-height: calc(12rem + 13vmin); + --page-bg: var(--neutral-base); + --text-color: var(--neutral-9); + --link-color: var(--primary-base); + --monospace: var(--font-monospace); + --box-shadow: 0px 4.4px 4.5px -100px oklch(from #000 l c h / 0.174), 0px 12.3px 12.5px -100px oklch(from #000 l c h / 0.25), 0px 29.5px 30.1px -100px oklch(from #000 l c h / 0.326), 0px 98px 100px -100px oklch(from #000 l c h / 0.5); + --box-shadow-hover: 0px 5.4px 4.5px -100px oklch(from #000 l c h / 0.174), 0px 15px 12.5px -100px oklch(from #000 l c h / 0.25), 0px 36.2px 30.1px -100px oklch(from #000 l c h / 0.326), 0px 120px 100px -100px oklch(from #000 l c h / 0.5); +} + +@media screen and (max-width: 800px) { + :root { + --navbar-height: 40px; + } +} + +@media all and (min-width:56.25em) { + :root { + --magic-number: 6rem + } +} + +@media all and (min-width:80.0625em) and (min-height:50em) { + :root { + --cards-gap: 1.8rem; + --magic-number: 8rem + } +} + +*, +:after, +:before { + box-sizing: border-box; + margin: 0; + padding: 0 +} + +article, +aside, +footer, +header, +hgroup, +main, +nav, + +section { + display: block +} + +li { + list-style: none +} + +.li { + fill: none; + stroke-linecap: round; + stroke-linejoin: round; + vertical-align: middle; +} + +img { + height: auto; + max-width: 100%; + vertical-align: top +} + +button, +input, +select, +textarea { + font: inherit +} + +address { + font-style: normal +} + +::-moz-selection { + background: var(--link-color); + color: var(--white) +} + +::selection { + background: var(--link-color); + color: var(--white) +} + +::placeholder { + color: var(--text-color) +} + +html { + font-size: var(--font-size); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; + + &.no-scroll { + overflow: hidden + } +} + +body { + background: var(--page-bg); + color: var(--text-color); + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + letter-spacing: var(--letter-spacing); + line-height: var(--line-height); + padding: 0; + overscroll-behavior: none; + + &::before { + content: ''; + position: absolute; + inset: 0; + background: var(--bg); + background-size: cover; + background-position: center; + opacity: 1; + z-index: -2; + transition: 1s opacity; + + @starting-style { + opacity: 0; + } + } + + &.home-template::before, + &.bg-include::before { + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.4), transparent); + } + + &:not(.home-template):not(.bg-include)::before { + display: none; + } + + &.page-onboarding::before { + --bg: url('../../assets/promofiles/OnboardingMainThumbnail.png'); + } + + &.page-robloxapi::before { + --bg: url('../../assets/backgrounds/RobloxAPI_Mesh_Gradient.webp'); + } +} + +a { + color: var(--link-color); + text-decoration: none; + transition: all .12s linear; +} + +.img-invert { + filter: invert(1); +} + +.img-rounded { + border-radius: 20px; +} + +dl, +ol, +p, +pre, +ul { + margin-top: calc(var(--baseline) * 7) +} + +blockquote, +figure, +hr, +pre, +table { + margin-top: calc(var(--baseline) * 9); + margin-bottom: calc(var(--baseline) * 9) +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--text-color); + font-family: var(--font-heading); + font-variation-settings: "wght" var(--headings-weight); + font-style: var(--headings-style); + hyphens: manual; + letter-spacing: var(--headings-letter-spacing); + line-height: var(--headings-line-height); + margin-top: calc(var(--baseline) * 11); + text-transform: var(--headings-transform); + scroll-margin-top: 60px; +} + +.h1, +h1 { + font-size: clamp(1.8020324707rem, calc(1.8020324707rem + .7637520432 * (100vw - 20rem) / 80), 2.565784514rem); +} + +.h2, +h2 { + font-size: clamp(1.423828125rem, calc(1.423828125rem + .6034584045 * (100vw - 20rem) / 80), 2.0272865295rem); +} + +.h3, +h3 { + font-size: clamp(1.265625rem, calc(1.265625rem + .5364074707 * (100vw - 20rem) / 80), 1.8020324707rem); +} + +.h4, +h4 { + font-size: clamp(1.125rem, calc(1.125rem + .298828125 * (100vw - 20rem) / 80), 1.423828125rem); +} + +.h5, +h5 { + font-size: clamp(1rem, calc(1rem + .265625 * (100vw - 20rem) / 80), 1.265625rem); +} + +.h6, +h6 { + font-size: clamp(1rem, calc(1rem + .125 * (100vw - 20rem) / 80), 1.125rem); +} + +h1+*, +h2+*, +h3+*, +h4+*, +h5+*, +h6+* { + margin-top: calc(var(--baseline) * 4) +} + +b, +strong { + font-variation-settings: "wght" var(--font-weight-bold) +} + +blockquote { + box-sizing: content-box; + margin-left: auto; + margin-right: auto; + max-width: 80%; + padding: calc(var(--baseline) * 22) 0 calc(var(--baseline) * 12); + position: relative; + font-size: clamp(1.265625rem, calc(1.265625rem + .158203125 * (100vw - 20rem) / 80), 1.423828125rem); + + @media all and (min-width: 37.5em) { + max-width: 60% + } + + &::before { + color: var(--primary-base); + content: "“"; + font: var(--font-weight-normal) 720%/0.9 Georgia, Times, Times New Roman, serif; + left: -15%; + position: absolute; + top: calc(var(--baseline) * 11); + + @media all and (min-width: 37.5em) { + left: -20% + } + } + + &>:first-child { + margin-top: 0 + } +} + +ol, +ul { + margin-left: 3ch; + + &>li { + list-style: inherit; + padding: 0 0 calc(var(--baseline) * 2) 1ch + } + + ol, + ul { + margin-bottom: calc(var(--baseline) * 2); + margin-top: calc(var(--baseline) * 2) + } +} + +dl dt { + font-variation-settings: "wght" var(--font-weight-bold) +} + +code { + background-color: oklch(from var(--primary-base) l c h / .1); + border-radius: 3px; + color: var(--primary-8); + font-size: 1rem; + font-family: var(--monospace); + padding: .25rem .5rem +} + +pre { + background-color: var(--neutral-1); + border-radius: var(--border-radius); + font-size: 1rem; + max-height: var(--pre-height); + padding: calc(var(--baseline) * 6); + white-space: pre-wrap !important; + word-wrap: break-word; + width: 100%; + + & code { + background-color: transparent; + color: inherit !important; + font-size: inherit; + padding: 0 + } +} + +table { + border: 1px solid var(--neutral-2); + border-left: none; + border-collapse: collapse; + border-spacing: 0; + vertical-align: top; + text-align: left; + width: 100%; + overflow-wrap: normal; + + & th { + font-variation-settings: "wght" var(--font-weight-bold); + padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4) + } + + & td { + border-top: 1px solid var(--black); + border-left: 1px solid var(--black); + padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4) + } +} + +figcaption { + color: var(--neutral-6); + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + font-size: .7901234568rem; + margin-top: calc(var(--baseline) * 4); + text-align: center +} + +kbd { + background: var(--neutral-9); + border-radius: 3px; + color: var(--black); + font-family: var(--monospace); + font-size: .8888em; + padding: .125rem .375rem +} + +sub, +sup { + font-size: 65% +} + +small { + font-size: .7901234568rem +} + +.separator, +hr { + background: 0 0; + border: none; + height: auto; + line-height: 1; + max-width: none; + text-align: center; + + &::before { + content: "***"; + color: var(--neutral-9); + font-size: 1.265625rem; + font-variation-settings: "wght" var(--font-weight-bold); + letter-spacing: 1.265625rem; + padding-left: 1.265625rem + } +} + +.separator--dot, +hr.separator--dot { + &::before { + content: "*"; + color: var(--neutral-9); + font-size: 1.265625rem; + font-variation-settings: "wght" var(--font-weight-bold); + letter-spacing: 1.265625rem; + padding-left: 1.265625rem + } +} + +.separator--long-line { + position: relative; + + &::before { + content: ""; + height: 1.265625rem + } + + &::after { + border-top: 1px solid var(--neutral-2); + content: ""; + height: 1px; + position: absolute; + width: 100%; + top: 50%; + left: 0 + } +} + +.btn, +[type=button], +[type=submit], +button { + .button-mixin(260); +} + +.btn-external { + .button-mixin(142.5); +} + +@media all and (max-width:19.9375em) { + + .btn+.btn, + .btn+[type=button], + .btn+[type=submit], + .btn+button, + [type=button]+.btn, + [type=button]+[type=button], + [type=button]+[type=submit], + [type=button]+button, + [type=submit]+.btn, + [type=submit]+[type=button], + [type=submit]+[type=submit], + [type=submit]+button, + button+.btn, + button+[type=button], + button+[type=submit], + button+button { + margin-top: calc(var(--baseline) * 2) + } +} + +[type=button], +[type=submit], +button { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none +} + +::placeholder { + color: var(--neutral-4); + opacity: 1 +} + +fieldset { + border: 1px solid var(--neutral-2); + border-radius: 4px; + margin: 0 0 calc(var(--baseline) * 6); + padding: 1.5rem; + + &>legend { + margin-left: -1rem; + padding: 0 1rem + } +} + +legend { + font-variation-settings: "wght" var(--headings-weight) +} + +label { + font-variation-settings: "wght" var(--headings-weight); + margin: 0 1rem calc(var(--baseline) * 3) 0 +} + +option { + font-variation-settings: "wght" var(--font-weight-normal) +} + +[type=email], +[type=number], +[type=search], +[type=tel], +[type=text], +[type=url], +select, +textarea { + background-color: var(--white); + border: 1px solid var(--neutral-2); + border-radius: var(--border-radius); + color: var(--text-color); + font-size: 1rem; + padding: .5rem .74rem; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + + @media all and (min-width:37.5em) { + width: auto + } + + &:focus { + border-color: var(--link-color) + } +} + +input[type=checkbox], +input[type=radio] { + color: var(--text-color); + opacity: 0; + position: absolute; + + &+label { + display: block; + font-variation-settings: "wght" var(--font-weight-normal); + position: relative; + margin-left: -1px; + cursor: pointer; + padding: 0 0 0 calc(var(--baseline) * 9); + + &::before { + background-color: var(--white); + border: 1px solid var(--neutral-2); + border-radius: 2px; + content: ""; + display: block; + height: calc(var(--baseline) * 5); + left: 0; + line-height: calc(var(--baseline) * 5); + margin-right: calc(var(--baseline) * 5); + position: absolute; + text-align: center; + top: var(--baseline); + width: calc(var(--baseline) * 5) + } + } + + &:checked+label::before { + background-image: none !important; + content: ""; + border-color: var(--link-color) + } + + &:checked+label::after { + content: ""; + display: block; + width: 6px; + height: 9px; + border: solid var(--link-color); + border-width: 0 2px 2px 0; + left: calc(var(--baseline) * 1.1); + position: absolute; + top: calc(var(--baseline) * 3); + transform: rotate(45deg) translate(0, -50%) + } + + &:focus+label::before, + &:focus-visible+label::before { + outline: 2px solid var(--link-color); + outline-offset: 2px; + } +} + +input[type=radio]+label::before { + border-radius: 50% +} + +[type=file] { + margin-bottom: calc(var(--baseline) * 6); + width: 100% +} + +select { + border-radius: var(--border-radius); + max-width: 100%; + width: auto; + position: relative; + + &:not([multiple]) { + background: url('data:image/svg+xml;utf8,') no-repeat 90% 50%; + background-size: 8px; + padding-right: calc(var(--baseline) * 12) + } + + &[multiple] { + border: 1px solid var(--neutral-2); + padding: calc(var(--baseline) * 6); + width: 100%; + + &:hover { + border-color: var(--neutral-2) + } + + &:focus { + border-color: var(--link-color) + } + + &:disabled { + background-color: var(--neutral-2); + cursor: not-allowed; + + &:hover { + border-color: var(--neutral-2) + } + } + } +} + +textarea { + display: block; + overflow: auto; + resize: vertical; + max-width: 100% +} + +.site-header { + align-items: center; + display: flex; + height: var(--navbar-height); + position: fixed; + top: 0px; + /* background: linear-gradient(to bottom, #1952a6, #123f83); + border-bottom: 2px solid #0a2246; */ + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + width: 100%; + z-index: 999; + + &::before, + &::after { + content: ''; + position: absolute; + inset: 0; + mask-image: linear-gradient(to bottom, black 75%, transparent); + z-index: -1; + } + + &::before { + background: transparent; + opacity: 0.1; + transition: .5s background, .5s opacity; + } + + &::after { + opacity: 0; + backdrop-filter: blur(0); + transition: .5s backdrop-filter, .5s opacity; + } + + &.scrolled { + &::before { + /* frosted glass texture found the website you'd least expect; thank you https://www.microsoft.com/en-us/edge/welcome ! */ + background: url('../../assets/backgrounds/frosted-texture.png'); + background-repeat: repeat; + background-size: 200px 200px; + opacity: .1; + z-index: -1; + } + + &::after { + opacity: 1; + backdrop-filter: blur(14px); + z-index: -2; + } + } +} + +.logo { + order: 1; + color: var(--neutral-9) !important; + font-family: var(--font-logo); + font-variation-settings: "wght" var(--font-weight-bold); + font-size: 1.423828125rem; + line-height: 1; + margin-right: auto; + white-space: nowrap; + height: 60%; + aspect-ratio: 1; + + @media all and (max-width:74.9375em) { + text-align: center + } + + &>img { + height: 100%; + object-fit: contain; + width: auto; + } + + &:hover, + &:focus-within { + &>img { + transform: rotate(5deg); + } + } +} + +.search { + margin-right: 1.5rem; + order: 2; + text-align: right; + z-index: 99; + + @media all and (min-width:56.25em) { + margin: 0 0 0 1.5rem; + order: 3 + } + + .search__btn { + border: none; + background: 0 0 !important; + box-shadow: none !important; + margin-bottom: 0; + padding-right: 0; + padding-left: 0; + width: auto; + + &:focus, + &:hover { + transform: translateY(0); + + &>svg { + fill: var(--link-color) + } + } + + &>svg { + display: inline-block; + fill: var(--neutral-6); + transition: all .24s ease; + vertical-align: middle + } + } + + .search__input { + background: 0 0; + border: none; + font-size: .8888888889rem; + padding: 0 1rem 0 0; + width: 100%; + + @media all and (min-width:37.5em) { + min-width: 18rem + } + + &:focus { + color: var(--neutral-9); + + &::placeholder { + color: var(--neutral-4) !important; + opacity: .66 + } + } + } + + .search__form { + align-items: center; + display: flex; + justify-content: space-between + } + + .search__button { + box-shadow: unset; + width: auto !important; + + &:focus, + &:hover { + transform: translateY(0) + } + } + + .search__overlay { + background: var(--neutral-1); + border-radius: var(--border-radius); + border: 2px solid var(--neutral-2); + left: 0; + opacity: 0; + padding: calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 1.5) calc(var(--baseline) * 4); + position: absolute; + right: 0; + top: 0; + transition: all .24s ease-out; + visibility: hidden; + z-index: 100; + + @media all and (min-width:56.25em) { + background: var(--neutral-1); + border: none; + left: auto; + top: var(--navbar-height); + transform: translateY(calc(var(--baseline) * -3)) + } + + &.expanded { + transform: translateY(0); + opacity: 1; + display: block; + visibility: visible + } + } +} + +.navbar { + order: 3; + position: relative; + height: 100%; + + @media all and (min-width:56.25em) { + order: 2 + } + + & .navbar__menu { + display: flex; + list-style: none; + margin: 0; + padding: 0; + + @media all and (max-width:56.1875em) { + display: none + } + + & li { + display: block; + font-size: 16px; + font-weight: bold; + font-family: var(--font-menu); + line-height: var(--line-height); + padding: 0; + position: relative; + white-space: nowrap; + + & a, + & span[aria-haspopup=true] { + color: #fff; + padding: 0px 10px; + transition: all .24s ease-out; + + &:hover, + &:focus-within { + text-decoration: underline; + } + } + + & span { + color: var(--neutral-9); + cursor: default; + display: block; + padding: 0 .5rem + } + + &.active { + opacity: 0.5; + } + + &.has-submenu { + position: relative; + + &:active, + &:focus, + &:focus-within, + &:hover { + &>.navbar__submenu { + left: 0; + opacity: 1; + transform: scale(1); + visibility: visible; + margin-top: 0; + + &.is-right-submenu { + left: auto; + right: 0; + transform-origin: right top + } + } + } + + & .has-submenu { + + &:active, + &:focus, + &:focus-within, + &:hover { + &>.navbar__submenu { + top: 0; + margin-top: 0 + } + } + } + } + } + + &>li { + line-height: var(--navbar-height); + + &:hover { + + /* &>a, + &>span[aria-haspopup=true] { + color: var(--link-color) + } */ + + &>[aria-haspopup=true] { + box-shadow: none + } + + &.has-submenu::after { + content: ""; + border-color: var(--link-color) + } + } + } + } + + & .navbar__submenu { + background: var(--neutral-1); + border-radius: var(--border-radius); + left: -9999px; + list-style-type: none; + margin: 0 0 .75rem; + padding: .75rem 1.5rem; + position: absolute; + text-align: left; + visibility: hidden; + white-space: nowrap; + z-index: 1; + opacity: 0; + transform: scale(.8); + transform-origin: 0 top; + transition: opacity .15s, transform .3s cubic-bezier(.275, 1.375, .8, 1); + will-change: transform; + + .navbar__submenu__submenu { + z-index: 2 + } + + & li { + line-height: 1.5; + font-variation-settings: "wght" var(--font-weight-normal); + padding: 0 .25rem; + text-transform: none; + + &:last-child { + border: none + } + + & a, + & span[aria-haspopup=true] { + padding: .5rem 0; + transition: all .24s ease + } + + & span { + padding: .5rem 1.25rem + } + } + } + + & .navbar__toggle { + background: transparent; + border: none; + box-shadow: none; + color: #fff; + cursor: pointer; + display: block; + font-family: var(--font-menu); + font-variation-settings: "wght" var(--font-weight-bold); + line-height: 1; + overflow: visible; + text-transform: none; + z-index: 2004; + height: 100%; + + @media all and (min-width:56.25em) { + display: none + } + + &:focus, + &:hover { + box-shadow: none; + transform: none; + background: var(--navbar-hover-bg); + } + } +} + +.navbar_mobile_sidebar { + background: oklch(from var(--page-bg) l c h / 80%); + backdrop-filter: blur(15px); + box-shadow: 0 0 5px oklch(from var(--black) l c h / .25); + height: 100vh; + left: 0; + max-width: 400px; + overflow: auto; + position: fixed; + top: 0; + transition: all .3s cubic-bezier(0, 0, .3, 1); + width: 80%; + z-index: 1001; + + &.is-hidden { + left: -400px; + visibility: hidden + } + + & .navbar__menu { + margin: 24px; + + & li { + font-family: var(--font-heading); + font-size: 16px; + list-style: none; + line-height: 1.3; + margin: 0; + padding: 0; + + & .is-separator, + & a { + color: var(--neutral-9); + display: block; + padding: 10px 20px 10px 0; + position: relative; + + &:active, + &:focus, + &:hover { + color: var(--link-color) + } + + &[aria-haspopup=true]::after { + border-right: 1px solid var(--link-color); + border-top: 1px solid var(--link-color); + content: ""; + height: 6px; + position: absolute; + right: 6%; + top: 47%; + transform: translate(0, -47%) rotate(135deg); + width: 6px + } + } + } + } + + & .navbar__submenu { + margin: 0 0 0 24px; + padding: 0; + visibility: hidden; + + &[aria-hidden=false] { + visibility: visible + } + } + + & .navbar__submenu_wrapper { + height: 0; + opacity: 0; + overflow: hidden; + transition: all .3s cubic-bezier(.275, 1.375, .8, 1); + + &.is-active { + height: auto; + opacity: 1 + } + } +} + +.navbar_mobile_sidebar__overlay { + .overlay-mixin(); + z-index: 1000; + opacity: 1; + pointer-events: auto; + + &.is-hidden { + opacity: 0; + pointer-events: none + } +} + +.container { + /* thank you stella sora wiki! https://stellasora.miraheze.org */ + background-size: 40px 40px; + background-image: linear-gradient(to right, #7070e00a 1px, transparent 1px), linear-gradient(to bottom, #7070e00a 1px, transparent 1px); + + box-sizing: content-box; + overflow-wrap: break-word; + + .home-template & { + overflow-x: hidden; + } + + &>* { + padding-left: var(--page-margin); + padding-right: var(--page-margin); + } +} + +.container--narrow { + max-width: var(--entry-width) +} + +.home-template .landing { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; + max-width: 75ch; + margin: auto; + position: relative; + + &-stats { + display: flex; + justify-content: space-evenly; + gap: 1rem; + margin-top: calc(var(--baseline) * 9); + width: 100%; + + @media screen and (max-width: 800px) { + flex-direction: column; + gap: .5rem; + justify-content: center; + } + } + + &-scroll-chevron-wrapper { + position: absolute; + bottom: 20px; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; + width: 50px; + transition: .5s all; + transition-delay: .1s; + + animation: auto linear hidechevronsoon both; + animation-timeline: scroll(root block); + animation-range: entry 5% cover 15%; + + .landing-scroll-chevron { + width: 100%; + aspect-ratio: 1; + animation: chevronloop 2s infinite forwards; + } + } + + .highlight { + background: transparent; + padding: unset; + } +} + +@keyframes hidechevronsoon { + from { + opacity: .2 + } + + to { + opacity: 0 + } +} + +@keyframes chevronloop { + 0% { + transform: translateY(-15px); + opacity: 0 + } + + 50% { + transform: translateY(0); + opacity: 0.5 + } + + 100% { + transform: translateY(15px); + opacity: 0 + } +} + +.home-template .landing-blockquote { + padding: unset; + margin-left: unset; + margin-right: unset; + max-width: unset; + text-align: center; + + strong { + color: var(--primary-7); + } + + &::before { + display: none; + } +} + +.home-template .landing-huge-quote { + margin-bottom: calc(var(--baseline) * 60); +} + +body:not(.home-template) .main { + margin-top: var(--magic-number); + + @media screen and (max-width: 800px) { + margin-top: var(--magic-number); + } + + @media screen and (min-width: 1119px) { + padding-left: 0 !important; + padding-right: 0 !important; + } +} + +.hero { + opacity: .75; + font-size: clamp(1rem, calc(1rem + .125 * (100vw - 20rem) / 80), 1.125rem); + padding-bottom: var(--magic-number); + max-width: var(--entry-width); + + & h1 { + margin-top: 0; + + & sup { + font-variation-settings: "wght" var(--font-weight-normal); + font-size: 1.125rem; + vertical-align: top + } + } + + & p { + margin-top: calc(var(--baseline) * 2) + } +} + +.error-template .hero { + color: white !important; +} + +.hero--centered { + margin-left: auto; + margin-right: auto; + text-align: center; + + & p { + margin: calc(var(--baseline) * 4) auto 0 + } +} + +.l-options { + align-items: flex-start; + display: flex; + gap: 2rem; + justify-content: space-between; + margin-bottom: calc(var(--baseline) * 7); + + @media all and (min-width:80.0625em) and (min-height:50em) { + margin-bottom: calc(var(--baseline) * 10) + } + + @media all and (max-width:37.4375em) { + &.nomobile { + display: none + } + } +} + +.filter { + margin: 0 -.5rem; + line-height: 1.4; + + .filter__item { + background: 0 0; + box-shadow: none; + cursor: pointer; + display: inline-block; + font-family: var(--font-body); + font-variation-settings: "wght" var(--font-weight-normal); + font-size: .8888888889rem; + margin: 0; + padding: 0 .5rem; + text-transform: none; + + &:focus, + &:hover { + box-shadow: none; + transform: none + } + + &.is-active { + color: var(--link-color); + -webkit-text-stroke: 0.5px var(--link-color); + pointer-events: none + } + } +} + +.switchers { + align-items: center; + display: flex; + margin-left: auto; + + @media all and (max-width:37.4375em) { + display: none + } + + .switchers__item { + background: 0 0; + box-shadow: none; + color: var(--neutral-4); + padding: 0 .5rem; + + &:focus, + &:hover { + background: inherit; + box-shadow: inherit; + color: var(--link-color); + transform: translateY(0) + } + + &.is-active { + color: var(--neutral-6); + cursor: default + } + } +} + +.l-grid { + box-sizing: content-box; + display: flex; + flex-wrap: wrap; + margin: calc(-1 * var(--cards-gap)) calc(-.5 * var(--cards-gap)); + position: relative; + + & .c-card { + width: 100%; + + .c-card__wrapper { + margin: var(--cards-gap) calc(var(--cards-gap)/ 2) + } + } + +} + +.l-grid--2 .c-card { + @media all and (min-width:37.5em) { + width: 49.999% + } +} + +.l-grid--3 .c-card { + @media all and (min-width:37.5em) { + width: 49.999% + } + + @media all and (min-width:75em) { + width: 33.333% + } +} + +.l-grid--4 .c-card { + @media all and (min-width:37.5em) { + width: 49.999% + } + + @media all and (min-width:75em) { + width: 33.333% + } + + @media all and (min-width:85em) { + width: 24.999% + } +} + +.l-grid--1 .c-card { + @media all and (min-width:37.5em) { + width: 100% + } +} + +.c-card { + list-style: none; + padding: 0; +} + +.c-card--rows { + @media all and (min-width:37.5em) { + & .c-card__wrapper { + display: flex; + justify-content: space-between + } + + & .c-card__image { + flex: 0 1 70% + } + + & .c-card__content { + flex: 0 1 20% + } + } +} + +.c-card__wrapper { + height: 100%; + position: relative; + + &:hover .c-card__image { + box-shadow: var(--box-shadow-hover); + transform: scale(1.02) + } +} + +.c-card__image { + background-color: var(--neutral-1); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow); + display: block; + height: var(--card-image-height); + margin: 0; + overflow: hidden; + transition: all .12s linear; + will-change: transform; + width: 100%; + + &>img { + object-fit: cover; + object-position: center; + height: inherit; + display: block; + width: inherit + } +} + +.c-card__image--up>img { + object-position: top +} + +.c-card__image--down>img { + object-position: bottom +} + +.c-card__content { + padding: calc(var(--baseline) * 7) 0 +} + +.c-card__title { + font-size: 1rem; + margin: 0; + + &>a:after { + background: 0 0; + content: ""; + cursor: pointer; + left: 0; + height: 100%; + position: absolute; + top: 0; + width: 100%; + z-index: 0 + } +} + +.c-card__text { + color: var(--neutral-6); + font-size: .8888888889rem; + line-height: 1.4; + margin: calc(var(--baseline) * 3) 0 +} + +.c-card__meta { + color: var(--neutral-6); + display: flex; + font-size: .7901234568rem; + margin-top: 0; + position: relative; + z-index: 1; + + & a { + color: var(--neutral-6); + text-decoration: none; + transition: all .12s linear; + + &:hover, + &:active, + &:focus { + color: var(--link-color); + } + + &+a { + margin-left: var(--baseline) + } + } +} + +.content { + position: relative; + + @media screen and (min-width: 1119px) { + body.toc-enabled & { + display: grid; + gap: var(--magic-number); + grid-template-areas: + "content toc"; + grid-template-columns: minmax(0, 1300px) 240px; + } + + padding-left: calc(var(--magic-number) * 2); + padding-right: calc(var(--magic-number) * 2); + } +} + +.content__inner { + grid-area: content; + + body:not(.toc-enabled) & { + max-width: var(--entry-width); + margin: auto; + } +} + +.toc-wrapper { + grid-area: toc; + ; +} + +.content__featured-image { + margin-top: 0; + margin-bottom: calc(var(--magic-number)/ 1.5); + + .content__featured-image__inner { + background-color: var(--neutral-1); + border-radius: var(--border-radius); + box-shadow: var(--box-shadow); + height: var(--featured-image-height) + } + + & img { + display: block; + height: inherit; + object-fit: cover; + max-width: var(--page-width); + width: 100% + } +} + +.content__featured-image--full { + margin-left: calc(-50vw + 50% + var(--page-margin)); + margin-right: calc(-50vw + 50% + var(--page-margin)); + padding: 0; + text-align: center; + + & img { + max-width: 100% + } +} + +.content__meta { + color: var(--neutral-6); + font-size: .8888888889rem; + margin-top: calc(var(--baseline) * 5); + + .content__meta__left, + .content__meta__right { + @media all and (min-width:48em) { + display: inline-block + } + } + + @media all and (min-width:31.25em) { + + .content__meta__left *+::before, + .content__meta__right *+::before { + content: "•"; + padding-right: .5rem + } + } + + @media all and (min-width:48em) { + + .content__meta__left+.content__meta__left::before, + .content__meta__left+.content__meta__right::before, + .content__meta__right+.content__meta__left::before, + .content__meta__right+.content__meta__right::before { + content: "•"; + padding-right: .5rem + } + } +} + +.content__entry { + &>:first-child { + margin-top: 0 + } + + & a:not(.btn):not([type=button]):not([type=submit]):not(button):hover { + text-decoration: underline; + text-decoration-skip: ink + } +} + +.content__author { + font-variation-settings: "wght" var(--font-weight-bold); + margin-right: .75rem; + + &>img { + display: none; + + @media all and (min-width:48em) { + border-radius: 50%; + display: inline-block; + height: calc(var(--baseline) * 6); + margin-right: var(--baseline); + width: calc(var(--baseline) * 6) + } + } +} + +.content__date, +.content__updated { + display: inline-block; + margin: 0 .5rem 0 0 +} + +.content__tag-share { + display: flex; + gap: 1rem; + justify-content: space-between +} + +.content__tag { + font-size: .8888888889rem; + + .content__tag__title { + font-size: inherit; + display: inline-block; + margin: 0 .5rem 0 0 + } + + .content__tag__list { + display: inline; + margin: 0; + + & li { + color: var(--neutral-6); + display: inline-block; + list-style: none; + margin-right: .5rem; + padding: 0 + } + } +} + +.content__share { + flex: 0 0 auto; + font-size: 1rem; + margin-left: -1rem; + position: relative; + + &>a { + display: inline-block; + margin: 0 0 0 1rem; + + &:hover { + text-decoration: none + } + + & svg { + fill: var(--neutral-6); + height: 1rem; + pointer-events: none; + transition: all .12s linear; + width: 1rem + } + } +} + +.content__footer { + margin-top: calc(var(--magic-number)/ 2) +} + +.content__related { + margin-top: var(--magic-number); + + .content__related__title { + font-size: 1rem; + border-top: 1px solid var(--neutral-2); + padding: 2rem 0 calc(2rem + 2vmin) + } +} + +.post__image--left { + float: left; + margin-bottom: calc(var(--baseline) * 6); + margin-right: calc(var(--baseline) * 6); + max-width: 50% +} + +.post__image--right { + float: right; + margin-bottom: calc(var(--baseline) * 6); + margin-left: calc(var(--baseline) * 6); + max-width: 50% +} + +.post__image--center { + display: block; + margin-left: auto; + margin-right: auto; + text-align: center; + + & img { + max-height: 150px; + width: auto; + } +} + +.post__image--wide { + display: block; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + text-align: center; + + & a, + & img { + display: block; + height: auto; + margin: auto; + max-width: var(--page-width); + width: 100% + } +} + +.post__image--full { + display: block; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + text-align: center; + + & a, + & img { + display: block; + height: auto; + width: 100% + } +} + +.post__image figcaption a { + color: var(--neutral-4); + text-decoration: none; + transition: all .12s linear; + + &:hover, + &:active, + &:focus { + color: var(--neutral-9); + } +} + +.post__iframe, +.post__video { + position: relative; + display: block; + margin-top: calc(var(--baseline) * 9); + margin-bottom: calc(var(--baseline) * 9); + overflow: hidden; + padding: 0; + width: 100%; + + &::before { + display: block; + content: ""; + padding-top: var(--embed-aspect-ratio) + } + + & iframe, + & video { + border: none; + height: 100%; + left: 0; + position: absolute; + top: 0; + bottom: 0; + width: 100% + } +} + +.post__toc { + border: 2px solid var(--neutral-2); + border-radius: var(--border-radius); + font-size: .8888888889rem; + color: var(--link-color); + margin-bottom: calc(var(--baseline) * 9); + padding: 2rem; + + & h3 { + color: var(--link-color); + font-size: 1rem; + margin: 0 0 calc(var(--baseline) * 3) + } + + & ul { + counter-reset: item; + list-style: decimal; + margin: 0; + padding: 0 0 0 2ch; + + & li { + counter-increment: item; + padding: 0 0 0 calc(var(--baseline) * 2) + } + + & ul { + margin-top: 0; + padding: 0 0 0 calc(var(--baseline) * 2); + + & li { + display: block; + + &:before { + content: counters(item, ".") ". "; + margin-left: -1rem; + margin-right: var(--baseline) + } + } + } + } +} + +.banner--before-content { + margin-bottom: var(--magic-number) +} + +.banner--after-content { + margin-top: var(--magic-number) +} + +.page--author__avatar { + box-shadow: 1px 16px 18px -6px oklch(from var(--black) l c h / .2); + border-radius: 50%; + height: 5rem; + margin: 0 0 calc(var(--baseline) * 6); + width: 5rem; + + @media all and (min-width:37.5em) { + height: 6rem; + width: 6rem + } +} + +.page--author__details { + align-items: center; + border-top: 1px solid var(--neutral-2); + font-size: .8888888889rem; + display: inline-flex; + margin-top: calc(var(--baseline) * 6); + padding: calc(var(--baseline) * 4) 3rem 0; + + @media all and (max-width:37.4375em) { + flex-wrap: wrap; + justify-content: center; + padding: calc(var(--baseline) * 4) 0 0 + } + + & span { + flex-basis: 100%; + + @media all and (min-width:37.5em) { + flex-basis: auto; + margin-right: 2rem + } + } + + & a { + margin-left: .3rem + } +} + +.page--error__title { + font-size: clamp(6.583250172rem, calc(6.583250172rem + 8.4311510216 * (100vw - 20rem) / 80), 15.0144011936rem) +} + +.page--error__btn { + margin-top: calc(var(--baseline) * 2) !important +} + +.page--search form { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + + @media all and (max-width:37.4375em) { + & input { + margin-bottom: calc(var(--baseline) * 2) + } + } + + @media all and (min-width:20em) { + & input { + flex: 1 0 auto; + margin-right: calc(var(--baseline) * 2) + } + } + + @media all and (max-width:37.4375em) { + & button { + width: 100% + } + } +} + +.subpages { + border-top: 1px solid var(--neutral-2); + margin-top: var(--magic-number); + + .subpages__list { + list-style: initial; + margin-left: 2ch; + + & ul { + list-style: initial; + margin: 0 0 0 2ch + } + + & li { + padding: 0 0 0 1ch + } + } +} + +.align-left { + text-align: left +} + +.align-right { + text-align: right +} + +.align-center { + text-align: center +} + +.align-justify { + text-align: justify +} + +.msg { + background: linear-gradient(to bottom, var(--primary-5), var(--primary-1)); + border: 1px solid var(--primary-5); + font-size: .8888888889rem; + padding: calc(var(--baseline) * 5) calc(var(--baseline) * 5); +} + +/* .msg--highlight { + border-color: var(--yellow) +} + +.msg--info { + border-color: var(--blue) +} + +.msg--success { + border-color: var(--green) +} + +.msg--warning { + border-color: var(--red) +} */ + +.dropcap:first-letter { + float: left; + font-family: var(--font-heading); + font-size: 4.1098906729rem; + line-height: .7; + margin-right: calc(var(--baseline) * 2); + padding: calc(var(--baseline) * 2) calc(var(--baseline) * 2) calc(var(--baseline) * 2) 0 +} + +.pec-wrapper { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100% +} + +.pec-overlay { + align-items: center; + background-color: var(--neutral-2); + font-size: 14px; + display: none; + height: inherit; + justify-content: center; + line-height: 1.4; + padding: 1rem; + position: relative; + text-align: center; + + @media all and (min-width:37.5em) { + font-size: 16px; + line-height: var(--line-height); + padding: 1rem 2rem + } + + &.is-active { + display: flex + } +} + +.pec-overlay-inner p { + margin: 0 0 1rem +} + +.is-img-loading { + overflow: hidden; + position: relative; + + &::after, + &::before { + content: ""; + display: block; + position: absolute; + height: 100%; + width: 2px; + top: -100%; + left: 20%; + background: linear-gradient(to bottom, oklch(from var(--black) l c h / 0) 0, oklch(from var(--primary-base) l c h / .15) 75%, oklch(from var(--black) l c h / 0) 100%); + animation: preloader 2s cubic-bezier(.4, .26, 0, .97) 0s infinite + } + + &::before { + animation-delay: .2s; + left: 80% + } +} + +@keyframes preloader { + 0% { + top: -100% + } + + 100% { + top: 100% + } +} + +.facebook:hover svg { + fill: #0866FF +} + +.twitter:hover svg { + fill: var(--black) +} + +.mix:hover svg { + fill: #fd8235 +} + +.instagram:hover svg { + fill: var(--black) +} + +.vimeo:hover svg { + fill: #1ab7ea +} + +.pinterest:hover svg { + fill: #bd081c +} + +.youtube:hover svg { + fill: #cd201f +} + +.linkedin:hover svg { + fill: #007bb6 +} + +.buffer:hover svg { + fill: var(--neutral-8) +} + +.whatsapp:hover svg { + fill: #25D366 +} + +.pocket:hover svg { + fill: #ED4255 +} + +.pagination { + clear: both; + display: flex; + flex-wrap: wrap; + font-size: .8888888889rem; + justify-content: center; + margin-top: calc(2rem + 2vmin); + + & a { + border: 2px solid transparent; + border-radius: var(--border-radius); + display: inline-block; + color: var(--neutral-6); + margin: 0 .25rem; + padding: .5rem 1rem; + text-align: center; + + &:hover { + background-color: var(--neutral-1); + color: var(--neutral-6) + } + } +} + +.pagination-active { + background-color: var(--neutral-1); + color: var(--link-color) !important; + font-variation-settings: "wght" var(--font-weight-bold); + pointer-events: none +} + +.pagination-inactive { + border: 2px solid transparent; + color: var(--neutral-4) !important; + margin: 0 .25rem; + pointer-events: none; + padding: .5rem 1rem; + opacity: .6 +} + +.pagination-first, +.pagination-last { + display: none; + + @media all and (min-width:56.25em) { + display: block + } +} + +.view-more { + display: flex; + margin: .5rem auto 0 +} + +.newsletter { + background-color: var(--neutral-1); + margin: var(--magic-number) 0; + padding: calc(var(--magic-number)/ 1.5) var(--page-margin); + + .newsletter__title { + margin-top: 0 + } + + .newsletter__desc { + color: var(--neutral-6); + font-size: .8888888889rem; + + @media all and (min-width:56.25em) { + max-width: 85% + } + } + + & form { + display: flex; + flex-wrap: wrap; + flex-direction: column; + gap: 1rem; + margin-top: calc(var(--baseline) * 5); + + @media all and (min-width:37.5em) { + flex-direction: row + } + } + + & input[type=email], + & input[type=text] { + flex: 1 + } + + @media all and (max-width:37.4375em) { + & input[type=submit] { + width: 100% + } + } +} + +.footer { + color: var(--neutral-6); + margin-top: var(--magic-number); + + @media all and (max-width:56.1875em) { + text-align: center; + + &__links { + justify-content: center; + } + } + + @media all and (min-width:56.25em) { + display: flex; + justify-content: space-between; + align-items: center; + padding: 2rem calc(clamp(8rem, 5vw, 12rem) - var(--entry-width)); + max-width: var(--entry-width); + margin: calc(var(--magic-number) * 2) auto auto auto; + + &__right { + flex-grow: 1; + max-width: 35ch; + } + + .home-template & { + margin: -2rem auto auto auto !important; + } + } + + & h3 { + margin: 0 0 calc(var(--baseline) * 5) + } + + .footer__copy { + font-size: .7901234568rem + } + + .footer__left { + max-width: 20ch; + font-size: xx-large; + font-variation-settings: "wght" 800; + line-height: 2.3rem; + display: inline-flex; + flex-direction: column; + } + + .footer__links { + display: inline-flex; + flex-direction: row; + gap: 1rem; + opacity: 0.3; + } + + .footer__nav { + display: flex; + flex-wrap: wrap; + font-size: .8888888889rem; + margin: 0 0 calc(var(--baseline) * 2); + + @media all and (min-width:56.25em) { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); + font-size: .7901234568rem; + margin: 0 + } + + & li { + display: inline-block; + padding: 0; + position: relative; + flex: 1; + + @media all and (min-width:56.25em) { + margin: 0 .4rem 0 0; + } + + &:last-child { + margin-right: unset; + } + + a { + display: block; + padding: 0.5rem 1rem; + border-radius: 4px; + color: var(--text-color); + font-variation-settings: "wght" 600; + + &:hover { + background-color: rgba(255, 255, 255, 0.03); + } + } + } + } + + @media all and (max-width:56.1875em) { + .footer__left+.footer__right { + margin: calc(var(--baseline) * 8) 0; + } + } + + @media all and (min-width:56.25em) { + .footer__right { + margin-left: auto + } + } + + .footer__social a { + display: inline-block; + padding: 0 .75rem; + vertical-align: middle; + + @media all and (min-width:56.25em) { + padding: 0 0 0 1.5rem + } + + &>svg { + display: inline-block; + fill: var(--neutral-6); + height: .875rem; + pointer-events: none; + transition: all .12s linear 0s; + width: .875rem + } + + &:hover>svg { + opacity: 1 + } + } + + .footer__bttop { + background: oklch(from var(--primary-3) l c h / 0.6); + border: unset !important; + /* border: 2px solid var(--white) !important; */ + bottom: calc(var(--baseline) * 5); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + width: 44px !important; + height: 44px; + padding: 0.5rem; + line-height: 1; + opacity: 0; + position: fixed; + right: 2rem; + text-align: center; + visibility: hidden; + z-index: 999; + transform: translateY(1rem); + + &:hover { + opacity: 1; + transform: translateY(-3px); + } + + &>svg { + fill: var(--white); + height: 24px; + margin: 0; + width: 24px + } + + &.is-visible { + opacity: 1; + visibility: visible; + transform: translateY(0) + } + } +} + +.gallery { + margin: calc(var(--baseline) * 9) calc(var(--gallery-gap) * -1) calc(var(--baseline) * 2); + + @media all and (min-width:20em) { + display: flex; + flex-wrap: wrap + } + + &[data-columns="1"] .gallery__item { + @media all and (min-width:20em) { + flex: 1 0 100% + } + } + + &[data-columns="2"] .gallery__item { + @media all and (min-width:30em) { + flex: 1 0 50% + } + } + + &[data-columns="3"] .gallery__item { + @media all and (min-width:37.5em) { + flex: 1 0 33.333% + } + } + + &[data-columns="4"] .gallery__item { + @media all and (min-width:56.25em) { + flex: 0 1 25% + } + } + + &[data-columns="5"] .gallery__item { + @media all and (min-width:56.25em) { + flex: 0 1 20% + } + } + + &[data-columns="6"] .gallery__item { + @media all and (min-width:56.25em) { + flex: 0 1 16.666% + } + } + + &[data-columns="7"] .gallery__item { + @media all and (min-width:56.25em) { + flex: 1 0 14.285% + } + } + + &[data-columns="8"] .gallery__item { + @media all and (min-width:56.25em) { + flex: 1 0 12.5% + } + } +} + +.gallery-wrapper--wide { + @media all and (min-width:56.25em) { + display: flex; + justify-content: center; + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin); + + & .gallery { + max-width: calc(var(--page-width) + var(--gallery-gap) * 2); + width: calc(100% + var(--gallery-gap) * 2) + } + } +} + +.gallery-wrapper--full { + margin-left: calc(-50vw + 50%); + margin-right: calc(-50vw + 50%); + padding: 0 var(--page-margin) +} + +.gallery__item { + margin: 0; + padding: var(--gallery-gap); + position: relative; + + @media all and (min-width:20em) { + flex: 1 0 50% + } + + @media all and (min-width:30em) { + flex: 1 0 33.333% + } + + @media all and (min-width:37.5em) { + flex: 1 0 25% + } + + & a { + background-color: var(--neutral-1); + display: block; + height: 100%; + width: 100%; + + &::after { + background: linear-gradient(to top, oklch(from var(--black) l c h / .4) 0, oklch(from var(--black) l c h / 0) 100%); + bottom: var(--gallery-gap); + content: ""; + display: block; + opacity: 0; + left: var(--gallery-gap); + height: calc(100% - var(--gallery-gap) * 2); + position: absolute; + right: var(--gallery-gap); + top: var(--gallery-gap); + transition: all .24s ease-out; + width: calc(100% - var(--gallery-gap) * 2) + } + + &:hover::after { + opacity: 1 + } + } + + & img { + display: block; + height: 100%; + object-fit: cover; + width: 100% + } + + & figcaption { + bottom: 1.2rem; + color: var(--white); + left: 50%; + opacity: 0; + position: absolute; + text-align: center; + transform: translate(-50%, 1.2rem); + transition: all .24s ease-out + } + + &:hover figcaption { + opacity: 1; + transform: translate(-50%, 0) + } +} + +.pswp .pswp__button { + box-shadow: none +} + +.pswp--zoom-allowed .pswp__img { + cursor: default !important +} + +img[loading] { + opacity: 1; + + &.is-loading { + opacity: 0; + } +} + +img.is-loaded { + opacity: 1; + transition: opacity 1s cubic-bezier(.215, .61, .355, 1) +} + +.btn { + margin: 2px; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 5px; +} + +.btn-light { + background: var(--primary-2) !important; + color: var(--text-color) !important; +} + +.body { + font-weight: 400; + font-style: normal +} + +.mp-header { + font-size: clamp(2.5rem, 8vw, 60px); + text-align: center +} + +.content__inner.content__header { + display: none +} + +.logo-carousel { + mask-image: linear-gradient(to right, oklch(from var(--black) l c h / 0), var(--black) 20%, var(--black) 80%, oklch(from var(--black) l c h / 0)); + position: relative; + --logo-slide-width: 150px; +} + +.logo-track { + display: flex; + animation: scroll 23s linear infinite; + width: calc(var(--logo-slide-width) * 12); + + &:hover { + animation-play-state: paused + } +} + +@keyframes scroll { + 0% { + transform: translateX(0) + } + + 100% { + transform: translateX(calc(var(--logo-slide-width) * -12)) + } +} + +.logo-slide { + width: var(--logo-slide-width); + padding: 0 30px; + flex-shrink: 0; + display: flex; + justify-content: center; + align-items: center; + + & img { + width: 100%; + height: auto; + opacity: .8; + transition: opacity .3s ease + } + + & a:hover img { + opacity: 1 + } +} + +.flex-container { + display: flex; + flex-wrap: wrap; + gap: 60px; + width: 100%; + + &>div { + flex: 1; + font-size: medium; + } + + &.plain-simple-divs { + margin-top: calc(var(--baseline) * 4); + + >div { + background: oklch(from var(--neutral-2) l c h / 60%); + padding: 2rem; + border-radius: 20px; + min-width: 35%; + + >h5 { + margin-top: 0; + } + + @media screen and (max-width: 800px) { + min-width: 100%; + } + } + } +} + +.subtitle-below-heading { + display: flex; + flex-wrap: wrap; + gap: 5px 15px; + margin-top: unset; + font-size: medium; + opacity: .75; +} + +.material-symbols { + height: 20px; +} + +.text-highlight { + background: var(--primary-5) +} + +.landing-content h1 { + margin-top: unset; +} + +.secondary-container { + border: 1px solid rgba(255, 255, 255, 0.3); + background: linear-gradient(to bottom, oklch(from var(--primary-1) l c h / 60%), var(--primary-1)); + position: relative; + overflow: hidden; + padding: 2rem; + + &::before { + content: ""; + position: absolute; + inset: 0; + background: url(../../assets/backgrounds/day-sky.png); + background-size: cover; + background-position: center; + border-radius: inherit; + filter: blur(2px); + transform: scale(1.1); + z-index: -1; + } + + >h2 { + margin-top: 0; + grid-area: title; + } + + >p { + grid-area: desc; + + &:last-child { + grid-area: buttons; + } + } +} + +.landing-project-showcase { + display: flex; + justify-content: space-between; + gap: 2rem; + flex-wrap: wrap; + margin-top: calc(var(--baseline) * 35); + margin-bottom: calc(var(--baseline) * 35); + align-items: center; + + @media screen and (min-width: 800px) { + &>div { + flex: 1; + } + } + + @media screen and (max-width: 800px) { + flex-direction: column; + } + + h1 { + margin-top: unset; + } + + &>div { + display: inline-flex; + flex-direction: column; + align-items: start; + gap: 0.5rem; + + >p { + color: oklch(from var(--text-color) l c h / 0.6); + margin-top: unset; + } + } + + &:nth-child(1 of .landing-project-showcase) { + margin-top: calc(var(--baseline) * 50) !important; + } + + &:last-of-type { + margin-bottom: calc(var(--baseline) * 70) !important; + } +} + +@keyframes appear { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + + +.project-container { + background: oklch(from var(--neutral-2) l c h / 60%); + backdrop-filter: blur(10px); + padding: 2rem; + border-radius: 20px; + min-width: 35%; + font-size: medium; + margin: 2rem 1rem; + display: grid; + gap: calc(var(--baseline) * 6); + grid-template-areas: "info image" "desc image"; + + h1, + h2, + h3, + h4, + h5 { + margin-top: 0; + } + + .post__image--right { + margin-top: unset; + } + + @media screen and (max-width: 800px) { + margin-left: unset; + margin-right: unset; + padding: 0 0 2rem 0; + grid-template-areas: "image" "info" "desc"; + background: transparent; + backdrop-filter: unset; + border: 1px solid rgba(255, 255, 255, 0.03); + + &-info, + &-desc { + padding: 0 1rem; + z-index: 1; + } + + &-image { + width: 100% !important; + height: auto !important; + margin-bottom: -25%; + mask-image: linear-gradient(to bottom, black, rgba(0, 0, 0, 0.75) 55%, transparent); + pointer-events: none; + } + } + + &-image { + grid-area: image; + } + + &-info { + grid-area: info; + } + + &-desc { + grid-area: desc; + + >p:first-child { + margin-top: unset; + } + } +} + +#floating { + position: absolute; + background: oklch(from var(--neutral-2) l c h / 60%); + padding: 0.5rem; + box-sizing: border-box; + font-size: 0.8rem; + margin: 10px; + backdrop-filter: blur(10px); + pointer-events: none; + opacity: 0; + transform: translateY(-30px); + transition: opacity 0.2s ease, transform 0.2s ease; + + &.visible { + opacity: 1; + transform: translateY(0); + } +} + +.aspect-ratio-169 { + aspect-ratio: 16 / 9; +} + +.size-cover { + object-fit: cover; + background-size: cover; +} \ No newline at end of file diff --git a/assets/css/syntax-highlighting.css b/assets/css/syntax-highlighting.css new file mode 100644 index 00000000..2439e41b --- /dev/null +++ b/assets/css/syntax-highlighting.css @@ -0,0 +1,288 @@ +/* Syntax highlighting */ +.highlight { + background: var(--neutral-1); + border-radius: var(--border-radius); + padding: calc(var(--baseline) * 6); + /* Comment */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Namespace */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Decorator */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Label */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Bin */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Affix */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Delimiter */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Function.Magic */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Name.Variable.Magic */ + /* Literal.Number.Integer.Long */ +} +.highlight pre { + background: transparent; + padding: 0; + margin: 0; + border-radius: 0; + font-size: 1rem; + line-height: 1.4; +} +.highlight .c { + color: var(--neutral-6); + font-style: italic; +} +.highlight .k { + color: var(--primary-8); + font-weight: bold; +} +.highlight .o { + color: var(--neutral-7); +} +.highlight .cm { + color: var(--neutral-6); + font-style: italic; +} +.highlight .cp { + color: var(--secondary-6); +} +.highlight .c1 { + color: var(--neutral-6); + font-style: italic; +} +.highlight .cs { + color: var(--neutral-6); + font-style: italic; +} +.highlight .gd { + color: var(--red); +} +.highlight .ge { + font-style: italic; +} +.highlight .gr { + color: var(--red); +} +.highlight .gh { + color: var(--primary-8); + font-weight: bold; +} +.highlight .gi { + color: var(--tertiary-6); +} +.highlight .go { + color: var(--neutral-5); +} +.highlight .gp { + color: var(--primary-8); + font-weight: bold; +} +.highlight .gs { + font-weight: bold; +} +.highlight .gu { + color: var(--secondary-6); + font-weight: bold; +} +.highlight .gt { + color: var(--blue); +} +.highlight .kc { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kd { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kn { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kp { + color: var(--primary-8); +} +.highlight .kr { + color: var(--primary-8); + font-weight: bold; +} +.highlight .kt { + color: var(--tertiary-8); +} +.highlight .m { + color: var(--secondary-8); +} +.highlight .s { + color: var(--secondary-6); +} +.highlight .na { + color: var(--tertiary-6); +} +.highlight .nb { + color: var(--primary-6); +} +.highlight .nc { + color: var(--primary-8); + font-weight: bold; +} +.highlight .no { + color: var(--secondary-6); +} +.highlight .nd { + color: var(--secondary-6); +} +.highlight .ni { + color: var(--neutral-6); + font-weight: bold; +} +.highlight .ne { + color: var(--red); + font-weight: bold; +} +.highlight .nf { + color: var(--primary-8); +} +.highlight .nl { + color: var(--yellow); +} +.highlight .nn { + color: var(--primary-8); + font-weight: bold; +} +.highlight .nt { + color: var(--primary-6); + font-weight: bold; +} +.highlight .nv { + color: var(--neutral-8); +} +.highlight .ow { + color: var(--secondary-6); + font-weight: bold; +} +.highlight .w { + color: var(--neutral-4); +} +.highlight .mb { + color: var(--secondary-8); +} +.highlight .mf { + color: var(--secondary-8); +} +.highlight .mh { + color: var(--secondary-8); +} +.highlight .mi { + color: var(--secondary-8); +} +.highlight .mo { + color: var(--secondary-8); +} +.highlight .sa { + color: var(--secondary-6); +} +.highlight .sb { + color: var(--secondary-6); +} +.highlight .sc { + color: var(--secondary-6); +} +.highlight .dl { + color: var(--secondary-6); +} +.highlight .sd { + color: var(--secondary-6); +} +.highlight .s2 { + color: var(--secondary-6); +} +.highlight .se { + color: var(--secondary-6); +} +.highlight .sh { + color: var(--secondary-6); +} +.highlight .si { + color: var(--secondary-6); +} +.highlight .sx { + color: var(--secondary-6); +} +.highlight .sr { + color: var(--secondary-6); +} +.highlight .s1 { + color: var(--secondary-6); +} +.highlight .ss { + color: var(--secondary-6); +} +.highlight .bp { + color: var(--primary-6); +} +.highlight .fm { + color: var(--primary-8); +} +.highlight .vc { + color: var(--neutral-8); +} +.highlight .vg { + color: var(--neutral-8); +} +.highlight .vi { + color: var(--neutral-8); +} +.highlight .vm { + color: var(--neutral-8); +} +.highlight .il { + color: var(--secondary-8); +} diff --git a/assets/css/syntax-highlighting.less b/assets/css/syntax-highlighting.less new file mode 100644 index 00000000..00514217 --- /dev/null +++ b/assets/css/syntax-highlighting.less @@ -0,0 +1,80 @@ +/* Syntax highlighting */ +.highlight { + background: var(--neutral-1); + border-radius: var(--border-radius); + padding: calc(var(--baseline) * 6); + + & pre { + background: transparent; + padding: 0; + margin: 0; + border-radius: 0; + font-size: 1rem; + line-height: 1.4; + } + + .c { color: var(--neutral-6); font-style: italic } /* Comment */ + .k { color: var(--primary-8); font-weight: bold } /* Keyword */ + .o { color: var(--neutral-7) } /* Operator */ + .cm { color: var(--neutral-6); font-style: italic } /* Comment.Multiline */ + .cp { color: var(--secondary-6) } /* Comment.Preproc */ + .c1 { color: var(--neutral-6); font-style: italic } /* Comment.Single */ + .cs { color: var(--neutral-6); font-style: italic } /* Comment.Special */ + .gd { color: var(--red) } /* Generic.Deleted */ + .ge { font-style: italic } /* Generic.Emph */ + .gr { color: var(--red) } /* Generic.Error */ + .gh { color: var(--primary-8); font-weight: bold } /* Generic.Heading */ + .gi { color: var(--tertiary-6) } /* Generic.Inserted */ + .go { color: var(--neutral-5) } /* Generic.Output */ + .gp { color: var(--primary-8); font-weight: bold } /* Generic.Prompt */ + .gs { font-weight: bold } /* Generic.Strong */ + .gu { color: var(--secondary-6); font-weight: bold } /* Generic.Subheading */ + .gt { color: var(--blue) } /* Generic.Traceback */ + .kc { color: var(--primary-8); font-weight: bold } /* Keyword.Constant */ + .kd { color: var(--primary-8); font-weight: bold } /* Keyword.Declaration */ + .kn { color: var(--primary-8); font-weight: bold } /* Keyword.Namespace */ + .kp { color: var(--primary-8) } /* Keyword.Pseudo */ + .kr { color: var(--primary-8); font-weight: bold } /* Keyword.Reserved */ + .kt { color: var(--tertiary-8) } /* Keyword.Type */ + .m { color: var(--secondary-8) } /* Literal.Number */ + .s { color: var(--secondary-6) } /* Literal.String */ + .na { color: var(--tertiary-6) } /* Name.Attribute */ + .nb { color: var(--primary-6) } /* Name.Builtin */ + .nc { color: var(--primary-8); font-weight: bold } /* Name.Class */ + .no { color: var(--secondary-6) } /* Name.Constant */ + .nd { color: var(--secondary-6) } /* Name.Decorator */ + .ni { color: var(--neutral-6); font-weight: bold } /* Name.Entity */ + .ne { color: var(--red); font-weight: bold } /* Name.Exception */ + .nf { color: var(--primary-8) } /* Name.Function */ + .nl { color: var(--yellow) } /* Name.Label */ + .nn { color: var(--primary-8); font-weight: bold } /* Name.Namespace */ + .nt { color: var(--primary-6); font-weight: bold } /* Name.Tag */ + .nv { color: var(--neutral-8) } /* Name.Variable */ + .ow { color: var(--secondary-6); font-weight: bold } /* Operator.Word */ + .w { color: var(--neutral-4) } /* Text.Whitespace */ + .mb { color: var(--secondary-8) } /* Literal.Number.Bin */ + .mf { color: var(--secondary-8) } /* Literal.Number.Float */ + .mh { color: var(--secondary-8) } /* Literal.Number.Hex */ + .mi { color: var(--secondary-8) } /* Literal.Number.Integer */ + .mo { color: var(--secondary-8) } /* Literal.Number.Oct */ + .sa { color: var(--secondary-6) } /* Literal.String.Affix */ + .sb { color: var(--secondary-6) } /* Literal.String.Backtick */ + .sc { color: var(--secondary-6) } /* Literal.String.Char */ + .dl { color: var(--secondary-6) } /* Literal.String.Delimiter */ + .sd { color: var(--secondary-6) } /* Literal.String.Doc */ + .s2 { color: var(--secondary-6) } /* Literal.String.Double */ + .se { color: var(--secondary-6) } /* Literal.String.Escape */ + .sh { color: var(--secondary-6) } /* Literal.String.Heredoc */ + .si { color: var(--secondary-6) } /* Literal.String.Interpol */ + .sx { color: var(--secondary-6) } /* Literal.String.Other */ + .sr { color: var(--secondary-6) } /* Literal.String.Regex */ + .s1 { color: var(--secondary-6) } /* Literal.String.Single */ + .ss { color: var(--secondary-6) } /* Literal.String.Symbol */ + .bp { color: var(--primary-6) } /* Name.Builtin.Pseudo */ + .fm { color: var(--primary-8) } /* Name.Function.Magic */ + .vc { color: var(--neutral-8) } /* Name.Variable.Class */ + .vg { color: var(--neutral-8) } /* Name.Variable.Global */ + .vi { color: var(--neutral-8) } /* Name.Variable.Instance */ + .vm { color: var(--neutral-8) } /* Name.Variable.Magic */ + .il { color: var(--secondary-8) } /* Literal.Number.Integer.Long */ +} \ No newline at end of file diff --git a/assets/css/toc.css b/assets/css/toc.css new file mode 100644 index 00000000..81c90963 --- /dev/null +++ b/assets/css/toc.css @@ -0,0 +1,186 @@ +/** + * TOC Styles + * Sticky table of contents for headings + */ +.toc-wrapper { + display: flex; + flex-direction: column; + position: sticky; + top: 60px; + max-height: calc(100vh - 80px); + padding: 0; + overflow: hidden; + z-index: 50; + font-size: 0.95rem; +} +/* TOC Header */ +.toc-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem 0 1rem; + flex-shrink: 0; + font-size: small; +} +.toc-title { + margin: 0; + font-size: 1.1rem; + font-weight: 600; + color: var(--text-color, #ffffff); +} +/* TOC Toggle Button */ +.toc-toggle { + background: none; + border: none; + margin: unset; + cursor: pointer; + padding: 0.25rem 0.25rem; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 1.2rem; + transition: opacity 0.2s ease; + flex-shrink: 0; +} +.toc-toggle:hover { + opacity: 0.7; +} +.toc-toggle:active { + opacity: 0.5; +} +.toc-toggle-icon { + display: inline-block; + line-height: 1; +} +/* TOC Navigation */ +.toc-nav { + flex: 1; + overflow-y: auto; + padding: 1rem; + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb, #444444) var(--bg-color, #1a1a1a); + font-size: 0.7rem; +} +.toc-nav::-webkit-scrollbar { + width: 6px; +} +.toc-nav::-webkit-scrollbar-track { + background: var(--bg-color, #1a1a1a); +} +.toc-nav::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb, #444444); + border-radius: 3px; +} +.toc-nav::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb-hover, #666666); +} +/* TOC List Structure */ +.toc-nav ul { + list-style: none; + margin: 0; + padding: 0; +} +.toc-nav li { + margin: 0; + padding: 0; +} +.toc-nav ul ul { + margin-left: 1rem; + padding-left: 0; +} +.toc-nav a { + display: block; + padding: 0.5rem 0.75rem; + color: var(--link-color, #66b3ff); + text-decoration: none; + border-left: 3px solid transparent; + transition: all 0.2s ease; + line-height: 1.4; + overflow-wrap: anywhere; + word-break: normal; +} +.toc-nav a:hover { + background-color: var(--link-hover-bg, #333333); + border-left-color: var(--link-color, #66b3ff); +} +.toc-nav a.is-active { + font-weight: 600; + color: var(--link-active-color, #99ccff); + background-color: var(--link-active-bg, #1a3a52); + border-left-color: var(--link-color, #66b3ff); +} +/* Closed State (Mobile/Collapsed) */ +.toc-wrapper.is-closed .toc-nav { + display: none; +} +/* Responsive Design */ +@media screen and (max-width: 1024px) { + .toc-wrapper { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + max-height: 30vh; + border-radius: 12px 12px 0 0; + margin: 0 20px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: none; + box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); + background: oklch(from var(--primary-2) l c h / 0.7); + } + .toc-wrapper::before { + content: ""; + position: absolute; + inset: 0; + backdrop-filter: blur(5px); + border-radius: inherit; + z-index: -1; + } + .toc-wrapper.is-closed { + bottom: auto; + top: 0; + max-height: none; + border-radius: unset; + width: max-content; + margin: 0; + z-index: 1000; + height: var(--navbar-height); + right: 40vw; + left: unset; + background: transparent; + box-shadow: unset; + border: unset; + } + .toc-wrapper.is-closed::before { + backdrop-filter: unset; + } + .toc-wrapper.is-closed .toc-header { + padding: 0; + height: 100%; + } + .toc-wrapper.is-closed .toc-header .toc-title { + display: none; + } + .toc-wrapper.is-closed .toc-header .toc-toggle { + padding: 2px 8px; + height: 100%; + } +} +/* Print Styles */ +@media print { + .toc-wrapper { + position: static; + max-height: none; + border: 1px solid #ccc; + break-inside: avoid; + } + .toc-toggle { + display: none; + } + .toc-nav { + max-height: none; + overflow: visible; + } +} diff --git a/assets/css/toc.less b/assets/css/toc.less new file mode 100644 index 00000000..66b01b82 --- /dev/null +++ b/assets/css/toc.less @@ -0,0 +1,215 @@ +/** + * TOC Styles + * Sticky table of contents for headings + */ + +.toc-wrapper { + display: flex; + flex-direction: column; + position: sticky; + top: 60px; + max-height: calc(100vh - 80px); + padding: 0; + overflow: hidden; + z-index: 50; + font-size: 0.95rem; +} + +/* TOC Header */ +.toc-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem 0 1rem; + flex-shrink: 0; + font-size: small; +} + +.toc-title { + margin: 0; + font-size: 1.1rem; + font-weight: 600; + color: var(--text-color, #ffffff); +} + +/* TOC Toggle Button */ +.toc-toggle { + background: none; + border: none; + margin: unset; + cursor: pointer; + padding: 0.25rem 0.25rem; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 1.2rem; + transition: opacity 0.2s ease; + flex-shrink: 0; +} + +.toc-toggle:hover { + opacity: 0.7; +} + +.toc-toggle:active { + opacity: 0.5; +} + +.toc-toggle-icon { + display: inline-block; + line-height: 1; +} + +/* TOC Navigation */ +.toc-nav { + flex: 1; + overflow-y: auto; + padding: 1rem; + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb, #444444) var(--bg-color, #1a1a1a); + font-size: 0.7rem; +} + +.toc-nav::-webkit-scrollbar { + width: 6px; +} + +.toc-nav::-webkit-scrollbar-track { + background: var(--bg-color, #1a1a1a); +} + +.toc-nav::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb, #444444); + border-radius: 3px; +} + +.toc-nav::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb-hover, #666666); +} + +/* TOC List Structure */ +.toc-nav ul { + list-style: none; + margin: 0; + padding: 0; +} + +.toc-nav li { + margin: 0; + padding: 0; +} + +.toc-nav ul ul { + margin-left: 1rem; + padding-left: 0; +} + +.toc-nav a { + display: block; + padding: 0.5rem 0.75rem; + color: var(--link-color, #66b3ff); + text-decoration: none; + border-left: 3px solid transparent; + transition: all 0.2s ease; + line-height: 1.4; + overflow-wrap: anywhere; + word-break: normal +} + +.toc-nav a:hover { + background-color: var(--link-hover-bg, #333333); + border-left-color: var(--link-color, #66b3ff); +} + +.toc-nav a.is-active { + font-weight: 600; + color: var(--link-active-color, #99ccff); + background-color: var(--link-active-bg, #1a3a52); + border-left-color: var(--link-color, #66b3ff); +} + +/* Closed State (Mobile/Collapsed) */ +.toc-wrapper.is-closed .toc-nav { + display: none; +} + +/* Responsive Design */ +@media screen and (max-width: 1024px) { + .toc-wrapper { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + max-height: 30vh; + border-radius: 12px 12px 0 0; + margin: 0 20px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: none; + box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); + background: oklch(from var(--primary-2) l c h / 0.7); + } + + .toc-wrapper::before { + content: ""; + position: absolute; + inset: 0; + backdrop-filter: blur(5px); + border-radius: inherit; + z-index: -1; + } + + .toc-wrapper.is-closed { + bottom: auto; + top: 0; + max-height: none; + border-radius: unset; + width: max-content; + margin: 0; + z-index: 1000; + height: var(--navbar-height); + right: 40vw; + left: unset; + background: transparent; + box-shadow: unset; + border: unset; + } + + .toc-wrapper.is-closed::before { + backdrop-filter: unset; + } + + .toc-wrapper.is-closed .toc-header { + padding: 0; + height: 100%; + } + + .toc-wrapper.is-closed .toc-header .toc-title { + display: none; + } + + .toc-wrapper.is-closed .toc-header .toc-toggle { + padding: 2px 8px; + height: 100%; + } +} + +/* Print Styles */ +@media print { + .toc-wrapper { + position: static; + max-height: none; + border: 1px solid #ccc; + break-inside: avoid; + } + + .toc-toggle { + display: none; + } + + .toc-nav { + max-height: none; + overflow: visible; + } +} diff --git a/assets/dynamic/fonts/lora/lora-italic.woff2 b/assets/dynamic/fonts/lora/lora-italic.woff2 deleted file mode 100644 index 8b5cbc57..00000000 Binary files a/assets/dynamic/fonts/lora/lora-italic.woff2 and /dev/null differ diff --git a/assets/dynamic/fonts/lora/lora.woff2 b/assets/dynamic/fonts/lora/lora.woff2 deleted file mode 100644 index f7b9997f..00000000 Binary files a/assets/dynamic/fonts/lora/lora.woff2 and /dev/null differ diff --git a/assets/dynamic/fonts/raleway/raleway-italic.woff2 b/assets/dynamic/fonts/raleway/raleway-italic.woff2 deleted file mode 100644 index 7e8271fc..00000000 Binary files a/assets/dynamic/fonts/raleway/raleway-italic.woff2 and /dev/null differ diff --git a/assets/dynamic/fonts/raleway/raleway.woff2 b/assets/dynamic/fonts/raleway/raleway.woff2 deleted file mode 100644 index eecab8d2..00000000 Binary files a/assets/dynamic/fonts/raleway/raleway.woff2 and /dev/null differ diff --git a/assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf b/assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf new file mode 100644 index 00000000..cdd84767 Binary files /dev/null and b/assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf differ diff --git a/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf b/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf new file mode 100644 index 00000000..8e920326 Binary files /dev/null and b/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf differ diff --git a/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf b/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf new file mode 100644 index 00000000..27e00581 Binary files /dev/null and b/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf differ diff --git a/assets/fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth,wght.ttf b/assets/fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth,wght.ttf new file mode 100644 index 00000000..9b4f14d4 Binary files /dev/null and b/assets/fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth,wght.ttf differ diff --git a/assets/fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth,wght.ttf b/assets/fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth,wght.ttf new file mode 100644 index 00000000..f163302d Binary files /dev/null and b/assets/fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth,wght.ttf differ diff --git a/assets/icons/arrow_forward.svg b/assets/icons/arrow_forward.svg new file mode 100644 index 00000000..564959c8 --- /dev/null +++ b/assets/icons/arrow_forward.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/dark_mode.svg b/assets/icons/dark_mode.svg new file mode 100644 index 00000000..1345b1b1 --- /dev/null +++ b/assets/icons/dark_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/developer_guide.svg b/assets/icons/developer_guide.svg new file mode 100644 index 00000000..4ab48182 --- /dev/null +++ b/assets/icons/developer_guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/light_mode.svg b/assets/icons/light_mode.svg new file mode 100644 index 00000000..b8838258 --- /dev/null +++ b/assets/icons/light_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/mail.svg b/assets/icons/mail.svg new file mode 100644 index 00000000..90c5e341 --- /dev/null +++ b/assets/icons/mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/scroll_chevron.svg b/assets/icons/scroll_chevron.svg new file mode 100644 index 00000000..93bd84fa --- /dev/null +++ b/assets/icons/scroll_chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/js/entity-modal.js b/assets/js/entity-modal.js new file mode 100644 index 00000000..0086ae44 --- /dev/null +++ b/assets/js/entity-modal.js @@ -0,0 +1,220 @@ +function openEntityModal(element) { + const entityData = element.getAttribute('data-entity'); + + if (!entityData) { + console.warn('[Entity Modal] No data-entity attribute found on element:', element); + return; + } + + let entity; + try { + entity = JSON.parse(entityData); + } catch (error) { + console.warn('[Entity Modal] Failed to parse entity data:', error, 'Element:', element, 'Data:', entityData); + return; + } + + window.lastFocusedEntityButton = element; + const modal = document.getElementById('entityModal'); + const modalContent = modal.querySelector('.modal-content'); + const name = document.getElementById('modalName'); + const desc = document.getElementById('modalDescription'); + const logo = document.getElementById('modalLogo'); + const joined = document.getElementById('modalJoined'); + const joinedItem = document.getElementById('modalJoinedItem'); + const team = document.getElementById('modalTeam'); + const teamItem = document.getElementById('modalTeamItem'); + const modalMeta = document.getElementById('modalMetaArea'); + const link = document.getElementById('modalSiteLink'); + const socials = document.getElementById('modalSocials'); + const entityType = element.getAttribute('data-entity-type') || 'member'; + + const baseUrl = document.documentElement.getAttribute('data-baseurl') || '/'; + const iconsBase = baseUrl.replace(/\/$/, '') + '/assets/svg/'; + + name.textContent = entity.name || 'Unknown'; + desc.innerHTML = window.sanitizeHTML(entity.description || 'No description available.'); + + logo.hidden = true; + logo.onload = () => logo.hidden = false; + logo.src = window.getCurrentLogo(element); + logo.alt = `${entity.name || 'Entity'} logo`; + + const logoUrl = window.getCurrentLogo(element); + const modalLeft = modal.querySelector('.modal-left'); + if (logoUrl) { + const safeLogoUrl = logoUrl.replace(/["\\]/g, '\\$&'); + modalLeft.style.setProperty('--logo-url', `url("${safeLogoUrl}")`); + } else { + modalLeft.style.removeProperty('--logo-url'); + } + + const hasJoined = Boolean(entity.joined); + const hasTeam = Boolean(entity.team && entity.team.length); + + if (hasJoined) { + joinedItem.style.display = ''; + joined.textContent = entity.joined; + } else { + joinedItem.style.display = 'none'; + joined.textContent = 'N/A'; + } + + if (hasTeam) { + teamItem.style.display = ''; + team.textContent = ''; + entity.team.forEach(t => { + const container = document.createElement('div'); + container.className = 'team-member'; + + const icon = document.createElement('div'); + icon.className = 'team-member-icon'; + container.appendChild(icon); + + const span = document.createElement('span'); + span.className = 'team-tag'; + span.textContent = t.name; + container.appendChild(span); + + team.appendChild(container); + }); + } else { + teamItem.style.display = 'none'; + team.textContent = ''; + } + + if (hasJoined || hasTeam) { + modalMeta.style.display = ''; + modal.querySelector('.modal-header-grid')?.classList.remove('no-meta'); + } else { + modalMeta.style.display = 'none'; + modal.querySelector('.modal-header-grid')?.classList.add('no-meta'); + } + + const getSafeUrl = (value, { allowRelative = false } = {}) => { + if (!value) return null; + try { + const url = new URL(value, window.location.origin); + const allowedProtocols = new Set(['http:', 'https:']); + if (!allowedProtocols.has(url.protocol)) return null; + if (!allowRelative && url.origin === window.location.origin && !/^https?:/i.test(value)) { + return null; + } + return url; + } catch { + return null; + } + }; + + if (entity.link) { + const url = getSafeUrl(entity.link, { allowRelative: true }); + if (url) { + url.searchParams.set('utm_source', 'irwa-website'); + link.href = url.toString(); + link.hidden = false; + link.style.display = 'inline-flex'; + } else { + link.removeAttribute('href'); + link.hidden = true; + link.style.display = 'none'; + } + } else { + link.removeAttribute('href'); + link.hidden = true; + link.style.display = 'none'; + } + + socials.textContent = ''; + const addSocial = (href, type) => { + const url = getSafeUrl(href); + if (!url) return; + const a = document.createElement('a'); + a.href = url.toString(); + a.target = '_blank'; + a.rel = 'noopener noreferrer'; + a.setAttribute('aria-label', type); + + const img = document.createElement('img'); + const iconName = type.toLowerCase() === 'game' ? 'roblox' : type.toLowerCase(); + img.src = `${iconsBase}${iconName}.svg`; + img.alt = type; + img.className = 'social-icon'; + img.width = 24; + img.height = 24; + + img.onerror = function () { + const textFallback = document.createElement('span'); + textFallback.textContent = type; + textFallback.className = 'social-text-fallback'; + this.replaceWith(textFallback); + }; + + a.appendChild(img); + socials.appendChild(a); + }; + + addSocial(entity.game_link || '', 'Game'); + addSocial(entity.discord, 'Discord'); + addSocial(entity.twitter, 'Twitter'); + addSocial(entity.kofi, 'Kofi'); + + modal.classList.add('active'); + modalContent.focus(); + document.addEventListener('keydown', trapEntityModalFocus); +} + +function closeEntityModal() { + const modal = document.getElementById('entityModal'); + modal.classList.remove('active'); + + let transitionFinished = false; + const cleanup = () => { + if (transitionFinished) return; + transitionFinished = true; + + modal.removeEventListener('transitionend', cleanup); + modal.removeEventListener('animationend', cleanup); + + if (modal.classList.contains('active')) return; + + document.removeEventListener('keydown', trapEntityModalFocus); + if (window.lastFocusedEntityButton) window.lastFocusedEntityButton.focus(); + }; + + modal.addEventListener('transitionend', cleanup); + modal.addEventListener('animationend', cleanup); + setTimeout(cleanup, 400); +} + +function trapEntityModalFocus(e) { + const modal = document.getElementById('entityModal'); + if (!modal.classList.contains('active')) return; + + if (e.key === 'Escape') { + closeEntityModal(); + return; + } + + if (e.key === 'Tab') { + const focusable = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'); + if (!focusable.length) return; + + const first = focusable[0]; + const last = focusable[focusable.length - 1]; + + if (e.shiftKey) { + if (document.activeElement === first) { + last.focus(); + e.preventDefault(); + } + } else { + if (document.activeElement === last) { + first.focus(); + e.preventDefault(); + } + } + } +} + +window.openEntityModal = openEntityModal; +window.closeEntityModal = closeEntityModal; \ No newline at end of file diff --git a/assets/js/extensionstats.js b/assets/js/extensionstats.js new file mode 100644 index 00000000..a08eea99 --- /dev/null +++ b/assets/js/extensionstats.js @@ -0,0 +1,20 @@ +document.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('.extension-usage[data-extension]').forEach(element => { + const extension = element.getAttribute('data-extension'); + const url = `https://meta.miraheze.org/w/api.php?action=expandtemplates&format=json&smaxage=21600&maxage=21600&text=%7B%7BNUMBEROFWIKISUSINGEXTENSION%3A%20${encodeURIComponent(extension)}%7D%7D&prop=wikitext&formatversion=2&origin=*`; + + fetch(url) + .then(response => { + if (!response.ok) throw new Error('Network response was not ok'); + return response.json(); + }) + .then(data => { + if (data?.expandtemplates?.wikitext != null) { + element.textContent = data.expandtemplates.wikitext; + } + }) + .catch(error => { + console.error('extensionstats fetch error', error); + }); + }); +}); \ No newline at end of file diff --git a/assets/js/overflow-element.js b/assets/js/overflow-element.js new file mode 100644 index 00000000..3510f781 --- /dev/null +++ b/assets/js/overflow-element.js @@ -0,0 +1,180 @@ +/** + * Manages the lifecycle of a single overflow element, composing wrapper + * and state sub-modules. Handles observers, scroll events, and + * resume/pause behavior. + */ +class OverflowElement { + constructor( { + document, window, IntersectionObserver, ResizeObserver, + element, isPointerDevice, config + } ) { + this.document = document; + this.window = window; + this.IntersectionObserver = IntersectionObserver; + this.ResizeObserver = ResizeObserver; + this.element = element; + this.isPointerDevice = isPointerDevice; + this.config = config; + this.onScroll = this._throttle( this.onScroll.bind( this ), 250 ); + this.onClick = this.onClick.bind( this ); + } + + /** + * Simple throttle implementation + */ + _throttle( func, limit ) { + let inThrottle; + return function() { + const args = arguments; + const context = this; + if ( !inThrottle ) { + func.apply( context, args ); + inThrottle = true; + setTimeout( () => inThrottle = false, limit ); + } + }; + } + + /** + * Scrolls the content element by the specified offset. + * + * @param {number} offset + */ + scrollContent( offset ) { + const delta = this.content.scrollWidth - this.content.offsetWidth; + const scrollLeft = Math.floor( this.content.scrollLeft ) + offset; + + this.window.requestAnimationFrame( () => { + this.content.scrollLeft = Math.min( Math.max( scrollLeft, 0 ), delta ); + } ); + } + + /** + * Handles click events on navigation buttons. + * + * @param {Event} event + */ + onClick( event ) { + const target = event.target; + if ( !target.classList.contains( 'overflow-navButton' ) ) { + return; + } + // Prevent triggering the form submit action + event.preventDefault(); + const offset = this.wrapper.offsetWidth / 2; + if ( target.classList.contains( 'overflow-navButton-left' ) ) { + this.scrollContent( -offset ); + } else if ( target.classList.contains( 'overflow-navButton-right' ) ) { + this.scrollContent( offset ); + } + } + + /** + * Handles scroll events (throttled). + */ + onScroll() { + this.state.updateState(); + } + + /** + * Resumes functionality: update state, add listeners, observe resize. + */ + resume() { + this.state.updateState(); + this.content.addEventListener( 'scroll', this.onScroll ); + this.resizeObserver.observe( this.element ); + this.resizeObserver.observe( this.content ); + if ( this.isPointerDevice && this.nav ) { + this.nav.addEventListener( 'click', this.onClick ); + } + } + + /** + * Pauses functionality: remove listeners, unobserve resize. + */ + pause() { + this.content.removeEventListener( 'scroll', this.onScroll ); + this.resizeObserver.unobserve( this.element ); + this.resizeObserver.unobserve( this.content ); + if ( this.isPointerDevice && this.nav ) { + this.nav.removeEventListener( 'click', this.onClick ); + } + } + + /** + * Initialize the overflow element: wrap, set up observers, resume. + */ + init() { + const refs = createOverflowWrapper( { + document: this.document, + element: this.element, + isPointerDevice: this.isPointerDevice, + inheritedClasses: this.config.inheritedClasses || [] + } ); + if ( !refs ) { + return; + } + + this.wrapper = refs.wrapper; + this.content = refs.content; + this.nav = refs.nav; + + this.state = createOverflowState( { + window: this.window, + element: this.element, + content: this.content, + wrapper: this.wrapper, + stickyHeader: null + } ); + + this.resizeObserver = new this.ResizeObserver( () => { + this.state.updateState(); + } ); + + this.intersectionObserver = new this.IntersectionObserver( ( entries ) => { + entries.forEach( ( entry ) => { + if ( entry.isIntersecting ) { + this.resume(); + } else { + this.pause(); + } + } ); + } ); + this.intersectionObserver.observe( this.element ); + } +} + +/** + * Initialize overflow element enhancements for all matching elements. + * + * @param {Object} params + * @param {Document} params.document + * @param {Window} params.window + * @param {HTMLElement} params.bodyContent + * @param {Object} params.config + */ +function initializeOverflow( { + document, window, bodyContent, config +} ) { + const nowrapClasses = config.nowrapClasses || []; + const container = bodyContent || document.body; + + const tableSelector = container.classList.contains('robloxapi') ? 'table' : 'table.table-wrap'; + const overflowElements = container.querySelectorAll(tableSelector); + if ( !overflowElements.length ) { + return; + } + + const isPointerDevice = window.matchMedia( '(hover: hover) and (pointer: fine)' ).matches; + + overflowElements.forEach( ( el ) => { + if ( nowrapClasses.some( ( cls ) => el.classList.contains( cls ) ) ) { + return; + } + + new OverflowElement( { + document, window, IntersectionObserver, ResizeObserver, + element: el, isPointerDevice, config + } ).init(); + } ); +} \ No newline at end of file diff --git a/assets/js/overflow-init.js b/assets/js/overflow-init.js new file mode 100644 index 00000000..3acf43ef --- /dev/null +++ b/assets/js/overflow-init.js @@ -0,0 +1,33 @@ +/** + * Initialize table overflow wrapper when DOM is ready + */ +(function() { + function init() { + if ( !window.IntersectionObserver || !window.ResizeObserver ) { + console.warn( '[Overflow] IntersectionObserver or ResizeObserver not supported' ); + return; + } + + if ( typeof initializeOverflow !== 'function' ) { + console.warn( '[Overflow] initializeOverflow is not loaded' ); + return; + } + + initializeOverflow( { + document: document, + window: window, + bodyContent: document.body, + config: { + nowrapClasses: [ 'nowrap' ], + inheritedClasses: [ 'floatleft', 'floatright', 'floatcenter' ] + } + } ); + } + + // Run when DOM is ready + if ( document.readyState === 'loading' ) { + document.addEventListener( 'DOMContentLoaded', init ); + } else { + init(); + } +})(); diff --git a/assets/js/overflow-state.js b/assets/js/overflow-state.js new file mode 100644 index 00000000..7ef5f725 --- /dev/null +++ b/assets/js/overflow-state.js @@ -0,0 +1,66 @@ +/** + * Manages overflow state detection and class toggling for an overflow element. + * Tracks element dimensions and scroll position, toggling left/right overflow + * indicator classes. + */ +function createOverflowState( { window, element, content, wrapper, stickyHeader } ) { + let elementWidth = 0; + let contentScrollLeft = 0; + let contentWidth = 0; + + function hasStateChanged() { + return ( + element.scrollWidth !== elementWidth || + Math.round( content.scrollLeft ) !== contentScrollLeft || + content.offsetWidth !== contentWidth + ); + } + + function hasOverflowed() { + return element.scrollWidth > content.offsetWidth; + } + + function toggleClasses( classes ) { + classes.forEach( ( [ condition, className ] ) => { + const hasClass = wrapper.classList.contains( className ); + if ( condition && !hasClass ) { + wrapper.classList.add( className ); + } else if ( !condition && hasClass ) { + wrapper.classList.remove( className ); + } + } ); + } + + function updateState() { + if ( !hasStateChanged() ) { + return; + } + + elementWidth = element.scrollWidth; + contentScrollLeft = Math.round( content.scrollLeft ); + contentWidth = content.offsetWidth; + + let isLeftOverflowing, isRightOverflowing; + + if ( !hasOverflowed() ) { + isLeftOverflowing = false; + isRightOverflowing = false; + } else { + isLeftOverflowing = contentScrollLeft > 0; + isRightOverflowing = + contentScrollLeft + contentWidth < elementWidth; + } + + window.requestAnimationFrame( () => { + toggleClasses( [ + [ isLeftOverflowing, 'overflow--left' ], + [ isRightOverflowing, 'overflow--right' ] + ] ); + if ( stickyHeader ) { + stickyHeader.style.setProperty( '--overflow-scroll-x', contentScrollLeft + 'px' ); + } + } ); + } + + return { updateState, hasOverflowed }; +} diff --git a/assets/js/overflow-wrapper.js b/assets/js/overflow-wrapper.js new file mode 100644 index 00000000..504228bd --- /dev/null +++ b/assets/js/overflow-wrapper.js @@ -0,0 +1,64 @@ +/** + * Creates the DOM wrapper structure for an overflow element. + * Handles inherited class migration (floatleft, floatright, etc.) + * and optional navigation buttons for pointer devices. + */ +function createOverflowWrapper( { document, element, isPointerDevice, inheritedClasses } ) { + if ( !element || !element.parentNode ) { + console.error( + '[Overflow] Element or element.parentNode is null or undefined.' + ); + return null; + } + + try { + const fragment = document.createDocumentFragment(); + + const wrapper = document.createElement( 'div' ); + wrapper.className = 'overflow-wrapper'; + fragment.appendChild( wrapper ); + + // Migrate inherited classes from element to wrapper + if ( inheritedClasses ) { + inheritedClasses.forEach( ( cls ) => { + if ( element.classList.contains( cls ) ) { + wrapper.classList.add( cls ); + element.classList.remove( cls ); + } + } ); + } + + let nav = null; + if ( isPointerDevice ) { + const createButton = ( type ) => { + const button = document.createElement( 'button' ); + button.type = 'button'; + button.className = `overflow-navButton overflow-navButton-${ type } ui-icon mw-ui-icon-wikimedia-collapse`; + button.setAttribute( 'aria-label', `Scroll ${ type }` ); + button.setAttribute( 'title', `Scroll ${ type }` ); + return button; + }; + + nav = document.createElement( 'div' ); + nav.className = 'overflow-nav'; + nav.appendChild( createButton( 'left' ) ); + nav.appendChild( createButton( 'right' ) ); + wrapper.appendChild( nav ); + } + + const content = document.createElement( 'div' ); + content.className = 'overflow-content'; + wrapper.appendChild( content ); + + const parentNode = element.parentNode; + parentNode.insertBefore( fragment, element ); + content.appendChild( element ); + + return { wrapper, content, nav }; + } catch ( error ) { + console.error( + `[Overflow] Error occurred while wrapping element: ${ error.message }` + ); + return null; + } +} \ No newline at end of file diff --git a/assets/js/scripts.js b/assets/js/scripts.js index 391bfdb5..958563dc 100644 --- a/assets/js/scripts.js +++ b/assets/js/scripts.js @@ -1,684 +1,828 @@ -// Dropdown menu -(function (menuConfig) { - /** - * Merge default config with the theme overrided ones - */ - var defaultConfig = { - // behaviour - mobileMenuMode: 'overlay', - animationSpeed: 300, - submenuWidth: 300, - doubleClickTime: 500, - mobileMenuExpandableSubmenus: false, - isHoverMenu: true, - // selectors - wrapperSelector: '.navbar', - buttonSelector: '.navbar__toggle', - menuSelector: '.navbar__menu', - submenuSelector: '.navbar__submenu', - mobileMenuSidebarLogoSelector: null, - mobileMenuSidebarLogoUrl: null, - relatedContainerForOverlayMenuSelector: null, - // attributes - ariaButtonAttribute: 'aria-haspopup', - // CSS classes - separatorItemClass: 'is-separator', - parentItemClass: 'has-submenu', - submenuLeftPositionClass: 'is-left-submenu', - submenuRightPositionClass: 'is-right-submenu', - mobileMenuOverlayClass: 'navbar_mobile_overlay', - mobileMenuSubmenuWrapperClass: 'navbar__submenu_wrapper', - mobileMenuSidebarClass: 'navbar_mobile_sidebar', - mobileMenuSidebarOverlayClass: 'navbar_mobile_sidebar__overlay', - hiddenElementClass: 'is-hidden', - openedMenuClass: 'is-active', - noScrollClass: 'no-scroll', - relatedContainerForOverlayMenuClass: 'is-visible' - }; - - var config = {}; - - Object.keys(defaultConfig).forEach(function(key) { - config[key] = defaultConfig[key]; - }); - - if (typeof menuConfig === 'object') { - Object.keys(menuConfig).forEach(function(key) { - config[key] = menuConfig[key]; - }); - } - - /** - * Menu initializer - */ - function init () { - if (!document.querySelectorAll(config.wrapperSelector).length) { - return; - } - - initSubmenuPositions(); - - if (config.mobileMenuMode === 'overlay') { - initMobileMenuOverlay(); - } else if (config.mobileMenuMode === 'sidebar') { - initMobileMenuSidebar(); - } - - initClosingMenuOnClickLink(); - - if (!config.isHoverMenu) { - initAriaAttributes(); - } - }; - - /** - * Function responsible for the submenu positions - */ - function initSubmenuPositions () { - var submenuParents = document.querySelectorAll(config.wrapperSelector + ' .' + config.parentItemClass); - - for (var i = 0; i < submenuParents.length; i++) { - var eventTrigger = config.isHoverMenu ? 'mouseenter' : 'click'; - - submenuParents[i].addEventListener(eventTrigger, function () { - var submenu = this.querySelector(config.submenuSelector); - var itemPosition = this.getBoundingClientRect().left; - var widthMultiplier = 2; - - if (this.parentNode === document.querySelector(config.menuSelector)) { - widthMultiplier = 1; - } - - if (config.submenuWidth !== 'auto') { - var submenuPotentialPosition = itemPosition + (config.submenuWidth * widthMultiplier); - - if (window.innerWidth < submenuPotentialPosition) { - submenu.classList.remove(config.submenuLeftPositionClass); - submenu.classList.add(config.submenuRightPositionClass); - } else { - submenu.classList.remove(config.submenuRightPositionClass); - submenu.classList.add(config.submenuLeftPositionClass); - } - } else { - var submenuPotentialPosition = 0; - var submenuPosition = 0; - - if (widthMultiplier === 1) { - submenuPotentialPosition = itemPosition + submenu.clientWidth; - } else { - submenuPotentialPosition = itemPosition + this.clientWidth + submenu.clientWidth; - } - - if (window.innerWidth < submenuPotentialPosition) { - submenu.classList.remove(config.submenuLeftPositionClass); - submenu.classList.add(config.submenuRightPositionClass); - submenuPosition = -1 * submenu.clientWidth; - submenu.removeAttribute('style'); - - if (widthMultiplier === 1) { - submenuPosition = 0; - submenu.style.right = submenuPosition + 'px'; - } else { - submenu.style.right = this.clientWidth + 'px'; - } - } else { - submenu.classList.remove(config.submenuRightPositionClass); - submenu.classList.add(config.submenuLeftPositionClass); - submenuPosition = this.clientWidth; - - if (widthMultiplier === 1) { - submenuPosition = 0; - } - - submenu.removeAttribute('style'); - submenu.style.left = submenuPosition + 'px'; - } - } - - submenu.setAttribute('aria-hidden', false); - }); - - if (config.isHoverMenu) { - submenuParents[i].addEventListener('mouseleave', function () { - var submenu = this.querySelector(config.submenuSelector); - submenu.removeAttribute('style'); - submenu.setAttribute('aria-hidden', true); - }); - } - } - } - - /** - * Function used to init mobile menu - overlay mode - */ - function initMobileMenuOverlay () { - var menuWrapper = document.createElement('div'); - menuWrapper.classList.add(config.mobileMenuOverlayClass); - menuWrapper.classList.add(config.hiddenElementClass); - var menuContentHTML = document.querySelector(config.menuSelector).outerHTML; - menuWrapper.innerHTML = menuContentHTML; - document.body.appendChild(menuWrapper); - - // Init toggle submenus - if (config.mobileMenuExpandableSubmenus) { - wrapSubmenusIntoContainer(menuWrapper); - initToggleSubmenu(menuWrapper); - } else { - setAriaForSubmenus(menuWrapper); - } - - // Init button events - var button = document.querySelector(config.buttonSelector); - - button.addEventListener('click', function () { - var relatedContainer = document.querySelector(config.relatedContainerForOverlayMenuSelector); - menuWrapper.classList.toggle(config.hiddenElementClass); - button.classList.toggle(config.openedMenuClass); - button.setAttribute(config.ariaButtonAttribute, button.classList.contains(config.openedMenuClass)); - - if (button.classList.contains(config.openedMenuClass)) { - document.documentElement.classList.add(config.noScrollClass); - - if (relatedContainer) { - relatedContainer.classList.add(config.relatedContainerForOverlayMenuClass); - } - } else { - document.documentElement.classList.remove(config.noScrollClass); - - if (relatedContainer) { - relatedContainer.classList.remove(config.relatedContainerForOverlayMenuClass); - } - } - }); - } - - /** - * Function used to init mobile menu - sidebar mode - */ - function initMobileMenuSidebar () { - // Create menu structure - var menuWrapper = document.createElement('div'); - menuWrapper.classList.add(config.mobileMenuSidebarClass); - menuWrapper.classList.add(config.hiddenElementClass); - var menuContentHTML = ''; - - if (config.mobileMenuSidebarLogoSelector !== null) { - menuContentHTML = document.querySelector(config.mobileMenuSidebarLogoSelector).outerHTML; - } else if (config.mobileMenuSidebarLogoUrl !== null) { - menuContentHTML = ''; - } - - menuContentHTML += document.querySelector(config.menuSelector).outerHTML; - menuWrapper.innerHTML = menuContentHTML; - - var menuOverlay = document.createElement('div'); - menuOverlay.classList.add(config.mobileMenuSidebarOverlayClass); - menuOverlay.classList.add(config.hiddenElementClass); - - document.body.appendChild(menuOverlay); - document.body.appendChild(menuWrapper); - - // Init toggle submenus - if (config.mobileMenuExpandableSubmenus) { - wrapSubmenusIntoContainer(menuWrapper); - initToggleSubmenu(menuWrapper); - } else { - setAriaForSubmenus(menuWrapper); - } - - // Menu events - menuWrapper.addEventListener('click', function (e) { - e.stopPropagation(); - }); - - menuOverlay.addEventListener('click', function () { - menuWrapper.classList.add(config.hiddenElementClass); - menuOverlay.classList.add(config.hiddenElementClass); - button.classList.remove(config.openedMenuClass); - button.setAttribute(config.ariaButtonAttribute, false); - document.documentElement.classList.remove(config.noScrollClass); - }); - - // Init button events - var button = document.querySelector(config.buttonSelector); - - button.addEventListener('click', function () { - menuWrapper.classList.toggle(config.hiddenElementClass); - menuOverlay.classList.toggle(config.hiddenElementClass); - button.classList.toggle(config.openedMenuClass); - button.setAttribute(config.ariaButtonAttribute, button.classList.contains(config.openedMenuClass)); - document.documentElement.classList.toggle(config.noScrollClass); - }); - } - - /** - * Set aria-hidden="false" for submenus - */ - function setAriaForSubmenus (menuWrapper) { - var submenus = menuWrapper.querySelectorAll(config.submenuSelector); - - for (var i = 0; i < submenus.length; i++) { - submenus[i].setAttribute('aria-hidden', false); - } - } - - /** - * Wrap all submenus into div wrappers - */ - function wrapSubmenusIntoContainer (menuWrapper) { - var submenus = menuWrapper.querySelectorAll(config.submenuSelector); - - for (var i = 0; i < submenus.length; i++) { - var submenuWrapper = document.createElement('div'); - submenuWrapper.classList.add(config.mobileMenuSubmenuWrapperClass); - submenus[i].parentNode.insertBefore(submenuWrapper, submenus[i]); - submenuWrapper.appendChild(submenus[i]); - } - } - - /** - * Initialize submenu toggle events - */ - function initToggleSubmenu (menuWrapper) { - // Init parent menu item events - var parents = menuWrapper.querySelectorAll('.' + config.parentItemClass); - - for (var i = 0; i < parents.length; i++) { - // Add toggle events - parents[i].addEventListener('click', function (e) { - e.stopPropagation(); - var submenu = this.querySelector('.' + config.mobileMenuSubmenuWrapperClass); - var content = submenu.firstElementChild; - - if (submenu.classList.contains(config.openedMenuClass)) { - var height = content.clientHeight; - submenu.style.height = height + 'px'; - - setTimeout(function () { - submenu.style.height = '0px'; - }, 0); - - setTimeout(function () { - submenu.removeAttribute('style'); - submenu.classList.remove(config.openedMenuClass); - }, config.animationSpeed); - - content.setAttribute('aria-hidden', true); - content.parentNode.firstElementChild.setAttribute('aria-expanded', false); - } else { - var height = content.clientHeight; - submenu.classList.add(config.openedMenuClass); - submenu.style.height = '0px'; - - setTimeout(function () { - submenu.style.height = height + 'px'; - }, 0); - - setTimeout(function () { - submenu.removeAttribute('style'); - }, config.animationSpeed); - - content.setAttribute('aria-hidden', false); - content.parentNode.firstElementChild.setAttribute('aria-expanded', true); - } - }); - - // Block links - var childNodes = parents[i].children; - - for (var j = 0; j < childNodes.length; j++) { - if (childNodes[j].tagName === 'A') { - childNodes[j].addEventListener('click', function (e) { - var lastClick = parseInt(this.getAttribute('data-last-click'), 10); - var currentTime = +new Date(); - - if (isNaN(lastClick)) { - e.preventDefault(); - this.setAttribute('data-last-click', currentTime); - } else if (lastClick + config.doubleClickTime <= currentTime) { - e.preventDefault(); - this.setAttribute('data-last-click', currentTime); - } else if (lastClick + config.doubleClickTime > currentTime) { - e.stopPropagation(); - closeMenu(this, true); - } - }); - } - } - } - } - - /** - * Set aria-* attributes according to the current activity state - */ - function initAriaAttributes () { - var allAriaElements = document.querySelectorAll(config.wrapperSelector + ' ' + '*[aria-hidden]'); - - for (var i = 0; i < allAriaElements.length; i++) { - var ariaElement = allAriaElements[i]; - - if ( - ariaElement.parentNode.classList.contains('active') || - ariaElement.parentNode.classList.contains('active-parent') - ) { - ariaElement.setAttribute('aria-hidden', 'false'); - ariaElement.parentNode.firstElementChild.setAttribute('aria-expanded', true); - } else { - ariaElement.setAttribute('aria-hidden', 'true'); - ariaElement.parentNode.firstElementChild.setAttribute('aria-expanded', false); - } - } - } - - /** - * Close menu on click link - */ - function initClosingMenuOnClickLink () { - var links = document.querySelectorAll(config.menuSelector + ' a'); - - for (var i = 0; i < links.length; i++) { - if (links[i].parentNode.classList.contains(config.parentItemClass)) { - continue; - } - - links[i].addEventListener('click', function (e) { - closeMenu(this, false); - }); - } - } - - /** - * Close menu - */ - function closeMenu (clickedLink, forceClose) { - if (forceClose === false) { - if (clickedLink.parentNode.classList.contains(config.parentItemClass)) { - return; - } - } - - var relatedContainer = document.querySelector(config.relatedContainerForOverlayMenuSelector); - var button = document.querySelector(config.buttonSelector); - var menuWrapper = document.querySelector('.' + config.mobileMenuOverlayClass); - - if (!menuWrapper) { - menuWrapper = document.querySelector('.' + config.mobileMenuSidebarClass); - } - - menuWrapper.classList.add(config.hiddenElementClass); - button.classList.remove(config.openedMenuClass); - button.setAttribute(config.ariaButtonAttribute, false); - document.documentElement.classList.remove(config.noScrollClass); - - if (relatedContainer) { - relatedContainer.classList.remove(config.relatedContainerForOverlayMenuClass); - } - - var menuOverlay = document.querySelector('.' + config.mobileMenuSidebarOverlayClass); - - if (menuOverlay) { - menuOverlay.classList.add(config.hiddenElementClass); - } - } - - /** - * Run menu scripts - */ - init(); -})(window.publiiThemeMenuConfig); - - -// Share buttons pop-up -(function () { - // share popup - const shareButton = document.querySelector('.js-content__share-button'); - const sharePopup = document.querySelector('.js-content__share-popup'); - - if (shareButton && sharePopup) { - sharePopup.addEventListener('click', function (e) { - e.stopPropagation(); - }); - - shareButton.addEventListener('click', function (e) { - e.preventDefault(); - e.stopPropagation(); - sharePopup.classList.toggle('is-visible'); - }); - - document.body.addEventListener('click', function () { - sharePopup.classList.remove('is-visible'); - }); - } - - // link selector and pop-up window size - const Config = { - Link: ".js-share", - Width: 500, - Height: 500 - }; - - // add handler to links - const shareLinks = document.querySelectorAll(Config.Link); - shareLinks.forEach(link => { - link.addEventListener('click', PopupHandler); - }); - - // create popup - function PopupHandler(e) { - e.preventDefault(); - - const target = e.target.closest(Config.Link); - if (!target) return; - - // hide share popup - if (sharePopup) { - sharePopup.classList.remove('is-visible'); - } - - // popup position - const px = Math.floor((window.innerWidth - Config.Width) / 2); - const py = Math.floor((window.innerHeight - Config.Height) / 2); - - // open popup - const linkHref = target.href; - const popup = window.open(linkHref, "social", ` - width=${Config.Width}, - height=${Config.Height}, - left=${px}, - top=${py}, - location=0, - menubar=0, - toolbar=0, - status=0, - scrollbars=1, - resizable=1 - `); - - if (popup) { - popup.focus(); - } - } -})(); - -// Back to top -const backToTopButton = document.getElementById("backToTop"); - -if (backToTopButton) { - window.addEventListener('scroll', () => { - if (document.body.scrollTop > 400 || document.documentElement.scrollTop > 400) { - backToTopButton.classList.add("is-visible"); - } else { - backToTopButton.classList.remove("is-visible"); - } - }); - - backToTopButton.addEventListener('click', () => { - window.scrollTo({ top: 0, behavior: 'smooth' }); - }); -} - - -/** - * Responsive embeds script - */ - (function () { - let wrappers = document.querySelectorAll('.post__video, .post__iframe'); - - for (let i = 0; i < wrappers.length; i++) { - let embed = wrappers[i].querySelector('iframe, embed, video, object'); - - if (!embed) { - continue; - } - - if (embed.getAttribute('data-responsive') === 'false') { - continue; - } - - let w = embed.getAttribute('width'); - let h = embed.getAttribute('height'); - let ratio = false; - - if (!w || !h) { - continue; - } - - if (w.indexOf('%') > -1 && h.indexOf('%') > -1) { // percentage mode - w = parseFloat(w.replace('%', '')); - h = parseFloat(h.replace('%', '')); - ratio = h / w; - } else if (w.indexOf('%') === -1 && h.indexOf('%') === -1) { // pixels mode - w = parseInt(w, 10); - h = parseInt(h, 10); - ratio = h / w; - } - - if (ratio !== false) { - let ratioValue = (ratio * 100) + '%'; - wrappers[i].setAttribute('style', '--embed-aspect-ratio:' + ratioValue); - } - } -})(); - -// Search -const searchButton = document.querySelector('.js-search-btn'); -const searchOverlay = document.querySelector('.js-search-overlay'); -const searchInput = document.querySelector('.search__input'); - -if (searchButton && searchOverlay) { - searchButton.addEventListener('click', (e) => { - e.stopPropagation(); - searchOverlay.classList.toggle('expanded'); - - if (searchInput) { - setTimeout(() => { - if (searchOverlay.classList.contains('expanded')) { - searchInput.focus(); - } - }, 60); - } - }); - - searchOverlay.addEventListener('click', (e) => { - e.stopPropagation(); - }); - - document.body.addEventListener('click', () => { - searchOverlay.classList.remove('expanded'); - }); -} - - -/** - * Layout switcher - */ - (function () { - let layoutButtons = document.querySelectorAll('.switchers__item'); - let contentWrapper = document.querySelector('.l-grid'); - let articles; - - if (contentWrapper) { - articles = contentWrapper.querySelectorAll('.c-card'); - } - - if (!contentWrapper || !layoutButtons.length || (articles && !articles.length)) { - return; - } - - let gridBtn = layoutButtons[0]; - let rowsBtn = layoutButtons[1]; - - gridBtn.addEventListener('click', e => { - e.preventDefault(); - let isActive = gridBtn.classList.contains('is-active'); - - if (!isActive) { - setGridLayout(); - } - }); - - rowsBtn.addEventListener('click', e => { - e.preventDefault(); - let isActive = rowsBtn.classList.contains('is-active'); - - if (!isActive) { - setRowsLayout(); - } - }); - - function setGridLayout () { - gridBtn.classList.add('is-active'); - rowsBtn.classList.remove('is-active'); - contentWrapper.classList.remove('l-grid--1'); - articles = contentWrapper.querySelectorAll('.c-card'); - - for (let i = 0; i < articles.length; i++) { - articles[i].classList.remove('c-card--rows'); - } - - localStorage.setItem('persona-theme-selected-layout', 'grid'); - resetIsotopeLayout(); - } - - function setRowsLayout () { - gridBtn.classList.remove('is-active'); - rowsBtn.classList.add('is-active'); - contentWrapper.classList.add('l-grid--1'); - articles = contentWrapper.querySelectorAll('.c-card'); - - for (let i = 0; i < articles.length; i++) { - articles[i].classList.add('c-card--rows'); - } - - localStorage.setItem('persona-theme-selected-layout', 'rows'); - resetIsotopeLayout(); - } - - function resetIsotopeLayout () { - if (window.personaThemeIsotopeInstance) { - if (document.querySelector('.filter__item.is-active')) { - window.personaThemeIsotopeInstance.arrange({ - filter: document.querySelector('.filter__item.is-active').getAttribute('data-filter') - }); - } else { - window.personaThemeIsotopeInstance.arrange(); - } - } - } - - window.addEventListener("DOMContentLoaded", function () { - setTimeout(() => { - if (localStorage.getItem('persona-theme-selected-layout')) { - let savedLayout = localStorage.getItem('persona-theme-selected-layout'); - - if (savedLayout === 'grid') { - setGridLayout(); - } - - if (savedLayout === 'rows') { - setRowsLayout(); - } - } - }, 0); - }, false); -})(); \ No newline at end of file +// Dropdown menu +(function (menuConfig) { + /** + * Merge default config with the theme overrided ones + */ + var defaultConfig = { + // behaviour + mobileMenuMode: 'overlay', + animationSpeed: 300, + submenuWidth: 300, + doubleClickTime: 500, + mobileMenuExpandableSubmenus: false, + isHoverMenu: true, + // selectors + wrapperSelector: '.navbar', + buttonSelector: '.navbar__toggle', + menuSelector: '.navbar__menu', + submenuSelector: '.navbar__submenu', + mobileMenuSidebarLogoSelector: null, + mobileMenuSidebarLogoUrl: null, + relatedContainerForOverlayMenuSelector: null, + // attributes + ariaButtonAttribute: 'aria-haspopup', + // CSS classes + separatorItemClass: 'is-separator', + parentItemClass: 'has-submenu', + submenuLeftPositionClass: 'is-left-submenu', + submenuRightPositionClass: 'is-right-submenu', + mobileMenuOverlayClass: 'navbar_mobile_overlay', + mobileMenuSubmenuWrapperClass: 'navbar__submenu_wrapper', + mobileMenuSidebarClass: 'navbar_mobile_sidebar', + mobileMenuSidebarOverlayClass: 'navbar_mobile_sidebar__overlay', + hiddenElementClass: 'is-hidden', + openedMenuClass: 'is-active', + noScrollClass: 'no-scroll', + relatedContainerForOverlayMenuClass: 'is-visible' + }; + + var config = {}; + + Object.keys(defaultConfig).forEach(function (key) { + config[key] = defaultConfig[key]; + }); + + if (typeof menuConfig === 'object') { + Object.keys(menuConfig).forEach(function (key) { + config[key] = menuConfig[key]; + }); + } + + /** + * Menu initializer + */ + function init() { + if (!document.querySelectorAll(config.wrapperSelector).length) { + return; + } + + initSubmenuPositions(); + + if (config.mobileMenuMode === 'overlay') { + initMobileMenuOverlay(); + } else if (config.mobileMenuMode === 'sidebar') { + initMobileMenuSidebar(); + } + + initClosingMenuOnClickLink(); + + if (!config.isHoverMenu) { + initAriaAttributes(); + } + }; + + /** + * Function responsible for the submenu positions + */ + function initSubmenuPositions() { + var submenuParents = document.querySelectorAll(config.wrapperSelector + ' .' + config.parentItemClass); + + for (var i = 0; i < submenuParents.length; i++) { + var eventTrigger = config.isHoverMenu ? 'mouseenter' : 'click'; + + submenuParents[i].addEventListener(eventTrigger, function () { + var submenu = this.querySelector(config.submenuSelector); + var itemPosition = this.getBoundingClientRect().left; + var widthMultiplier = 2; + + if (this.parentNode === document.querySelector(config.menuSelector)) { + widthMultiplier = 1; + } + + if (config.submenuWidth !== 'auto') { + var submenuPotentialPosition = itemPosition + (config.submenuWidth * widthMultiplier); + + if (window.innerWidth < submenuPotentialPosition) { + submenu.classList.remove(config.submenuLeftPositionClass); + submenu.classList.add(config.submenuRightPositionClass); + } else { + submenu.classList.remove(config.submenuRightPositionClass); + submenu.classList.add(config.submenuLeftPositionClass); + } + } else { + var submenuPotentialPosition = 0; + var submenuPosition = 0; + + if (widthMultiplier === 1) { + submenuPotentialPosition = itemPosition + submenu.clientWidth; + } else { + submenuPotentialPosition = itemPosition + this.clientWidth + submenu.clientWidth; + } + + if (window.innerWidth < submenuPotentialPosition) { + submenu.classList.remove(config.submenuLeftPositionClass); + submenu.classList.add(config.submenuRightPositionClass); + submenuPosition = -1 * submenu.clientWidth; + submenu.removeAttribute('style'); + + if (widthMultiplier === 1) { + submenuPosition = 0; + submenu.style.right = submenuPosition + 'px'; + } else { + submenu.style.right = this.clientWidth + 'px'; + } + } else { + submenu.classList.remove(config.submenuRightPositionClass); + submenu.classList.add(config.submenuLeftPositionClass); + submenuPosition = this.clientWidth; + + if (widthMultiplier === 1) { + submenuPosition = 0; + } + + submenu.removeAttribute('style'); + submenu.style.left = submenuPosition + 'px'; + } + } + + submenu.setAttribute('aria-hidden', false); + }); + + if (config.isHoverMenu) { + submenuParents[i].addEventListener('mouseleave', function () { + var submenu = this.querySelector(config.submenuSelector); + submenu.removeAttribute('style'); + submenu.setAttribute('aria-hidden', true); + }); + } + } + } + + /** + * Function used to init mobile menu - overlay mode + */ + function initMobileMenuOverlay() { + var menuWrapper = document.createElement('div'); + menuWrapper.classList.add(config.mobileMenuOverlayClass); + menuWrapper.classList.add(config.hiddenElementClass); + var menuContentHTML = document.querySelector(config.menuSelector).outerHTML; + menuWrapper.innerHTML = menuContentHTML; + document.body.appendChild(menuWrapper); + + // Init toggle submenus + if (config.mobileMenuExpandableSubmenus) { + wrapSubmenusIntoContainer(menuWrapper); + initToggleSubmenu(menuWrapper); + } else { + setAriaForSubmenus(menuWrapper); + } + + // Init button events + var button = document.querySelector(config.buttonSelector); + + button.addEventListener('click', function () { + var relatedContainer = document.querySelector(config.relatedContainerForOverlayMenuSelector); + menuWrapper.classList.toggle(config.hiddenElementClass); + button.classList.toggle(config.openedMenuClass); + button.setAttribute(config.ariaButtonAttribute, button.classList.contains(config.openedMenuClass)); + + if (button.classList.contains(config.openedMenuClass)) { + document.documentElement.classList.add(config.noScrollClass); + + if (relatedContainer) { + relatedContainer.classList.add(config.relatedContainerForOverlayMenuClass); + } + } else { + document.documentElement.classList.remove(config.noScrollClass); + + if (relatedContainer) { + relatedContainer.classList.remove(config.relatedContainerForOverlayMenuClass); + } + } + }); + } + + /** + * Function used to init mobile menu - sidebar mode + */ + function initMobileMenuSidebar() { + // Create menu structure + var menuWrapper = document.createElement('div'); + menuWrapper.classList.add(config.mobileMenuSidebarClass); + menuWrapper.classList.add(config.hiddenElementClass); + var menuContentHTML = ''; + + if (config.mobileMenuSidebarLogoSelector !== null) { + menuContentHTML = document.querySelector(config.mobileMenuSidebarLogoSelector).outerHTML; + } else if (config.mobileMenuSidebarLogoUrl !== null) { + menuContentHTML = ''; + } + + menuContentHTML += document.querySelector(config.menuSelector).outerHTML; + menuWrapper.innerHTML = menuContentHTML; + + var menuOverlay = document.createElement('div'); + menuOverlay.classList.add(config.mobileMenuSidebarOverlayClass); + menuOverlay.classList.add(config.hiddenElementClass); + + document.body.appendChild(menuOverlay); + document.body.appendChild(menuWrapper); + + // Init toggle submenus + if (config.mobileMenuExpandableSubmenus) { + wrapSubmenusIntoContainer(menuWrapper); + initToggleSubmenu(menuWrapper); + } else { + setAriaForSubmenus(menuWrapper); + } + + // Menu events + menuWrapper.addEventListener('click', function (e) { + e.stopPropagation(); + }); + + menuOverlay.addEventListener('click', function () { + menuWrapper.classList.add(config.hiddenElementClass); + menuOverlay.classList.add(config.hiddenElementClass); + button.classList.remove(config.openedMenuClass); + button.setAttribute(config.ariaButtonAttribute, false); + document.documentElement.classList.remove(config.noScrollClass); + }); + + // Init button events + var button = document.querySelector(config.buttonSelector); + + button.addEventListener('click', function () { + menuWrapper.classList.toggle(config.hiddenElementClass); + menuOverlay.classList.toggle(config.hiddenElementClass); + button.classList.toggle(config.openedMenuClass); + button.setAttribute(config.ariaButtonAttribute, button.classList.contains(config.openedMenuClass)); + document.documentElement.classList.toggle(config.noScrollClass); + }); + } + + /** + * Set aria-hidden="false" for submenus + */ + function setAriaForSubmenus(menuWrapper) { + var submenus = menuWrapper.querySelectorAll(config.submenuSelector); + + for (var i = 0; i < submenus.length; i++) { + submenus[i].setAttribute('aria-hidden', false); + } + } + + /** + * Wrap all submenus into div wrappers + */ + function wrapSubmenusIntoContainer(menuWrapper) { + var submenus = menuWrapper.querySelectorAll(config.submenuSelector); + + for (var i = 0; i < submenus.length; i++) { + var submenuWrapper = document.createElement('div'); + submenuWrapper.classList.add(config.mobileMenuSubmenuWrapperClass); + submenus[i].parentNode.insertBefore(submenuWrapper, submenus[i]); + submenuWrapper.appendChild(submenus[i]); + } + } + + /** + * Initialize submenu toggle events + */ + function initToggleSubmenu(menuWrapper) { + // Init parent menu item events + var parents = menuWrapper.querySelectorAll('.' + config.parentItemClass); + + for (var i = 0; i < parents.length; i++) { + // Add toggle events + parents[i].addEventListener('click', function (e) { + e.stopPropagation(); + var submenu = this.querySelector('.' + config.mobileMenuSubmenuWrapperClass); + var content = submenu.firstElementChild; + + if (submenu.classList.contains(config.openedMenuClass)) { + var height = content.clientHeight; + submenu.style.height = height + 'px'; + + setTimeout(function () { + submenu.style.height = '0px'; + }, 0); + + setTimeout(function () { + submenu.removeAttribute('style'); + submenu.classList.remove(config.openedMenuClass); + }, config.animationSpeed); + + content.setAttribute('aria-hidden', true); + content.parentNode.firstElementChild.setAttribute('aria-expanded', false); + } else { + var height = content.clientHeight; + submenu.classList.add(config.openedMenuClass); + submenu.style.height = '0px'; + + setTimeout(function () { + submenu.style.height = height + 'px'; + }, 0); + + setTimeout(function () { + submenu.removeAttribute('style'); + }, config.animationSpeed); + + content.setAttribute('aria-hidden', false); + content.parentNode.firstElementChild.setAttribute('aria-expanded', true); + } + }); + + // Block links + var childNodes = parents[i].children; + + for (var j = 0; j < childNodes.length; j++) { + if (childNodes[j].tagName === 'A') { + childNodes[j].addEventListener('click', function (e) { + var lastClick = parseInt(this.getAttribute('data-last-click'), 10); + var currentTime = +new Date(); + + if (isNaN(lastClick)) { + e.preventDefault(); + this.setAttribute('data-last-click', currentTime); + } else if (lastClick + config.doubleClickTime <= currentTime) { + e.preventDefault(); + this.setAttribute('data-last-click', currentTime); + } else if (lastClick + config.doubleClickTime > currentTime) { + e.stopPropagation(); + closeMenu(this, true); + } + }); + } + } + } + } + + /** + * Set aria-* attributes according to the current activity state + */ + function initAriaAttributes() { + var allAriaElements = document.querySelectorAll(config.wrapperSelector + ' ' + '*[aria-hidden]'); + + for (var i = 0; i < allAriaElements.length; i++) { + var ariaElement = allAriaElements[i]; + + if ( + ariaElement.parentNode.classList.contains('active') || + ariaElement.parentNode.classList.contains('active-parent') + ) { + ariaElement.setAttribute('aria-hidden', 'false'); + ariaElement.parentNode.firstElementChild.setAttribute('aria-expanded', true); + } else { + ariaElement.setAttribute('aria-hidden', 'true'); + ariaElement.parentNode.firstElementChild.setAttribute('aria-expanded', false); + } + } + } + + /** + * Close menu on click link + */ + function initClosingMenuOnClickLink() { + var links = document.querySelectorAll(config.menuSelector + ' a'); + + for (var i = 0; i < links.length; i++) { + if (links[i].parentNode.classList.contains(config.parentItemClass)) { + continue; + } + + links[i].addEventListener('click', function (e) { + closeMenu(this, false); + }); + } + } + + /** + * Close menu + */ + function closeMenu(clickedLink, forceClose) { + if (forceClose === false) { + if (clickedLink.parentNode.classList.contains(config.parentItemClass)) { + return; + } + } + + var relatedContainer = document.querySelector(config.relatedContainerForOverlayMenuSelector); + var button = document.querySelector(config.buttonSelector); + var menuWrapper = document.querySelector('.' + config.mobileMenuOverlayClass); + + if (!menuWrapper) { + menuWrapper = document.querySelector('.' + config.mobileMenuSidebarClass); + } + + menuWrapper.classList.add(config.hiddenElementClass); + button.classList.remove(config.openedMenuClass); + button.setAttribute(config.ariaButtonAttribute, false); + document.documentElement.classList.remove(config.noScrollClass); + + if (relatedContainer) { + relatedContainer.classList.remove(config.relatedContainerForOverlayMenuClass); + } + + var menuOverlay = document.querySelector('.' + config.mobileMenuSidebarOverlayClass); + + if (menuOverlay) { + menuOverlay.classList.add(config.hiddenElementClass); + } + } + + /** + * Run menu scripts + */ + init(); +})(window.publiiThemeMenuConfig); + +/** + * Basic HTML sanitizer to allow safe formatting tags + */ +window.sanitizeHTML = function (html) { + // If the string starts with <, it was escaped by Liquid. + // We need to unescape it first so DOMParser can see the tags. + let unescaped = html; + if (html.includes('<') || html.includes('>')) { + const temp = document.createElement('div'); + temp.innerHTML = html; + unescaped = temp.textContent; + } + + const doc = new DOMParser().parseFromString(unescaped, 'text/html'); + const allowedTags = ['B', 'I', 'EM', 'STRONG', 'A', 'BR']; + + function clean(node) { + for (let i = node.childNodes.length - 1; i >= 0; i--) { + const child = node.childNodes[i]; + if (child.nodeType === 1) { // Element node + if (!allowedTags.includes(child.tagName)) { + const text = document.createTextNode(child.textContent); + child.parentNode.replaceChild(text, child); + } else { + if (child.tagName === 'A') { + const href = child.getAttribute('href'); + if (href && (href.startsWith('http') || href.startsWith('/') || href.startsWith('#'))) { + // Strip all attributes except href + while (child.attributes.length > 0) { + child.removeAttribute(child.attributes[0].name); + } + child.setAttribute('href', href); + + // Only add target="_blank" and rel for external absolute URLs + if (href.startsWith('http://') || href.startsWith('https://')) { + try { + const url = new URL(href); + if (url.origin !== window.location.origin) { + child.setAttribute('target', '_blank'); + child.setAttribute('rel', 'noopener noreferrer'); + } + } catch (e) { + // Invalid URL, don't add target/rel + } + } + } else { + const text = document.createTextNode(child.textContent); + child.parentNode.replaceChild(text, child); + continue; + } + } + clean(child); + } + } + } + } + + clean(doc.body); + return doc.body.innerHTML; +}; + +// Share buttons pop-up +(function () { + // share popup + const shareButton = document.querySelector('.js-content__share-button'); + const sharePopup = document.querySelector('.js-content__share-popup'); + + if (shareButton && sharePopup) { + sharePopup.addEventListener('click', function (e) { + e.stopPropagation(); + }); + + shareButton.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + sharePopup.classList.toggle('is-visible'); + }); + + document.body.addEventListener('click', function () { + sharePopup.classList.remove('is-visible'); + }); + } + + // link selector and pop-up window size + const Config = { + Link: ".js-share", + Width: 500, + Height: 500 + }; + + // add handler to links + const shareLinks = document.querySelectorAll(Config.Link); + shareLinks.forEach(link => { + link.addEventListener('click', PopupHandler); + }); + + // create popup + function PopupHandler(e) { + e.preventDefault(); + + const target = e.target.closest(Config.Link); + if (!target) return; + + // hide share popup + if (sharePopup) { + sharePopup.classList.remove('is-visible'); + } + + // popup position + const px = Math.floor((window.innerWidth - Config.Width) / 2); + const py = Math.floor((window.innerHeight - Config.Height) / 2); + + // open popup + const linkHref = target.href; + const popup = window.open(linkHref, "social", ` + width=${Config.Width}, + height=${Config.Height}, + left=${px}, + top=${py}, + location=0, + menubar=0, + toolbar=0, + status=0, + scrollbars=1, + resizable=1 + `); + + if (popup) { + popup.focus(); + } + } +})(); + +// Back to top +const backToTopButton = document.getElementById("backToTop"); + +if (backToTopButton) { + window.addEventListener('scroll', () => { + if (document.body.scrollTop > 400 || document.documentElement.scrollTop > 400) { + backToTopButton.classList.add("is-visible"); + } else { + backToTopButton.classList.remove("is-visible"); + } + }); + + backToTopButton.addEventListener('click', () => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }); +} + + +/** + * Responsive embeds script + */ +(function () { + let wrappers = document.querySelectorAll('.post__video, .post__iframe'); + + for (let i = 0; i < wrappers.length; i++) { + let embed = wrappers[i].querySelector('iframe, embed, video, object'); + + if (!embed) { + continue; + } + + if (embed.getAttribute('data-responsive') === 'false') { + continue; + } + + let w = embed.getAttribute('width'); + let h = embed.getAttribute('height'); + let ratio = false; + + if (!w || !h) { + continue; + } + + if (w.indexOf('%') > -1 && h.indexOf('%') > -1) { // percentage mode + w = parseFloat(w.replace('%', '')); + h = parseFloat(h.replace('%', '')); + ratio = h / w; + } else if (w.indexOf('%') === -1 && h.indexOf('%') === -1) { // pixels mode + w = parseInt(w, 10); + h = parseInt(h, 10); + ratio = h / w; + } + + if (ratio !== false) { + let ratioValue = (ratio * 100) + '%'; + wrappers[i].setAttribute('style', '--embed-aspect-ratio:' + ratioValue); + } + } +})(); + +// Search +const searchButton = document.querySelector('.js-search-btn'); +const searchOverlay = document.querySelector('.js-search-overlay'); +const searchInput = document.querySelector('.search__input'); + +if (searchButton && searchOverlay) { + searchButton.addEventListener('click', (e) => { + e.stopPropagation(); + searchOverlay.classList.toggle('expanded'); + + if (searchInput) { + setTimeout(() => { + if (searchOverlay.classList.contains('expanded')) { + searchInput.focus(); + } + }, 60); + } + }); + + searchOverlay.addEventListener('click', (e) => { + e.stopPropagation(); + }); + + document.body.addEventListener('click', () => { + searchOverlay.classList.remove('expanded'); + }); +} + + +/** + * Layout switcher + */ +(function () { + let layoutButtons = document.querySelectorAll('.switchers__item'); + let contentWrapper = document.querySelector('.l-grid'); + let articles; + + if (contentWrapper) { + articles = contentWrapper.querySelectorAll('.c-card'); + } + + if (!contentWrapper || !layoutButtons.length || (articles && !articles.length)) { + return; + } + + let gridBtn = layoutButtons[0]; + let rowsBtn = layoutButtons[1]; + + gridBtn.addEventListener('click', e => { + e.preventDefault(); + let isActive = gridBtn.classList.contains('is-active'); + + if (!isActive) { + setGridLayout(); + } + }); + + rowsBtn.addEventListener('click', e => { + e.preventDefault(); + let isActive = rowsBtn.classList.contains('is-active'); + + if (!isActive) { + setRowsLayout(); + } + }); + + function setGridLayout() { + gridBtn.classList.add('is-active'); + rowsBtn.classList.remove('is-active'); + contentWrapper.classList.remove('l-grid--1'); + articles = contentWrapper.querySelectorAll('.c-card'); + + for (let i = 0; i < articles.length; i++) { + articles[i].classList.remove('c-card--rows'); + } + + localStorage.setItem('persona-theme-selected-layout', 'grid'); + resetIsotopeLayout(); + } + + function setRowsLayout() { + gridBtn.classList.remove('is-active'); + rowsBtn.classList.add('is-active'); + contentWrapper.classList.add('l-grid--1'); + articles = contentWrapper.querySelectorAll('.c-card'); + + for (let i = 0; i < articles.length; i++) { + articles[i].classList.add('c-card--rows'); + } + + localStorage.setItem('persona-theme-selected-layout', 'rows'); + resetIsotopeLayout(); + } + + function resetIsotopeLayout() { + if (window.personaThemeIsotopeInstance) { + if (document.querySelector('.filter__item.is-active')) { + window.personaThemeIsotopeInstance.arrange({ + filter: document.querySelector('.filter__item.is-active').getAttribute('data-filter') + }); + } else { + window.personaThemeIsotopeInstance.arrange(); + } + } + } + + window.addEventListener("DOMContentLoaded", function () { + setTimeout(() => { + if (localStorage.getItem('persona-theme-selected-layout')) { + let savedLayout = localStorage.getItem('persona-theme-selected-layout'); + + if (savedLayout === 'grid') { + setGridLayout(); + } + + if (savedLayout === 'rows') { + setRowsLayout(); + } + } + }, 0); + }, false); +})(); + +(function () { + // Helper function to get the current logo URL for a member element + const getCurrentLogo = (element) => { + // Returns the logoWhite attribute directly + return element.dataset.logo; + }; + + // Make it globally available for the modal + window.getCurrentLogo = getCurrentLogo; +})(); + +(function () { + const header = document.querySelector('.site-header'); + if (!header) return; + window.addEventListener('scroll', () => { + header.classList.toggle('scrolled', window.scrollY > 50); + }, { passive: true }); +})(); + +/** + * Randomize the home page background image on each page load + */ +function initHomeBackgroundRotation() { + var body = document.body; + if (!body.classList.contains('home-template')) { + return; + } + + var baseUrl = document.documentElement.getAttribute('data-baseurl') || '/'; + if (!baseUrl.endsWith('/')) { + baseUrl += '/'; + } + + var backgroundImages = [ + baseUrl + 'assets/backgrounds/Fisch_Ancient_Isle.png', + baseUrl + 'assets/backgrounds/Fisch_Trade_Plaza.png', + baseUrl + 'assets/backgrounds/Fisch_Toxic_Grove.png', + baseUrl + 'assets/backgrounds/GBP_San_Sebastian.png', + baseUrl + 'assets/backgrounds/GBP_London.png', + baseUrl + 'assets/backgrounds/UTG_Raven_Ranch.png', + baseUrl + 'assets/backgrounds/UTG_Tokyo_Town.png', + baseUrl + 'assets/backgrounds/UTG_Skylands.png', + baseUrl + 'assets/backgrounds/Dovedale_Central.png', + baseUrl + 'assets/backgrounds/Dovedale_Sunset.png', + baseUrl + 'assets/backgrounds/Dovedale_Tunnel.png', + // baseUrl + 'assets/backgrounds/Hybrid_Cafe_BG.png', + baseUrl + 'assets/backgrounds/SEWH_Ravenrock_Island.png', + baseUrl + 'assets/backgrounds/SEWH_Mountain_Lodge.png', + baseUrl + 'assets/backgrounds/SEWH_Town.png', + baseUrl + 'assets/backgrounds/Restaurant_Tycoon_3_Farm.png', + baseUrl + 'assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png', + baseUrl + 'assets/backgrounds/3PS_Nature.png', + baseUrl + 'assets/backgrounds/3PS_Sun.png', + baseUrl + 'assets/backgrounds/3PS_Dirt_Thing.png', + baseUrl + 'assets/backgrounds/PHIGHTING_Crossroads_v2.png', + baseUrl + 'assets/backgrounds/PHIGHTING_Crossroads_v2_2.png', + baseUrl + 'assets/backgrounds/PHIGHTING_Crossroads_v2_3.png', + baseUrl + 'assets/backgrounds/D-DAY_Omaha_Beach.png', + baseUrl + 'assets/backgrounds/Anime_Vanguards_BG.png', + baseUrl + 'assets/backgrounds/Parkour_Reborn_Stack.png', + baseUrl + 'assets/backgrounds/Parkour_Reborn_Fragment.png', + ]; + + var lastIndex = null; + try { lastIndex = localStorage.getItem('lastBgIndex'); } catch (e) { /* storage unavailable */ } + var randomIndex; + + // keep picking a random number until it's different from the last one + do { + randomIndex = Math.floor(Math.random() * backgroundImages.length); + } while (backgroundImages.length > 1 && String(randomIndex) === lastIndex); + + try { localStorage.setItem('lastBgIndex', randomIndex); } catch (e) { /* storage unavailable */ } + + var selectedImage = backgroundImages[randomIndex]; + document.documentElement.style.setProperty('--bg', "url('" + selectedImage + "')"); +} + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initHomeBackgroundRotation); +} else { + initHomeBackgroundRotation(); +} \ No newline at end of file diff --git a/assets/js/scripts.min.js b/assets/js/scripts.min.js index b9a9a776..fb35b08c 100644 --- a/assets/js/scripts.min.js +++ b/assets/js/scripts.min.js @@ -1 +1 @@ -!function(e){var t={mobileMenuMode:"overlay",animationSpeed:300,submenuWidth:300,doubleClickTime:500,mobileMenuExpandableSubmenus:!1,isHoverMenu:!0,wrapperSelector:".navbar",buttonSelector:".navbar__toggle",menuSelector:".navbar__menu",submenuSelector:".navbar__submenu",mobileMenuSidebarLogoSelector:null,mobileMenuSidebarLogoUrl:null,relatedContainerForOverlayMenuSelector:null,ariaButtonAttribute:"aria-haspopup",separatorItemClass:"is-separator",parentItemClass:"has-submenu",submenuLeftPositionClass:"is-left-submenu",submenuRightPositionClass:"is-right-submenu",mobileMenuOverlayClass:"navbar_mobile_overlay",mobileMenuSubmenuWrapperClass:"navbar__submenu_wrapper",mobileMenuSidebarClass:"navbar_mobile_sidebar",mobileMenuSidebarOverlayClass:"navbar_mobile_sidebar__overlay",hiddenElementClass:"is-hidden",openedMenuClass:"is-active",noScrollClass:"no-scroll",relatedContainerForOverlayMenuClass:"is-visible"},s={};function n(e){for(var t=e.querySelectorAll(s.submenuSelector),n=0;nn&&(e.stopPropagation(),i(this,!0))}))}}function i(e,t){if(!1!==t||!e.parentNode.classList.contains(s.parentItemClass)){var n=document.querySelector(s.relatedContainerForOverlayMenuSelector),a=document.querySelector(s.buttonSelector),o=document.querySelector("."+s.mobileMenuOverlayClass);o||(o=document.querySelector("."+s.mobileMenuSidebarClass)),o.classList.add(s.hiddenElementClass),a.classList.remove(s.openedMenuClass),a.setAttribute(s.ariaButtonAttribute,!1),document.documentElement.classList.remove(s.noScrollClass),n&&n.classList.remove(s.relatedContainerForOverlayMenuClass);var i=document.querySelector("."+s.mobileMenuSidebarOverlayClass);i&&i.classList.add(s.hiddenElementClass)}}Object.keys(t).forEach((function(e){s[e]=t[e]})),"object"==typeof e&&Object.keys(e).forEach((function(t){s[t]=e[t]})),document.querySelectorAll(s.wrapperSelector).length&&(function(){for(var e=document.querySelectorAll(s.wrapperSelector+" ."+s.parentItemClass),t=0;t'),t+=document.querySelector(s.menuSelector).outerHTML,e.innerHTML=t;var i=document.createElement("div");i.classList.add(s.mobileMenuSidebarOverlayClass),i.classList.add(s.hiddenElementClass),document.body.appendChild(i),document.body.appendChild(e),s.mobileMenuExpandableSubmenus?(a(e),o(e)):n(e),e.addEventListener("click",(function(e){e.stopPropagation()})),i.addEventListener("click",(function(){e.classList.add(s.hiddenElementClass),i.classList.add(s.hiddenElementClass),l.classList.remove(s.openedMenuClass),l.setAttribute(s.ariaButtonAttribute,!1),document.documentElement.classList.remove(s.noScrollClass)}));var l=document.querySelector(s.buttonSelector);l.addEventListener("click",(function(){e.classList.toggle(s.hiddenElementClass),i.classList.toggle(s.hiddenElementClass),l.classList.toggle(s.openedMenuClass),l.setAttribute(s.ariaButtonAttribute,l.classList.contains(s.openedMenuClass)),document.documentElement.classList.toggle(s.noScrollClass)}))}(),function(){for(var e=document.querySelectorAll(s.menuSelector+" a"),t=0;t{e.addEventListener("click",o)}))}();const backToTopButton=document.getElementById("backToTop");backToTopButton&&(window.addEventListener("scroll",(()=>{document.body.scrollTop>400||document.documentElement.scrollTop>400?backToTopButton.classList.add("is-visible"):backToTopButton.classList.remove("is-visible")})),backToTopButton.addEventListener("click",(()=>{window.scrollTo({top:0,behavior:"smooth"})}))),function(){let e=document.querySelectorAll(".post__video, .post__iframe");for(let t=0;t-1&&a.indexOf("%")>-1?(n=parseFloat(n.replace("%","")),a=parseFloat(a.replace("%","")),o=a/n):-1===n.indexOf("%")&&-1===a.indexOf("%")&&(n=parseInt(n,10),a=parseInt(a,10),o=a/n),!1!==o)){let s=100*o+"%";e[t].setAttribute("style","--embed-aspect-ratio:"+s)}}}();const searchButton=document.querySelector(".js-search-btn"),searchOverlay=document.querySelector(".js-search-overlay"),searchInput=document.querySelector(".search__input");searchButton&&searchOverlay&&(searchButton.addEventListener("click",(e=>{e.stopPropagation(),searchOverlay.classList.toggle("expanded"),searchInput&&setTimeout((()=>{searchOverlay.classList.contains("expanded")&&searchInput.focus()}),60)})),searchOverlay.addEventListener("click",(e=>{e.stopPropagation()})),document.body.addEventListener("click",(()=>{searchOverlay.classList.remove("expanded")}))),function(){let e,t=document.querySelectorAll(".switchers__item"),s=document.querySelector(".l-grid");if(s&&(e=s.querySelectorAll(".c-card")),!s||!t.length||e&&!e.length)return;let n=t[0],a=t[1];function o(){n.classList.add("is-active"),a.classList.remove("is-active"),s.classList.remove("l-grid--1"),e=s.querySelectorAll(".c-card");for(let t=0;t{e.preventDefault(),n.classList.contains("is-active")||o()})),a.addEventListener("click",(e=>{e.preventDefault(),a.classList.contains("is-active")||i()})),window.addEventListener("DOMContentLoaded",(function(){setTimeout((()=>{if(localStorage.getItem("persona-theme-selected-layout")){let e=localStorage.getItem("persona-theme-selected-layout");"grid"===e&&o(),"rows"===e&&i()}}),0)}),!1)}(); \ No newline at end of file +(function(menuConfig){var defaultConfig={mobileMenuMode:"overlay",animationSpeed:300,submenuWidth:300,doubleClickTime:500,mobileMenuExpandableSubmenus:false,isHoverMenu:true,wrapperSelector:".navbar",buttonSelector:".navbar__toggle",menuSelector:".navbar__menu",submenuSelector:".navbar__submenu",mobileMenuSidebarLogoSelector:null,mobileMenuSidebarLogoUrl:null,relatedContainerForOverlayMenuSelector:null,ariaButtonAttribute:"aria-haspopup",separatorItemClass:"is-separator",parentItemClass:"has-submenu",submenuLeftPositionClass:"is-left-submenu",submenuRightPositionClass:"is-right-submenu",mobileMenuOverlayClass:"navbar_mobile_overlay",mobileMenuSubmenuWrapperClass:"navbar__submenu_wrapper",mobileMenuSidebarClass:"navbar_mobile_sidebar",mobileMenuSidebarOverlayClass:"navbar_mobile_sidebar__overlay",hiddenElementClass:"is-hidden",openedMenuClass:"is-active",noScrollClass:"no-scroll",relatedContainerForOverlayMenuClass:"is-visible"};var config={};Object.keys(defaultConfig).forEach(function(key){config[key]=defaultConfig[key]});if(typeof menuConfig==="object"){Object.keys(menuConfig).forEach(function(key){config[key]=menuConfig[key]})}function init(){if(!document.querySelectorAll(config.wrapperSelector).length){return}initSubmenuPositions();if(config.mobileMenuMode==="overlay"){initMobileMenuOverlay()}else if(config.mobileMenuMode==="sidebar"){initMobileMenuSidebar()}initClosingMenuOnClickLink();if(!config.isHoverMenu){initAriaAttributes()}}function initSubmenuPositions(){var submenuParents=document.querySelectorAll(config.wrapperSelector+" ."+config.parentItemClass);for(var i=0;i'}menuContentHTML+=document.querySelector(config.menuSelector).outerHTML;menuWrapper.innerHTML=menuContentHTML;var menuOverlay=document.createElement("div");menuOverlay.classList.add(config.mobileMenuSidebarOverlayClass);menuOverlay.classList.add(config.hiddenElementClass);document.body.appendChild(menuOverlay);document.body.appendChild(menuWrapper);if(config.mobileMenuExpandableSubmenus){wrapSubmenusIntoContainer(menuWrapper);initToggleSubmenu(menuWrapper)}else{setAriaForSubmenus(menuWrapper)}menuWrapper.addEventListener("click",function(e){e.stopPropagation()});menuOverlay.addEventListener("click",function(){menuWrapper.classList.add(config.hiddenElementClass);menuOverlay.classList.add(config.hiddenElementClass);button.classList.remove(config.openedMenuClass);button.setAttribute(config.ariaButtonAttribute,false);document.documentElement.classList.remove(config.noScrollClass)});var button=document.querySelector(config.buttonSelector);button.addEventListener("click",function(){menuWrapper.classList.toggle(config.hiddenElementClass);menuOverlay.classList.toggle(config.hiddenElementClass);button.classList.toggle(config.openedMenuClass);button.setAttribute(config.ariaButtonAttribute,button.classList.contains(config.openedMenuClass));document.documentElement.classList.toggle(config.noScrollClass)})}function setAriaForSubmenus(menuWrapper){var submenus=menuWrapper.querySelectorAll(config.submenuSelector);for(var i=0;icurrentTime){e.stopPropagation();closeMenu(this,true)}})}}}}function initAriaAttributes(){var allAriaElements=document.querySelectorAll(config.wrapperSelector+" "+"*[aria-hidden]");for(var i=0;i=0;i--){const child=node.childNodes[i];if(child.nodeType===1){if(!allowedTags.includes(child.tagName)){const text=document.createTextNode(child.textContent);child.parentNode.replaceChild(text,child)}else{if(child.tagName==="A"){const href=child.getAttribute("href");if(href&&(href.startsWith("http")||href.startsWith("/")||href.startsWith("#"))){while(child.attributes.length>0){child.removeAttribute(child.attributes[0].name)}child.setAttribute("href",href);if(href.startsWith("http://")||href.startsWith("https://")){try{const url=new URL(href);if(url.origin!==window.location.origin){child.setAttribute("target","_blank");child.setAttribute("rel","noopener noreferrer")}}catch(e){}}}else{const text=document.createTextNode(child.textContent);child.parentNode.replaceChild(text,child);continue}}clean(child)}}}}clean(doc.body);return doc.body.innerHTML};(function(){const shareButton=document.querySelector(".js-content__share-button");const sharePopup=document.querySelector(".js-content__share-popup");if(shareButton&&sharePopup){sharePopup.addEventListener("click",function(e){e.stopPropagation()});shareButton.addEventListener("click",function(e){e.preventDefault();e.stopPropagation();sharePopup.classList.toggle("is-visible")});document.body.addEventListener("click",function(){sharePopup.classList.remove("is-visible")})}const Config={Link:".js-share",Width:500,Height:500};const shareLinks=document.querySelectorAll(Config.Link);shareLinks.forEach(link=>{link.addEventListener("click",PopupHandler)});function PopupHandler(e){e.preventDefault();const target=e.target.closest(Config.Link);if(!target)return;if(sharePopup){sharePopup.classList.remove("is-visible")}const px=Math.floor((window.innerWidth-Config.Width)/2);const py=Math.floor((window.innerHeight-Config.Height)/2);const linkHref=target.href;const popup=window.open(linkHref,"social",`\n\t\t\t width=${Config.Width},\n\t\t\t height=${Config.Height},\n\t\t\t left=${px},\n\t\t\t top=${py},\n\t\t\t location=0,\n\t\t\t menubar=0,\n\t\t\t toolbar=0,\n\t\t\t status=0,\n\t\t\t scrollbars=1,\n\t\t\t resizable=1\n\t\t `);if(popup){popup.focus()}}})();const backToTopButton=document.getElementById("backToTop");if(backToTopButton){window.addEventListener("scroll",()=>{if(document.body.scrollTop>400||document.documentElement.scrollTop>400){backToTopButton.classList.add("is-visible")}else{backToTopButton.classList.remove("is-visible")}});backToTopButton.addEventListener("click",()=>{window.scrollTo({top:0,behavior:"smooth"})})}(function(){let wrappers=document.querySelectorAll(".post__video, .post__iframe");for(let i=0;i-1&&h.indexOf("%")>-1){w=parseFloat(w.replace("%",""));h=parseFloat(h.replace("%",""));ratio=h/w}else if(w.indexOf("%")===-1&&h.indexOf("%")===-1){w=parseInt(w,10);h=parseInt(h,10);ratio=h/w}if(ratio!==false){let ratioValue=ratio*100+"%";wrappers[i].setAttribute("style","--embed-aspect-ratio:"+ratioValue)}}})();const searchButton=document.querySelector(".js-search-btn");const searchOverlay=document.querySelector(".js-search-overlay");const searchInput=document.querySelector(".search__input");if(searchButton&&searchOverlay){searchButton.addEventListener("click",e=>{e.stopPropagation();searchOverlay.classList.toggle("expanded");if(searchInput){setTimeout(()=>{if(searchOverlay.classList.contains("expanded")){searchInput.focus()}},60)}});searchOverlay.addEventListener("click",e=>{e.stopPropagation()});document.body.addEventListener("click",()=>{searchOverlay.classList.remove("expanded")})}(function(){let layoutButtons=document.querySelectorAll(".switchers__item");let contentWrapper=document.querySelector(".l-grid");let articles;if(contentWrapper){articles=contentWrapper.querySelectorAll(".c-card")}if(!contentWrapper||!layoutButtons.length||articles&&!articles.length){return}let gridBtn=layoutButtons[0];let rowsBtn=layoutButtons[1];gridBtn.addEventListener("click",e=>{e.preventDefault();let isActive=gridBtn.classList.contains("is-active");if(!isActive){setGridLayout()}});rowsBtn.addEventListener("click",e=>{e.preventDefault();let isActive=rowsBtn.classList.contains("is-active");if(!isActive){setRowsLayout()}});function setGridLayout(){gridBtn.classList.add("is-active");rowsBtn.classList.remove("is-active");contentWrapper.classList.remove("l-grid--1");articles=contentWrapper.querySelectorAll(".c-card");for(let i=0;i{if(localStorage.getItem("persona-theme-selected-layout")){let savedLayout=localStorage.getItem("persona-theme-selected-layout");if(savedLayout==="grid"){setGridLayout()}if(savedLayout==="rows"){setRowsLayout()}}},0)},false)})();(function(){const getCurrentLogo=element=>element.dataset.logo;window.getCurrentLogo=getCurrentLogo})();(function(){const header=document.querySelector(".site-header");if(!header)return;window.addEventListener("scroll",()=>{header.classList.toggle("scrolled",window.scrollY>50)},{passive:true})})();function initHomeBackgroundRotation(){var body=document.body;if(!body.classList.contains("home-template")){return}var baseUrl=document.documentElement.getAttribute("data-baseurl")||"/";if(!baseUrl.endsWith("/")){baseUrl+="/"}var backgroundImages=[baseUrl+"assets/backgrounds/Fisch_Ancient_Isle.png",baseUrl+"assets/backgrounds/Fisch_Trade_Plaza.png",baseUrl+"assets/backgrounds/Fisch_Toxic_Grove.png",baseUrl+"assets/backgrounds/GBP_San_Sebastian.png",baseUrl+"assets/backgrounds/GBP_London.png",baseUrl+"assets/backgrounds/UTG_Raven_Ranch.png",baseUrl+"assets/backgrounds/UTG_Tokyo_Town.png",baseUrl+"assets/backgrounds/UTG_Skylands.png",baseUrl+"assets/backgrounds/Dovedale_Central.png",baseUrl+"assets/backgrounds/Dovedale_Sunset.png",baseUrl+"assets/backgrounds/Dovedale_Tunnel.png",baseUrl+"assets/backgrounds/SEWH_Ravenrock_Island.png",baseUrl+"assets/backgrounds/SEWH_Mountain_Lodge.png",baseUrl+"assets/backgrounds/SEWH_Town.png",baseUrl+"assets/backgrounds/Restaurant_Tycoon_3_Farm.png",baseUrl+"assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png",baseUrl+"assets/backgrounds/3PS_Nature.png",baseUrl+"assets/backgrounds/3PS_Sun.png",baseUrl+"assets/backgrounds/3PS_Dirt_Thing.png",baseUrl+"assets/backgrounds/PHIGHTING_Crossroads_v2.png",baseUrl+"assets/backgrounds/PHIGHTING_Crossroads_v2_2.png",baseUrl+"assets/backgrounds/PHIGHTING_Crossroads_v2_3.png",baseUrl+"assets/backgrounds/D-DAY_Omaha_Beach.png",baseUrl+"assets/backgrounds/Anime_Vanguards_BG.png",baseUrl+"assets/backgrounds/Parkour_Reborn_Stack.png",baseUrl+"assets/backgrounds/Parkour_Reborn_Fragment.png"];var lastIndex=null;try{lastIndex=localStorage.getItem("lastBgIndex")}catch(e){}var randomIndex;do{randomIndex=Math.floor(Math.random()*backgroundImages.length)}while(backgroundImages.length>1&&String(randomIndex)===lastIndex);try{localStorage.setItem("lastBgIndex",randomIndex)}catch(e){}var selectedImage=backgroundImages[randomIndex];document.documentElement.style.setProperty("--bg","url('"+selectedImage+"')")}if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",initHomeBackgroundRotation)}else{initHomeBackgroundRotation()} \ No newline at end of file diff --git a/assets/js/toc-init.js b/assets/js/toc-init.js new file mode 100644 index 00000000..27974619 --- /dev/null +++ b/assets/js/toc-init.js @@ -0,0 +1,53 @@ +/** + * TOC Init - Auto-initialization on page load + * Creates and initializes TOC for pages with h2 headings + */ + +function initializeTOC() { + // Check if TOC is enabled on this page + const body = document.body; + if (!body || !body.classList.contains('toc-enabled')) { + return; + } + + const contentEntry = document.querySelector('.content__entry'); + if (!contentEntry) return; + + // Check if page already has a TOC (skip re-initialization) + if (contentEntry.querySelector('.toc-wrapper')) { + return; + } + + // Only initialize on pages that have h2 headings (excluding headings inside extra wrapper divs) + const h2s = Array.from(contentEntry.querySelectorAll('h2')).filter((h2) => { + if (!h2.parentElement) return false; + if (h2.parentElement.classList.contains('content__entry')) return true; + if (h2.parentElement.tagName.toLowerCase() !== 'div') return true; + return false; + }); + + if (h2s.length === 0) { + return; + } + + // Check if TOCWrapper class exists + if (typeof TOCWrapper === 'undefined') { + return; + } + + // Initialize TOC wrapper and sticky functionality + const tocWrapper = new TOCWrapper(); + const toc = tocWrapper.init(); + + if (toc && typeof TOCSticky !== 'undefined') { + new TOCSticky(toc); + } +} + +// Initialize when DOM is ready +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initializeTOC); +} else { + // DOM is already loaded + initializeTOC(); +} \ No newline at end of file diff --git a/assets/js/toc-sticky.js b/assets/js/toc-sticky.js new file mode 100644 index 00000000..c7fc4c39 --- /dev/null +++ b/assets/js/toc-sticky.js @@ -0,0 +1,135 @@ +/** + * TOC Sticky - Handles sticky positioning and mobile toggle functionality + */ + +class TOCSticky { + constructor(tocElement) { + this.tocElement = tocElement; + this.toggleBtn = tocElement.querySelector('.toc-toggle'); + this.tocNav = tocElement.querySelector('.toc-nav'); + this.isOpen = true; + this.isMobile = null; + + this.init(); + } + + /** + * Initialize event listeners + */ + init() { + if (this.toggleBtn) { + this.toggleBtn.addEventListener('click', () => this.toggleToc()); + } + + // Handle window resize for responsive behavior + window.addEventListener('resize', () => this.handleResize()); + + // Set initial state based on screen size + this.setInitialState(); + + // Handle scroll for active link highlighting + this.setupScrollTracking(); + } + + /** + * Determine initial state based on screen size + */ + setInitialState() { + const newIsMobile = window.innerWidth < 1024; + + if (newIsMobile === this.isMobile) return; + + this.isMobile = newIsMobile; + if (this.isMobile) { + this.closeToc(); + } else { + this.openToc(); + } + } + + /** + * Handle window resize events + */ + handleResize() { + this.setInitialState(); + } + + /** + * Toggle TOC visibility (mainly for mobile) + */ + toggleToc() { + if (this.isOpen) { + this.closeToc(); + } else { + this.openToc(); + } + } + + /** + * Close TOC + */ + closeToc() { + this.isOpen = false; + this.tocElement.classList.add('is-closed'); + this.tocNav.setAttribute('aria-hidden', 'true'); + this.toggleBtn.setAttribute('aria-expanded', 'false'); + this.toggleBtn.innerHTML = ''; + } + + /** + * Open TOC + */ + openToc() { + this.isOpen = true; + this.tocElement.classList.remove('is-closed'); + this.tocNav.setAttribute('aria-hidden', 'false'); + this.toggleBtn.setAttribute('aria-expanded', 'true'); + this.toggleBtn.innerHTML = ''; + } + + /** + * Track scroll position and update active link highlighting + */ + setupScrollTracking() { + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + this.setActiveLink(entry.target.id); + } + }); + }, + { + rootMargin: '0px 0px -50% 0px', // Only consider top 50% as "in view" + threshold: 0, + } + ); + + // Observe only headings that are actually represented in the TOC + this.tocElement.querySelectorAll('.toc-nav a[href^="#"]').forEach((link) => { + const id = link.getAttribute('href').slice(1); + const heading = document.getElementById(id); + if (heading) { + observer.observe(heading); + } + }); + } + + /** + * Set the active link in TOC based on current scroll position + */ + setActiveLink(headingId) { + // Remove active class from all links + this.tocElement.querySelectorAll('.toc-nav a').forEach((link) => { + link.classList.remove('is-active'); + }); + + // Add active class to the current heading's link + const activeLink = this.tocElement.querySelector( + `.toc-nav a[href="#${headingId}"]` + ); + if (activeLink) { + activeLink.classList.add('is-active'); + } + } +} diff --git a/assets/js/toc-wrapper.js b/assets/js/toc-wrapper.js new file mode 100644 index 00000000..c5fac609 --- /dev/null +++ b/assets/js/toc-wrapper.js @@ -0,0 +1,208 @@ +/** + * TOC Wrapper - Creates the table of contents DOM structure + * Generates links from h2 and descendant headings (h3, h4, h5, h6) + * Excludes headings that are wrapped in divs + */ + +class TOCWrapper { + constructor() { + this.headings = []; + } + + /** + * Check if a heading is wrapped in a non-content__entry div + * (skip headings inside extra div wrappers, but keep headings in the content__entry container) + */ + isHeadingWrappedInDiv(heading) { + if (!heading.parentElement) return false; + const parent = heading.parentElement; + if (parent.tagName.toLowerCase() !== 'div') return false; + if (parent.classList.contains('content__entry')) return false; + return true; + } + + /** + * Collect all h2+ headings from .content__entry + */ + collectHeadings() { + this.headings = []; + const contentEntry = document.querySelector('.content__entry'); + if (!contentEntry) return this.headings; + + const allHeadings = contentEntry.querySelectorAll('h2, h3, h4, h5, h6'); + let foundFirstH2 = false; + + for (let heading of allHeadings) { + // Skip if wrapped in a div + if (this.isHeadingWrappedInDiv(heading)) { + continue; + } + + // For h2, always include and mark that we've found the first one + if (heading.tagName.toLowerCase() === 'h2') { + foundFirstH2 = true; + this.headings.push(heading); + } + // For h3+ only include if we've already found an h2 + else if (foundFirstH2) { + this.headings.push(heading); + } + } + + return this.headings; + } + + /** + * Ensure each heading has a unique ID + */ + ensureHeadingIds() { + this.headings.forEach((heading, index) => { + if (!heading.id) { + heading.id = `heading-${index}`; + } + }); + } + + /** + * Get the heading level (2-6) for proper nesting + */ + getHeadingLevel(heading) { + return parseInt(heading.tagName.toLowerCase().substring(1), 10); + } + + /** + * Create the TOC list structure + */ + createTocList() { + const ul = document.createElement('ul'); + + if (this.headings.length === 0) { + return ul; + } + + let currentLevel = this.getHeadingLevel(this.headings[0]); + let currentList = ul; + const listStack = [{ level: currentLevel, list: ul }]; + + this.headings.forEach((heading) => { + const headingLevel = this.getHeadingLevel(heading); + const targetLevel = Math.min(headingLevel, currentLevel + 1); + + // If going deeper, create nested lists + while (targetLevel > currentLevel) { + const newList = document.createElement('ul'); + if (currentList.lastElementChild) { + currentList.lastElementChild.appendChild(newList); + } else { + currentList.appendChild(document.createElement('li')).appendChild(newList); + } + currentList = newList; + currentLevel++; + listStack.push({ level: currentLevel, list: newList }); + } + + // If going back up, pop from stack + while (headingLevel < currentLevel && listStack.length > 1) { + listStack.pop(); + currentList = listStack[listStack.length - 1].list; + currentLevel = listStack[listStack.length - 1].level; + } + + // Create the list item with link + const li = document.createElement('li'); + const a = document.createElement('a'); + a.href = `#${heading.id}`; + a.textContent = heading.textContent; + li.appendChild(a); + currentList.appendChild(li); + }); + + return ul; + } + + /** + * Create the complete TOC DOM structure + */ + createTocStructure() { + // Create wrapper + const wrapper = document.createElement('aside'); + wrapper.className = 'toc-wrapper'; + wrapper.setAttribute('aria-label', 'Table of Contents'); + + // Create header with toggle button + const header = document.createElement('div'); + header.className = 'toc-header'; + + const title = document.createElement('h3'); + title.className = 'toc-title'; + title.textContent = 'Contents'; + header.appendChild(title); + + const toggleBtn = document.createElement('button'); + toggleBtn.type = 'button'; + toggleBtn.className = 'toc-toggle'; + toggleBtn.setAttribute('aria-label', 'Toggle table of contents'); + toggleBtn.setAttribute('aria-expanded', 'true'); + toggleBtn.innerHTML = ''; + header.appendChild(toggleBtn); + + wrapper.appendChild(header); + + // Create nav with TOC list + const nav = document.createElement('nav'); + nav.className = 'toc-nav'; + const tocList = this.createTocList(); + nav.appendChild(tocList); + + wrapper.appendChild(nav); + + return wrapper; + } + + /** + * Insert the TOC into the main content + */ + insertToc() { + const contentEntry = document.querySelector('.content__entry'); + if (!contentEntry) return null; + + const tocStructure = this.createTocStructure(); + + // Preferred: insert outside .content__inner, as sibling to that wrapper inside .content + const contentInner = contentEntry.closest('.content__inner'); + if (contentInner) { + const content = contentInner.closest('.content'); + if (content) { + content.insertBefore(tocStructure, contentInner); + return tocStructure; + } + } + + // Fallback 1: insert as sibling before .content__entry inside .content__inner + const wrapperParent = contentEntry.parentElement; + if (wrapperParent && wrapperParent.classList.contains('content__inner')) { + wrapperParent.insertBefore(tocStructure, contentEntry); + return tocStructure; + } + + // Fallback 2: place inside contentEntry as last resort + contentEntry.insertBefore(tocStructure, contentEntry.firstChild); + return tocStructure; + } + + /** + * Full initialization + */ + init() { + this.collectHeadings(); + + if (this.headings.length === 0) { + return null; + } + + this.ensureHeadingIds(); + const toc = this.insertToc(); + + return toc; + } +} \ No newline at end of file diff --git a/assets/js/wiki-name-tooltip.js b/assets/js/wiki-name-tooltip.js new file mode 100644 index 00000000..e8605935 --- /dev/null +++ b/assets/js/wiki-name-tooltip.js @@ -0,0 +1,38 @@ +import {computePosition, offset, flip, shift} from 'https://cdn.jsdelivr.net/npm/@floating-ui/dom@1.7.5/+esm'; +const floating = document.getElementById("floating"); + +if (floating) { + document.addEventListener("mousemove", (event) => { + const { clientX, clientY, target } = event; + + const logoSlide = target.closest(".logo-slide"); + + if (logoSlide) { + floating.textContent = logoSlide.dataset.wikiName || "No Name"; + + floating.classList.add("visible"); + + const virtualEl = { + getBoundingClientRect: () => ({ + width: 0, height: 0, + x: clientX, y: clientY, + top: clientY, left: clientX, + right: clientX, bottom: clientY, + }), + }; + + computePosition(virtualEl, floating, { + placement: "right-start", + middleware: [offset(10), flip(), shift()] + }).then(({ x, y }) => { + Object.assign(floating.style, { + top: `${y}px`, + left: `${x}px`, + position: 'absolute' + }); + }); + } else { + floating.classList.remove("visible"); + } + }); +} \ No newline at end of file diff --git a/media/plugins/pagePrefetching/quicklink.umd.js b/assets/plugins/pagePrefetching/quicklink.umd.js similarity index 100% rename from media/plugins/pagePrefetching/quicklink.umd.js rename to assets/plugins/pagePrefetching/quicklink.umd.js diff --git a/assets/plugins/pagePrefetching/quicklink.umd.min.js b/assets/plugins/pagePrefetching/quicklink.umd.min.js new file mode 100644 index 00000000..efe42178 --- /dev/null +++ b/assets/plugins/pagePrefetching/quicklink.umd.min.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(e.quicklink={})}(this,function(e){function n(e){return new Promise(function(n,r,t){(t=new XMLHttpRequest).open("GET",e,t.withCredentials=!0),t.onload=function(){200===t.status?n():r()},t.send()})}var r,t=(r=document.createElement("link")).relList&&r.relList.supports&&r.relList.supports("prefetch")?function(e){return new Promise(function(n,r,t){(t=document.createElement("link")).rel="prefetch",t.href=e,t.onload=n,t.onerror=r,document.head.appendChild(t)})}:n,o=window.requestIdleCallback||function(e){var n=Date.now();return setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-n))}})},1)},i=new Set,c=new Set,u=!1;function a(e){if(e){if(e.saveData)return new Error("Save-Data is enabled");if(/2g/.test(e.effectiveType))return new Error("network conditions are poor")}return!0}function s(e,r,o){var s=a(navigator.connection);return s instanceof Error?Promise.reject(new Error("Cannot prefetch, "+s.message)):(c.size>0&&!u&&console.warn("[Warning] You are using both prefetching and prerendering on the same document"),Promise.all([].concat(e).map(function(e){if(!i.has(e))return i.add(e),(r?function(e){return window.fetch?fetch(e,{credentials:"include"}):n(e)}:t)(new URL(e,location.href).toString())})))}function f(e,n){var r=a(navigator.connection);if(r instanceof Error)return Promise.reject(new Error("Cannot prerender, "+r.message));if(!HTMLScriptElement.supports("speculationrules"))return s(e),Promise.reject(new Error("This browser does not support the speculation rules API. Falling back to prefetch."));if(document.querySelector('script[type="speculationrules"]'))return Promise.reject(new Error("Speculation Rules is already defined and cannot be altered."));for(var t=0,o=[].concat(e);t0&&!u&&console.warn("[Warning] You are using both prefetching and prerendering on the same document");var l=function(e){var n=document.createElement("script");n.type="speculationrules",n.text='{"prerender":[{"source": "list","urls": ["'+Array.from(e).join('","')+'"]}]}';try{document.head.appendChild(n)}catch(e){return e}return!0}(c);return!0===l?Promise.resolve():Promise.reject(l)}e.listen=function(e){if(e||(e={}),window.IntersectionObserver){var n=function(e){e=e||1;var n=[],r=0;function t(){r0&&(n.shift()(),r++)}return[function(e){n.push(e)>1||t()},function(){r--,t()}]}(e.throttle||1/0),r=n[0],t=n[1],a=e.limit||1/0,l=e.origins||[location.hostname],d=e.ignores||[],h=e.delay||0,p=[],m=e.timeoutFn||o,w="function"==typeof e.hrefFn&&e.hrefFn,g=e.prerender||!1;u=e.prerenderAndPrefetch||!1;var v=new IntersectionObserver(function(n){n.forEach(function(n){if(n.isIntersecting)p.push((n=n.target).href),function(e,n){n?setTimeout(e,n):e()}(function(){-1!==p.indexOf(n.href)&&(v.unobserve(n),(u||g)&&c.size<1?f(w?w(n):n.href).catch(function(n){if(!e.onError)throw n;e.onError(n)}):i.size-1&&p.splice(o)}})},{threshold:e.threshold||0});return m(function(){(e.el||document).querySelectorAll("a").forEach(function(e){l.length&&!l.includes(e.hostname)||function e(n,r){return Array.isArray(r)?r.some(function(r){return e(n,r)}):(r.test||r).call(r,n.href,n)}(e,d)||v.observe(e)})},{timeout:e.timeout||2e3}),function(){i.clear(),v.disconnect()}}},e.prefetch=s,e.prerender=f}); \ No newline at end of file diff --git a/assets/promofiles/Different Wikis Illust.png b/assets/promofiles/Different Wikis Illust.png new file mode 100644 index 00000000..64002b19 Binary files /dev/null and b/assets/promofiles/Different Wikis Illust.png differ diff --git a/assets/promofiles/ExampleImgDDInUse.png b/assets/promofiles/ExampleImgDDInUse.png new file mode 100644 index 00000000..87f7e7da Binary files /dev/null and b/assets/promofiles/ExampleImgDDInUse.png differ diff --git a/assets/promofiles/OnboardingMainThumbnail.png b/assets/promofiles/OnboardingMainThumbnail.png new file mode 100644 index 00000000..49fd37dd Binary files /dev/null and b/assets/promofiles/OnboardingMainThumbnail.png differ diff --git a/assets/promofiles/Pressure_and_GBP_on_ipad.png b/assets/promofiles/Pressure_and_GBP_on_ipad.png new file mode 100644 index 00000000..f4bed927 Binary files /dev/null and b/assets/promofiles/Pressure_and_GBP_on_ipad.png differ diff --git a/assets/promofiles/RobloxAPIMainThumbnail.png b/assets/promofiles/RobloxAPIMainThumbnail.png new file mode 100644 index 00000000..8fc9f972 Binary files /dev/null and b/assets/promofiles/RobloxAPIMainThumbnail.png differ diff --git a/assets/promofiles/SEWH_on_macbook.png b/assets/promofiles/SEWH_on_macbook.png new file mode 100644 index 00000000..215124a5 Binary files /dev/null and b/assets/promofiles/SEWH_on_macbook.png differ diff --git a/assets/promofiles/irwa-messages.png b/assets/promofiles/irwa-messages.png new file mode 100644 index 00000000..7f805abd Binary files /dev/null and b/assets/promofiles/irwa-messages.png differ diff --git a/assets/promofiles/sewh-robloxapi.png b/assets/promofiles/sewh-robloxapi.png new file mode 100644 index 00000000..78e0ca99 Binary files /dev/null and b/assets/promofiles/sewh-robloxapi.png differ diff --git a/assets/promofiles/utg-robloxapi.png b/assets/promofiles/utg-robloxapi.png new file mode 100644 index 00000000..d10c77f8 Binary files /dev/null and b/assets/promofiles/utg-robloxapi.png differ diff --git a/assets/svg/discord.svg b/assets/svg/discord.svg new file mode 100644 index 00000000..5154d9ff --- /dev/null +++ b/assets/svg/discord.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/github.svg b/assets/svg/github.svg new file mode 100644 index 00000000..538ec5bf --- /dev/null +++ b/assets/svg/github.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/assets/svg/kofi.svg b/assets/svg/kofi.svg new file mode 100644 index 00000000..3407932a --- /dev/null +++ b/assets/svg/kofi.svg @@ -0,0 +1 @@ +Ko-fi \ No newline at end of file diff --git a/assets/svg/mediawiki.svg b/assets/svg/mediawiki.svg new file mode 100644 index 00000000..981d400d --- /dev/null +++ b/assets/svg/mediawiki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/svg/roblox.svg b/assets/svg/roblox.svg new file mode 100644 index 00000000..128fb2d5 --- /dev/null +++ b/assets/svg/roblox.svg @@ -0,0 +1 @@ +Roblox \ No newline at end of file diff --git a/assets/svg/twitter.svg b/assets/svg/twitter.svg new file mode 100644 index 00000000..7e8533bd --- /dev/null +++ b/assets/svg/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/website.svg b/assets/svg/website.svg new file mode 100644 index 00000000..bc765136 --- /dev/null +++ b/assets/svg/website.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/website/IRWA-Logo1-dynamic.svg b/assets/website/IRWA-Logo1-dynamic.svg new file mode 100644 index 00000000..fcb8a775 --- /dev/null +++ b/assets/website/IRWA-Logo1-dynamic.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/website/IRWA-Logo1-white.svg b/assets/website/IRWA-Logo1-white.svg new file mode 100644 index 00000000..bbf861ae --- /dev/null +++ b/assets/website/IRWA-Logo1-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/website/IRWA-Logo1.svg b/assets/website/IRWA-Logo1.svg similarity index 100% rename from media/website/IRWA-Logo1.svg rename to assets/website/IRWA-Logo1.svg diff --git a/assets/wiki-logos/3DPS.svg b/assets/wiki-logos/3DPS.svg new file mode 100644 index 00000000..05e19996 --- /dev/null +++ b/assets/wiki-logos/3DPS.svg @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/wiki-logos/AnimeVanguards.svg b/assets/wiki-logos/AnimeVanguards.svg new file mode 100644 index 00000000..1c25db96 --- /dev/null +++ b/assets/wiki-logos/AnimeVanguards.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/assets/wiki-logos/AnimeVanguards_White.svg b/assets/wiki-logos/AnimeVanguards_White.svg new file mode 100644 index 00000000..1c25db96 --- /dev/null +++ b/assets/wiki-logos/AnimeVanguards_White.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/media/files/D-DAY (Temp).png b/assets/wiki-logos/D-DAY.png similarity index 100% rename from media/files/D-DAY (Temp).png rename to assets/wiki-logos/D-DAY.png diff --git a/assets/wiki-logos/Dovedale_White.svg b/assets/wiki-logos/Dovedale_White.svg new file mode 100644 index 00000000..b61d3a75 --- /dev/null +++ b/assets/wiki-logos/Dovedale_White.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/media/files/Fisch.png b/assets/wiki-logos/Fisch.png similarity index 100% rename from media/files/Fisch.png rename to assets/wiki-logos/Fisch.png diff --git a/media/files/GBP.webp b/assets/wiki-logos/GBP.webp similarity index 100% rename from media/files/GBP.webp rename to assets/wiki-logos/GBP.webp diff --git a/media/files/HybridCafeLogo_Black.svg b/assets/wiki-logos/HybridCafe_White.svg similarity index 93% rename from media/files/HybridCafeLogo_Black.svg rename to assets/wiki-logos/HybridCafe_White.svg index 919fea31..310c3dc8 100644 --- a/media/files/HybridCafeLogo_Black.svg +++ b/assets/wiki-logos/HybridCafe_White.svg @@ -2,8 +2,9 @@

Hosting

\ No newline at end of file diff --git a/index.html b/index.html index 161f08fc..3ed3b41a 100644 --- a/index.html +++ b/index.html @@ -1,56 +1,106 @@ --- layout: home -title: Home -description: We support independent wikis. Putting wiki management back to communities. Not corporations. +description: We are a group dedicated to supporting high-quality independent wikis that cover games on the platform Roblox. Learn more about the work we do here! body_class: home-template --- -

Supporting Independent Roblox Wikis

-

We assist wikis with their work and ensure communities are at the frontier of control.

-

Our Mission

- - - - - - - - -
6.7K+ pages
across all wikis
200+ wikis
using our extension
214K+ edits
across all wikis
-

Working with members from

+
+
+

Supporting Independent
Roblox Wikis

+

We assist wikis with their work and ensure communities are at the frontier of control.

+

+ + About Us + + + Join Us +

+
+ +
+ +
+
+ +
+
+

Our mission is to support and help independent wikis find their footing in the Roblox wiki + space. We provide support, develop tools and help emerging wikis find their style.

+
+
+
{{ site.data.members | size }} members
in IRWA
+
500+ wikis
using our + extension
+
214K+ edits
across all wikis
+
+
+ +

Working with teams from

",t}(K[t.settings.spinner]),k.style.setProperty("--sk-color",t.settings.spinColor),u.classList.remove("vbox-hidden"),o.classList.remove("vbox-top","vbox-bottom"),n.classList.remove("vbox-top","vbox-bottom"),"top"==t.settings.titlePosition?(n.classList.add("vbox-top"),o.classList.add("vbox-bottom")):(n.classList.add("vbox-bottom"),o.classList.add("vbox-top"));let s="bar"===t.settings.titleStyle?"100%":"auto",i="pill"===t.settings.titleStyle?"5em":"0",a="bar"===t.settings.shareStyle?"100%":"auto",r="pill"===t.settings.shareStyle?"5em":"0",l="transparent"===t.settings.titleStyle?"transparent":t.settings.toolsBackground,d="transparent"===t.settings.shareStyle?"transparent":t.settings.toolsBackground;k.style.setProperty("--vbox-title-width",s),k.style.setProperty("--vbox-title-radius",i),k.style.setProperty("--vbox-share-width",a),k.style.setProperty("--vbox-share-radius",r),k.style.setProperty("--vbox-tools-color",t.settings.toolsColor),k.style.setProperty("--vbox-title-background",l),k.style.setProperty("--vbox-share-background",d)}function ve(){if(!r)return!1;switch(r.dataset.vbtype){case"iframe":e=q,t=A,a.classList.add("vbox-loading"),x='
',a.classList.remove("vbox-loading"),ne("animated");break;case"inline":!function(e){let t=document.querySelector(e);t&&(a.classList.add("vbox-loading"),x='
'+t.innerHTML+"
",a.classList.remove("vbox-loading"),ne("animated"))}(q);break;case"ajax":!function(e){a.classList.add("vbox-loading");let t=new XMLHttpRequest;t.open("GET",e,!0),t.onload=function(){x='
'+t.response+"
",ie()},t.onerror=function(){x='
',a.classList.remove("vbox-loading"),ne("animated")},t.send()}(q);break;case"video":se(q,A,E);break;default:!function(e){R.onload=function(){x='
',a.classList.remove("vbox-loading"),ne("animated")},R.src=e}(q)}var e,t}function ue(e){if(!e||y||!document.body.classList.contains("vbox-open"))return!1;G(e),ce(e);const t=.84*r.settings.navSpeed;a.style.transition="margin "+t+"ms ease-out, opacity "+t+"ms ease-out",e===H&&a.classList.add("swipe-right"),e===j&&a.classList.add("swipe-left"),u.classList.remove("vbox-hidden");const o=a.style.opacity;a.classList.add("vbox-animated","vbox-loading"),B=a.cloneNode(!1),B.classList.add("cloned"),B.classList.remove("swipe-left","swipe-right"),B.style.opacity=0,B.style.marginLeft="0",B.style.marginRight="0";const n=a;i.append(B),a=B,a.classList.remove("cloned"),de(e),_({duration:r.settings.navSpeed,timing:Z,draw:function(e){n.style.opacity=o-e/o,1===e&&(n.remove(),a.classList.remove("vbox-animated"),ne("loading"),y=!1,r.settings.onNavComplete&&"function"==typeof r.settings.onNavComplete&&r.settings.onNavComplete(r,p,j,H))}}),ve()}function be(l){return!(document.body.classList.contains("vbox-open")||!l)&&((!l.settings.onPreOpen||"function"!=typeof l.settings.onPreOpen||!1!==l.settings.onPreOpen(l))&&(G(l),document.body.insertAdjacentHTML("beforeend",s),document.body.classList.add("vbox-open"),k=document.querySelector(".vbox-overlay"),e=k.querySelector(".vbox-backdrop"),i=k.querySelector(".vbox-container"),a=i.querySelector(".vbox-content"),t=k.querySelector(".vbox-num"),o=k.querySelector(".vbox-share"),n=k.querySelector(".vbox-title"),u=k.querySelector(".vbox-preloader"),b=u.querySelector(".vbox-preloader-inner"),k.style.opacity=0,ce(l),de(l),a.classList.add("vbox-animated","vbox-loading"),_({duration:200,timing:Z,draw:function(e){k.style.opacity=e,1===e&&(a.classList.remove("vbox-animated"),y=!1,ne("loading"),r.settings.onPostOpen&&"function"==typeof r.settings.onPostOpen&&r.settings.onPostOpen(r,p,j,H))}}),ve(),l.settings.navKeyboard&&(document.body.addEventListener("keydown",te),document.body.addEventListener("keyup",(()=>{V&&(clearTimeout(V),V=null)}))),document.querySelector(".vbox-prev").addEventListener("click",(function(){ue(H)})),document.querySelector(".vbox-next").addEventListener("click",(function(){ue(j)})),void k.addEventListener("click",(function(e){let t=document.querySelector(".vbox-close");t&&(t.contains(e.target)||t===e.target||r.settings.overlayClose&&(e.target.classList.contains("vbox-overlay")||e.target.classList.contains("vbox-content")||e.target.classList.contains("vbox-backdrop")||e.target.classList.contains("vbox-close")||e.target.classList.contains("vbox-preloader")||e.target.classList.contains("vbox-container")))&&J()}))))}const pe=function(e){const t={};let o=function(e,t){let o={};return W(e,(function(t,n){o[n]=e[n]})),W(t,(function(e,n){o[n]=t[n]})),o}(U,e||{});return t.close=J,t.next=$,t.prev=ee,t.open=be,t.settings=o,function(e,t){t.onInit&&"function"==typeof t.onInit&&t.onInit(e);let o=t.jQuerySelectors||document.querySelectorAll(t.selector);if(s='',Y=Y||document.createElement("div"),R=R||new Image,W(o,(function(e){if(e instanceof Element){if(e.classList.contains("vbox-item"))return!0;e.settings=t,e.classList.add("vbox-item"),e.addEventListener("click",(function(t){return t.preventDefault(),e.blur(),be(e),!1}))}})),t.popup){let e=document.querySelector(t.popup);e.settings=t,be(e)}}(t,o),t};return"function"==typeof jQuery&&jQuery.fn.extend({venobox:function(e){const t=e||{};t.jQuerySelectors=this,new pe(t)}}),pe})); diff --git a/media/plugins/syntaxHighlighter/clipboard.min.js b/media/plugins/syntaxHighlighter/clipboard.min.js deleted file mode 100644 index 1103f811..00000000 --- a/media/plugins/syntaxHighlighter/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1-1&&!Array.isArray(r)&&(r.pattern||(r=this[a]={pattern:r}),r.inside=r.inside||{},"comment"==l&&(r.inside["md-link"]=t),"attr-value"==l?Prism.languages.insertBefore("inside","punctuation",{"url-link":n},r):r.inside["url-link"]=n,r.inside["email-link"]=i)}),a["url-link"]=n,a["email-link"]=i)}},Prism.hooks.add("before-highlight",function(n){Prism.plugins.autolinker.processGrammar(n.grammar)}),Prism.hooks.add("wrap",function(n){if(/-link$/.test(n.type)){n.tag="a";var i=n.content;if("email-link"==n.type&&0!=i.indexOf("mailto:"))i="mailto:"+i;else if("md-link"==n.type){var e=n.content.match(t);i=e[2],n.content=e[1]}n.attributes.href=i;try{n.content=decodeURIComponent(n.content)}catch(a){}}})}}(); \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-beige.css b/media/plugins/syntaxHighlighter/prism-beige.css deleted file mode 100644 index 76279bb1..00000000 --- a/media/plugins/syntaxHighlighter/prism-beige.css +++ /dev/null @@ -1 +0,0 @@ -:root{--prism-text:#323C53;--prism-bg:#F5F2F0;--prism-light-shadow:white;--prism-selection:#B3D4FC;--prism-comment:slategray;--prism-punctuation:#999;--prism-namespace-opacity:0.7;--prism-property:#905;--prism-string:#690;--prism-operator:#9A6E3A;--prism-operator-bg:rgba(255, 255, 255, 0.5);--prism-atrule:#07A;--prism-function:#DD4A68;--prism-regex:#E90;--prism-border:rgba(112, 128, 144, 0.7);--prism-space:#808080;--prism-url:#CF222E;}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:0;text-shadow:0 1px var(--prism-light-shadow);text-align:left;word-spacing:normal;word-break:normal;word-wrap:normal;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px;line-height:1.385;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:var(--prism-selection)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:var(--prism-selection)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--prism-bg)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.namespace{opacity:var(--prism-namespace-opacity)}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:var(--prism-property)}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:var(--prism-string)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:var(--prism-operator);background:var(--prism-operator-bg)}.token.atrule,.token.attr-value,.token.keyword{color:var(--prism-atrule)}.token.class-name,.token.function{color:var(--prism-function)}.token.important,.token.regex,.token.variable{color:var(--prism-regex)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-black.css b/media/plugins/syntaxHighlighter/prism-black.css deleted file mode 100644 index 2d289f4f..00000000 --- a/media/plugins/syntaxHighlighter/prism-black.css +++ /dev/null @@ -1 +0,0 @@ -:root{--prism-text:#F6F6F9;--prism-bg:#1E2128;--prism-light-shadow:rgba(0, 0, 0, 0.3);--prism-selection:#C1DEF1;--prism-comment:rgba(255, 255, 255, .5);--prism-punctuation:#B3B9C5;--prism-boolean:#E1A6F2;--prism-namespace-opacity:.7;--prism-property:#6AB0F3;--prism-string:#FFD479;--prism-operator:#AC8D58;--prism-atrule:#92D192;--prism-keyword:#FFEEAD;--prism-regex:#FD971F;--prism-border:#4C4C4C;--prism-space:#808080;--prism-url:#ED8EB2;}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:0;text-shadow:0 1px var(--prism-light-shadow);text-align:left;word-spacing:normal;word-break:normal;word-wrap:normal;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px;line-height:1.385;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:var(--prism-selection)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:var(--prism-selection)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--prism-bg)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.namespace{opacity:var(--prism-namespace-opacity)}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:var(--prism-property)}.token.boolean,.token.number{color:var(--prism-boolean)}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:var(--prism-string)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:var(--prism-operator)}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:var(--prism-atrule)}.token.keyword{color:var(--prism-keyword)}.token.important,.token.regex{color:var(--prism-regex)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-brown.css b/media/plugins/syntaxHighlighter/prism-brown.css deleted file mode 100644 index 37549f86..00000000 --- a/media/plugins/syntaxHighlighter/prism-brown.css +++ /dev/null @@ -1 +0,0 @@ -:root{--prism-text:#D7CFD6;--prism-bg:#322931;--prism-light-shadow:rgba(0, 0, 0, 0.3);--prism-selection:#C1DEF1;--prism-comment:#797379;--prism-punctuation:#B9B5B8;--prism-boolean:#FD8B19;--prism-namespace-opacity:.7;--prism-property:#FDCC59;--prism-string:#149B93;--prism-operator:#FD8B19;--prism-atrule:#149B93;--prism-keyword:#8FC13E;--prism-regex:#149B93;--prism-border:#6F5B6D;--prism-space:#876F84;--prism-url:#FD8A7D;}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:0;text-shadow:0 1px var(--prism-light-shadow);text-align:left;word-spacing:normal;word-break:normal;word-wrap:normal;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px;line-height:1.385;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:var(--prism-selection)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:var(--prism-selection)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--prism-bg)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.namespace{opacity:var(--prism-namespace-opacity)}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:var(--prism-property)}.token.boolean,.token.number{color:var(--prism-boolean)}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:var(--prism-string)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:var(--prism-operator)}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:var(--prism-atrule)}.token.keyword{color:var(--prism-keyword)}.token.important,.token.regex{color:var(--prism-regex)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-copy-to-clipboard.min.js b/media/plugins/syntaxHighlighter/prism-copy-to-clipboard.min.js deleted file mode 100644 index f5bcee5a..00000000 --- a/media/plugins/syntaxHighlighter/prism-copy-to-clipboard.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){if(typeof self==="undefined"||!self.Prism||!self.document){return}var c=[];var e={};var b=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(f,g){var h;if(typeof g==="function"){h=g}else{h=function(j){var i;if(typeof g.onClick==="function"){i=document.createElement("button");i.type="button";i.addEventListener("click",function(){g.onClick.call(this,j)})}else{if(typeof g.url==="string"){i=document.createElement("a");i.href=g.url}else{i=document.createElement("span")}}i.textContent=g.text;return i}}c.push(e[f]=h)};var d=Prism.plugins.toolbar.hook=function(f){var h=f.element.parentNode;if(!h||!/pre/i.test(h.nodeName)){return}if(h.parentNode.classList.contains("code-toolbar")){return}var i=document.createElement("div");i.classList.add("code-toolbar");h.parentNode.insertBefore(i,h);i.appendChild(h);var g=document.createElement("div");g.classList.add("toolbar");if(document.body.hasAttribute("data-toolbar-order")){c=document.body.getAttribute("data-toolbar-order").split(",").map(function(j){return e[j]||b})}c.forEach(function(l){var j=l(f);if(!j){return}var k=document.createElement("div");k.classList.add("toolbar-item");k.appendChild(j);g.appendChild(k)});i.appendChild(g)};a("label",function(h){var j=h.element.parentNode;if(!j||!/pre/i.test(j.nodeName)){return}if(!j.hasAttribute("data-label")){return}var f,g;var k=j.getAttribute("data-label");try{g=document.querySelector("template#"+k)}catch(i){}if(g){f=g.content}else{if(j.hasAttribute("data-url")){f=document.createElement("a");f.href=j.getAttribute("data-url")}else{f=document.createElement("span")}f.textContent=k}return f});Prism.hooks.add("complete",d)})();(function(){if(typeof self==="undefined"||!self.Prism||!self.document){return}if(!Prism.plugins.toolbar){console.warn("Copy to Clipboard plugin loaded before Toolbar plugin.");return}var a=window.ClipboardJS||undefined;if(!a&&typeof require==="function"){a=require("clipboard")}var b=[];Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(d){var c=document.createElement("button");c.textContent="Copy";if(!a){b.push(e)}else{e()}return c;function e(){var g=new a(c,{text:function(){return d.code}});g.on("success",function(){c.textContent="Copied!";f()});g.on("error",function(){c.textContent="Press Ctrl+C to copy";f()})}function f(){setTimeout(function(){c.textContent="Copy"},5000)}})})(); \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-gray.css b/media/plugins/syntaxHighlighter/prism-gray.css deleted file mode 100644 index f6849a4c..00000000 --- a/media/plugins/syntaxHighlighter/prism-gray.css +++ /dev/null @@ -1 +0,0 @@ -:root{--prism-text:#323C53;--prism-bg:#F6F6F6;--prism-text-shadow:0 1px white;--prism-selection:#B3D4FC;--prism-comment:#666F78;--prism-punctuation:#999;--prism-namespace-opacity:.7;--prism-property:#C0341D;--prism-selector:#2D61C9;--prism-operator:#9A6E3A;--prism-operator-bg:rgba(255, 255, 255, 0.5);--prism-atrule:#07A;--prism-function:#E09142;--prism-regex:#E90;--prism-border:rgba(112, 128, 144, 0.7);--prism-space:#808080;--prism-url:#C0341D;}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:0;text-shadow:var(--prism-text-shadow);text-align:left;word-spacing:normal;word-break:normal;word-wrap:normal;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px;line-height:1.385;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:var(--prism-selection)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:var(--prism-selection)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--prism-bg)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.namespace{opacity:var(--prism-namespace-opacity)}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:var(--prism-property)}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:var(--prism-selector)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:var(--prism-operator);background:var(--prism-operator-bg)}.token.atrule,.token.attr-value,.token.keyword{color:var(--prism-atrule)}.token.class-name,.token.function{color:var(--prism-function)}.token.important,.token.regex,.token.variable{color:var(--prism-regex)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-inline-color.css b/media/plugins/syntaxHighlighter/prism-inline-color.css deleted file mode 100644 index dc35bb0f..00000000 --- a/media/plugins/syntaxHighlighter/prism-inline-color.css +++ /dev/null @@ -1 +0,0 @@ -span.inline-color-wrapper{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4=") center/110%;display:inline-block;height:1.333ch;width:1.333ch;margin:0 .333ch;box-sizing:border-box;border:1px solid #fff;outline:rgba(0,0,0,.5) solid 1px;overflow:hidden}span.inline-color{display:block;height:120%;width:120%} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-inline-color.min.js b/media/plugins/syntaxHighlighter/prism-inline-color.min.js deleted file mode 100644 index eacb6c2e..00000000 --- a/media/plugins/syntaxHighlighter/prism-inline-color.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var n,a=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:n={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+a.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[a,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=n,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(Prism),function(){if("undefined"!=typeof self&&"undefined"!=typeof Prism&&"undefined"!=typeof document){var e=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,n=/^#?((?:[\da-f]){3,4}|(?:[\da-f]{2}){3,4})$/i,a=[function e(a){var r=n.exec(a);if(r){for(var i,o=(a=r[1]).length>=6?2:1,t=a.length/o,l=1==o?1/15:1/255,s=[],u=0;u=0){for(var r,i=n.content,o=i.split(e).join(""),t=0,l=a.length;t';n.content=s+i}}})}}(); \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-line-numbers.min.js b/media/plugins/syntaxHighlighter/prism-line-numbers.min.js deleted file mode 100644 index 6904fbc2..00000000 --- a/media/plugins/syntaxHighlighter/prism-line-numbers.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){if(typeof self==="undefined"||!self.Prism||!self.document){return}var d="line-numbers";var a=/\n(?!$)/g;var b=function(h){var g=c(h);var k=g["white-space"];if(k==="pre-wrap"||k==="pre-line"){var j=h.querySelector("code");var e=h.querySelector(".line-numbers-rows");var i=h.querySelector(".line-numbers-sizer");var f=j.textContent.split(a);if(!i){i=document.createElement("span");i.className="line-numbers-sizer";j.appendChild(i)}i.style.display="block";f.forEach(function(m,l){i.textContent=m||"\n";var n=i.getBoundingClientRect().height;e.children[l].style.height=n+"px"});i.textContent="";i.style.display="none"}};var c=function(e){if(!e){return null}return window.getComputedStyle?getComputedStyle(e):(e.currentStyle||null)};window.addEventListener("resize",function(){Array.prototype.forEach.call(document.querySelectorAll("pre."+d),b)});Prism.hooks.add("complete",function(i){if(!i.code){return}var j=i.element.parentNode;var k=/\s*\bline-numbers\b\s*/;if(!j||!/pre/i.test(j.nodeName)||(!k.test(j.className)&&!k.test(i.element.className))){return}if(i.element.querySelector(".line-numbers-rows")){return}if(k.test(i.element.className)){i.element.className=i.element.className.replace(k," ")}if(!k.test(j.className)){j.className+=" line-numbers"}var h=i.code.match(a);var g=h?h.length+1:1;var e;var f=new Array(g+1);f=f.join("");e=document.createElement("span");e.setAttribute("aria-hidden","true");e.className="line-numbers-rows";e.innerHTML=f;if(j.hasAttribute("data-start")){j.style.counterReset="linenumber "+(parseInt(j.getAttribute("data-start"),10)-1)}i.element.appendChild(e);b(j);Prism.hooks.run("line-numbers",i)});Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{};e.plugins.lineNumbers=true});Prism.plugins.lineNumbers={getLine:function(f,g){if(f.tagName!=="PRE"||!f.classList.contains(d)){return}var j=f.querySelector(".line-numbers-rows");var h=parseInt(f.getAttribute("data-start"),10)||1;var e=h+(j.children.length-1);if(ge){g=e}var i=g-h;return j.children[i]}}}()); \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-show-invisibles.min.js b/media/plugins/syntaxHighlighter/prism-show-invisibles.min.js deleted file mode 100644 index efee06cc..00000000 --- a/media/plugins/syntaxHighlighter/prism-show-invisibles.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){if("undefined"!=typeof Prism){var r={tab:/\t/,crlf:/\r\n/,lf:/\n/,cr:/\r/,space:/ /};Prism.hooks.add("before-highlight",function(r){e(r.grammar)})}function a(r,n){var t=r[n],i=Prism.util.type(t);switch(i){case"RegExp":var f={};r[n]={pattern:t,inside:f},e(f);break;case"Array":for(var o=0,s=t.length;ocode[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.token.namespace{opacity:var(--prism-namespace-opacity)}.token.number,.token.operator,.token.tag{color:var(--prism-operator)}.token.attr-name,.token.function,.token.important,.token.property,code.language-javascript{color:var(--prism-function)}.token.atrule-id,.token.selector,.token.tag-id{color:var(--prism-atrule)}.language-css .token.string,.language-scss .token.string,.style .token.string,.token.atrule,.token.attr-value,.token.boolean,.token.control,.token.directive,.token.entity,.token.keyword,.token.placeholder,.token.regex,.token.statement,.token.string,.token.unit,.token.url,.token.variable,code.language-css,code.language-scss{color:var(--prism-string)}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted var(--prism-text);text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism-white.css b/media/plugins/syntaxHighlighter/prism-white.css deleted file mode 100644 index 142a4c10..00000000 --- a/media/plugins/syntaxHighlighter/prism-white.css +++ /dev/null @@ -1 +0,0 @@ -:root{--prism-text:#24292F;--prism-bg:white;--prism-light-shadow:white;--prism-selection:#9FC6E9;--prism-comment:#6E7781;--prism-punctuation:#24292F;--prism-namespace-opacity:.7;--prism-property:#0550AE;--prism-string:#0A3069;--prism-operator:#0550AE;--prism-atrule:#CF222E;--prism-function:#8250DF;--prism-regex:#0A3069;--prism-border:#D1D4D8;--prism-space:#808080;--prism-url:#CF222E;}code[class*=language-],pre[class*=language-]{color:var(--prism-text);background:0;text-shadow:0 1px var(--prism-light-shadow);text-align:left;word-spacing:normal;word-break:normal;word-wrap:normal;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px;line-height:1.385;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:var(--prism-selection)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:var(--prism-selection)}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:var(--prism-bg);border:1px solid var(--prism-border)}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--prism-comment)}.token.punctuation{color:var(--prism-punctuation)}.namespace{opacity:var(--prism-namespace-opacity)}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:var(--prism-property)}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:var(--prism-string)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:var(--prism-operator);background:rgba(255,255,255,.5)}.token.atrule,.token.attr-value,.token.keyword{color:var(--prism-atrule)}.token.class-name,.token.function{color:var(--prism-function)}.token.important,.token.regex,.token.variable{color:var(--prism-regex)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;counter-reset:linenumber;padding-left: 7ch;}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-7ch;width:5ch;letter-spacing:-1px;border-right:1px solid var(--prism-border);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:var(--prism-comment);display:block;padding-right:.8em;text-align:right}.token.cr,.token.lf,.token.space,.token.tab:not(:empty),div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.8rem;right:.8rem;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar>.toolbar .toolbar-item{display:inline-block}div.code-toolbar>.toolbar button{font-size:14px;padding:.35rem .7rem}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:var(--prism-space);opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\21E5'}.token.cr:before{content:'\240D'}.token.crlf:before{content:'\240D\240A'}.token.lf:before{content:'\240A'}.token.space:before{content:'\00B7'}.url-link{color:var(--prism-url) !important;cursor:pointer;text-decoration:underline!important;} \ No newline at end of file diff --git a/media/plugins/syntaxHighlighter/prism.js b/media/plugins/syntaxHighlighter/prism.js deleted file mode 100644 index f0b684c6..00000000 --- a/media/plugins/syntaxHighlighter/prism.js +++ /dev/null @@ -1,69 +0,0 @@ -/* PrismJS 1.29.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+apacheconf+aspnet+bash+basic+batch+bbcode+c+csharp+cpp+cfscript+dart+docker+elixir+elm+gdscript+git+glsl+go+graphql+haml+handlebars+haskell+http+ini+java+js-extras+json+jsonp+kotlin+latex+less+lisp+lua+makefile+markdown+markup-templating+matlab+nasm+nginx+objectivec+pascal+perl+php+powershell+pug+python+r+jsx+regex+ruby+rust+sass+scss+scala+scheme+sql+swift+twig+typescript+vbnet+visual-basic+yaml */ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); -Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; -!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism); -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; -Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; -Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(?:[\w=],?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},variable:/[$%]\{?(?:\w\.?[-+:]?)+\}?/,regex:/\^?.*\$|\^.*\$?/}; -!function(e){function n(e,n){return e.replace(/<<(\d+)>>/g,(function(e,s){return"(?:"+n[+s]+")"}))}function s(e,s,a){return RegExp(n(e,s),a||"")}function a(e,n){for(var s=0;s>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var t="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(t+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(t+" "+r+" "+o),g=a("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=a("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=n("<<0>>(?:\\s*<<1>>)?",[h,g]),m=n("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=n("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=n("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k]),v=n("\\(<<0>>+(?:,<<0>>+)+\\)",[w]),x=n("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[v,m,k]),$={keyword:p,punctuation:/[<>()?,.:[\]]/},_="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",B='"(?:\\\\.|[^\\\\"\r\n])*"';e.languages.csharp=e.languages.extend("clike",{string:[{pattern:s("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:s("(^|[^@$\\\\])<<0>>",[B]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:s("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,x]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:s("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:$},{pattern:s("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:$},{pattern:s("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:s("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:$},{pattern:s("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[x,u,h]),inside:$}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:s("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:s("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:s("(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:$},"return-type":{pattern:s("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[x,m]),inside:$,alias:"class-name"},"constructor-invocation":{pattern:s("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[x]),lookbehind:!0,inside:$,alias:"class-name"},"generic-method":{pattern:s("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:s("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:$}}},"type-list":{pattern:s("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,x,p.source,b,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:s("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:p,"class-name":{pattern:RegExp(x),greedy:!0,inside:$},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var E=B+"|"+_,R=n("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[E]),z=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),S="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",j=n("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,z]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:s("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[S,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:s("^<<0>>(?=\\s*:)",[S]),alias:"keyword"},"attribute-arguments":{pattern:s("\\(<<0>>*\\)",[z]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var A=":[^}\r\n]+",F=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),P=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[F,A]),U=a(n("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[E]),2),Z=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[U,A]);function q(n,a){return{interpolation:{pattern:s("((?:^|[^{])(?:\\{\\{)*)<<0>>",[n]),lookbehind:!0,inside:{"format-string":{pattern:s("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[a,A]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:s('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[P]),lookbehind:!0,greedy:!0,inside:q(P,F)},{pattern:s('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[Z]),lookbehind:!0,greedy:!0,inside:q(Z,U)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism); -Prism.languages.aspnet=Prism.languages.extend("markup",{"page-directive":{pattern:/<%\s*@.*%>/,alias:"tag",inside:{"page-directive":{pattern:/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,alias:"tag"},rest:Prism.languages.markup.tag.inside}},directive:{pattern:/<%.*%>/,alias:"tag",inside:{directive:{pattern:/<%\s*?[$=%#:]{0,2}|%>/,alias:"tag"},rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,Prism.languages.insertBefore("inside","punctuation",{directive:Prism.languages.aspnet.directive},Prism.languages.aspnet.tag.inside["attr-value"]),Prism.languages.insertBefore("aspnet","comment",{"asp-comment":{pattern:/<%--[\s\S]*?--%>/,alias:["asp","comment"]}}),Prism.languages.insertBefore("aspnet",Prism.languages.javascript?"script":"tag",{"asp-script":{pattern:/(]*>)[\s\S]*?(?=<\/script>)/i,lookbehind:!0,alias:["asp","script"],inside:Prism.languages.csharp||{}}}); -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i?^\w +\-.])*"/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SELECT CASE|SHARED|SHELL|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,function:/\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,punctuation:/[,;:()]/}; -!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;e.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/\b(?:do|in)\b|^for\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,lookbehind:!0,inside:{keyword:/^\w+\b/,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(Prism); -Prism.languages.bbcode={tag:{pattern:/\[\/?[^\s=\]]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))?(?:\s+[^\s=\]]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+))*\s*\]/,inside:{tag:{pattern:/^\[\/?[^\s=\]]+/,inside:{punctuation:/^\[\/?/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'"\]=]+)/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\]/,"attr-name":/[^\s=\]]+/}}},Prism.languages.shortcode=Prism.languages.bbcode; -Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean; -!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:import|module)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); -Prism.languages.cfscript=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,inside:{annotation:{pattern:/(?:^|[^.])@[\w\.]+/,alias:"punctuation"}}},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],keyword:/\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/,operator:[/\+\+|--|&&|\|\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|:/,/\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/],scope:{pattern:/\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\b/,alias:"global"},type:{pattern:/\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\b/,alias:"builtin"}}),Prism.languages.insertBefore("cfscript","keyword",{"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"}}),delete Prism.languages.cfscript["class-name"],Prism.languages.cfc=Prism.languages.cfscript; -!function(e){var a=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};e.languages.dart=e.languages.extend("clike",{"class-name":[s,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),e.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:e.languages.dart}}},string:/[\s\S]+/}},string:void 0}),e.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),e.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism); -!function(e){var n="(?:[ \t]+(?![ \t])(?:)?|)".replace(//g,(function(){return"\\\\[\r\n](?:\\s|\\\\[\r\n]|#.*(?!.))*(?![\\s#]|\\\\[\r\n])"})),r="\"(?:[^\"\\\\\r\n]|\\\\(?:\r\n|[^]))*\"|'(?:[^'\\\\\r\n]|\\\\(?:\r\n|[^]))*'",t="--[\\w-]+=(?:|(?![\"'])(?:[^\\s\\\\]|\\\\.)+)".replace(//g,(function(){return r})),o={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function a(e,r){return e=e.replace(//g,(function(){return t})).replace(//g,(function(){return n})),RegExp(e,r)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:a("(^(?:ONBUILD)?\\w+)(?:)*","i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:a("(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\\b","i"),lookbehind:!0,greedy:!0},{pattern:a("(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\\\]+)AS","i"),lookbehind:!0,greedy:!0},{pattern:a("(^ONBUILD)\\w+","i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism); -Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach((function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}})); -Prism.languages.elm={comment:/--.*|\{-[\s\S]*?-\}/,char:{pattern:/'(?:[^\\'\r\n]|\\(?:[abfnrtv\\']|\d+|x[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}))'/,greedy:!0},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:[^\\"\r\n]|\\.)*"/,greedy:!0}],"import-statement":{pattern:/(^[\t ]*)import\s+[A-Z]\w*(?:\.[A-Z]\w*)*(?:\s+as\s+(?:[A-Z]\w*)(?:\.[A-Z]\w*)*)?(?:\s+exposing\s+)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|exposing|import)\b/}},keyword:/\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\b/,builtin:/\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[+\-/*=.$<>:&|^?%#@~!]{2,}|[+\-/*=$<>:&|^?%#@~!]/,hvariable:/\b(?:[A-Z]\w*\.)*[a-z]\w*\b/,constant:/\b(?:[A-Z]\w*\.)*[A-Z]\w*\b/,punctuation:/[{}[\]|(),.:]/}; -Prism.languages.gdscript={comment:/#.*/,string:{pattern:/@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/,greedy:!0},"class-name":{pattern:/(^(?:class|class_name|extends)[ \t]+|^export\([ \t]*|\bas[ \t]+|(?:\b(?:const|var)[ \t]|[,(])[ \t]*\w+[ \t]*:[ \t]*|->[ \t]*)[a-zA-Z_]\w*/m,lookbehind:!0},keyword:/\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,variable:/\$\w+/,number:[/\b0b[01_]+\b|\b0x[\da-fA-F_]+\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.[\d_]+)(?:e[+-]?[\d_]+)?\b/,/\b(?:INF|NAN|PI|TAU)\b/],constant:/\b[A-Z][A-Z_\d]*\b/,boolean:/\b(?:false|true)\b/,operator:/->|:=|&&|\|\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,punctuation:/[.:,;()[\]{}]/}; -Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m}; -Prism.languages.glsl=Prism.languages.extend("c",{keyword:/\b(?:active|asm|atomic_uint|attribute|[ibdu]?vec[234]|bool|break|buffer|case|cast|centroid|class|coherent|common|const|continue|d?mat[234](?:x[234])?|default|discard|do|double|else|enum|extern|external|false|filter|fixed|flat|float|for|fvec[234]|goto|half|highp|hvec[234]|[iu]?sampler2DMS(?:Array)?|[iu]?sampler2DRect|[iu]?samplerBuffer|[iu]?samplerCube|[iu]?samplerCubeArray|[iu]?sampler[123]D|[iu]?sampler[12]DArray|[iu]?image2DMS(?:Array)?|[iu]?image2DRect|[iu]?imageBuffer|[iu]?imageCube|[iu]?imageCubeArray|[iu]?image[123]D|[iu]?image[12]DArray|if|in|inline|inout|input|int|interface|invariant|layout|long|lowp|mediump|namespace|noinline|noperspective|out|output|partition|patch|precise|precision|public|readonly|resource|restrict|return|sample|sampler[12]DArrayShadow|sampler[12]DShadow|sampler2DRectShadow|sampler3DRect|samplerCubeArrayShadow|samplerCubeShadow|shared|short|sizeof|smooth|static|struct|subroutine|superp|switch|template|this|true|typedef|uint|uniform|union|unsigned|using|varying|void|volatile|while|writeonly)\b/}); -Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go["class-name"]; -Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},Prism.hooks.add("after-tokenize",(function(n){if("graphql"===n.language)for(var t=n.tokens.filter((function(n){return"string"!=typeof n&&"comment"!==n.type&&"scalar"!==n.type})),e=0;e0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var u=e;u=0&&b(p,"variable-input")}}}}function l(n){return t[e+n]}function c(n,t){t=t||0;for(var e=0;e|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var n={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var t="(?:"+["([^a-zA-Z0-9\\s{(\\[<=])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","\\((?:[^()\\\\]|\\\\[^]|\\((?:[^()\\\\]|\\\\[^])*\\))*\\)","\\{(?:[^{}\\\\]|\\\\[^]|\\{(?:[^{}\\\\]|\\\\[^])*\\})*\\}","\\[(?:[^\\[\\]\\\\]|\\\\[^]|\\[(?:[^\\[\\]\\\\]|\\\\[^])*\\])*\\]","<(?:[^<>\\\\]|\\\\[^]|<(?:[^<>\\\\]|\\\\[^])*>)*>"].join("|")+")",i='(?:"(?:\\\\.|[^"\\\\\r\n])*"|(?:\\b[a-zA-Z_]\\w*|[^\\s\0-\\x7F]+)[?!]?|\\$.)';e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp("%r"+t+"[egimnosux]{0,6}"),greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:n,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp("(^|[^:]):"+i),lookbehind:!0,greedy:!0},{pattern:RegExp("([\r\n{(,][ \t]*)"+i+"(?=:(?!:))"),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp("%[qQiIwWs]?"+t),greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:n,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp("%x"+t),greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:n,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism); -!function(n){n.languages.haml={"multiline-comment":{pattern:/((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,lookbehind:!0,alias:"comment"},"multiline-code":[{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,lookbehind:!0,inside:n.languages.ruby},{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,lookbehind:!0,inside:n.languages.ruby}],filter:{pattern:/((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"symbol"}}},markup:{pattern:/((?:^|\r?\n|\r)[\t ]*)<.+/,lookbehind:!0,inside:n.languages.markup},doctype:{pattern:/((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[\/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,lookbehind:!0,inside:n.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:n.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:n.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},ruby:{pattern:/[\s\S]+/,inside:n.languages.ruby}}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var e=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],t={},r=0,a=e.length;r=o.length);u++){var g=i[u];if("string"==typeof g||g.content&&"string"==typeof g.content){var l=o[r],s=t.tokenStack[l],f="string"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),"language-"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),"string"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism); -!function(a){a.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},a.hooks.add("before-tokenize",(function(e){a.languages["markup-templating"].buildPlaceholders(e,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),a.hooks.add("after-tokenize",(function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"handlebars")})),a.languages.hbs=a.languages.handlebars,a.languages.mustache=a.languages.handlebars}(Prism); -Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell; -!function(t){function a(t){return RegExp("(^(?:"+t+"):[ \t]*(?![ \t]))[^]+","i")}t.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:t.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:a("Content-Security-Policy"),lookbehind:!0,alias:["csp","languages-csp"],inside:t.languages.csp},{pattern:a("Public-Key-Pins(?:-Report-Only)?"),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:t.languages.hpkp},{pattern:a("Strict-Transport-Security"),lookbehind:!0,alias:["hsts","languages-hsts"],inside:t.languages.hsts},{pattern:a("[^:]+"),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var e,n=t.languages,s={"application/javascript":n.javascript,"application/json":n.json||n.javascript,"application/xml":n.xml,"text/xml":n.xml,"text/html":n.html,"text/css":n.css,"text/plain":n.plain},i={"application/json":!0,"application/xml":!0};function r(t){var a=t.replace(/^[a-z]+\//,"");return"(?:"+t+"|\\w+/(?:[\\w.-]+\\+)+"+a+"(?![+\\w.-]))"}for(var p in s)if(s[p]){e=e||{};var l=i[p]?r(p):p;e[p.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+l+"(?:(?:\r\n?|\n)[\\w-].*)*(?:\r(?:\n|(?!\n))|\n))[^ \t\\w-][^]*","i"),lookbehind:!0,inside:s[p]}}e&&t.languages.insertBefore("http","header",e)}(Prism); -Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/}; -!function(e){var n=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t="(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp("(^|[^\\w.])"+t+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[s,{pattern:RegExp("(^|[^\\w.])"+t+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)"),lookbehind:!0,inside:s.inside},{pattern:RegExp("(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)"+t+"[A-Z]\\w*\\b"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp("(\\bimport\\s+)"+t+"(?:[A-Z]\\w*|\\*)(?=\\s*;)"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp("(\\bimport\\s+static\\s+)"+t+"(?:\\w+|\\*)(?=\\s*;)"),lookbehind:!0,alias:"static",inside:{namespace:s.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism); -!function(a){function e(a,e){return RegExp(a.replace(//g,(function(){return"(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*"})),e)}a.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+a.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),a.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+a.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),a.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),a.languages.insertBefore("javascript","keyword",{imports:{pattern:e("(\\bimport\\b\\s*)(?:(?:\\s*,\\s*(?:\\*\\s*as\\s+|\\{[^{}]*\\}))?|\\*\\s*as\\s+|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e("(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),a.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),a.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:e("(\\.\\s*)#?"),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var e={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:e},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:e},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism); -!function(a){var e=/\\(?:[^a-z()[\]]|[a-z*]+)/i,n={"equation-command":{pattern:e,alias:"regex"}};a.languages.latex={comment:/%.*/,cdata:{pattern:/(\\begin\{((?:lstlisting|verbatim)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:align|eqnarray|equation|gather|math|multline)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0,alias:"class-name"},function:{pattern:e,alias:"selector"},punctuation:/[[\]{}&]/},a.languages.tex=a.languages.latex,a.languages.context=a.languages.latex}(Prism); -Prism.languages.less=Prism.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),Prism.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}); -!function(e){function n(e){return RegExp("(\\()(?:"+e+")(?=[\\s\\)])")}function a(e){return RegExp("([\\s([])(?:"+e+")(?=[\\s)])")}var t="(?!\\d)[-+*/~!@$%^=<>{}\\w]+",r="(\\()",i="(?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\))*\\))*\\))*",s={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+t+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+t),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+t),alias:"property"},splice:{pattern:RegExp(",@?"+t),alias:["symbol","variable"]},keyword:[{pattern:RegExp("(\\()(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)(?=\\s)"),lookbehind:!0},{pattern:RegExp("(\\()(?:append|by|collect|concat|do|finally|for|in|return)(?=\\s)"),lookbehind:!0}],declare:{pattern:n("declare"),lookbehind:!0,alias:"keyword"},interactive:{pattern:n("interactive"),lookbehind:!0,alias:"keyword"},boolean:{pattern:a("nil|t"),lookbehind:!0},number:{pattern:a("[-+]?\\d+(?:\\.\\d*)?"),lookbehind:!0},defvar:{pattern:RegExp("(\\()def(?:const|custom|group|var)\\s+"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp("(\\()(?:cl-)?(?:defmacro|defun\\*?)\\s+"+t+"\\s+\\("+i+"\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp("(\\()lambda\\s+\\(\\s*(?:&?"+t+"(?:\\s+&?"+t+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},l={"lisp-marker":RegExp("&(?!\\d)[-+*/~!@$%^=<>{}\\w]+"),varform:{pattern:RegExp("\\("+t+"\\s+(?=\\S)"+i+"\\)"),inside:s},argument:{pattern:RegExp("(^|[\\s(])"+t),lookbehind:!0,alias:"variable"},rest:s},o="\\S+(?:\\s+\\S+)*",p={pattern:RegExp(r+i+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+o),inside:l},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+o),inside:l},keys:{pattern:RegExp("&key\\s+"+o+"(?:\\s+&allow-other-keys)?"),inside:l},argument:{pattern:RegExp(t),alias:"variable"},punctuation:/[()]/}};s.lambda.inside.arguments=p,s.defun.inside.arguments=e.util.clone(p),s.defun.inside.arguments.inside.sublist=p,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages["emacs-lisp"]=s}(Prism); -Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}; -Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}; -!function(n){function e(n){return n=n.replace(//g,(function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"})),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var t="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",a="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,(function(){return t})),i="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+i+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+i+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(t),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(t),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:e("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:e("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:e("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:e('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(e){["url","bold","italic","strike","code-snippet"].forEach((function(t){e!==t&&(n.languages.markdown[e].inside.content.inside[t]=n.languages.markdown[t])}))})),n.hooks.add("after-tokenize",(function(n){"markdown"!==n.language&&"md"!==n.language||function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},l=String.fromCodePoint||String.fromCharCode;n.languages.md=n.languages.markdown}(Prism); -Prism.languages.matlab={comment:[/%\{[\s\S]*?\}%/,/%.+/],string:{pattern:/\B'(?:''|[^'\r\n])*'/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?(?:[ij])?|\b[ij]\b/,keyword:/\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\b/,function:/\b(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}; -Prism.languages.nasm={comment:/;.*$/m,string:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,label:{pattern:/(^\s*)[A-Za-z._?$][\w.?$@~#]*:/m,lookbehind:!0,alias:"function"},keyword:[/\[?BITS (?:16|32|64)\]?/,{pattern:/(^\s*)section\s*[a-z.]+:?/im,lookbehind:!0},/(?:extern|global)[^;\r\n]*/i,/(?:CPU|DEFAULT|FLOAT).*$/m],register:{pattern:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s)\b/i,alias:"variable"},number:/(?:\b|(?=\$))(?:0[hx](?:\.[\da-f]+|[\da-f]+(?:\.[\da-f]+)?)(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[\[\]*+\-\/%<>=&|$!]/}; -!function(e){var n=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;e.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0,greedy:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,greedy:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:n}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:n}},punctuation:/[{};]/}}(Prism); -Prism.languages.objectivec=Prism.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete Prism.languages.objectivec["class-name"],Prism.languages.objc=Prism.languages.objectivec; -Prism.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal; -!function(e){var n="(?:\\((?:[^()\\\\]|\\\\[^])*\\)|\\{(?:[^{}\\\\]|\\\\[^])*\\}|\\[(?:[^[\\]\\\\]|\\\\[^])*\\]|<(?:[^<>\\\\]|\\\\[^])*>)";e.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp("\\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")"),greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:RegExp("\\b(?:m|qr)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")[msixpodualngc]*"),greedy:!0},{pattern:RegExp("(^|[^-])\\b(?:s|tr|y)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2(?:(?!\\2)[^\\\\]|\\\\[^])*\\2","([a-zA-Z0-9])(?:(?!\\3)[^\\\\]|\\\\[^])*\\3(?:(?!\\3)[^\\\\]|\\\\[^])*\\3",n+"\\s*"+n].join("|")+")[msixpodualngcer]*"),lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*?>|\b_\b/,alias:"symbol"},"v-string":{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/(\bsub[ \t]+)\w+/,lookbehind:!0},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,punctuation:/[{}[\];(),:]/}}(Prism); -!function(e){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(a){/<\?/.test(a.code)&&e.languages["markup-templating"].buildPlaceholders(a,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"php")}))}(Prism); -!function(e){var i=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(Prism); -!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:/\S[\s\S]*/}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:case|default|each|else|if|unless|when|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:case|default|else|if|unless|when|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:append|block|extends|include|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,lookbehind:!0,inside:e.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:e.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:e.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w\-]+/,"attr-class":/\.[\w\-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\-!=|]+/};for(var t=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],n={},a=0,i=t.length;a(?:(?:\r?\n|\r(?!\n))(?:\\2[\t ].+|\\s*?(?=\r?\n|\r)))+".replace("",(function(){return r.filter})),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:{pattern:/\S[\s\S]*/,alias:[r.language,"language-"+r.language],inside:e.languages[r.language]}}})}e.languages.insertBefore("pug","filter",n)}(Prism); -Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; -Prism.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:FALSE|TRUE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:Inf|NaN)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+(?:\.\d*)?|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/}; -!function(t){var n=t.util.clone(t.languages.javascript),e="(?:\\{*\\.{3}(?:[^{}]|)*\\})";function a(t,n){return t=t.replace(//g,(function(){return"(?:\\s|//.*(?!.)|/\\*(?:[^*]|\\*(?!/))\\*/)"})).replace(//g,(function(){return"(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})"})).replace(//g,(function(){return e})),RegExp(t,n)}e=a(e).source,t.languages.jsx=t.languages.extend("markup",n),t.languages.jsx.tag.pattern=a("+(?:[\\w.:$-]+(?:=(?:\"(?:\\\\[^]|[^\\\\\"])*\"|'(?:\\\\[^]|[^\\\\'])*'|[^\\s{'\"/>=]+|))?|))**/?)?>"),t.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,t.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,t.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,t.languages.jsx.tag.inside.comment=n.comment,t.languages.insertBefore("inside","attr-name",{spread:{pattern:a(""),inside:t.languages.jsx}},t.languages.jsx.tag),t.languages.insertBefore("inside","special-attr",{script:{pattern:a("="),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:t.languages.jsx}}},t.languages.jsx.tag);var s=function(t){return t?"string"==typeof t?t:"string"==typeof t.content?t.content:t.content.map(s).join(""):""},g=function(n){for(var e=[],a=0;a0&&e[e.length-1].tagName===s(o.content[0].content[1])&&e.pop():"/>"===o.content[o.content.length-1].content||e.push({tagName:s(o.content[0].content[1]),openedBraces:0}):e.length>0&&"punctuation"===o.type&&"{"===o.content?e[e.length-1].openedBraces++:e.length>0&&e[e.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?e[e.length-1].openedBraces--:i=!0),(i||"string"==typeof o)&&e.length>0&&0===e[e.length-1].openedBraces){var r=s(o);a0&&("string"==typeof n[a-1]||"plain-text"===n[a-1].type)&&(r=s(n[a-1])+r,n.splice(a-1,1),a--),n[a]=new t.Token("plain-text",r,null,r)}o.content&&"string"!=typeof o.content&&g(o.content)}};t.hooks.add("after-tokenize",(function(t){"jsx"!==t.language&&"tsx"!==t.language||g(t.tokens)}))}(Prism); -!function(a){var e={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,t="(?:[^\\\\-]|"+n.source+")",s=RegExp(t+"-"+t),i={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"};a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:s,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":e,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":e,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":i}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|)*\\*/",t=0;t<2;t++)a=a.replace(//g,(function(){return a}));a=a.replace(//g,(function(){return"[^\\s\\S]"})),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); -!function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var r=/\$[-\w]+|#\{\$[-\w]+\}/,t=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:r,operator:t}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:r,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(Prism); -Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),Prism.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss; -Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function,delete Prism.languages.scala.constant; -!function(e){e.languages.scheme={comment:/;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()\[\]#'\s]+/,greedy:!0},char:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,greedy:!0},"lambda-parameter":[{pattern:/((?:^|[^'`#])[(\[]lambda\s+)(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[(\[]lambda\s+[(\[])[^()\[\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[(\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\[\]\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[(\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\[\]\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[(\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(e){for(var r in e)e[r]=e[r].replace(/<[\w\s]+>/g,(function(r){return"(?:"+e[r].trim()+")"}));return e[r]}({"":"\\d+(?:/\\d+)|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[esfdl][+-]?\\d+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"(?:#d(?:#[ei])?|#[ei](?:#d)?)?","":"[0-9a-f]+(?:/[0-9a-f]+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"#[box](?:#[ei])?|(?:#[ei])?#[box]","":"(^|[()\\[\\]\\s])(?:|)(?=[()\\[\\]\\s]|$)"}),"i"),lookbehind:!0},boolean:{pattern:/(^|[()\[\]\s])#(?:[ft]|false|true)(?=[()\[\]\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[(\[])(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\[\]\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()\[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()\[\]\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()\[\]']/}}(Prism); -Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; -Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp('(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^(])|[^\\\\\r\n"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ \t]*(?:![ \t]*)?(?:\\b\\w+\\b(?:[ \t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \t]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=Prism.languages.swift})); -Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",(function(e){"twig"===e.language&&Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")})); -!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var s=e.languages.extend("typescript",{});delete s["class-name"],e.languages.typescript["class-name"].inside=s,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism); -Prism.languages.vbnet=Prism.languages.extend("basic",{comment:[{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},{pattern:/(^|[^\\:])'.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(^|[^"])"(?:""|[^"])*"(?!")/,lookbehind:!0,greedy:!0},keyword:/(?:\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDBL|CDEC|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DEFAULT|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LET|LIB|LIKE|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPERATOR|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHELL|SHORT|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SWAP|SYNCLOCK|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\$|\b)/i,punctuation:/[,;:(){}]/}); -Prism.languages["visual-basic"]={comment:{pattern:/(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\b_[ \t]*(?:\r\n?|\n)|.)+/i,alias:"property",greedy:!0},string:{pattern:/\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,greedy:!0},date:{pattern:/#[ \t]*(?:\d+([/-])\d+\1\d+(?:[ \t]+(?:\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?))?|\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?)[ \t]*#/i,alias:"number"},number:/(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:[FRD]|U?[ILS])?/i,boolean:/\b(?:False|Nothing|True)\b/i,keyword:/\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\b/i,operator:/[+\-*/\\^<=>&#@$%!]|\b_(?=[ \t]*[\r\n])/,punctuation:/[{}().,:?]/},Prism.languages.vb=Prism.languages["visual-basic"],Prism.languages.vba=Prism.languages["visual-basic"]; -!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); diff --git a/media/posts/3/1737445656507-hyper-nize-2.png b/media/posts/3/1737445656507-hyper-nize-2.png deleted file mode 100644 index ebd25fed..00000000 Binary files a/media/posts/3/1737445656507-hyper-nize-2.png and /dev/null differ diff --git a/media/posts/3/responsive/1737445656507-hyper-nize-2-lg.webp b/media/posts/3/responsive/1737445656507-hyper-nize-2-lg.webp deleted file mode 100644 index 0cd50a6e..00000000 Binary files a/media/posts/3/responsive/1737445656507-hyper-nize-2-lg.webp and /dev/null differ diff --git a/media/posts/3/responsive/1737445656507-hyper-nize-2-md.webp b/media/posts/3/responsive/1737445656507-hyper-nize-2-md.webp deleted file mode 100644 index 2d049c7a..00000000 Binary files a/media/posts/3/responsive/1737445656507-hyper-nize-2-md.webp and /dev/null differ diff --git a/media/posts/3/responsive/1737445656507-hyper-nize-2-sm.webp b/media/posts/3/responsive/1737445656507-hyper-nize-2-sm.webp deleted file mode 100644 index 08225d97..00000000 Binary files a/media/posts/3/responsive/1737445656507-hyper-nize-2-sm.webp and /dev/null differ diff --git a/media/posts/3/responsive/1737445656507-hyper-nize-2-xl.webp b/media/posts/3/responsive/1737445656507-hyper-nize-2-xl.webp deleted file mode 100644 index 42878430..00000000 Binary files a/media/posts/3/responsive/1737445656507-hyper-nize-2-xl.webp and /dev/null differ diff --git a/media/posts/3/responsive/1737445656507-hyper-nize-2-xs.webp b/media/posts/3/responsive/1737445656507-hyper-nize-2-xs.webp deleted file mode 100644 index c9534460..00000000 Binary files a/media/posts/3/responsive/1737445656507-hyper-nize-2-xs.webp and /dev/null differ diff --git a/media/posts/7/1737385567463-nizenberg.png b/media/posts/7/1737385567463-nizenberg.png deleted file mode 100644 index d5d3876c..00000000 Binary files a/media/posts/7/1737385567463-nizenberg.png and /dev/null differ diff --git a/media/posts/7/1737385719733-mega-nize.png b/media/posts/7/1737385719733-mega-nize.png deleted file mode 100644 index 2be5c2ce..00000000 Binary files a/media/posts/7/1737385719733-mega-nize.png and /dev/null differ diff --git a/media/posts/7/1737386088521-ultra-nize.png b/media/posts/7/1737386088521-ultra-nize.png deleted file mode 100644 index 8fa5d0b6..00000000 Binary files a/media/posts/7/1737386088521-ultra-nize.png and /dev/null differ diff --git a/media/posts/7/responsive/1737385567463-nizenberg-lg.webp b/media/posts/7/responsive/1737385567463-nizenberg-lg.webp deleted file mode 100644 index c5a07398..00000000 Binary files a/media/posts/7/responsive/1737385567463-nizenberg-lg.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385567463-nizenberg-md.webp b/media/posts/7/responsive/1737385567463-nizenberg-md.webp deleted file mode 100644 index 0edee6dd..00000000 Binary files a/media/posts/7/responsive/1737385567463-nizenberg-md.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385567463-nizenberg-sm.webp b/media/posts/7/responsive/1737385567463-nizenberg-sm.webp deleted file mode 100644 index 8c044434..00000000 Binary files a/media/posts/7/responsive/1737385567463-nizenberg-sm.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385567463-nizenberg-xl.webp b/media/posts/7/responsive/1737385567463-nizenberg-xl.webp deleted file mode 100644 index 773a621b..00000000 Binary files a/media/posts/7/responsive/1737385567463-nizenberg-xl.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385567463-nizenberg-xs.webp b/media/posts/7/responsive/1737385567463-nizenberg-xs.webp deleted file mode 100644 index 745f666b..00000000 Binary files a/media/posts/7/responsive/1737385567463-nizenberg-xs.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385719733-mega-nize-lg.webp b/media/posts/7/responsive/1737385719733-mega-nize-lg.webp deleted file mode 100644 index 314a1602..00000000 Binary files a/media/posts/7/responsive/1737385719733-mega-nize-lg.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385719733-mega-nize-md.webp b/media/posts/7/responsive/1737385719733-mega-nize-md.webp deleted file mode 100644 index 33ae4582..00000000 Binary files a/media/posts/7/responsive/1737385719733-mega-nize-md.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385719733-mega-nize-sm.webp b/media/posts/7/responsive/1737385719733-mega-nize-sm.webp deleted file mode 100644 index bc622e79..00000000 Binary files a/media/posts/7/responsive/1737385719733-mega-nize-sm.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385719733-mega-nize-xl.webp b/media/posts/7/responsive/1737385719733-mega-nize-xl.webp deleted file mode 100644 index 598a9a7e..00000000 Binary files a/media/posts/7/responsive/1737385719733-mega-nize-xl.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737385719733-mega-nize-xs.webp b/media/posts/7/responsive/1737385719733-mega-nize-xs.webp deleted file mode 100644 index f60c871e..00000000 Binary files a/media/posts/7/responsive/1737385719733-mega-nize-xs.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737386088521-ultra-nize-lg.webp b/media/posts/7/responsive/1737386088521-ultra-nize-lg.webp deleted file mode 100644 index 13e15932..00000000 Binary files a/media/posts/7/responsive/1737386088521-ultra-nize-lg.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737386088521-ultra-nize-md.webp b/media/posts/7/responsive/1737386088521-ultra-nize-md.webp deleted file mode 100644 index ec67009b..00000000 Binary files a/media/posts/7/responsive/1737386088521-ultra-nize-md.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737386088521-ultra-nize-sm.webp b/media/posts/7/responsive/1737386088521-ultra-nize-sm.webp deleted file mode 100644 index 1a5ccc50..00000000 Binary files a/media/posts/7/responsive/1737386088521-ultra-nize-sm.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737386088521-ultra-nize-xl.webp b/media/posts/7/responsive/1737386088521-ultra-nize-xl.webp deleted file mode 100644 index 90658d97..00000000 Binary files a/media/posts/7/responsive/1737386088521-ultra-nize-xl.webp and /dev/null differ diff --git a/media/posts/7/responsive/1737386088521-ultra-nize-xs.webp b/media/posts/7/responsive/1737386088521-ultra-nize-xs.webp deleted file mode 100644 index 02804e5f..00000000 Binary files a/media/posts/7/responsive/1737386088521-ultra-nize-xs.webp and /dev/null differ diff --git a/media/website/IRWA-Logo1.ico b/media/website/IRWA-Logo1.ico deleted file mode 100644 index 287a009f..00000000 Binary files a/media/website/IRWA-Logo1.ico and /dev/null differ diff --git a/members/index.html b/members/index.html deleted file mode 100644 index 88eb9d71..00000000 --- a/members/index.html +++ /dev/null @@ -1,197 +0,0 @@ ---- -layout: page -title: Members -description: Our members include wikis covering games from some of the most popular games on the Roblox platform. Take a look at our member sites right here! ---- - -

Members

-
-

Our members include wikis covering games from some of the most popular games on the Roblox platform. Take a look at our member sites right here!

-

Interested in joining? Check out this page for more!

-
- -
- {% for member in site.data.members %} - - {% endfor %} -
- - - - - diff --git a/oneko.gif b/oneko.gif deleted file mode 100644 index a009c2cc..00000000 Binary files a/oneko.gif and /dev/null differ diff --git a/oneko.js b/oneko.js deleted file mode 100644 index e2855e19..00000000 --- a/oneko.js +++ /dev/null @@ -1,239 +0,0 @@ -// oneko.js: https://github.com/adryd325/oneko.js - -(function oneko() { - const isReducedMotion = - window.matchMedia(`(prefers-reduced-motion: reduce)`) === true || - window.matchMedia(`(prefers-reduced-motion: reduce)`).matches === true; - - if (isReducedMotion) return; - - const nekoEl = document.createElement("div"); - - let nekoPosX = 32; - let nekoPosY = 32; - - let mousePosX = 0; - let mousePosY = 0; - - let frameCount = 0; - let idleTime = 0; - let idleAnimation = null; - let idleAnimationFrame = 0; - - const nekoSpeed = 10; - const spriteSets = { - idle: [[-3, -3]], - alert: [[-7, -3]], - scratchSelf: [ - [-5, 0], - [-6, 0], - [-7, 0], - ], - scratchWallN: [ - [0, 0], - [0, -1], - ], - scratchWallS: [ - [-7, -1], - [-6, -2], - ], - scratchWallE: [ - [-2, -2], - [-2, -3], - ], - scratchWallW: [ - [-4, 0], - [-4, -1], - ], - tired: [[-3, -2]], - sleeping: [ - [-2, 0], - [-2, -1], - ], - N: [ - [-1, -2], - [-1, -3], - ], - NE: [ - [0, -2], - [0, -3], - ], - E: [ - [-3, 0], - [-3, -1], - ], - SE: [ - [-5, -1], - [-5, -2], - ], - S: [ - [-6, -3], - [-7, -2], - ], - SW: [ - [-5, -3], - [-6, -1], - ], - W: [ - [-4, -2], - [-4, -3], - ], - NW: [ - [-1, 0], - [-1, -1], - ], - }; - - function init() { - nekoEl.id = "oneko"; - nekoEl.ariaHidden = true; - nekoEl.style.width = "32px"; - nekoEl.style.height = "32px"; - nekoEl.style.position = "fixed"; - nekoEl.style.pointerEvents = "none"; - nekoEl.style.imageRendering = "pixelated"; - nekoEl.style.left = `${nekoPosX - 16}px`; - nekoEl.style.top = `${nekoPosY - 16}px`; - nekoEl.style.zIndex = 2147483647; - - let nekoFile = "./oneko.gif" - const curScript = document.currentScript - if (curScript && curScript.dataset.cat) { - nekoFile = curScript.dataset.cat - } - nekoEl.style.backgroundImage = `url(${nekoFile})`; - - document.body.appendChild(nekoEl); - - document.addEventListener("mousemove", function (event) { - mousePosX = event.clientX; - mousePosY = event.clientY; - }); - - window.requestAnimationFrame(onAnimationFrame); - } - - let lastFrameTimestamp; - - function onAnimationFrame(timestamp) { - // Stops execution if the neko element is removed from DOM - if (!nekoEl.isConnected) { - return; - } - if (!lastFrameTimestamp) { - lastFrameTimestamp = timestamp; - } - if (timestamp - lastFrameTimestamp > 100) { - lastFrameTimestamp = timestamp - frame() - } - window.requestAnimationFrame(onAnimationFrame); - } - - function setSprite(name, frame) { - const sprite = spriteSets[name][frame % spriteSets[name].length]; - nekoEl.style.backgroundPosition = `${sprite[0] * 32}px ${sprite[1] * 32}px`; - } - - function resetIdleAnimation() { - idleAnimation = null; - idleAnimationFrame = 0; - } - - function idle() { - idleTime += 1; - - // every ~ 20 seconds - if ( - idleTime > 10 && - Math.floor(Math.random() * 200) == 0 && - idleAnimation == null - ) { - let avalibleIdleAnimations = ["sleeping", "scratchSelf"]; - if (nekoPosX < 32) { - avalibleIdleAnimations.push("scratchWallW"); - } - if (nekoPosY < 32) { - avalibleIdleAnimations.push("scratchWallN"); - } - if (nekoPosX > window.innerWidth - 32) { - avalibleIdleAnimations.push("scratchWallE"); - } - if (nekoPosY > window.innerHeight - 32) { - avalibleIdleAnimations.push("scratchWallS"); - } - idleAnimation = - avalibleIdleAnimations[ - Math.floor(Math.random() * avalibleIdleAnimations.length) - ]; - } - - switch (idleAnimation) { - case "sleeping": - if (idleAnimationFrame < 8) { - setSprite("tired", 0); - break; - } - setSprite("sleeping", Math.floor(idleAnimationFrame / 4)); - if (idleAnimationFrame > 192) { - resetIdleAnimation(); - } - break; - case "scratchWallN": - case "scratchWallS": - case "scratchWallE": - case "scratchWallW": - case "scratchSelf": - setSprite(idleAnimation, idleAnimationFrame); - if (idleAnimationFrame > 9) { - resetIdleAnimation(); - } - break; - default: - setSprite("idle", 0); - return; - } - idleAnimationFrame += 1; - } - - function frame() { - frameCount += 1; - const diffX = nekoPosX - mousePosX; - const diffY = nekoPosY - mousePosY; - const distance = Math.sqrt(diffX ** 2 + diffY ** 2); - - if (distance < nekoSpeed || distance < 48) { - idle(); - return; - } - - idleAnimation = null; - idleAnimationFrame = 0; - - if (idleTime > 1) { - setSprite("alert", 0); - // count down after being alerted before moving - idleTime = Math.min(idleTime, 7); - idleTime -= 1; - return; - } - - let direction; - direction = diffY / distance > 0.5 ? "N" : ""; - direction += diffY / distance < -0.5 ? "S" : ""; - direction += diffX / distance > 0.5 ? "W" : ""; - direction += diffX / distance < -0.5 ? "E" : ""; - setSprite(direction, frameCount); - - nekoPosX -= (diffX / distance) * nekoSpeed; - nekoPosY -= (diffY / distance) * nekoSpeed; - - nekoPosX = Math.min(Math.max(16, nekoPosX), window.innerWidth - 16); - nekoPosY = Math.min(Math.max(16, nekoPosY), window.innerHeight - 16); - - nekoEl.style.left = `${nekoPosX - 16}px`; - nekoEl.style.top = `${nekoPosY - 16}px`; - } - - init(); -})(); \ No newline at end of file diff --git a/pages/about.html b/pages/about.html new file mode 100644 index 00000000..774268b4 --- /dev/null +++ b/pages/about.html @@ -0,0 +1,52 @@ +--- +layout: page +body_class: page-template +title: About Us +description: Learn about the Independent Roblox Wiki Alliance mission and why we support independence. +permalink: /about/ +--- + +

About Us

+

Originally starting as a small server for independent Roblox wiki staff to connect and discuss, + over time our alliance has developed into what it is now through the help of our community.

+
+ +

Why independence is important

+

The goal of a wiki, first and foremost, is to be a comprehensive, informative resource for the community. Unfortunately, many companies have decided to exploit users looking to utilise these resources by putting their own interest first: profit.

+

Wiki companies like Fandom have received millions of dollars from private investors, venture capitalists, and private equity firms. As investors are primarily looking for profit from their investments, this leads to investor appeasement being prioritised over user experience. Fandom is notorious for its overbearing advertisement, blatant disrespect for wiki contributors, lack of customisation, and exploitative, hostile migration policies.

+

We believe that this is completely unacceptable, for editors and readers alike. Wiki staff deserve the ability to control what they create and how it's displayed. Therefore, we founded this alliance with the goal of supporting communities interested in independent alternatives.

+

We fully support independently hosted wikis or wikis hosted on transparent wiki farms like Miraheze, a non-profit, ad-free alternative hosting site that allows for a wiki to be fully controlled by its staff.

+ +

Our Values

+
+

I want the alliance to be a welcoming, helpful resource for all independent Roblox wikis.

+ Mooncloud in an interview on Miraheze Monthly +
+
+
+

Project Independence

+

Our biggest goal is supporting wikis in achieving the freedom to govern themselves and make their own choices without the interference of external influences.

+
+
+

Supporting Projects

+

Successful wikis need proper tools and backing. We aim to help projects find the resources and materials they need to develop their own communities.

+
+
+

Connecting Creators

+

Knowledge grows and spreads through connection. We want to cultivate a network of wiki editors to promote mutual assistance and collaboration.

+
+
+ +

Contact

+

+ Join our Discord + Email our team + +

+ +

Featured On

+ \ No newline at end of file diff --git a/pages/joining.html b/pages/joining.html new file mode 100644 index 00000000..c2e752e7 --- /dev/null +++ b/pages/joining.html @@ -0,0 +1,78 @@ +--- +layout: page +body_class: page-template +title: Joining +description: Learn how to join the Independent Roblox Wiki Alliance and the criteria for membership. +permalink: /joining/ +--- + +

Joining

+

Join us in our mission to support independent wikis and their work!

+

We're always looking to welcome new members! Potential members need to meet the criteria listed below to be able to join. Once we've made sure your project fits, we invite our representatives to opine and come to a consensus on you joining.

+

Think you meet the criteria and want to join us? Drop by our server and submit an application in our #applications channel.

+ +

Criteria

+

For certain criteria, we are willing to accommodate and make exceptions and will evaluate this on a case-by-case basis. Please note that achieving all of these does not guarantee membership.

+ +
+
+
Wiki Subject
+

Your wiki's content must be centred around Roblox, whether it be through documenting a Roblox game, game franchise, development studio, etc.

+

The content that your wiki covers must be compliant with Roblox's Community Guidelines and be appropriate for young audiences, as well as all content on your wiki. If your wiki is on a wiki host such as Miraheze, it should follow all local guidelines. Your website should also follow all local laws of where the website is hosted in.

+
+
+
Activity
+

Your wiki should maintain an active wiki community and editor base proportional to the popularity of your wiki's subject game.

+

This includes keeping content up to date and monitoring for spam and vandalism. Wikis covering inactive subject games may not need to be edited as frequently to be considered active. In evaluating your website, the amount of active editors (Special:Statistics), recent edits (Special:RecentChanges) and total amount of members are all taken into account.

+
+
+
Independence
+

Your wiki should be independent, meaning that the power for decisions and control should rest mainly with the wiki's staff team and not any external groups (hosting providers, wiki farms, etc). This includes decisions related to wiki management, styling, and technical changes. Wikis hosted on Fandom are not permitted to join IRWA.

+
+
+
Status
+

Your wiki must either be officially recognised or endorsed by the developers, or the de-facto community resource.

+

If there is another wiki that is not from an official fork or migration, the wiki submitted should be of significantly higher quality as well as having one of the three listed attributes above. We do not include forked wikis when there is an official, endorsed one.

+
+
+
Content and Coverage
+

Your wiki must, at minimum, have at least 45 good quality articles with minimal stub or unfinished pages.

+

You may check Special:ShortPages for this statistic. Your wiki should have enough content to be useful to its intended audience and should cover most major topics.

+
+
+
Administration and Policy
+

Your wiki must have sufficient, clearly defined and easily accessible policies, and have sufficient staff to manage and execute such policies.

+

All of your wiki staff should also be in good standing with the wiki's community, Roblox, and the larger wiki community.

+
+
+
Style and Accessibility
+

We have no restrictions on style or theming. However, your wiki should be accessible visually and technically on all devices and screen readers, as well as having little-to-no glaring technical or visual errors. A good PageSpeed Insights score on accessibility is recommended.

+
+
+
Age
+

To ensure longevity of your wiki and its community, your wiki should be at least three months old. If the wiki was recently forked or migrated from another source, the age of that source may be counted towards the minimum age requirement.

+
+
+
Security
+

If you are self-hosting, your wiki should practice good security standards.

+

Examples of such include using the up to date stable or Long Term Support versions of the MediaWiki software, ensuring verified and or NDA restricted server access, and performing checks on all extensions prior to installation.

+
+
+
Licensing and Intellectual Property
+

Your wiki should be respectful of intellectual property, and consider fair use in its writing.

+

Your wiki should also ensure that licensing policies are followed, especially considering forked or migrated content. There are no restrictions to a certain license, though your wiki's content must also be licensed under a valid copyright license, such as a GPL license or the Creative Commons license.

+
+
+ +

+

+

Interested in joining?

+

Join our discord and get in contact! We'd love to have you on board!

+

+ + Join our Discord + + +

+
+

diff --git a/pages/legal.html b/pages/legal.html new file mode 100644 index 00000000..0455865a --- /dev/null +++ b/pages/legal.html @@ -0,0 +1,13 @@ +--- +layout: page +body_class: page-template +title: Legal +description: Legal information and disclaimers for the Independent Roblox Wiki Alliance. +permalink: /legal/ +--- + +

Legal

+

Roblox and its various marks and logos are trademarks of Roblox Corporation. The Indie Roblox Wikis Alliance is not endorsed, sponsored or affiliated with Roblox Corporation.

+

We work with certain volunteers from Miraheze to ensure our best interests are met. However, we are not endorsed, sponsored or affiliated with Miraheze or WikiTide Foundation.

+

Each project and our alliance members are not bound to a single license and may have their own licenses and terms. Please view each individual site's/project's copyright and licensing policies for site‑specific information. For any IRWA affiliated projects, you are REQUIRED to follow each license when using extensions and code as outlined in the repository.

+

IRWA does not exercise direct management over any of its member wikis, and therefore does not endorse or support any harmful behaviour by wiki members or their affiliated source games.

\ No newline at end of file diff --git a/pages/members.html b/pages/members.html new file mode 100644 index 00000000..2b29e4a5 --- /dev/null +++ b/pages/members.html @@ -0,0 +1,35 @@ +--- +layout: page +title: Members +description: Our alliance members include wikis covering some of the most popular games on the Roblox platform. Take a look! +permalink: /members/ +--- + +

Members

+

Our alliance members include wikis covering some of the most popular games on the Roblox platform. Take a look!

+ +
+ {% for member in site.data.members %} + + {% endfor %} +
+ +{% include entity-modal.html %} + +
+

Interested in applying?

+

Join us in our mission to support independent wikis and their work.

+

+ + See our criteria + + + Join our Discord +

+
\ No newline at end of file diff --git a/pages/onboarding.html b/pages/onboarding.html new file mode 100644 index 00000000..172d88d6 --- /dev/null +++ b/pages/onboarding.html @@ -0,0 +1,292 @@ +--- +layout: page +title: Onboarding +description: Learn all about what IRWA is, and the next steps after you get accepted into our alliance. +body_class: toc-enabled bg-include page-onboarding +permalink: /onboarding/ +image: /assets/promofiles/OnboardingMainThumbnail.png +twitter: + card: summary_large_image +--- + +

IRWA Onboarding Guide

+ +
+ + +

Welcome to our alliance, and congratulations for passing through the application stage! This article serves as an + orientation on your next steps, as well as some important things to take note as a member wiki.

+ +
+ + + +

Alliance Roles

+ +

Alliance Coordinators

+ +

Alliance coordinators are top level individuals who help manage and oversee the wiki. Management is done through + them, you can think of them like alliance staff who run the show!

+ +

We currently have six coordinators:

+
    +
  • Buildaroo (Affiliated with Fischipedia)
  • +
  • enews (Affiliated with Dovedale Railway Wiki & Hybrid Cafe Wiki)
  • +
  • IPutMyPCInTheFridge
  • +
  • Mooncloud (Alliance Overseer)
  • +
  • PixDeVl (Affiliated with Miraheze/WikiTide Foundation)
  • +
  • Skye (Affiliated with Fischipedia & Miraheze/WikiTide Foundation)
  • +
+ +

Member Wiki Representatives

+ +

One staff member, usually an administrator or bureaucrat, must be appointed to be a member wiki representative.

+ +

A member wiki representative represents each wiki during discussion, and is responsible for relaying each team's + thoughts and stance in discussions and application threads. More information about their role in applications can be + found below.

+ +

A user cannot simultaneously hold more than one member wiki representative role, but can be listed + as staff of two wikis.

+ + + +
+ +

Joining Wiki Procedures

+

You are required to complete a few forms and send us a few details upon being accepted into the alliance.

+ +Joining procedures + +

Shared Template

+

One of the key features of our alliance is our shared template that automatically updates across all our member + wikis. This automation is conducted through GitHub actions and will upload all new icons and update the wiki text + according to the template.wikitext file in the repository.

+ +Shared template example + +

Please start the procedure to add your wiki to the template by completing this form. You are + also welcome to open a pull request by yourself if you are familiar with our repository environment.

+ +

Once you have been notified, please grant our special bot (User:IRWABot) the bot group on your wiki so it can mark + edits as bot edits when updating the template. This may take a while to show as our maintainer may need to sign in + first.

+ +

At the moment, it is suggested to not protect the template page, unless you make the bot an administrator, which for + security reasons, we do not suggest.

+ +

Make sure you follow all the instructions and style your template nicely once it is added! We have no restrictions on + styling, so be free in what you do! Please note you should not omit any wikis being featured on the template.

+ +Add your wiki to the template + +

IRWA Website

+ +

The IRWA maintains a website, which you can find at indierobloxwikis.org. + Our website is important for letting people know who we are and what we do.

+ +

Importantly for new members, each member is listed on our members page. You will need to complete a form to add your + wiki to the website, similar to our template. Click here to + access the form. You are also welcome to open a pull request by yourself if you are familiar with our repository + environment.

+ +

We may ask follow up questions, so do check your email periodically so we can get your wiki listing onto the site + ASAP!

+ +

Please prepare the following items to fill up the form:

+
    +
  • Your wiki logo, in 400px x 400px format. If your wiki has multiple versions of a logo, choose one that looks best + as a square.
  • +
  • A short description of your wiki. Examples can be found here. Keep + it short and succinct.
  • +
  • A few links that are related to your wiki, like your donations page (self-hosted sites only), your Discord or your + social media sites.
  • +
  • A list of your staff team (from 18 April 2026)
  • +
+ +Add your wiki to the website + +

Discord Server

+ +

Each wiki has its own role in the IRWA server, and is listed in the roles directory, as well as the + #wiki-listings + channel. +

+ +

Please inform one of the alliance coordinators of your preferred role colour in HEX code format. Ensure it is not + used by any other wiki, or similar to other roles in the server. Do also confirm who are the members of staff and + representative of the wiki, so we can give out roles accordingly.

+ +

Once all the roles are distributed, you can go ahead and post your listing in the #wiki-listings channel + with all + your relevant links and information! Please follow the format used, this can be found in the pinned message in the + channel.

+ +

Lastly, we highly encourage you to announce to your own community, and if you want to, invite them here to say hello! + More people can help to grow and solidify our alliance position on the big world wide web!

+ +
+ +

Applications

+ +

Applications are how new wikis join. During the application process, all wikis are opened up to critique and scrutiny + by our coordinators and wiki representatives. The intention of this scrutiny is not to attack or insult any project, + but to help highlight potential improvements to the project and to assist your project in meeting the standards of the + alliance. Projects in our alliance are expected to be of a certain standard of quality. These requirements can be + found on our Joining page, and include clauses like accessibility and + security.

+ +

Since wikis that are part of the project are featured in various places that make them more visible, it is important + that the wikis it features are of decent quality, and are regularly and appropriately moderated for safety.

+ +

Process Overview

+ +

After an application is submitted, our process for evaluation is as follows:

+
    +
  1. One of our Alliance coordinators will do a thorough check of your wiki according to the criteria for joining listed on our website and will point out any + potential issues or sections that need work. Questions may also be asked to get a better understanding of your + project. We don't have any hidden criteria or private requirements.
  2. +
  3. After all issues have been addressed and the coordinator feels the wiki is ready, all IRWA Coordinators and Member + Wiki Representatives will be notified to give their opinion on your wiki joining the alliance.
  4. +
  5. After a period of opinion gathering, once sufficient consensus has been reached a final decision will be made + regarding your wiki joining the alliance.
  6. +
+ +

Applications usually take two weeks to review, but this can be longer or shorter depending on our coordinator and + representatives availability.

+ +

Before Applying

+ +

A majority consensus between wiki staff is required when requesting to join IRWA. How that consensus is achieved — + whether voted on privately by staff or by doing a community poll — is up to the wiki's discretion, but we will not + accept applications that are backed by only a small minority of staff member(s).

+ +

Consensus

+ +

An application is decided based on a majority consensus. Once a wiki is open to opinions, Alliance Coordinators and + Member Wiki Representatives should give their opinions in the appropriate format.

+ +Examples of opine messages +

Examples of opine messages

+ +

Your message should:

+
    +
  • Express your support, opposition or neutrality in the matter, using the appropriate emojis
  • +
  • Have a brief description of why you think so
  • +
  • Optionally, issues you would like to highlight that are related to your decision
  • +
+ +

Only coordinators and Member Wiki Representatives are eligible to provide their opinions. Please + note that if you are not able to opine and you are not directly related to an application, you should not be + talking there unless you have a strong, on-topic reason. An application's thread shall be focused on + discussing the applying wiki, so do allow the applicants to speak for themselves.

+ +

Your consensus messages should not be considered individual votes as we are not + voting. The final decision is made by coordinators based on the information provided, which includes the + opines.

+ +

After a period of several days, when the managing coordinator of the application is satisfied with the amount of + responses, or deems that there are enough opines to make a decision, an application will be closed, and a decision + will be made and announced soon after. IRWA reserves the right to reject any application on any basis; your ability to + apply is a privilege not a right.

+ +

Application Template

+ +

When submitting an application, please copy and fill out the following template. Please provide some form of proof + that your wiki staff and/or community has reached a majority consensus in favor of joining IRWA, and for the selection + of your wiki representative.

+ +
Wiki Name:
+Wiki Link:
+Wiki Discord (if applicable):
+Wiki Representative:
+Wiki staff in the server:
+
+Has the wiki's staff or community reached a majority consensus in favor of joining IRWA?
+Has the wiki performed a self-check and believe that they meet the requirements for IRWA?
+Has there been or is there currently any AI-generated content in the wiki? If so, provide details:
+Has either the wiki or the game it's based on been involved in any form of controversy? If so, provide details:
+ +
+ + + +

Thank you for going through this onboarding guide! If you have any feedback or questions, feel free to ask enews + (@enews) or any of the coordinators!

\ No newline at end of file diff --git a/pages/partners.html b/pages/partners.html new file mode 100644 index 00000000..4c61ab37 --- /dev/null +++ b/pages/partners.html @@ -0,0 +1,34 @@ +--- +layout: page +body_class: page-template +title: Partners +description: Our partners are wiki alliances and websites that we've mutually partnered with to support our missions and to promote collaboration. Take a look! +permalink: /partners/ +--- + +

Partners

+

Our partners are wiki alliances and websites that we've mutually partnered with to support our missions and to promote collaboration. Take a look!

+ +
+ {% for partner in site.data.partners %} + + {% endfor %} +
+ +{% include entity-modal.html %} + +
+

Interested in partnership?

+

Join our Discord server and get in contact!

+

+ + Join our Discord + + +

+
\ No newline at end of file diff --git a/pages/privacy.html b/pages/privacy.html new file mode 100644 index 00000000..3cb0633c --- /dev/null +++ b/pages/privacy.html @@ -0,0 +1,87 @@ +--- +layout: page +body_class: page-template +title: Privacy +description: Privacy notice for the Independent Roblox Wiki Alliance Website +permalink: /privacy/ +--- + +

Privacy Policy

+

Independent Roblox Wiki Alliance — indierobloxwikis.org

+ +

This privacy statement covers the website indierobloxwikis.org, the Independent Roblox Wiki Alliance Website, + thereafter referred to as "The IRWA Website". Please read this statement carefully before accessing our content. Your + use of the IRWA Website indicates your agreement to abide by the Terms in effect.

+ +

As an independent website, The Independent Roblox Wiki Alliance (IRWA) bears no direct affiliation with any wiki farm + (such as Miraheze/WikiTide Foundation, Fandom, Inc.), nor with the video game developer Roblox Corporation. Any + complaints or feedback regarding services provided by them should be directed to the relevant official feedback + channels.

+ +
+ +

Jurisdiction

+

This agreement shall be interpreted in accordance with the laws of the Republic of Singapore, where this website is + maintained from.

+ +
+ +

Data We Collect

+

We collect user information when you visit or conduct activity on our site. When you visit our website, certain + information from our Analytics provider is collected. The following is collected from our analytics provider:

+
    +
  • Unique Visits
  • +
  • User agents
  • +
  • Country of visitor
  • +
  • Device Language
  • +
  • URLs
  • +
  • Referrers
  • +
  • UTM-parameters
  • +
  • Device dimensions
  • +
  • Scrolled percentage in increments of 5%
  • +
+ +
+ +

Member Websites

+

Please note that when you visit a specific wiki, there may be different privacy and security regulations. As outlined + in our Joining Policies, all wikis are vetted on their privacy and security practices prior to joining. It is your + responsibility to check each wiki's privacy, terms and security policies before using their services.

+ +
+ +

Business Transfer

+

In the event The Independent Roblox Wiki Alliance goes through a business transition, such as a merger, acquisition + by another company, or sale of a portion of its assets, users' personal information will, in most instances, be part + of the assets transferred.

+ +
+ +

Data Sharing

+

We will access, use, retain, and/or disclose your Personal Data if we reasonably believe it is necessary to comply + with a valid and legally enforceable court order, warrant, subpoena, statutory obligation, or regulatory requirement + under the laws of Singapore or any other jurisdiction in which we operate. We may also disclose your Personal Data in + good faith where such disclosure is necessary to comply with legal obligations.

+ +
+ +

Data Protection Officer

+

With regards to the Personal Data Protection Act 2012 (PDPA), we have appointed a Data Protection Officer (DPO) to + oversee our compliance with the laws of Singapore, and to ensure that your Personal Data is handled in accordance with + applicable data protection laws in Singapore. You may contact our designated DPO by emailing contact@indierobloxwikis.org.

+ +
+ +

Changes to This Policy

+

Our privacy policy may change on occasion. Changes and notices will be posted to this privacy statement, and other + places we deem appropriate so our users are always aware of what information we collect, how we use it, and under what + circumstances, if any, we disclose it.

+ +
+ +

Legal Disclaimer

+

IRWA makes every effort to preserve user privacy. However, we may access, use, preserve and/or disclose your personal + information if we reasonably believe that it is necessary to comply with a valid and legally enforceable warrant, + subpoena, court order, law or regulation in the countries where we are present, or other judicial or administrative + order.

\ No newline at end of file diff --git a/pages/projects.html b/pages/projects.html new file mode 100644 index 00000000..9aa7289e --- /dev/null +++ b/pages/projects.html @@ -0,0 +1,48 @@ +--- +layout: page +body_class: page-template +title: Projects +description: The alliance manages projects designed to assist other wikis. Explore them and consider installing them on your wiki. +permalink: /projects/ +--- + +

Projects

+

The alliance manages projects designed to assist other wikis. Explore them and consider installing them on your wiki.

+ +
+ An infobox on the Untitled Tag Game wiki, showcasing the RobloxAPI image thumbnail and icon and game details fetching +
+

RobloxAPI MediaWiki extension

+

+ + + Version 1.7.0 + + + + MediaWiki 1.43+ + + + + 500+ wikis + +

+
+
+

The RobloxAPI extension provides easy access to the Roblox API via parser functions. The Roblox API is generally very poorly documented, and using the ExternalData extension or Lua modules can be a steep learning curve which may not be viable. This extension aims to make it easy for you to grab data from Roblox and put it on your wiki, using simple parser functions. Extension development was started under Dovedale Wiki, before being transferred to the alliance in January 2025.

+

+ + + GitHub + + + + MediaWiki + + + + Documentation + +

+
+
\ No newline at end of file diff --git a/docs/robloxapi/index.md b/pages/robloxapi.md similarity index 98% rename from docs/robloxapi/index.md rename to pages/robloxapi.md index 6c8ea7c2..a4dac5c2 100644 --- a/docs/robloxapi/index.md +++ b/pages/robloxapi.md @@ -1,11 +1,18 @@ --- layout: page -body_class: page-template robloxapi toc-enabled +body_class: page-template robloxapi toc-enabled bg-include page-robloxapi title: Roblox API Documentation description: Documentation for the RobloxAPI extension, which provides easy access to the Roblox API via parser functions. +redirect_from: /docs/robloxapi +permalink: /robloxapi/ +image: /assets/promofiles/RobloxAPIMainThumbnail.png +twitter: + card: summary_large_image --- # Roblox API Documentation +
+ The RobloxAPI extension provides easy access to the Roblox API via parser functions. The Roblox API is generally very poorly documented, and using the ExternalData extension or Lua modules can be a steep learning curve which may not be viable. This extension aims to make it easy for you to grab data from Roblox and put it on your wiki, using simple parser functions. {% raw %} ## Basic Usage diff --git a/privacy/index.html b/privacy/index.html deleted file mode 100644 index f10132cd..00000000 --- a/privacy/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: page -body_class: page-template -title: Privacy -description: Privacy notice for the Independent Roblox Wiki Alliance. ---- - -

Privacy

-

Our website is fully GDPR compliant. We use the following services that comply with GDPR regulations:

- -

When you visit our website, certain information from our Analytics provider is collected. These however crucially do not include IP addresses or any cookies. You may see more information in the documents provided below.

-

Please note that when you visit a specific wiki, there may be different privacy and security regulations. As outlined in our Joining Policies, all wikis are vetted on their privacy and security practices prior to joining.

diff --git a/projects/index.html b/projects/index.html deleted file mode 100644 index 799db2a5..00000000 --- a/projects/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: page -body_class: page-template -title: Projects -description: The IRWA runs some projects to assist others. Learn what they are here and install them on your sites! ---- - -

Projects

-

The alliance also manages several projects designed to assist other wikis. Explore these and consider installing them on your site.

-

RobloxAPI MediaWiki Extension

-

- Available on Miraheze | - Version 1.4.0 | - MediaWiki 1.41+ | - 200+ sites -

-

- Github - MediaWiki -

-

The RobloxAPI extension provides easy access to the Roblox API via parser functions. The Roblox API is generally very poorly documented, and using the ExternalData extension or Lua modules can be a steep learning curve which may not be viable. This extension aims to make it easy for you to grab data from Roblox and put it on your wiki, using simple parser functions. Extension development was started under Dovedale Wiki, before being transferred to the alliance in January 2025.