## Major Enhancements ### 🏗️ Architecture & Infrastructure - Implement comprehensive Docker testing infrastructure with hermetic environment - Add Forgejo Actions CI/CD pipeline for automated deployments - Create Page Object Model (POM) testing architecture reducing test duplication by 90% - Establish security-first development patterns with input validation and output escaping ### 🧪 Testing Framework Modernization - Migrate 146+ tests from 80 duplicate files to centralized architecture - Add comprehensive E2E test suites for all user roles and workflows - Implement WordPress error detection with automatic site health monitoring - Create robust browser lifecycle management with proper cleanup ### 📚 Documentation & Guides - Add comprehensive development best practices guide - Create detailed administrator setup documentation - Establish user guides for trainers and master trainers - Document security incident reports and migration guides ### 🔧 Core Plugin Features - Enhance trainer profile management with certification system - Improve find trainer functionality with advanced filtering - Strengthen master trainer area with content management - Add comprehensive venue and organizer management ### 🛡️ Security & Reliability - Implement security-first patterns throughout codebase - Add comprehensive input validation and output escaping - Create secure credential management system - Establish proper WordPress role-based access control ### 🎯 WordPress Integration - Strengthen singleton pattern implementation across all classes - Enhance template hierarchy with proper WordPress integration - Improve page manager with hierarchical URL structure - Add comprehensive shortcode and menu system ### 🔍 Developer Experience - Add extensive debugging and troubleshooting tools - Create comprehensive test data seeding scripts - Implement proper error handling and logging - Establish consistent code patterns and standards ### 📊 Performance & Optimization - Optimize database queries and caching strategies - Improve asset loading and script management - Enhance template rendering performance - Streamline user experience across all interfaces 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			168 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
| /**
 | |
|  * HVAC Page Templates - Global Styles
 | |
|  * Ensures consistent layout for all HVAC plugin pages
 | |
|  */
 | |
| 
 | |
| /* Hide sidebars on all HVAC pages */
 | |
| .hvac-page .widget-area,
 | |
| .hvac-page .sidebar,
 | |
| .hvac-page #secondary,
 | |
| .hvac-page aside.widget-area,
 | |
| .hvac-community-events .widget-area,
 | |
| .hvac-community-events .sidebar,
 | |
| .hvac-community-events #secondary,
 | |
| .hvac-community-events aside.widget-area {
 | |
|     display: none !important;
 | |
| }
 | |
| 
 | |
| /* Full width layout for HVAC pages */
 | |
| .hvac-page #primary,
 | |
| .hvac-page .content-area,
 | |
| .hvac-page .site-main,
 | |
| .hvac-page main,
 | |
| .hvac-community-events #primary,
 | |
| .hvac-community-events .content-area,
 | |
| .hvac-community-events .site-main,
 | |
| .hvac-community-events main {
 | |
|     max-width: 100% !important;
 | |
|     width: 100% !important;
 | |
|     margin: 0 auto;
 | |
| }
 | |
| 
 | |
| /* Ensure content wrapper spans full width */
 | |
| .hvac-page-wrapper {
 | |
|     width: 100%;
 | |
|     max-width: 1200px;
 | |
|     margin: 0 auto;
 | |
|     padding: 40px 20px;
 | |
| }
 | |
| 
 | |
| /* Container styles for consistent spacing */
 | |
| .hvac-page-wrapper .container {
 | |
|     max-width: 1200px;
 | |
|     margin: 0 auto;
 | |
|     padding: 0 20px;
 | |
| }
 | |
| 
 | |
| /* Remove default page title since we handle it in our templates */
 | |
| .hvac-page .entry-title,
 | |
| .hvac-community-events .entry-title {
 | |
|     display: none !important;
 | |
| }
 | |
| 
 | |
| /* ===== MASTER TRAINER SINGLE-COLUMN LAYOUT FIXES ===== */
 | |
| 
 | |
| /* Force single-column layouts on all Master Trainer pages */
 | |
| .hvac-master-google-sheets-page .sync-options,
 | |
| .hvac-master-announcements-page .hvac-grid-2,
 | |
| .hvac-master-announcements-page .hvac-grid-3,
 | |
| .hvac-master-announcements-page .hvac-grid-4,
 | |
| .hvac-master-pending-approvals-page .hvac-grid-2,
 | |
| .hvac-master-pending-approvals-page .hvac-grid-3,
 | |
| .hvac-master-pending-approvals-page .hvac-grid-4,
 | |
| .hvac-master-trainers-page .hvac-grid-2,
 | |
| .hvac-master-trainers-page .hvac-grid-3,
 | |
| .hvac-master-trainers-page .hvac-grid-4,
 | |
| .hvac-master-trainers-page .hvac-stats-tiles,
 | |
| .hvac-master-trainers-page .hvac-trainers-grid {
 | |
|     display: grid !important;
 | |
|     grid-template-columns: 1fr !important;
 | |
|     gap: var(--hvac-space-6, 1.5rem);
 | |
| }
 | |
| 
 | |
| /* Google Sheets specific fixes */
 | |
| .hvac-master-google-sheets-page .sync-options {
 | |
|     display: flex !important;
 | |
|     flex-direction: column !important;
 | |
|     gap: var(--hvac-space-6, 1.5rem);
 | |
| }
 | |
| 
 | |
| .hvac-master-google-sheets-page .sync-card {
 | |
|     width: 100% !important;
 | |
|     max-width: none !important;
 | |
|     display: block !important;
 | |
|     margin-bottom: var(--hvac-space-4, 1rem);
 | |
|     background: var(--hvac-neutral-0, #ffffff);
 | |
|     border: 1px solid var(--hvac-neutral-200, #e5e7eb);
 | |
|     border-radius: var(--hvac-space-2, 0.5rem);
 | |
|     padding: var(--hvac-space-6, 1.5rem);
 | |
|     box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
 | |
| }
 | |
| 
 | |
| .hvac-master-google-sheets-page .template-list,
 | |
| .hvac-master-google-sheets-page .template-item {
 | |
|     display: block !important;
 | |
|     width: 100% !important;
 | |
|     margin-bottom: var(--hvac-space-4, 1rem) !important;
 | |
| }
 | |
| 
 | |
| /* Announcements page single-column fixes */
 | |
| .hvac-master-announcements-page .hvac-announcements-timeline .timeline-wrapper {
 | |
|     display: block !important;
 | |
|     max-width: 100%;
 | |
| }
 | |
| 
 | |
| /* Pending approvals page single-column fixes */
 | |
| .hvac-master-pending-approvals-page .hvac-approval-cards,
 | |
| .hvac-master-pending-approvals-page .hvac-pending-items {
 | |
|     display: grid !important;
 | |
|     grid-template-columns: 1fr !important;
 | |
|     gap: var(--hvac-space-4, 1rem);
 | |
| }
 | |
| 
 | |
| /* Trainers page single-column fixes */
 | |
| .hvac-master-trainers-page .hvac-trainer-cards,
 | |
| .hvac-master-trainers-page .hvac-trainer-grid,
 | |
| .hvac-master-trainers-page .hvac-trainers-list {
 | |
|     display: grid !important;
 | |
|     grid-template-columns: 1fr !important;
 | |
|     gap: var(--hvac-space-4, 1rem);
 | |
| }
 | |
| 
 | |
| /* Ensure navigation and breadcrumbs are visible */
 | |
| .hvac-master-google-sheets-page .hvac-trainer-menu-wrapper,
 | |
| .hvac-master-announcements-page .hvac-trainer-menu-wrapper,
 | |
| .hvac-master-pending-approvals-page .hvac-trainer-menu-wrapper,
 | |
| .hvac-master-trainers-page .hvac-trainer-menu-wrapper {
 | |
|     display: block !important;
 | |
|     visibility: visible !important;
 | |
|     opacity: 1 !important;
 | |
|     margin-bottom: var(--hvac-space-6, 1.5rem);
 | |
| }
 | |
| 
 | |
| /* Breadcrumbs visibility fix */
 | |
| .hvac-master-google-sheets-page .hvac-breadcrumbs,
 | |
| .hvac-master-announcements-page .hvac-breadcrumbs,
 | |
| .hvac-master-pending-approvals-page .hvac-breadcrumbs,
 | |
| .hvac-master-trainers-page .hvac-breadcrumbs {
 | |
|     display: block !important;
 | |
|     visibility: visible !important;
 | |
|     opacity: 1 !important;
 | |
|     margin-bottom: var(--hvac-space-4, 1rem);
 | |
| }
 | |
| 
 | |
| /* Responsive adjustments */
 | |
| @media (max-width: 768px) {
 | |
|     .hvac-page-wrapper {
 | |
|         padding: 20px 15px;
 | |
|     }
 | |
|     
 | |
|     .hvac-page-wrapper .container {
 | |
|         padding: 0 15px;
 | |
|     }
 | |
|     
 | |
|     /* Ensure Master Trainer pages remain single-column on mobile */
 | |
|     .hvac-master-google-sheets-page .sync-options,
 | |
|     .hvac-master-announcements-page .hvac-grid-2,
 | |
|     .hvac-master-announcements-page .hvac-grid-3,
 | |
|     .hvac-master-announcements-page .hvac-grid-4,
 | |
|     .hvac-master-pending-approvals-page .hvac-grid-2,
 | |
|     .hvac-master-pending-approvals-page .hvac-grid-3,
 | |
|     .hvac-master-pending-approvals-page .hvac-grid-4,
 | |
|     .hvac-master-trainers-page .hvac-grid-2,
 | |
|     .hvac-master-trainers-page .hvac-grid-3,
 | |
|     .hvac-master-trainers-page .hvac-grid-4 {
 | |
|         grid-template-columns: 1fr !important;
 | |
|         gap: var(--hvac-space-4, 1rem);
 | |
|     }
 | |
| } |