diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e156dc5 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +the [Support Website](support.pwindows.qzz.io). +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..5100040 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,22 @@ +# Contributing to the PWindows Website + +Thanks for thinking about contributing to our website! Please read the below to ensure you know how to properly contribute. + +## Before you start + +1. Check existing issues and pull requests to avoid duplicate work. +2. For a larger change, please open an issue before beginning. +3. Read the [website wiki](https://github.com/PWindows/Website/wiki) for setup and editing guides. + +We do NOT allow entirely AI-made contributions. You must ensure that the quality of the website is consistent with the rest of the website and is on the same level of what a human would make and check. Be honest that you used AI. + +Please also ensure all additions are within the scope of the project. + +## Read the docs +Seriously, [**read the documentation**](https://github.com/PWindows/Website/wiki). We do not want commits that do not follow the guidelines we have set. + +## Open a pull request + +Explain what changed, why it was needed, and how you tested it. Link any related issue and include screenshots for visible design changes. Automated checks and a maintainer review must pass before merging. + +For step-by-step help, see [Making a Pull Request](https://github.com/PWindows/Website/wiki/Making-a-Pull-Request). diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..622a5b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,39 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG] " +labels: bug, help wanted +assignees: '' +type: Bug + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. macOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..73710b4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[FEATURE] " +labels: enhancement, help wanted +assignees: '' +type: Feature + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 0000000..e352fe4 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,23 @@ +**Please check if the PR fulfills these requirements** +- [ ] Your code meets the requirements in the [Contributing Checklist](https://github.com/PWindows/Website/wiki/Contributing-Checklist) +- [ ] Tests have passed +- [ ] You have made an issue about it (unless this is a very small fix) + + +**What kind of change does this PR introduce?** *(Bug fix, feature, docs update, ...)* + + + +**What is the current behavior?** + + + +**What is the new behavior?** *(if this is a feature change)* + + + +**Other information**: + + + +**Resolves** #xx diff --git a/.github/workflows/gh-jekyll-workflow.yml b/.github/workflows/gh-jekyll-workflow.yml new file mode 100644 index 0000000..040d912 --- /dev/null +++ b/.github/workflows/gh-jekyll-workflow.yml @@ -0,0 +1,64 @@ +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll with GitHub Pages dependencies preinstalled + +on: + # Runs on pushes targeting either publishable branch + push: + branches: ["main", "redesign"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.4.10' + bundler-cache: true + - name: Install dependencies + run: bundle install + - name: Build with Jekyll (with custom plugins) + run: bundle exec jekyll build --trace + env: + JEKYLL_ENV: production + - name: Check generated HTML and internal links + run: bundle exec htmlproofer ./_site --disable-external --ignore-urls '/minecraft:/' + - name: Verify public pages, sitemap, and source data + run: bundle exec ruby tools/verify-site.rb ./_site + - name: Check JavaScript syntax + run: node --check assets/js/extra.js + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + deploy: + if: ${{ needs.build.result == 'success' }} + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/.gitignore b/.gitignore index d9161d4..b0ee2fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .vs/ -_site/ \ No newline at end of file +_site/ +.jekyll-cache/ +.DS_Store +.bundle/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c7e758f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,199 @@ +# Repository Instructions + +## Project overview + +This repository contains the public PWindows website. It is a static Jekyll +site deployed from the `main` branch. Preserve the current visual identity, +public URLs, accessibility behavior, and data-driven templates unless a task +explicitly requires a change. + +## Repository structure + +- `pages/index.html` is the homepage and retains the `/` permalink. +- `pages/` contains public pages. Every page must declare an explicit + `permalink` so reorganizing source files does not change its URL. +- `_articles/` contains news posts in the `articles` collection. +- `_layouts/` contains page shells; `_includes/` contains reusable markup. +- `_data/games.yml`, `_data/departments.yml`, `_data/staff.yml`, and + `_data/site.yml` are the canonical sources for game, department, staff, and + shared site-link information. +- `assets/css/style.css` is the main production stylesheet. +- `assets/css/news.css` contains article-specific styles. +- `assets/js/extra.js` contains site-wide behavior. +- `tools/verify-site.rb` enforces public routes, metadata, sitemap contents, + source-data integrity, and publishing exclusions. +- `_site/` and `.jekyll-cache/` are generated. Never edit them directly. +- `tools/` is for local utilities and must not be published. + +## Local development and verification + +Install dependencies once: + +```sh +bundle install +``` + +Run the development server: + +```sh +bundle exec jekyll serve +``` + +Before completing a change, run the same checks as CI: + +```sh +bundle exec jekyll build +bundle exec htmlproofer ./_site --disable-external --ignore-urls '/minecraft:/' +bundle exec ruby tools/verify-site.rb ./_site +``` + +For JavaScript changes, also run: + +```sh +node --check assets/js/extra.js +``` + +Run `git diff --check` after editing. Fix failures caused by the current change; +do not rewrite unrelated code merely to silence pre-existing issues. + +## Public routes and publishing + +The following routes are stable and must remain available: + +- `/` +- `/404.html` +- `/about` +- `/articles` +- `/contact` +- `/departments/` +- `/departments/minecraft` +- `/departments/roblox` +- `/departments/unity` +- `/feedback` +- `/games` +- `/games/obby-of-dominance` +- `/games/sacred-remains` +- `/rules` +- `/sitemap` +- `/staff` +- Existing `/article/:name` URLs + +When adding or intentionally removing a public route, update +`tools/verify-site.rb` and the human-readable site map as needed. Keep +`/sitemap` as the footer’s readable site-map destination; `sitemap.xml` is for +search engines. + +Do not publish `AGENTS.md`, `README.md`, `tools/`, `vendor/`, or `assets/extra/`. +Do not delete fonts or other retained files from `assets/extra/`; they are kept +for future use even though the directory is excluded from the generated site. + +## Pages, templates, and metadata + +- Reuse layouts and includes instead of duplicating shared markup. +- Use the `page` layout for conventional content pages. +- Use the `department` layout for department detail pages and set the + front-matter `department` value to a valid `_data/departments.yml` key. +- Every public page must generate a non-empty `
`, exactly one `

`, a + document title, a canonical URL, and a useful unique description. +- The 404 page must retain `permalink: /404.html` and `sitemap: false`. +- Generate internal URLs and asset URLs with Jekyll’s `relative_url` filter. + Use `absolute_url` only where an absolute canonical or social URL is needed. +- Escape user- or content-provided values when placing them in HTML + attributes. +- Keep one shared build revision for CSS and JavaScript cache-busting. +- Do not add a new production stylesheet when an existing stylesheet is the + appropriate home for the change. + +## Data conventions + +Game records in `_data/games.yml` require: + +- `slug` +- `title` +- `path` +- `status` +- `summary` +- `image` +- `engine` +- `language` + +Game paths must point to real public pages. Keep game lists and game footer +links data-driven instead of duplicating them in templates. Optional debris +effects use `effect: true` with a tracked root-relative `debris.path`; a +positive `debris.scale` is optional. Disabled effects may retain placeholder +debris metadata, but the referenced asset must exist before enabling the effect. + +Department records in `_data/departments.yml` require: + +- `name` +- `path` +- `staff_department` +- `bio` + +Department paths must point to real public pages. `staff_department` must +match the `department` value used by the corresponding staff records. Keep the +department overview, detail pages, team listings, and footer links data-driven. +Department detail pages must reuse the `department` layout, and every +department in the data file must have a detail page. + +Keys in `_data/staff.yml` are stable author identifiers used by articles. Do +not rename them without updating every article reference. Staff shown on the +staff page or department pages use `aboutpage: true` and require `name`, `pfp`, +`role`, and `bio`; `socials` is optional. Do not expose placeholder or private +staff records with `aboutpage: false`. When a department has no public staff +profiles, preserve the explicit empty-team state. Local image paths must be +root-relative and point to tracked files. + +Articles should use valid staff keys for `author`, retain stable filenames and +URLs, and provide the front matter required by their layout. Reuse +`_includes/article-card.html` for article listings and preserve the empty-news +state. + +Shared server and external-link values belong in `_data/site.yml`. Templates +and JavaScript-facing data attributes must render those values instead of +duplicating literal URLs or the server address. + +## CSS and responsive behavior + +- Follow the existing organization of base, navigation, components, pages, + and responsive rules. +- Prefer flat selectors and broadly supported CSS. Avoid nested CSS syntax. +- Preserve visible keyboard focus styles and reduced-motion behavior. +- Test layout logic at narrow mobile widths as well as 375px, 768px, and + desktop widths. Flex and grid children should be able to shrink; use + `min-width: 0` where content could otherwise overflow. +- At widths up to 540px, footer columns must remain stacked and must not overlap + or clip into adjacent sections. +- Avoid horizontal scrolling. Do not rely on `overflow-x: hidden` to conceal a + component sizing bug. + +## Interaction and accessibility requirements + +- All interactive behavior must work with keyboard, mouse, and touch input. +- Mobile navigation must trap focus while open, close on Escape and selection, + return focus appropriately, and lock background scrolling. It must close and + restore scrolling when crossing the desktop breakpoint. +- Flip cards use hover and focus behavior with a precise pointer. In that mode, + both the front instruction control and Back button are hidden and removed + from keyboard navigation. +- On touch or coarse-pointer input, preserve button-driven card flipping with + visible, enabled front and Back controls. +- Hybrid devices must retain touch behavior after touch input while allowing + mouse hover behavior. +- Keep `inert`, `aria-hidden`, focusability, and expansion state synchronized so + only the visible card face is exposed to assistive technology. +- Do not add interaction roles that misrepresent a component’s behavior. +- Disabled buttons must not have `href` attributes. + +## Change discipline + +- Keep changes scoped to the request and preserve unrelated work in a dirty + worktree. +- Prefer `git mv` when relocating tracked files so history is retained. +- Do not commit generated `_site/` output. +- Do not invent gameplay details for games marked “In development.” +- Update documentation and verification checks when introducing a new project + convention or invariant. + +## Agent info +You are a coding assistant. Always respond with only the final code and a brief, necessary explanation. Never include your internal reasoning, chain-of-thought, or planning steps. Be direct. diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4ab8121 --- /dev/null +++ b/Gemfile @@ -0,0 +1,17 @@ +source "https://rubygems.org" + +platform :windows do + gem 'wdm', '>= 0.1.0' +end + +gem "pwindows-theme", git: "https://github.com/PWindows/website-common.git", branch: "main" + +gem "jekyll", "~> 4.4" +gem "webrick" + +group :jekyll_plugins do + gem "jekyll-polyglot" +end + +gem "html-proofer", "~> 5.0" +gem "nokogiri", "~> 1.19" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..746ad35 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,215 @@ +GIT + remote: https://github.com/PWindows/website-common.git + revision: 195c156f79457b6761e8e0c1ec00161bfe5e5a2c + branch: main + specs: + pwindows-theme (1.0.0) + jekyll (~> 4.4) + +GEM + remote: https://rubygems.org/ + specs: + Ascii85 (2.0.1) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + afm (1.0.0) + async (2.44.1) + console (~> 1.29) + fiber-annotation + io-event (~> 1.11) + base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (3.3.1) + colorator (1.1.0) + concurrent-ruby (1.3.8) + console (1.37.0) + fiber-annotation + fiber-local (~> 1.1) + json + csv (3.3.6) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.18.0) + ffi (>= 1.15.0) + logger + eventmachine (1.2.7) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x64-mingw-ucrt) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) + fiber-annotation (0.2.0) + fiber-local (1.1.0) + fiber-storage + fiber-storage (1.0.1) + forwardable-extended (2.6.0) + google-protobuf (4.36.0) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-aarch64-linux-gnu) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-aarch64-linux-musl) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-arm64-darwin) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-x64-mingw-ucrt) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-x86_64-darwin) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-x86_64-linux-gnu) + bigdecimal + rake (~> 13.3) + google-protobuf (4.36.0-x86_64-linux-musl) + bigdecimal + rake (~> 13.3) + hashery (2.1.2) + html-proofer (5.2.2) + addressable (~> 2.3) + async (~> 2.1) + benchmark (~> 0.5) + nokogiri (~> 1.13) + pdf-reader (~> 2.11) + rainbow (~> 3.0) + typhoeus (~> 1.3) + yell (~> 2.0) + zeitwerk (~> 2.5) + http_parser.rb (0.8.1) + i18n (1.15.2) + concurrent-ruby (~> 1.0) + io-event (1.19.5) + jekyll (4.4.1) + addressable (~> 2.4) + base64 (~> 0.2) + colorator (~> 1.0) + csv (~> 3.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3, >= 0.3.6) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-polyglot (1.14.0) + jekyll (>= 4.0, >= 3.0) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-watch (2.2.1) + listen (~> 3.0) + json (2.21.2) + kramdown (2.5.2) + rexml (>= 3.4.4) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.10.0) + logger + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + mercenary (0.4.0) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x64-mingw-ucrt) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + pdf-reader (2.16.0) + Ascii85 (>= 1.0, < 3.0, != 2.0.0) + afm (>= 0.2.1, < 2) + hashery (~> 2.0) + ttfunk + public_suffix (7.0.5) + racc (1.8.1) + rainbow (3.1.1) + rake (13.4.2) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.4.4) + rouge (4.7.0) + safe_yaml (1.0.5) + sass-embedded (1.103.1-aarch64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-aarch64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-arm-linux-gnueabihf) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-arm-linux-musleabihf) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-arm64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-x64-mingw-ucrt) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-x86_64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-x86_64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.103.1-x86_64-linux-musl) + google-protobuf (~> 4.31) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + ttfunk (1.8.0) + bigdecimal (~> 3.1) + typhoeus (1.6.0) + ethon (>= 0.18.0) + unicode-display_width (2.6.0) + wdm (0.2.0) + webrick (1.9.2) + yell (2.2.2) + zeitwerk (2.8.3) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + x64-mingw-ucrt + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + html-proofer (~> 5.0) + jekyll (~> 4.4) + jekyll-polyglot + nokogiri (~> 1.19) + pwindows-theme! + wdm (>= 0.1.0) + webrick + +BUNDLED WITH + 2.6.9 diff --git a/README.md b/README.md index 345feb5..bd229c8 100644 --- a/README.md +++ b/README.md @@ -1 +1,38 @@ -![Alt](https://repobeats.axiom.co/api/embed/3d627adb527aaf7280944a459c84a220a43c76a4.svg "Repobeats analytics image") +# PWindows Website + +The source for the public [PWindows website](https://www.pwindows.qzz.io), built with Jekyll and hosted with GitHub Pages. + +## Documentation + +Detailed setup, editing, testing, and deployment instructions are available in the [project wiki](https://github.com/PWindows/Website/wiki). + +- [Getting started](https://github.com/PWindows/Website/wiki/Getting-Started) +- [Editing pages](https://github.com/PWindows/Website/wiki/Creating-and-Editing-Pages) +- [Managing site data](https://github.com/PWindows/Website/wiki/Managing-Site-Data) +- [Running checks](https://github.com/PWindows/Website/wiki/Running-Checks) + +## Quick preview + +### Linux/Mac +```sh +git clone https://github.com/PWindows/Website.git +cd Website +bundle install +bundle exec jekyll serve --livereload +``` + +### Windows +```sh +bundle install +bundle exec jekyll serve --livereload --config _config.yml,_config.windows.yml +``` + +Open . See [Local Setup](https://github.com/PWindows/Website/wiki/Local-Setup) for requirements and troubleshooting. + +## Contributing + +Read [CONTRIBUTING.md](.github/CONTRIBUTING.md) before submitting a change. The wiki also provides a step-by-step [pull request guide](https://github.com/PWindows/Website/wiki/Making-a-Pull-Request). + +## Activity + +![Repository activity](https://repobeats.axiom.co/api/embed/3d627adb527aaf7280944a459c84a220a43c76a4.svg "Repobeats analytics image") diff --git a/_articles/anothertest.md b/_articles/anothertest.md deleted file mode 100644 index da3b6e7..0000000 --- a/_articles/anothertest.md +++ /dev/null @@ -1,27 +0,0 @@ ---- - -layout: news - -title: "Test ig?" - -date: 2025-11-26 - -author: petermazep - -banner: "/assets/mojang/img/bg-grass.png" - -summary: "uhhh.... test?" - -type: "TEST" - ---- - -PWindows' website is working! This is one of the biggest milestones for the project, as it allows us to share information, updates, and resources with our community effectively. We are excited to have a platform where users can learn more about PWindows, download the latest versions, and stay informed about upcoming features and events. - -# So... What works? -Currently, we have our main page and news up and running. - -# What's Next? -We are already working on the shop system, and much more! - -Stay tuned! \ No newline at end of file diff --git a/_articles/pwindows-website-is-working-2025-11-22.md b/_articles/en-us/pwindows-website-is-working-2025-11-22.md similarity index 83% rename from _articles/pwindows-website-is-working-2025-11-22.md rename to _articles/en-us/pwindows-website-is-working-2025-11-22.md index b4f5d57..33def39 100644 --- a/_articles/pwindows-website-is-working-2025-11-22.md +++ b/_articles/en-us/pwindows-website-is-working-2025-11-22.md @@ -1,6 +1,6 @@ --- - layout: news +lang: en-us title: "PWindows' website is working!" @@ -15,15 +15,16 @@ summary: "The website finally works!" type: "NEWS" featured: true - --- PWindows' website is working! This is one of the biggest milestones for the project, as it allows us to share information, updates, and resources with our community effectively. We are excited to have a platform where users can learn more about PWindows, download the latest versions, and stay informed about upcoming features and events. -# So... What works? +## So... What works? + Currently, we have our main page and news up and running. -# What's Next? -We are already working on the shop system, and much more! +## What's Next? + +We are already working on the shop system, and much more! -Stay tuned! \ No newline at end of file +Stay tuned! diff --git a/_articles/website-redesign.md b/_articles/en-us/website-redesign-2026-06-16.md similarity index 94% rename from _articles/website-redesign.md rename to _articles/en-us/website-redesign-2026-06-16.md index 4837ead..940d3f1 100644 --- a/_articles/website-redesign.md +++ b/_articles/en-us/website-redesign-2026-06-16.md @@ -1,9 +1,10 @@ --- layout: news +lang: en-us title: "Upcoming website redesign" -date: 2026-06-15 +date: 2026-06-16 author: isaacaxolotl diff --git a/_articles/ja-jp/pwindows-website-is-working-2025-11-22.md b/_articles/ja-jp/pwindows-website-is-working-2025-11-22.md new file mode 100644 index 0000000..e94a54c --- /dev/null +++ b/_articles/ja-jp/pwindows-website-is-working-2025-11-22.md @@ -0,0 +1,30 @@ +--- +layout: news +lang: ja-jp + +title: "PWindowsのウェブサイトが公開されました!" + +date: 2025-11-22 + +author: petermazep + +banner: "/assets/mojang/img/bg-grass.png" + +summary: "ウェブサイトがついに公開されました!" + +type: "ニュース" + +featured: true +--- + +PWindowsのウェブサイトが公開されました!コミュニティの皆さんに情報、更新内容、資料を分かりやすくお届けできるようになったことは、プロジェクトにとって大きな節目です。PWindowsについて詳しく知り、最新バージョンをダウンロードし、今後の機能やイベントに関する情報を確認できる場所を提供できることをうれしく思います。 + +## では……現在利用できるものは? + +現在、メインページとニュースページが公開されています。 + +## 次の予定は? + +ショップシステムをはじめ、さらに多くの機能を開発中です! + +今後の更新をお楽しみに! diff --git a/_articles/ja-jp/website-redesign-2026-06-16.md b/_articles/ja-jp/website-redesign-2026-06-16.md new file mode 100644 index 0000000..41900d6 --- /dev/null +++ b/_articles/ja-jp/website-redesign-2026-06-16.md @@ -0,0 +1,26 @@ +--- +layout: news +lang: ja-jp + +title: "ウェブサイトのリニューアル予定" + +date: 2026-06-16 + +author: isaacaxolotl + +banner: "/assets/mojang/img/bg-grass.png" + +summary: "ウェブサイトを現在改修中です!" + +type: "ニュース" + +featured: true +--- + +PWindowsのウェブサイトを新しいデザインに更新します!これにより、すべてのプロジェクトで、より一貫性のあるビジュアルとデザインを実現します。 + +## では……何が変わるの? + +文字のコントラストを高め、ページ全体のデザインをより分かりやすくしています。新しいデザインは近日公開予定です! + +今後の更新をお楽しみに! diff --git a/_articles/zh-cn/pwindows-website-is-working-2025-11-22.md b/_articles/zh-cn/pwindows-website-is-working-2025-11-22.md new file mode 100644 index 0000000..17c633c --- /dev/null +++ b/_articles/zh-cn/pwindows-website-is-working-2025-11-22.md @@ -0,0 +1,30 @@ +--- +layout: news +lang: zh-cn + +title: "派视界网站已上线!" + +date: 2025-11-22 + +author: petermazep + +banner: "/assets/mojang/img/bg-grass.png" + +summary: "网站终于能用了!" + +type: "NEWS" + +featured: true +--- + +派视界网站已经正式上线!这是我们项目最重要的里程碑之一,因为它让我们能够有效地与社区分享信息、更新和资源。我们很高兴能够拥有一个平台,让用户可以了解派视界的更多信息、下载最新版本,并随时掌握即将推出的功能和活动的最新动态。 + +## 那么……什么已经能用了? + +目前,我们的主页面和新闻板块已经上线并正常运行。 + +## 下一步是什么? + +我们已经在开发商店系统,还有更多内容! + +敬请期待! diff --git a/_articles/zh-cn/website-redesign-2026-06-16.md b/_articles/zh-cn/website-redesign-2026-06-16.md new file mode 100644 index 0000000..4f07a2c --- /dev/null +++ b/_articles/zh-cn/website-redesign-2026-06-16.md @@ -0,0 +1,26 @@ +--- +layout: news +lang: zh-cn + +title: "即将进行的网站改版" + +date: 2026-06-16 + +author: isaacaxolotl + +banner: "/assets/mojang/img/bg-grass.png" + +summary: "网站正在进行一些开发!" + +type: "NEWS" + +featured: true +--- + +派视界的网站即将以全新的设计进行更新!这将确保我们所有项目拥有更一致的身份和设计。 + +## 那么……有什么变化? + +我们正在提高文本对比度,并在整个页面中明确设计。设计将很快改变! + +敬请期待! diff --git a/_config.windows.yml b/_config.windows.yml new file mode 100644 index 0000000..8d796c7 --- /dev/null +++ b/_config.windows.yml @@ -0,0 +1,2 @@ +parallel_localization: false +server: thin \ No newline at end of file diff --git a/_config.yml b/_config.yml index 210137d..f038067 100644 --- a/_config.yml +++ b/_config.yml @@ -1,7 +1,62 @@ title: PWindows description: Discover PWindows, not just a Minecraft server url: "https://www.pwindows.qzz.io" +theme: pwindows-theme +markdown: kramdown +kramdown: + input: GFM +default_lang: "en-us" +languages: + [ + "en-us", + "en-gb", + "zh-cn", + "es-es", + "fr-fr", + "de-de", + "it-it", + "pt-pt", + "pt-br", + "ja-jp", + "ko-kr", + "ru-ru", + "nl-nl", + "pl-pl", + "sv-se", + "da-dk", + "no-no", + "fi-fi", + "es-mx", + "fr-ca", + "tr-tr", + "ar-sa", + "he-il", + "hi-in", + "th-th", + "vi-vn", + "id-id", + "ms-my", + ] +lang_from_path: true +parallel_localization: false +exclude_from_localization: + - assets + - sitemap.xml + - pages/robots.txt + - CNAME +exclude: + - AGENTS.md + - README.md + - tools/ + - vendor/ + - assets/extra/ + - .vs/ + - .vscode/ collections: articles: output: true permalink: /article/:name + markdown: kramdown +plugins: + - jekyll-polyglot + - pwindows-theme diff --git a/_data/departments.yml b/_data/departments.yml new file mode 100644 index 0000000..5dced20 --- /dev/null +++ b/_data/departments.yml @@ -0,0 +1,41 @@ +minecraft: + codename: mcd + path: /departments/minecraft + staff_department: Minecraft + en-us: + name: Minecraft Department + bio: Responsible for the Minecraft server, including its plugins and configuration. Also responsible for Minecraft Maps, resource packs, and other Minecraft-related content. + zh-cn: + name: MC部门 + bio: 负责MC服务器,包括其插件和配置。还负责MC地图、资源包和其他与MC相关的内容。 + ja-jp: + name: Minecraft部門 + bio: Minecraftサーバーのプラグインや設定を含む運営・開発を担当しています。また、Minecraftのマップ、リソースパック、その他の関連コンテンツも担当します。 + +unity: + codename: ud + path: /departments/unity + staff_department: Unity + en-us: + name: Unity Department + bio: Responsible for Unity games and applications such as Sacred Remains. This includes playtesting, bug reporting, and development of new features. + zh-cn: + name: Unity部门 + bio: 负责Unity游戏和应用程序,例如Sacred Remains。这包括游戏测试、错误报告和新功能的开发。 + ja-jp: + name: Unity部門 + bio: Sacred RemainsなどのUnityゲームやアプリケーションを担当しています。プレイテスト、不具合報告、新機能の開発などを行います。 + +roblox: + codename: rd + path: /departments/roblox + staff_department: Roblox + en-us: + name: Roblox Department + bio: Responsible for Roblox games and applications such as Obby of Dominance. This includes playtesting, bug reporting, and development of new features. + zh-cn: + name: 《罗布乐思》部门 + bio: 负责《罗布乐思》游戏和应用程序,例如Obby of Dominance。这包括游戏测试、错误报告和新功能的开发。 + ja-jp: + name: Roblox部門 + bio: Obby of DominanceなどのRobloxゲームやアプリケーションを担当しています。プレイテスト、不具合報告、新機能の開発などを行います。 diff --git a/_data/games.yml b/_data/games.yml new file mode 100644 index 0000000..a938f05 --- /dev/null +++ b/_data/games.yml @@ -0,0 +1,49 @@ +- slug: sacred-remains + codetitle: sacred-remains + path: /games/sacred-remains + status: In development + image: /assets/img/sacred-remains.webp + image_width: 1920 + image_height: 1920 + effect: true + engine: Unity + language: C# + debris: + path: /assets/img/sacred-remains-debris.webp + width: 1920 + height: 1920 + scale: 1.5 + start-y: 20 + end-y: -10 + en-us: + title: Sacred Remains + summary: More information about Sacred Remains will be published as development progresses. + zh-cn: + title: Sacred Remains + summary: 随着开发的进行,将发布有关 Sacred Remains 的更多信息。 + ja-jp: + title: Sacred Remains + summary: 開発の進捗に合わせて、Sacred Remainsの詳細情報を公開します。 + +- slug: obby-of-dominance + codetitle: obby-of-dominance + path: /games/obby-of-dominance + status: In development + image: /assets/img/obby-of-dominance.png + image_width: 300 + image_height: 300 + effect: false + engine: Roblox + language: Luau + debris: + path: /assets/img/obby-of-dominance-debris.png + scale: 1.5 + en-us: + title: Obby of Dominance + summary: More information about Obby of Dominance will be published as development progresses. + zh-cn: + title: Obby of Dominance + summary: 随着开发的进行,将发布有关 Obby of Dominance 的更多信息。 + ja-jp: + title: Obby of Dominance + summary: 開発の進捗に合わせて、Obby of Dominanceの詳細情報を公開します。 diff --git a/_data/site.yml b/_data/site.yml new file mode 100644 index 0000000..0144d19 --- /dev/null +++ b/_data/site.yml @@ -0,0 +1,12 @@ +server: + address: + en-us: play.pwindows.qzz.io + zh-cn: cn.play.pwindows.qzz.io + ja-jp: play.pwindows.qzz.io +links: + support: https://discord.pwindows.qzz.io/ + shop: https://shop.pwindows.qzz.io + discord: https://discord.pwindows.qzz.io/ + youtube: https://www.youtube.com/@PWindows + twitter: https://x.com/pwindowsz + site_logo: /assets/PWindows.svg diff --git a/_data/site_meta.yml b/_data/site_meta.yml new file mode 100644 index 0000000..8002943 --- /dev/null +++ b/_data/site_meta.yml @@ -0,0 +1,107 @@ +en-us: + name: PWindows + tagline: Discover PWindows, not just a Minecraft server + home_heading: Not just a Minecraft server, game studio, and community. + page_titles: + sacred-cubes-compat: Sacred Cubes has moved + descriptions: + home: Discover PWindows, a Minecraft server, game studio, and community project. + about: Learn about the PWindows Minecraft server, community, and game studio project. + news: Read the latest news, development updates, and announcements from PWindows. + contact: Contact the PWindows team through its community Discord. + departments: Explore the teams building PWindows projects across Unity, Roblox, and Minecraft. + mcd: Learn about the Minecraft department at PWindows. + rd: Learn about the Roblox department at PWindows. + ud: Learn about the Unity department at PWindows. + feedback: Share feedback and suggestions with the PWindows team. + games: Explore games being developed by PWindows. + ood: Follow development information for Obby of Dominance by PWindows. + sr: Follow development information for Sacred Remains by PWindows. + sacred-cubes-compat: Sacred Cubes is now Sacred Remains; continue to the current PWindows game page. + rules: Read the rules for the PWindows Minecraft server and community. + sitemap: Browse every public page, game, department, and news article on the PWindows website. + staff: Meet the people working on PWindows projects and its community. + staff-petermazep: Meet PeterMaZep, the owner of PWindows. + staff-isaacaxolotl: Meet Isaac, the co-director of Sacred Remains and a PWindows website contributor. + not-found: The requested PWindows page could not be found; return home or browse the latest news. + accessibility: + copy_server: Copy server address + join_section: Go to the joining instructions + copy_server_coming_soon: Copy server address, coming soon + launch_bedrock: Launch Minecraft Bedrock, coming soon + coming_soon: Coming soon + compatibility: + sacred_cubes: Sacred Cubes has been renamed Sacred Remains. This address is retained for compatibility. + continue: Continue to Sacred Remains + +zh-cn: + name: 派视界 + tagline: 探索派视界——不止是 Minecraft 服务器 + home_heading: 不止是 Minecraft 服务器、游戏工作室和社区。 + page_titles: + sacred-cubes-compat: Sacred Cubes 已迁移 + descriptions: + home: 探索派视界,一个 Minecraft 服务器、游戏工作室与社区项目。 + about: 了解派视界的 Minecraft 服务器、社区与游戏工作室项目。 + news: 阅读派视界的最新新闻、开发进展与公告。 + contact: 通过社区 Discord 联系派视界团队。 + departments: 探索派视界负责 Unity、Roblox 与 Minecraft 项目的团队。 + mcd: 了解派视界的 Minecraft 部门。 + rd: 了解派视界的 Roblox 部门。 + ud: 了解派视界的 Unity 部门。 + feedback: 向派视界团队提交反馈与建议。 + games: 探索派视界正在开发的游戏。 + ood: 关注派视界 Obby of Dominance 的开发信息。 + sr: 关注派视界 Sacred Remains 的开发信息。 + sacred-cubes-compat: Sacred Cubes 现已更名为 Sacred Remains;请前往当前游戏页面。 + rules: 阅读派视界 Minecraft 服务器与社区规则。 + sitemap: 浏览派视界网站的所有公开页面、游戏、部门与新闻文章。 + staff: 认识参与派视界项目与社区工作的成员。 + staff-petermazep: 认识派视界的创始人 PeterMaZep。 + staff-isaacaxolotl: 认识 Sacred Remains 联合总监兼派视界网站贡献者 Isaac。 + not-found: 找不到请求的派视界页面;请返回首页或浏览最新新闻。 + accessibility: + copy_server: 复制服务器地址 + join_section: 前往加入说明 + copy_server_coming_soon: 复制服务器地址,即将推出 + launch_bedrock: 启动 Minecraft 基岩版,即将推出 + coming_soon: 即将推出 + compatibility: + sacred_cubes: Sacred Cubes 已更名为 Sacred Remains。此地址为兼容性而保留。 + continue: 前往 Sacred Remains + +ja-jp: + name: PWindows + tagline: MinecraftサーバーだけではないPWindowsを発見しよう + home_heading: Minecraftサーバー、ゲームスタジオ、コミュニティだけではありません。 + page_titles: + sacred-cubes-compat: Sacred Cubes は移動しました + descriptions: + home: Minecraftサーバー、ゲームスタジオ、コミュニティプロジェクトであるPWindowsをご覧ください。 + about: PWindowsのMinecraftサーバー、コミュニティ、ゲームスタジオについて紹介します。 + news: PWindowsの最新ニュース、開発情報、お知らせを掲載しています。 + contact: コミュニティDiscordからPWindowsチームにお問い合わせください。 + departments: Unity、Roblox、MinecraftのPWindows開発チームを紹介します。 + mcd: PWindowsのMinecraft部門について紹介します。 + rd: PWindowsのRoblox部門について紹介します。 + ud: PWindowsのUnity部門について紹介します。 + feedback: PWindowsチームへご意見やご提案をお寄せください。 + games: PWindowsが開発中のゲームをご覧ください。 + ood: PWindowsのObby of Dominance開発情報をご覧ください。 + sr: PWindowsのSacred Remains開発情報をご覧ください。 + sacred-cubes-compat: Sacred Cubes は Sacred Remains に名称変更されました。現在のゲームページへ進んでください。 + rules: PWindows Minecraftサーバーとコミュニティのルールをご確認ください。 + sitemap: PWindowsサイトの公開ページ、ゲーム、部門、ニュース記事を一覧できます。 + staff: PWindowsのプロジェクトとコミュニティを支えるメンバーを紹介します。 + staff-petermazep: PWindowsオーナーのPeterMaZepを紹介します。 + staff-isaacaxolotl: Sacred Remains共同ディレクター兼サイト担当のIsaacを紹介します。 + not-found: お探しのPWindowsページは見つかりませんでした。ホームまたは最新ニュースをご覧ください。 + accessibility: + copy_server: サーバーアドレスをコピー + join_section: 参加方法へ移動 + copy_server_coming_soon: サーバーアドレスをコピー、近日公開 + launch_bedrock: Minecraft Bedrockを起動、近日公開 + coming_soon: 近日公開 + compatibility: + sacred_cubes: Sacred Cubes は Sacred Remains に名称変更されました。このアドレスは互換性のため保持されています。 + continue: Sacred Remains へ進む diff --git a/_data/staff.yml b/_data/staff.yml index 1efff95..98c6265 100644 --- a/_data/staff.yml +++ b/_data/staff.yml @@ -1,25 +1,83 @@ petermazep: - name: PeterMaZep - pfp: https://pwindows.qzz.io/assets/staffpfp/PeterMaZep.png - role: Owner of PWindows - bio: The owner of PWindows, responsible for coding and managing everything. + department: "Owner" + aboutpage: true + pfp: /assets/staffpfp/PeterMaZep.png + pfp_width: 672 + pfp_height: 672 + path: /staff/petermazep socials: twitter: https://twitter.com/petermazep github: https://github.com/petermazep - aboutpage: true - -staff: - name: Staff - pfp: https://pwindows.qzz.io/assets/staffpfp/staff.png - aboutpage: false - + en-us: + name: PeterMaZep + role: Owner of PWindows + bio: The owner of PWindows, responsible for coding and managing everything. + zh-cn: + name: PeterMaZep + role: 派视界的创始人 + bio: 派视界的创始人,负责编码和管理所有事务。 + ja-jp: + name: PeterMaZep + role: PWindowsのオーナー + bio: PWindowsのオーナーとして、コーディングと全体の運営を担当しています。 isaacaxolotl: - name: Isaac - pfp: /assets/staffpfp/staff.png - role: Co-Director of Sacred Cubes - bio: The co-director of Sacred Cubes, responsible for this website because Peter asked me to change it. + aboutpage: true department: "Unity" + pfp: /assets/staffpfp/staff.png + pfp_width: 201 + pfp_height: 298 + path: /staff/isaacaxolotl socials: twitter: https://twitter.com/windows11create github: https://github.com/ilikecereal1 - aboutpage: true \ No newline at end of file + en-us: + name: Isaac + role: Co-Director of Sacred Remains + bio: The co-director of Sacred Remains, responsible for this website 'cause Peter asked me to change it. + zh-cn: + name: Isaac + role: Sacred Remains的联合总监 + bio: Sacred Remains的联合总监,负责这个网站,因为Peter让我改一下。 + ja-jp: + name: Isaac + role: Sacred Remains共同ディレクター + bio: Sacred Remainsの共同ディレクターです。Peterに頼まれたため、このウェブサイトを担当しています。 + +staff-minecraft: + department: "Minecraft" + aboutpage: false + pfp: /assets/staffpfp/staff.png + pfp_width: 201 + pfp_height: 298 + en-us: + name: Staff + zh-cn: + name: 工作人员 + ja-jp: + name: スタッフ + +staff-unity: + aboutpage: false + department: "Unity" + pfp: /assets/staffpfp/staff.png + pfp_width: 201 + pfp_height: 298 + en-us: + name: Staff + zh-cn: + name: 工作人员 + ja-jp: + name: スタッフ + +staff-roblox: + aboutpage: false + department: "Roblox" + pfp: /assets/staffpfp/staff.png + pfp_width: 201 + pfp_height: 298 + en-us: + name: Staff + zh-cn: + name: 工作人员 + ja-jp: + name: スタッフ diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 6f3d12a..0000000 --- a/_includes/header.html +++ /dev/null @@ -1,39 +0,0 @@ - -
- - - - - - - - - diff --git a/_includes/schema-org.html b/_includes/schema-org.html deleted file mode 100644 index c495633..0000000 --- a/_includes/schema-org.html +++ /dev/null @@ -1,9 +0,0 @@ - \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index b1d0df6..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - {% if page.url == "/" %} - {% include schema-org.html %} - {% endif %} - - - {{ page.title }} | {{ site.title }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ content_for_head }} - - - {% if page.extra_css %} - {% for css_file in page.extra_css %} - - {% endfor %} - {% endif %} - - - {% if page.layout != "news" %} -

{{ page.title }} | {{ site.title }}

- {% endif %} - {% include header.html %} -
- {{ content }} -
- - - diff --git a/_layouts/news.html b/_layouts/news.html deleted file mode 100644 index d2e8eae..0000000 --- a/_layouts/news.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -layout: default ---- - - - - - -
-
- {% if page.banner %} - {{ page.title }} Banner - {% else %} - Default News Banner - {% endif %} -
-
-

{{ page.type }}

-
- -
- {% assign person = site.data.staff[page.author] %} - - -
-

{{ page.title }}

-
- {{ page.summary }} -
-
- {{ content }} -
-
- -
- -
\ No newline at end of file diff --git a/about.html b/about.html deleted file mode 100644 index c7937cd..0000000 --- a/about.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -permalink: /about -title: About ---- - -
-

In development

-
diff --git a/articles.html b/articles.html deleted file mode 100644 index e64d195..0000000 --- a/articles.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -layout: default -title: News -permalink: /articles ---- - - - -
-
-

Newest News

-
- - -
-
- -
- {% for article in site.articles %} -
- - -
- {{ article.type }} -

{{ article.title }}

-

{{ article.summary | strip_html | truncate: 120 }}

-
-
-
- {% endfor %} -
-
- - - \ No newline at end of file diff --git a/assets/.keep b/assets/.keep deleted file mode 100644 index 8b13789..0000000 --- a/assets/.keep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/assets/PWindows.png b/assets/PWindows.png deleted file mode 100644 index 7418d51..0000000 Binary files a/assets/PWindows.png and /dev/null differ diff --git a/assets/css/extra.css b/assets/css/extra.css new file mode 100644 index 0000000..0d75c99 --- /dev/null +++ b/assets/css/extra.css @@ -0,0 +1,3 @@ +/* Intentionally left blank until we figure + out what should be in the main css, + and what should be in the extra css. */ \ No newline at end of file diff --git a/assets/css/news.css b/assets/css/news.css index 3b43e5a..30b2374 100644 --- a/assets/css/news.css +++ b/assets/css/news.css @@ -4,24 +4,42 @@ body { color: #000000; } +.news-item { + padding-top: 80px; +} + +.news-banner { + position: relative; +} + .news-banner img { - height: 670px; /* set a fixed height */ + height: clamp(280px, 55vw, 670px); object-fit: cover; /* crop instead of squish */ width: 100%; /* keep full width */ margin-bottom: 1rem; } -.news-item h1 h2 h3 { - font-family: 'Minecraft Ten v2'; - margin-bottom: 10px; +.article-title { + text-transform: uppercase; + font-size: 2.5rem; } -.minecraft-box { - position: absolute; /* overlay on banner */ - top: 650px; /* distance from bottom */ - left: 50%; /* center horizontally */ - transform: translateX(-50%); /* true centering */ +.news-item :is(h1, h2, h3) { + font-family: var(--font-display); +} + +.content > :is(h2, h3) { + margin-top: 24px; +} +.content > p { + margin-bottom: 16px; +} + +.minecraft-box { + position: relative; + width: max-content; + margin: -2.5rem auto 0; background-color: #171615; padding: 12px 20px; font-size: 1.2rem; @@ -33,11 +51,15 @@ body { display: flex; align-items: flex-start; gap: 90px; - max-width: 1000px; + max-width: 1100px; margin: 0 auto; padding: 20px; } +.news-body > * { + min-width: 0; +} + .author-info { flex: 0 0 200px; /* fixed width column */ text-align: center; @@ -45,12 +67,10 @@ body { .author-pfp { display: block; /* default for images */ - margin: 0 auto; + margin: 0 auto 10px; max-width: 120px; /* sets a max width */ height: auto; /* keeps natural aspect ratio */ object-fit: contain; /* ensures the whole image shows */ - margin-bottom: 10px; - display: block; } .author-name { @@ -64,12 +84,91 @@ body { } .summary { - margin-top: 10px; margin-bottom: 30px; } .content { - line-height: 1.3; + line-height: 1.65; +} + +.read-more-divider { + max-width: 1100px; + margin: 40px auto 0; + border: none; + border-top: 1px solid rgba(128, 128, 128, 0.4); +} + +.share-story { + max-width: 1100px; + margin: 30px auto 0; + padding: 0 20px; + text-align: center; +} + +.share-story-label { + text-transform: uppercase; + font-weight: 700; + letter-spacing: 0.05em; + margin-bottom: 1rem; +} + +.share-story-links { + display: flex; + justify-content: center; + gap: 1rem; +} + +.share-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + border: 2px solid currentColor; + border-radius: 50%; + color: inherit; + transition: opacity 0.2s ease; +} + +.share-icon:hover { + opacity: 0.7; +} + +.share-icon-img { + width: 18px; + height: 18px; + image-rendering: pixelated; +} + +.read-more { + max-width: 1100px; + margin: 0 auto; + padding: 40px 20px 60px; + text-align: center; +} + +.read-more-heading { + text-transform: uppercase; + font-size: 1.75rem; + margin-bottom: 0.5rem; +} + +.read-more-subtitle { + margin-bottom: 2rem; +} + +.read-more .article-grid { + text-align: left; +} + +.read-more-item.is-hidden { + display: none; +} + +.read-more-actions { + display: flex; + justify-content: center; + margin-top: 2rem; } @media (prefers-color-scheme: dark) { @@ -82,6 +181,14 @@ body { background-color: #ffffff; color: #1D1E1E; } + + .author-date { + color: #bdbdbd; + } + + .share-icon-img { + filter: brightness(0) invert(1); + } } @media (max-width: 768px) { @@ -100,4 +207,20 @@ body { .article { width: 100%; /* ensure article fills the width */ } + + .article-title { + font-size: clamp(1.8rem, 9vw, 2.5rem); + } +} + +.mc-seven { + font-family: "Minecraft Seven v2", monospace !important; } + +.mc-seven:is(h1) { + font-size: 1.5rem; +} + +.mc-seven:is(h2) { + font-size: 1.25rem; +} \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css deleted file mode 100644 index f59f56a..0000000 --- a/assets/css/style.css +++ /dev/null @@ -1,1055 +0,0 @@ -/* Fonts */ -@font-face { - font-family: "Minecraft Ten v2"; - src: url("../mojang/fonts/Minecraft-Tenv2.ttf") format("truetype"); - font-display: swap; -} - -@font-face { - font-family: "Minecraft Seven v2"; - src: url("../mojang/fonts/Minecraft-Seven_v2.ttf") format("truetype"); - font-display: swap; -} - -/* Base */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: - "Minecraft Seven v2", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - background-image: url("../mojang/img/bg-wool-white.png"); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - background-attachment: fixed; - color: #333333; - overflow-x: hidden; -} - -html, body { - overflow-anchor: none; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: - "Minecraft Ten v2", "Impact", "Trebuchet MS", "Segoe UI", sans-serif; -} - -/* Header and Navigation */ -.topbar { - position: fixed; - top: 0; - left: 0; - right: 0; - height: 80px; - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(15px); - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 40px; - z-index: 1003; - border-bottom: 1px solid rgba(255, 206, 2, 0.2); - box-shadow: 0 4px 20px rgba(255, 206, 2, 0.1); -} - -/* Hamburger Menu Styles */ -.hamburger { - width: 35px; - height: 35px; - display: flex; - flex-direction: column; - justify-content: center; - gap: 4px; - cursor: pointer; - z-index: 1002; - padding: 8px; - border-radius: 8px; - transform: rotate(0deg); - transition: - all 0.4s ease, - transform 0.4s ease; -} - -.hamburger:hover { - background: rgba(255, 206, 2, 0.1); - box-shadow: 0 0 20px rgba(255, 206, 2, 0.3); -} - -.hamburger span { - width: 100%; - height: 3px; - background: linear-gradient(45deg, #333, #555); - border-radius: 2px; - transition: all 0.4s ease; - transform-origin: center; - box-shadow: 0 0 6px rgba(255, 206, 2, 0.4); -} - -/* Hamburger Animation - Simple 90 degree rotation, keep all 3 lines */ -.hamburger.active { - transform: rotate(90deg); -} - -.hamburger.active span { - background: linear-gradient(45deg, #ffce02, #e6b800); - box-shadow: 0 0 8px rgba(255, 206, 2, 0.6); -} - -/* Mobile Menu Overlay - Desktop sidebar, mobile full screen */ -.menu-overlay { - position: fixed; - top: 0; - left: -400px; - width: 400px; - height: 100vh; - background: rgba(255, 255, 255, 0.98); - backdrop-filter: blur(20px); - z-index: 1001; - transition: left 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); - display: flex; - flex-direction: column; - padding-top: 100px; - overflow-y: auto; - box-shadow: 0 0 50px rgba(255, 206, 2, 0.2); -} - -.menu-overlay.active { - left: 0; -} - -/* Navigation Menu */ -.nav-menu { - display: flex; - flex-direction: column; - align-items: center; - gap: 25px; - padding: 40px 20px; - max-width: 400px; - margin: 0 auto; - width: 100%; -} - -.nav-item { - text-decoration: none; - font-family: "Minecraft Seven v2", monospace; - font-size: 1.1rem; - color: #333; - padding: 18px 35px; - border-radius: 16px; - background: rgba(255, 255, 255, 0.8); - border: 1px solid rgba(255, 206, 2, 0.2); - transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); - width: 100%; - text-align: center; - position: relative; - overflow: hidden; - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); -} - -.nav-item::before { - content: ""; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient( - 90deg, - transparent, - rgba(255, 206, 2, 0.3), - transparent - ); - transition: left 0.6s; -} - -.nav-item:hover::before { - left: 100%; -} - -.nav-item:hover { - background: rgba(255, 255, 255, 0.95); - border-color: rgba(255, 206, 2, 0.4); - transform: translateY(-3px) scale(1.02); - box-shadow: - 0 10px 30px rgba(0, 0, 0, 0.1), - 0 0 20px rgba(255, 206, 2, 0.3); -} - -.nav-item:active { - transform: translateY(-1px) scale(1.01); -} - -/* Special styling for different nav items */ -.nav-item.primary { - background: linear-gradient(135deg, #ffce02, #ffd93d); - color: #333; - border-color: #ffce02; - box-shadow: - 0 4px 15px rgba(255, 206, 2, 0.3), - 0 0 20px rgba(255, 206, 2, 0.2); -} - -.nav-item.primary:hover { - background: linear-gradient(135deg, #ffd93d, #ffce02); - box-shadow: - 0 15px 40px rgba(255, 206, 2, 0.4), - 0 0 30px rgba(255, 206, 2, 0.5); - transform: translateY(-4px) scale(1.03); -} - -.nav-item.secondary { - background: linear-gradient( - 135deg, - rgba(34, 197, 94, 0.1), - rgba(34, 197, 94, 0.2) - ); - border-color: rgba(34, 197, 94, 0.3); - color: #22c55e; - box-shadow: 0 4px 15px rgba(34, 197, 94, 0.1); -} - -.nav-item.secondary:hover { - background: linear-gradient( - 135deg, - rgba(34, 197, 94, 0.2), - rgba(34, 197, 94, 0.3) - ); - box-shadow: - 0 15px 40px rgba(34, 197, 94, 0.2), - 0 0 30px rgba(34, 197, 94, 0.3); -} - -/* Menu Footer */ -.menu-footer { - margin-top: auto; - padding: 30px 20px; - text-align: center; - border-top: 1px solid rgba(255, 206, 2, 0.2); -} - -.menu-footer p { - font-family: "Minecraft Seven v2", monospace; - font-size: 0.7rem; - color: #666; - margin-bottom: 20px; -} - -.social-links { - display: flex; - justify-content: center; - gap: 15px; -} - -.social-link { - width: 45px; - height: 45px; - background: rgba(255, 206, 2, 0.1); - border: 1px solid rgba(255, 206, 2, 0.3); - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - text-decoration: none; - color: #ffce02; - font-size: 1.1rem; - transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); - box-shadow: 0 4px 15px rgba(255, 206, 2, 0.1); -} - -.social-link:hover { - background: linear-gradient(135deg, #ffce02, #ffd93d); - color: #333; - box-shadow: 0 4px 15px rgba(255, 206, 2, 0.3); -} - -/* Logo with enhanced interactivity */ -.logo { - height: 27px; - display: flex; - align-items: center; - justify-content: center; - position: absolute; - left: 50%; - transform: translateX(-50%); - cursor: pointer; - transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); - padding: 8px; -} - -.logo:hover { - transform: translateX(-50%) scale(1.1); -} - -.logo:active { - transform: translateX(-50%) scale(1.05); -} - -.logo-img { - max-width: 400%; - max-height: 400%; - object-fit: contain; - transition: all 0.3s ease; -} - -.logo:hover .logo-img { - filter: drop-shadow(0 0 10px rgba(255, 206, 2, 0.6)); -} - -/* About button with glow */ -.about-btn { - padding: 12px 24px; - background: linear-gradient(135deg, #333, #555); - color: white; - text-decoration: none; - border-radius: 20px; - font-weight: 600; - transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); - border: none; - cursor: pointer; - font-size: 12px; - font-family: "Minecraft Seven v2", monospace; - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); -} - -.about-btn:hover { - background: linear-gradient(135deg, #555, #777); - transform: translateY(-2px) scale(1.05); - box-shadow: - 0 8px 25px rgba(0, 0, 0, 0.3), - 0 0 20px rgba(255, 206, 2, 0.2); -} - -/*Landing Hero*/ -.landing { - height: 100vh; - background-image: url("../mojang/img/bg-grass.png"); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - display: flex; - flex-direction: column; - position: relative; - padding-top: 80px; - border-radius: 25px; - margin: 100px 15px 15px; - box-shadow: - 0 25px 80px rgba(0, 0, 0, 0.15), - 0 0 40px rgba(255, 206, 2, 0.1); - overflow: hidden; - max-height: 650px; -} - -.landing::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(45deg, rgba(255, 206, 2, 0.05), transparent); - opacity: 0.7; - z-index: 0; -} - -.landing-content { - flex: 1; - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - padding: 40px 40px 60px; - max-width: 1200px; - margin: 0 auto; - width: 100%; - position: relative; - z-index: 2; -} - -.hero-card .server-info .launch-btn { - transition: - opacity 0.6s ease-out, - transform 0.6s ease-out; -} - -.hero-card:hover { - transform: translateY(-5px); -} - -/* Hero Card with enhanced glow */ -.hero-card { - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(20px); - border-radius: 25px; - padding: 30px 35px 5px 35px; - box-shadow: - 0 25px 80px rgba(0, 0, 0, 0.15), - 0 0 40px rgba(255, 206, 2, 0.2), - inset 0 1px 1px rgba(255, 255, 255, 0.9); - border: 1px solid rgba(255, 206, 2, 0.3); - background-image: url("../mojang/img/bg-wool-white.png"); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - position: relative; - overflow: hidden; - margin: 0; - max-width: 850px; - transition: all 0.3s ease; -} - -.hero-card::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: radial-gradient( - circle at center, - rgba(255, 206, 2, 0.05), - transparent - ); - z-index: -1; -} - -/* Animated Heading with text glow */ -.hero-heading { - text-align: center; - font-size: clamp(2rem, 6vw, 3.5rem); - font-weight: 400; - color: #333; - margin-bottom: 0; - line-height: 1.4; - font-family: "Minecraft Ten v2", monospace; - position: relative; - z-index: 1; -} - -.hero-line-1 { - display: block; - text-shadow: 0 0 10px rgba(0, 0, 0, 0.1); -} - -.hero-line-2 { - display: block; - color: #ffce02; - text-shadow: - 0 0 20px rgba(255, 206, 2, 0.5), - 0 0 40px rgba(255, 206, 2, 0.3); -} - -.animated-word { - color: #ffce02; - display: block; - position: relative; - text-align: center; - margin-top: 0.2em; - text-shadow: - 0 0 20px rgba(255, 206, 2, 0.5), - 0 0 40px rgba(255, 206, 2, 0.3); -} - -.word-container { - display: inline-block; - position: relative; - height: 1.3em; - overflow: hidden; - min-width: 500px; -} - -.words-list { - position: relative; - animation: perfectWordScroll 9s ease-in-out infinite; -} - -.word { - display: block; - height: 1.3em; - line-height: 1.3em; - text-align: center; - padding: 0; - font-family: "Minecraft Ten v2", monospace; - animation: glow 2s ease-in-out infinite alternate; -} - -@keyframes glow { - from { - text-shadow: 0 0 10px rgba(255, 206, 2, 0.5); - } - - to { - text-shadow: 0 0 20px rgba(255, 206, 2, 0.7); - } -} - -@keyframes perfectWordScroll { - 0%, - 25% { - transform: translateY(0); - } - - 33%, - 58% { - transform: translateY(-1.3em); - } - - 66%, - 91% { - transform: translateY(-2.6em); - } - - 100% { - transform: translateY(-3.9em); - } -} - -/* Bottom Content with enhanced interactivity */ -.bottom-content { - display: flex; - flex-direction: column; - align-items: center; - gap: 25px; - margin-top: 45px; -} - -.server-info { - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(15px); - border: none; - border-radius: 16px; - padding: 18px 28px; - font-family: "Minecraft Seven v2", monospace; - font-size: 0.9rem; - color: #bc9700; - font-weight: 400; - box-shadow: - 0 8px 32px rgba(0, 0, 0, 0.1), - 0 0 20px rgba(255, 206, 2, 0.2); - border: 1px solid rgba(255, 206, 2, 0.3); - cursor: pointer; - transition: - all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94), - transform 0.3s ease; - position: relative; -} - -.server-info::after, -.flip-card-button::after { - content: "Copied!"; - position: absolute; - top: -35px; - left: 50%; - transform: translateX(-50%); - background: linear-gradient( - 135deg, - rgba(34, 197, 94, 0.9), - rgba(34, 197, 94, 0.8) - ); - color: white; - padding: 6px 12px; - border-radius: 8px; - font-size: 0.7rem; - opacity: 0; - pointer-events: none; - transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(34, 197, 94, 0.3); - white-space: nowrap; -} - -.server-info.copied::after, -.flip-card-button.copied::after { - opacity: 1; - transform: translateX(-50%) translateY(-5px); -} - -.server-info:active { - transform: translateY(-5px) scale(1.05); - box-shadow: - 0 15px 50px rgba(0, 0, 0, 0.15), - 0 0 30px rgba(255, 206, 2, 0.3); -} - -.launch-btn { - background: rgba(255, 255, 255, 0.95); - color: #22c55e; - padding: 18px 36px; - border: none; - border-radius: 16px; - font-size: 0.9rem; - font-weight: 500; - cursor: pointer; - text-decoration: none; - display: inline-block; - transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); - box-shadow: - 0 8px 32px rgba(0, 0, 0, 0.1), - 0 0 20px rgba(34, 197, 94, 0.2); - backdrop-filter: blur(15px); - border: 1px solid rgba(34, 197, 94, 0.3); - font-family: "Minecraft Seven v2", monospace; -} - -.launch-btn:hover, .server-info:hover { - transform: translateY(-5px); - box-shadow: - 0 15px 50px rgba(0, 0, 0, 0.2), - 0 0 30px rgba(34, 197, 94, 0.4); - background: rgba(255, 255, 255, 1); -} - -/*About*/ -.transition-section { - min-height: 10vh; - background-image: url("../mojang/img/bg-wool-white-dark.png"); - background-size: cover; - background-position: center; - background-repeat: repeat-x; - display: flex; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; -} - -.about-content { - max-width: 800px; - margin: 0 auto; - text-align: center; - color: white; -} - -.about-section h2 { - font-size: 2rem; - margin-bottom: 30px; - color: #ffce02; - font-weight: 400; - font-family: "Minecraft Ten v2", monospace; - text-shadow: - 0 0 20px rgba(255, 206, 2, 0.5), - 0 0 40px rgba(255, 206, 2, 0.3); -} - -.about-section p { - font-size: 0.9rem; - line-height: 1.8; - margin-bottom: 20px; - opacity: 0.9; - font-family: "Minecraft Seven v2", monospace; -} - -/* How to Join Section */ -.howtojoin { - min-height: 50vh; - background-image: url("../mojang/img/bg-wool-dark.png"); - background-size: cover; - background-position: center; - background-repeat: repeat; - display: flex; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; - padding: 80px 40px; -} - -.howtojoin-heading { - font-family: "Minecraft Ten v2", monospace; - font-size: clamp(2.5rem, 7vw, 4rem); - font-weight: 400; - color: #ffffff; - text-align: center; - text-shadow: - 0 0 20px rgba(255, 206, 2, 0.5), - 0 0 40px rgba(255, 206, 2, 0.3); - margin-bottom: 60px; - padding-right: 20px; -} - -.howtojoin-heading::after { - content: "Applies to Minecraft server only"; - display: block; - font-size: 0.8rem; - color: #cccccc; - margin-top: 10px; - font-family: "Minecraft Seven v2", monospace; - opacity: 0.8; -} - -.howtojoin-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 30px; - max-width: 1200px; - width: 100%; - padding: 0 20px; -} - -.flip-card { - perspective: 1000px; - height: 320px; - cursor: pointer; -} - -.flip-card-inner { - position: relative; - width: 100%; - height: 100%; - transition: transform 0.6s; - transform-style: preserve-3d; -} - -.flip-card:hover .flip-card-inner { - transform: rotateY(180deg); - transition: transform 0.4s ease-in-out; /* Reduced duration */ -} - -.flip-card-front, -.flip-card-back { - position: absolute; - width: 100%; - height: 100%; - backface-visibility: hidden; - border-radius: 20px; - padding: 30px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3); -} - -.flip-card-front { - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(15px); - border: 2px solid rgba(255, 206, 2, 0.3); -} - -.flip-card-back { - background: linear-gradient(135deg, #ffce02, #ffd93d); - transform: rotateY(180deg); - border: 2px solid rgba(255, 206, 2, 0.5); -} - -.flip-card-icon { - font-size: 4rem; - margin-bottom: 30px; - filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2)); -} - -.flip-card-title { - font-family: "Minecraft Ten v2", monospace; - font-size: 1.5rem; - color: #333; - margin-bottom: 15px; - text-align: center; -} - -.flip-card-subtitle { - font-family: "Minecraft Seven v2", monospace; - font-size: 0.9rem; - color: #666; - text-align: center; -} - -.flip-card-back-content { - text-align: center; - width: 100%; -} - -.flip-card-back-title { - font-family: "Minecraft Ten v2", monospace; - font-size: 1.3rem; - color: #333; - margin-bottom: 20px; -} - -.flip-card-back-text { - font-family: "Minecraft Seven v2", monospace; - font-size: 0.85rem; - color: #333; - line-height: 1.6; - margin-bottom: 25px; -} - -.flip-card-button { - font-family: "Minecraft Seven v2", monospace; - font-size: 0.9rem; - color: #333; - background: rgba(255, 255, 255, 0.9); - padding: 14px 24px; - border-radius: 12px; - font-weight: bold; - border: 2px solid rgba(51, 51, 51, 0.2); - cursor: pointer; - transition: all 0.3s ease; - text-decoration: none; - display: inline-block; - position: relative; - max-width: 100%; - word-wrap: break-word; -} - -.flip-card-button:hover { - background: rgba(255, 255, 255, 1); - transform: translateY(-2px); - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); - border-color: rgba(51, 51, 51, 0.4); - animation: pulse 0.3s ease; -} - -.flip-card-button:active { - transform: translateY(0); -} - -.flip-card-button.disabled { - opacity: 0.6; - cursor: not-allowed; - background: rgba(200, 200, 200, 0.5); -} - -.flip-card-button.disabled:hover { - transform: none; - box-shadow: none; -} -/* Articles */ -.articles-title { - padding: 6rem 2rem 1rem; -} - -.articles-header { - display: flex; - justify-content: space-between; - align-items: center; -} - -#sort-select { - padding: 0.4rem 0.8rem; - font-size: 1rem; - border-radius: 6px; - border: 1px solid #ccc; -} - -.banner { - height: 180px; - background-size: cover; - background-position: center; - width: 100%; -} - -.article-grid, -.featured-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(260px, 270px)); - gap: 2rem; -} - -.article-grid { - justify-content: start; - max-width: 1200px; - padding: 0 2rem; -} - -.article-card { - background: #f9f9f9; /* light card background */ - border: 1px solid #ddd; /* subtle border for contrast */ - border-radius: 8px; - overflow: hidden; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); - transition: transform 0.2s ease; -} - -.article-card:hover { - transform: translateY(-4px); /* subtle hover lift */ -} - -.article-card img.banner { - width: 100%; - height: 180px; - object-fit: cover; - display: block; -} - -.card-content { - padding: 1rem; - color: #333; /* dark text for white background */ -} - -.type-label { - display: inline-block; - background: #ffd700; - color: #000; - font-size: 0.75rem; - font-weight: bold; - padding: 0.3em 0.6em; - border-radius: 4px; - margin-bottom: 0.5em; - text-transform: uppercase; -} - -.sort-controls { - display: flex; - align-items: center; - gap: 1rem; - margin-top: 5rem; - margin-right: 2rem; -} - -.featured-news { - margin: 6rem 0 -4rem 2rem; -} - -.featured-title { - margin-bottom: 1rem; -} - -.article-card a { - text-decoration: none; - color: inherit; -} - -.sort-controls select { - font-family: "Minecraft Seven v2", sans-serif; - font-size: 1rem; - line-height: 1.2; /* tighter line height */ - padding: 6px 10px; /* give vertical breathing room */ - box-sizing: border-box; - height: auto; - vertical-align: middle; -} - -.spacing-start { - margin-top: 5rem; -} - -/* Responsive */ -@media (max-width: 1280px) { - .howtojoin { - display: flex; - flex-direction: column; - align-items: center; - padding: 0 20px; - } - - .howtojoin-heading { - margin-bottom: 20px; - padding-right: 0; - } - - .howtojoin-cards { - margin-top: 20px; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - } - - .howtojoin-cards > .card { - margin: 0 auto; - } -} - -@media (max-width: 768px) { - .topbar { - padding: 0 20px; - height: 70px; - } - - .logo { - width: 66px; - height: 66px; - } - - .about-btn { - display: none; - } - - .menu-overlay { - left: -100%; - width: 100vw; - padding-top: 0; - box-shadow: none; - } - - .nav-menu { - max-width: none; - width: 100%; - padding: 100px 25px 40px; - gap: 20px; - } - - .landing { - margin: 80px 8px 8px; - border-radius: 20px; - padding: 0; - } - - .hero-card { - padding: 25px 20px 15px; - border-radius: 20px; - } - - .hero-heading { - font-size: clamp(1.5rem, 8vw, 2.5rem); - line-height: 1.2; - margin-bottom: 0; - } - - .word-container { - min-width: 350px; - } - - .bottom-content { - margin-top: 16px; - padding: 0 20px; - gap: 16px; - } - - .launch-btn { - padding: 16px 32px; - font-size: 0.8rem; - width: 100%; - max-width: 300px; - text-align: center; - } - - .landing-content { - padding: 40px 20px; - } -} - -@media (max-width: 480px) { - .hero-heading { - font-size: clamp(1.2rem, 10vw, 2rem); - } - - .word-container { - min-width: 300px; - } - - .landing { - margin: 75px 5px 5px; - border-radius: 16px; - } - - .hero-card { - padding: 20px; - border-radius: 16px; - margin-top: -30px; - } -} - -@media (pointer: coarse) { - .hero-card:hover, - .server-info:hover, - .flip-card:hover .flip-card-inner { - transform: none; - box-shadow: none; - } -} diff --git a/assets/extra/img/sacred-remains-debris.png b/assets/extra/img/sacred-remains-debris.png new file mode 100644 index 0000000..f78ae68 Binary files /dev/null and b/assets/extra/img/sacred-remains-debris.png differ diff --git a/assets/extra/img/sacred-remains.png b/assets/extra/img/sacred-remains.png new file mode 100644 index 0000000..e6bc15c Binary files /dev/null and b/assets/extra/img/sacred-remains.png differ diff --git a/android-chrome-192x192.png b/assets/icons/site/android-chrome-192x192.png similarity index 100% rename from android-chrome-192x192.png rename to assets/icons/site/android-chrome-192x192.png diff --git a/android-chrome-512x512.png b/assets/icons/site/android-chrome-512x512.png similarity index 100% rename from android-chrome-512x512.png rename to assets/icons/site/android-chrome-512x512.png diff --git a/apple-touch-icon.png b/assets/icons/site/apple-touch-icon.png similarity index 100% rename from apple-touch-icon.png rename to assets/icons/site/apple-touch-icon.png diff --git a/favicon-16x16.png b/assets/icons/site/favicon-16x16.png similarity index 100% rename from favicon-16x16.png rename to assets/icons/site/favicon-16x16.png diff --git a/favicon-32x32.png b/assets/icons/site/favicon-32x32.png similarity index 100% rename from favicon-32x32.png rename to assets/icons/site/favicon-32x32.png diff --git a/assets/icons/site/favicon.ico b/assets/icons/site/favicon.ico new file mode 100644 index 0000000..d152fad Binary files /dev/null and b/assets/icons/site/favicon.ico differ diff --git a/assets/img/obby-of-dominance.png b/assets/img/obby-of-dominance.png new file mode 100644 index 0000000..8f1f1ae Binary files /dev/null and b/assets/img/obby-of-dominance.png differ diff --git a/assets/img/sacred-remains-debris.webp b/assets/img/sacred-remains-debris.webp new file mode 100644 index 0000000..734e8fa Binary files /dev/null and b/assets/img/sacred-remains-debris.webp differ diff --git a/assets/img/sacred-remains.webp b/assets/img/sacred-remains.webp new file mode 100644 index 0000000..8ad9bad Binary files /dev/null and b/assets/img/sacred-remains.webp differ diff --git a/assets/js/extra.js b/assets/js/extra.js new file mode 100644 index 0000000..00b2b22 --- /dev/null +++ b/assets/js/extra.js @@ -0,0 +1,222 @@ +function setupFlipCards() { + const preciseInput = window.matchMedia( + "(min-width: 769px) and (any-hover: hover) and (any-pointer: fine)", + ); + let keyboardNavigation = false; + + document.addEventListener( + "keydown", + (event) => { + if (event.key === "Tab") keyboardNavigation = true; + }, + true, + ); + document.addEventListener( + "pointerdown", + () => { + keyboardNavigation = false; + }, + true, + ); + + const cards = Array.from(document.querySelectorAll("[data-flip-card]")) + .map((card) => { + const front = card.querySelector(".flip-card-front"); + const back = card.querySelector(".flip-card-back"); + const openButton = card.querySelector(".flip-card-toggle"); + const closeButton = card.querySelector(".flip-card-back-toggle"); + if (!front || !back || !openButton || !closeButton) return null; + + const cardTitle = card.querySelector(".flip-card-title")?.textContent.trim(); + + function setFlipped(flipped, moveFocus = false) { + card.classList.toggle("is-flipped", flipped); + openButton.setAttribute("aria-expanded", String(flipped)); + front.toggleAttribute("inert", flipped); + back.toggleAttribute("inert", !flipped); + front.setAttribute("aria-hidden", String(flipped)); + back.setAttribute("aria-hidden", String(!flipped)); + if (moveFocus) (flipped ? closeButton : openButton).focus(); + } + + function setPreciseMode(enabled) { + card.classList.toggle("precise-interaction", enabled); + if (enabled) { + openButton.setAttribute("tabindex", "-1"); + openButton.setAttribute("aria-hidden", "true"); + } else { + openButton.removeAttribute("tabindex"); + openButton.removeAttribute("aria-hidden"); + } + closeButton.disabled = enabled; + closeButton.hidden = enabled; + closeButton.setAttribute("aria-hidden", String(enabled)); + } + + function configureKeyboardAccess() { + if (preciseInput.matches) { + card.tabIndex = 0; + card.setAttribute("role", "group"); + card.setAttribute("aria-label", `${cardTitle || "Join option"} details`); + card.setAttribute("aria-controls", back.id); + } else { + card.removeAttribute("tabindex"); + card.removeAttribute("role"); + card.removeAttribute("aria-label"); + card.removeAttribute("aria-controls"); + } + setPreciseMode(preciseInput.matches); + setFlipped(false); + } + + openButton.addEventListener("click", () => setFlipped(true, true)); + closeButton.addEventListener("click", () => setFlipped(false, true)); + + card.addEventListener("pointerenter", (event) => { + if (event.pointerType === "mouse") { + setPreciseMode(true); + setFlipped(true); + } + }); + + card.addEventListener("pointerdown", (event) => { + if (event.pointerType !== "mouse") setPreciseMode(false); + }); + + card.addEventListener("pointerleave", (event) => { + if (event.pointerType === "mouse" && !card.contains(document.activeElement)) { + setFlipped(false); + setPreciseMode(preciseInput.matches); + } + }); + + card.addEventListener("focusin", () => { + if (keyboardNavigation && preciseInput.matches) { + setPreciseMode(true); + setFlipped(true); + } + }); + + card.addEventListener("focusout", () => { + window.requestAnimationFrame(() => { + if (!card.contains(document.activeElement)) { + setFlipped(false); + setPreciseMode(preciseInput.matches); + } + }); + }); + + card.addEventListener("keydown", (event) => { + if (card.classList.contains("precise-interaction") && event.key === "Escape") { + event.preventDefault(); + setFlipped(false); + } + }); + + return { configureKeyboardAccess }; + }) + .filter(Boolean); + + function configureCards() { + cards.forEach(({ configureKeyboardAccess }) => configureKeyboardAccess()); + } + + preciseInput.addEventListener("change", configureCards); + configureCards(); +} + +function setupArticleSorting() { + const select = document.getElementById("sort-select"); + const grid = document.getElementById("articleGrid"); + if (!select || !grid) return; + + const comparators = { + "date-desc": (a, b) => b.dataset.date.localeCompare(a.dataset.date), + "date-asc": (a, b) => a.dataset.date.localeCompare(b.dataset.date), + type: (a, b) => a.dataset.type.localeCompare(b.dataset.type), + title: (a, b) => a.dataset.title.localeCompare(b.dataset.title), + }; + + function sortArticles() { + const cards = Array.from(grid.querySelectorAll(".article-card")); + cards.sort(comparators[select.value] || comparators["date-desc"]); + cards.forEach((card) => grid.appendChild(card)); + } + + select.addEventListener("change", sortArticles); + sortArticles(); +} + +function setupDebris() { + const debrisElements = document.querySelectorAll("[data-debris]"); + if (!debrisElements.length) return; + + const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)"); + + function updateDebris() { + debrisElements.forEach((debris) => { + const scale = parseFloat(debris.dataset.scale); + const startY = parseFloat(debris.dataset.startY); + const endY = parseFloat(debris.dataset.endY); + + if (reduceMotion.matches) { + debris.style.transform = `scale(${scale})`; + return; + } + + const card = debris.closest(".games-content-part"); + if (!card) return; + + const rect = card.getBoundingClientRect(); + const scrollY = window.scrollY; + const maxScroll = document.documentElement.scrollHeight - window.innerHeight; + const progress = maxScroll > 0 ? scrollY / maxScroll : 0; + const translateY = startY + (endY - startY) * (progress); + + debris.style.transform = `translateY(${translateY}%) scale(${scale})`; + }); + } + + let ticking = false; + function onScroll() { + if (reduceMotion.matches || ticking) return; + + window.requestAnimationFrame(() => { + updateDebris(); + ticking = false; + }); + ticking = true; + } + + window.addEventListener("scroll", onScroll); + window.addEventListener("resize", updateDebris); + window.addEventListener("load", updateDebris); + reduceMotion.addEventListener("change", updateDebris); + updateDebris(); +} + +function setupReadMore() { + const grid = document.getElementById("readMoreGrid"); + const button = document.getElementById("readMoreBtn"); + if (!grid || !button) return; + + const step = Number.parseInt(button.dataset.step, 10) || 16; + + function revealNext() { + const hidden = Array.from(grid.querySelectorAll(".read-more-item.is-hidden")); + hidden.slice(0, step).forEach((item) => item.classList.remove("is-hidden")); + + if (!grid.querySelector(".read-more-item.is-hidden")) { + button.hidden = true; + } + } + + button.addEventListener("click", revealNext); +} + +document.addEventListener("DOMContentLoaded", () => { + setupFlipCards(); + setupArticleSorting(); + setupReadMore(); + setupDebris(); +}); diff --git a/assets/js/main.js b/assets/js/main.js deleted file mode 100644 index 1c378b1..0000000 --- a/assets/js/main.js +++ /dev/null @@ -1,169 +0,0 @@ -// Logo click functionality with bounce animation -function goHome() { - const logo = document.getElementById("logo"); - if (!logo) return; - - logo.style.animation = "bounce 0.6s ease-in-out"; - - setTimeout(() => { - logo.style.animation = ""; - }, 600); - - // Navigate to index page instead of #home - // Also navigate to / instead of www.pwindows.qzz.io to enable better testing - window.location.href = "/"; -} - -function aboutPage() { - window.location.href = "/about"; -} - -function newsPage() { - window.location.href = "/articles"; -} - -// Hamburger Menu Functionality -function toggleMenu() { - const hamburger = document.getElementById("hamburger"); - const mobileMenu = document.getElementById("mobileMenu"); - const body = document.body; - - if (hamburger && mobileMenu) { - hamburger.classList.toggle("active"); - mobileMenu.classList.toggle("active"); - body.classList.toggle("menu-open"); - } -} - -function closeMenu() { - const hamburger = document.getElementById("hamburger"); - const mobileMenu = document.getElementById("mobileMenu"); - const body = document.body; - - if (hamburger && mobileMenu) { - hamburger.classList.remove("active"); - mobileMenu.classList.remove("active"); - body.classList.remove("menu-open"); - } -} - -// Enhanced copy IP functionality -function copyIP() { - const ip = "Play.PWindows.qzz.io"; - const button = document.querySelector(".server-info"); - if (!button) return; - - navigator.clipboard - .writeText(ip) - .then(function () { - button.classList.add("copied"); - - setTimeout(() => { - button.classList.remove("copied"); - }, 2000); - }) - .catch(function (err) { - console.error("Failed to copy IP: ", err); - const textArea = document.createElement("textarea"); - textArea.value = ip; - document.body.appendChild(textArea); - textArea.select(); - document.execCommand("copy"); - document.body.removeChild(textArea); - - button.classList.add("copied"); - setTimeout(() => { - button.classList.remove("copied"); - }, 2000); - }); -} - -// Copy server IP from flip card button -function copyServerIP(button) { - const ip = "Play.PWindows.qzz.io"; - - navigator.clipboard - .writeText(ip) - .then(function () { - button.classList.add("copied"); - - setTimeout(() => { - button.classList.remove("copied"); - }, 2000); - }) - .catch(function (err) { - console.error("Failed to copy IP: ", err); - const textArea = document.createElement("textarea"); - textArea.value = ip; - document.body.appendChild(textArea); - textArea.select(); - document.execCommand("copy"); - document.body.removeChild(textArea); - - button.classList.add("copied"); - setTimeout(() => { - button.classList.remove("copied"); - }, 2000); - }); -} - -// Initialize everything when DOM is ready -document.addEventListener("DOMContentLoaded", function () { - // Setup hamburger menu - const hamburger = document.getElementById("hamburger"); - const mobileMenu = document.getElementById("mobileMenu"); - - if (hamburger) { - hamburger.addEventListener("click", toggleMenu); - } - - // Close menu when clicking outside - if (mobileMenu) { - mobileMenu.addEventListener("click", function (e) { - if (e.target === mobileMenu) { - closeMenu(); - } - }); - } - - // Close menu on escape key - document.addEventListener("keydown", function (e) { - if ( - e.key === "Escape" && - mobileMenu && - mobileMenu.classList.contains("active") - ) { - closeMenu(); - } - }); - - // Handle window resize - window.addEventListener("resize", function () { - if ( - window.innerWidth > 768 && - mobileMenu && - mobileMenu.classList.contains("active") - ) { - closeMenu(); - } - }); - - // Enhanced smooth scrolling for anchor links - document.querySelectorAll('a[href^="#"]').forEach((anchor) => { - anchor.addEventListener("click", function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute("href")); - if (target) { - target.scrollIntoView({ - behavior: "smooth", - block: "start", - }); - } - }); - }); - - // Hero card hover effects (optimized with transform only) - // removed for more efficient css code - - // Scroll animations (optimized with IntersectionObserver) -}); diff --git a/assets/manifest.json b/assets/manifest.json new file mode 100644 index 0000000..da7d8ac --- /dev/null +++ b/assets/manifest.json @@ -0,0 +1,26 @@ +--- +layout: null +permalink: /assets/manifest.json +sitemap: false +--- +{ + "name": "PWindows", + "short_name": "PWindows", + "start_url": "{{ '/' | relative_url }}", + "scope": "{{ '/' | relative_url }}", + "icons": [ + { + "src": "{{ '/assets/icons/site/android-chrome-192x192.png' | relative_url }}", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "{{ '/assets/icons/site/android-chrome-512x512.png' | relative_url }}", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/assets/mojang/fonts/LICENSE_OFL.txt b/assets/mojang/fonts/LICENSE_OFL.txt deleted file mode 100644 index d952d62..0000000 --- a/assets/mojang/fonts/LICENSE_OFL.txt +++ /dev/null @@ -1,92 +0,0 @@ -This Font Software is licensed under the SIL Open Font License, -Version 1.1. - -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font -creation efforts of academic and linguistic communities, and to -provide a free and open framework in which fonts may be shared and -improved in partnership with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply to -any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software -components as distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, -deleting, or substituting -- in part or in whole -- any of the -components of the Original Version, by changing formats or by porting -the Font Software to a new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, -modify, redistribute, and sell modified and unmodified copies of the -Font Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, in -Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the -corresponding Copyright Holder. This restriction only applies to the -primary font name as presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created using -the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/mojang/fonts/Minecraft-Seven_v2.otf b/assets/mojang/fonts/Minecraft-Seven_v2.otf deleted file mode 100644 index 490e2ca..0000000 Binary files a/assets/mojang/fonts/Minecraft-Seven_v2.otf and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Seven_v2.ttf b/assets/mojang/fonts/Minecraft-Seven_v2.ttf deleted file mode 100644 index 87cc81b..0000000 Binary files a/assets/mojang/fonts/Minecraft-Seven_v2.ttf and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Seven_v2.woff b/assets/mojang/fonts/Minecraft-Seven_v2.woff deleted file mode 100644 index 57fb50d..0000000 Binary files a/assets/mojang/fonts/Minecraft-Seven_v2.woff and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Tenv2.eot b/assets/mojang/fonts/Minecraft-Tenv2.eot deleted file mode 100644 index 4bed47c..0000000 Binary files a/assets/mojang/fonts/Minecraft-Tenv2.eot and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Tenv2.ttf b/assets/mojang/fonts/Minecraft-Tenv2.ttf deleted file mode 100644 index 22fddfb..0000000 Binary files a/assets/mojang/fonts/Minecraft-Tenv2.ttf and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Tenv2.woff b/assets/mojang/fonts/Minecraft-Tenv2.woff deleted file mode 100644 index 312aebd..0000000 Binary files a/assets/mojang/fonts/Minecraft-Tenv2.woff and /dev/null differ diff --git a/assets/mojang/fonts/Minecraft-Tenv2.woff2 b/assets/mojang/fonts/Minecraft-Tenv2.woff2 deleted file mode 100644 index 8976219..0000000 Binary files a/assets/mojang/fonts/Minecraft-Tenv2.woff2 and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Bold.css b/assets/mojang/fonts/MinecraftFive-Bold.css deleted file mode 100644 index 53210d7..0000000 --- a/assets/mojang/fonts/MinecraftFive-Bold.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Webfont: MinecraftFive-Bold */@font-face { - font-family: 'MinecraftFive'; - src: url('MinecraftFive-Bold.eot'); /* IE9 Compat Modes */ - src: url('MinecraftFive-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('MinecraftFive-Bold.woff') format('woff'), /* Modern Browsers */ - url('MinecraftFive-Bold.ttf') format('truetype'), /* Safari, Android, iOS */ - url('MinecraftFive-Bold.svg#MinecraftFive-Bold') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: bold; - text-rendering: optimizeLegibility; -} - diff --git a/assets/mojang/fonts/MinecraftFive-Bold.eot b/assets/mojang/fonts/MinecraftFive-Bold.eot deleted file mode 100644 index 0f2d547..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Bold.eot and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Bold.html b/assets/mojang/fonts/MinecraftFive-Bold.html deleted file mode 100644 index 000c239..0000000 --- a/assets/mojang/fonts/MinecraftFive-Bold.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Minecraft Five Bold - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/MinecraftFive-Bold.svg b/assets/mojang/fonts/MinecraftFive-Bold.svg deleted file mode 100644 index 9cb862b..0000000 --- a/assets/mojang/fonts/MinecraftFive-Bold.svg +++ /dev/null @@ -1,617 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/fonts/MinecraftFive-Bold.ttf b/assets/mojang/fonts/MinecraftFive-Bold.ttf deleted file mode 100644 index 428179c..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Bold.ttf and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Bold.woff b/assets/mojang/fonts/MinecraftFive-Bold.woff deleted file mode 100644 index 3e79092..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Bold.woff and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Regular.css b/assets/mojang/fonts/MinecraftFive-Regular.css deleted file mode 100644 index 7c4820b..0000000 --- a/assets/mojang/fonts/MinecraftFive-Regular.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Webfont: MinecraftFive-Regular */@font-face { - font-family: 'MinecraftFive'; - src: url('MinecraftFive-Regular.eot'); /* IE9 Compat Modes */ - src: url('MinecraftFive-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('MinecraftFive-Regular.woff') format('woff'), /* Modern Browsers */ - url('MinecraftFive-Regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('MinecraftFive-Regular.svg#MinecraftFive-Regular') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} - diff --git a/assets/mojang/fonts/MinecraftFive-Regular.eot b/assets/mojang/fonts/MinecraftFive-Regular.eot deleted file mode 100644 index 92b1d17..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Regular.eot and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Regular.html b/assets/mojang/fonts/MinecraftFive-Regular.html deleted file mode 100644 index 109ea05..0000000 --- a/assets/mojang/fonts/MinecraftFive-Regular.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Minecraft Five Regular - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/MinecraftFive-Regular.svg b/assets/mojang/fonts/MinecraftFive-Regular.svg deleted file mode 100644 index 2dd6b69..0000000 --- a/assets/mojang/fonts/MinecraftFive-Regular.svg +++ /dev/null @@ -1,617 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/fonts/MinecraftFive-Regular.ttf b/assets/mojang/fonts/MinecraftFive-Regular.ttf deleted file mode 100644 index 80f3b53..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Regular.ttf and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Regular.woff b/assets/mojang/fonts/MinecraftFive-Regular.woff deleted file mode 100644 index c82df34..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Regular.woff and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftFive-Regular.woff2 b/assets/mojang/fonts/MinecraftFive-Regular.woff2 deleted file mode 100644 index 6e2d356..0000000 Binary files a/assets/mojang/fonts/MinecraftFive-Regular.woff2 and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftSeven.css b/assets/mojang/fonts/MinecraftSeven.css deleted file mode 100644 index f9ab634..0000000 --- a/assets/mojang/fonts/MinecraftSeven.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Webfont: MinecraftSeven */@font-face { - font-family: 'MinecraftSeven'; - src: url('MinecraftSeven.eot'); /* IE9 Compat Modes */ - src: url('MinecraftSeven.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('MinecraftSeven.woff') format('woff'), /* Modern Browsers */ - url('MinecraftSeven.ttf') format('truetype'), /* Safari, Android, iOS */ - url('MinecraftSeven.svg#MinecraftSeven') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} - diff --git a/assets/mojang/fonts/MinecraftSeven.eot b/assets/mojang/fonts/MinecraftSeven.eot deleted file mode 100644 index 0c968a6..0000000 Binary files a/assets/mojang/fonts/MinecraftSeven.eot and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftSeven.html b/assets/mojang/fonts/MinecraftSeven.html deleted file mode 100644 index 8702dd1..0000000 --- a/assets/mojang/fonts/MinecraftSeven.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Minecraft Seven - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/MinecraftSeven.svg b/assets/mojang/fonts/MinecraftSeven.svg deleted file mode 100644 index f5eb735..0000000 --- a/assets/mojang/fonts/MinecraftSeven.svg +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/fonts/MinecraftSeven.ttf b/assets/mojang/fonts/MinecraftSeven.ttf deleted file mode 100644 index 0b738f7..0000000 Binary files a/assets/mojang/fonts/MinecraftSeven.ttf and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftSeven.woff b/assets/mojang/fonts/MinecraftSeven.woff deleted file mode 100644 index c52c643..0000000 Binary files a/assets/mojang/fonts/MinecraftSeven.woff and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftTen.css b/assets/mojang/fonts/MinecraftTen.css deleted file mode 100644 index d1aa35e..0000000 --- a/assets/mojang/fonts/MinecraftTen.css +++ /dev/null @@ -1,12 +0,0 @@ -/* Webfont: MinecraftTen */@font-face { - font-family: 'MinecraftTen'; - src: url('MinecraftTen.eot'); /* IE9 Compat Modes */ - src: url('MinecraftTen.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('MinecraftTen.woff') format('woff'), /* Modern Browsers */ - url('MinecraftTen.ttf') format('truetype'), /* Safari, Android, iOS */ - url('MinecraftTen.svg#MinecraftTen') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} - diff --git a/assets/mojang/fonts/MinecraftTen.eot b/assets/mojang/fonts/MinecraftTen.eot deleted file mode 100644 index 72bba8b..0000000 Binary files a/assets/mojang/fonts/MinecraftTen.eot and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftTen.html b/assets/mojang/fonts/MinecraftTen.html deleted file mode 100644 index 9d17530..0000000 --- a/assets/mojang/fonts/MinecraftTen.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Minecraft Ten - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/MinecraftTen.svg b/assets/mojang/fonts/MinecraftTen.svg deleted file mode 100644 index 18ca554..0000000 --- a/assets/mojang/fonts/MinecraftTen.svg +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/fonts/MinecraftTen.ttf b/assets/mojang/fonts/MinecraftTen.ttf deleted file mode 100644 index 28444b4..0000000 Binary files a/assets/mojang/fonts/MinecraftTen.ttf and /dev/null differ diff --git a/assets/mojang/fonts/MinecraftTen.woff b/assets/mojang/fonts/MinecraftTen.woff deleted file mode 100644 index 8d69a58..0000000 Binary files a/assets/mojang/fonts/MinecraftTen.woff and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Bold.css b/assets/mojang/fonts/NotoSans-Bold.css deleted file mode 100644 index 0889b85..0000000 --- a/assets/mojang/fonts/NotoSans-Bold.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Webfont: NotoSans-Bold */@font-face { - font-family: 'Noto Sans'; - src: url('NotoSans-Bold.eot'); /* IE9 Compat Modes */ - src: local('Noto Sans Bold'), local('NotoSans-Bold'), /* locally installed */ - url('NotoSans-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('NotoSans-Bold.woff2') format('woff2'), /* Modern Browsers */ - url('NotoSans-Bold.woff') format('woff'), /* IE9-IE11 */ - url('NotoSans-Bold.ttf') format('truetype'), /* Safari, Android, iOS */ - url('NotoSans-Bold.svg#NotoSans-Bold') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: bold; - text-rendering: optimizeLegibility; -} diff --git a/assets/mojang/fonts/NotoSans-Bold.eot b/assets/mojang/fonts/NotoSans-Bold.eot deleted file mode 100644 index e298e59..0000000 Binary files a/assets/mojang/fonts/NotoSans-Bold.eot and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Bold.html b/assets/mojang/fonts/NotoSans-Bold.html deleted file mode 100644 index aef9eeb..0000000 --- a/assets/mojang/fonts/NotoSans-Bold.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Noto Sans Bold - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/NotoSans-Bold.ttf b/assets/mojang/fonts/NotoSans-Bold.ttf deleted file mode 100644 index ab11d31..0000000 Binary files a/assets/mojang/fonts/NotoSans-Bold.ttf and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Bold.woff b/assets/mojang/fonts/NotoSans-Bold.woff deleted file mode 100644 index 679d1f8..0000000 Binary files a/assets/mojang/fonts/NotoSans-Bold.woff and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Bold.woff2 b/assets/mojang/fonts/NotoSans-Bold.woff2 deleted file mode 100644 index deb4fba..0000000 Binary files a/assets/mojang/fonts/NotoSans-Bold.woff2 and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.css b/assets/mojang/fonts/NotoSans-BoldItalic.css deleted file mode 100644 index 881ffa0..0000000 --- a/assets/mojang/fonts/NotoSans-BoldItalic.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Webfont: NotoSans-BoldItalic */@font-face { - font-family: 'Noto Sans'; - src: url('NotoSans-BoldItalic.eot'); /* IE9 Compat Modes */ - src: local('Noto Sans Bold Italic'), local('NotoSans-BoldItalic'), /* locally installed */ - url('NotoSans-BoldItalic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('NotoSans-BoldItalic.woff2') format('woff2'), /* Modern Browsers */ - url('NotoSans-BoldItalic.woff') format('woff'), /* IE9-IE11 */ - url('NotoSans-BoldItalic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('NotoSans-BoldItalic.svg#NotoSans-BoldItalic') format('svg'); /* Legacy iOS */ - font-style: italic; - font-weight: bold; - text-rendering: optimizeLegibility; -} diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.eot b/assets/mojang/fonts/NotoSans-BoldItalic.eot deleted file mode 100644 index 2d548d3..0000000 Binary files a/assets/mojang/fonts/NotoSans-BoldItalic.eot and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.html b/assets/mojang/fonts/NotoSans-BoldItalic.html deleted file mode 100644 index 00d0392..0000000 --- a/assets/mojang/fonts/NotoSans-BoldItalic.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Noto Sans Bold Italic - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.ttf b/assets/mojang/fonts/NotoSans-BoldItalic.ttf deleted file mode 100644 index 6dfd1e6..0000000 Binary files a/assets/mojang/fonts/NotoSans-BoldItalic.ttf and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.woff b/assets/mojang/fonts/NotoSans-BoldItalic.woff deleted file mode 100644 index bbf3cba..0000000 Binary files a/assets/mojang/fonts/NotoSans-BoldItalic.woff and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-BoldItalic.woff2 b/assets/mojang/fonts/NotoSans-BoldItalic.woff2 deleted file mode 100644 index e587c7b..0000000 Binary files a/assets/mojang/fonts/NotoSans-BoldItalic.woff2 and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Italic.css b/assets/mojang/fonts/NotoSans-Italic.css deleted file mode 100644 index 66ac448..0000000 --- a/assets/mojang/fonts/NotoSans-Italic.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Webfont: NotoSans-Italic */@font-face { - font-family: 'Noto Sans'; - src: url('NotoSans-Italic.eot'); /* IE9 Compat Modes */ - src: local('Noto Sans Italic'), local('NotoSans-Italic'), /* locally installed */ - url('NotoSans-Italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('NotoSans-Italic.woff2') format('woff2'), /* Modern Browsers */ - url('NotoSans-Italic.woff') format('woff'), /* IE9-IE11 */ - url('NotoSans-Italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('NotoSans-Italic.svg#NotoSans-Italic') format('svg'); /* Legacy iOS */ - font-style: italic; - font-weight: normal; - text-rendering: optimizeLegibility; -} diff --git a/assets/mojang/fonts/NotoSans-Italic.eot b/assets/mojang/fonts/NotoSans-Italic.eot deleted file mode 100644 index 83bc199..0000000 Binary files a/assets/mojang/fonts/NotoSans-Italic.eot and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Italic.html b/assets/mojang/fonts/NotoSans-Italic.html deleted file mode 100644 index 5f1e712..0000000 --- a/assets/mojang/fonts/NotoSans-Italic.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Noto Sans Italic - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/NotoSans-Italic.ttf b/assets/mojang/fonts/NotoSans-Italic.ttf deleted file mode 100644 index 1639ad7..0000000 Binary files a/assets/mojang/fonts/NotoSans-Italic.ttf and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Italic.woff b/assets/mojang/fonts/NotoSans-Italic.woff deleted file mode 100644 index 4a1414d..0000000 Binary files a/assets/mojang/fonts/NotoSans-Italic.woff and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Italic.woff2 b/assets/mojang/fonts/NotoSans-Italic.woff2 deleted file mode 100644 index 3d821fc..0000000 Binary files a/assets/mojang/fonts/NotoSans-Italic.woff2 and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Regular.css b/assets/mojang/fonts/NotoSans-Regular.css deleted file mode 100644 index 77c19d6..0000000 --- a/assets/mojang/fonts/NotoSans-Regular.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Webfont: NotoSans-Regular */@font-face { - font-family: 'Noto Sans'; - src: url('NotoSans-Regular.eot'); /* IE9 Compat Modes */ - src: local('Noto Sans'), local('NotoSans'), /* locally installed */ - url('NotoSans-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('NotoSans-Regular.woff2') format('woff2'), /* Modern Browsers */ - url('NotoSans-Regular.woff') format('woff'), /* IE9-IE11 */ - url('NotoSans-Regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('NotoSans-Regular.svg#NotoSans-Regular') format('svg'); /* Legacy iOS */ - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} diff --git a/assets/mojang/fonts/NotoSans-Regular.eot b/assets/mojang/fonts/NotoSans-Regular.eot deleted file mode 100644 index 6505dd1..0000000 Binary files a/assets/mojang/fonts/NotoSans-Regular.eot and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Regular.html b/assets/mojang/fonts/NotoSans-Regular.html deleted file mode 100644 index 608f001..0000000 --- a/assets/mojang/fonts/NotoSans-Regular.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Noto Sans - Web Font Specimen - - - - -

The quick brown fox jumps over the lazy dog. $123.45!

- - diff --git a/assets/mojang/fonts/NotoSans-Regular.ttf b/assets/mojang/fonts/NotoSans-Regular.ttf deleted file mode 100644 index a1b8994..0000000 Binary files a/assets/mojang/fonts/NotoSans-Regular.ttf and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Regular.woff b/assets/mojang/fonts/NotoSans-Regular.woff deleted file mode 100644 index 1aff4d9..0000000 Binary files a/assets/mojang/fonts/NotoSans-Regular.woff and /dev/null differ diff --git a/assets/mojang/fonts/NotoSans-Regular.woff2 b/assets/mojang/fonts/NotoSans-Regular.woff2 deleted file mode 100644 index f5a9303..0000000 Binary files a/assets/mojang/fonts/NotoSans-Regular.woff2 and /dev/null differ diff --git a/assets/mojang/img/bg-current.png b/assets/mojang/img/bg-current.png deleted file mode 100644 index 451b9cf..0000000 Binary files a/assets/mojang/img/bg-current.png and /dev/null differ diff --git a/assets/mojang/img/bg-grass.png b/assets/mojang/img/bg-grass.png deleted file mode 100644 index 451b9cf..0000000 Binary files a/assets/mojang/img/bg-grass.png and /dev/null differ diff --git a/assets/mojang/img/bg-snow.png b/assets/mojang/img/bg-snow.png deleted file mode 100644 index 391589d..0000000 Binary files a/assets/mojang/img/bg-snow.png and /dev/null differ diff --git a/assets/mojang/img/bg-wool-dark-white.png b/assets/mojang/img/bg-wool-dark-white.png deleted file mode 100644 index a6ffaa5..0000000 Binary files a/assets/mojang/img/bg-wool-dark-white.png and /dev/null differ diff --git a/assets/mojang/img/bg-wool-dark.png b/assets/mojang/img/bg-wool-dark.png deleted file mode 100644 index 764d80d..0000000 Binary files a/assets/mojang/img/bg-wool-dark.png and /dev/null differ diff --git a/assets/mojang/img/bg-wool-white-dark.png b/assets/mojang/img/bg-wool-white-dark.png deleted file mode 100644 index 48621d4..0000000 Binary files a/assets/mojang/img/bg-wool-white-dark.png and /dev/null differ diff --git a/assets/mojang/img/bg-wool-white.png b/assets/mojang/img/bg-wool-white.png deleted file mode 100644 index e830aab..0000000 Binary files a/assets/mojang/img/bg-wool-white.png and /dev/null differ diff --git a/assets/mojang/img/border-dungeons-25.png b/assets/mojang/img/border-dungeons-25.png deleted file mode 100644 index 26692a4..0000000 Binary files a/assets/mojang/img/border-dungeons-25.png and /dev/null differ diff --git a/assets/mojang/img/grass.png b/assets/mojang/img/grass.png deleted file mode 100644 index 247a968..0000000 Binary files a/assets/mojang/img/grass.png and /dev/null differ diff --git a/assets/mojang/svg/icons/color-cart.svg b/assets/mojang/svg/icons/color-cart.svg deleted file mode 100644 index 9d71cb5..0000000 --- a/assets/mojang/svg/icons/color-cart.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-chest--animated.svg b/assets/mojang/svg/icons/color-chest--animated.svg deleted file mode 100644 index 32285d9..0000000 --- a/assets/mojang/svg/icons/color-chest--animated.svg +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/color-chest.svg b/assets/mojang/svg/icons/color-chest.svg deleted file mode 100644 index cdeca1c..0000000 --- a/assets/mojang/svg/icons/color-chest.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-close.svg b/assets/mojang/svg/icons/color-close.svg deleted file mode 100644 index 21bad4f..0000000 --- a/assets/mojang/svg/icons/color-close.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-dungeons-launcher.svg b/assets/mojang/svg/icons/color-dungeons-launcher.svg deleted file mode 100644 index 9eb4aba..0000000 --- a/assets/mojang/svg/icons/color-dungeons-launcher.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/color-facebook.svg b/assets/mojang/svg/icons/color-facebook.svg deleted file mode 100644 index 7bfe88d..0000000 --- a/assets/mojang/svg/icons/color-facebook.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-grass-block.svg b/assets/mojang/svg/icons/color-grass-block.svg deleted file mode 100644 index 986c509..0000000 --- a/assets/mojang/svg/icons/color-grass-block.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-instagram.svg b/assets/mojang/svg/icons/color-instagram.svg deleted file mode 100644 index 6ccb214..0000000 --- a/assets/mojang/svg/icons/color-instagram.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-menu.svg b/assets/mojang/svg/icons/color-menu.svg deleted file mode 100644 index 9e25e52..0000000 --- a/assets/mojang/svg/icons/color-menu.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-reddit.svg b/assets/mojang/svg/icons/color-reddit.svg deleted file mode 100644 index 6440e43..0000000 --- a/assets/mojang/svg/icons/color-reddit.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-steve-alex.svg b/assets/mojang/svg/icons/color-steve-alex.svg deleted file mode 100644 index 1db0972..0000000 --- a/assets/mojang/svg/icons/color-steve-alex.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-ten-players.svg b/assets/mojang/svg/icons/color-ten-players.svg deleted file mode 100644 index 1e2cbfc..0000000 --- a/assets/mojang/svg/icons/color-ten-players.svg +++ /dev/null @@ -1,268 +0,0 @@ - - color-ten-players - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/color-twitter.svg b/assets/mojang/svg/icons/color-twitter.svg deleted file mode 100644 index 5d6def1..0000000 --- a/assets/mojang/svg/icons/color-twitter.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/color-two-players.svg b/assets/mojang/svg/icons/color-two-players.svg deleted file mode 100644 index a8e76fd..0000000 --- a/assets/mojang/svg/icons/color-two-players.svg +++ /dev/null @@ -1,56 +0,0 @@ - - color-two-players - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/color-youtube.svg b/assets/mojang/svg/icons/color-youtube.svg deleted file mode 100644 index 7769d4e..0000000 --- a/assets/mojang/svg/icons/color-youtube.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-book.svg b/assets/mojang/svg/icons/line-book.svg deleted file mode 100644 index cb1815b..0000000 --- a/assets/mojang/svg/icons/line-book.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-box.svg b/assets/mojang/svg/icons/line-box.svg deleted file mode 100644 index 2429a75..0000000 --- a/assets/mojang/svg/icons/line-box.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-calendar.svg b/assets/mojang/svg/icons/line-calendar.svg deleted file mode 100644 index eda3bb7..0000000 --- a/assets/mojang/svg/icons/line-calendar.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/assets/mojang/svg/icons/line-collapse.svg b/assets/mojang/svg/icons/line-collapse.svg deleted file mode 100644 index 620c18e..0000000 --- a/assets/mojang/svg/icons/line-collapse.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/mojang/svg/icons/line-console.svg b/assets/mojang/svg/icons/line-console.svg deleted file mode 100644 index 34f21bf..0000000 --- a/assets/mojang/svg/icons/line-console.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-creeper.svg b/assets/mojang/svg/icons/line-creeper.svg deleted file mode 100644 index 05b1e08..0000000 --- a/assets/mojang/svg/icons/line-creeper.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-device.svg b/assets/mojang/svg/icons/line-device.svg deleted file mode 100644 index 52b77d8..0000000 --- a/assets/mojang/svg/icons/line-device.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-expand.svg b/assets/mojang/svg/icons/line-expand.svg deleted file mode 100644 index 4ffa50d..0000000 --- a/assets/mojang/svg/icons/line-expand.svg +++ /dev/null @@ -1,4 +0,0 @@ - - line-expand - - diff --git a/assets/mojang/svg/icons/line-globe.svg b/assets/mojang/svg/icons/line-globe.svg deleted file mode 100644 index 7b7b360..0000000 --- a/assets/mojang/svg/icons/line-globe.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/mojang/svg/icons/line-heart.svg b/assets/mojang/svg/icons/line-heart.svg deleted file mode 100644 index e1749f1..0000000 --- a/assets/mojang/svg/icons/line-heart.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/assets/mojang/svg/icons/line-hide.svg b/assets/mojang/svg/icons/line-hide.svg deleted file mode 100644 index b8f5524..0000000 --- a/assets/mojang/svg/icons/line-hide.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/mojang/svg/icons/line-pc.svg b/assets/mojang/svg/icons/line-pc.svg deleted file mode 100644 index 58b5f81..0000000 --- a/assets/mojang/svg/icons/line-pc.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-pdf-file.svg b/assets/mojang/svg/icons/line-pdf-file.svg deleted file mode 100644 index 7bf47b1..0000000 --- a/assets/mojang/svg/icons/line-pdf-file.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/assets/mojang/svg/icons/line-shirt.svg b/assets/mojang/svg/icons/line-shirt.svg deleted file mode 100644 index d7849c6..0000000 --- a/assets/mojang/svg/icons/line-shirt.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-show.svg b/assets/mojang/svg/icons/line-show.svg deleted file mode 100644 index 3e51208..0000000 --- a/assets/mojang/svg/icons/line-show.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-vector-export.svg b/assets/mojang/svg/icons/line-vector-export.svg deleted file mode 100644 index 4424318..0000000 --- a/assets/mojang/svg/icons/line-vector-export.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/mojang/svg/icons/line-vector-help.svg b/assets/mojang/svg/icons/line-vector-help.svg deleted file mode 100644 index 3345a84..0000000 --- a/assets/mojang/svg/icons/line-vector-help.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/mojang/svg/icons/line-vr-enhanced.svg b/assets/mojang/svg/icons/line-vr-enhanced.svg deleted file mode 100644 index 8007a29..0000000 --- a/assets/mojang/svg/icons/line-vr-enhanced.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-vr-turning.svg b/assets/mojang/svg/icons/line-vr-turning.svg deleted file mode 100644 index 13499db..0000000 --- a/assets/mojang/svg/icons/line-vr-turning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-vr-virtual-living-room.svg b/assets/mojang/svg/icons/line-vr-virtual-living-room.svg deleted file mode 100644 index c652524..0000000 --- a/assets/mojang/svg/icons/line-vr-virtual-living-room.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/mojang/svg/icons/line-wallet.svg b/assets/mojang/svg/icons/line-wallet.svg deleted file mode 100644 index 7ca344d..0000000 --- a/assets/mojang/svg/icons/line-wallet.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-arrow-down.svg b/assets/mojang/svg/icons/pixel-arrow-down.svg deleted file mode 100644 index 3bc2919..0000000 --- a/assets/mojang/svg/icons/pixel-arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-arrow-left.svg b/assets/mojang/svg/icons/pixel-arrow-left.svg deleted file mode 100644 index c05bb36..0000000 --- a/assets/mojang/svg/icons/pixel-arrow-left.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-arrow-right.svg b/assets/mojang/svg/icons/pixel-arrow-right.svg deleted file mode 100644 index 5e529f6..0000000 --- a/assets/mojang/svg/icons/pixel-arrow-right.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-arrow-up.svg b/assets/mojang/svg/icons/pixel-arrow-up.svg deleted file mode 100644 index 5484365..0000000 --- a/assets/mojang/svg/icons/pixel-arrow-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-begin-quote.svg b/assets/mojang/svg/icons/pixel-begin-quote.svg deleted file mode 100644 index aed637f..0000000 --- a/assets/mojang/svg/icons/pixel-begin-quote.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/mojang/svg/icons/pixel-caret.svg b/assets/mojang/svg/icons/pixel-caret.svg deleted file mode 100644 index bbe043a..0000000 --- a/assets/mojang/svg/icons/pixel-caret.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/pixel-check.svg b/assets/mojang/svg/icons/pixel-check.svg deleted file mode 100644 index be9e4e8..0000000 --- a/assets/mojang/svg/icons/pixel-check.svg +++ /dev/null @@ -1,7 +0,0 @@ - - Check - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-close.svg b/assets/mojang/svg/icons/pixel-close.svg deleted file mode 100644 index c200858..0000000 --- a/assets/mojang/svg/icons/pixel-close.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/pixel-end-quote.svg b/assets/mojang/svg/icons/pixel-end-quote.svg deleted file mode 100644 index d6e8a9d..0000000 --- a/assets/mojang/svg/icons/pixel-end-quote.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/mojang/svg/icons/pixel-facebook.svg b/assets/mojang/svg/icons/pixel-facebook.svg deleted file mode 100644 index c749be5..0000000 --- a/assets/mojang/svg/icons/pixel-facebook.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-instagram.svg b/assets/mojang/svg/icons/pixel-instagram.svg deleted file mode 100644 index 843ae5a..0000000 --- a/assets/mojang/svg/icons/pixel-instagram.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-pause.svg b/assets/mojang/svg/icons/pixel-pause.svg deleted file mode 100644 index 86cddd3..0000000 --- a/assets/mojang/svg/icons/pixel-pause.svg +++ /dev/null @@ -1,7 +0,0 @@ - - pixel-pause - - - - - diff --git a/assets/mojang/svg/icons/pixel-play.svg b/assets/mojang/svg/icons/pixel-play.svg deleted file mode 100644 index bac7c5b..0000000 --- a/assets/mojang/svg/icons/pixel-play.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-reddit.svg b/assets/mojang/svg/icons/pixel-reddit.svg deleted file mode 100644 index 94c09a4..0000000 --- a/assets/mojang/svg/icons/pixel-reddit.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-twitter.svg b/assets/mojang/svg/icons/pixel-twitter.svg deleted file mode 100644 index 170bec6..0000000 --- a/assets/mojang/svg/icons/pixel-twitter.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/icons/pixel-youtube.svg b/assets/mojang/svg/icons/pixel-youtube.svg deleted file mode 100644 index 548fab4..0000000 --- a/assets/mojang/svg/icons/pixel-youtube.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/mojang/svg/icons/what-block.svg b/assets/mojang/svg/icons/what-block.svg deleted file mode 100644 index 9bc368a..0000000 --- a/assets/mojang/svg/icons/what-block.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/mojang/svg/icons/what-computer.svg b/assets/mojang/svg/icons/what-computer.svg deleted file mode 100644 index 559a3fb..0000000 --- a/assets/mojang/svg/icons/what-computer.svg +++ /dev/null @@ -1,115 +0,0 @@ - - what-computer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/icons/what-devices.svg b/assets/mojang/svg/icons/what-devices.svg deleted file mode 100644 index cfb932a..0000000 --- a/assets/mojang/svg/icons/what-devices.svg +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/cero-a.svg b/assets/mojang/svg/logos/cero-a.svg deleted file mode 100644 index 440cf70..0000000 --- a/assets/mojang/svg/logos/cero-a.svg +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/esrb.svg b/assets/mojang/svg/logos/esrb.svg deleted file mode 100644 index 8521b99..0000000 --- a/assets/mojang/svg/logos/esrb.svg +++ /dev/null @@ -1,34 +0,0 @@ - - esrb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/microsoft-studios.svg b/assets/mojang/svg/logos/microsoft-studios.svg deleted file mode 100644 index 18dcf16..0000000 --- a/assets/mojang/svg/logos/microsoft-studios.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/assets/mojang/svg/logos/microsoft.svg b/assets/mojang/svg/logos/microsoft.svg deleted file mode 100644 index 14de13c..0000000 --- a/assets/mojang/svg/logos/microsoft.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/assets/mojang/svg/logos/minecon-earth-party-2018.svg b/assets/mojang/svg/logos/minecon-earth-party-2018.svg deleted file mode 100644 index 48543d4..0000000 --- a/assets/mojang/svg/logos/minecon-earth-party-2018.svg +++ /dev/null @@ -1,343 +0,0 @@ - - - minecon_earth_party_2018 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/minecon.svg b/assets/mojang/svg/logos/minecon.svg deleted file mode 100644 index 583b19a..0000000 --- a/assets/mojang/svg/logos/minecon.svg +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/minecraft-core-brand.svg b/assets/mojang/svg/logos/minecraft-core-brand.svg deleted file mode 100644 index fab92f9..0000000 --- a/assets/mojang/svg/logos/minecraft-core-brand.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/minecraft-dungeons.svg b/assets/mojang/svg/logos/minecraft-dungeons.svg deleted file mode 100644 index 1b2999e..0000000 --- a/assets/mojang/svg/logos/minecraft-dungeons.svg +++ /dev/null @@ -1,558 +0,0 @@ - - diff --git a/assets/mojang/svg/logos/minecraft-java-edition.svg b/assets/mojang/svg/logos/minecraft-java-edition.svg deleted file mode 100644 index b910e3a..0000000 --- a/assets/mojang/svg/logos/minecraft-java-edition.svg +++ /dev/null @@ -1,786 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/minecraft.svg b/assets/mojang/svg/logos/minecraft.svg deleted file mode 100644 index ff9fc9b..0000000 --- a/assets/mojang/svg/logos/minecraft.svg +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/mojang-studios-horizontal.svg b/assets/mojang/svg/logos/mojang-studios-horizontal.svg deleted file mode 100644 index fcb6376..0000000 --- a/assets/mojang/svg/logos/mojang-studios-horizontal.svg +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/assets/mojang/svg/logos/mono-microsoft-studios.svg b/assets/mojang/svg/logos/mono-microsoft-studios.svg deleted file mode 100644 index da01254..0000000 --- a/assets/mojang/svg/logos/mono-microsoft-studios.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/mojang/svg/logos/mono-microsoft.svg b/assets/mojang/svg/logos/mono-microsoft.svg deleted file mode 100644 index 61f6d96..0000000 --- a/assets/mojang/svg/logos/mono-microsoft.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/assets/mojang/svg/logos/mono-mojang-studios-horizontal.svg b/assets/mojang/svg/logos/mono-mojang-studios-horizontal.svg deleted file mode 100644 index 7542964..0000000 --- a/assets/mojang/svg/logos/mono-mojang-studios-horizontal.svg +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/assets/mojang/svg/logos/mono-windows.svg b/assets/mojang/svg/logos/mono-windows.svg deleted file mode 100644 index 0737a5f..0000000 --- a/assets/mojang/svg/logos/mono-windows.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/mono-xbox-game-studios.svg b/assets/mojang/svg/logos/mono-xbox-game-studios.svg deleted file mode 100644 index f677a8e..0000000 --- a/assets/mojang/svg/logos/mono-xbox-game-studios.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/mono-xbox.svg b/assets/mojang/svg/logos/mono-xbox.svg deleted file mode 100644 index 4794193..0000000 --- a/assets/mojang/svg/logos/mono-xbox.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/pegi.svg b/assets/mojang/svg/logos/pegi.svg deleted file mode 100644 index 3e69832..0000000 --- a/assets/mojang/svg/logos/pegi.svg +++ /dev/null @@ -1,27 +0,0 @@ - - pegi - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/realms.svg b/assets/mojang/svg/logos/realms.svg deleted file mode 100644 index 0b1785f..0000000 --- a/assets/mojang/svg/logos/realms.svg +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/logos/storymode.svg b/assets/mojang/svg/logos/storymode.svg deleted file mode 100644 index b622cdc..0000000 --- a/assets/mojang/svg/logos/storymode.svg +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - storymode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/logos/xbox-game-studios.svg b/assets/mojang/svg/logos/xbox-game-studios.svg deleted file mode 100644 index 6ffdf38..0000000 --- a/assets/mojang/svg/logos/xbox-game-studios.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/mojang/svg/shapes/ribbon.svg b/assets/mojang/svg/shapes/ribbon.svg deleted file mode 100644 index 5bec102..0000000 --- a/assets/mojang/svg/shapes/ribbon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/mojang/svg/shapes/shape-model-classic.svg b/assets/mojang/svg/shapes/shape-model-classic.svg deleted file mode 100644 index 420430c..0000000 --- a/assets/mojang/svg/shapes/shape-model-classic.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/shapes/shape-model-slim.svg b/assets/mojang/svg/shapes/shape-model-slim.svg deleted file mode 100644 index e82af94..0000000 --- a/assets/mojang/svg/shapes/shape-model-slim.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/shapes/square-like-black.svg b/assets/mojang/svg/shapes/square-like-black.svg deleted file mode 100644 index 52ffcb2..0000000 --- a/assets/mojang/svg/shapes/square-like-black.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/assets/mojang/svg/shapes/square-like.svg b/assets/mojang/svg/shapes/square-like.svg deleted file mode 100644 index b295719..0000000 --- a/assets/mojang/svg/shapes/square-like.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 1c161c3..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index 698569a..0000000 --- a/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -layout: default -title: Home ---- - - -
-
- -
-
-
Not just a
-
-
-
-
- Minecraft Server - Roblox Studio - Community - Minecraft Server -
-
-
-
-
-
- - -
- - - - Launch from Minecraft Bedrock - -
-
-
- - -
- -
-
How to join
- -
- -
-
-
-
- Minecraft Grass Block -
-
Minecraft Server
-
Java & Bedrock Edition
-
-
-
-
Server Address
-
- Copy the server IP and add it
to your Minecraft server list -
- -
-
-
-
- - -
-
-
-
- Bedrock Launcher -
-
Quick Launch
-
Bedrock Edition
-
-
-
-
Launch Bedrock
-
- Click to open Minecraft Bedrock
and join our server instantly -
- - Launch Minecraft - -
-
-
-
- - -
-
-
-
- Bedrock Realms -
-
Bedrock Realms
-
Coming Soon
-
-
-
-
Not Ready Yet
-
- Our Bedrock Realms join format
is currently under development -
- -
-
-
-
-
-
- - - diff --git a/manifest.json b/manifest.json deleted file mode 100644 index cb0947c..0000000 --- a/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "PWindows", - "short_name": "PWindows", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} \ No newline at end of file diff --git a/pages/404.html b/pages/404.html new file mode 100644 index 0000000..742e6ad --- /dev/null +++ b/pages/404.html @@ -0,0 +1,22 @@ +--- +layout: default +title: 404 +id: not-found +description: The requested PWindows page could not be found; return home or browse the latest news. +permalink: /404.html +sitemap: false +robots: noindex,follow +--- + +
+
+

404

+

{{ site.data.translations[site.active_lang].not-found.text }}

+
+ +
diff --git a/pages/about.html b/pages/about.html new file mode 100644 index 0000000..983f3aa --- /dev/null +++ b/pages/about.html @@ -0,0 +1,30 @@ +--- +layout: default +permalink: /about +id: about +title: About PWindows +description: Learn about the PWindows Minecraft server, community, and game studio project. +--- + +
+
+

{{ site.data.translations[site.active_lang].about.title }}

+

{{ site.data.translations[site.active_lang].about.intro }}

+
+
+
+
+

{{ site.data.translations[site.active_lang].about.server.title }}

+

{{ site.data.translations[site.active_lang].about.server.text }}

+ +
+ +
+
+
diff --git a/pages/articles.html b/pages/articles.html new file mode 100644 index 0000000..a1e5419 --- /dev/null +++ b/pages/articles.html @@ -0,0 +1,47 @@ +--- +layout: default +title: News +id: news +permalink: /articles +description: Read the latest news, development updates, and announcements from PWindows. +--- + + + +
+
+

{{ site.data.translations[site.active_lang].news.title }}

+
+ + +
+
+ +
+ {% for article in site.articles %} + {% include article-card.html article=article %} + {% else %} +

{{ site.data.translations[site.active_lang].news.no-news }}

+ {% endfor %} +
+
diff --git a/pages/contact.html b/pages/contact.html new file mode 100644 index 0000000..af4d295 --- /dev/null +++ b/pages/contact.html @@ -0,0 +1,31 @@ +--- +layout: default +title: Contact Us +id: contact +permalink: /contact +description: Contact the PWindows team through the support portal or community Discord. +intro: Choose the channel that best matches what you need help with. +--- + +
+
+

{{ site.data.translations[site.active_lang].contact.title }}

+

{{ site.data.translations[site.active_lang].contact.intro }}

+
+
+
+ + +
+
+
+ + diff --git a/pages/departments/index.html b/pages/departments/index.html new file mode 100644 index 0000000..6e64f52 --- /dev/null +++ b/pages/departments/index.html @@ -0,0 +1,36 @@ +--- +layout: default +title: Departments +id: departments +description: Explore the various departments at PWindows, including Unity, Roblox, Minecraft, and more. Learn about their projects, team members, and contributions to the game development community. +permalink: /departments/ +intro: Check out the teams that build PWindows's projects. +--- + +
+
+

{{ site.data.translations[site.active_lang].departments.title }}

+

{{ site.data.translations[site.active_lang].departments.intro }}

+
+
+ {% assign departments_fallback = false %} + {% if site.active_lang != site.default_lang %} + {% for department_entry in site.data.departments %} + {% unless department_entry[1][site.active_lang] %}{% assign departments_fallback = true %}{% endunless %} + {% endfor %} + {% endif %} + {% include fallback-notice.html show=departments_fallback %} +
+ {% for department_entry in site.data.departments %} + {% assign department = department_entry[1] %} + {% assign localized_department = department[site.active_lang] %} + {% assign default_department = department[site.default_lang] %} + + {% endfor %} +
+
+
diff --git a/pages/departments/minecraft.html b/pages/departments/minecraft.html new file mode 100644 index 0000000..7f8940e --- /dev/null +++ b/pages/departments/minecraft.html @@ -0,0 +1,9 @@ +--- +layout: department +title: Minecraft Department +id: mcd +permalink: /departments/minecraft +description: Learn about the Minecraft department at PWindows and the people working on its Minecraft projects. +intro: Learn what the Minecraft team contributes to PWindows. +department: minecraft +--- diff --git a/pages/departments/roblox.html b/pages/departments/roblox.html new file mode 100644 index 0000000..94d884e --- /dev/null +++ b/pages/departments/roblox.html @@ -0,0 +1,9 @@ +--- +layout: department +title: Roblox Department +id: rd +permalink: /departments/roblox +description: Learn about the Roblox department at PWindows and the people working on its Roblox projects. +intro: Learn what the Roblox team contributes to PWindows. +department: roblox +--- diff --git a/pages/departments/unity.html b/pages/departments/unity.html new file mode 100644 index 0000000..b560c72 --- /dev/null +++ b/pages/departments/unity.html @@ -0,0 +1,9 @@ +--- +layout: department +title: Unity Department +id: ud +permalink: /departments/unity +description: Learn about the Unity department at PWindows and the people working on its Unity projects. +intro: Learn what the Unity team contributes to PWindows. +department: unity +--- diff --git a/pages/feedback.html b/pages/feedback.html new file mode 100644 index 0000000..0041764 --- /dev/null +++ b/pages/feedback.html @@ -0,0 +1,22 @@ +--- +layout: default +title: Feedback +id: feedback +permalink: /feedback +description: Share feedback and suggestions with the PWindows team. +intro: Tell us what is working, what is unclear, or what you would like us to improve. +--- + +
+
+

{{ site.data.translations[site.active_lang].feedback.title }}

+

{{ site.data.translations[site.active_lang].feedback.intro }}

+
+
+
+

{{ site.data.translations[site.active_lang].feedback.send }}

+

{{ site.data.translations[site.active_lang].feedback.send-text }}

+ {{ site.data.translations[site.active_lang].feedback.support }} +
+
+
diff --git a/pages/games/index.html b/pages/games/index.html new file mode 100644 index 0000000..87ff5fb --- /dev/null +++ b/pages/games/index.html @@ -0,0 +1,79 @@ +--- +layout: default +title: Games +id: games +permalink: /games +description: Explore games being developed by PWindows. +intro: Follow the games currently being developed by PWindows. +--- + +
+
+

{{ site.data.translations[site.active_lang].games.title }}

+

{{ site.data.translations[site.active_lang].games.intro }}

+
+
+ {% assign games_fallback = false %} + {% if site.active_lang != site.default_lang %} + {% for game in site.data.games %} + {% unless game[site.active_lang] %}{% assign games_fallback = true %}{% endunless %} + {% endfor %} + {% endif %} + {% include fallback-notice.html show=games_fallback %} +
+ {% for game in site.data.games %} + {% assign localized_game = game[site.active_lang] %} + {% assign default_game = game[site.default_lang] %} + {% assign game_title = localized_game.title | default: default_game.title %} + {% assign game_summary = localized_game.summary | default: default_game.summary %} + {% assign mod = forloop.index | modulo: 2 %} +
+
+ {{ game_title | escape }} + + {% if game.effect and game.debris %} + + {% endif %} +
+
+ +

{{ game_title }}

+ {% assign status_key = game.status | slugify %} +

+ {{ site.data.translations[site.active_lang].game-status[status_key] | default: game.status }} +

+

+ {{ game.engine }} +

+

+ {{ game.language }} +

+

{{ game_summary }}

+
+ {{ site.data.translations[site.active_lang].games.view-game }} +
+
+ {% endfor %} +
+ +
diff --git a/pages/games/obby-of-dominance.html b/pages/games/obby-of-dominance.html new file mode 100644 index 0000000..933c55f --- /dev/null +++ b/pages/games/obby-of-dominance.html @@ -0,0 +1,21 @@ +--- +layout: page +title: Obby of Dominance +id: ood +permalink: /games/obby-of-dominance +description: Development information for Obby of Dominance by PWindows. +game: obby-of-dominance +--- + +{% assign game = site.data.games | where: "slug", page.game | first %} +{% assign localized_game = game[site.active_lang] %} +{% assign game_summary = localized_game.summary | default: game[site.default_lang].summary %} +{% assign status_key = game.status | slugify %} +{% assign game_fallback = false %} +{% unless localized_game %}{% if site.active_lang != site.default_lang %}{% assign game_fallback = true %}{% endif %}{% endunless %} +{% include fallback-notice.html show=game_fallback %} +
+ {{ site.data.translations[site.active_lang].game-status[status_key] | default: game.status }} + {{ game_summary }}

+ {{ site.data.translations[site.active_lang].games.back-button }} +
diff --git a/pages/games/sacred-cubes.html b/pages/games/sacred-cubes.html new file mode 100644 index 0000000..0b680b5 --- /dev/null +++ b/pages/games/sacred-cubes.html @@ -0,0 +1,19 @@ +--- +layout: page +title: Sacred Cubes +id: sacred-cubes-compat +permalink: /games/sacred-cubes +description: Sacred Cubes is now Sacred Remains; continue to the current PWindows game page. +robots: noindex,follow +sitemap: false +--- + +{% assign localized_compatibility = site.data.site_meta[site.active_lang].compatibility %} +{% assign compatibility = localized_compatibility | default: site.data.site_meta[site.default_lang].compatibility %} +{% assign compatibility_fallback = false %} +{% unless localized_compatibility %}{% if site.active_lang != site.default_lang %}{% assign compatibility_fallback = true %}{% endif %}{% endunless %} +{% include fallback-notice.html show=compatibility_fallback %} +
+

{{ compatibility.sacred_cubes }}

+ {{ compatibility.continue }} +
diff --git a/pages/games/sacred-remains.html b/pages/games/sacred-remains.html new file mode 100644 index 0000000..857f5eb --- /dev/null +++ b/pages/games/sacred-remains.html @@ -0,0 +1,21 @@ +--- +layout: page +title: Sacred Remains +id: sr +permalink: /games/sacred-remains +description: Development information for Sacred Remains by PWindows. +game: sacred-remains +--- + +{% assign game = site.data.games | where: "slug", page.game | first %} +{% assign localized_game = game[site.active_lang] %} +{% assign game_summary = localized_game.summary | default: game[site.default_lang].summary %} +{% assign status_key = game.status | slugify %} +{% assign game_fallback = false %} +{% unless localized_game %}{% if site.active_lang != site.default_lang %}{% assign game_fallback = true %}{% endif %}{% endunless %} +{% include fallback-notice.html show=game_fallback %} +
+ {{ site.data.translations[site.active_lang].game-status[status_key] | default: game.status }} + {{ game_summary }}

+ {{ site.data.translations[site.active_lang].games.back-button }} +
diff --git a/pages/index.html b/pages/index.html new file mode 100644 index 0000000..1edcf8f --- /dev/null +++ b/pages/index.html @@ -0,0 +1,301 @@ +--- +layout: default +title: Home +id: home +description: Discover PWindows, a Minecraft server, game studio, and community project. +permalink: / +--- + +{% assign server_address = site.data.site.server.address[site.active_lang] | default: site.data.site.server.address[site.default_lang] %} + +
+
+
+

+ + {{ site.data.site_meta[site.active_lang].home_heading | default: site.data.site_meta[site.default_lang].home_heading }} + + +

+
+ + +
+ + + +
+
+
+ + + +
+
+

{{ site.data.translations[site.active_lang].index.howtojoin.title }}

+
{{ site.data.translations[site.active_lang].index.howtojoin.disclaimer }}
+
+ +
+
+
+
+
+ +
+
{{ site.data.translations[site.active_lang].index.howtojoin.server-address.label }}
+
{{ site.data.translations[site.active_lang].index.howtojoin.server-address.text }}
+ +
+
+
+
{{ site.data.translations[site.active_lang].index.howtojoin.server-address.label }}
+
+ {{ site.data.translations[site.active_lang].index.howtojoin.server-address.text-back }} +
+ + +
+
+
+
+ + +
+
+
+
+ +
+
{{ site.data.translations[site.active_lang].index.howtojoin.quick-launch.label }}
+
{{ site.data.translations[site.active_lang].index.howtojoin.quick-launch.text }}
+ +
+
+
+
{{ site.data.translations[site.active_lang].index.howtojoin.quick-launch.label-back }}
+
+ {{ site.data.translations[site.active_lang].index.howtojoin.quick-launch.text-back }} +
+ + +
+
+
+
+ + +
+
+
+
+ +
+
{{ site.data.translations[site.active_lang].index.howtojoin.realms.label }}
+
{{ site.data.translations[site.active_lang].index.howtojoin.realms.text }}
+ +
+
+
+
{{ site.data.translations[site.active_lang].index.howtojoin.realms.label-back }}
+
+ {{ site.data.translations[site.active_lang].index.howtojoin.realms.text-back }} +
+ + +
+
+
+
+
+
+ + + +
+
+
+ Snow +
+
+

{{ site.data.translations[site.active_lang].index.latest-content.title }}

+

+ {{ site.data.translations[site.active_lang].index.latest-content.text }} +

+ + {{ site.data.translations[site.active_lang].index.latest-content.button }} + +
+
+
+ + + +
+
+

{{ site.data.translations[site.active_lang].index.projects.title }}

+ +
+
+

{{ site.data.translations[site.active_lang].index.projects.server.title }}

+
+

+ {{ site.data.translations[site.active_lang].index.projects.server.text }} +

+
+
+

{{ site.data.translations[site.active_lang].index.projects.game-studio.title }}

+
+

+ {{ site.data.translations[site.active_lang].index.projects.game-studio.text-1 }} + + {{site.data.translations[site.active_lang].index.projects.game-studio.link-sc}} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.text-2 }} + + {{site.data.translations[site.active_lang].index.projects.game-studio.link-ood}} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.text-3 }} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.link-r }} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.text-4 }} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.link-u }} + + {{ site.data.translations[site.active_lang].index.projects.game-studio.text-5 }} +

+ {{ site.data.translations[site.active_lang].index.projects.button }} +
+
+
+
+ + +
+
+

{{ site.data.translations[site.active_lang].index.news.title }}

+ +
+
+ {% assign sorted_articles = site.articles | sort: "date" | reverse %} + {% assign latest_articles = sorted_articles | slice: 0, 4 %} + {% for article in latest_articles %} + {% include article-card.html article=article %} + {% else %} +

{{ site.data.translations[site.active_lang].news.no-news }}

+ {% endfor %} +
+
diff --git a/robots.txt b/pages/robots.txt similarity index 69% rename from robots.txt rename to pages/robots.txt index 4fd2c39..49053de 100644 --- a/robots.txt +++ b/pages/robots.txt @@ -1,3 +1,6 @@ +--- +permalink: /robots.txt +--- User-agent: * Allow: / Sitemap: https://www.pwindows.qzz.io/sitemap.xml diff --git a/pages/rules.md b/pages/rules.md new file mode 100644 index 0000000..2ab33cd --- /dev/null +++ b/pages/rules.md @@ -0,0 +1,26 @@ +--- +layout: rules +permalink: /rules +title: Rules +id: rules +description: Read the rules for the PWindows Minecraft server and community. +last_updated: 2026-07-19T00:00:00+08:00 +--- + +## 1. Be Respectful +Treat everyone with respect. Harassment, bullying, discrimination, threats, hate speech, slurs, and racism are not allowed. This includes every form of the N-word. Do not doxx, swat, or organize witch hunts against anyone. Report problems to staff through the [support portal]({{ site.data.site.links.support }}). + +## 2. No Cheating +Do not use hacks, exploits, X-ray resource packs or clients, freecam, player outlines, Baritone or its forks, game-aware macros, or other automation that reads or reacts to the game. Simple autoclickers that only repeat a fixed input without reading or reacting to game state are allowed; this is the only automation exception. Any other tool or behavior that gives a player or group an unfair advantage is prohibited. + +## 3. No Spam & Advertising +Excessive messaging, unsolicited advertising, and chat spam are not allowed. Do not repeatedly send messages with the same meaning. + +## 4. Listen to Staff +Follow staff directions and treat moderation decisions respectfully. They have the final say. If you believe a decision was mistaken, submit an appeal through the [support portal]({{ site.data.site.links.support }}). Do not harass staff or publish private moderation discussions in an attempt to get them to look bad. + +## 5. Reporting Rule-breakers +Please report them through the [support portal]({{ site.data.site.links.support }}) or the Discord server. Do not publicly post these things until we have confirmed the offense. Fabricating evidence is considered a violation, and you will face the appropriate consequences for doing so. + +## 6. Have fun! +You are in this server because you want to have fun and spend your time building, not breaking. Don't break the rules, and you'll have lots of fun playing here. Good luck, and have fun! diff --git a/pages/sitemap.html b/pages/sitemap.html new file mode 100644 index 0000000..3c00cbc --- /dev/null +++ b/pages/sitemap.html @@ -0,0 +1,88 @@ +--- +layout: page +title: Site Map +id: sitemap +permalink: /sitemap +description: Browse every public page, game, department, and news article on the PWindows website. +intro: Find your way around PWindows with this automatically updated list of public content. +page_class: sitemap-page +english_fallback: true +--- + +{% assign articles = site.articles | sort: "date" | reverse %} + +
+
+

Pages

+ +
+ +
+

Games

+ +
+ +
+

Departments

+ +
+ +
+

News

+ +
+
diff --git a/pages/staff.html b/pages/staff.html new file mode 100644 index 0000000..9c48df2 --- /dev/null +++ b/pages/staff.html @@ -0,0 +1,48 @@ +--- +layout: default +title: Staff +permalink: /staff +id: staff +description: Meet the people working on PWindows projects and its community. +intro: Meet the people currently helping build and manage PWindows. +--- + +
+
+

{{ site.data.translations[site.active_lang].staff-page.title }}

+

{{ site.data.translations[site.active_lang].staff-page.intro }}

+
+
+ {% assign staff_fallback = false %} + {% if site.active_lang != site.default_lang and site.active_lang != 'zh-cn' and site.active_lang != 'ja-jp' %} + {% assign staff_fallback = true %} + {% endif %} + {% include fallback-notice.html show=staff_fallback %} +
+ {% assign owner = site.data.staff | where: "department", "Owner" | first %} + {% if owner %} +

{{ site.data.translations[site.active_lang].staff-page.owner }}

+
+ {% include staff-card.html person=owner %} +
+ {% endif %} + + {% for department_entry in site.data.departments %} + {% assign department = department_entry[1] %} + {% assign localized_department = department[site.active_lang] %} + {% assign department_name = localized_department.name | default: department[site.default_lang].name %} + {% assign department_members = site.data.staff | where: "department", department.staff_department | where: "aboutpage", true %} +

{{ department_name }}

+ {% if department_members.size > 0 %} +
+ {% for person in department_members %} + {% include staff-card.html person=person %} + {% endfor %} +
+ {% else %} +

{{ site.data.translations[site.active_lang].staff-page.no-members }}

+ {% endif %} + {% endfor %} +
+
+
diff --git a/pages/staff/isaacaxolotl.html b/pages/staff/isaacaxolotl.html new file mode 100644 index 0000000..fb23584 --- /dev/null +++ b/pages/staff/isaacaxolotl.html @@ -0,0 +1,9 @@ +--- +layout: staff +title: Isaac +id: staff-isaacaxolotl +permalink: /staff/isaacaxolotl +description: Meet Isaac, the co-director of Sacred Remains and a contributor to the PWindows website. +intro: Co-Director of Sacred Remains +staff: isaacaxolotl +--- diff --git a/pages/staff/petermazep.html b/pages/staff/petermazep.html new file mode 100644 index 0000000..e3ebb29 --- /dev/null +++ b/pages/staff/petermazep.html @@ -0,0 +1,9 @@ +--- +layout: staff +title: PeterMaZep +id: staff-petermazep +permalink: /staff/petermazep +description: Meet PeterMaZep, the owner of PWindows, responsible for coding and managing everything. +intro: Owner of PWindows +staff: petermazep +--- diff --git a/sitemap.xml b/sitemap.xml index d9b145a..5570270 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,30 +1,25 @@ --- -layout: none +layout: null +permalink: /sitemap.xml +sitemap: false --- - + + {% assign sitemap_nodes = site.pages | concat: site.articles %} + {% for node in sitemap_nodes %} + {% if node.layout and node.sitemap != false %} + {% for lang in site.languages %} - https://www.pwindows.qzz.io/ - {{ site.time | date_to_xmlschema }} - monthly - 1.0 + {% if lang == site.default_lang %}{{ node.url | absolute_url }}{% else %}{{ node.url | prepend: lang | prepend: '/' | absolute_url }}{% endif %} + {% if node.last_updated or node.date %} + {{ node.last_updated | default: node.date | date_to_xmlschema }} + {% endif %} + {% for alternate_lang in site.languages %} + + {% endfor %} + - {% for page in site.pages %} - {% if page.url != "/" and page.url != "/sitemap.xml" %} - {% unless page.url contains ".css" or page.url contains ".js" or page.url contains ".png" or page.url contains ".jpg" or page.url contains "scm" %} - - {{ site.url }}{{ page.url }} - {{ page.date | default: site.time | date_to_xmlschema }} - - {% endunless %} + {% endfor %} {% endif %} {% endfor %} - {% for article in site.articles %} - - {{ site.url }}{{ article.url }} - {{ article.date | date_to_xmlschema }} - never - 0.7 - - {% endfor %} diff --git a/SearchConsoleMonitor.html b/tools/search-console-monitor.html similarity index 78% rename from SearchConsoleMonitor.html rename to tools/search-console-monitor.html index 37d1b94..90f8f55 100644 --- a/SearchConsoleMonitor.html +++ b/tools/search-console-monitor.html @@ -1,19 +1,19 @@ --- -layout: default -permalink: /scm +layout: none --- - + + + + Indexed Pages Monitor - -

Indexed Pages Count

- +

 
   
 
 
diff --git a/tools/verify-site.rb b/tools/verify-site.rb
new file mode 100644
index 0000000..dcb018b
--- /dev/null
+++ b/tools/verify-site.rb
@@ -0,0 +1,614 @@
+# frozen_string_literal: true
+
+require "date"
+require "json"
+require "nokogiri"
+require "set"
+require "uri"
+require "yaml"
+
+ROOT = File.expand_path("..", __dir__)
+DESTINATION = File.expand_path(ARGV.fetch(0, "_site"), ROOT)
+SITE_CONFIG = YAML.safe_load_file(File.join(ROOT, "_config.yml"))
+SITE_URL = SITE_CONFIG.fetch("url", "").to_s.delete_suffix("/")
+LANGUAGES = SITE_CONFIG.fetch("languages")
+DEFAULT_LANG = SITE_CONFIG.fetch("default_lang")
+SITE_META = YAML.safe_load_file(File.join(ROOT, "_data", "site_meta.yml"))
+
+PUBLIC_ROUTES = %w[
+  /
+  /404.html
+  /about
+  /articles
+  /contact
+  /departments/
+  /departments/minecraft
+  /departments/roblox
+  /departments/unity
+  /feedback
+  /games
+  /games/obby-of-dominance
+  /games/sacred-cubes
+  /games/sacred-remains
+  /rules
+  /sitemap
+  /staff
+  /staff/petermazep
+  /staff/isaacaxolotl
+].freeze
+
+NOINDEX_ROUTES = Set.new(%w[/404.html /games/sacred-cubes]).freeze
+
+ROUTE_IDS = {
+  "/" => "home",
+  "/404.html" => "not-found",
+  "/about" => "about",
+  "/articles" => "news",
+  "/contact" => "contact",
+  "/departments/" => "departments",
+  "/departments/minecraft" => "mcd",
+  "/departments/roblox" => "rd",
+  "/departments/unity" => "ud",
+  "/feedback" => "feedback",
+  "/games" => "games",
+  "/games/obby-of-dominance" => "ood",
+  "/games/sacred-cubes" => "sacred-cubes-compat",
+  "/games/sacred-remains" => "sr",
+  "/rules" => "rules",
+  "/sitemap" => "sitemap",
+  "/staff" => "staff",
+  "/staff/petermazep" => "staff-petermazep",
+  "/staff/isaacaxolotl" => "staff-isaacaxolotl"
+}.freeze
+
+PRODUCTION_FONT_FILES = Set.new(%w[
+  LICENSE_OFL.txt
+  Minecraft-Seven_v2.woff
+  Minecraft-Tenv2.woff2
+  NotoSans-Regular.woff2
+  Minecraft-TwentyOne.ttf
+]).freeze
+
+PRODUCTION_ALIBABA_FONTS = Set.new(%w[
+  AlibabaPuHuiTi-3-115-Black/AlibabaPuHuiTi-3-115-Black.woff2
+  AlibabaPuHuiTi-3-55-Regular/AlibabaPuHuiTi-3-55-Regular.woff2
+]).freeze
+
+RTL_LANGUAGES = Set.new(%w[ar-sa he-il]).freeze
+FALLBACK_ROUTES = Set.new(%w[
+  /articles
+  /departments/
+  /departments/minecraft
+  /departments/roblox
+  /departments/unity
+  /games
+  /games/obby-of-dominance
+  /games/sacred-cubes
+  /games/sacred-remains
+  /rules
+  /sitemap
+  /staff
+  /staff/isaacaxolotl
+  /staff/petermazep
+]).freeze
+
+def generated_page_path(path)
+  route = path.to_s.delete_prefix("/")
+  relative_file = if route.empty?
+                    "index.html"
+                  elsif route.end_with?("/")
+                    File.join(route, "index.html")
+                  elsif File.extname(route).empty?
+                    "#{route}.html"
+                  else
+                    route
+                  end
+
+  File.join(DESTINATION, relative_file)
+end
+
+def localized_route(route, lang)
+  return route if lang == DEFAULT_LANG
+
+  "/#{lang}#{route == "/" ? "/" : route}"
+end
+
+def front_matter(path)
+  match = File.read(path).match(/\A---\s*\n(.*?)\n---\s*\n/m)
+  return {} unless match
+
+  YAML.safe_load(
+    match[1],
+    permitted_classes: [Date, Time],
+    aliases: true
+  ) || {}
+rescue Psych::SyntaxError => error
+  { "__error__" => error.message }
+end
+
+def generated_asset_path(value)
+  return unless value.is_a?(String) && value.start_with?("/")
+
+  File.join(DESTINATION, value.delete_prefix("/"))
+end
+
+def positive_number?(value)
+  Float(value).positive?
+rescue ArgumentError, TypeError
+  false
+end
+
+def verify_generated_page(route, lang, errors)
+  file = generated_page_path(route)
+  unless File.file?(file)
+    errors << "Missing generated route #{route} (#{file.delete_prefix("#{DESTINATION}/")})"
+    return
+  end
+
+  document = Nokogiri::HTML5(File.read(file))
+  html = document.at_css("html")
+  errors << "#{route} has an unexpected document language" unless html&.[]("lang") == lang
+  expected_direction = RTL_LANGUAGES.include?(lang) ? "rtl" : "ltr"
+  errors << "#{route} has an unexpected text direction" unless html&.[]("dir") == expected_direction
+  main = document.at_css("main")
+  errors << "#{route} has an empty 
" if main.nil? || main.text.strip.empty? + errors << "#{route} must contain exactly one

" unless document.css("main h1").length == 1 + errors << "#{route} is missing a document title" if document.at_css("title")&.text.to_s.strip.empty? + if document.at_css('meta[name="description"]')&.[]("content").to_s.strip.empty? + errors << "#{route} is missing a meta description" + end + + expected_canonical = "#{SITE_URL}#{route == "/" ? "/" : route}" + canonicals = document.css('link[rel="canonical"]') + errors << "#{route} must contain exactly one canonical link" unless canonicals.length == 1 + canonical = canonicals.first&.[]("href") + errors << "#{route} has an unexpected canonical URL: #{canonical.inspect}" unless canonical == expected_canonical + + base_route = lang == DEFAULT_LANG ? route : route.delete_prefix("/#{lang}") + base_route = "/" if base_route.empty? + expected_alternates = LANGUAGES.to_h do |alternate_lang| + alternate_route = localized_route(base_route, alternate_lang) + [alternate_lang, "#{SITE_URL}#{alternate_route == "/" ? "/" : alternate_route}"] + end + expected_alternates["x-default"] = "#{SITE_URL}#{base_route == "/" ? "/" : base_route}" + alternate_nodes = document.css('link[rel="alternate"][hreflang]') + alternate_values = alternate_nodes.group_by { |node| node["hreflang"] } + expected_alternates.each do |alternate_lang, expected_url| + nodes = alternate_values.fetch(alternate_lang, []) + errors << "#{route} must contain exactly one #{alternate_lang} alternate" unless nodes.length == 1 + if nodes.first && nodes.first["href"] != expected_url + errors << "#{route} has an unexpected #{alternate_lang} alternate: #{nodes.first['href'].inspect}" + end + end + unexpected_alternates = alternate_values.keys.compact - expected_alternates.keys + errors << "#{route} has unsupported alternates: #{unexpected_alternates.join(', ')}" unless unexpected_alternates.empty? + + route_id = ROUTE_IDS[base_route] + localized_meta = SITE_META[lang] || SITE_META[DEFAULT_LANG] + expected_description = localized_meta.dig("descriptions", route_id) if route_id + actual_description = document.at_css('meta[name="description"]')&.[]("content") + if expected_description && actual_description != expected_description + errors << "#{route} does not use its localized metadata description" + end + + document.css("img").each do |image| + unless positive_number?(image["width"]) && positive_number?(image["height"]) + errors << "#{route} image lacks positive intrinsic dimensions: #{image['src'].inspect}" + end + end + + if NOINDEX_ROUTES.include?(base_route) + robots = document.at_css('meta[name="robots"]')&.[]("content").to_s.downcase.delete(" ") + errors << "#{route} must be noindex,follow" unless robots == "noindex,follow" + end + + document.css('script[type="application/ld+json"]').each do |node| + JSON.parse(node.text) + rescue JSON::ParserError => error + errors << "#{route} has invalid JSON-LD: #{error.message}" + end + + if lang != DEFAULT_LANG && !%w[zh-cn ja-jp].include?(lang) && FALLBACK_ROUTES.include?(base_route) + unless document.at_css("[data-english-fallback]") + errors << "#{route} is missing its explicit English fallback notice" + end + end +end + +errors = [] + +errors << "default_lang must be included in languages" unless LANGUAGES.include?(DEFAULT_LANG) +errors << "The first configured language must be default_lang" unless LANGUAGES.first == DEFAULT_LANG +unless SITE_CONFIG.fetch("exclude_from_localization", []).include?("sitemap.xml") + errors << "sitemap.xml must be excluded from localization" +end +errors << "The default language must not generate a prefixed directory" if Dir.exist?(File.join(DESTINATION, DEFAULT_LANG)) +LANGUAGES.reject { |lang| lang == DEFAULT_LANG }.each do |lang| + if File.exist?(File.join(DESTINATION, lang, "sitemap.xml")) + errors << "Only the root sitemap.xml should be generated" + end +end + +default_page_file = generated_page_path("/") +if File.file?(default_page_file) + default_page = Nokogiri::HTML5(File.read(default_page_file)) + language_options = default_page.css("[data-language-select] option").group_by { |option| option["lang"] } + LANGUAGES.each do |lang| + options = language_options.fetch(lang, []) + errors << "Language #{lang} is missing from the language selector" if options.empty? + errors << "Language #{lang} appears more than once in the language selector" if options.length > 1 + errors << "Language #{lang} is missing a display label" if options.first&.text.to_s.strip.empty? + end + + unexpected_languages = language_options.keys.compact - LANGUAGES + unless unexpected_languages.empty? + errors << "Language selector contains unsupported languages: #{unexpected_languages.join(', ')}" + end +end + +begin + site_uri = URI.parse(SITE_URL) + errors << "_config.yml url must be an absolute HTTPS URL" unless site_uri.is_a?(URI::HTTPS) && site_uri.host +rescue URI::InvalidURIError + errors << "_config.yml url is invalid: #{SITE_URL.inspect}" +end + +site_data_path = File.join(ROOT, "_data", "site.yml") +if File.file?(site_data_path) + site_data = YAML.safe_load_file(site_data_path) + server_addresses = site_data.dig("server", "address") + if server_addresses.is_a?(Hash) + default_server_address = server_addresses[DEFAULT_LANG].to_s + errors << "Site data is missing server.address.#{DEFAULT_LANG}" if default_server_address.empty? + server_addresses.each do |lang, value| + errors << "Site data has an unsupported server language: #{lang}" unless LANGUAGES.include?(lang) + server_address = value.to_s + errors << "Site data has an empty server.address.#{lang}" if server_address.empty? + unless server_address.match?(/\A[a-z0-9.-]+\z/i) + errors << "Site server.address.#{lang} is invalid: #{server_address.inspect}" + end + end + else + errors << "Site data is missing server.address" + end + + %w[support shop discord youtube twitter].each do |name| + value = site_data.dig("links", name).to_s + if value.empty? + errors << "Site data is missing links.#{name}" + next + end + + begin + uri = URI.parse(value) + errors << "Site link #{name} must use HTTPS: #{value.inspect}" unless uri.is_a?(URI::HTTPS) && uri.host + rescue URI::InvalidURIError + errors << "Site link #{name} is invalid: #{value.inspect}" + end + end + unless site_data.dig("links", "support") == site_data.dig("links", "discord") + errors << "Support must use the working Discord fallback" + end +else + errors << "Missing _data/site.yml" +end + +sitemap_file = File.join(DESTINATION, "sitemap.xml") +article_locations = [] +if File.file?(sitemap_file) + sitemap = Nokogiri::XML(File.read(sitemap_file)) + locations = sitemap.xpath("//*[local-name()='loc']").filter_map do |node| + URI.parse(node.text).path + rescue URI::InvalidURIError + errors << "Sitemap contains an invalid location: #{node.text.inspect}" + nil + end + errors << "Sitemap contains duplicate locations" unless locations.length == locations.uniq.length + + expected_pages = LANGUAGES.each_with_object(Set.new) do |lang, routes| + (PUBLIC_ROUTES - NOINDEX_ROUTES.to_a).each { |route| routes << localized_route(route, lang) } + end + article_prefixes = LANGUAGES.map do |lang| + lang == DEFAULT_LANG ? "/article/" : "/#{lang}/article/" + end + article_locations = locations.select do |path| + article_prefixes.any? { |prefix| path.start_with?(prefix) } + end + unexpected = locations.reject do |path| + expected_pages.include?(path) || article_prefixes.any? { |prefix| path.start_with?(prefix) } + end + missing = expected_pages - locations.to_set + errors << "Unexpected sitemap locations: #{unexpected.join(', ')}" unless unexpected.empty? + errors << "Missing sitemap locations: #{missing.to_a.join(', ')}" unless missing.empty? +else + errors << "Missing generated sitemap.xml" +end + +LANGUAGES.each do |lang| + PUBLIC_ROUTES.each do |route| + verify_generated_page(localized_route(route, lang), lang, errors) + end +end +article_locations.each do |route| + lang = LANGUAGES.find { |candidate| route.start_with?("/#{candidate}/") } || DEFAULT_LANG + verify_generated_page(route, lang, errors) +end + +human_sitemap_file = File.join(DESTINATION, "sitemap.html") +if File.file?(human_sitemap_file) + human_sitemap = Nokogiri::HTML5(File.read(human_sitemap_file)) + human_links = human_sitemap.css("main a[href]").map { |link| URI(link["href"]).path }.to_set + default_article_locations = article_locations.select { |path| path.start_with?("/article/") } + expected_human_links = (PUBLIC_ROUTES.to_set - NOINDEX_ROUTES - ["/sitemap"]) | default_article_locations.to_set + missing_human_links = expected_human_links - human_links + unless missing_human_links.empty? + errors << "Human-readable site map is missing: #{missing_human_links.to_a.join(', ')}" + end + + footer_links = human_sitemap.css(".footer a[href]").map { |link| URI(link["href"]).path } + errors << "Footer must link to /sitemap" unless footer_links.include?("/sitemap") + errors << "Footer still exposes sitemap.xml" if footer_links.include?("/sitemap.xml") +else + errors << "Missing generated sitemap.html" +end + +forbidden_outputs = [ + File.join(DESTINATION, "AGENTS.md"), + File.join(DESTINATION, "README.md"), + File.join(DESTINATION, "tools"), + File.join(DESTINATION, "assets", "extra") +] +forbidden_outputs.each do |path| + errors << "Excluded source was published: #{path.delete_prefix("#{DESTINATION}/")}" if File.exist?(path) +end + +font_output_directory = File.join(DESTINATION, "assets", "mojang", "fonts") +published_fonts = if Dir.exist?(font_output_directory) + Dir.children(font_output_directory).to_set + else + Set.new + end +missing_fonts = PRODUCTION_FONT_FILES - published_fonts +unexpected_fonts = published_fonts - PRODUCTION_FONT_FILES +errors << "Missing production font files: #{missing_fonts.to_a.sort.join(', ')}" unless missing_fonts.empty? +errors << "Unused font files were published: #{unexpected_fonts.to_a.sort.join(', ')}" unless unexpected_fonts.empty? + +alibaba_directory = File.join(DESTINATION, "assets", "fonts") +published_alibaba_fonts = if Dir.exist?(alibaba_directory) + Dir.glob(File.join(alibaba_directory, "**", "*")).select { |path| File.file?(path) } + .map { |path| path.delete_prefix("#{alibaba_directory}/") }.to_set + else + Set.new + end +missing_alibaba_fonts = PRODUCTION_ALIBABA_FONTS - published_alibaba_fonts +unexpected_alibaba_fonts = published_alibaba_fonts - PRODUCTION_ALIBABA_FONTS +errors << "Missing production Alibaba fonts: #{missing_alibaba_fonts.to_a.sort.join(', ')}" unless missing_alibaba_fonts.empty? +errors << "Unused Alibaba fonts were published: #{unexpected_alibaba_fonts.to_a.sort.join(', ')}" unless unexpected_alibaba_fonts.empty? + +manifest_path = File.join(DESTINATION, "assets", "manifest.json") +if File.file?(manifest_path) + manifest_text = File.read(manifest_path) + errors << "Manifest contains unresolved Liquid" if manifest_text.include?("{{") || manifest_text.include?("{%") + begin + manifest = JSON.parse(manifest_text) + errors << "Manifest start_url must resolve to /" unless manifest["start_url"] == "/" + Array(manifest["icons"]).each do |icon| + icon_path = generated_asset_path(icon["src"]) + errors << "Manifest icon is missing: #{icon['src']}" unless icon_path && File.file?(icon_path) + end + rescue JSON::ParserError => error + errors << "Manifest is invalid JSON: #{error.message}" + end +else + errors << "Missing generated assets/manifest.json" +end + +text_extensions = Set.new(%w[.css .html .js .json .md .txt .xml]) +Dir.glob(File.join(DESTINATION, "**", "*")).select { |path| File.file?(path) && text_extensions.include?(File.extname(path)) }.each do |path| + content = File.read(path) + + relative = path.delete_prefix("#{DESTINATION}/") + errors << "Unresolved Liquid was published in #{relative}" if content.include?("{{") || content.include?("{%") + errors << "Conflict marker was published in #{relative}" if content.match?(/^(?:<<<<<<<|=======|>>>>>>>)/) +end + +games = YAML.safe_load_file(File.join(ROOT, "_data", "games.yml")) +game_slugs = games.map { |game| game["slug"] } +game_paths = games.map { |game| game["path"] } +errors << "Game slugs must be unique" unless game_slugs.length == game_slugs.uniq.length +errors << "Game paths must be unique" unless game_paths.length == game_paths.uniq.length + +games.each do |game| + identifier = game["slug"] || "(unknown)" + %w[slug path status image engine language].each do |field| + errors << "Game #{identifier} is missing #{field}" if game[field].to_s.strip.empty? + end + %w[title summary].each do |field| + if game.dig(DEFAULT_LANG, field).to_s.strip.empty? + errors << "Game #{identifier} is missing fallback #{DEFAULT_LANG}.#{field}" + end + end + errors << "Game #{identifier} points to a missing page" unless File.file?(generated_page_path(game["path"])) + + image = generated_asset_path(game["image"]) + errors << "Game #{identifier} image must be root-relative" unless image + errors << "Game #{identifier} references a missing image" if image && !File.file?(image) + errors << "Game #{identifier} image width must be positive" unless positive_number?(game["image_width"]) + errors << "Game #{identifier} image height must be positive" unless positive_number?(game["image_height"]) + errors << "Game #{identifier} effect must be true or false" unless [true, false].include?(game["effect"]) + + debris = game["debris"] + if debris + if debris.is_a?(Hash) + debris_image = generated_asset_path(debris["path"]) + errors << "Game #{identifier} debris.path must be root-relative" unless debris_image + if game["effect"] && debris_image && !File.file?(debris_image) + errors << "Game #{identifier} references missing debris" + end + if game["effect"] + errors << "Game #{identifier} debris width must be positive" unless positive_number?(debris["width"]) + errors << "Game #{identifier} debris height must be positive" unless positive_number?(debris["height"]) + end + if debris.key?("scale") && !positive_number?(debris["scale"]) + errors << "Game #{identifier} debris.scale must be positive" + end + else + errors << "Game #{identifier} debris must be a mapping" + end + elsif game["effect"] + errors << "Game #{identifier} must define debris when effect is enabled" + end +end + +departments = YAML.safe_load_file(File.join(ROOT, "_data", "departments.yml")) +department_paths = departments.values.map { |department| department["path"] } +staff_departments = departments.values.map { |department| department["staff_department"] } +errors << "Department paths must be unique" unless department_paths.length == department_paths.uniq.length +errors << "Department staff_department values must be unique" unless staff_departments.length == staff_departments.uniq.length + +department_sources = Dir[File.join(ROOT, "pages", "departments", "*.{md,markdown,html}")].to_h do |path| + metadata = front_matter(path) + [metadata["department"], [path, metadata]] +end + +departments.each do |key, department| + %w[path staff_department].each do |field| + errors << "Department #{key} is missing #{field}" if department[field].to_s.strip.empty? + end + %w[name bio].each do |field| + if department.dig(DEFAULT_LANG, field).to_s.strip.empty? + errors << "Department #{key} is missing fallback #{DEFAULT_LANG}.#{field}" + end + end + errors << "Department #{key} points to a missing page" unless File.file?(generated_page_path(department["path"])) + + source_path, metadata = department_sources[key] + if source_path.nil? + errors << "Department #{key} is missing a department source page" + else + errors << "Department #{key} page must use the department layout" unless metadata["layout"] == "department" + errors << "Department #{key} page permalink must match its data path" unless metadata["permalink"] == department["path"] + end +end + +unknown_department_pages = department_sources.keys.compact - departments.keys +unless unknown_department_pages.empty? + errors << "Department pages reference unknown keys: #{unknown_department_pages.join(', ')}" +end + +staff = YAML.safe_load_file(File.join(ROOT, "_data", "staff.yml")) +staff.each do |key, person| + next unless person["aboutpage"] + + %w[pfp path].each do |field| + errors << "Staff member #{key} is missing #{field}" if person[field].to_s.strip.empty? + end + %w[name role bio].each do |field| + if person.dig(DEFAULT_LANG, field).to_s.strip.empty? + errors << "Staff member #{key} is missing fallback #{DEFAULT_LANG}.#{field}" + end + end + image = generated_asset_path(person["pfp"]) + errors << "Staff member #{key} pfp must be root-relative" unless image + errors << "Staff member #{key} references a missing image" if image && !File.file?(image) +end + +article_sources = Dir[File.join(ROOT, "_articles", "**", "*.{md,markdown,html}")] +article_slugs = article_sources.map do |path| + File.basename(path, File.extname(path)) +end.uniq +expected_article_locations = LANGUAGES.each_with_object(Set.new) do |lang, locations| + article_slugs.each do |slug| + locations << localized_route("/article/#{slug}", lang) + end +end.to_set +actual_article_locations = article_locations.to_set +errors << "Sitemap article URLs do not match _articles" unless actual_article_locations == expected_article_locations + +article_sources.each do |path| + metadata = front_matter(path) + identifier = File.basename(path) + if metadata["__error__"] + errors << "Article #{identifier} has invalid front matter: #{metadata['__error__']}" + next + end + + %w[layout title date author banner summary type].each do |field| + errors << "Article #{identifier} is missing #{field}" if metadata[field].to_s.strip.empty? + end + errors << "Article #{identifier} has an unsupported language" unless LANGUAGES.include?(metadata["lang"]) + source_lang = File.basename(File.dirname(path)) + errors << "Article #{identifier} language does not match its directory" unless metadata["lang"] == source_lang + errors << "Article #{identifier} must use the news layout" unless metadata["layout"] == "news" + errors << "Article #{identifier} references an unknown author" unless staff.key?(metadata["author"]) + if identifier == "website-redesign-2026-06-16.md" && metadata["date"].to_s != "2026-06-16" + errors << "Article #{identifier} date must match its stable filename" + end + + banner = generated_asset_path(metadata["banner"]) + errors << "Article #{identifier} banner must be root-relative" unless banner + errors << "Article #{identifier} references a missing banner" if banner && !File.file?(banner) +end + +root_markers = Dir[File.join(ROOT, "*.txt")] +errors << "Unexpected root development markers: #{root_markers.map { |path| File.basename(path) }.join(', ')}" unless root_markers.empty? + +source_pngs = %w[sacred-remains.png sacred-remains-debris.png] +source_pngs.each do |filename| + path = File.join(ROOT, "assets", "extra", "img", filename) + errors << "Missing retained Sacred Remains source asset: #{filename}" unless File.file?(path) +end +%w[sacred-remains.webp sacred-remains-debris.webp obby-of-dominance.png].each do |filename| + path = File.join(DESTINATION, "assets", "img", filename) + errors << "Missing Website-owned production game asset: #{filename}" unless File.file?(path) +end + +gemfile = File.read(File.join(ROOT, "Gemfile")) +unless gemfile.match?(/gem "pwindows-theme".*branch: "main"/) + errors << "Gemfile must use the shared theme's main branch" +end +errors << "Theme dependency URL must not contain credentials" if gemfile.match?(%r{https://[^/\s]+@github\.com}) + +workflow_files = Dir[File.join(ROOT, ".github", "workflows", "*.yml")] +workflow_files.each do |path| + workflow = File.read(path) + errors << "#{File.basename(path)} must use Ruby 3.4.10" unless workflow.include?("3.4.10") + errors << "#{File.basename(path)} must not update dependencies" if workflow.include?("bundle update") +end + +deployment_workflow = File.read(File.join(ROOT, ".github", "workflows", "gh-jekyll-workflow.yml")) +unless deployment_workflow.match?(/branches:\s*\[[^\]]*main[^\]]*redesign[^\]]*\]/) + errors << "Deployment workflow must publish main and redesign" +end +required_deployment_checks = [ + "bundle exec jekyll build --trace", + "bundle exec htmlproofer ./_site", + "bundle exec ruby tools/verify-site.rb ./_site", + "node --check assets/js/extra.js" +] +missing_deployment_checks = required_deployment_checks.reject { |check| deployment_workflow.include?(check) } +unless missing_deployment_checks.empty? + errors << "Deployment workflow is missing checks: #{missing_deployment_checks.join(', ')}" +end +if deployment_workflow.include?("pull_request:") + errors << "Deployment workflow must not duplicate redesign push checks with pull-request checks" +end +unless deployment_workflow.include?("needs: build") && deployment_workflow.include?("if: ${{ needs.build.result == 'success' }}") + errors << "Deployment must require a successful build job" +end +if File.exist?(File.join(ROOT, ".github", "workflows", "site-checks.yml")) + errors << "Separate site-check workflow would duplicate pull-request checks" +end + +if File.file?(default_page_file) + default_page = Nokogiri::HTML5(File.read(default_page_file)) + shop_link = default_page.at_css(%{a[href="https://shop.pwindows.qzz.io"]}) + errors << "Website footer is missing the canonical Shop cross-link" unless shop_link +end + +if errors.empty? + puts "Site verification passed." +else + warn errors.map { |error| "- #{error}" }.join("\n") + exit 1 +end