upskill-event-manager/assets/css/hvac-master-events-overview.css
Ben a74c273b1d feat: complete master trainer area audit and implementation
Systematic audit and implementation of missing Master Trainer functionality
with comprehensive WordPress best practices and security implementation.

## Features Implemented
- Master Events Overview (/master-trainer/events/) - KPI dashboard with filtering
- Import/Export Data Management (/master-trainer/import-export/) - CSV operations
- Communication Templates (/trainer/communication-templates/) - Professional templates
- Enhanced Announcements (/master-trainer/announcements/) - Dynamic shortcode integration
- Pending Approvals System (/master-trainer/pending-approvals/) - Workflow management

## Navigation & UX Improvements
- Removed redundant Events link from top-level navigation menu
- Reorganized administrative functions under Tools dropdown
- Enhanced navigation clarity and professional appearance
- Full responsive design with accessibility compliance

## Architecture & Security
- 5 new singleton manager classes following WordPress patterns
- Comprehensive role-based access control (hvac_master_trainer)
- Complete security implementation (nonces, sanitization, escaping)
- Performance optimizations with transient caching and conditional loading
- Professional error handling and user feedback systems

## Files Added (16 new files)
- 4 manager classes: Import/Export, Events Overview, Pending Approvals, Communication Templates
- 4 CSS files with responsive design and accessibility features
- 4 JavaScript files with AJAX functionality and error handling
- 2 new templates: Import/Export, Pending Approvals
- 2 enhanced templates: Events Overview, Communication Templates

## Files Modified (14 files)
- Core system integration in Plugin, Page Manager, Scripts/Styles classes
- Navigation system cleanup in Master Menu System
- Enhanced access control and role management
- Template updates for dynamic content integration

## Testing & Deployment
- Comprehensive testing with Playwright automation
- Successful staging deployment and verification
- All 5 missing pages now fully functional
- Navigation improvements verified working

Resolves master trainer area audit requirements with production-ready implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-23 09:56:42 -03:00

669 lines
No EOL
13 KiB
CSS

/**
* HVAC Master Events Overview Styles
*
* Follows existing HVAC plugin design patterns with responsive layout,
* consistent spacing, and professional appearance
*/
/* ===================================================================
CONTAINER AND LAYOUT
=================================================================== */
.hvac-master-events-overview {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* ===================================================================
KPI TILES SECTION
=================================================================== */
.hvac-events-kpi-section {
margin-bottom: 30px;
}
.hvac-kpi-loading {
text-align: center;
padding: 40px 20px;
background: #ffffff;
border-radius: 8px;
border: 1px solid #e0e0e0;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.hvac-kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 20px;
}
.hvac-kpi-tile {
background: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 20px;
text-align: center;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
transition: all 0.3s ease;
position: relative;
}
.hvac-kpi-tile:hover {
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
transform: translateY(-2px);
}
.hvac-kpi-icon {
margin-bottom: 12px;
}
.hvac-kpi-icon .dashicons {
font-size: 32px;
color: #007cba;
width: 32px;
height: 32px;
}
.hvac-kpi-number {
font-size: 2.2em;
font-weight: bold;
color: #333;
line-height: 1.2;
margin-bottom: 5px;
}
.hvac-kpi-label {
color: #666;
font-size: 0.9em;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.hvac-kpi-actions {
text-align: right;
margin-top: 10px;
}
/* ===================================================================
FILTERS SECTION
=================================================================== */
.hvac-events-filters-section {
background: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 25px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.hvac-filters-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
align-items: end;
}
.hvac-filter-group {
display: flex;
flex-direction: column;
}
.hvac-filter-group label {
font-weight: 600;
color: #333;
margin-bottom: 5px;
font-size: 14px;
}
.hvac-filter-group input,
.hvac-filter-group select {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
background: #ffffff;
transition: border-color 0.3s ease;
}
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: none;
border-color: #007cba;
box-shadow: 0 0 0 2px rgba(0, 124, 186, 0.1);
}
.hvac-filter-search {
grid-column: span 2;
min-width: 300px;
}
.hvac-filter-actions {
display: flex;
gap: 10px;
align-items: end;
flex-wrap: wrap;
}
/* ===================================================================
VIEW TOGGLE SECTION
=================================================================== */
.hvac-events-view-toggle {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding: 15px 0;
border-bottom: 1px solid #e0e0e0;
}
.hvac-view-controls {
display: flex;
gap: 10px;
}
.hvac-view-btn {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 15px;
background: #ffffff;
border: 1px solid #ddd;
border-radius: 4px;
color: #666;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
font-size: 14px;
font-weight: 500;
}
.hvac-view-btn:hover {
border-color: #007cba;
color: #007cba;
background: #f8f9fa;
}
.hvac-view-btn-active {
background: #007cba !important;
color: #ffffff !important;
border-color: #007cba !important;
}
.hvac-view-btn .dashicons {
font-size: 16px;
width: 16px;
height: 16px;
}
.hvac-view-info {
color: #666;
font-size: 14px;
}
/* ===================================================================
EVENTS CONTENT SECTION
=================================================================== */
.hvac-events-content {
background: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 8px;
min-height: 400px;
}
/* Loading States */
.hvac-events-loading,
.hvac-calendar-loading {
text-align: center;
padding: 60px 20px;
color: #666;
}
.hvac-spinner {
border: 3px solid #f3f3f3;
border-top: 3px solid #007cba;
border-radius: 50%;
width: 30px;
height: 30px;
animation: hvac-spin 1s linear infinite;
margin: 0 auto 15px;
}
@keyframes hvac-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* ===================================================================
TABLE VIEW
=================================================================== */
.hvac-events-table-wrapper {
padding: 0;
}
.hvac-events-table {
width: 100%;
border-collapse: collapse;
background: #ffffff;
}
.hvac-events-table thead {
background: #f8f9fa;
border-bottom: 2px solid #e0e0e0;
}
.hvac-events-table th {
padding: 15px 12px;
text-align: left;
font-weight: 600;
color: #333;
border-right: 1px solid #e0e0e0;
position: relative;
cursor: pointer;
user-select: none;
}
.hvac-events-table th:last-child {
border-right: none;
}
.hvac-sortable:hover {
background: #e9ecef;
}
.hvac-sort-indicator {
margin-left: 5px;
opacity: 0.5;
}
.hvac-sortable.hvac-sort-asc .hvac-sort-indicator:after {
content: "↑";
opacity: 1;
}
.hvac-sortable.hvac-sort-desc .hvac-sort-indicator:after {
content: "↓";
opacity: 1;
}
.hvac-events-table td {
padding: 12px;
border-bottom: 1px solid #f0f0f0;
border-right: 1px solid #f0f0f0;
vertical-align: top;
}
.hvac-events-table td:last-child {
border-right: none;
}
.hvac-events-table tbody tr:hover {
background: #f8f9fa;
}
.hvac-events-table tbody tr:last-child td {
border-bottom: none;
}
/* Status Badges */
.hvac-status-badge {
display: inline-block;
padding: 4px 8px;
border-radius: 12px;
font-size: 11px;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.hvac-status-publish {
background: #d4edda;
color: #155724;
}
.hvac-status-draft {
background: #fff3cd;
color: #856404;
}
.hvac-status-pending {
background: #d1ecf1;
color: #0c5460;
}
.hvac-status-upcoming {
background: #cce5ff;
color: #004085;
}
.hvac-status-past {
background: #e2e3e5;
color: #383d41;
}
/* No Events State */
.hvac-no-events {
text-align: center;
padding: 60px 20px;
color: #666;
}
.hvac-no-events p {
margin-bottom: 20px;
font-size: 16px;
}
/* ===================================================================
PAGINATION
=================================================================== */
.hvac-pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 5px;
padding: 20px;
border-top: 1px solid #e0e0e0;
}
.hvac-pagination-btn {
padding: 8px 12px;
border: 1px solid #ddd;
background: #ffffff;
color: #666;
cursor: pointer;
border-radius: 4px;
font-size: 14px;
transition: all 0.3s ease;
}
.hvac-pagination-btn:hover {
border-color: #007cba;
color: #007cba;
}
.hvac-pagination-btn.hvac-btn-primary {
background: #007cba;
border-color: #007cba;
color: #ffffff;
}
.hvac-pagination-dots {
padding: 8px 4px;
color: #999;
}
/* ===================================================================
CALENDAR VIEW
=================================================================== */
.hvac-events-calendar-view {
padding: 0;
}
.hvac-simple-calendar {
padding: 20px;
}
.hvac-calendar-date-group {
margin-bottom: 30px;
}
.hvac-calendar-date-header {
color: #333;
font-size: 18px;
font-weight: 600;
margin-bottom: 15px;
padding-bottom: 8px;
border-bottom: 2px solid #007cba;
}
.hvac-calendar-events {
display: grid;
gap: 12px;
}
.hvac-calendar-event-item {
background: #ffffff;
border: 1px solid #e0e0e0;
border-left: 4px solid #007cba;
border-radius: 4px;
padding: 15px;
transition: all 0.3s ease;
}
.hvac-calendar-event-item:hover {
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
transform: translateY(-1px);
}
.hvac-calendar-event-item.hvac-status-draft {
border-left-color: #ffc107;
}
.hvac-calendar-event-item.hvac-status-pending {
border-left-color: #17a2b8;
}
.hvac-event-title {
font-weight: 600;
margin-bottom: 5px;
}
.hvac-event-title a {
color: #333;
text-decoration: none;
}
.hvac-event-title a:hover {
color: #007cba;
text-decoration: underline;
}
.hvac-event-trainer {
color: #666;
font-size: 14px;
margin-bottom: 8px;
}
.hvac-event-details {
font-size: 12px;
color: #888;
}
/* ===================================================================
BUTTONS
=================================================================== */
.hvac-btn {
display: inline-block;
padding: 8px 16px;
border-radius: 4px;
text-decoration: none;
font-weight: 500;
cursor: pointer;
border: 1px solid transparent;
text-align: center;
transition: all 0.3s ease;
font-size: 14px;
line-height: 1.4;
}
.hvac-btn-primary {
background: #007cba;
color: #ffffff;
border-color: #007cba;
}
.hvac-btn-primary:hover {
background: #005a8b;
border-color: #005a8b;
color: #ffffff;
}
.hvac-btn-secondary {
background: #ffffff;
color: #666;
border-color: #ddd;
}
.hvac-btn-secondary:hover {
background: #f8f9fa;
border-color: #999;
color: #333;
}
.hvac-btn-sm {
padding: 5px 10px;
font-size: 12px;
}
/* ===================================================================
NOTICES
=================================================================== */
.hvac-notice {
padding: 15px;
margin: 20px 0;
border-left: 4px solid;
border-radius: 4px;
}
.hvac-notice-error {
background: #ffeaea;
border-left-color: #dc3545;
color: #721c24;
}
/* ===================================================================
RESPONSIVE DESIGN
=================================================================== */
@media (max-width: 1024px) {
.hvac-master-events-overview {
padding: 0 15px;
}
.hvac-kpi-grid {
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 15px;
}
.hvac-filters-row {
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 15px;
}
.hvac-filter-search {
grid-column: span 1;
min-width: auto;
}
}
@media (max-width: 768px) {
.hvac-events-view-toggle {
flex-direction: column;
gap: 15px;
align-items: stretch;
}
.hvac-view-controls {
justify-content: center;
}
.hvac-view-info {
text-align: center;
}
.hvac-events-table-wrapper {
overflow-x: auto;
}
.hvac-events-table {
min-width: 800px;
}
.hvac-filter-actions {
grid-column: 1 / -1;
justify-content: center;
}
.hvac-pagination {
flex-wrap: wrap;
}
.hvac-kpi-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.hvac-master-events-overview {
padding: 0 10px;
}
.hvac-events-filters-section {
padding: 15px;
}
.hvac-filters-row {
grid-template-columns: 1fr;
gap: 15px;
}
.hvac-kpi-grid {
grid-template-columns: 1fr;
}
.hvac-kpi-tile {
padding: 15px;
}
.hvac-view-btn {
padding: 8px 12px;
font-size: 13px;
}
.hvac-events-table {
font-size: 12px;
}
.hvac-events-table th,
.hvac-events-table td {
padding: 8px;
}
}
/* ===================================================================
PRINT STYLES
=================================================================== */
@media print {
.hvac-events-filters-section,
.hvac-events-view-toggle,
.hvac-kpi-actions,
.hvac-pagination,
.hvac-btn {
display: none !important;
}
.hvac-master-events-overview {
max-width: none;
padding: 0;
}
.hvac-events-table {
border: 1px solid #000;
}
.hvac-events-table th,
.hvac-events-table td {
border: 1px solid #000;
}
}