Files
wordpress-public-workspace/design/dark-mode-admin-v1.1.0-spec.md
T
jason 331edafb60 Update public WordPress workspace working changes
- GRACEPRESS-PUBLIC-PLUGIN-STANDARDS.md
- PUBLIC-PLUGIN-WORKFLOW.md
- WORDPRESS-ORG-REQUIREMENTS.md
- WORDPRESS-PUBLIC-CONVENTIONS.md
- design/dark-mode-admin-v1.1.0-spec.md
- plugins/bible-reference-tooltips/CHANGELOG.md
- plugins/bible-reference-tooltips/bible-reference-tooltips.php
- plugins/bible-reference-tooltips/readme.txt
2026-10-02 15:57:02 -05:00

300 lines
10 KiB
Markdown

# Dark Mode by GracePress 1.1.0 Admin Interface Specification
Date: 2026-08-22
Status: proposed for review
Scope: information architecture and visual behavior only
Source changes: none
## Design objective
Replace the long implementation-oriented settings form with a native, purposeful administration workspace. The interface should explain effective behavior before exposing controls, preserve WordPress familiarity, carry the GracePress visual identity without private dependencies, and remain fully useful without JavaScript-only navigation.
## Visual direction
- Light native settings canvas by default; the plugin's admin dark-mode preference may transform it only when that user selects Dark or Auto resolves to dark.
- Large navy hero with cyan module accent, restrained atmospheric geometry, and no remote assets.
- Expressive serif display heading paired with readable WordPress-compatible body typography.
- White or dark-neutral panels with modest borders and shadows.
- Color communicates state but is always paired with text and control semantics.
- No purple-on-white default, novelty gradients, giant decorative icons, or commercial upsell panels.
- Motion is limited to preview changes and status transitions and is removed under prefers-reduced-motion.
## Page shell
1. WordPress administration chrome remains authoritative.
2. Plugin content has a maximum readable width but uses available space on desktop.
3. Hero spans the content width.
4. Section navigation follows the hero.
5. The active section renders below it.
6. A save/status bar follows the section content.
7. The GracePress footer closes the page.
## Hero
Left side:
- Eyebrow: GracePress visual comfort.
- Title: Dark Mode.
- One-sentence user outcome, not engine terminology.
- Status chips: frontend state, default mode, privacy status, version.
Right side:
- Live status summary.
- Effective visitor mode.
- Current user's admin preference.
- Schedule state.
- Toggle placement.
The hero does not contain promotional links, remote imagery, or false health claims.
## Navigation
Sections:
1. Overview
2. Behavior
3. Toggle
4. Rendering
5. Advanced
6. Help
Requirements:
- Native buttons or links with visible selected state.
- Server-rendered fallback permits direct section URLs.
- Keyboard and screen-reader state is explicit.
- Horizontal overflow is contained at narrow widths.
- Settings search is intentionally omitted at the current scale.
## Overview
### Live preview
- Representative heading, paragraph, link, form/control, media sample, and toggle.
- Light/dark preview control.
- Desktop/mobile width control.
- Preview uses unsaved form state without publishing it.
- Preview never loads the public site in a third-party frame.
- Preview motion honors reduced-motion.
### Quick setup
- Frontend enable switch.
- New-visitor default: Light, Dark, or System.
- Current user's admin preference: Light, Dark, or Auto.
- Short explanation that a visitor's manual choice wins after first visit.
### At a glance
- Current toggle style.
- Device visibility.
- Number of exclusions.
- No invented performance or accessibility scores.
## Behavior
### Deterministic precedence
Display the effective order directly:
1. Temporary preview or explicit URL override.
2. Visitor manual choice.
3. Active schedule.
4. Operating-system preference.
5. Site default.
Any implementation change to this order requires documentation and migration consideration.
### Schedule
- Explicit enable switch.
- Configurable start and end time.
- WordPress site timezone displayed by name.
- Runtime evaluation remains cache-safe.
- Overnight ranges work correctly.
- Manual visitor choice remains authoritative.
### Editing surfaces
- WordPress admin preference is per user.
- Admin, block editor canvas, and classic editor may be controlled separately.
- Disabling admin dark mode removes admin CSS, JavaScript, and toolbar controls.
- Disabling frontend dark mode emits no frontend assets or controls.
## Toggle
### Appearance
- Three initial styles: Classic moon, Compact switch, Text button.
- Every style uses a native button.
- Visible focus, descriptive accessible name, aria-pressed, and state text.
- Restrained accent-color setting with contrast validation.
- No unrestricted icon uploads in 1.1.0.
### Placement
- Floating positions: four corners.
- Horizontal and vertical offsets.
- Desktop and mobile visibility.
- Safe z-index below critical modal and consent surfaces.
- Shortcode remains supported.
- Automatic injection into every menu is removed.
- Deliberate menu-item or block integration is deferred unless approved.
## Rendering
### Page transformation
- Existing brightness and contrast behavior receives strict ranges and plain-language help.
- The UI distinguishes page transformation from media correction.
- Invalid values are rejected, not silently reshaped.
### Media
- Image/media brightness.
- Image/media contrast.
- Image/media grayscale.
- Default preserves original media appearance.
- Image/video replacement is out of scope.
### Motion
- None, Gentle fade, and Soft wipe are the initial choices.
- Duration has a bounded range.
- Pulse is not enabled by default.
- prefers-reduced-motion disables nonessential motion.
## Advanced
### Content exclusions
- Search and choose pages/posts by title.
- Saved selections show title and content type, not raw IDs alone.
- Advanced manual ID fallback may be available for recovery.
### Element exclusions
- One selector per parsed item.
- Each selector is validated independently.
- Invalid selectors show actionable errors.
- Common presets may be offered for logos, maps, charts, and embedded media.
### Custom CSS
- Collapsed by default.
- Explicit warning about maintenance and external URL privacy.
- Reject closing markup and unsafe structures.
- Scope examples to the stable public root class.
- Never imply that arbitrary CSS is risk-free.
## Help
- Shortcode and examples.
- Stable root class.
- Public hooks and filters.
- Preference and schedule explanation.
- Privacy statement: no telemetry, no remote runtime assets, browser-local visitor preference.
- Diagnostics summary with no secrets.
- Data retention and uninstall policy.
- WordPress.org support route once the plugin is published.
## Save and reset behavior
- One explicit Save changes action.
- Visible Clean, Unsaved, Saving, Saved, and Error states.
- Validation errors remain beside their controls and are summarized accessibly.
- Reset section and Reset all are distinct.
- Reset requires confirmation and states exactly what will change.
- Reset never deletes unrelated WordPress or internal-plugin data.
- Failed saves preserve entered values.
## GracePress footer
Required content:
- Relevant Scripture: John 1:5 is retained.
- Plugin name and version.
- All glory to Jesus Christ.
- Restrained Christ IT or GracePress attribution only if it complies with WordPress.org rules.
- No front-end backlink and no promotional call to action.
## Responsive behavior
- Desktop: hero and main sections may use two columns.
- Tablet: hero and content stack while navigation remains horizontally usable.
- Mobile: WordPress sidebar is outside plugin ownership; plugin content becomes one column.
- No fixed viewport heights or internal page scrolling.
- Actions wrap without overlap.
- Labels remain visible; icon-only controls have accessible names.
## Accessibility contract
- Native controls are mandatory.
- Labels are programmatically associated.
- Every state has a textual equivalent.
- Focus remains visible.
- Tab order follows document order.
- Contrast meets WCAG AA for text and essential controls.
- Preview controls expose pressed state.
- Dynamic save messages use polite announcements.
- Validation uses an alert summary and field associations.
- No global shortcut fires while focus is in an editable control.
- Reduced-motion preference is honored.
## Implementation boundary
The proposed implementation should remain server-rendered PHP with scoped CSS and small progressive-enhancement JavaScript. React is not justified for this settings count.
Expected source decomposition:
- Main bootstrap/plugin file.
- Admin controller and settings registration.
- Admin view.
- Admin stylesheet.
- Admin JavaScript.
- Frontend engine stylesheet.
- Frontend engine JavaScript.
- Shared validation/helpers.
- Uninstall policy file when approved.
Exact file names will be selected during Phase 4 after the existing single-file plugin receives rollback copies.
## Acceptance for Phase 3
Before implementation, confirm:
- Section names and order.
- Hero/status content.
- Preference precedence.
- Per-user admin model.
- Preview scope.
- Initial toggle styles.
- Schedule model.
- Exclusion workflow.
- Custom CSS policy.
- Save/reset behavior.
- GracePress footer content.
- Deferred-feature list.
No source implementation begins until this specification is accepted or revised.
## Desktop density contract
The WordPress admin menu is the visual density baseline. A wide monitor must create more useful grouping and whitespace, not larger typography or controls.
- Body and control text: approximately 13px at 100 percent browser zoom.
- Secondary help text: 11-12px with sufficient contrast.
- Section headings: 18-20px; only the page title may exceed this materially.
- Standard input/select/button height: 32-38px.
- Card padding: 16-20px.
- Section gaps: 12-18px.
- Hero padding: 20-28px, with a target rendered height under roughly 220px on desktop.
- Control rows should use practical maximum widths; a select with four short options does not need to span a large card.
- Dense related switches may share a compact row or two-column group.
- Large screens add columns, preview area, and useful status information rather than scaling controls upward.
- Mobile touch targets remain at least 44px where needed without forcing desktop controls to that size.
- The layout must be reviewed at 100 percent zoom beside the native WordPress left menu.
- The current 1.0.0 values of 50px hero padding, 35px card padding, 20px card headings, and 15-18px action controls are explicitly rejected.