Files
jmiller 81d065b9bb
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 9s
Generic: Project CI / Lint & Validate (pull_request) Successful in 32s
Generic: Standards Compliance / Secret Scanning (push) Failing after 9s
Universal: PR Check / Secret Scan (pull_request) Successful in 51s
Generic: Standards Compliance / License Header Validation (push) Successful in 9s
Generic: Standards Compliance / Repository Structure Validation (push) Successful in 8s
Generic: Standards Compliance / Coding Standards Check (push) Successful in 10s
Generic: Standards Compliance / Workflow Configuration Check (push) Failing after 9s
Generic: Standards Compliance / Documentation Quality Check (push) Successful in 8s
Generic: Standards Compliance / README Completeness Check (push) Failing after 7s
Generic: Standards Compliance / Version Consistency Check (push) Successful in 1m2s
Generic: Standards Compliance / Script Integrity Validation (push) Successful in 26s
Generic: Standards Compliance / Git Repository Hygiene (push) Successful in 1m5s
Generic: Standards Compliance / File Naming Standards (push) Successful in 10s
Generic: Standards Compliance / Line Length Check (push) Successful in 23s
Generic: Standards Compliance / Insecure Code Pattern Detection (push) Successful in 10s
Generic: Standards Compliance / Code Complexity Analysis (push) Successful in 1m2s
Generic: Standards Compliance / Code Duplication Detection (push) Successful in 1m8s
Generic: Standards Compliance / Dead Code Detection (push) Successful in 16s
Generic: Standards Compliance / File Size Limits (push) Successful in 16s
Generic: Standards Compliance / TODO/FIXME Tracking (push) Successful in 14s
Generic: Standards Compliance / Dependency Vulnerability Scanning (push) Successful in 1m3s
Deploy (Prod) / Build & Deploy to Prod (push) Successful in 5m9s
Generic: Standards Compliance / Broken Link Detection (push) Successful in 12s
Generic: Standards Compliance / API Documentation Coverage (push) Successful in 7s
Generic: Standards Compliance / Accessibility Check (push) Successful in 7s
Generic: Standards Compliance / Performance Metrics (push) Successful in 8s
Generic: Standards Compliance / Binary File Detection (push) Successful in 2m12s
Generic: Standards Compliance / Unused Dependencies Check (push) Successful in 55s
Generic: Standards Compliance / Terraform Configuration Validation (push) Successful in 12s
Generic: Standards Compliance / Enterprise Readiness Check (push) Successful in 55s
Generic: Standards Compliance / Repository Health Check (push) 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
Generic: Standards Compliance / Compliance Summary (push) Has been cancelled
feat: MokoGIT branding -- mokoconsulting.tech reskin, Font Awesome, toggle, a11y menu, PWA
Comprehensive MokoGIT theme/branding built from the authoritative mokoconsulting.tech
design tokens (MokoOnyx *.custom.css):

- Theme: replace gitea themes entirely with theme-mokogit-{light,dark,auto} (default
  mokogit-auto); brand tokens (primary #010156 / accent #3f8ff0, navy nav+footer #112855,
  semantic palette); mokogit-brand.css component reskin; runtime custom-stylesheet override
  hook (templates/custom/header.tmpl -> mokogit-custom.css, re-skin live with no rebuild).
- Font Awesome 7 Free 7.1.0: vendored unmodified (CSS headers intact + webfonts + verbatim
  LICENSE.txt), license-compliant for distribution/white-label (Icons CC BY 4.0, Fonts SIL
  OFL 1.1, Code MIT); attributed in THIRD-PARTY-NOTICES.md, README, and wiki.
- Light/dark toggle: navbar sun/moon control, server-persisted via the existing
  /user/settings/appearance/theme endpoint (anonymous falls back to localStorage).
- Accessibility menu: 6 options (text resize, color invert, high contrast, link highlight,
  readable font, pause animations); localStorage-persisted, applied on <html>, ARIA/keyboard.
- PWA: service worker (network-first navigation + cached offline fallback) + branded offline
  page + enhanced manifest (display standalone, navy theme_color, app shortcuts); manifest
  icon sourced from the site-admin branding icon if set, else the bundled MokoGIT logo.

Verified: `go build ./...` and `vite build` both green; only mokogit themes emit.
2026-07-16 14:31:52 -05:00

141 lines
3.6 KiB
CSS

/* MokoGIT accessibility menu — panel UI + the effect classes toggled on <html>.
Ported from the mokoconsulting.tech / MokoOnyx accessibility widget. */
/* ---- navbar toggle button ---- */
.mokogit-a11y-toggle,
.mokogit-theme-toggle {
background: none;
border: none;
cursor: pointer;
color: inherit;
}
/* theme toggle: show sun in dark mode (click -> go light), moon in light mode */
.mokogit-theme-toggle .fa-moon { display: inline-block; }
.mokogit-theme-toggle .fa-sun { display: none; }
.mokogit-theme-toggle.is-dark .fa-moon { display: none; }
.mokogit-theme-toggle.is-dark .fa-sun { display: inline-block; }
/* ---- panel ---- */
.a11y-panel {
position: fixed;
z-index: 1000;
min-width: 260px;
max-width: 320px;
padding: 12px;
background: var(--color-body);
color: var(--color-text);
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius, 4px);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
.a11y-panel-title {
font-weight: 600;
margin-bottom: 8px;
padding-bottom: 8px;
border-bottom: 1px solid var(--color-secondary);
}
.a11y-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 6px 0;
}
.a11y-row-label { font-size: 0.95em; }
.a11y-size-controls { display: flex; align-items: center; gap: 4px; }
.a11y-size-btn {
min-width: 28px;
height: 28px;
padding: 0 8px;
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius, 4px);
background: var(--color-secondary-bg, var(--color-box-body));
color: inherit;
cursor: pointer;
}
.a11y-size-value { min-width: 44px; text-align: center; font-variant-numeric: tabular-nums; }
/* toggle switch */
.a11y-switch {
position: relative;
width: 40px;
height: 22px;
border-radius: 11px;
border: 1px solid var(--color-secondary);
background: var(--color-secondary);
cursor: pointer;
transition: background 0.15s ease;
flex: 0 0 auto;
}
.a11y-switch::after {
content: "";
position: absolute;
top: 2px;
left: 2px;
width: 16px;
height: 16px;
border-radius: 50%;
background: #fff;
transition: transform 0.15s ease;
}
.a11y-switch.is-on { background: var(--color-primary); border-color: var(--color-primary); }
.a11y-switch.is-on::after { transform: translateX(18px); }
.a11y-reset-all {
margin-top: 10px;
width: 100%;
padding: 6px 10px;
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius, 4px);
background: var(--color-secondary-bg, var(--color-box-body));
color: inherit;
cursor: pointer;
}
/* ==== effect classes toggled on <html> ==== */
/* invert colors (keep media upright) */
html.a11y-inverted { filter: invert(1) hue-rotate(180deg); }
html.a11y-inverted img,
html.a11y-inverted video,
html.a11y-inverted picture,
html.a11y-inverted canvas,
html.a11y-inverted [style*="background-image"] { filter: invert(1) hue-rotate(180deg); }
/* high contrast */
html.a11y-high-contrast { filter: contrast(1.3); }
html.a11y-high-contrast a { text-decoration: underline; }
/* highlight links */
html.a11y-highlight-links a {
text-decoration: underline !important;
outline: 1px solid currentcolor;
outline-offset: 1px;
background: rgba(255, 235, 59, 0.25);
}
/* readable font */
html.a11y-readable-font,
html.a11y-readable-font * {
font-family: Verdana, Tahoma, "Segoe UI", Arial, sans-serif !important;
letter-spacing: 0.02em;
line-height: 1.7;
}
/* pause animations */
html.a11y-pause-animations *,
html.a11y-pause-animations *::before,
html.a11y-pause-animations *::after {
animation-duration: 0s !important;
animation-iteration-count: 1 !important;
transition-duration: 0s !important;
scroll-behavior: auto !important;
}