diff --git a/.github/workflows/codacy-coverage-reporter.yaml b/.github/workflows/codacy-coverage-reporter.yaml deleted file mode 100644 index e1d9dee6..00000000 --- a/.github/workflows/codacy-coverage-reporter.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: Codacy Coverage Reporter - -on: ["push"] - -jobs: - codacy-coverage-reporter: - runs-on: ubuntu-latest - name: codacy-coverage-reporter - steps: - - uses: actions/checkout@v2 - - name: Run codacy-coverage-reporter - uses: codacy/codacy-coverage-reporter-action@v1.3.0 - with: - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - # or - # api-token: ${{ secrets.CODACY_API_TOKEN }} - coverage-reports: - # or a comma-separated list for multiple reports - # coverage-reports: , diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml deleted file mode 100644 index 4824cd09..00000000 --- a/.github/workflows/codacy.yml +++ /dev/null @@ -1,61 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow checks out code, performs a Codacy security scan -# and integrates the results with the -# GitHub Advanced Security code scanning feature. For more information on -# the Codacy security scan action usage and parameters, see -# https://github.com/codacy/codacy-analysis-cli-action. -# For more information on Codacy Analysis CLI in general, see -# https://github.com/codacy/codacy-analysis-cli. - -name: Codacy Security Scan - -on: - push: - branches: [ "main" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main" ] - schedule: - - cron: '42 12 * * 2' - -permissions: - contents: read - -jobs: - codacy-security-scan: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status - name: Codacy Security Scan - runs-on: ubuntu-latest - steps: - # Checkout the repository to the GitHub Actions runner - - name: Checkout code - uses: actions/checkout@v4 - - # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis - - name: Run Codacy Analysis CLI - uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b - with: - # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository - # You can also omit the token and run the tools that support default configurations - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - verbose: true - output: results.sarif - format: sarif - # Adjust severity of non-security issues - gh-code-scanning-compat: true - # Force 0 exit code to allow SARIF file generation - # This will handover control about PR rejection to the GitHub side - max-allowed-issues: 2147483647 - - # Upload the SARIF file generated in the previous step - - name: Upload SARIF results file - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: results.sarif diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 68083829..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,90 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL Advanced" - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - schedule: - - cron: '31 8 * * 4' - -jobs: - analyze: - name: Analyze (${{ matrix.language }}) - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners (GitHub.com only) - # Consider using larger runners or machines with greater resources for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - permissions: - # required for all workflows - security-events: write - - # required to fetch internal or private CodeQL packs - packages: read - - # only required for workflows in private repositories - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - include: - # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' - # Use `c-cpp` to analyze code written in C, C++ or both - # Use 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, - # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. - # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how - # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - build-mode: ${{ matrix.build-mode }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - # If the analyze step fails for one of the languages you are analyzing with - # "We were unable to automatically build your code", modify the matrix above - # to set the build mode to "manual" for that language. Then modify this step - # to build your code. - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - if: matrix.build-mode == 'manual' - shell: bash - run: | - echo 'If you are using a "manual" build mode for one or more of the' \ - 'languages you are analyzing, replace this with the commands to build' \ - 'your code, for example:' - echo ' make bootstrap' - echo ' make release' - exit 1 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/codescan.yml b/.github/workflows/codescan.yml deleted file mode 100644 index 5d9201d0..00000000 --- a/.github/workflows/codescan.yml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow requires that you have an existing account with codescan.io -# For more information about configuring your workflow, -# read our documentation at https://github.com/codescan-io/codescan-scanner-action -name: CodeScan - -on: - push: - branches: [ "main" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main" ] - schedule: - - cron: '21 15 * * 0' - -permissions: - contents: read - -jobs: - analyze: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Run SonarScanner - uses: codescan-io/codescan-scanner-action@5b2e8c5683ef6a5adc8fa3b7950bb07debccce12 - with: - codeScanUrl: https://app.codescan.io/ - pollingTimeoutSec: 900 - generateSarifFile: true - args: "-Dsonar.login=${{ secrets.SONAR_TOKEN }}" diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml new file mode 100644 index 00000000..110eeb1c --- /dev/null +++ b/.github/workflows/codspeed.yml @@ -0,0 +1,35 @@ +name: CodSpeed + +on: + push: + branches: + - main + pull_request: + # `workflow_dispatch` allows CodSpeed to trigger backtest + # performance analysis in order to generate initial data. + workflow_dispatch: + +permissions: + contents: read + id-token: write + +jobs: + benchmarks: + name: Run benchmarks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Run benchmarks + uses: CodSpeedHQ/action@v4 + with: + mode: simulation + run: npx vitest bench --run diff --git a/.github/workflows/defender-for-devops.yml b/.github/workflows/defender-for-devops.yml deleted file mode 100644 index 9f5b3ee5..00000000 --- a/.github/workflows/defender-for-devops.yml +++ /dev/null @@ -1,47 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# -# Microsoft Security DevOps (MSDO) is a command line application which integrates static analysis tools into the development cycle. -# MSDO installs, configures and runs the latest versions of static analysis tools -# (including, but not limited to, SDL/security and compliance tools). -# -# The Microsoft Security DevOps action is currently in beta and runs on the windows-latest queue, -# as well as Windows self hosted agents. ubuntu-latest support coming soon. -# -# For more information about the action , check out https://github.com/microsoft/security-devops-action -# -# Please note this workflow do not integrate your GitHub Org with Microsoft Defender For DevOps. You have to create an integration -# and provide permission before this can report data back to azure. -# Read the official documentation here : https://learn.microsoft.com/en-us/azure/defender-for-cloud/quickstart-onboard-github - -name: "Microsoft Defender For Devops" - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - schedule: - - cron: '44 11 * * 0' - -jobs: - MSDO: - # currently only windows latest is supported - runs-on: windows-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 5.0.x - 6.0.x - - name: Run Microsoft Security DevOps - uses: microsoft/security-devops-action@v1.6.0 - id: msdo - - name: Upload results to Security tab - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: ${{ steps.msdo.outputs.sarifFile }} diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 00000000..c823cf15 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,52 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# ESLint is a tool for identifying and reporting on patterns +# found in ECMAScript/JavaScript code. +# More details at https://github.com/eslint/eslint +# and https://eslint.org + +name: ESLint + +on: + push: + branches: [ "main" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main" ] + schedule: + - cron: '19 1 * * 0' + +jobs: + eslint: + name: Run eslint scanning + runs-on: ubuntu-latest + permissions: + contents: read + security-events: write + actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install ESLint + run: | + npm install eslint@8.10.0 + npm install @microsoft/eslint-formatter-sarif@3.1.0 + + - name: Run ESLint + env: + SARIF_ESLINT_IGNORE_SUPPRESSED: "true" + run: npx eslint . + --config .eslintrc.js + --ext .js,.jsx,.ts,.tsx + --format @microsoft/eslint-formatter-sarif + --output-file eslint-results.sarif + continue-on-error: true + + - name: Upload analysis results to GitHub + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: eslint-results.sarif + wait-for-processing: true diff --git a/.github/workflows/msvc.yml b/.github/workflows/msvc.yml deleted file mode 100644 index 50d66d86..00000000 --- a/.github/workflows/msvc.yml +++ /dev/null @@ -1,66 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# -# Find more information at: -# https://github.com/microsoft/msvc-code-analysis-action - -name: Microsoft C++ Code Analysis - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - schedule: - - cron: '18 4 * * 1' - -env: - # Path to the CMake build directory. - build: '${{ github.workspace }}/build' - -permissions: - contents: read - -jobs: - analyze: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status - name: Analyze - runs-on: windows-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Configure CMake - run: cmake -B ${{ env.build }} - - # Build is not required unless generated source files are used - # - name: Build CMake - # run: cmake --build ${{ env.build }} - - - name: Initialize MSVC Code Analysis - uses: microsoft/msvc-code-analysis-action@04825f6d9e00f87422d6bf04e1a38b1f3ed60d99 - # Provide a unique ID to access the sarif output path - id: run-analysis - with: - cmakeBuildDirectory: ${{ env.build }} - # Ruleset file that will determine what checks will be run - ruleset: NativeRecommendedRules.ruleset - - # Upload SARIF file to GitHub Code Scanning Alerts - - name: Upload SARIF to GitHub - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: ${{ steps.run-analysis.outputs.sarif }} - - # Upload SARIF file as an Artifact to download and view - # - name: Upload SARIF as an Artifact - # uses: actions/upload-artifact@v3 - # with: - # name: sarif-file - # path: ${{ steps.run-analysis.outputs.sarif }} diff --git a/.github/workflows/ossar.yml b/.github/workflows/ossar.yml index 116c2a2c..eb1f98ae 100644 --- a/.github/workflows/ossar.yml +++ b/.github/workflows/ossar.yml @@ -15,7 +15,7 @@ on: # The branches below must be a subset of the branches above branches: [ "main" ] schedule: - - cron: '39 14 * * 3' + - cron: '17 15 * * 6' permissions: contents: read diff --git a/.github/workflows/osv-scanner.yml b/.github/workflows/osv-scanner.yml deleted file mode 100644 index 7740777c..00000000 --- a/.github/workflows/osv-scanner.yml +++ /dev/null @@ -1,52 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and governed by separate -# terms of service, privacy policy, and support documentation. - -# A sample workflow which sets up periodic OSV-Scanner scanning for vulnerabilities, -# as well as a pull request check that fails if new vulnerabilities are introduced. -# -# For details on advanced usage, including ignoring specific vulnerabilities, -# see https://google.github.io/osv-scanner/github-action/ - -name: OSV-Scanner - -on: - pull_request: - branches: [ "main" ] - merge_group: - branches: [ "main" ] - schedule: - - cron: '18 7 * * 2' # Weekly on Tuesdays at 07:18 UTC - push: - branches: [ "main" ] - -permissions: - # Required to upload the SARIF file to the Security tab - security-events: write - # Needed to read commit contents - contents: read - -jobs: - # Scans on either a push or scheduled basis. - scan-scheduled: - if: ${{ github.event_name == 'push' || github.event_name == 'schedule' }} - uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@1f1242919d8a60496dd1874b24b62b2370ed4c78" # v1.7.1 - with: - # Example of specifying custom scanner arguments - scan-args: |- - -r - --skip-git - ./ - - # Runs on pull requests or merge group events (GitHub Merge Queue), - # fails the PR if new vulnerabilities are introduced. - scan-pr: - if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }} - uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@1f1242919d8a60496dd1874b24b62b2370ed4c78" # v1.7.1 - with: - # Example of specifying custom scanner arguments - scan-args: |- - -r - --skip-git - ./ - diff --git a/.replit b/.replit new file mode 100644 index 00000000..1580954e --- /dev/null +++ b/.replit @@ -0,0 +1,6 @@ +modules = ["nodejs-20", "web"] +[agent] +expertMode = true + +[nix] +channel = "stable-25_05" diff --git a/README.md b/README.md index 3b0557fd..4ba8367d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ +![Repo Size](https://img.shields.io/github/repo-size/LCSOGthb/Games) +![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/LCSOGthb/Games) +![GitHub repo file or directory count](https://img.shields.io/github/directory-file-count/LCSOGthb/Games) +![Last Commit](https://img.shields.io/github/last-commit/LCSOGthb/Games) +![Open Issues](https://img.shields.io/github/issues/LCSOGthb/Games) +![Closed Issues](https://img.shields.io/github/issues-closed/LCSOGthb/Games) +![Pull Requests](https://img.shields.io/github/issues-pr/LCSOGthb/Games) +![GitHub branch status](https://img.shields.io/github/checks-status/LCSOGthb/Games/main) +![GitHub branch check runs](https://img.shields.io/github/check-runs/LCSOGthb/Games/main) +![GitHub language count](https://img.shields.io/github/languages/count/LCSOGthb/Games) +![GitHub top language](https://img.shields.io/github/languages/top/LCSOGthb/Games) ![GitHub commit activity](https://img.shields.io/github/commit-activity/w/LCSOGthb/Games) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/LCSOGthb/Games) ![GitHub commit activity](https://img.shields.io/github/commit-activity/y/LCSOGthb/Games) @@ -6,12 +17,9 @@ ![GitHub contributors](https://img.shields.io/github/contributors-anon/LCSOGthb/Games) ![GitHub Created At](https://img.shields.io/github/created-at/LCSOGthb/Games) ![GitHub last commit](https://img.shields.io/github/last-commit/LCSOGthb/Games) -![GitHub language count](https://img.shields.io/github/languages/count/LCSOGthb/Games) -![GitHub top language](https://img.shields.io/github/languages/top/LCSOGthb/Games) -![GitHub branch check runs](https://img.shields.io/github/check-runs/LCSOGthb/Games/main) -![GitHub branch status](https://img.shields.io/github/checks-status/LCSOGthb/Games/main) -![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/LCSOGthb/Games) -![GitHub repo size](https://img.shields.io/github/repo-size/LCSOGthb/Games) + +CodSpeed +[![CodSpeed](https://img.shields.io/endpoint?url=https://codspeed.io/badge.json)](https://codspeed.io/LCSOGthb/Games?utm_source=badge) CodeRabbit ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/LCSOGthb/Games?utm_source=oss&utm_medium=github&utm_campaign=LCSOGthb%2FGames&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews) @@ -37,12 +45,6 @@ Qlty [![Maintainability](https://qlty.sh/badges/7f71c7d1-f72e-406c-9fac-b8a3d2852be6/maintainability.svg)](https://qlty.sh/gh/LCSOGthb/projects/Games) [![Code Coverage](https://qlty.sh/badges/7f71c7d1-f72e-406c-9fac-b8a3d2852be6/test_coverage.svg)](https://qlty.sh/gh/LCSOGthb/projects/Games) -Scrutinizer -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/LCSOGthb/Games/badges/quality-score.png?b=main)](https://scrutinizer-ci.com/g/LCSOGthb/Games/?branch=main) -[![Code Coverage](https://scrutinizer-ci.com/g/LCSOGthb/Games/badges/coverage.png?b=main)](https://scrutinizer-ci.com/g/LCSOGthb/Games/?branch=main) -[![Build Status](https://scrutinizer-ci.com/g/LCSOGthb/Games/badges/build.png?b=main)](https://scrutinizer-ci.com/g/LCSOGthb/Games/build-status/main) -[![Code Intelligence Status](https://scrutinizer-ci.com/g/LCSOGthb/Games/badges/code-intelligence.svg?b=main)](https://scrutinizer-ci.com/code-intelligence) - SonarQube [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=LCSOGthb_Clown&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=LCSOGthb_Clown) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=LCSOGthb_Clown&metric=bugs)](https://sonarcloud.io/summary/new_code?id=LCSOGthb_Clown) @@ -55,3 +57,21 @@ SonarQube [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=LCSOGthb_Clown&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=LCSOGthb_Clown) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=LCSOGthb_Clown&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=LCSOGthb_Clown) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=LCSOGthb_Clown&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=LCSOGthb_Clown) + +DeepScan +[![DeepScan grade](https://deepscan.io/api/teams/29732/projects/31716/branches/1029992/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=29732&pid=31716&bid=1029992) + +Codacy +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/816099ff42fa41b391f9a8394274f627)](https://app.codacy.com/gh/LCSOGthb/Games/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) + +CodeScene +[![CodeScene Average Code Health](https://codescene.io/projects/79939/status-badges/average-code-health)](https://codescene.io/projects/79939) +[![CodeScene Hotspot Code Health](https://codescene.io/projects/79939/status-badges/hotspot-code-health)](https://codescene.io/projects/79939) +[![CodeScene Missed Goals](https://codescene.io/projects/79939/status-badges/missed-goals)](https://codescene.io/projects/79939) +[![CodeScene System Mastery](https://codescene.io/projects/79939/status-badges/system-mastery)](https://codescene.io/projects/79939) + +GuardRails +[![GuardRails badge](https://api.guardrails.io/v2/badges/716795?token=0ed261234e4e51bfb9562d7161ce66cce193e4c9d9f9092cc8d0caf081e532fa)](https://dashboard.guardrails.io/gh/LCSOGthb/repos/716795) + +Codeac +[![Codeac](https://static.codeac.io/badges/2-911551762.svg "Codeac")](https://app.codeac.io/github/LCSOGthb/Games) diff --git a/SECURITY.md b/SECURITY.md index 0d8c9c8a..ba9e1398 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,8 +1,11 @@ -This document outlines the versions of our project that receive security updates, as well as how to report vulnerabilities responsibly. - -Supported Versions -Version Supported? -5.1.x ✅ (Active security updates) -5.0.x ❌ (No longer supported) -4.0.x ✅ (Limited security fixes) -< 4.0 ❌ (No longer supported) +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| All | :white_check_mark: | + +## Reporting a Vulnerability + +Go to Issues Report a Vulnerability diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 00000000..5e411213 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,255 @@ +@import "tailwindcss"; + +:root { + --bg-base: #0a0a0f; + --bg-surface: rgba(255, 255, 255, 0.05); + --bg-card: rgba(255, 255, 255, 0.08); + --text-primary: #ffffff; + --text-secondary: rgba(255, 255, 255, 0.7); + --border-default: rgba(255, 255, 255, 0.12); + --border-hover: rgba(255, 255, 255, 0.2); + --focus-ring: rgba(255, 255, 255, 0.5); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body { + height: 100%; + overflow: hidden; +} + +html { + background-color: var(--bg-base); + color-scheme: dark; +} + +body { + color: var(--text-primary); + background-color: var(--bg-base); + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + "Helvetica Neue", + sans-serif; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ======================================== + ANIMATED GRADIENT BACKGROUND + ======================================== */ + +.animated-gradient { + position: fixed; + inset: 0; + z-index: 0; + background: linear-gradient( + 135deg, + #0a0a0f 0%, + #1a1a2e 25%, + #16213e 50%, + #0f3460 75%, + #0a0a0f 100% + ); + background-size: 400% 400%; + animation: gradientShift 15s ease infinite; +} + +@keyframes gradientShift { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +/* Subtle overlay for depth */ +.animated-gradient::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient( + ellipse at center, + transparent 0%, + rgba(0, 0, 0, 0.3) 100% + ); + pointer-events: none; +} + +/* ======================================== + CARD STYLING + ======================================== */ + +.coming-soon-card { + position: relative; + background: var(--bg-card); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--border-default); + border-radius: 1.5rem; + text-align: center; + box-shadow: + 0 25px 50px -12px rgba(0, 0, 0, 0.5), + 0 0 0 1px rgba(255, 255, 255, 0.05) inset; + /* Square: fluid size clamped between 280px and 480px */ + width: clamp(280px, min(80vw, 80vh), 480px); + height: clamp(280px, min(80vw, 80vh), 480px); + /* Center content inside the square */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 2rem; +} + +@media (max-width: 480px) { + .coming-soon-card { + border-radius: 1.125rem; + } +} + +/* ======================================== + TYPOGRAPHY + ======================================== */ + +.coming-soon-title { + font-size: 3rem; + font-weight: 700; + letter-spacing: -0.025em; + line-height: 1.1; + color: var(--text-primary); + margin-bottom: 0.75rem; +} + +@media (max-width: 640px) { + .coming-soon-title { + font-size: 2rem; + } +} + +.coming-soon-subtitle { + font-size: 1.125rem; + color: var(--text-secondary); + font-weight: 400; +} + +@media (max-width: 640px) { + .coming-soon-subtitle { + font-size: 1rem; + } +} + +/* ======================================== + LANGUAGE SELECTOR + ======================================== */ + +.language-selector { + position: relative; + display: inline-block; +} + +.language-selector select { + appearance: none; + background: var(--bg-surface); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid var(--border-default); + border-radius: 0.5rem; + padding: 0.5rem 2.25rem 0.5rem 0.875rem; + font-size: 0.875rem; + font-weight: 500; + color: var(--text-primary); + cursor: pointer; + transition: all 0.15s ease-in-out; + min-width: 100px; +} + +.language-selector select:hover { + border-color: var(--border-hover); + background: rgba(255, 255, 255, 0.08); +} + +.language-selector select:focus { + outline: none; + border-color: var(--focus-ring); + box-shadow: 0 0 0 2px var(--focus-ring); +} + +.language-selector select:focus-visible { + outline: none; + border-color: var(--focus-ring); + box-shadow: 0 0 0 2px var(--focus-ring); +} + +.language-selector::after { + content: ""; + position: absolute; + right: 0.75rem; + top: 50%; + transform: translateY(-50%); + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid var(--text-secondary); + pointer-events: none; +} + +/* ======================================== + VERSION LABEL + ======================================== */ + +.version-label { + position: fixed; + bottom: 1.25rem; + right: 1.5rem; + z-index: 10; + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.02em; + color: #ffffff; + text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +} + +/* ======================================== + FOCUS & ACCESSIBILITY + ======================================== */ + +:focus-visible { + outline: 2px solid var(--focus-ring); + outline-offset: 2px; +} + +/* ======================================== + SKIP LINK + ======================================== */ + +.skip-link { + position: absolute; + top: -100%; + left: 1rem; + z-index: 100; + padding: 0.75rem 1rem; + font-weight: 600; + color: white; + background-color: #3b82f6; + border-radius: 0.5rem; + text-decoration: none; +} + +.skip-link:focus { + top: 1rem; +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 00000000..8f8ee1b9 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,25 @@ +import type { Metadata, Viewport } from "next"; +import "./globals.css"; + +export const metadata: Metadata = { + title: "Coming Soon", + description: "Something amazing is on the way", +}; + +export const viewport: Viewport = { + themeColor: "#09090b", + width: "device-width", + initialScale: 1, +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 00000000..c92e1b1b --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { useState } from "react"; +import { getTranslation, type Language } from "@/lib/translations"; + +export default function Home() { + const [lang, setLang] = useState("en"); + const t = getTranslation(lang); + + return ( + <> + + Skip to main content + + + {/* Animated gradient background */} +