Developer Guide · UX Design Warrior

UX Design Warrior · Developer Guide

Developer Guide

Implementation reference for developers working on the UX Design Warrior codebase. This guide covers navigation architecture, CSS conventions, verified selectors, and the rules that keep the system stable.

Protocol CDP — Cara's Design Protocol
Framework Divi / WordPress
Standard WCAG 2.1 AA · AAA preferred
📋

Section 01

Overview & Purpose


This guide answers one question: I need to work on this codebase — what do I need to know?

It covers the navigation system, CSS architecture, and implementation rules for the UX Design Warrior site. It does not cover design system rationale, brand guidelines, or typography specimens — those live in the UXDW Style Guide.

Intended For
Developers
Anyone modifying CSS, templates, or menu structure
Scope
Navigation System
Theme Builder header, menu module, mobile nav
Not Covered
Design System
Brand colors, typography, contrast ratios
⚙️

Section 02

Environment & Prerequisites


Before modifying any CSS, confirm you are working in the correct environment. The wrong location will either have no effect or break existing styles.

CMS
WordPress
Theme
Divi
Theme Builder active
Scope
Theme Builder
Navigation system only
Language
CSS
Avoid PHP in Code Modules

Where CSS lives — exact paths:

WhatLocation
Global header menu CSSDivi → Theme Builder → Header Template → Advanced → Custom CSS
Global site CSSDivi → Theme Options → Custom CSS
Page-specific CSSPage → Divi Page Settings → Custom CSS
Code Module CSSInside Code Module HTML — scoped to page prefix wrapper
Important: CSS placed in Theme Options does not reliably target Theme Builder elements. Always use the Header Template's Advanced CSS field for menu-related styles.
🏗️

Section 03

Navigation Architecture


The UXDW site uses a menu-only global header. This was a deliberate architectural decision — not a Divi default. Most pages use custom full-width layouts without a global header. Rather than duplicating the menu across every page, the menu module was made the sole global element. This eliminated z-index conflicts and created a single source of truth for navigation.

Divi Theme Builder
Header Template (Menu Only)
Menu Module et_pb_fullwidth_menu
Navigation Markup
Custom CSS Layer scoped to .et-l--header
Key decision: This architecture was identified by Cara Harpole — no AI tool suggested it. The menu-only global header is why navigation works reliably across custom page layouts. Do not alter this structure.

For the full investigation behind this decision, see the Debugging an AI Loop case study ↗

📐

Section 04

Implementation Rules


These five rules were established through direct testing in the UXDW Divi environment by Ryan (ChatGPT). They protect the navigation system from structural failures.

  • 01

    Always scope to the header

    Always use .et-l--header .et_pb_menu as the outermost parent scope. This prevents CSS from bleeding into mobile drawers or footer menu instances.

  • 02

    Layer CSS in order

    Write rules in this sequence: container → main links → dropdown panel → dropdown links → mobile. Writing out of order causes cascade conflicts.

  • 03

    Avoid bare element selectors

    Never write bare ul, li, or a selectors. Always qualify with the menu parent. Bare selectors bleed into every list on the page.

  • 04

    Override presentation, not structure

    Never add flex or float to Divi menu structure. Divi manages its own layout. Override color, font, and spacing only.

  • 05

    Use !important surgically

    Only use !important where Divi injects inline styles that cannot otherwise be overridden. Document every instance with a comment.

🔍

Section 05

Verified Selectors


Confirmed working in the UXDW Divi Theme Builder environment. All selectors target the Theme Builder context. Do not substitute legacy #top-menu selectors — they are unreliable in Theme Builder.

TargetVerified SelectorStatus
Menu module scope.et-l--header .et_pb_menu✓ Confirmed
Main nav links.et-l--header .et_pb_menu .et-menu > li > a✓ Confirmed
Current page.et-l--header .et_pb_menu .et-menu li.current-menu-item > a✓ Confirmed
Current ancestor.et-l--header .et_pb_menu .et-menu li.current-menu-ancestor > a✓ Confirmed
Dropdown panel.et-l--header .et_pb_menu .sub-menu✓ Confirmed
Dropdown links.et-l--header .et_pb_menu .sub-menu a✓ Confirmed
Mobile drawer.et-l--header .et_pb_menu .et_mobile_menu✓ Confirmed
Hamburger trigger.et-l--header .et_pb_menu .mobile_menu_bar✓ Confirmed
Legacy — Theme Options#top-menu li > a✗ Unreliable
Auto-generated class.et_pb_menu_0_tb_header✗ Fragile — avoid
💻

Section 06

Master Navigation CSS


Complete current CSS for the UXDW header navigation. Paste the entire block into the Header Template's Advanced CSS field.

Paste location: Divi → Theme Builder → Header Template → (click the header) → Advanced → Custom CSS
UXDW Header Menu CSS Theme Builder → Header Template → Advanced CSS
/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━
   HEADER BACKGROUND
━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
#main-header,
#main-header.et-fixed-header {
  background-color: #190f0a !important;
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━
   MAIN NAV LINKS
━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.et-l--header .et_pb_menu .et-menu > li > a {
  color: #F4E8D8 !important;
  font-family: 'Source Sans 3', sans-serif !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  letter-spacing: 0.02em;
  opacity: 1 !important;
}
.et-l--header .et_pb_menu .et-menu > li > a:hover {
  color: #ffffff !important;
  opacity: 1 !important;
}

/* Current / active page */
.et-l--header .et_pb_menu .et-menu li.current-menu-item > a,
.et-l--header .et_pb_menu .et-menu li.current-menu-ancestor > a {
  color: #ffffff !important;
  font-weight: 600 !important;
  border-bottom: 2px solid #c85a1e;
  box-shadow: none;
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━
   DROPDOWN PANEL
━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.et-l--header .et_pb_menu .sub-menu {
  background-color: #3d1a00 !important;
  border-top: 2px solid #c85a1e !important;
  padding: 8px 0 !important;
}
.et-l--header .et_pb_menu .sub-menu a {
  color: #F4E8D8 !important;
  font-family: 'Source Sans 3', sans-serif !important;
  font-size: 16px !important;
  font-weight: 400 !important;
  padding: 10px 24px !important;
  opacity: 1 !important;
}
.et-l--header .et_pb_menu .sub-menu a:hover {
  color: #ffffff !important;
  background-color: #5a2800 !important;
}

/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━
   MOBILE HAMBURGER
━━━━━━━━━━━━━━━━━━━━━━━━━━━ */
.mobile_menu_bar {
  min-width: 52px !important;
  min-height: 52px !important;
  background: #c85a1e !important;
  border-radius: 6px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.mobile_menu_bar::before {
  color: #ffffff !important;
  font-size: 22px !important;
}

/* Mobile drawer */
.et_mobile_menu {
  background: #3d1a00 !important;
  z-index: 9999;
}
.et_mobile_menu a {
  color: #F4E8D8 !important;
  font-family: 'Source Sans 3', sans-serif !important;
  font-size: 16px !important;
  font-weight: 500 !important;
}
.et_mobile_menu a:hover {
  color: #ffffff !important;
  background: #5a2800 !important;
}
      
⚠️

Section 07

Known Divi Pitfalls


Platform-level Divi behaviors that have caused failures on this site. Each was identified during the debugging investigation.

  • ⚠️ Divi injects inline styles that override CSS rules

    Divi's divi-dynamic stylesheet injects opacity: 0.7 on dropdown hover states at runtime. This overrides external CSS. It was the root cause of the persistent hover failure on this site.

    Fix: Use opacity: 1 !important on hover states. Document every !important usage.
  • ⚠️ overflow:hidden clips dropdown menus

    Any parent container with overflow: hidden will clip dropdown menus. This affects both custom HTML and native Divi menus inside certain section types.

    Fix: Remove overflow: hidden from any container wrapping the menu module.
  • ⚠️ Theme Builder templates can duplicate navigation

    Overlapping template scopes can cause the menu to render twice. This occurred on the About page during this investigation.

    Fix: Audit Theme Builder template scopes. Ensure no conflicting secondary template scopes exist.
  • ⚠️ Auto-generated class names are fragile

    Classes like .et_pb_menu_0_tb_header auto-generated by Divi can change between versions or when templates are re-saved. CSS targeting them will break silently.

    Fix: Always use stable structural selectors like .et-l--header .et_pb_menu.
🔧

Section 08

Debugging Notes


When CSS is not applying as expected, follow this sequence before writing new code:

  • Hard reload in a second browser — eliminates cache as a variable entirely
  • Inspect the element — confirm whether Divi is injecting an inline style override
  • Verify selector location — confirm CSS is in the Header Template, not Theme Options
  • Check for overflow: hidden on parent containers
  • Confirm the selector matches exactly — copy from the verified selector table above
  • Test one property at a time — add, confirm, then add the next
  • Document what failed and why before trying something new
The full investigation — what broke, what failed, and what finally worked — is documented in the Debugging an AI Loop case study. Read it before attempting any structural changes to the navigation system.
📝

Section 09

Contribution & Modification Rules


Rules for anyone modifying the UXDW codebase. These protect the system from unintended regressions.

  • Never introduce unscoped selectors

    All CSS must be scoped to a page prefix wrapper or .et-l--header .et_pb_menu. Bare selectors break the entire site.

  • Avoid modifying Divi module structure

    Do not alter the HTML structure Divi generates for the menu module. Override presentation through CSS only.

  • Avoid using PHP in Code Modules

    Divi Code Modules do not execute PHP. Hardcode all links and values directly in HTML.

  • Document all navigation overrides

    If you add or change navigation CSS, note what changed and why. Every !important must be justified in a comment.

  • Use the page prefix system

    All page-level CSS wraps content in a .prefix-page wrapper. See the prefix registry below.

Page Prefix Registry

PrefixPage
km-Keto Me case study
qp-Queen Pelican case study
vb-Vera Blinds case study
cewqi-CEWQI page
about-About page
cs-Case Studies landing page
iu-Imara Umoja
al-Askadinya Launch
uxdw-Global UXDW components
🎨

Section 10

Optional Reference — Design Tokens


Navigation-relevant color tokens only. For the full design system — typography, contrast ratios, brand guidelines — see the UXDW Style Guide.

TokenHexUsage
Header background#190f0aGlobal header dark background
Nav text#F4E8D8Menu links on dark — full opacity only
Nav hover#ffffffHover state — maximum contrast
Active / current#c85a1eOrange underline on current page
Dropdown panel#3d1a00Dropdown background
Dropdown hover bg#5a2800Hover background in dropdown
Hamburger#c85a1eMobile trigger — 52×52px minimum
📚

References

Sources & Further Reading


SourceRelevance
Divi Lover — Menu Hover EffectsConfirmed correct selector approach for native Divi menu module CSS
WP Page Builders — Divi Menu HoverAlternative approaches and known fragile selector patterns to avoid
Elegant Themes — Divi DocumentationOfficial Divi Theme Builder and menu module architecture reference
Cara's Design Protocol (CDP)Source of all color tokens and accessibility standards on this site
WCAG 2.1 Quick ReferenceContrast ratio requirements and accessibility standards
Diátaxis Documentation FrameworkIndustry framework for structuring developer documentation by purpose