Compare commits

...

17 Commits

Author SHA1 Message Date
jmiller df395fc82b Merge pull request 'chore(gitignore): ignore .gemini/ and local wiki/docs per ecosystem standard' (#813) from chore/ignore-gemini-wiki into dev
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m44s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Deploy (Dev) / Build & Deploy to Dev (push) Has been cancelled
MokoGIT: Sync MokoOnyx Theme / Vendor MokoOnyx theme CSS (push) Has been cancelled
Generic: Project CI / Lint & Validate (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Has been cancelled
Universal: PR Check / Secret Scan (pull_request) Has been cancelled
Universal: PR Check / Validate PR (pull_request) Has been cancelled
Generic: Repo Health / Access control (pull_request) Has been cancelled
Generic: Repo Health / Site Health (pull_request) Has been cancelled
Generic: Standards Compliance / Secret Scanning (pull_request) Has been cancelled
Generic: Standards Compliance / License Header Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Repository Structure Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Coding Standards Check (pull_request) Has been cancelled
Generic: Standards Compliance / Version Consistency Check (pull_request) Has been cancelled
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Has been cancelled
Generic: Standards Compliance / Documentation Quality Check (pull_request) Has been cancelled
Generic: Standards Compliance / README Completeness Check (pull_request) Has been cancelled
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Has been cancelled
Generic: Standards Compliance / Script Integrity Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Line Length Check (pull_request) Has been cancelled
Generic: Standards Compliance / File Naming Standards (pull_request) Has been cancelled
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Has been cancelled
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Has been cancelled
Generic: Standards Compliance / Code Duplication Detection (pull_request) Has been cancelled
Generic: Standards Compliance / Dead Code Detection (pull_request) Has been cancelled
Generic: Standards Compliance / File Size Limits (pull_request) Has been cancelled
Generic: Standards Compliance / Binary File Detection (pull_request) Has been cancelled
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Has been cancelled
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Has been cancelled
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Has been cancelled
Generic: Standards Compliance / Broken Link Detection (pull_request) Has been cancelled
Generic: Standards Compliance / API Documentation Coverage (pull_request) Has been cancelled
Generic: Standards Compliance / Performance Metrics (pull_request) Has been cancelled
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Has been cancelled
Generic: Standards Compliance / Repository Health Check (pull_request) Has been cancelled
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Has been cancelled
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
Generic: Standards Compliance / Accessibility Check (pull_request) Has been cancelled
Universal: Auto Version Bump / Version Bump (push) Has been skipped
2026-07-18 21:19:54 +00:00
jmiller 9d141411bd chore(gitignore): ignore .gemini/ and local wiki/docs per ecosystem standard
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m34s
Generic: Repo Health / Access control (pull_request) Has been cancelled
Generic: Repo Health / Site Health (pull_request) Has been cancelled
Generic: Standards Compliance / Secret Scanning (pull_request) Has been cancelled
Generic: Standards Compliance / License Header Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Repository Structure Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Coding Standards Check (pull_request) Has been cancelled
Generic: Standards Compliance / Version Consistency Check (pull_request) Has been cancelled
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Has been cancelled
Generic: Standards Compliance / Documentation Quality Check (pull_request) Has been cancelled
Generic: Standards Compliance / README Completeness Check (pull_request) Has been cancelled
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Has been cancelled
Generic: Standards Compliance / Script Integrity Validation (pull_request) Has been cancelled
Generic: Standards Compliance / Line Length Check (pull_request) Has been cancelled
Generic: Standards Compliance / File Naming Standards (pull_request) Has been cancelled
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Has been cancelled
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Has been cancelled
Generic: Standards Compliance / Code Duplication Detection (pull_request) Has been cancelled
Generic: Standards Compliance / Dead Code Detection (pull_request) Has been cancelled
Generic: Standards Compliance / File Size Limits (pull_request) Has been cancelled
Generic: Standards Compliance / Binary File Detection (pull_request) Has been cancelled
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Has been cancelled
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Has been cancelled
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Has been cancelled
Generic: Standards Compliance / Broken Link Detection (pull_request) Has been cancelled
Generic: Standards Compliance / API Documentation Coverage (pull_request) Has been cancelled
Generic: Standards Compliance / Accessibility Check (pull_request) Has been cancelled
Generic: Standards Compliance / Performance Metrics (pull_request) Has been cancelled
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Has been cancelled
Generic: Standards Compliance / Repository Health Check (pull_request) Has been cancelled
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Has been cancelled
Generic: Project CI / Lint & Validate (pull_request) Successful in 42s
Generic: Project CI / Tests (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Has been cancelled
Universal: PR Check / Secret Scan (pull_request) Has been cancelled
Universal: PR Check / Validate PR (pull_request) Has been cancelled
Branch Cleanup / Delete merged branch (pull_request) Has been cancelled
RC Revert / Rename rc/ back to dev/ (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Add the canonical Moko exclusions matching the Template repos: .gemini/
alongside .claude/, the AI client-instructions block, and the local wiki
clone block (wiki/, docs/). Update CLAUDE.md never-commit rule if present.

Authored-by: Moko Consulting
2026-07-18 14:58:29 -05:00
jmiller e519677fcd Merge pull request 'feat(setting): accept MOKOGIT__ env override prefix alongside GITEA__' (#808) from feature/mokogit-env-prefix into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m26s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Generic: Project CI / Lint & Validate (pull_request) Successful in 44s
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m18s
MokoGIT: Sync MokoOnyx Theme / Vendor MokoOnyx theme CSS (push) Successful in 1m18s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 13s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 11s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 15s
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 16s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 12s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 12s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 10s
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 17s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m18s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 28s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 11s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 10s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m25s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 16s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 10s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m14s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m14s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 11s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m12s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m18s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 12s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 15s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 10s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 11s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m28s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 16s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m12s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m12s
Generic: Project CI / Tests (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Has been cancelled
Universal: PR Check / Secret Scan (pull_request) Has been cancelled
Universal: PR Check / Validate PR (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
2026-07-18 19:32:47 +00:00
jmiller e0c6451fac Merge pull request 'feat(theme): auto-import MokoOnyx template CSS + light/dark themes on push' (#807) from feature/mokoonyx-theme-sync into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
MokoGIT: Sync MokoOnyx Theme / Vendor MokoOnyx theme CSS (push) Successful in 1m25s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m27s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m28s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 14s
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 39s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 16s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 16s
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 15s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 14s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m25s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 12s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 12s
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 17s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m21s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 12s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 28s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 12s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m21s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 15s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 14s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m16s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 12s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m17s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m13s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m19s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 11s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 15s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 10s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 9s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m28s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m14s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 16s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m15s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
2026-07-18 19:20:35 +00:00
jmiller ada552aebf feat(setting): accept MOKOGIT__ env override prefix alongside GITEA__
Universal: Auto Version Bump / Version Bump (push) Successful in 17s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 43s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m24s
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Step 1 of the coordinated GITEA__ -> MOKOGIT__ rebrand. The binary previously
read config env overrides only under the GITEA__ prefix, so renaming the compose
vars first would make Gitea silently ignore every override. Teach the binary to
accept BOTH prefixes (MOKOGIT__ and GITEA__), including the __FILE suffix, so the
compose vars can be migrated safely AFTER this binary is deployed to all tiers.

- add EnvConfigKeyPrefixMokoGit ("MOKOGIT__") + envConfigKeyPrefixes list
- CollectEnvConfigKeys / EnvironmentToConfig iterate both prefixes
- test: MOKOGIT__ override applies (existing GITEA__ + __FILE behavior unchanged)

Compose var rename (GITEA__* -> MOKOGIT__*) is a follow-up, gated on this being
live everywhere. Upstream MIT header preserved.

Authored-by: Moko Consulting
2026-07-18 14:18:42 -05:00
jmiller 5d2ec281b7 Merge pull request 'chore(rebrand): user-facing brand strings — MokoGIT (issue #801 phase 1)' (#805) from chore/rebrand-strings-p1 into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 3s
Generic: Project CI / Lint & Validate (pull_request) Successful in 45s
Universal: PR Check / Validate PR (pull_request) Successful in 14s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 14s
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m26s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m22s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 12s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 12s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m43s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 17s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 11s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 12s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 11s
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 17s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 26s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m20s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 11s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 12s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m20s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 17s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 12s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m16s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m17s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 10s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m5s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m9s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 8s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 10s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 9s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 10s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m16s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 17s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m11s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m10s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
2026-07-18 18:56:04 +00:00
jmiller 2a99ded829 feat(theme): auto-import MokoOnyx template CSS + light/dark themes on push
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Add a MokoGIT-specific workflow that, on every push to dev/main (and on demand),
vendors the MokoOnyx (mokoconsulting.tech Joomla template) CSS from the
MokoConsulting/MokoOnyx repo into web_src/css/vendor/mokoonyx/, and extracts
tokens-only files (re-scoped :root, Bootstrap component classes stripped) that
are safe to @import into a Gitea theme without colliding with Fomantic UI.
Commits back with [skip ci] only when something changed (no self-trigger loop).

This is the "import" mechanism for token/variable parity with the site design.
Wiring the tokens onto Gitea's --color-* vars is documented in the vendor README
and left as a visually-tuned follow-up so an automated import can never silently
recolor the UI.

Workflow is MokoGIT-specific (only this repo has a web UI to theme), so it lives
here and is not a Template-* concern.

Authored-by: Moko Consulting
2026-07-18 13:53:33 -05:00
jmiller ec65fac21f Merge pull request 'feat(theme): swap auth backdrop to brand header-background.svg' (#806) from feat/header-bg-swap into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m30s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Generic: Project CI / Lint & Validate (pull_request) Successful in 37s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 12s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 12s
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m23s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 11s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 12s
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 17s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m20s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 11s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 11s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 11s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m14s
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 14s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 27s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 11s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m18s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 9s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 15s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 13s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m12s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m13s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 10s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m6s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m9s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 11s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 14s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 11s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 11s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m22s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 19s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m17s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m17s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
2026-07-18 18:35:07 +00:00
jmiller e9b46f2e51 feat(theme): swap auth backdrop to brand header-background.svg
Generic: Project CI / Lint & Validate (pull_request) Successful in 39s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 12s
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Universal: PR Check / Secret Scan (pull_request) Successful in 1m16s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Replace the interim mokoonyx-bg.svg (sourced from the marketing site) with the
official brand asset from Shared Drives (Assets/branding/primary/background.svg),
vendored as public/assets/img/header-background.svg, and point the auth-screen
backdrop at it. Larger, higher-detail landscape artwork; same CSS treatment
(cover/centered) and legible surface panel.

Authored-by: Moko Consulting
2026-07-18 13:33:16 -05:00
jmiller 0f31f54e2b Merge pull request 'feat(theme): MokoOnyx bg.svg as login/auth screen background' (#804) from feat/login-bg-mokoonyx into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m28s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Generic: Project CI / Lint & Validate (pull_request) Successful in 40s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 13s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 12s
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m22s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 11s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 12s
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 16s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m15s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 11s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 10s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 10s
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 16s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m19s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 12s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 30s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 13s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m20s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 15s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 12s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m18s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m16s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 11s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m10s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m15s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 11s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 15s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 11s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 11s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m28s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 17s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m14s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m14s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
2026-07-18 18:29:35 +00:00
jmiller 2e86f25977 chore(rebrand): user-facing Gitea->MokoGIT brand strings (issue #801 phase 1)
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m23s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Project CI / Lint & Validate (pull_request) Successful in 42s
Universal: PR Check / Validate PR (pull_request) Successful in 12s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m22s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
Conservative, source-controlled brand-string pass — user-facing display text
only. NO blanket gitea->mokogit (import paths, runtime paths, binary/command
names, GITEA_* env, copyright/attribution all intentionally left untouched).

- cmd/web.go: startup "Gitea version:" / "Starting|Restarting Gitea on PID" logs
- modules/graceful/manager_unix.go: systemd sd_notify "Starting Gitea" status
- modules/setting/setting.go: run-as-root Fatal/Warn messages
- services/doctor/dbconsistency.go: doctor model-version Critical message
- snap/snapcraft.yaml: summary text only (name:/command:/adopt-info: kept)
- .github/ISSUE_TEMPLATE/bug-report.yaml: "Gitea Version" label + description
  (form field id: gitea-ver kept as a stable key)
- .mokogit/issue_template.md: version checklist label
- options/fileicon/material-icon-rules.json: rename stale ".mokogitea/workflows"
  keys -> ".mokogit/workflows" (values folder-gitea-workflows* kept; JSON-aware)
- rename .mokogit/ISSUE_TEMPLATE/test-mokogitea.md -> test-mokogit.md

Authored-by: Moko Consulting
2026-07-18 13:25:47 -05:00
jmiller fefe9d157c fix(theme): brand full auth family + cover WebAuthn surface (review #804)
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 12s
Generic: Project CI / Lint & Validate (pull_request) Successful in 37s
Universal: PR Check / Secret Scan (pull_request) Successful in 49s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Per PR review: the "signin" body class is shared by the whole auth family
(sign-in, sign-up, 2FA, OpenID, WebAuthn, change-password), so the backdrop
applies to all of them by design — document that in the comment. Broaden the
form-surface selector from `.ui.middle.page.grid > .column` to
`.ui.page.grid > .column` so the WebAuthn prompt (whose grid has no `middle`
class) also gets the legible surface instead of sitting on the raw pattern.

Authored-by: Moko Consulting
2026-07-18 12:44:16 -05:00
jmiller 113e1bfb5e refactor(theme): drop dead signup auth selectors (signup reuses signin class)
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 31s
Universal: PR Check / Secret Scan (pull_request) Successful in 54s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
The signup template renders the same class="page-content user signin" as signin,
so the separate .signup selectors never matched. Signup is already covered by the
.signin rules; remove the dead selectors and correct the comment.

Authored-by: Moko Consulting
2026-07-18 12:32:19 -05:00
jmiller 90923a5ca1 feat(theme): use MokoOnyx bg.svg as the login/auth screen background
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 7s
Generic: Project CI / Lint & Validate (pull_request) Successful in 31s
Universal: PR Check / Secret Scan (pull_request) Successful in 36s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Vendor the mokoconsulting.tech MokoOnyx background pattern and paint it behind
the centered form on the signin/signup/link-account pages, matching the site
design language. Implemented as a CSS-only change in the brand layer using
:has() on <body> (no template markup), so it survives upstream Gitea merges.
The auth form is lifted onto a clean, theme-token surface so it stays legible
over the pattern in both light and dark themes.

Asset self-hosted at public/assets/img/mokoonyx-bg.svg (served /assets/img/)
for offline/distribution determinism — no dependency on the marketing site.

Authored-by: Moko Consulting
2026-07-18 12:28:42 -05:00
jmiller c71bb0c9af Merge pull request 'fix(theme): repair broken theme + MokoOnyx surface separation' (#800) from jmiller/fix-theme-config-separation into dev
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m23s
Deploy (Dev) / Build & Deploy to Dev (push) Failing after 1m4s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 13s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Standards Compliance / Secret Scanning (pull_request) Failing after 12s
Generic: Project CI / Lint & Validate (pull_request) Successful in 41s
Generic: Standards Compliance / License Header Validation (pull_request) Successful in 11s
Generic: Standards Compliance / Repository Structure Validation (pull_request) Successful in 12s
Generic: Standards Compliance / Coding Standards Check (pull_request) Successful in 14s
Generic: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 12s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m13s
Generic: Standards Compliance / Documentation Quality Check (pull_request) Successful in 10s
Generic: Standards Compliance / README Completeness Check (pull_request) Failing after 10s
Universal: Build & Release / Promote to RC (pull_request) Successful in 1m7s
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Generic: Standards Compliance / Script Integrity Validation (pull_request) Successful in 12s
Generic: Standards Compliance / Line Length Check (pull_request) Successful in 25s
Generic: Standards Compliance / Version Consistency Check (pull_request) Successful in 1m15s
Generic: Standards Compliance / File Naming Standards (pull_request) Successful in 10s
Generic: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 10s
Generic: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 1m6s
Generic: Standards Compliance / Dead Code Detection (pull_request) Successful in 15s
Generic: Standards Compliance / File Size Limits (pull_request) Successful in 13s
Generic: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 1m13s
Generic: Standards Compliance / Code Duplication Detection (pull_request) Successful in 1m13s
Generic: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 10s
Generic: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 1m8s
Generic: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 1m2s
Generic: Standards Compliance / API Documentation Coverage (pull_request) Successful in 10s
Generic: Standards Compliance / Broken Link Detection (pull_request) Successful in 14s
Generic: Standards Compliance / Accessibility Check (pull_request) Successful in 10s
Generic: Standards Compliance / Performance Metrics (pull_request) Successful in 9s
Generic: Standards Compliance / Binary File Detection (pull_request) Successful in 2m19s
Generic: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 14s
Generic: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 1m5s
Generic: Standards Compliance / Repository Health Check (pull_request) Successful in 1m4s
Deploy (RC) / Build & Deploy to RC (push) Failing after 5m19s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
Universal: Auto Version Bump / Version Bump (push) Has been skipped
2026-07-17 15:42:38 +00:00
jmiller dee280a98d fix(theme): repair broken theme + add MokoOnyx surface separation
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m0s
Generic: Project CI / Lint & Validate (pull_request) Successful in 34s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 9s
Universal: PR Check / Secret Scan (pull_request) Successful in 53s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
The MokoGitea->MokoGIT branding rebrand deleted the gitea-* theme CSS and
shipped only theme-mokogit-{auto,light,dark}.css, but two things were left
pointing at the retired themes, producing an unstyled "all white" page with an
invisible navbar theme toggle:

1. Users' saved `user.theme` still held gitea-* names, whose CSS now 404s.
   Add migration 370 (RemapGiteaThemesToMokogit) to rewrite each user's saved
   theme gitea-{auto,light,dark}(-colorblind) -> mokogit-* equivalent,
   preserving their light/dark/auto preference. Idempotent.

2. app.example.ini still documented DEFAULT_THEME = gitea-auto. Correct it to
   mokogit-auto so fresh installs start on a shipped theme. (The running
   servers' app.ini [ui] THEMES/DEFAULT_THEME are fixed operationally.)

Also address the flat "all white / no separation" look by adding a MokoOnyx
surface-separation scale to both themes (mokoconsulting.tech gray scale):
- light: soft gray page (#f0f3f6) so white cards/boxes lift off it, gray-200
  box headers, stronger gray-300 border definition.
- dark: 3-step navy-tinted elevation (page #0b1017 -> box #121a24 -> header
  #17212e) cohesive with the #112855 brand nav, more visible panel edges.

The auto theme @imports light/dark, so it inherits both automatically.
2026-07-17 01:58:48 -05:00
jmiller 7174fd0007 fix(cli): report 'mokogit version' instead of 'gitea version'
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 35s
Generic: Standards Compliance / Secret Scanning (push) Failing after 11s
Generic: Standards Compliance / License Header Validation (push) Successful in 9s
Generic: Standards Compliance / Repository Structure Validation (push) Successful in 10s
Generic: Standards Compliance / Coding Standards Check (push) Successful in 13s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m36s
Deploy (Prod) / Build & Deploy to Prod (push) Failing after 1m27s
Generic: Standards Compliance / Workflow Configuration Check (push) Failing after 11s
Generic: Standards Compliance / Documentation Quality Check (push) Successful in 10s
Generic: Standards Compliance / README Completeness Check (push) Failing after 10s
Generic: Standards Compliance / Script Integrity Validation (push) Successful in 11s
Generic: Standards Compliance / Line Length Check (push) Successful in 22s
Generic: Standards Compliance / Version Consistency Check (push) Successful in 1m15s
Generic: Standards Compliance / File Naming Standards (push) Successful in 10s
Generic: Standards Compliance / Insecure Code Pattern Detection (push) Successful in 10s
Generic: Standards Compliance / Git Repository Hygiene (push) Successful in 1m20s
Generic: Standards Compliance / Dead Code Detection (push) Successful in 13s
Generic: Standards Compliance / File Size Limits (push) Successful in 10s
Generic: Standards Compliance / Code Complexity Analysis (push) Successful in 1m12s
Generic: Standards Compliance / TODO/FIXME Tracking (push) Successful in 9s
Generic: Standards Compliance / Code Duplication Detection (push) Successful in 2m25s
Generic: Standards Compliance / Binary File Detection (push) Successful in 1m58s
Generic: Standards Compliance / Broken Link Detection (push) Successful in 13s
Generic: Standards Compliance / Dependency Vulnerability Scanning (push) Successful in 1m47s
Generic: Standards Compliance / API Documentation Coverage (push) Successful in 10s
Generic: Standards Compliance / Accessibility Check (push) Successful in 11s
Generic: Standards Compliance / Performance Metrics (push) Successful in 11s
Generic: Standards Compliance / Unused Dependencies Check (push) Successful in 1m17s
Generic: Standards Compliance / Terraform Configuration Validation (push) Successful in 18s
Generic: Standards Compliance / Enterprise Readiness Check (push) Successful in 1m4s
Generic: Standards Compliance / Repository Health Check (push) Successful in 1m2s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Standards Compliance / Compliance Summary (push) Has been cancelled
The CLI app name (cmd/main.go app.Name) was still 'gitea', so `mokogit --version`
and the USAGE/help printed 'gitea version X' and 'gitea doctor ...'. Rename it to
'mokogit' (lower-cased per the USAGE convention) and rebrand the two adjacent Gitea
CLI strings (program description, --work-path usage).

Verified: go build ./cmd/. Does NOT rename the executable file (still /app/gitea/gitea);
that touches Dockerfile/systemd/deploy paths and is a separate, larger change.
2026-07-17 01:31:06 -05:00
28 changed files with 30933 additions and 21 deletions
+2 -2
View File
@@ -27,8 +27,8 @@ body:
- type: input
id: gitea-ver
attributes:
label: Gitea Version
description: Gitea version (or commit reference) of your instance
label: MokoGIT Version
description: MokoGIT version (or commit reference) of your instance
validations:
required: true
- type: dropdown
+14
View File
@@ -108,6 +108,7 @@ prime/
# Ignore AI/LLM instruction files
/.claude/
.gemini/
/.cursorrules
/.cursor/
/.goosehints
@@ -130,3 +131,16 @@ Makefile.local
# Local clone of the MCP server (separate repo, not a submodule of this project)
/mcp-mokogit-api/
# ============================================================
# AI client instructions (not version controlled)
# ============================================================
/GEMINI.md
/MOKOAI.md
.mokoai/
# ============================================================
# Local wiki clone (not version controlled)
# ============================================================
wiki/
docs/
+1 -1
View File
@@ -10,7 +10,7 @@
incomplete details will be handled as an invalid report.
-->
- Gitea version (or commit ref):
- MokoGIT version (or commit ref):
- Git version:
- Operating system:
<!-- Please include information on whether you built gitea yourself, used one of our downloads or are using some other package -->
@@ -0,0 +1,96 @@
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# FILE INFORMATION
# DEFGROUP: MokoGIT.Workflow
# INGROUP: MokoGIT
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoGIT
# PATH: /.mokogit/workflows/sync-mokoonyx-theme.yml
# VERSION: 01.00.00
# BRIEF: Import MokoOnyx template CSS + standard light/dark themes into the web UI
# theme layer on every push to dev/main (and on demand). MokoGIT-specific
# (only this repo has a web UI to theme), so it is NOT a Template-* concern.
name: "MokoGIT: Sync MokoOnyx Theme"
on:
workflow_dispatch:
push:
branches:
- dev
- main
concurrency:
group: mokoonyx-theme-sync-${{ github.ref_name }}
cancel-in-progress: false
jobs:
sync:
name: Vendor MokoOnyx theme CSS
runs-on: ubuntu-latest
# [skip ci] on the sync commit prevents this job from re-triggering itself.
if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }}
steps:
- name: Checkout MokoGIT (pushed branch, with push token)
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
token: ${{ secrets.MOKOGIT_TOKEN }}
fetch-depth: 0
- name: Clone MokoOnyx (source of truth for the site design)
env:
MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }}
run: |
MOKOGIT_URL="${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}"
ORG="${{ vars.GITEA_ORG || github.repository_owner }}"
git clone --depth 1 "${MOKOGIT_URL}/${ORG}/MokoOnyx.git" /tmp/mokoonyx
- name: Vendor template CSS + standard/custom themes
run: |
set -euo pipefail
DEST="web_src/css/vendor/mokoonyx"
SRC="/tmp/mokoonyx/source"
mkdir -p "$DEST"
# Raw, verbatim vendored assets (provenance kept; template.css is the full
# Bootstrap bundle — vendored for reference, NOT bundled into the UI).
cp "$SRC/media/css/template.css" "$DEST/template.css"
cp "$SRC/media/css/theme/light.standard.css" "$DEST/light.standard.css"
cp "$SRC/media/css/theme/dark.standard.css" "$DEST/dark.standard.css"
cp "$SRC/templates/light.custom.css" "$DEST/light.custom.css"
cp "$SRC/templates/dark.custom.css" "$DEST/dark.custom.css"
- name: Extract tokens-only, re-scoped to :root (safe to @import)
run: |
set -euo pipefail
DEST="web_src/css/vendor/mokoonyx"
# MokoOnyx custom.css mixes :root[data-bs-theme="X"] token blocks with
# Bootstrap component classes (.btn*, etc). We extract ONLY the token block
# and rewrite the Bootstrap data-bs-theme selector to :root so the tokens
# apply inside the (single) active Gitea theme file — and no Bootstrap
# component classes leak in to collide with Fomantic UI.
for t in light dark; do
awk -v t="$t" '
/:root\[data-bs-theme=/ {print "/* Auto-extracted from vendor/mokoonyx/"t".custom.css :root[data-bs-theme] — re-scoped to :root. DO NOT hand-edit. */"; print ":root {"; f=1; next}
f && /^\}/ {print "}"; f=0; next}
f {print}
' "$DEST/$t.custom.css" > "$DEST/$t.tokens.css"
done
- name: Commit if changed
env:
MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }}
run: |
set -euo pipefail
git config user.name "git-actions[bot]"
git config user.email "git-actions[bot]@mokoconsulting.tech"
git add web_src/css/vendor/mokoonyx
if git diff --cached --quiet; then
echo "MokoOnyx theme CSS already up to date — nothing to commit."
exit 0
fi
git commit -m "chore(theme): sync MokoOnyx theme CSS [skip ci]
Authored-by: Moko Consulting"
git push origin "HEAD:${{ github.ref_name }}"
+3 -3
View File
@@ -112,7 +112,7 @@ func createPIDFile(pidPath string) {
}
func showWebStartupMessage(msg string) {
log.Info("Gitea version: %s%s", setting.AppVer, setting.AppBuiltWith)
log.Info("MokoGIT version: %s%s", setting.AppVer, setting.AppBuiltWith)
log.Info("* RunMode: %s", setting.RunMode)
log.Info("* AppPath: %s", setting.AppPath)
log.Info("* WorkPath: %s", setting.AppWorkPath)
@@ -258,9 +258,9 @@ func runWeb(ctx context.Context, cmd *cli.Command) error {
defer cancel()
if os.Getppid() > 1 && len(os.Getenv("LISTEN_FDS")) > 0 {
log.Info("Restarting Gitea on PID: %d from parent PID: %d", os.Getpid(), os.Getppid())
log.Info("Restarting MokoGIT on PID: %d from parent PID: %d", os.Getpid(), os.Getppid())
} else {
log.Info("Starting Gitea on PID: %d", os.Getpid())
log.Info("Starting MokoGIT on PID: %d", os.Getpid())
}
// Set pid file setting
+2 -2
View File
@@ -1346,8 +1346,8 @@ LEVEL = Info
;; Whether the email of the user should be shown in the Explore Users page
;SHOW_USER_EMAIL = true
;;
;; Set the default theme for the Gitea install
;DEFAULT_THEME = gitea-auto
;; Set the default theme for the MokoGIT install
;DEFAULT_THEME = mokogit-auto
;;
;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`.
;; Leave it empty to allow users to select any theme from "{CustomPath}/public/assets/css/theme-*.css"
+1
View File
@@ -447,6 +447,7 @@ func prepareMigrationTasks() []*migration {
newMigration(367, "Add user allowlists to org protected branch", v1_27.AddUserAllowlistsToOrgProtectedBranch),
newMigration(368, "Drop org from repo manifest (derived from org profile)", v1_27.DropOrgFromRepoManifest),
newMigration(369, "Rename mokogitea-actions system user to mokogit-actions", v1_27.RenameActionsUserToMokoGit),
newMigration(370, "Remap saved gitea-* user themes to mokogit-*", v1_27.RemapGiteaThemesToMokogit),
}
return preparedMigrations
}
+36
View File
@@ -0,0 +1,36 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package v1_27
import "xorm.io/xorm"
// RemapGiteaThemesToMokogit rewrites each user's saved theme from the retired
// upstream "gitea-*" theme names to their "mokogit-*" equivalents, part of the
// MokoGitea -> MokoGIT rebrand. The branding rebrand deleted theme-gitea-*.css,
// so any user still pointing at a gitea-* theme would load a now-missing
// stylesheet (a blank/unstyled page). Each user's light/dark/auto preference is
// preserved; the colorblind variants (which MokoGIT does not ship) collapse to
// the matching base scheme. Idempotent: rows already on a mokogit-* value are
// left untouched by the WHERE clause on the old name.
func RemapGiteaThemesToMokogit(x *xorm.Engine) error {
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
remap := []struct{ old, new string }{
{"gitea-auto", "mokogit-auto"},
{"gitea-auto-colorblind", "mokogit-auto"},
{"gitea-light", "mokogit-light"},
{"gitea-light-colorblind", "mokogit-light"},
{"gitea-dark", "mokogit-dark"},
{"gitea-dark-colorblind", "mokogit-dark"},
}
for _, m := range remap {
if _, err := sess.Exec("UPDATE `user` SET `theme` = ? WHERE `theme` = ?", m.new, m.old); err != nil {
return err
}
}
return sess.Commit()
}
+1 -1
View File
@@ -50,7 +50,7 @@ func (g *Manager) start() {
g.isChild = len(os.Getenv(listenFDsEnv)) > 0 && os.Getppid() > 1
g.notify(statusMsg("Starting Gitea"))
g.notify(statusMsg("Starting MokoGIT"))
g.notify(pidMsg())
go g.handleSignals(g.managerCtx)
+24 -6
View File
@@ -15,18 +15,29 @@ import (
const (
EnvConfigKeyPrefixGitea = "GITEA__"
EnvConfigKeySuffixFile = "__FILE"
// EnvConfigKeyPrefixMokoGit is the MokoGIT-branded env override prefix. It is
// accepted alongside the upstream GITEA__ prefix so config keeps working whether
// the deployment sets GITEA__* or MOKOGIT__* (coordinated rebrand transition).
EnvConfigKeyPrefixMokoGit = "MOKOGIT__"
EnvConfigKeySuffixFile = "__FILE"
)
// envConfigKeyPrefixes lists the accepted env-override prefixes. A given env var
// starts with exactly one of them, so the order does not affect precedence.
var envConfigKeyPrefixes = []string{EnvConfigKeyPrefixMokoGit, EnvConfigKeyPrefixGitea}
const escapeRegexpString = "_0[xX](([0-9a-fA-F][0-9a-fA-F])+)_"
var escapeRegex = regexp.MustCompile(escapeRegexpString)
func CollectEnvConfigKeys() (keys []string) {
for _, env := range os.Environ() {
if strings.HasPrefix(env, EnvConfigKeyPrefixGitea) {
k, _, _ := strings.Cut(env, "=")
keys = append(keys, k)
for _, prefix := range envConfigKeyPrefixes {
if strings.HasPrefix(env, prefix) {
k, _, _ := strings.Cut(env, "=")
keys = append(keys, k)
break
}
}
}
return keys
@@ -116,10 +127,17 @@ func EnvironmentToConfig(cfg ConfigProvider, envs []string) (changed bool) {
continue
}
// parse the environment variable to config section name and key name
// parse the environment variable to config section name and key name,
// accepting either the MOKOGIT__ or upstream GITEA__ override prefix.
envKey := before
envValue := after
ok, sectionName, keyName, useFileValue := decodeEnvironmentKey(EnvConfigKeyPrefixGitea, EnvConfigKeySuffixFile, envKey)
var sectionName, keyName string
var useFileValue bool
for _, prefix := range envConfigKeyPrefixes {
if ok, sectionName, keyName, useFileValue = decodeEnvironmentKey(prefix, EnvConfigKeySuffixFile, envKey); ok {
break
}
}
if !ok {
continue
}
+5
View File
@@ -97,6 +97,11 @@ key = old
changed = EnvironmentToConfig(cfg, []string{"GITEA__sec__key=new"})
assert.False(t, changed)
// the MOKOGIT__ prefix is accepted alongside GITEA__ (rebrand transition)
changed = EnvironmentToConfig(cfg, []string{"MOKOGIT__sec__key=mokogit-new"})
assert.True(t, changed)
assert.Equal(t, "mokogit-new", cfg.Section("sec").Key("key").String())
tmpFile := t.TempDir() + "/the-file"
_ = os.WriteFile(tmpFile, []byte("value-from-file"), 0o644)
changed = EnvironmentToConfig(cfg, []string{"GITEA__sec__key__FILE=" + tmpFile})
+2 -2
View File
@@ -230,9 +230,9 @@ func mustNotRunAsRoot(rootSec ConfigSection) {
if !allowRunAsRoot {
// Special thanks to VLC which inspired the wording of this messaging.
log.Fatal("Gitea is not supposed to be run as root. If you need to use privileged TCP ports please instead use `setcap` and the `cap_net_bind_service` permission.")
log.Fatal("MokoGIT is not supposed to be run as root. If you need to use privileged TCP ports please instead use `setcap` and the `cap_net_bind_service` permission.")
}
log.Warn("You are running Gitea using the root user, and have purposely chosen to skip built-in protections around this. You have been warned against this.")
log.Warn("You are running MokoGIT using the root user, and have purposely chosen to skip built-in protections around this. You have been warned against this.")
}
// HasInstallLock checks the install-lock in ConfigProvider directly, because sometimes the config file is not loaded into setting variables yet.
+2 -2
View File
@@ -617,7 +617,7 @@
"__github/workflows__": "folder-gh-workflows",
"gitea/workflows": "folder-gitea-workflows",
".gitea/workflows": "folder-gitea-workflows",
".mokogitea/workflows": "folder-gitea-workflows",
".mokogit/workflows": "folder-gitea-workflows",
"_gitea/workflows": "folder-gitea-workflows",
"-gitea/workflows": "folder-gitea-workflows",
"__gitea/workflows__": "folder-gitea-workflows",
@@ -5238,7 +5238,7 @@
"__github/workflows__": "folder-gh-workflows-open",
"gitea/workflows": "folder-gitea-workflows-open",
".gitea/workflows": "folder-gitea-workflows-open",
".mokogitea/workflows": "folder-gitea-workflows-open",
".mokogit/workflows": "folder-gitea-workflows-open",
"_gitea/workflows": "folder-gitea-workflows-open",
"-gitea/workflows": "folder-gitea-workflows-open",
"__gitea/workflows__": "folder-gitea-workflows-open",
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 96 KiB

+1 -1
View File
@@ -250,7 +250,7 @@ func prepareDBConsistencyChecks() []consistencyCheck {
func checkDBConsistency(ctx context.Context, logger log.Logger, autofix bool) error {
// make sure DB version is uptodate
if err := db.InitEngineWithMigration(ctx, migrations.EnsureUpToDate); err != nil {
logger.Critical("Model version on the database does not match the current Gitea version. Model consistency will not be checked until the database is upgraded")
logger.Critical("Model version on the database does not match the current MokoGIT version. Model consistency will not be checked until the database is upgraded")
return err
}
consistencyChecks := prepareDBConsistencyChecks()
+1 -1
View File
@@ -1,5 +1,5 @@
name: gitea
summary: Gitea - A painless self-hosted Git service
summary: MokoGIT - A painless self-hosted Git service
description: |
The goal of this project is to make the easiest, fastest, and most painless
way of setting up a self-hosted Git service. With Go, this can be done with
+27
View File
@@ -85,3 +85,30 @@ footer.page-footer {
.markup a:not(.btn):not([class^="ui "]) {
text-decoration-thickness: from-font;
}
/* ---- Login / auth screens: MokoGIT branded backdrop ----
* Gitea reuses the "signin" body class across the whole auth family: the sign-in,
* sign-up, 2FA (twofa / scratch), OpenID, WebAuthn, and change-password pages all
* render <div class="page-content user signin ...">; link-account uses "link-account".
* Targeting those two classes brands every login/auth screen consistently.
* We paint the MokoGIT brand header background (vendored at public/assets/img/header-background.svg,
* served at /assets/img/) behind the centered form via :has() on <body> — no template
* markup is touched, so this survives upstream merges. The form is then lifted onto a
* clean surface so it stays legible over the pattern in both light and dark themes.
* The surface targets `.ui.page.grid > .column` (not `.middle`) so it also covers the
* WebAuthn prompt, whose grid omits the `middle` class. */
body:has(.page-content.user.signin),
body:has(.page-content.user.link-account) {
background-image: url("/assets/img/header-background.svg");
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
}
.page-content.user.signin .ui.page.grid > .column,
.page-content.user.link-account .ui.page.grid > .column {
padding: 1.5rem 1.75rem;
background: var(--color-body);
border-radius: var(--border-radius);
box-shadow: var(--mokogit-shadow-lg);
}
+14
View File
@@ -310,6 +310,20 @@ gitea-theme-meta-info {
--color-syntax-traceback: #ff8686;
--color-syntax-matching-bracket-bg: #00918a48;
--color-syntax-nonmatching-bracket-bg: #cc484848;
/* ===== MokoOnyx surface separation (navy-tinted elevation) =====
Establish a clear 3-step elevation so panels separate from the page:
page (darkest) -> box body -> box header/secondary (lightest). All tones
are navy-tinted (blue channel raised) to stay cohesive with the #112855
brand nav, mirroring mokoconsulting.tech's dark surface hierarchy. */
--color-body: #0b1017; /* page: deepest navy-black */
--color-box-body: #121a24; /* cards/boxes: lifted, navy-tinted */
--color-box-header: #17212e; /* box headers: lightest surface */
--color-box-body-highlight: #17212e;
--color-secondary-bg: #17212e;
--color-card: #141d28;
--color-menu: #141d28;
--color-button: #141d28;
--color-light-border: #ffffff24; /* more visible panel edges on dark */
accent-color: var(--color-accent);
color-scheme: dark;
}
@@ -310,6 +310,18 @@ gitea-theme-meta-info {
--color-syntax-traceback: #c00000;
--color-syntax-matching-bracket-bg: #00b5ad38;
--color-syntax-nonmatching-bracket-bg: #db282838;
/* ===== MokoOnyx surface separation (mokoconsulting.tech gray scale) =====
Give the page a soft gray base so white cards/boxes visibly lift off it,
with a defined gray-300 border tone for clear panel edges. Mirrors the
surface hierarchy of mokoconsulting.tech (MokoOnyx --gray-100/200/300). */
--color-body: #f0f3f6; /* page: soft gray (was #fff, blended into cards) */
--color-box-body: #ffffff; /* cards/boxes: white, now lift off the gray page */
--color-box-header: #e9edf1; /* box headers: gray-200 tone */
--color-secondary-bg: #e7ebef; /* MokoOnyx gray-200 */
--color-card: #ffffff;
--color-menu: #ffffff;
--color-button: #ffffff;
--color-light-border: #0000172e; /* stronger gray-300 border definition */
accent-color: var(--color-accent);
color-scheme: light;
}
+53
View File
@@ -0,0 +1,53 @@
<!--
Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
SPDX-License-Identifier: GPL-3.0-or-later
-->
# Vendored MokoOnyx theme CSS
These files are **auto-synced** from [`MokoConsulting/MokoOnyx`](https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx)
(the Joomla template that drives mokoconsulting.tech) by
`.mokogit/workflows/sync-mokoonyx-theme.yml` on every push to `dev`/`main`
(and via `workflow_dispatch`). **Do not hand-edit** — changes are overwritten on
the next sync. Edit the source in the MokoOnyx repo instead.
## Files
| File | Source in MokoOnyx | Purpose |
|---|---|---|
| `template.css` | `source/media/css/template.css` | Full Bootstrap 5 template bundle. Vendored for **reference only** — NOT bundled into the UI (its component classes would collide with Fomantic UI). |
| `light.standard.css` / `dark.standard.css` | `source/media/css/theme/{light,dark}.standard.css` | The standard light/dark Bootstrap theme sheets (tokens + components). Reference. |
| `light.custom.css` / `dark.custom.css` | `source/templates/{light,dark}.custom.css` | The editable site token overrides (tokens + components). Reference / source for the extract below. |
| `light.tokens.css` / `dark.tokens.css` | *(generated)* | **Tokens only**, extracted from the `custom.css` `:root[data-bs-theme]` block and re-scoped to `:root`. Bootstrap component classes are stripped, so these are **safe to `@import`** into a Gitea theme without colliding with Fomantic. |
## Adopting the tokens in the web UI (token/variable parity)
MokoGIT uses Fomantic UI + Tailwind; MokoOnyx is Bootstrap 5. We take **token
parity**: import MokoOnyx's design tokens and map them onto Gitea's `--color-*`
variables, keeping Gitea's markup (so it survives upstream merges). To wire a
theme, add to the **top** of `web_src/css/themes/theme-mokogit-light.css`
(and `theme-mokogit-dark.css` with the dark tokens):
```css
@import "../vendor/mokoonyx/light.tokens.css"; /* brings MokoOnyx vars into :root */
```
then map the ones that matter onto Gitea vars (fallbacks keep the current values
if a token is ever missing):
```css
:root {
--color-primary: var(--accent-color-primary, #010156); /* review: primary vs accent */
--color-body: var(--body-bg, #ffffff);
--color-text: var(--body-color, #24292f);
--fonts-proportional: var(--font-sans-serif, -apple-system, "Segoe UI", Roboto);
--fonts-monospace: var(--font-monospace, ui-monospace, monospace);
}
```
> The exact color mapping (which MokoOnyx var drives which Gitea `--color-*`)
> should be **tuned visually** on `dev` across light/dark/auto — that step is
> intentionally left out of the sync so an automated import can never silently
> recolor the UI. The `auto` theme inherits this automatically because
> `theme-mokogit-auto.css` `@import`s the light/dark files under
> `(prefers-color-scheme)`.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+882
View File
@@ -0,0 +1,882 @@
/* Auto-extracted from vendor/mokoonyx/dark.custom.css :root[data-bs-theme] — re-scoped to :root. DO NOT hand-edit. */
:root {
color-scheme: dark;
/* ===== BRAND & THEME COLORS ===== */
--color-primary: #112855;
--accent-color-primary: #3f8ff0;
--accent-color-secondary: #6fb3ff;
/* ===== TYPOGRAPHY & BODY ===== */
--font-sans-serif: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--body-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--body-font-size: 1rem;
--body-font-weight: 400;
--body-line-height: 1.5;
--body-color: #e6ebf1;
--body-color-rgb: 230, 235, 241;
--body-bg: #0e1318;
--body-bg-rgb: 14, 19, 24;
--heading-color: #f1f5f9;
--emphasis-color: #fff;
--emphasis-color-rgb: 255, 255, 255;
--secondary-color: #e6ebf1bf;
--secondary-color-rgb: 230, 235, 241;
--tertiary-color: #e6ebf180;
--tertiary-color-rgb: 230, 235, 241;
--muted-color: #6d757e;
--code-color: black;
--code-color-ink: var(--code-color, #e93f8e);
--code-bg-color: lightgreen;
--highlight-color: #111;
--highlight-bg: #ffe28a1a;
/* ===== STANDARD COLORS ===== */
--blue: #91a4ff;
--indigo: #b19cff;
--purple: #c0a5ff;
--pink: #ff8fc0;
--red: #ff7a73;
--orange: #ff9c4d;
--yellow: #ffd166;
--green: #78d694;
--teal: #76e3ff;
--cyan: #6fb7ff;
--black: #000;
--white: #fff;
/* ===== GRAY SCALE ===== */
--gray-100: #161a20;
--gray-200: #1b2027;
--gray-300: #222831;
--gray-400: #2b323b;
--gray-500: #36404a;
--gray-600: #48525d;
--gray-700: #5b6672;
--gray-800: #cfd6de;
--gray-900: #e6ebf1;
--white-rgb: 255, 255, 255;
--black-rgb: 0, 0, 0;
/* ===== OPACITY UTILITIES ===== */
--opacity-0: 0;
--opacity-5: 0.05;
--opacity-10: 0.1;
--opacity-15: 0.15;
--opacity-20: 0.2;
--opacity-25: 0.25;
--opacity-30: 0.3;
--opacity-50: 0.5;
--opacity-75: 0.75;
--opacity-100: 1;
/* ===== LAYOUT & SPACING ===== */
--padding-x: 0.15rem;
--padding-y: 0.15rem;
--bg-opacity: 1;
--nav-toggle-size: 3rem;
--gradient: linear-gradient(180deg, #ffffff26, #fff0);
--secondary-bg: #151b22;
--secondary-bg-rgb: 21, 27, 34;
--tertiary-bg: #10151b;
--tertiary-bg-rgb: 16, 21, 27;
--hr-color: var(--border-color, #dfe3e7);
--border-color-soft: var(--border-color, #dfe3e7);
--kbd-bg: var(--secondary-bg, #eaedf0);
--kbd-ink: var(--body-bg, #fff);
--toc-bg: var(--secondary-bg, #eaedf0);
--toc-ink: var(--color-primary, #112855);
--selection-bg: var(--highlight-bg, #fbeea8);
--selection-ink: var(--body-color, #22262a);
--border: 5px;
/* ===== BREAKPOINTS ===== */
--bp-xs: 0;
--bp-sm: 576px;
--bp-md: 768px;
--bp-lg: 992px;
--bp-xl: 1200px;
/* ===== BORDERS ===== */
--border-width: 1px;
--border-style: solid;
--border-color: #2b323b;
--border-color-translucent: #ffffff26;
--border-radius: .25rem;
--border-radius-sm: .2rem;
--border-radius-lg: .3rem;
--border-radius-xl: .3rem;
--border-radius-xxl: 2rem;
--border-radius-2xl: var(--border-radius-xxl);
--border-radius-pill: 50rem;
/* ===== SHADOWS ===== */
--box-shadow: 0 .5rem 1rem #00000066;
--box-shadow-sm: 0 .125rem .25rem #00000040;
--box-shadow-lg: 0 1rem 3rem #00000080;
--box-shadow-inset: inset 0 1px 2px #00000040;
/* ===== COMMON SHADOW COLORS ===== */
--shadow-color-light: rgba(var(--black-rgb), var(--opacity-30));
--shadow-color-medium: rgba(var(--black-rgb), var(--opacity-50));
--shadow-color-dark: rgba(var(--black-rgb), var(--opacity-75));
--border-color-translucent: rgba(var(--white-rgb), var(--opacity-10));
--highlight-translucent: rgba(var(--white-rgb), var(--opacity-5));
/* ===== NAVIGATION ===== */
--mainmenu-nav-link-color: #fff;
--nav-text-color: gray;
--nav-bg-color: var(--color-primary);
/* ===== NAVBAR ===== */
--navbar-padding-x: 1rem;
--navbar-padding-y: 0.5rem;
--navbar-color: var(--nav-text-color);
--navbar-active-color: var(--mainmenu-nav-link-color);
--navbar-disabled-color: #6c757d;
--navbar-brand-padding-y: 0.3125rem;
--navbar-brand-margin-end: 1rem;
--navbar-brand-font-size: 1.25rem;
--navbar-brand-color: var(--nav-text-color);
--navbar-brand-active-color: var(--mainmenu-nav-link-color);
--navbar-nav-link-padding-x: 0.5rem;
--navbar-toggler-padding-y: 0.25rem;
--navbar-toggler-padding-x: 0.75rem;
--navbar-toggler-font-size: 1.25rem;
--navbar-toggler-border-color: rgba(255, 255, 255, 0.1);
--navbar-toggler-border-radius: 0.25rem;
--navbar-toggler-focus-width: 0.25rem;
--navbar-toggler-transition: box-shadow 0.15s ease-in-out;
--nav-link-padding-x: 1rem;
--nav-link-padding-y: 0.5rem;
--nav-link-font-weight: 400;
--nav-link-color: var(--nav-text-color);
--nav-link-active-color: var(--mainmenu-nav-link-color);
--nav-link-disabled-color: #6c757d;
/* ===== LINKS ===== */
--color-link: white;
--color-hover: gray;
--color-active: var(--mainmenu-nav-link-color);
--link-color: #8ab4f8;
--link-color-rgb: 138, 180, 248;
--link-decoration: underline;
--link-hover-color: #c3d6ff;
--link-hover-color-rgb: 195, 214, 255;
--link-active-color: var(--link-color);
/* ===== LINK UTILITY COLORS ===== */
--link-primary-color: hsl(240, 98%, 50%);
--link-primary-hover-color: hsl(240, 98%, 45%);
--link-secondary-color: hsl(210, 15%, 70%);
--link-secondary-hover-color: hsl(210, 15%, 65%);
--link-success-color: hsl(120, 40%, 60%);
--link-success-hover-color: hsl(120, 40%, 55%);
--link-info-color: hsl(207, 60%, 65%);
--link-info-hover-color: hsl(207, 60%, 60%);
--link-warning-color: hsl(38, 100%, 65%);
--link-warning-hover-color: hsl(38, 100%, 60%);
--link-danger-color: hsl(3, 85%, 65%);
--link-danger-hover-color: hsl(3, 85%, 60%);
--link-light-color: hsl(210, 20%, 90%);
--link-light-hover-color: hsl(210, 20%, 85%);
--link-dark-color: hsl(210, 10%, 35%);
--link-dark-hover-color: hsl(210, 10%, 30%);
/* ===== HEADER BACKGROUND ===== */
--header-background-color: #1a1f2b;
--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg');
--header-background-attachment: fixed;
--header-background-repeat: repeat;
--header-background-size: auto;
/* ===== CONTAINER BACKGROUNDS ===== */
/* Below Topbar Container */
--container-below-topbar-bg-image: none;
--container-below-topbar-bg-color: transparent;
--container-below-topbar-bg-position: center;
--container-below-topbar-bg-attachment: fixed;
--container-below-topbar-bg-repeat: no-repeat;
--container-below-topbar-bg-size: cover;
--container-below-topbar-border: none;
--container-below-topbar-border-radius: 0;
/* Top A Container */
--container-top-a-bg-image: none;
--container-top-a-bg-color: transparent;
--container-top-a-bg-position: center;
--container-top-a-bg-attachment: fixed;
--container-top-a-bg-repeat: no-repeat;
--container-top-a-bg-size: cover;
--container-top-a-border: none;
--container-top-a-border-radius: 0;
/* Top B Container */
--container-top-b-bg-image: none;
--container-top-b-bg-color: transparent;
--container-top-b-bg-position: center;
--container-top-b-bg-attachment: fixed;
--container-top-b-bg-repeat: no-repeat;
--container-top-b-bg-size: cover;
--container-top-b-border: none;
--container-top-b-border-radius: 0;
/* TOC Container */
--container-toc-bg: var(--secondary-bg);
--container-toc-color: #dbe3ff;
/* Sidebar Container */
--container-sidebar-bg-image: none;
--container-sidebar-bg-color: transparent;
--container-sidebar-bg-position: center;
--container-sidebar-bg-attachment: scroll;
--container-sidebar-bg-repeat: repeat;
--container-sidebar-bg-size: auto;
--container-sidebar-border: none;
--container-sidebar-border-radius: 0;
/* Bottom A Container */
--container-bottom-a-bg-image: none;
--container-bottom-a-bg-color: transparent;
--container-bottom-a-bg-position: center;
--container-bottom-a-bg-attachment: fixed;
--container-bottom-a-bg-repeat: no-repeat;
--container-bottom-a-bg-size: cover;
--container-bottom-a-border: none;
--container-bottom-a-border-radius: 5px;
/* Bottom B Container */
--container-bottom-b-bg-image: none;
--container-bottom-b-bg-color: transparent;
--container-bottom-b-bg-position: center;
--container-bottom-b-bg-attachment: fixed;
--container-bottom-b-bg-repeat: no-repeat;
--container-bottom-b-bg-size: cover;
--container-bottom-b-border: none;
--container-bottom-b-border-radius: 0;
/* ===== FOCUS & FORMS ===== */
--focus-ring-width: .25rem;
--focus-ring-opacity: .6;
--focus-ring-color: #5472ff66;
--input-color: #e6ebf1;
--input-bg: #1a2332;
--input-border-color: #3a4250;
--input-focus-border-color: #5472ff;
--input-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.25);
--input-placeholder-color: #8894aa;
--input-disabled-bg: #0f1318;
--input-disabled-border-color: #2b323b;
--input-file-button-active-bg: #2b3441;
--form-range-thumb-active-bg: #4a5766;
--form-valid-color: #78d694;
--form-valid-border-color: #78d694;
--form-invalid-color: #ff8e86;
--form-invalid-border-color: #ff8e86;
/* ===== BUTTONS ===== */
--btn-border-radius: var(--border-radius);
--btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 1px 1px rgba(0, 0, 0, 0.3);
/* ===== ACCORDION ===== */
--accordion-color: var(--body-color);
--accordion-bg: var(--body-bg);
--accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
--accordion-border-color: var(--border-color);
--accordion-border-width: 1px;
--accordion-border-radius: 0.25rem;
--accordion-inner-border-radius: calc(0.25rem - 1px);
--accordion-btn-padding-x: 1.25rem;
--accordion-btn-padding-y: 1rem;
--accordion-btn-color: var(--body-color);
--accordion-btn-bg: var(--accordion-bg);
--accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23e6ebf1'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--accordion-btn-icon-width: 1.25rem;
--accordion-btn-icon-transform: rotate(-180deg);
--accordion-btn-icon-transition: transform 0.2s ease-in-out;
--accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%238ab4f8'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--accordion-btn-focus-border-color: var(--input-focus-border-color);
--accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.25);
--accordion-body-padding-x: 1.25rem;
--accordion-body-padding-y: 1rem;
--accordion-active-color: var(--link-color);
--accordion-active-bg: var(--secondary-bg);
/* ===== ALERT ===== */
--alert-bg: transparent;
--alert-padding-x: 1rem;
--alert-padding-y: 1rem;
--alert-margin-bottom: 1rem;
--alert-color: #000;
--alert-border-color: transparent;
--alert-border: 1px solid var(--alert-border-color);
--alert-border-radius: 0.25rem;
/* ===== ALERT LINK COLORS ===== */
--alert-primary-link-color: #b3c1ff;
--alert-secondary-link-color: #9fa6ad;
--alert-success-link-color: #a0e5b3;
--alert-info-link-color: #8eccf2;
--alert-warning-link-color: #ffe4a0;
--alert-danger-link-color: #ffa8a3;
--alert-light-link-color: #f0f4f8;
--alert-dark-link-color: #9fa6ad;
/* ===== BACKDROP ===== */
--backdrop-zindex: 1040;
--backdrop-bg: hsl(0, 0%, 0%);
--backdrop-opacity: 0.5;
/* ===== BADGE ===== */
--badge-padding-x: 0.65em;
--badge-padding-y: 0.35em;
--badge-font-size: 0.75em;
--badge-font-weight: 700;
--badge-color: var(--body-color);
--badge-border-radius: 0.25rem;
/* ===== BREADCRUMB ===== */
--breadcrumb-padding-x: 0;
--breadcrumb-padding-y: 0;
--breadcrumb-margin-bottom: 1rem;
--breadcrumb-bg: ;
--breadcrumb-border-radius: ;
--breadcrumb-divider-color: var(--gray-600);
--breadcrumb-item-padding-x: 0.5rem;
--breadcrumb-item-active-color: var(--link-color);
/* ===== CARDS ===== */
--card-spacer-y: 1rem;
--card-spacer-x: 1rem;
--card-title-spacer-y: 0.5rem;
--card-border-width: 1px;
--card-border-color: var(--border-color);
--card-border-radius: var(--border-radius);
--card-box-shadow: none;
--card-inner-border-radius: calc(var(--border-radius) - 1px);
--card-cap-padding-y: 0.5rem;
--card-cap-padding-x: 1rem;
--card-cap-bg: rgba(255, 255, 255, 0.03);
--card-cap-color: var(--body-color);
--card-height: auto;
--card-color: var(--body-color);
--card-bg: var(--secondary-bg);
--card-img-overlay-padding: 1rem;
--card-group-margin: 0.75rem;
/* ===== DROPDOWN ===== */
--dropdown-zindex: 1000;
--dropdown-min-width: 10rem;
--dropdown-padding-x: 0;
--dropdown-padding-y: 0.5rem;
--dropdown-spacer: 0.125rem;
--dropdown-font-size: 1rem;
--dropdown-color: var(--body-color);
--dropdown-bg: var(--secondary-bg);
--dropdown-border-color: var(--border-color-translucent);
--dropdown-border-radius: 0.25rem;
--dropdown-border-width: 1px;
--dropdown-inner-border-radius: calc(0.25rem - 1px);
--dropdown-divider-bg: var(--border-color-translucent);
--dropdown-divider-margin-y: 0.5rem;
--dropdown-box-shadow: 0 0.5rem 1rem var(--shadow-color-medium);
--dropdown-link-color: var(--body-color);
--dropdown-link-active-color: var(--body-color);
--dropdown-link-active-bg: hsl(240, 98%, 17%);
--dropdown-link-disabled-color: var(--gray-600);
--dropdown-item-padding-x: 1rem;
--dropdown-item-padding-y: 0.25rem;
--dropdown-header-color: var(--gray-600);
--dropdown-header-padding-x: 1rem;
--dropdown-header-padding-y: 0.5rem;
/* ===== LIST GROUP ===== */
--list-group-color: var(--body-color);
--list-group-bg: var(--secondary-bg);
--list-group-border-color: rgba(var(--white-rgb), 0.125);
--list-group-border-width: 1px;
--list-group-border-radius: 0.25rem;
--list-group-item-padding-x: 1rem;
--list-group-item-padding-y: 0.5rem;
--list-group-action-color: var(--gray-800);
--list-group-action-active-color: var(--body-color);
--list-group-action-active-bg: var(--tertiary-bg);
--list-group-disabled-color: var(--gray-600);
--list-group-disabled-bg: var(--secondary-bg);
--list-group-active-color: var(--body-color);
--list-group-active-bg: hsl(240, 98%, 17%);
--list-group-active-border-color: hsl(240, 98%, 17%);
/* ===== LIST GROUP ITEM COLORS ===== */
--list-group-item-primary-color: #8ca3ff;
--list-group-item-primary-bg: #1a2550;
--list-group-item-primary-active-bg: #223066;
--list-group-item-secondary-color: #9fa6ad;
--list-group-item-secondary-bg: #2b323b;
--list-group-item-secondary-active-bg: #363d47;
--list-group-item-success-color: #a0e5b3;
--list-group-item-success-bg: #1e3d2d;
--list-group-item-success-active-bg: #275538;
--list-group-item-info-color: #8eccf2;
--list-group-item-info-bg: #1a3448;
--list-group-item-info-active-bg: #234459;
--list-group-item-warning-color: #ffe4a0;
--list-group-item-warning-bg: #4a3410;
--list-group-item-warning-active-bg: #5c4216;
--list-group-item-danger-color: #ffa8a3;
--list-group-item-danger-bg: #4a1e1c;
--list-group-item-danger-active-bg: #5c2823;
--list-group-item-light-color: #e9ecef;
--list-group-item-light-bg: #1e2430;
--list-group-item-light-active-bg: #282f3d;
--list-group-item-dark-color: #48525d;
--list-group-item-dark-bg: #0e1318;
--list-group-item-dark-active-bg: #161b22;
/* ===== MODAL ===== */
--modal-zindex: 1050;
--modal-width: 500px;
--modal-padding: 1rem;
--modal-margin: 0.5rem;
--modal-color: ;
--modal-bg: var(--secondary-bg);
--modal-border-color: var(--border-color-translucent);
--modal-border-width: 1px;
--modal-border-radius: 0.3rem;
--modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.3);
--modal-inner-border-radius: calc(0.3rem - 1px);
--modal-header-padding-x: 1rem;
--modal-header-padding-y: 1rem;
--modal-header-padding: 1rem 1rem;
--modal-header-border-color: var(--border-color);
--modal-header-border-width: 1px;
--modal-title-line-height: 1.5;
--modal-footer-gap: 0.5rem;
--modal-footer-bg: ;
--modal-footer-border-color: var(--border-color);
--modal-footer-border-width: 1px;
/* ===== NAV TABS ===== */
--nav-tabs-border-width: 1px;
--nav-tabs-border-color: var(--border-color);
--nav-tabs-border-radius: 0.25rem;
--nav-tabs-link-active-color: var(--body-color);
--nav-tabs-link-active-bg: var(--secondary-bg);
--nav-tabs-link-active-border-color: var(--border-color) var(--border-color) var(--secondary-bg);
/* ===== NAV PILLS ===== */
--nav-pills-border-radius: 0.25rem;
--nav-pills-link-active-color: var(--body-color);
--nav-pills-link-active-bg: hsl(240, 98%, 17%);
/* ===== OFFCANVAS ===== */
--offcanvas-zindex: 1045;
--offcanvas-width: 400px;
--offcanvas-height: 30vh;
--offcanvas-padding-x: 1rem;
--offcanvas-padding-y: 1rem;
--offcanvas-color: var(--body-color);
--offcanvas-bg: var(--body-bg);
--offcanvas-border-width: 1px;
--offcanvas-border-color: var(--border-color-translucent);
--offcanvas-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.3);
/* ===== PAGINATION ===== */
--pagination-padding-x: 0.75rem;
--pagination-padding-y: 0.375rem;
--pagination-font-size: 1rem;
--pagination-color: var(--link-color);
--pagination-bg: var(--secondary-bg);
--pagination-border-width: 1px;
--pagination-border-color: var(--border-color);
--pagination-border-radius: 0.25rem;
--pagination-focus-color: var(--link-active-color);
--pagination-focus-bg: var(--tertiary-bg);
--pagination-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.25);
--pagination-active-color: var(--body-color);
--pagination-active-bg: hsl(240, 98%, 17%);
--pagination-active-border-color: hsl(240, 98%, 17%);
--pagination-disabled-color: var(--gray-600);
--pagination-disabled-bg: var(--secondary-bg);
--pagination-disabled-border-color: var(--border-color);
/* ===== POPOVER ===== */
--popover-zindex: 1060;
--popover-max-width: 276px;
--popover-font-size: 0.875rem;
--popover-bg: var(--secondary-bg);
--popover-border-width: 1px;
--popover-border-color: var(--border-color-translucent);
--popover-border-radius: 0.3rem;
--popover-inner-border-radius: calc(0.3rem - 1px);
--popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.4);
--popover-header-padding-x: 1rem;
--popover-header-padding-y: 0.5rem;
--popover-header-font-size: 1rem;
--popover-header-color: ;
--popover-header-bg: var(--tertiary-bg);
--popover-body-padding-x: 1rem;
--popover-body-padding-y: 1rem;
--popover-body-color: var(--body-color);
--popover-arrow-width: 1rem;
--popover-arrow-height: 0.5rem;
--popover-arrow-border: var(--popover-border-color);
/* ===== PROGRESS ===== */
--progress-height: 1rem;
--progress-font-size: 0.75rem;
--progress-bg: var(--secondary-bg);
--progress-border-radius: 0.25rem;
--progress-box-shadow: inset 0 1px 2px rgba(var(--black-rgb), 0.3);
--progress-bar-color: var(--body-color);
--progress-bar-bg: hsl(240, 98%, 40%);
--progress-bar-transition: width 0.6s ease;
/* ===== SPINNER ===== */
--spinner-width: 2rem;
--spinner-height: 2rem;
--spinner-vertical-align: -0.125em;
--spinner-border-width: 0.25em;
--spinner-animation-speed: 0.75s;
/* ===== TABLE ===== */
--table-color: var(--body-color);
--table-bg: transparent;
--table-border-color: var(--border-color);
--table-accent-bg: transparent;
--table-striped-color: var(--body-color);
--table-striped-bg: rgba(var(--white-rgb), var(--opacity-5));
--table-active-color: var(--body-color);
--table-active-bg: rgba(var(--white-rgb), 0.1);
/* ===== TOAST ===== */
--toast-zindex: 1090;
--toast-padding-x: 0.75rem;
--toast-padding-y: 0.5rem;
--toast-spacing: 1em;
--toast-max-width: 350px;
--toast-font-size: 0.875rem;
--toast-color: ;
--toast-bg: rgba(21, 27, 34, 0.9);
--toast-border-width: 1px;
--toast-border-color: var(--border-color-translucent);
--toast-border-radius: 0.25rem;
--toast-box-shadow: 0 0.5rem 1rem var(--shadow-color-medium);
--toast-header-color: var(--gray-600);
--toast-header-bg: rgba(21, 27, 34, 0.85);
--toast-header-border-color: rgba(var(--white-rgb), var(--opacity-10));
/* ===== TOOLTIP ===== */
--tooltip-zindex: 1070;
--tooltip-max-width: 200px;
--tooltip-padding-x: 0.5rem;
--tooltip-padding-y: 0.25rem;
--tooltip-margin: ;
--tooltip-font-size: 0.875rem;
--tooltip-color: var(--body-color);
--tooltip-bg: hsl(0, 0%, 0%);
--tooltip-border-radius: 0.25rem;
--tooltip-opacity: 0.9;
--tooltip-arrow-width: 0.8rem;
--tooltip-arrow-height: 0.4rem;
/* ===== BOOTSTRAP PALETTE ===== */
--primary: #010156;
--secondary: #48525d;
--success: #4aa664;
--info: #4f7aa0;
--warning: #c77a00;
--danger: #c23a31;
--light: #1b2027;
--dark: #0f1318;
--primary-rgb: 1,1,86;
--secondary-rgb: 72,82,93;
--success-rgb: 74,166,100;
--info-rgb: 79,122,160;
--warning-rgb: 199,122,0;
--danger-rgb: 194,58,49;
--light-rgb: 27,32,39;
--dark-rgb: 15,19,24;
--primary-text-emphasis: #c7ccff;
--secondary-text-emphasis: #cfd6de;
--success-text-emphasis: #bde8c9;
--info-text-emphasis: #bcd6ee;
--warning-text-emphasis: #ffd9a6;
--danger-text-emphasis: #ffb7b2;
--light-text-emphasis: #d2d8df;
--dark-text-emphasis: #d2d8df;
--primary-bg-subtle: #0b1030;
--secondary-bg-subtle: #1e2430;
--success-bg-subtle: #0f2a1b;
--info-bg-subtle: #0d2232;
--warning-bg-subtle: #2a1e06;
--danger-bg-subtle: #2d1110;
--light-bg-subtle: #12161d;
--dark-bg-subtle: #1e2430;
--primary-border-subtle: #2b3a7a;
--secondary-border-subtle: #2b323b;
--success-border-subtle: #2b5b40;
--info-border-subtle: #254861;
--warning-border-subtle: #5a3c0e;
--danger-border-subtle: #5c2723;
--light-border-subtle: #222831;
--dark-border-subtle: #2b323b;
/* ===== HERO / BANNER OVERLAY ===== */
--hero-height: 70vh;
--hero-color: var(--body-color);
--hero-bg-repeat: no-repeat;
--hero-bg-attachment: fixed;
--hero-bg-position: top center;
--hero-bg-size: cover;
--hero-border-bottom: solid var(--accent-color-secondary);
--hero-overlay-bg: hsla(0, 0%, 0%, 0.3);
--hero-overlay-bg-position: center;
--hero-overlay-bg-size: cover;
--hero-overlay-padding: 1em;
--hero-overlay-text-align: center;
--hero-overlay-text-color: var(--body-color);
/* ===== HERO VARIANTS ===== */
/* Primary — deep navy, dark overlay */
--hero-primary-bg-color: #0d1e3a;
--hero-primary-overlay: linear-gradient(rgba(13, 30, 58, .65), rgba(13, 30, 58, .65));
--hero-primary-color: #f1f5f9;
/* Secondary — darker navy, heavier overlay */
--hero-secondary-bg-color: #080f1e;
--hero-secondary-overlay: linear-gradient(rgba(8, 15, 30, .80), rgba(8, 15, 30, .80));
--hero-secondary-color: #f1f5f9;
/* ===== HERO CARD (inner .hero element) ===== */
/* Default card — uses primary variant values */
--hero-card-bg: var(--hero-primary-bg-color);
--hero-card-color: white;
--hero-card-overlay: var(--hero-primary-overlay);
--hero-card-border-radius: .5rem;
--hero-card-padding-x: 2rem;
--hero-card-padding-y: 3rem;
--hero-card-max-width: 800px;
/* Alternative card — uses secondary variant values */
--hero-alt-card-bg: var(--hero-secondary-bg-color);
--hero-alt-card-color: var(--hero-secondary-color);
--hero-alt-card-overlay: var(--hero-secondary-overlay);
--hero-alt-card-border-radius: .5rem;
--hero-alt-card-padding-x: 2rem;
--hero-alt-card-padding-y: 3rem;
--hero-alt-card-max-width: 600px;
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
--block-color-1: var(--secondary-bg);
--block-text-1: var(--body-color);
--block-color-2: var(--accent-color-primary);
--block-text-2: #fff;
--block-color-3: rgba(238, 194, 52, .15);
--block-text-3: var(--body-color);
--block-color-4: rgba(74, 166, 100, .15);
--block-text-4: var(--body-color);
/* ===== BLOCK COLOR OVERRIDES ===== */
--block-highlight-bg: var(--accent-color-primary);
--block-highlight-text: #fff;
--block-cta-bg: var(--color-primary);
--block-cta-text: #f1f5f9;
--block-alert-bg: var(--danger, #c23a31);
--block-alert-text: #fff;
/* ===== FOOTER ===== */
--footer-padding-top: 1rem;
--footer-padding-bottom: 80px;
--footer-grid-padding-y: 2.5rem;
--footer-grid-padding-x: 0.5em;
/* ===== THEME FAB ===== */
--theme-fab-bg: #e6ebf1;
--theme-fab-color: #0e1318;
--theme-fab-btn-bg: transparent;
--theme-fab-border: rgba(0, 0, 0, 0.15);
/* ===== OFFLINE PAGE ===== */
--offline-card-bg: rgba(0, 0, 0, 0.6);
/* ===== COMPONENT-SPECIFIC COLORS ===== */
--mod-finder-link-hover: #5a6470;
--form-legend-color: #9fa6ad;
--border-gray: #3a4250;
--subhead-color: #9fa6ad;
--box-shadow-gray: #1a2027;
--btn-active-text-gray: #7a8490;
--indicator-success-bg: var(--success);
--item-list-color: #2a2f34;
--notification-badge-bg: var(--danger);
--content-bg-gray: #2b323b;
--taba-btn-green: #5a9c2f;
--taba-btn-blue: #3d75a8;
--taba-btn-red: #c43620;
--taba-btn-gray: #6a7080;
--taba-msg-bg: #1e2430;
--toc-link-color: #9fa6ad;
--toc-link-active-color: #91a4ff;
--choices-disabled-bg: #2b323b;
--choices-input-bg: var(--body-bg);
--choices-border-light: #48525d;
--choices-arrow-color: #9fa6ad;
--choices-inner-bg: #1a2027;
--choices-focused-border: #5472ff;
--choices-dropdown-bg: var(--body-bg);
--choices-item-bg: #1a5f75;
--choices-item-border: #1a748f;
--choices-item-hover-bg: #1a748f;
--choices-item-hover-border: #1a8aa8;
--choices-item-disabled-bg: #48525d;
--choices-item-disabled-border: #36404a;
--choices-item-highlighted: #2b323b;
--choices-input-inner-bg: #1a2027;
/* ===== VIRTUEMART (VM) ===== */
/* VM Surfaces */
--vm-surface: var(--secondary-bg);
--vm-surface-2: var(--tertiary-bg);
--vm-text: var(--body-color);
--vm-text-strong: #ffffff;
--vm-text-muted: var(--gray-700);
--vm-border: var(--border-color);
--vm-price-color: var(--success);
/* VM Layout and Density */
--vm-container-max-width: 1200px;
--vm-section-gap: 2rem;
--vm-block-radius: var(--border-radius);
--vm-block-shadow: var(--box-shadow-sm);
/* VM Typography */
--vm-category-title-size: 2rem;
--vm-subcategory-title-size: 1.5rem;
--vm-page-title-size: 1.75rem;
--vm-products-type-title-size: 1.25rem;
--vm-product-title-size: 1.125rem;
--vm-product-title-weight: 500;
--vm-products-type-title-weight: 600;
--vm-price-size: 1.5rem;
--vm-price-detail-size: 1.125rem;
--vm-price-desc-size: 0.875rem;
/* VM Controls */
--vm-input-radius: var(--border-radius);
--vm-input-shadow: var(--box-shadow-sm);
--vm-qty-width: 80px;
--vm-cart-dropdown-min-width: 300px;
/* VM Alerts */
--vm-alert-radius: var(--border-radius);
--vm-alert-shadow: var(--box-shadow-sm);
--vm-availability-bg: var(--success-bg-subtle);
--vm-availability-text: var(--success);
/* VM Buttons */
--vm-btn-padding-x: 1rem;
--vm-btn-padding-y: 0.5rem;
--vm-btn-radius: var(--border-radius);
--vm-btn-shadow: var(--box-shadow-sm);
--vm-btn-primary-bg: var(--primary);
--vm-btn-primary-text: #ffffff;
--vm-btn-primary-border: var(--primary);
--vm-btn-secondary-bg: var(--secondary);
--vm-btn-secondary-text: #ffffff;
--vm-btn-secondary-border: var(--secondary);
/* VM Image Overlay Controls */
--vm-image-overlay-gap-x: 0.5rem;
--vm-image-overlay-gap-y: 0.5rem;
--vm-image-overlay-raise: 0.25rem;
--vm-image-overlay-btn-size: 2.5rem;
--vm-image-overlay-btn-radius: 50%;
--vm-image-overlay-btn-bg: rgba(0, 0, 0, 0.7);
--vm-image-overlay-btn-bg-hover: rgba(0, 0, 0, 0.85);
--vm-image-overlay-btn-border-color: rgba(255, 255, 255, 0.2);
--vm-image-overlay-btn-border-width: 1px;
--vm-image-overlay-btn-color: var(--body-color);
--vm-image-overlay-btn-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
/* VM Vendor Menu */
--vm-vendor-menu-bg: var(--secondary-bg);
--vm-vendor-menu-border: var(--border-color);
--vm-vendor-menu-radius: var(--border-radius);
--vm-vendor-menu-shadow: var(--box-shadow-sm);
--vm-vendor-menu-item-gap: 0.25rem;
--vm-vendor-menu-item-padding-x: 1rem;
--vm-vendor-menu-item-padding-y: 0.5rem;
--vm-vendor-menu-pill-radius: 50rem;
--vm-vendor-menu-link: var(--link-color);
--vm-vendor-menu-link-hover: var(--link-hover-color);
--vm-vendor-menu-link-active: var(--primary);
--vm-vendor-menu-hover-bg: var(--tertiary-bg);
/* ===== GABLE ===== */
--gab-blue: #4d9fff;
--gab-green: #5cb85c;
--gab-red: #ff6b6b;
--gab-orange: #ff9f5a;
--gab-gray1: #868e96;
--gab-gray2: #adb5bd;
--gab-gray3: #ced4da;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+881
View File
@@ -0,0 +1,881 @@
/* Auto-extracted from vendor/mokoonyx/light.custom.css :root[data-bs-theme] — re-scoped to :root. DO NOT hand-edit. */
:root {
color-scheme: light;
/* ===== BRAND & THEME COLORS ===== */
--color-primary: #112855;
--accent-color-primary: #3f8ff0;
--accent-color-secondary: #6fb3ff;
/* ===== TYPOGRAPHY & BODY ===== */
--font-sans-serif: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--body-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--body-font-size: 1rem;
--body-font-weight: 400;
--body-line-height: 1.5;
--body-color: #22262a;
--body-color-rgb: 34, 38, 42;
--body-bg: #fff;
--body-bg-rgb: 255, 255, 255;
--heading-color: inherit;
--emphasis-color: #000;
--emphasis-color-rgb: 0, 0, 0;
--secondary-color: #22262abf;
--secondary-color-rgb: 34, 38, 42;
--tertiary-color: #22262a80;
--tertiary-color-rgb: 34, 38, 42;
--muted-color: #6d757e;
--code-color: black;
--code-color-ink: var(--code-color, #e93f8e);
--code-bg-color: lightgreen;
--highlight-color: #22262a;
--highlight-bg: #fbeea8;
/* ===== STANDARD COLORS ===== */
--blue: #010156;
--indigo: #6812f3;
--purple: #6f42c2;
--pink: #e93f8e;
--red: #a51f18;
--orange: #fd7e17;
--yellow: #ad6200;
--green: #448344;
--teal: #5abfdd;
--cyan: #30638d;
--black: #000;
--white: #fff;
/* ===== GRAY SCALE ===== */
--gray-100: #f9fafb;
--gray-200: #eaedf0;
--gray-300: #dfe3e7;
--gray-400: #ced4da;
--gray-500: #adb5bd;
--gray-600: #6d757e;
--gray-700: #484f56;
--gray-800: #353b41;
--gray-900: #22262a;
--white-rgb: 255, 255, 255;
--black-rgb: 0, 0, 0;
/* ===== OPACITY UTILITIES ===== */
--opacity-0: 0;
--opacity-5: 0.05;
--opacity-10: 0.1;
--opacity-15: 0.15;
--opacity-20: 0.2;
--opacity-25: 0.25;
--opacity-30: 0.3;
--opacity-50: 0.5;
--opacity-75: 0.75;
--opacity-100: 1;
/* ===== LAYOUT & SPACING ===== */
--padding-x: 0.15rem;
--padding-y: 0.15rem;
--bg-opacity: 1;
--nav-toggle-size: 3rem;
--gradient: linear-gradient(180deg, #ffffff26, #fff0);
--secondary-bg: #eaedf0;
--secondary-bg-rgb: 234, 237, 240;
--tertiary-bg: #f9fafb;
--tertiary-bg-rgb: 249, 250, 251;
--hr-color: var(--border-color, #dfe3e7);
--border-color-soft: var(--border-color, #dfe3e7);
--kbd-bg: var(--secondary-bg, #eaedf0);
--kbd-ink: var(--body-bg, #fff);
--toc-bg: var(--secondary-bg, #eaedf0);
--toc-ink: var(--color-primary, #112855);
--selection-bg: var(--highlight-bg, #fbeea8);
--selection-ink: var(--body-color, #22262a);
--border: 5px;
/* ===== BREAKPOINTS ===== */
--bp-xs: 0;
--bp-sm: 576px;
--bp-md: 768px;
--bp-lg: 992px;
--bp-xl: 1200px;
/* ===== BORDERS ===== */
--border-width: 1px;
--border-style: solid;
--border-color: #dfe3e7;
--border-color-translucent: #0000002d;
--border-radius: .25rem;
--border-radius-sm: .2rem;
--border-radius-lg: .3rem;
--border-radius-xl: .3rem;
--border-radius-xxl: 2rem;
--border-radius-2xl: var(--border-radius-xxl)*2;
--border-radius-pill: 50rem;
/* ===== SHADOWS ===== */
--box-shadow: 0 .5rem 1rem #00000026;
--box-shadow-sm: 0 .125rem .25rem #00000013;
--box-shadow-lg: 0 1rem 3rem #0000002d;
--box-shadow-inset: inset 0 1px 2px #00000013;
/* ===== COMMON SHADOW COLORS ===== */
--shadow-color-light: rgba(var(--black-rgb), var(--opacity-15));
--shadow-color-medium: rgba(var(--black-rgb), var(--opacity-25));
--shadow-color-dark: rgba(var(--black-rgb), var(--opacity-30));
--border-color-translucent: rgba(var(--black-rgb), var(--opacity-10));
--highlight-translucent: rgba(var(--white-rgb), var(--opacity-15));
/* ===== NAVIGATION ===== */
--mainmenu-nav-link-color: white;
--nav-text-color: white;
--nav-bg-color: var(--color-link);
/* ===== NAVBAR ===== */
--navbar-padding-x: 1rem;
--navbar-padding-y: 0.5rem;
--navbar-color: var(--nav-text-color);
--navbar-active-color: var(--mainmenu-nav-link-color);
--navbar-disabled-color: #6c757d;
--navbar-brand-padding-y: 0.3125rem;
--navbar-brand-margin-end: 1rem;
--navbar-brand-font-size: 1.25rem;
--navbar-brand-color: var(--nav-text-color);
--navbar-brand-active-color: var(--mainmenu-nav-link-color);
--navbar-nav-link-padding-x: 0.5rem;
--navbar-toggler-padding-y: 0.25rem;
--navbar-toggler-padding-x: 0.75rem;
--navbar-toggler-font-size: 1.25rem;
--navbar-toggler-border-color: rgba(0, 0, 0, 0.1);
--navbar-toggler-border-radius: 0.25rem;
--navbar-toggler-focus-width: 0.25rem;
--navbar-toggler-transition: box-shadow 0.15s ease-in-out;
--nav-link-padding-x: 1rem;
--nav-link-padding-y: 0.5rem;
--nav-link-font-weight: 400;
--nav-link-color: var(--nav-text-color);
--nav-link-active-color: var(--mainmenu-nav-link-color);
--nav-link-disabled-color: #6c757d;
/* ===== LINKS ===== */
--color-link: #224FAA;
--color-hover: var(--accent-color-primary);
--link-color: #224faa;
--link-color-rgb: 34, 79, 170;
--link-decoration: underline;
--link-hover-color: #424077;
--link-hover-color-rgb: 66, 64, 119;
--link-active-color: var(--link-color);
/* ===== LINK UTILITY COLORS ===== */
--link-primary-color: hsl(240, 98%, 17%);
--link-primary-hover-color: #010145;
--link-secondary-color: hsl(210, 7%, 46%);
--link-secondary-hover-color: #575e65;
--link-success-color: hsl(120, 32%, 39%);
--link-success-hover-color: #366936;
--link-info-color: hsl(207, 49%, 37%);
--link-info-hover-color: #264f71;
--link-warning-color: hsl(34, 100%, 34%);
--link-warning-hover-color: #8a4e00;
--link-danger-color: hsl(3, 75%, 37%);
--link-danger-hover-color: #841913;
--link-light-color: hsl(210, 17%, 98%);
--link-light-hover-color: #fafbfc;
--link-dark-color: hsl(210, 10%, 23%);
--link-dark-hover-color: #2a2f34;
/* ===== HEADER BACKGROUND ===== */
--header-background-color: #adadad;
--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg');
--header-background-attachment: fixed;
--header-background-repeat: repeat;
--header-background-size: auto;
/* ===== CONTAINER BACKGROUNDS ===== */
/* Below Topbar Container */
--container-below-topbar-bg-image: none;
--container-below-topbar-bg-color: transparent;
--container-below-topbar-bg-position: auto;
--container-below-topbar-bg-attachment: fixed;
--container-below-topbar-bg-repeat: repeat;
--container-below-topbar-bg-size: auto;
--container-below-topbar-border: none;
--container-below-topbar-border-radius: 0;
/* Top A Container */
--container-top-a-bg-image: none;
--container-top-a-bg-color: transparent;
--container-top-a-bg-position: auto;
--container-top-a-bg-attachment: fixed;
--container-top-a-bg-repeat: repeat;
--container-top-a-bg-size: auto;
--container-top-a-border: none;
--container-top-a-border-radius: 0;
/* Top B Container */
--container-top-b-bg-image: none;
--container-top-b-bg-color: transparent;
--container-top-b-bg-position: auto;
--container-top-b-bg-attachment: fixed;
--container-top-b-bg-repeat: repeat;
--container-top-b-bg-size: auto;
--container-top-b-border: none;
--container-top-b-border-radius: 0;
/* TOC Container */
--container-toc-bg: var(--mainmenu-nav-link-color);
--container-toc-color: var(--color-primary);
/* Sidebar Container */
--container-sidebar-bg-image: none;
--container-sidebar-bg-color: transparent;
--container-sidebar-bg-position: auto;
--container-sidebar-bg-attachment: scroll;
--container-sidebar-bg-repeat: repeat;
--container-sidebar-bg-size: auto;
--container-sidebar-border: none;
--container-sidebar-border-radius: 0;
/* Bottom A Container */
--container-bottom-a-bg-image: none;
--container-bottom-a-bg-color: transparent;
--container-bottom-a-bg-position: auto;
--container-bottom-a-bg-attachment: fixed;
--container-bottom-a-bg-repeat: repeat;
--container-bottom-a-bg-size: auto;
--container-bottom-a-border: none;
--container-bottom-a-border-radius: 0;
/* Bottom B Container */
--container-bottom-b-bg-image: none;
--container-bottom-b-bg-color: transparent;
--container-bottom-b-bg-position: auto;
--container-bottom-b-bg-attachment: fixed;
--container-bottom-b-bg-repeat: repeat;
--container-bottom-b-bg-size: auto;
--container-bottom-b-border: none;
--container-bottom-b-border-radius: 0;
/* ===== FOCUS & FORMS ===== */
--focus-ring-width: .25rem;
--focus-ring-opacity: .25;
--focus-ring-color: #01015640;
--input-color: hsl(210, 11%, 15%);
--input-bg: hsl(210, 20%, 98%);
--input-border-color: hsl(210, 14%, 83%);
--input-focus-border-color: #8894aa;
--input-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
--input-placeholder-color: hsl(210, 7%, 46%);
--input-disabled-bg: hsl(210, 16%, 93%);
--input-disabled-border-color: hsl(210, 14%, 83%);
--input-file-button-active-bg: #dee1e4;
--form-range-thumb-active-bg: #b8bfcc;
--form-valid-color: #448344;
--form-valid-border-color: #448344;
--form-invalid-color: #a51f18;
--form-invalid-border-color: #a51f18;
/* ===== BUTTONS ===== */
--btn-border-radius: var(--border-radius);
--btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
/* ===== ACCORDION ===== */
--accordion-color: hsl(210, 11%, 15%);
--accordion-bg: var(--body-bg);
--accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
--accordion-border-color: var(--border-color);
--accordion-border-width: 1px;
--accordion-border-radius: 0.25rem;
--accordion-inner-border-radius: calc(0.25rem - 1px);
--accordion-btn-padding-x: 1.25rem;
--accordion-btn-padding-y: 1rem;
--accordion-btn-color: hsl(210, 11%, 15%);
--accordion-btn-bg: var(--accordion-bg);
--accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='hsl%28210, 11%25, 15%25%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--accordion-btn-icon-width: 1.25rem;
--accordion-btn-icon-transform: rotate(-180deg);
--accordion-btn-icon-transition: transform 0.2s ease-in-out;
--accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230f244d'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--accordion-btn-focus-border-color: var(--input-focus-border-color);
--accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
--accordion-body-padding-x: 1.25rem;
--accordion-body-padding-y: 1rem;
--accordion-active-color: #0f244d;
--accordion-active-bg: #e7eaee;
/* ===== ALERT ===== */
--alert-bg: transparent;
--alert-padding-x: 1rem;
--alert-padding-y: 1rem;
--alert-margin-bottom: 1rem;
--alert-color: #000;
--alert-border-color: transparent;
--alert-border: 1px solid var(--alert-border-color);
--alert-border-radius: 0.25rem;
/* ===== ALERT LINK COLORS ===== */
--alert-primary-link-color: #01012a;
--alert-secondary-link-color: #34383d;
--alert-success-link-color: #213f21;
--alert-info-link-color: #172f44;
--alert-warning-link-color: #532f00;
--alert-danger-link-color: #4f0f0b;
--alert-light-link-color: #505050;
--alert-dark-link-color: #1a1c1f;
/* ===== BACKDROP ===== */
--backdrop-zindex: 1040;
--backdrop-bg: hsl(0, 0%, 0%);
--backdrop-opacity: 0.5;
/* ===== BADGE ===== */
--badge-padding-x: 0.65em;
--badge-padding-y: 0.35em;
--badge-font-size: 0.75em;
--badge-font-weight: 700;
--badge-color: var(--body-bg);
--badge-border-radius: 0.25rem;
/* ===== BREADCRUMB ===== */
--breadcrumb-padding-x: 0;
--breadcrumb-padding-y: 0;
--breadcrumb-margin-bottom: 1rem;
--breadcrumb-bg: ;
--breadcrumb-border-radius: ;
--breadcrumb-divider-color: hsl(210, 7%, 46%);
--breadcrumb-item-padding-x: 0.5rem;
--breadcrumb-item-active-color: var(--link-color);
/* ===== CARDS ===== */
--card-spacer-y: 1rem;
--card-spacer-x: 1rem;
--card-title-spacer-y: 0.5rem;
--card-border-width: 1px;
--card-border-color: var(--border-color);
--card-border-radius: var(--border-radius);
--card-box-shadow: none;
--card-inner-border-radius: calc(var(--border-radius) - 1px);
--card-cap-padding-y: 0.5rem;
--card-cap-padding-x: 1rem;
--card-cap-bg: rgba(0, 0, 0, 0.03);
--card-cap-color: var(--body-color);
--card-height: auto;
--card-color: var(--body-color);
--card-bg: var(--body-bg);
--card-img-overlay-padding: 1rem;
--card-group-margin: 0.75rem;
/* ===== DROPDOWN ===== */
--dropdown-zindex: 1000;
--dropdown-min-width: 10rem;
--dropdown-padding-x: 0;
--dropdown-padding-y: 0.5rem;
--dropdown-spacer: 0.125rem;
--dropdown-font-size: 1rem;
--dropdown-color: hsl(210, 11%, 15%);
--dropdown-bg: var(--body-bg);
--dropdown-border-color: var(--border-color-translucent);
--dropdown-border-radius: 0.25rem;
--dropdown-border-width: 1px;
--dropdown-inner-border-radius: calc(0.25rem - 1px);
--dropdown-divider-bg: var(--border-color-translucent);
--dropdown-divider-margin-y: 0.5rem;
--dropdown-box-shadow: 0 0.5rem 1rem var(--shadow-color-light);
--dropdown-link-color: hsl(210, 11%, 15%);
--dropdown-link-active-color: var(--body-bg);
--dropdown-link-active-bg: hsl(240, 98%, 17%);
--dropdown-link-disabled-color: hsl(210, 11%, 71%);
--dropdown-item-padding-x: 1rem;
--dropdown-item-padding-y: 0.25rem;
--dropdown-header-color: hsl(210, 7%, 46%);
--dropdown-header-padding-x: 1rem;
--dropdown-header-padding-y: 0.5rem;
/* ===== LIST GROUP ===== */
--list-group-color: hsl(210, 11%, 15%);
--list-group-bg: var(--body-bg);
--list-group-border-color: rgba(var(--black-rgb), 0.125);
--list-group-border-width: 1px;
--list-group-border-radius: 0.25rem;
--list-group-item-padding-x: 1rem;
--list-group-item-padding-y: 0.5rem;
--list-group-action-color: hsl(210, 9%, 31%);
--list-group-action-active-color: hsl(210, 11%, 15%);
--list-group-action-active-bg: hsl(210, 16%, 93%);
--list-group-disabled-color: hsl(210, 7%, 46%);
--list-group-disabled-bg: var(--body-bg);
--list-group-active-color: var(--body-bg);
--list-group-active-bg: hsl(240, 98%, 17%);
--list-group-active-border-color: hsl(240, 98%, 17%);
/* ===== LIST GROUP ITEM COLORS ===== */
--list-group-item-primary-color: #010134;
--list-group-item-primary-bg: #ccccdd;
--list-group-item-primary-active-bg: #b8b8c7;
--list-group-item-secondary-color: #41464c;
--list-group-item-secondary-bg: #e2e3e5;
--list-group-item-secondary-active-bg: #cbccce;
--list-group-item-success-color: #294f29;
--list-group-item-success-bg: #dae6da;
--list-group-item-success-active-bg: #c4cfc4;
--list-group-item-info-color: #1d3b55;
--list-group-item-info-bg: #d6e0e8;
--list-group-item-info-active-bg: #c1cad1;
--list-group-item-warning-color: #683b00;
--list-group-item-warning-bg: #efe0cc;
--list-group-item-warning-active-bg: #d7cab8;
--list-group-item-danger-color: #63130e;
--list-group-item-danger-bg: #edd2d1;
--list-group-item-danger-active-bg: #d5bdbc;
--list-group-item-light-color: #646464;
--list-group-item-light-bg: #fefefe;
--list-group-item-light-active-bg: #e5e5e5;
--list-group-item-dark-color: #202327;
--list-group-item-dark-bg: #d7d8d9;
--list-group-item-dark-active-bg: #c2c2c3;
/* ===== MODAL ===== */
--modal-zindex: 1050;
--modal-width: 500px;
--modal-padding: 1rem;
--modal-margin: 0.5rem;
--modal-color: ;
--modal-bg: var(--body-bg);
--modal-border-color: var(--border-color-translucent);
--modal-border-width: 1px;
--modal-border-radius: 0.3rem;
--modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--modal-inner-border-radius: calc(0.3rem - 1px);
--modal-header-padding-x: 1rem;
--modal-header-padding-y: 1rem;
--modal-header-padding: 1rem 1rem;
--modal-header-border-color: var(--border-color);
--modal-header-border-width: 1px;
--modal-title-line-height: 1.5;
--modal-footer-gap: 0.5rem;
--modal-footer-bg: ;
--modal-footer-border-color: var(--border-color);
--modal-footer-border-width: 1px;
/* ===== NAV TABS ===== */
--nav-tabs-border-width: 1px;
--nav-tabs-border-color: hsl(210, 14%, 89%);
--nav-tabs-border-radius: 0.25rem;
--nav-tabs-link-active-color: hsl(210, 9%, 31%);
--nav-tabs-link-active-bg: var(--body-bg);
--nav-tabs-link-active-border-color: hsl(210, 14%, 89%) hsl(210, 14%, 89%) var(--body-bg);
/* ===== NAV PILLS ===== */
--nav-pills-border-radius: 0.25rem;
--nav-pills-link-active-color: var(--body-bg);
--nav-pills-link-active-bg: hsl(240, 98%, 17%);
/* ===== OFFCANVAS ===== */
--offcanvas-zindex: 1045;
--offcanvas-width: 400px;
--offcanvas-height: 30vh;
--offcanvas-padding-x: 1rem;
--offcanvas-padding-y: 1rem;
--offcanvas-color: var(--body-color);
--offcanvas-bg: var(--body-bg);
--offcanvas-border-width: 1px;
--offcanvas-border-color: var(--border-color-translucent);
--offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
/* ===== PAGINATION ===== */
--pagination-padding-x: 0.75rem;
--pagination-padding-y: 0.375rem;
--pagination-font-size: 1rem;
--pagination-color: var(--link-color);
--pagination-bg: var(--body-bg);
--pagination-border-width: 1px;
--pagination-border-color: hsl(210, 14%, 89%);
--pagination-border-radius: 0.25rem;
--pagination-focus-color: var(--link-active-color);
--pagination-focus-bg: hsl(210, 16%, 93%);
--pagination-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
--pagination-active-color: var(--body-bg);
--pagination-active-bg: hsl(240, 98%, 17%);
--pagination-active-border-color: hsl(240, 98%, 17%);
--pagination-disabled-color: hsl(210, 7%, 46%);
--pagination-disabled-bg: var(--body-bg);
--pagination-disabled-border-color: hsl(210, 14%, 89%);
/* ===== POPOVER ===== */
--popover-zindex: 1060;
--popover-max-width: 276px;
--popover-font-size: 0.875rem;
--popover-bg: var(--body-bg);
--popover-border-width: 1px;
--popover-border-color: var(--border-color-translucent);
--popover-border-radius: 0.3rem;
--popover-inner-border-radius: calc(0.3rem - 1px);
--popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--popover-header-padding-x: 1rem;
--popover-header-padding-y: 0.5rem;
--popover-header-font-size: 1rem;
--popover-header-color: ;
--popover-header-bg: #f0f0f0;
--popover-body-padding-x: 1rem;
--popover-body-padding-y: 1rem;
--popover-body-color: hsl(210, 11%, 15%);
--popover-arrow-width: 1rem;
--popover-arrow-height: 0.5rem;
--popover-arrow-border: var(--popover-border-color);
/* ===== PROGRESS ===== */
--progress-height: 1rem;
--progress-font-size: 0.75rem;
--progress-bg: hsl(210, 16%, 93%);
--progress-border-radius: 0.25rem;
--progress-box-shadow: inset 0 1px 2px rgba(var(--black-rgb), 0.075);
--progress-bar-color: var(--body-bg);
--progress-bar-bg: hsl(240, 98%, 17%);
--progress-bar-transition: width 0.6s ease;
/* ===== SPINNER ===== */
--spinner-width: 2rem;
--spinner-height: 2rem;
--spinner-vertical-align: -0.125em;
--spinner-border-width: 0.25em;
--spinner-animation-speed: 0.75s;
/* ===== TABLE ===== */
--table-color: var(--body-color);
--table-bg: transparent;
--table-border-color: var(--border-color);
--table-accent-bg: transparent;
--table-striped-color: var(--body-color);
--table-striped-bg: rgba(var(--black-rgb), var(--opacity-5));
--table-active-color: var(--body-color);
--table-active-bg: rgba(var(--black-rgb), 0.075);
/* ===== TOAST ===== */
--toast-zindex: 1090;
--toast-padding-x: 0.75rem;
--toast-padding-y: 0.5rem;
--toast-spacing: 1em;
--toast-max-width: 350px;
--toast-font-size: 0.875rem;
--toast-color: ;
--toast-bg: rgba(255, 255, 255, 0.85);
--toast-border-width: 1px;
--toast-border-color: var(--border-color-translucent);
--toast-border-radius: 0.25rem;
--toast-box-shadow: 0 0.5rem 1rem var(--shadow-color-light);
--toast-header-color: hsl(210, 7%, 46%);
--toast-header-bg: rgba(var(--white-rgb), 0.85);
--toast-header-border-color: rgba(var(--black-rgb), var(--opacity-5));
/* ===== TOOLTIP ===== */
--tooltip-zindex: 1070;
--tooltip-max-width: 200px;
--tooltip-padding-x: 0.5rem;
--tooltip-padding-y: 0.25rem;
--tooltip-margin: ;
--tooltip-font-size: 0.875rem;
--tooltip-color: var(--body-bg);
--tooltip-bg: hsl(0, 0%, 0%);
--tooltip-border-radius: 0.25rem;
--tooltip-opacity: 0.9;
--tooltip-arrow-width: 0.8rem;
--tooltip-arrow-height: 0.4rem;
/* ===== BOOTSTRAP PALETTE ===== */
--primary: #010156;
--secondary: #6d757e;
--success: #448344;
--info: #30638d;
--warning: #ad6200;
--danger: #a51f18;
--light: #f9fafb;
--dark: #353b41;
--primary-rgb: 1, 1, 86;
--secondary-rgb: 109, 117, 126;
--success-rgb: 68, 131, 68;
--info-rgb: 48, 99, 141;
--warning-rgb: 173, 98, 0;
--danger-rgb: 165, 31, 24;
--light-rgb: 249, 250, 251;
--dark-rgb: 53, 59, 65;
--primary-text-emphasis: #002;
--secondary-text-emphasis: #2c2f32;
--success-text-emphasis: #1b351b;
--info-text-emphasis: #132838;
--warning-text-emphasis: #452700;
--danger-text-emphasis: #420c09;
--light-text-emphasis: #484f56;
--dark-text-emphasis: #484f56;
--primary-bg-subtle: #ccd;
--secondary-bg-subtle: #e2e3e5;
--success-bg-subtle: #dae6da;
--info-bg-subtle: #d6e0e8;
--warning-bg-subtle: #efe0cc;
--danger-bg-subtle: #edd2d1;
--light-bg-subtle: #fcfcfd;
--dark-bg-subtle: #ced4da;
--primary-border-subtle: #99b;
--secondary-border-subtle: #c5c8cb;
--success-border-subtle: #b4ceb4;
--info-border-subtle: #acc1d1;
--warning-border-subtle: #dec099;
--danger-border-subtle: #dba5a2;
--light-border-subtle: #eaedf0;
--dark-border-subtle: #adb5bd;
/* ===== HERO / BANNER OVERLAY ===== */
--hero-height: 70vh;
--hero-color: var(--body-color);
--hero-bg-repeat: no-repeat;
--hero-bg-attachment: fixed;
--hero-bg-position: top center;
--hero-bg-size: cover;
--hero-border-bottom: solid var(--accent-color-secondary);
--hero-overlay-bg: hsla(0, 0%, 0%, 0.1);
--hero-overlay-bg-position: center;
--hero-overlay-bg-size: cover;
--hero-overlay-padding: 1em;
--hero-overlay-text-align: center;
--hero-overlay-text-color: var(--body-color);
/* ===== HERO VARIANTS ===== */
/* Primary — sky blue, light overlay */
--hero-primary-bg-color: var(--color-primary);
--hero-primary-overlay: linear-gradient(rgba(163, 205, 226, .45), rgba(163, 205, 226, .45));
--hero-primary-color: var(--color-primary);
/* Secondary — navy, stronger overlay */
--hero-secondary-bg-color: var(--color-primary);
--hero-secondary-overlay: linear-gradient(rgba(17, 40, 85, .75), rgba(17, 40, 85, .75));
--hero-secondary-color: #f1f5f9;
/* ===== HERO CARD (inner .hero element) ===== */
/* Default card — uses primary variant values */
--hero-card-bg: var(--hero-primary-bg-color);
--hero-card-color: white;
--hero-card-overlay: var(--hero-primary-overlay);
--hero-card-border-radius: .5rem;
--hero-card-padding-x: 2rem;
--hero-card-padding-y: 3rem;
--hero-card-max-width: 800px;
/* Alternative card — uses secondary variant values */
--hero-alt-card-bg: var(--hero-secondary-bg-color);
--hero-alt-card-color: var(--hero-secondary-color);
--hero-alt-card-overlay: var(--hero-secondary-overlay);
--hero-alt-card-border-radius: .5rem;
--hero-alt-card-padding-x: 2rem;
--hero-alt-card-padding-y: 3rem;
--hero-alt-card-max-width: 600px;
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
--block-color-1: var(--color-primary);
--block-text-1: var(--body-color);
--block-color-2: var(--accent-color-primary);
--block-text-2: #fff;
--block-color-3: var(--warning, #eec234);
--block-text-3: var(--body-color);
--block-color-4: var(--success-bg-subtle, #eef7f0);
--block-text-4: var(--body-color);
/* ===== BLOCK COLOR OVERRIDES ===== */
--block-highlight-bg: var(--accent-color-primary);
--block-highlight-text: #fff;
--block-cta-bg: var(--color-primary);
--block-cta-text: #fff;
--block-alert-bg: var(--danger, #a51f18);
--block-alert-text: #fff;
/* ===== FOOTER ===== */
--footer-padding-top: 1rem;
--footer-padding-bottom: 80px;
--footer-grid-padding-y: 2.5rem;
--footer-grid-padding-x: 0.5em;
/* ===== THEME FAB ===== */
--theme-fab-bg: var(--color-primary, #112855);
--theme-fab-color: #fff;
--theme-fab-btn-bg: rgba(255,255,255,.15);
--theme-fab-border: rgba(255, 255, 255, 0.3);
/* ===== OFFLINE PAGE ===== */
--offline-card-bg: rgba(0, 0, 0, 0.55);
/* ===== COMPONENT-SPECIFIC COLORS ===== */
--mod-finder-link-hover: #e6e6e6;
--form-legend-color: #495057;
--border-gray: #b2bfcd;
--subhead-color: #495057;
--box-shadow-gray: #ddd;
--btn-active-text-gray: #A0A0A0;
--indicator-success-bg: var(--success);
--item-list-color: #F5F5F5;
--notification-badge-bg: var(--danger);
--content-bg-gray: #DDD;
--taba-btn-green: #7ac143;
--taba-btn-blue: #5091cd;
--taba-btn-red: #f44321;
--taba-btn-gray: #AAA;
--taba-msg-bg: #f5f5f5;
--toc-link-color: #767676;
--toc-link-active-color: #563d7c;
--choices-disabled-bg: #eaeaea;
--choices-input-bg: var(--white);
--choices-border-light: #ddd;
--choices-arrow-color: #333;
--choices-inner-bg: #f9f9f9;
--choices-focused-border: #b7b7b7;
--choices-dropdown-bg: var(--white);
--choices-item-bg: #00bcd4;
--choices-item-border: #00a5bb;
--choices-item-hover-bg: #00a5bb;
--choices-item-hover-border: #008fa1;
--choices-item-disabled-bg: #aaaaaa;
--choices-item-disabled-border: #919191;
--choices-item-highlighted: #f2f2f2;
--choices-input-inner-bg: #f9f9f9;
/* ===== VIRTUEMART (VM) ===== */
/* VM Surfaces */
--vm-surface: #ffffff;
--vm-surface-2: #f8f9fa;
--vm-text: var(--body-color);
--vm-text-strong: #000000;
--vm-text-muted: #6c757d;
--vm-border: var(--border-color);
--vm-price-color: var(--success);
/* VM Layout and Density */
--vm-container-max-width: 1200px;
--vm-section-gap: 2rem;
--vm-block-radius: var(--border-radius);
--vm-block-shadow: var(--box-shadow-sm);
/* VM Typography */
--vm-category-title-size: 2rem;
--vm-subcategory-title-size: 1.5rem;
--vm-page-title-size: 1.75rem;
--vm-products-type-title-size: 1.25rem;
--vm-product-title-size: 1.125rem;
--vm-product-title-weight: 500;
--vm-products-type-title-weight: 600;
--vm-price-size: 1.5rem;
--vm-price-detail-size: 1.125rem;
--vm-price-desc-size: 0.875rem;
/* VM Controls */
--vm-input-radius: var(--border-radius);
--vm-input-shadow: var(--box-shadow-sm);
--vm-qty-width: 80px;
--vm-cart-dropdown-min-width: 300px;
/* VM Alerts */
--vm-alert-radius: var(--border-radius);
--vm-alert-shadow: var(--box-shadow-sm);
--vm-availability-bg: var(--success-bg-subtle);
--vm-availability-text: var(--success);
/* VM Buttons */
--vm-btn-padding-x: 1rem;
--vm-btn-padding-y: 0.5rem;
--vm-btn-radius: var(--border-radius);
--vm-btn-shadow: var(--box-shadow-sm);
--vm-btn-primary-bg: var(--primary);
--vm-btn-primary-text: #ffffff;
--vm-btn-primary-border: var(--primary);
--vm-btn-secondary-bg: var(--secondary);
--vm-btn-secondary-text: #ffffff;
--vm-btn-secondary-border: var(--secondary);
/* VM Image Overlay Controls */
--vm-image-overlay-gap-x: 0.5rem;
--vm-image-overlay-gap-y: 0.5rem;
--vm-image-overlay-raise: 0.25rem;
--vm-image-overlay-btn-size: 2.5rem;
--vm-image-overlay-btn-radius: 50%;
--vm-image-overlay-btn-bg: rgba(255, 255, 255, 0.9);
--vm-image-overlay-btn-bg-hover: rgba(255, 255, 255, 1);
--vm-image-overlay-btn-border-color: rgba(0, 0, 0, 0.1);
--vm-image-overlay-btn-border-width: 1px;
--vm-image-overlay-btn-color: var(--body-color);
--vm-image-overlay-btn-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* VM Vendor Menu */
--vm-vendor-menu-bg: var(--body-bg);
--vm-vendor-menu-border: var(--border-color);
--vm-vendor-menu-radius: var(--border-radius);
--vm-vendor-menu-shadow: var(--box-shadow-sm);
--vm-vendor-menu-item-gap: 0.25rem;
--vm-vendor-menu-item-padding-x: 1rem;
--vm-vendor-menu-item-padding-y: 0.5rem;
--vm-vendor-menu-pill-radius: 50rem;
--vm-vendor-menu-link: var(--link-color);
--vm-vendor-menu-link-hover: var(--link-hover-color);
--vm-vendor-menu-link-active: var(--primary);
--vm-vendor-menu-hover-bg: var(--secondary-bg);
/* ===== GABLE ===== */
--gab-blue: #0066cc;
--gab-green: #28a745;
--gab-red: #dc3545;
--gab-orange: #fd7e14;
--gab-gray1: #495057;
--gab-gray2: #6c757d;
--gab-gray3: #adb5bd;
}
File diff suppressed because it is too large Load Diff