feat: Add missing HVAC CSS files for multi-machine deployment

- Add 13 critical CSS files that were missing from repository
- Fixes deployment issues on other machines/environments
- Files include dashboard, templates, certificates, and common styles
- All files force-added to override .gitignore CSS exclusions

🔧 Generated with Claude Code

Co-Authored-By: Ben Reed <ben@tealmaker.com>
This commit is contained in:
bengizmo 2025-08-11 13:19:33 -03:00
parent 03e643b2bc
commit 94092154e6
13 changed files with 8289 additions and 0 deletions

View file

@ -0,0 +1,598 @@
/**
* HVAC Communication Templates Styling
*
* Styles for the email template management system
*
* @version 1.0.0
*/
/* Template Management Container */
.hvac-template-manager {
background: var(--hvac-background-white);
border-radius: var(--hvac-radius-lg);
box-shadow: var(--hvac-shadow-md);
padding: var(--hvac-spacing-6);
margin-bottom: var(--hvac-spacing-6);
border: 1px solid var(--hvac-border);
}
.hvac-template-manager h3 {
color: var(--hvac-theme-text-dark);
font-size: var(--hvac-font-size-lg);
font-weight: var(--hvac-font-weight-semibold);
margin: 0 0 var(--hvac-spacing-4) 0;
display: flex;
align-items: center;
gap: var(--hvac-spacing-2);
}
.hvac-template-manager h3::before {
content: '📝';
font-size: var(--hvac-font-size-xl);
}
/* Template Actions */
.hvac-template-actions {
display: flex;
gap: var(--hvac-spacing-3);
margin-bottom: var(--hvac-spacing-4);
flex-wrap: wrap;
align-items: center;
}
.hvac-template-toggle {
background: var(--hvac-primary);
color: white;
border: none;
padding: var(--hvac-spacing-2) var(--hvac-spacing-4);
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-sm);
font-weight: var(--hvac-font-weight-medium);
cursor: pointer;
transition: all var(--hvac-transition-fast);
display: flex;
align-items: center;
gap: var(--hvac-spacing-1);
}
.hvac-template-toggle:hover {
background: var(--hvac-primary-dark);
transform: translateY(-1px);
}
.hvac-template-toggle.active {
background: var(--hvac-success);
}
/* Template List */
.hvac-template-list {
margin-bottom: var(--hvac-spacing-4);
}
.hvac-template-selector {
display: flex;
gap: var(--hvac-spacing-3);
align-items: center;
flex-wrap: wrap;
margin-bottom: var(--hvac-spacing-4);
}
.hvac-template-dropdown {
min-width: 200px;
padding: var(--hvac-spacing-2) var(--hvac-spacing-3);
border: 2px solid var(--hvac-border);
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-sm);
background: var(--hvac-background-white);
cursor: pointer;
transition: border-color var(--hvac-transition-fast);
}
.hvac-template-dropdown:focus {
border-color: var(--hvac-primary);
outline: none;
box-shadow: 0 0 0 3px var(--hvac-primary-light);
}
.hvac-template-category-filter {
min-width: 150px;
padding: var(--hvac-spacing-2) var(--hvac-spacing-3);
border: 2px solid var(--hvac-border);
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-sm);
background: var(--hvac-background-white);
}
.hvac-template-actions-buttons {
display: flex;
gap: var(--hvac-spacing-2);
}
.hvac-btn-load, .hvac-btn-edit, .hvac-btn-delete, .hvac-btn-save {
padding: var(--hvac-spacing-2) var(--hvac-spacing-3);
border: none;
border-radius: var(--hvac-radius-sm);
font-size: var(--hvac-font-size-sm);
font-weight: var(--hvac-font-weight-medium);
cursor: pointer;
transition: all var(--hvac-transition-fast);
display: flex;
align-items: center;
gap: var(--hvac-spacing-1);
}
.hvac-btn-load {
background: var(--hvac-accent);
color: white;
}
.hvac-btn-load:hover {
background: var(--hvac-accent-dark);
}
.hvac-btn-edit {
background: var(--hvac-warning);
color: white;
}
.hvac-btn-edit:hover {
background: var(--hvac-warning-dark);
}
.hvac-btn-delete {
background: var(--hvac-error);
color: white;
}
.hvac-btn-delete:hover {
background: var(--hvac-error-dark);
}
.hvac-btn-save {
background: var(--hvac-success);
color: white;
}
.hvac-btn-save:hover {
background: var(--hvac-success-dark);
}
/* Template Form */
.hvac-template-form {
background: var(--hvac-background-subtle);
padding: var(--hvac-spacing-5);
border-radius: var(--hvac-radius-md);
border: 1px solid var(--hvac-border-light);
margin-bottom: var(--hvac-spacing-4);
display: none;
}
.hvac-template-form.active {
display: block;
animation: hvac-fadeIn 0.3s ease-out;
}
@keyframes hvac-fadeIn {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
.hvac-template-form-row {
margin-bottom: var(--hvac-spacing-4);
}
.hvac-template-form-row label {
display: block;
margin-bottom: var(--hvac-spacing-2);
font-weight: var(--hvac-font-weight-semibold);
color: var(--hvac-theme-text-dark);
font-size: var(--hvac-font-size-sm);
}
.hvac-template-form-row input[type="text"],
.hvac-template-form-row select,
.hvac-template-form-row textarea {
width: 100%;
padding: var(--hvac-spacing-3);
border: 2px solid var(--hvac-border);
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-md);
font-family: var(--hvac-font-family);
background: var(--hvac-background-white);
transition: border-color var(--hvac-transition-fast);
box-sizing: border-box;
}
.hvac-template-form-row input[type="text"]:focus,
.hvac-template-form-row select:focus,
.hvac-template-form-row textarea:focus {
border-color: var(--hvac-primary);
outline: none;
box-shadow: 0 0 0 3px var(--hvac-primary-light);
}
.hvac-template-form-row textarea {
min-height: 200px;
resize: vertical;
font-family: 'Courier New', monospace;
line-height: 1.6;
}
/* Required field indicator */
.hvac-required {
color: var(--hvac-error);
font-weight: bold;
}
/* Placeholder Helper */
.hvac-placeholder-helper {
background: var(--hvac-info-light);
border: 1px solid var(--hvac-accent);
border-radius: var(--hvac-radius-md);
padding: var(--hvac-spacing-4);
margin-bottom: var(--hvac-spacing-4);
}
.hvac-placeholder-helper h4 {
color: var(--hvac-accent);
font-size: var(--hvac-font-size-md);
font-weight: var(--hvac-font-weight-semibold);
margin: 0 0 var(--hvac-spacing-3) 0;
display: flex;
align-items: center;
gap: var(--hvac-spacing-2);
}
.hvac-placeholder-helper h4::before {
content: '💡';
}
.hvac-placeholder-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--hvac-spacing-2);
}
.hvac-placeholder-item {
background: var(--hvac-background-white);
border: 1px solid var(--hvac-border-light);
border-radius: var(--hvac-radius-sm);
padding: var(--hvac-spacing-2) var(--hvac-spacing-3);
cursor: pointer;
transition: all var(--hvac-transition-fast);
font-size: var(--hvac-font-size-sm);
display: flex;
justify-content: space-between;
align-items: center;
}
.hvac-placeholder-item:hover {
background: var(--hvac-primary-light);
border-color: var(--hvac-primary);
transform: translateY(-1px);
}
.hvac-placeholder-code {
font-family: 'Courier New', monospace;
font-weight: var(--hvac-font-weight-bold);
color: var(--hvac-primary);
}
.hvac-placeholder-desc {
color: var(--hvac-theme-text-light);
font-size: var(--hvac-font-size-xs);
}
/* Form Actions */
.hvac-template-form-actions {
display: flex;
gap: var(--hvac-spacing-3);
justify-content: flex-end;
align-items: center;
margin-top: var(--hvac-spacing-5);
padding-top: var(--hvac-spacing-4);
border-top: 1px solid var(--hvac-border-light);
}
.hvac-template-form-actions button {
padding: var(--hvac-spacing-3) var(--hvac-spacing-5);
border: none;
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-md);
font-weight: var(--hvac-font-weight-semibold);
cursor: pointer;
transition: all var(--hvac-transition-fast);
min-width: 120px;
}
.hvac-btn-primary {
background: var(--hvac-primary);
color: white;
}
.hvac-btn-primary:hover {
background: var(--hvac-primary-dark);
transform: translateY(-2px);
box-shadow: var(--hvac-shadow-md);
}
.hvac-btn-secondary {
background: var(--hvac-theme-text-light);
color: white;
}
.hvac-btn-secondary:hover {
background: var(--hvac-theme-text);
}
/* Loading State */
.hvac-loading {
opacity: 0.6;
pointer-events: none;
}
.hvac-spinner {
width: 20px;
height: 20px;
border: 2px solid rgba(255, 255, 255, 0.3);
border-top: 2px solid white;
border-radius: 50%;
animation: hvac-spin 1s linear infinite;
display: inline-block;
margin-right: var(--hvac-spacing-2);
}
@keyframes hvac-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Messages */
.hvac-template-message {
padding: var(--hvac-spacing-3) var(--hvac-spacing-4);
border-radius: var(--hvac-radius-md);
margin-bottom: var(--hvac-spacing-4);
font-size: var(--hvac-font-size-sm);
font-weight: var(--hvac-font-weight-medium);
display: flex;
align-items: center;
gap: var(--hvac-spacing-2);
}
.hvac-template-message.success {
background: var(--hvac-success-light);
color: var(--hvac-success-dark);
border: 1px solid var(--hvac-success);
}
.hvac-template-message.success::before {
content: '✓';
font-weight: bold;
}
.hvac-template-message.error {
background: var(--hvac-error-light);
color: var(--hvac-error-dark);
border: 1px solid var(--hvac-error);
}
.hvac-template-message.error::before {
content: '⚠';
font-weight: bold;
}
/* Empty State */
.hvac-template-empty {
text-align: center;
padding: var(--hvac-spacing-8);
color: var(--hvac-theme-text-light);
}
.hvac-template-empty-icon {
font-size: 3rem;
margin-bottom: var(--hvac-spacing-4);
opacity: 0.5;
}
.hvac-template-empty h4 {
font-size: var(--hvac-font-size-lg);
margin-bottom: var(--hvac-spacing-2);
color: var(--hvac-theme-text);
}
.hvac-template-empty p {
font-size: var(--hvac-font-size-md);
line-height: 1.6;
}
/* Responsive Design */
@media (max-width: 768px) {
.hvac-template-selector {
flex-direction: column;
align-items: stretch;
}
.hvac-template-dropdown,
.hvac-template-category-filter {
min-width: auto;
width: 100%;
}
.hvac-template-actions-buttons {
flex-wrap: wrap;
gap: var(--hvac-spacing-2);
}
.hvac-template-actions-buttons button {
flex: 1;
min-width: auto;
}
.hvac-placeholder-grid {
grid-template-columns: 1fr;
}
.hvac-template-form-actions {
flex-direction: column;
align-items: stretch;
}
.hvac-template-form-actions button {
width: 100%;
}
}
@media (max-width: 480px) {
.hvac-template-manager {
padding: var(--hvac-spacing-4);
}
.hvac-template-form {
padding: var(--hvac-spacing-4);
}
.hvac-template-actions {
flex-direction: column;
align-items: stretch;
}
.hvac-template-toggle {
width: 100%;
justify-content: center;
}
}
/* Integration with Email Form */
.hvac-email-form .hvac-template-manager {
margin-bottom: var(--hvac-spacing-6);
border: 2px solid var(--hvac-primary-light);
}
.hvac-email-form .hvac-template-manager h3 {
color: var(--hvac-primary);
}
/* WordPress Editor Integration */
.hvac-template-content-wp-editor {
border: 2px solid var(--hvac-border);
border-radius: var(--hvac-radius-md);
overflow: hidden;
}
.hvac-template-content-wp-editor iframe {
border: none;
width: 100%;
min-height: 200px;
}
/* Accessibility Improvements */
.hvac-template-manager button:focus,
.hvac-template-manager select:focus,
.hvac-template-manager input:focus {
outline: 2px solid var(--hvac-primary);
outline-offset: 2px;
}
.hvac-template-manager [aria-disabled="true"] {
opacity: 0.6;
cursor: not-allowed;
}
/* Print Styles */
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
border-radius: 4px;
}
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
border-radius: 2px;
}
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
}
}
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
box-shadow: none;
}
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
}
@media print {
.hvac-template-manager {
box-shadow: none;
border: 1px solid #000;
}
.hvac-template-actions,
.hvac-template-form-actions {
display: none;
}
}

View file

@ -0,0 +1,335 @@
/**
* HVAC Community Events: Enhanced Community Login Styles
*
* Styles for the custom login form page.
*
* @version 2.0.0
*/
/* Login Page Container */
.hvac-community-login-wrapper {
padding: var(--hvac-spacing-xl) 0;
min-height: 60vh;
display: flex;
align-items: center;
justify-content: center;
background-color: #f9fafb;
}
/* Login Card */
.hvac-login-form-card {
max-width: 450px;
width: 100%;
margin: 0 auto;
padding: var(--hvac-spacing-xl);
background-color: white;
border: 1px solid var(--hvac-border);
box-shadow: var(--hvac-shadow-lg);
border-radius: var(--hvac-border-radius-lg);
transition: transform 0.3s, box-shadow 0.3s;
}
.hvac-login-form-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}
/* Login Card Header */
.hvac-login-form-header {
text-align: center;
margin-bottom: var(--hvac-spacing-lg);
}
.hvac-login-form-header h2 {
color: var(--hvac-primary);
font-size: 1.8rem;
margin-bottom: var(--hvac-spacing-sm);
font-weight: 700;
}
.hvac-login-form-header p {
color: var(--hvac-text-light);
font-size: 1rem;
}
/* Login Form Elements */
#hvac_community_loginform {
margin-bottom: var(--hvac-spacing-lg);
}
#hvac_community_loginform p {
margin-bottom: var(--hvac-spacing-md);
}
#hvac_community_loginform label {
display: block;
margin-bottom: var(--hvac-spacing-sm);
font-weight: 600;
color: var(--hvac-text);
font-size: 0.95rem;
}
#hvac_community_loginform input[type="text"],
#hvac_community_loginform input[type="password"] {
width: 100%;
padding: 0.85rem;
border: 1px solid var(--hvac-border);
border-radius: var(--hvac-border-radius);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
background-color: #f9fafb;
}
#hvac_community_loginform input[type="text"]:focus,
#hvac_community_loginform input[type="password"]:focus {
border-color: var(--hvac-primary);
outline: none;
box-shadow: 0 0 0 3px var(--hvac-primary-light);
background-color: white;
}
/* Remember Me Checkbox */
.login-remember {
margin-bottom: var(--hvac-spacing-md) !important;
}
#hvac_community_loginform .login-remember label {
font-weight: normal;
display: flex;
align-items: center;
cursor: pointer;
color: var(--hvac-text-light);
font-size: 0.9rem;
}
#hvac_community_loginform .login-remember input[type="checkbox"] {
margin-right: var(--hvac-spacing-sm);
cursor: pointer;
width: 18px;
height: 18px;
}
/* Login Button */
.login-submit {
margin-bottom: var(--hvac-spacing-md) !important;
}
#hvac_community_loginform .login-submit #wp-submit {
display: block;
width: 100%;
padding: 0.85rem;
background-color: var(--hvac-primary);
color: white;
border: none;
border-radius: var(--hvac-border-radius);
font-size: 1rem;
font-weight: 600;
cursor: pointer;
text-align: center;
transition: background-color 0.2s, transform 0.1s;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: var(--hvac-shadow);
}
#hvac_community_loginform .login-submit #wp-submit:hover {
background-color: var(--hvac-primary-dark);
transform: translateY(-1px);
box-shadow: var(--hvac-shadow-lg);
}
#hvac_community_loginform .login-submit #wp-submit:active {
transform: translateY(0);
}
/* Additional Links */
.hvac-login-links {
margin-top: var(--hvac-spacing-lg);
text-align: center;
display: flex;
justify-content: space-between;
padding-top: var(--hvac-spacing-md);
border-top: 1px solid var(--hvac-border-light);
}
.hvac-login-links a {
color: var(--hvac-primary);
text-decoration: none;
font-size: 0.9rem;
font-weight: 500;
transition: color 0.2s;
}
.hvac-login-links a:hover {
color: var(--hvac-primary-dark);
text-decoration: underline;
}
/* Login Error Message */
.login-error {
background-color: #fef2f2;
color: #dc2626;
padding: var(--hvac-spacing-md);
border-radius: var(--hvac-border-radius);
margin-bottom: var(--hvac-spacing-lg);
border-left: 4px solid #dc2626;
font-size: 0.95rem;
}
/* Login Success Message */
.login-success {
background-color: #f0fdf4;
color: #16a34a;
padding: var(--hvac-spacing-md);
border-radius: var(--hvac-border-radius);
margin-bottom: var(--hvac-spacing-lg);
border-left: 4px solid #16a34a;
font-size: 0.95rem;
}
/* Image/Logo Placeholder if needed */
.hvac-login-logo {
text-align: center;
margin-bottom: var(--hvac-spacing-lg);
}
.hvac-login-logo img {
max-width: 180px;
height: auto;
}
/* Responsive Adjustments */
@media (max-width: 767px) {
.hvac-community-login-wrapper {
padding: 40px 20px !important; /* Ensure minimum 20px padding */
}
.hvac-login-form-card {
max-width: calc(100% - 40px); /* Account for wrapper padding */
width: 100%;
padding: var(--hvac-spacing-lg);
margin: 0 auto;
box-sizing: border-box;
}
.hvac-login-links {
flex-direction: column;
gap: var(--hvac-spacing-md);
}
.hvac-login-form-header h2 {
font-size: 1.5rem;
}
}
@media (max-width: 480px) {
.hvac-community-login-wrapper {
padding: 30px 15px !important; /* Slightly less on very small screens but still generous */
}
.hvac-login-form-card {
max-width: calc(100% - 30px); /* Account for wrapper padding */
padding: var(--hvac-spacing-md);
}
#hvac_community_loginform input[type="text"],
#hvac_community_loginform input[type="password"] {
font-size: 16px; /* Prevent zoom on iOS */
padding: 12px 15px;
}
}
@media (max-width: 375px) {
.hvac-community-login-wrapper {
padding: 20px 15px !important; /* Ensure generous spacing on smallest screens */
}
.hvac-login-form-card {
max-width: calc(100% - 30px);
padding: 20px 15px;
}
}
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
border-radius: 4px;
}
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
border-radius: 2px;
}
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
}
}
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
box-shadow: none;
}
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
}

View file

@ -0,0 +1,825 @@
/* Reduced Motion Support Added - 2025-07-23 */
/* Vendor Prefixes Added - 2025-07-23 */
/**
* HVAC Attendee Profile Styles
* Harmonized with existing plugin styles
*/
.hvac-attendee-profile {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
/* Profile Header */
.hvac-profile-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
margin-bottom: 2em;
padding-bottom: 1em;
border-bottom: 1px solid #e0e0e0;
-ms-flex-wrap: wrap;
.hvac-profile-title h1 {
margin: 0 0 0.5em 0;
color: #333;
font-size: 1.8rem;
font-weight: 600;
.hvac-profile-subtitle {
color: #666;
font-size: 1.1rem;
font-weight: 500;
display: block;
.hvac-profile-actions {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
gap: 10px;
-ms-flex-wrap: wrap;
.hvac-profile-actions a,
.hvac-profile-actions button {
min-width: 120px;
text-align: center;
/* Statistics Row - Matching Dashboard Styles */
.hvac-stats-row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
-ms-flex-wrap: wrap;
margin: -10px;
margin-bottom: 2em;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
.hvac-stat-col {
-webkit-box-flex: 1;
-ms-flex: 1;
min-width: 160px;
padding: 10px;
margin-bottom: 0.5em;
.hvac-stat-card {
border: 1px solid #e0e0e0;
-webkit-border-radius: 5px;
border-radius: 5px;
border-radius: 5px;
padding: 1.5em;
background: white;
text-align: center;
width: 100%;
flex-grow: 1;
height: 100%;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
-webkit-transition: transform 0.2s, box-shadow 0.2s;
.hvac-stat-card:hover {
-webkit-transform: translateY(-2px);
-ms-transform: translateY(-2px);
-webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.15);
.hvac-stat-card h3 {
margin-top: 0;
margin-bottom: 0.5em;
font-size: 1.1em;
color: #007cba;
font-weight: 600;
.stat-value {
font-size: 2.4em;
font-weight: 700;
color: #333;
line-height: 1;
/* Content Sections */
.hvac-content-section {
margin-bottom: 2em;
padding: 1.5em;
border: 1px solid #e0e0e0;
border-radius: 5px;
background-color: white;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.05);
.hvac-content-section h2 {
margin-top: 0;
margin-bottom: 1em;
font-size: 1.4rem;
color: #333;
padding-bottom: 0.5em;
border-bottom: 1px solid #e0e0e0;
/* Info Table */
.hvac-info-table {
overflow-x: auto;
.hvac-table {
width: 100%;
border-collapse: collapse;
.hvac-table td {
padding: 0.75em 1em;
border-bottom: 1px solid #e0e0e0;
.hvac-table;
tr: last-child td {
border-bottom: none;
.hvac-label {
font-weight: 600;
color: #666;
width: 150px;
.hvac-table a {
color: #007cba;
text-decoration: none;
.hvac-table;
.a:hover {
text-decoration: underline;
/* Timeline */
.hvac-no-activity {
text-align: center;
color: #666;
padding: 2em;
background: #f9f9f9;
border-radius: 5px;
.hvac-timeline {
position: relative;
padding-left: 40px;
.hvac-timeline-item {
position: relative;
margin-bottom: 2em;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start;
gap: 20px;
.hvac-timeline-date {
flex: 0 0 150px;
text-align: right;
padding-top: 5px;
font-weight: 600;
color: #333;
font-size: 14px;
.hvac-timeline-time {
display: block;
font-weight: 400;
color: #999;
font-size: 12px;
margin-top: 2px;
.hvac-timeline-marker {
position: absolute;
left: 168px;
top: 0;
width: 40px;
height: 40px;
-webkit-border-radius: 50%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
color: #fff;
z-index: 2;
-webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
.hvac-timeline-marker i {
font-size: 16px;
.hvac-timeline-connector {
position: absolute;
left: 187px;
top: 40px;
width: 2px;
height: calc(100% + 20px);
background: #e0e0e0;
z-index: 1;
.hvac-timeline-content {
-webkit-box-flex: 1;
-ms-flex: 1;
background: #fff;
padding: 1.5em;
border-radius: 5px;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
margin-left: 40px;
.hvac-timeline-content h4 {
margin: 0 0 0.5em 0;
color: #333;
font-size: 16px;
font-weight: 600;
.hvac-checkin-status {
display: inline-block;
padding: 4px 12px;
-webkit-border-radius: 20px;
border-radius: 20px;
font-size: 12px;
font-weight: 500;
margin-right: 10px;
.hvac-checkin-status.checked-in {
background: #d4edda;
color: #155724;
.hvac-checkin-status.not-checked-in {
background: #f3f4f6;
color: #6b7280;
.hvac-certificate-number {
display: inline-block;
padding: 4px 12px;
background: #fff3cd;
color: #856404;
border-radius: 20px;
font-size: 12px;
font-weight: 500;
margin-right: 10px;
.hvac-event-link {
display: inline-block;
margin-top: 10px;
color: #007cba;
text-decoration: none;
font-size: 14px;
font-weight: 500;
.hvac-event-link:hover {
text-decoration: underline;
.hvac-event-link i {
font-size: 12px;
margin-left: 5px;
/* Icon for profile links */
.hvac-attendee-profile-icon {
display: inline-block;
margin-left: 10px;
color: #007cba;
text-decoration: none;
font-size: 16px;
vertical-align: middle;
.hvac-attendee-profile-icon:hover {
color: #005a87;
/* Responsive Design */
/* Reduced Motion Support Added - WCAG 2.1 Accessibility */
/* Respects user preference for reduced motion to prevent vestibular disorders */
@media (prefers-reduced-motion: reduce) {
/* Disable all animations and transitions globally */
*, *::before, *::after {
animation-duration: 0.001ms !important;
animation-delay: 0s !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
transition-delay: 0s !important;
scroll-behavior: auto !important;
/* Remove specific transform animations */
.hvac-animate-fade-in,
.hvac-animate-scale-up,
.hvac-animate-pulse,
.hvac-animate-slide-in-right,
.hvac-animate-slide-in-left,
.hvac-animate-slide-in-bottom {
animation: none !important;
opacity: 1 !important;
transform: none !important;
/* Disable hover transformations */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover,
.hvac-button:hover,
.hvac-email-submit:hover {
transform: none !important;
animation: none !important;
/* Keep essential visual feedback but remove motion */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover {
border-color: var(--hvac-primary, #0274be) !important;
box-shadow: 0 0 0 2px rgba(2, 116, 190, 0.2) !important;
/* Disable loading spinner animation but keep visibility */
.hvac-loading::after {
animation: none !important;
border-radius: 50% !important;
border: 2px solid rgba(0, 0, 0, 0.2) !important;
border-top-color: #333 !important;
/* Disable focus pulse animation */
.hvac-button:focus,
.hvac-email-submit:focus,
.hvac-content button[type="submit"]:focus {
animation: none !important;
/* Ensure smooth scrolling is disabled */
html {
scroll-behavior: auto !important;
/* Disable CSS Grid/Flexbox animations if any */
.hvac-dashboard-stats .hvac-stat-card:nth-child(n),
.hvac-event-summary-stats .hvac-event-stat-card: nth-child(n) {
animation: none !important;
opacity: 1 !important;
/* Provide alternative visual feedback for reduced motion users */
@media (prefers-reduced-motion: reduce) {
/* Enhanced border feedback instead of transform */
.hvac-content button:hover,
.hvac-content input[type="submit"]:hover,
.hvac-content a:hover {
outline: 2px solid var(--hvac-primary, #0274be) !important;
outline-offset: 2px !important;
/* Enhanced color changes for interactive elements */
.hvac-attendee-item:hover {
background-color: var(--hvac-primary-light, #e6f3fb) !important;
border-left: 4px solid var(--hvac-primary, #0274be) !important;
/* Static loading indicator */
.hvac-loading {
opacity: 0.7 !important;
.hvac-loading::after {
content: "Loading..." !important;
display: inline-block !important;
font-size: 12px !important;
color: #666 !important;
border: none !important;
background: none !important;
border-radius: 0 !important;
width: auto !important;
height: auto !important;
position: static !important;
margin-left: 8px !important;
@media (max-width: 768px) {
.hvac-profile-header {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start;
gap: 1em;
.hvac-profile-actions {
width: 100%;
.hvac-profile-actions a,
.hvac-profile-actions button {
-webkit-box-flex: 1;
-ms-flex: 1;
min-width: auto;
.hvac-stats-row {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
.hvac-stat-col {
width: 100%;
padding: 5px 0;
.hvac-timeline {
padding-left: 20px;
.hvac-timeline-date {
flex: 0 0 100px;
font-size: 12px;
.hvac-timeline-marker {
left: 118px;
width: 30px;
height: 30px;
.hvac-timeline-connector {
left: 132px;
.hvac-timeline-content {
margin-left: 20px;
padding: 1em;
/* Print Styles */
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
-webkit-box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
-webkit-border-radius: 4px;
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
-webkit-border-radius: 2px;
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible:focus:not(.focus-visible) {
outline: none;
-webkit-box-shadow: none;
box-shadow: none;
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
@media print {
.hvac-profile-actions,
.ast-button {
display: none !important;
.hvac-attendee-profile {
padding: 0;
.hvac-content-section {
box-shadow: none;
border: 1px solid #ddd;
page-break-inside: avoid;
.hvac-timeline-item {
page-break-inside: avoid;
/* Feature Detection Support */
@supports not (display: flex) {
.hvac-content [class*="flex"] {
display: table-cell;
vertical-align: middle;
@supports not (display: grid) {
.hvac-content [class*="grid"] {
display: block;
overflow: hidden;
.hvac-content [class*="grid"] > * {
float: left;
width: 50%;

View file

@ -0,0 +1,942 @@
/* Reduced Motion Support Added - 2025-07-23 */
/* Vendor Prefixes Added - 2025-07-23 */
/**
* Certificate Styles
*
* Styles for certificate-related pages and components.
*/
/* Certificate Tables */
.hvac-certificate-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
.hvac-certificate-table th {
background-color: #f1f1f1;
text-align: left;
padding: 10px;
border-bottom: 1px solid #ddd;
font-weight: 600;
.hvac-certificate-table td {
padding: 12px 10px;
border-bottom: 1px solid #eee;
vertical-align: middle;
.hvac-certificate-table;
tr: nth-child(even) {
background-color: #f9f9f9;
.hvac-certificate-table;
.tr:hover {
background-color: #f0f7ff;
/* Certificate Actions */
.hvac-certificate-actions {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
gap: 8px;
.hvac-certificate-actions button,
.hvac-certificate-actions a {
background-color: #fafafa;
border: 1px solid #ddd;
padding: 6px 10px;
-webkit-border-radius: 4px;
border-radius: 4px;
cursor: pointer;
font-size: 13px;
text-decoration: none;
-webkit-transition: all 0.2s ease;
color: #333;
.hvac-certificate-actions;
button:hover,
.hvac-certificate-actions a:hover {
background-color: #f0f0f0;
border-color: #ccc;
.hvac-view-certificate {
background-color: #e0f7fa \!important;
border-color: #80deea \!important;
color: #006064 \!important;
.hvac-view-certificate:hover {
background-color: #b2ebf2 \!important;
border-color: #4dd0e1 \!important;
.hvac-email-certificate {
background-color: #e8f5e9 \!important;
border-color: #a5d6a7 \!important;
color: #1b5e20 \!important;
.hvac-email-certificate:hover {
background-color: #c8e6c9 \!important;
border-color: #81c784 \!important;
.hvac-revoke-certificate {
background-color: #ffebee \!important;
border-color: #ffcdd2 \!important;
color: #b71c1c \!important;
.hvac-revoke-certificate:hover {
background-color: #ffcdd2 \!important;
border-color: #ef9a9a \!important;
/* Certificate status */
.hvac-status-active {
color: #2e7d32;
background-color: #e8f5e9;
padding: 3px 8px;
-webkit-border-radius: 12px;
border-radius: 12px;
display: inline-block;
font-size: 12px;
font-weight: 600;
.hvac-status-revoked {
color: #b71c1c;
background-color: #ffebee;
padding: 3px 8px;
border-radius: 12px;
display: inline-block;
font-size: 12px;
font-weight: 600;
/* Certificate filters */
.hvac-certificate-filters {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
gap: 10px;
margin-bottom: 20px;
padding: 15px;
background-color: #f9f9f9;
-webkit-border-radius: 5px;
border-radius: 5px;
border-radius: 5px;
border: 1px solid #eee;
.hvac-filter-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
gap: 5px;
min-width: 200px;
.hvac-filter-group label {
font-weight: 600;
font-size: 14px;
.hvac-filter-group select,
.hvac-filter-group input {
padding: 8px 10px;
border: 1px solid #ddd;
border-radius: 4px;
.hvac-filter-submit {
align-self: flex-end;
margin-top: auto;
/* Certificate modal */
.hvac-modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
display: none;
.hvac-certificate-modal {
position: fixed;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
background-color: white;
padding: 20px;
border-radius: 5px;
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
z-index: 1001;
max-width: 90vw;
max-height: 90vh;
width: 850px;
display: none;
.hvac-modal-close {
position: absolute;
top: 10px;
right: 15px;
font-size: 24px;
cursor: pointer;
color: #999;
-webkit-transition: color 0.2s ease;
transition: color 0.2s ease;
.hvac-modal-close:hover {
color: #333;
.hvac-certificate-preview {
width: 100%;
height: 70vh;
border: 1px solid #ddd;
margin-top: 10px;
.hvac-modal-title {
margin-top: 0;
margin-bottom: 15px;
padding-right: 30px;
/* Button loading state */
.hvac-loading {
opacity: 0.7;
pointer-events: none;
position: relative;
.hvac-loading::after {
content: '';
display: inline-block;
width: 12px;
height: 12px;
border: 2px solid rgba(0, 0, 0, 0.2);
border-top-color: #333;
-webkit-border-radius: 50%;
-webkit-animation: hvac-spin 1s linear infinite;
position: absolute;
right: 8px;
top: calc(50% - 6px);
@keyframes hvac-spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
/* Empty state message */
.hvac-no-certificates {
padding: 20px;
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 5px;
text-align: center;
margin: 20px 0;
/* Certificate link styling */
.hvac-certificate-link {
color: #28a745;
text-decoration: none;
font-weight: 600;
transition: color 0.2s ease;
.hvac-certificate-link:hover {
color: #218838;
text-decoration: underline;
.hvac-certificate-link::after {
content: ' ↗';
font-size: 0.8em;
vertical-align: super;
/* Stats cards */
.hvac-certificate-stats {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 15px;
margin-bottom: 30px;
.hvac-stat-card {
background-color: white;
border: 1px solid #eee;
border-radius: 5px;
padding: 15px;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
.hvac-stat-card h3 {
margin-top: 0;
font-size: 16px;
color: #555;
.hvac-stat-value {
font-size: 28px;
font-weight: 600;
color: #333;
margin: 10px 0 5px;
/* Responsive tables */
/* Reduced Motion Support Added - WCAG 2.1 Accessibility */
/* Respects user preference for reduced motion to prevent vestibular disorders */
@media (prefers-reduced-motion: reduce) {
/* Disable all animations and transitions globally */
*, *::before, *::after {
animation-duration: 0.001ms !important;
animation-delay: 0s !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
transition-delay: 0s !important;
scroll-behavior: auto !important;
/* Remove specific transform animations */
.hvac-animate-fade-in,
.hvac-animate-scale-up,
.hvac-animate-pulse,
.hvac-animate-slide-in-right,
.hvac-animate-slide-in-left,
.hvac-animate-slide-in-bottom {
animation: none !important;
opacity: 1 !important;
transform: none !important;
/* Disable hover transformations */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover,
.hvac-button:hover,
.hvac-email-submit:hover {
transform: none !important;
animation: none !important;
/* Keep essential visual feedback but remove motion */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover {
border-color: var(--hvac-primary, #0274be) !important;
box-shadow: 0 0 0 2px rgba(2, 116, 190, 0.2) !important;
/* Disable loading spinner animation but keep visibility */
.hvac-loading::after {
animation: none !important;
border-radius: 50% !important;
border: 2px solid rgba(0, 0, 0, 0.2) !important;
border-top-color: #333 !important;
/* Disable focus pulse animation */
.hvac-button:focus,
.hvac-email-submit:focus,
.hvac-content button[type="submit"]:focus {
animation: none !important;
/* Ensure smooth scrolling is disabled */
html {
scroll-behavior: auto !important;
/* Disable CSS Grid/Flexbox animations if any */
.hvac-dashboard-stats .hvac-stat-card:nth-child(n),
.hvac-event-summary-stats .hvac-event-stat-card: nth-child(n) {
animation: none !important;
opacity: 1 !important;
/* Provide alternative visual feedback for reduced motion users */
@media (prefers-reduced-motion: reduce) {
/* Enhanced border feedback instead of transform */
.hvac-content button:hover,
.hvac-content input[type="submit"]:hover,
.hvac-content a:hover {
outline: 2px solid var(--hvac-primary, #0274be) !important;
outline-offset: 2px !important;
/* Enhanced color changes for interactive elements */
.hvac-attendee-item:hover {
background-color: var(--hvac-primary-light, #e6f3fb) !important;
border-left: 4px solid var(--hvac-primary, #0274be) !important;
/* Static loading indicator */
.hvac-loading {
opacity: 0.7 !important;
.hvac-loading::after {
content: "Loading..." !important;
display: inline-block !important;
font-size: 12px !important;
color: #666 !important;
border: none !important;
background: none !important;
border-radius: 0 !important;
width: auto !important;
height: auto !important;
position: static !important;
margin-left: 8px !important;
@media (max-width: 768px) {
.hvac-certificate-table {
display: block;
overflow-x: auto;
.hvac-certificate-filters {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
.hvac-filter-group {
width: 100%;
/* Enhanced certificate filter styles */
/* Enhanced search field styling */
#search_attendee {
padding-right: 30px;
background-image: url('data: image/svg+xml;
utf8,<svg xmlns=";
http: //www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="%23999" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>');
background-repeat: no-repeat;
background-position: calc(100% - 8px) center;
background-size: 16px;
/* Search results indicator */
.hvac-search-results {
background-color: #f0f7ff;
/* Certificate Preview Modal */
#hvac-certificate-preview-modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
z-index: 10000;
#hvac-certificate-preview-modal .hvac-modal-content {
position: relative;
background-color: #fff;
margin: 3% auto;
width: 90%;
max-width: 1000px;
height: 85%;
-webkit-border-radius: 8px;
-webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
overflow: hidden;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
#hvac-certificate-preview-modal .hvac-modal-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding: 15px 20px;
background-color: #f8f9fa;
border-bottom: 1px solid #dee2e6;
#hvac-certificate-preview-modal .hvac-modal-header h3 {
margin: 0;
font-size: 18px;
color: #333;
#hvac-certificate-preview-modal .hvac-modal-close {
font-size: 24px;
font-weight: bold;
color: #999;
cursor: pointer;
line-height: 1;
padding: 5px;
#hvac-certificate-preview-modal .hvac-modal-close:hover {
color: #333;
#hvac-certificate-preview-modal .hvac-modal-body {
-webkit-box-flex: 1;
-ms-flex: 1;
padding: 0;
overflow: hidden;
#hvac-certificate-preview-iframe {
width: 100%;
height: 100%;
border: none;
/* Certificate Preview Buttons */
.hvac-certificate-previews {
margin-top: 15px;
padding: 15px;
background-color: #f8f9fa;
border-radius: 5px;
.hvac-certificate-previews h4 {
margin-top: 0;
margin-bottom: 10px;
color: #333;
.hvac-preview-certificate {
margin-right: 10px;
margin-bottom: 5px;
.hvac-search-results p {
margin: 0;
font-size: 14px;
.hvac-search-results strong {
font-weight: 600;
color: #2271b1;
/* Enhanced attendee info display */
.attendee-info {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
.attendee-name {
font-weight: 600;
.attendee-email {
font-size: 13px;
color: #555;
margin-top: 2px;
/* Input hint text */
.hvac-input-hint {
font-size: 12px;
color: #666;
margin-top: 4px;
/* Clear filters button */
.hvac-button.hvac-secondary {
background-color: #f0f0f1;
color: #2c3338;
border: 1px solid #c5c5c7;
.hvac-button.hvac-secondary:hover {
background-color: #e0e0e2;
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
-webkit-box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
border-radius: 4px;
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
-webkit-border-radius: 2px;
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible:focus:not(.focus-visible) {
outline: none;
-webkit-box-shadow: none;
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
/* CSS Grid Fallbacks for IE */
.hvac-stats-row,
.hvac-dashboard-stats,
.hvac-certificate-stats {
display: -ms-grid;
-ms-grid-columns: repeat(auto-fit, minmax(200px, 1fr));
/* Progressive enhancement for modern browsers */
@supports (display: grid) {
.hvac-stats-row,
.hvac-dashboard-stats,
.hvac-certificate-stats {
display: grid;
/* Feature Detection Support */
@supports not (display: flex) {
.hvac-content [class*="flex"] {
display: table-cell;
vertical-align: middle;
@supports not (display: grid) {
.hvac-content [class*="grid"] {
display: block;
overflow: hidden;
.hvac-content [class*="grid"] > * {
float: left;
width: 50%;

916
assets/css/hvac-common.css Normal file
View file

@ -0,0 +1,916 @@
/* Reduced Motion Support Added - 2025-07-23 */
/* Vendor Prefixes Added - 2025-07-23 */
/**
* HVAC Community Events Common Styles
*
* These styles apply to all pages in the HVAC Community Events plugin.
* They enhance buttons, links, typography, and spacing for a consistent look.
*/
:root {
/* Primary colors */
--hvac-primary: #0274be;
--hvac-primary-dark: #005fa3;
--hvac-primary-light: #e6f3fb;
/* Secondary colors */
--hvac-secondary: #54595f;
--hvac-secondary-dark: #3a3f44;
--hvac-secondary-light: #f0f0f1;
/* Success/Error colors */
--hvac-success: #4caf50;
--hvac-success-light: #e8f5e9;
--hvac-error: #d63638;
--hvac-error-light: #ffebe9;
/* Neutral colors */
--hvac-border: #e0e0e0;
--hvac-border-light: #f0f0f0;
--hvac-text: #333333;
--hvac-text-light: #757575;
/* Spacing */
--hvac-spacing-xs: 0.25rem; /* 4px */
--hvac-spacing-sm: 0.5rem; /* 8px */
--hvac-spacing-md: 1rem; /* 16px */
--hvac-spacing-lg: 1.5rem; /* 24px */
--hvac-spacing-xl: 2rem; /* 32px */
/* Border radius */
--hvac-border-radius: 4px;
--hvac-border-radius-lg: 8px;
/* Box shadow */
--hvac-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
--hvac-shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.1);
/* Focus styles */
--hvac-focus-color: #2271b1;
--hvac-focus-width: 2px;
--hvac-focus-offset: 2px;
}
/* Hide page titles on HVAC pages */
.hvac-page .entry-title,
.hvac-page .page-title,
.hvac-page h1.entry-title,
.hvac-page h1.page-title,
.hvac-no-title .entry-title,
.hvac-no-title .page-title,
.entry-title-hidden .entry-title,
.entry-title-hidden .page-title {
display: none !important;
visibility: hidden !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
}
/* Also hide common theme title wrappers */
.hvac-page .page-header,
.hvac-page .entry-header .entry-title,
.hvac-page header.entry-header h1,
.hvac-page .title-area h1,
.hvac-page .ast-single-post-title,
.hvac-page .ast-page-title {
display: none !important;
}
/* Typography Enhancements */
.hvac-content h1,
.hvac-content h2,
.hvac-content h3,
.hvac-content h4 {
color: #333333; /* IE fallback */
color: var(--hvac-text);
font-weight: 600;
margin-bottom: 1rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-md);
line-height: 1.3;
}
.hvac-content h1 {
font-size: 1.75rem;
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
}
.hvac-content h2 {
font-size: 1.5rem;
margin-top: 2rem; /* IE fallback */
margin-top: var(--hvac-spacing-xl);
}
.hvac-content h3 {
font-size: 1.25rem;
margin-top: 1.5rem; /* IE fallback */
margin-top: var(--hvac-spacing-lg);
}
.hvac-content p {
margin-bottom: 1rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-md);
line-height: 1.6;
color: #333333; /* IE fallback */
color: var(--hvac-text);
}
/* Enhanced Button Styles */
.hvac-button,
.hvac-content .button,
.hvac-content button[type="submit"],
.hvac-content input[type="submit"],
.hvac-content .ast-button {
display: inline-block;
background-color: #0274be; /* IE fallback */
background-color: var(--hvac-primary);
color: white !important;
padding: 0.75rem 1.25rem;
border: none;
border-radius: 4px; /* IE fallback */
-webkit-border-radius: var(--hvac-border-radius);
border-radius: var(--hvac-border-radius);
font-size: 1rem;
font-weight: 600;
text-decoration: none;
text-align: center;
cursor: pointer;
-webkit-transition: background-color 0.2s, transform 0.1s, box-shadow 0.2s;
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* IE fallback */
-webkit-box-shadow: var(--hvac-shadow);
box-shadow: var(--hvac-shadow);
line-height: 1.4;
min-height: 44px; /* Minimum touch target size */
position: relative;
overflow: hidden;
.hvac-button:hover,
.hvac-content .button:hover,
.hvac-content button[type="submit"]:hover,
.hvac-content input[type="submit"]:hover,
.hvac-content .ast-button:hover {
background-color: #005fa3; /* IE fallback */
background-color: var(--hvac-primary-dark);
text-decoration: none;
-webkit-transform: translateY(-1px);
-ms-transform: translateY(-1px);
-webkit-box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* IE fallback */
-webkit-box-shadow: var(--hvac-shadow-lg);
.hvac-button:active,
.hvac-content .button:active,
.hvac-content button[type="submit"]:active,
.hvac-content input[type="submit"]:active,
.hvac-content .ast-button:active {
-webkit-transform: translateY(0);
-ms-transform: translateY(0);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* IE fallback */
box-shadow: var(--hvac-shadow);
/* Button ripple effect */
.hvac-button::after,
.hvac-content .button::after,
.hvac-content button[type="submit"]::after,
.hvac-content input[type="submit"]::after,
.hvac-content .ast-button::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 5px;
height: 5px;
background: rgba(255, 255, 255, 0.5);
opacity: 0;
-webkit-border-radius: 100%;
-webkit-transform: scale(1, 1) translate(-50%, -50%);
-ms-transform: scale(1, 1) translate(-50%, -50%);
transform-origin: 50% 50%;
.hvac-button:active::after,
.hvac-content .button:active::after,
.hvac-content button[type="submit"]:active::after,
.hvac-content input[type="submit"]:active::after,
.hvac-content .ast-button:active::after {
-webkit-animation: ripple 0.4s ease-out;
/* Secondary buttons */
.hvac-button-secondary,
.hvac-content .button-secondary {
background-color: #54595f; /* IE fallback */
background-color: var(--hvac-secondary);
.hvac-button-secondary:hover,
.hvac-content .button-secondary:hover {
background-color: #3a3f44; /* IE fallback */
background-color: var(--hvac-secondary-dark);
/* Success/danger button variants */
.hvac-button-success,
.hvac-content .button-success {
background-color: #4caf50; /* IE fallback */
background-color: var(--hvac-success);
.hvac-button-success:hover,
.hvac-content .button-success:hover {
background-color: #4caf50; /* IE fallback */
background-color: var(--hvac-success);
filter: brightness(0.9);
.hvac-button-danger,
.hvac-content .button-danger {
background-color: #d63638; /* IE fallback */
background-color: var(--hvac-error);
.hvac-button-danger:hover,
.hvac-content .button-danger:hover {
background-color: #d63638; /* IE fallback */
background-color: var(--hvac-error);
filter: brightness(0.9);
/* Outline button variant */
.hvac-button-outline,
.hvac-content .button-outline {
background-color: transparent;
color: #0274be; /* IE fallback */
color: var(--hvac-primary) !important;
border: 2px solid #0274be; /* IE fallback */
border: 2px solid var(--hvac-primary);
-webkit-box-shadow: none;
box-shadow: none;
.hvac-button-outline:hover,
.hvac-content .button-outline:hover {
background-color: #e6f3fb; /* IE fallback */
background-color: var(--hvac-primary-light);
color: #0274be; /* IE fallback */
color: var(--hvac-primary) !important;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* IE fallback */
box-shadow: var(--hvac-shadow);
/* Mobile optimized buttons */
/* Reduced Motion Support Added - WCAG 2.1 Accessibility */
/* Respects user preference for reduced motion to prevent vestibular disorders */
@media (prefers-reduced-motion: reduce) {
/* Disable all animations and transitions globally */
*, *::before, *::after {
animation-duration: 0.001ms !important;
animation-delay: 0s !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
transition-delay: 0s !important;
scroll-behavior: auto !important;
/* Remove specific transform animations */
.hvac-animate-fade-in,
.hvac-animate-scale-up,
.hvac-animate-pulse,
.hvac-animate-slide-in-right,
.hvac-animate-slide-in-left,
.hvac-animate-slide-in-bottom {
animation: none !important;
opacity: 1 !important;
transform: none !important;
/* Disable hover transformations */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover,
.hvac-button:hover,
.hvac-email-submit:hover {
transform: none !important;
animation: none !important;
/* Keep essential visual feedback but remove motion */
.hvac-card:hover,
.hvac-stat-card:hover,
.hvac-event-stat-card:hover {
border-color: var(--hvac-primary, #0274be) !important;
box-shadow: 0 0 0 2px rgba(2, 116, 190, 0.2) !important;
/* Disable loading spinner animation but keep visibility */
.hvac-loading::after {
animation: none !important;
border-radius: 50% !important;
border: 2px solid rgba(0, 0, 0, 0.2) !important;
border-top-color: #333 !important;
/* Disable focus pulse animation */
.hvac-button:focus,
.hvac-email-submit:focus,
.hvac-content button[type="submit"]:focus {
animation: none !important;
/* Ensure smooth scrolling is disabled */
html {
scroll-behavior: auto !important;
/* Disable CSS Grid/Flexbox animations if any */
.hvac-dashboard-stats .hvac-stat-card:nth-child(n),
.hvac-event-summary-stats .hvac-event-stat-card: nth-child(n) {
animation: none !important;
opacity: 1 !important;
/* Provide alternative visual feedback for reduced motion users */
@media (prefers-reduced-motion: reduce) {
/* Enhanced border feedback instead of transform */
.hvac-content button:hover,
.hvac-content input[type="submit"]:hover,
.hvac-content a:hover {
outline: 2px solid var(--hvac-primary, #0274be) !important;
outline-offset: 2px !important;
/* Enhanced color changes for interactive elements */
.hvac-attendee-item:hover {
background-color: var(--hvac-primary-light, #e6f3fb) !important;
border-left: 4px solid var(--hvac-primary, #0274be) !important;
/* Static loading indicator */
.hvac-loading {
opacity: 0.7 !important;
.hvac-loading::after {
content: "Loading..." !important;
display: inline-block !important;
font-size: 12px !important;
color: #666 !important;
border: none !important;
background: none !important;
border-radius: 0 !important;
width: auto !important;
height: auto !important;
position: static !important;
margin-left: 8px !important;
@media (max-width: 480px) {
.hvac-button,
.hvac-content .button,
.hvac-content button[type="submit"],
.hvac-content input[type="submit"],
.hvac-content .ast-button {
padding: 0.85rem 1rem;
width: 100%;
max-width: 100%;
display: block;
font-size: 1rem;
margin-bottom: 0.5rem;
/* IE fallback */
margin-bottom: 0.5rem;
/* IE fallback */
margin-bottom: var(--hvac-spacing-sm);
/* Fix for buttons in a row on mobile */
.hvac-button-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
gap: 0.5rem; /* IE fallback */
gap: var(--hvac-spacing-sm);
width: 100%;
@keyframes ripple {
0% {
-webkit-transform: scale(0, 0);
-ms-transform: scale(0, 0);
opacity: 0.7;
20% {
-webkit-transform: scale(25, 25);
-ms-transform: scale(25, 25);
opacity: 0.5;
100% {
opacity: 0;
-webkit-transform: scale(40, 40);
-ms-transform: scale(40, 40);
/* Enhanced Link Styles */
.hvac-content a:not(.button):not(.hvac-button) {
color: #0274be; /* IE fallback */
color: var(--hvac-primary);
text-decoration: none;
font-weight: 500;
-webkit-transition: color 0.2s;
.hvac-content a:not(.button):not(.hvac-button):hover {
color: #005fa3; /* IE fallback */
color: var(--hvac-primary-dark);
text-decoration: underline;
/* Responsive Table Improvements */
.hvac-table-wrapper {
overflow-x: auto;
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
.hvac-table {
width: 100%;
border-collapse: collapse;
border: 1px solid #e0e0e0; /* IE fallback */
border: 1px solid var(--hvac-border);
background-color: white;
.hvac-table th {
background-color: #f0f0f1; /* IE fallback */
background-color: var(--hvac-secondary-light);
color: #3a3f44; /* IE fallback */
color: var(--hvac-secondary-dark);
font-weight: 600;
text-align: left;
padding: 1rem; /* IE fallback */
padding: var(--hvac-spacing-md);
border-bottom: 2px solid #e0e0e0; /* IE fallback */
border-bottom: 2px solid var(--hvac-border);
.hvac-table td {
padding: 1rem; /* IE fallback */
padding: var(--hvac-spacing-md);
border-bottom: 1px solid #f0f0f0; /* IE fallback */
border-bottom: 1px solid var(--hvac-border-light);
vertical-align: middle;
.hvac-table tbody tr:hover {
background-color: #e6f3fb; /* IE fallback */
background-color: var(--hvac-primary-light);
/* Card Component Styles */
.hvac-card {
background-color: white;
border-radius: 4px; /* IE fallback */
border-radius: var(--hvac-border-radius);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* IE fallback */
box-shadow: var(--hvac-shadow);
padding: 1.5rem; /* IE fallback */
padding: var(--hvac-spacing-lg);
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
border: 1px solid #e0e0e0; /* IE fallback */
border: 1px solid var(--hvac-border);
.hvac-card-title {
margin-top: 0;
margin-bottom: 1rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-md);
padding-bottom: 0.5rem; /* IE fallback */
padding-bottom: var(--hvac-spacing-sm);
border-bottom: 1px solid #f0f0f0; /* IE fallback */
border-bottom: 1px solid var(--hvac-border-light);
/* Form Element Improvements */
.hvac-form-group {
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
.hvac-form-label {
display: block;
margin-bottom: 0.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-sm);
font-weight: 600;
color: #333333; /* IE fallback */
color: var(--hvac-text);
.hvac-form-input,
.hvac-content input[type="text"],
.hvac-content input[type="email"],
.hvac-content input[type="password"],
.hvac-content input[type="url"],
.hvac-content textarea,
.hvac-content select {
width: 100%;
padding: 0.75rem;
border: 1px solid #e0e0e0; /* IE fallback */
border: 1px solid var(--hvac-border);
border-radius: 4px; /* IE fallback */
border-radius: var(--hvac-border-radius);
font-size: 1rem;
background-color: white;
-webkit-transition: border-color 0.2s, box-shadow 0.2s;
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus {
border-color: #0274be; /* IE fallback */
border-color: var(--hvac-primary);
outline: none;
-webkit-box-shadow: 0 0 0 3px #e6f3fb;/* IE fallback */
-webkit-box-shadow: 0 0 0 3px var(--hvac-primary-light);
/* Alert/Message Styles */
.hvac-alert {
padding: 1rem; /* IE fallback */
padding: var(--hvac-spacing-md);
border-radius: 4px; /* IE fallback */
border-radius: var(--hvac-border-radius);
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
border-left: 4px solid transparent;
.hvac-alert-success {
background-color: #e8f5e9; /* IE fallback */
background-color: var(--hvac-success-light);
border-color: #4caf50; /* IE fallback */
border-color: var(--hvac-success);
color: #4caf50; /* IE fallback */
color: var(--hvac-success);
.hvac-alert-error {
background-color: #ffebe9; /* IE fallback */
background-color: var(--hvac-error-light);
border-color: #d63638; /* IE fallback */
border-color: var(--hvac-error);
color: #d63638; /* IE fallback */
color: var(--hvac-error);
/* Layout Helper Classes */
.hvac-flex {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
.hvac-flex-between {
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
.hvac-flex-center {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
.hvac-flex-wrap {
-ms-flex-wrap: wrap;
.hvac-mt-sm {
margin-top: 0.5rem; /* IE fallback */
margin-top: var(--hvac-spacing-sm);
}
.hvac-mt-md {
margin-top: 1rem; /* IE fallback */
margin-top: var(--hvac-spacing-md);
}
.hvac-mb-sm {
margin-bottom: 0.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-sm);
}
.hvac-mb-md {
margin-bottom: 1rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-md);
}
.hvac-mb-lg {
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
}
.hvac-mr-sm {
margin-right: 0.5rem; /* IE fallback */
margin-right: var(--hvac-spacing-sm);
}
/* Accessibility Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-content input[type="button"]:focus,
.hvac-content .ast-button:focus {
outline: 2px; /* IE fallback */
outline: var(--hvac-focus-width) solid var(--hvac-focus-color);
outline-offset: 2px; /* IE fallback */
outline-offset: var(--hvac-focus-offset);
box-shadow: none;
position: relative;
z-index: 1;
.hvac-content a:focus,
.hvac-content [tabindex="0"]:focus {
outline: 2px; /* IE fallback */
outline: var(--hvac-focus-width) solid var(--hvac-focus-color);
outline-offset: 2px; /* IE fallback */
outline-offset: var(--hvac-focus-offset);
-webkit-border-radius: 2px;
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus {
outline: none; /* Remove default outline */
border-color: #2271b1; /* IE fallback */
border-color: var(--hvac-focus-color);
-webkit-box-shadow: 0 0 0 2px rgba(34, 113, 177, 0.3);/* IE fallback */
-webkit-box-shadow: 0 0 0 var(--hvac-focus-width) rgba(34, 113, 177, 0.3);
/* High contrast focus style for keyboard navigation */
.keyboard-nav-active:focus {
outline: 3px solid #ffbf47 !important;
outline-offset: 2px; /* IE fallback */
outline-offset: var(--hvac-focus-offset) !important;
/* Skip link for keyboard users */
.hvac-skip-link {
position: absolute;
top: -40px;
left: 0;
z-index: 100;
background: #0274be; /* IE fallback */
background: var(--hvac-primary);
color: white;
padding: 10px;
-webkit-transition: top 0.2s;
.hvac-skip-link:focus {
top: 0;
outline: 2px; /* IE fallback */
outline: var(--hvac-focus-width) solid var(--hvac-focus-color);
/* Responsive improvements */
@media (max-width: 767px) {
.hvac-flex {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
.hvac-form-group {
margin-bottom: 1rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-md);
.hvac-card {
padding: 1rem; /* IE fallback */
padding: var(--hvac-spacing-md);
/* Apply to all plugin pages */
body.page-hvac-dashboard,
body.page-community-login,
body.page-trainer-registration,
body.page-trainer-profile,
body.page-event-summary,
body.page-email-attendees,
body.page-manage-event {
/* Base font settings */
font-size: 16px;
line-height: 1.6;
color: #333333; /* IE fallback */
color: var(--hvac-text);
/* Enable detection of keyboard navigation for better accessibility */
body: not(.user-is-tabbing) :focus {
outline: none !important;
/* Event Management Page Header Styles */
.hvac-event-manage-header {
background: #e6f3fb; /* IE fallback */
background: var(--hvac-primary-light);
border: 1px solid #f0f0f0; /* IE fallback */
border: 1px solid var(--hvac-border-light);
-webkit-border-radius: 8px; /* IE fallback */
-webkit-border-radius: var(--hvac-radius-md);
padding: 1.5rem; /* IE fallback */
padding: var(--hvac-spacing-lg);
margin-bottom: 1.5rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-lg);
.hvac-event-manage-header h2 {
color: #0274be; /* IE fallback */
color: var(--hvac-primary);
margin: 0 0 1rem 0; /* IE fallback */
margin: 0 0 var(--hvac-spacing-md) 0;
font-size: 1.5em;
font-weight: 600;
.hvac-event-manage-header p {
margin: 0 0 1rem 0; /* IE fallback */
margin: 0 0 var(--hvac-spacing-md) 0;
font-size: 1.1em;
line-height: 1.6;
color: #333333; /* IE fallback */
color: var(--hvac-text);
.hvac-event-manage-tips {
background: white;
padding: 1rem; /* IE fallback */
padding: var(--hvac-spacing-md);
border-radius: 4px; /* IE fallback */
-webkit-border-radius: var(--hvac-radius-sm);
border-left: 4px solid #0274be; /* IE fallback */
border-left: 4px solid var(--hvac-primary);
margin-top: 1rem; /* IE fallback */
margin-top: var(--hvac-spacing-md);
.hvac-event-manage-tips h3 {
color: #0274be; /* IE fallback */
color: var(--hvac-primary);
margin: 0 0 0.5rem 0; /* IE fallback */
margin: 0 0 var(--hvac-spacing-sm) 0;
font-size: 1.2em;
font-weight: 600;
.hvac-event-manage-tips ul {
margin: 0;
padding-left: 1rem; /* IE fallback */
padding-left: var(--hvac-spacing-md);
.hvac-event-manage-tips li {
margin-bottom: 0.25rem; /* IE fallback */
margin-bottom: var(--hvac-spacing-xs);
line-height: 1.5;
.hvac-event-manage-tips strong {
color: #005fa3; /* IE fallback */
color: var(--hvac-primary-dark);
/* Responsive adjustments for event management header */
@media (max-width: 767px) {
.hvac-event-manage-header {
padding: 1rem;
/* IE fallback */
padding: 1rem;
/* IE fallback */
padding: var(--hvac-spacing-md);
margin-bottom: 1rem;
/* IE fallback */
margin-bottom: 1rem;
/* IE fallback */
margin-bottom: var(--hvac-spacing-md);
.hvac-event-manage-header h2 {
font-size: 1.3em;
.hvac-event-manage-tips {
padding: 0.5rem; /* IE fallback */
padding: var(--hvac-spacing-sm);
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
-webkit-box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
border-radius: 4px;
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
border-radius: 2px;
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible:focus:not(.focus-visible) {
outline: none;
box-shadow: none;
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
/* Feature Detection Support */
@supports not (display: flex) {
.hvac-content [class*="flex"] {
display: table-cell;
vertical-align: middle;
@supports not (display: grid) {
.hvac-content [class*="grid"] {
display: block;
overflow: hidden;
.hvac-content [class*="grid"] > * {
float: left;
width: 50%;
}

View file

@ -0,0 +1,31 @@
/**
* HVAC Community Events Main Styles
*
* This file imports and includes all the main styles for the plugin
*/
/* NOTE: @import statements removed to prevent Safari blocking issues
* Individual CSS files are now loaded separately via wp_enqueue_style in PHP
* This eliminates the synchronous blocking that causes Safari to hang
*/
/* General layout styles */
.hvac-content {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
/* Basic styles that were in imported files - consolidated here */
/* These are the essential styles moved inline to prevent import blocking */
/* Ensure proper spacing on all HVAC pages */
.hvac-page .site-content {
padding-top: 2rem;
padding-bottom: 2rem;
}
/* Fix for page title hiding */
.hvac-page .entry-header {
display: none !important;
}

View file

@ -0,0 +1,403 @@
/**
* HVAC Dashboard Enhanced Styles
*
* Styles for the enhanced dashboard with filters, search, and pagination
*/
/* Table Controls Container */
.hvac-table-controls {
margin-bottom: 1.5rem;
background: #f8f9fa;
padding: 1rem;
border-radius: 8px;
border: 1px solid #e5e7eb;
}
/* Search Controls */
.hvac-search-controls {
display: flex;
flex-wrap: wrap;
gap: 1rem;
align-items: flex-end;
}
.hvac-search-group {
flex: 1;
min-width: 200px;
}
.hvac-search-group label {
display: block;
margin-bottom: 0.25rem;
font-weight: 600;
color: #333;
font-size: 0.875rem;
}
.hvac-search-group input[type="text"],
.hvac-search-group input[type="date"],
.hvac-search-group select {
width: 100%;
padding: 0.5rem 0.75rem;
border: 1px solid #d1d5db;
border-radius: 4px;
font-size: 0.875rem;
background: white;
transition: border-color 0.2s;
}
.hvac-search-group input[type="text"]:focus,
.hvac-search-group input[type="date"]:focus,
.hvac-search-group select:focus {
outline: none;
border-color: #0073aa;
box-shadow: 0 0 0 3px rgba(0, 115, 170, 0.1);
}
/* Search Buttons */
.hvac-search-buttons {
display: flex;
gap: 0.5rem;
align-items: flex-end;
}
.hvac-btn-search,
.hvac-btn-reset {
padding: 0.5rem 1rem;
border: none;
border-radius: 4px;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
.hvac-btn-search {
background: #0073aa;
color: white;
}
.hvac-btn-search:hover {
background: #005a87;
}
.hvac-btn-reset {
background: #6b7280;
color: white;
}
.hvac-btn-reset:hover {
background: #4b5563;
}
/* Enhanced Table Styles */
.hvac-enhanced-table {
width: 100%;
background: white;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.hvac-enhanced-table thead {
background: #f9fafb;
}
.hvac-enhanced-table th {
padding: 0.75rem 1rem;
text-align: left;
font-weight: 600;
color: #374151;
border-bottom: 1px solid #e5e7eb;
font-size: 0.875rem;
}
.hvac-enhanced-table th.sortable {
cursor: pointer;
user-select: none;
position: relative;
padding-right: 2rem;
}
.hvac-enhanced-table th.sortable:hover {
background: #f3f4f6;
}
.hvac-enhanced-table th.sortable::after {
content: "↕";
position: absolute;
right: 0.75rem;
opacity: 0.3;
}
.hvac-enhanced-table th.sort-asc::after {
content: "↑";
opacity: 1;
}
.hvac-enhanced-table th.sort-desc::after {
content: "↓";
opacity: 1;
}
.hvac-enhanced-table td {
padding: 0.75rem 1rem;
border-bottom: 1px solid #f3f4f6;
}
.hvac-enhanced-table tbody tr:hover {
background: #f9fafb;
}
.hvac-enhanced-table tbody tr:last-child td {
border-bottom: none;
}
/* Event Status Badges */
.hvac-event-status {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 500;
}
.hvac-event-status.status-upcoming {
background: #dbeafe;
color: #1e40af;
}
.hvac-event-status.status-active {
background: #dcfce7;
color: #166534;
}
.hvac-event-status.status-completed {
background: #f3f4f6;
color: #6b7280;
}
.hvac-event-status.status-cancelled {
background: #fee2e2;
color: #991b1b;
}
/* Action Buttons */
.hvac-table-actions {
display: flex;
gap: 0.5rem;
}
.hvac-btn-action {
padding: 0.25rem 0.75rem;
border: 1px solid #d1d5db;
background: white;
border-radius: 4px;
font-size: 0.75rem;
font-weight: 500;
color: #374151;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
.hvac-btn-action:hover {
background: #f9fafb;
border-color: #0073aa;
color: #0073aa;
}
.hvac-btn-action.primary {
background: #0073aa;
color: white;
border-color: #0073aa;
}
.hvac-btn-action.primary:hover {
background: #005a87;
border-color: #005a87;
}
/* Pagination Enhanced */
.hvac-pagination {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 1.5rem;
padding-top: 1.5rem;
border-top: 1px solid #e5e7eb;
}
.hvac-pagination-info {
color: #6b7280;
font-size: 0.875rem;
}
.hvac-pagination-info strong {
color: #374151;
}
.hvac-pagination-controls {
display: flex;
gap: 0.25rem;
}
.hvac-page-btn {
padding: 0.5rem 0.75rem;
border: 1px solid #d1d5db;
background: white;
border-radius: 4px;
font-size: 0.875rem;
color: #374151;
cursor: pointer;
transition: all 0.2s;
min-width: 2.5rem;
text-align: center;
}
.hvac-page-btn:hover:not(:disabled) {
background: #f9fafb;
border-color: #0073aa;
color: #0073aa;
}
.hvac-page-btn.active {
background: #0073aa;
color: white;
border-color: #0073aa;
}
.hvac-page-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.hvac-page-ellipsis {
padding: 0.5rem 0.25rem;
color: #6b7280;
}
/* Loading State */
.hvac-table-loading {
position: relative;
min-height: 200px;
}
.hvac-table-loading::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}
.hvac-loading-spinner {
width: 40px;
height: 40px;
border: 3px solid #e5e7eb;
border-top-color: #0073aa;
border-radius: 50%;
animation: hvac-spin 1s linear infinite;
}
@keyframes hvac-spin {
to {
transform: rotate(360deg);
}
}
/* Empty State */
.hvac-empty-state {
text-align: center;
padding: 3rem;
color: #6b7280;
}
.hvac-empty-state-icon {
font-size: 3rem;
opacity: 0.3;
margin-bottom: 1rem;
}
.hvac-empty-state-title {
font-size: 1.125rem;
font-weight: 600;
color: #374151;
margin-bottom: 0.5rem;
}
.hvac-empty-state-description {
font-size: 0.875rem;
}
/* Mobile Responsive */
@media (max-width: 768px) {
.hvac-search-controls {
flex-direction: column;
}
.hvac-search-group {
width: 100%;
}
.hvac-search-buttons {
width: 100%;
justify-content: stretch;
}
.hvac-btn-search,
.hvac-btn-reset {
flex: 1;
}
.hvac-enhanced-table {
font-size: 0.875rem;
}
.hvac-enhanced-table th,
.hvac-enhanced-table td {
padding: 0.5rem;
}
.hvac-table-actions {
flex-direction: column;
}
.hvac-pagination {
flex-direction: column;
gap: 1rem;
text-align: center;
}
.hvac-enhanced-table-wrapper {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
}
/* Print Styles */
@media print {
.hvac-table-controls,
.hvac-pagination,
.hvac-table-actions {
display: none;
}
.hvac-enhanced-table {
box-shadow: none;
border: 1px solid #000;
}
.hvac-enhanced-table th,
.hvac-enhanced-table td {
border: 1px solid #000;
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,691 @@
/**
* HVAC Community Events - Harmonized Styling Framework
*
* This file provides harmonized styling that integrates seamlessly with the
* Astra WordPress theme while maintaining accessibility and responsive design.
*
* Based on Astra theme analysis:
* - Font: Mulish, sans-serif
* - Body color: rgba(0, 0, 0, 0.65)
* - Background: rgb(236, 244, 243) (light teal)
* - Base font size: 16px
* - Line height: 1.7 (27.2px)
*
* @version 3.0.0
*/
:root {
/* Theme-harmonized color palette */
--hvac-theme-background: rgb(236, 244, 243);
--hvac-theme-text: rgba(0, 0, 0, 0.65);
--hvac-theme-text-dark: rgba(0, 0, 0, 0.87);
--hvac-theme-text-light: rgba(0, 0, 0, 0.54);
/* Primary colors - Teal/Blue harmony */
--hvac-primary: #008080; /* Teal to match theme background */
--hvac-primary-dark: #006666; /* Darker teal */
--hvac-primary-light: #e0f2f2; /* Very light teal */
--hvac-primary-subtle: #f0f9f9; /* Subtle teal background */
/* Secondary colors - Natural grays */
--hvac-secondary: #4a5568; /* Neutral gray */
--hvac-secondary-dark: #2d3748; /* Dark gray */
--hvac-secondary-light: #f7fafc; /* Very light gray */
/* Accent colors */
--hvac-accent: #2b6cb0; /* Blue accent */
--hvac-accent-dark: #2a5396;
--hvac-accent-light: #ebf8ff;
/* Semantic colors */
--hvac-success: #38a169; /* Green */
--hvac-success-light: #f0fff4;
--hvac-warning: #d69e2e; /* Orange */
--hvac-warning-light: #fffaf0;
--hvac-error: #e53e3e; /* Red */
--hvac-error-light: #fed7d7;
--hvac-info: --hvac-accent; /* Use accent color */
--hvac-info-light: var(--hvac-accent-light);
/* Border and background colors */
--hvac-border: #e2e8f0;
--hvac-border-light: #f7fafc;
--hvac-border-dark: #cbd5e0;
--hvac-background-white: #ffffff;
--hvac-background-gray: #f8f9fa;
/* Typography settings to match Astra theme */
--hvac-font-family: 'Mulish', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif;
--hvac-font-size-base: 16px;
--hvac-line-height-base: 1.7;
--hvac-font-weight-normal: 400;
--hvac-font-weight-medium: 500;
--hvac-font-weight-semibold: 600;
--hvac-font-weight-bold: 700;
/* Font sizes - Type scale */
--hvac-font-size-xs: 0.75rem; /* 12px */
--hvac-font-size-sm: 0.875rem; /* 14px */
--hvac-font-size-md: 1rem; /* 16px */
--hvac-font-size-lg: 1.125rem; /* 18px */
--hvac-font-size-xl: 1.25rem; /* 20px */
--hvac-font-size-2xl: 1.5rem; /* 24px */
--hvac-font-size-3xl: 1.875rem; /* 30px */
--hvac-font-size-4xl: 2.25rem; /* 36px */
/* Spacing scale - Consistent with Astra */
--hvac-spacing-1: 0.25rem; /* 4px */
--hvac-spacing-2: 0.5rem; /* 8px */
--hvac-spacing-3: 0.75rem; /* 12px */
--hvac-spacing-4: 1rem; /* 16px */
--hvac-spacing-5: 1.25rem; /* 20px */
--hvac-spacing-6: 1.5rem; /* 24px */
--hvac-spacing-8: 2rem; /* 32px */
--hvac-spacing-10: 2.5rem; /* 40px */
--hvac-spacing-12: 3rem; /* 48px */
--hvac-spacing-16: 4rem; /* 64px */
/* Border radius */
--hvac-radius-sm: 0.25rem; /* 4px */
--hvac-radius-md: 0.375rem; /* 6px */
--hvac-radius-lg: 0.5rem; /* 8px */
--hvac-radius-xl: 0.75rem; /* 12px */
--hvac-radius-2xl: 1rem; /* 16px */
/* Shadows - Subtle and modern */
--hvac-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--hvac-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--hvac-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
--hvac-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
/* Transitions */
--hvac-transition-fast: 150ms ease-out;
--hvac-transition-normal: 250ms ease-out;
--hvac-transition-slow: 350ms ease-out;
/* Z-index scale */
--hvac-z-dropdown: 1000;
--hvac-z-modal: 1050;
--hvac-z-popover: 1060;
--hvac-z-tooltip: 1070;
}
/* Base typography - Apply Astra theme styling */
.hvac-page,
.hvac-content {
font-family: var(--hvac-font-family);
font-size: var(--hvac-font-size-base);
line-height: var(--hvac-line-height-base);
color: var(--hvac-theme-text);
}
/* Typography hierarchy */
.hvac-content h1,
.hvac-content .hvac-h1 {
font-size: var(--hvac-font-size-3xl);
font-weight: var(--hvac-font-weight-bold);
line-height: 1.2;
color: var(--hvac-theme-text-dark);
margin-bottom: var(--hvac-spacing-6);
margin-top: 0;
}
.hvac-content h2,
.hvac-content .hvac-h2 {
font-size: var(--hvac-font-size-2xl);
font-weight: var(--hvac-font-weight-semibold);
line-height: 1.3;
color: var(--hvac-theme-text-dark);
margin-bottom: var(--hvac-spacing-4);
margin-top: var(--hvac-spacing-8);
}
.hvac-content h3,
.hvac-content .hvac-h3 {
font-size: var(--hvac-font-size-xl);
font-weight: var(--hvac-font-weight-semibold);
line-height: 1.4;
color: var(--hvac-theme-text-dark);
margin-bottom: var(--hvac-spacing-3);
margin-top: var(--hvac-spacing-6);
}
.hvac-content h4,
.hvac-content .hvac-h4 {
font-size: var(--hvac-font-size-lg);
font-weight: var(--hvac-font-weight-medium);
line-height: 1.4;
color: var(--hvac-theme-text-dark);
margin-bottom: var(--hvac-spacing-3);
margin-top: var(--hvac-spacing-5);
}
.hvac-content p,
.hvac-content .hvac-text {
margin-bottom: var(--hvac-spacing-4);
line-height: var(--hvac-line-height-base);
color: var(--hvac-theme-text);
}
/* Text utilities */
.hvac-text-xs { font-size: var(--hvac-font-size-xs); }
.hvac-text-sm { font-size: var(--hvac-font-size-sm); }
.hvac-text-md { font-size: var(--hvac-font-size-md); }
.hvac-text-lg { font-size: var(--hvac-font-size-lg); }
.hvac-text-xl { font-size: var(--hvac-font-size-xl); }
.hvac-text-light { color: var(--hvac-theme-text-light); }
.hvac-text-normal { color: var(--hvac-theme-text); }
.hvac-text-dark { color: var(--hvac-theme-text-dark); }
.hvac-font-normal { font-weight: var(--hvac-font-weight-normal); }
.hvac-font-medium { font-weight: var(--hvac-font-weight-medium); }
.hvac-font-semibold { font-weight: var(--hvac-font-weight-semibold); }
.hvac-font-bold { font-weight: var(--hvac-font-weight-bold); }
/* Enhanced button system */
.hvac-btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--hvac-spacing-3) var(--hvac-spacing-6);
font-family: var(--hvac-font-family);
font-size: var(--hvac-font-size-md);
font-weight: var(--hvac-font-weight-medium);
line-height: 1.5;
text-decoration: none;
text-align: center;
vertical-align: middle;
cursor: pointer;
user-select: none;
border: 1px solid transparent;
border-radius: var(--hvac-radius-md);
transition: all var(--hvac-transition-fast);
min-height: 44px; /* WCAG touch target size */
position: relative;
overflow: hidden;
background-image: none;
}
.hvac-btn:focus {
outline: 2px solid var(--hvac-primary);
outline-offset: 2px;
z-index: 10;
}
/* Button variants */
.hvac-btn-primary {
background-color: var(--hvac-primary);
border-color: var(--hvac-primary);
color: white;
box-shadow: var(--hvac-shadow-sm);
}
.hvac-btn-primary:hover:not(:disabled) {
background-color: var(--hvac-primary-dark);
border-color: var(--hvac-primary-dark);
color: white;
transform: translateY(-1px);
box-shadow: var(--hvac-shadow-md);
}
.hvac-btn-primary:active {
transform: translateY(0);
box-shadow: var(--hvac-shadow-sm);
}
.hvac-btn-secondary {
background-color: var(--hvac-secondary);
border-color: var(--hvac-secondary);
color: white;
box-shadow: var(--hvac-shadow-sm);
}
.hvac-btn-secondary:hover:not(:disabled) {
background-color: var(--hvac-secondary-dark);
border-color: var(--hvac-secondary-dark);
color: white;
transform: translateY(-1px);
box-shadow: var(--hvac-shadow-md);
}
.hvac-btn-outline {
background-color: transparent;
border-color: var(--hvac-primary);
color: var(--hvac-primary);
}
.hvac-btn-outline:hover:not(:disabled) {
background-color: var(--hvac-primary);
color: white;
}
.hvac-btn-ghost {
background-color: transparent;
border-color: transparent;
color: var(--hvac-primary);
}
.hvac-btn-ghost:hover:not(:disabled) {
background-color: var(--hvac-primary-light);
color: var(--hvac-primary-dark);
}
/* Button sizes */
.hvac-btn-sm {
padding: var(--hvac-spacing-2) var(--hvac-spacing-4);
font-size: var(--hvac-font-size-sm);
min-height: 36px;
}
.hvac-btn-lg {
padding: var(--hvac-spacing-4) var(--hvac-spacing-8);
font-size: var(--hvac-font-size-lg);
min-height: 52px;
}
.hvac-btn-xl {
padding: var(--hvac-spacing-5) var(--hvac-spacing-10);
font-size: var(--hvac-font-size-xl);
min-height: 60px;
}
/* Button states */
.hvac-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none !important;
box-shadow: none !important;
}
/* Form elements */
.hvac-form-group {
margin-bottom: var(--hvac-spacing-6);
}
.hvac-form-label {
display: block;
margin-bottom: var(--hvac-spacing-2);
font-weight: var(--hvac-font-weight-medium);
color: var(--hvac-theme-text-dark);
font-size: var(--hvac-font-size-sm);
}
.hvac-form-control {
display: block;
width: 100%;
padding: var(--hvac-spacing-3);
font-family: var(--hvac-font-family);
font-size: var(--hvac-font-size-md);
font-weight: var(--hvac-font-weight-normal);
line-height: var(--hvac-line-height-base);
color: var(--hvac-theme-text);
background-color: var(--hvac-background-white);
border: 1px solid var(--hvac-border);
border-radius: var(--hvac-radius-md);
transition: border-color var(--hvac-transition-fast), box-shadow var(--hvac-transition-fast);
}
.hvac-form-control:focus {
border-color: var(--hvac-primary);
outline: 0;
box-shadow: 0 0 0 3px var(--hvac-primary-light);
}
.hvac-form-control:disabled {
background-color: var(--hvac-background-gray);
opacity: 0.6;
}
/* Select elements */
.hvac-select {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
background-position: right 0.5rem center;
background-repeat: no-repeat;
background-size: 1.5em 1.5em;
padding-right: 2.5rem;
appearance: none;
}
/* Card component */
.hvac-card {
background-color: var(--hvac-background-white);
border: 1px solid var(--hvac-border);
border-radius: var(--hvac-radius-lg);
box-shadow: var(--hvac-shadow-sm);
overflow: hidden;
transition: box-shadow var(--hvac-transition-normal);
}
.hvac-card:hover {
box-shadow: var(--hvac-shadow-md);
}
.hvac-card-header {
padding: var(--hvac-spacing-6);
border-bottom: 1px solid var(--hvac-border-light);
background-color: var(--hvac-background-gray);
}
.hvac-card-body {
padding: var(--hvac-spacing-6);
}
.hvac-card-footer {
padding: var(--hvac-spacing-6);
border-top: 1px solid var(--hvac-border-light);
background-color: var(--hvac-background-gray);
}
/* Tables */
.hvac-table-container {
overflow-x: auto;
margin-bottom: var(--hvac-spacing-6);
border-radius: var(--hvac-radius-lg);
border: 1px solid var(--hvac-border);
}
.hvac-table {
width: 100%;
border-collapse: collapse;
background-color: var(--hvac-background-white);
font-size: var(--hvac-font-size-sm);
}
.hvac-table th {
background-color: var(--hvac-background-gray);
color: var(--hvac-theme-text-dark);
font-weight: var(--hvac-font-weight-semibold);
text-align: left;
padding: var(--hvac-spacing-4);
border-bottom: 1px solid var(--hvac-border);
white-space: nowrap;
}
.hvac-table td {
padding: var(--hvac-spacing-4);
border-bottom: 1px solid var(--hvac-border-light);
vertical-align: middle;
}
.hvac-table tbody tr:hover {
background-color: var(--hvac-primary-subtle);
}
.hvac-table tbody tr:last-child td {
border-bottom: none;
}
/* Alert components */
.hvac-alert {
padding: var(--hvac-spacing-4);
margin-bottom: var(--hvac-spacing-6);
border: 1px solid transparent;
border-radius: var(--hvac-radius-md);
font-size: var(--hvac-font-size-sm);
}
.hvac-alert-success {
background-color: var(--hvac-success-light);
border-color: var(--hvac-success);
color: var(--hvac-success);
}
.hvac-alert-warning {
background-color: var(--hvac-warning-light);
border-color: var(--hvac-warning);
color: var(--hvac-warning);
}
.hvac-alert-error {
background-color: var(--hvac-error-light);
border-color: var(--hvac-error);
color: var(--hvac-error);
}
.hvac-alert-info {
background-color: var(--hvac-info-light);
border-color: var(--hvac-accent);
color: var(--hvac-accent);
}
/* Spacing utilities */
.hvac-m-0 { margin: 0; }
.hvac-m-1 { margin: var(--hvac-spacing-1); }
.hvac-m-2 { margin: var(--hvac-spacing-2); }
.hvac-m-3 { margin: var(--hvac-spacing-3); }
.hvac-m-4 { margin: var(--hvac-spacing-4); }
.hvac-m-5 { margin: var(--hvac-spacing-5); }
.hvac-m-6 { margin: var(--hvac-spacing-6); }
.hvac-m-8 { margin: var(--hvac-spacing-8); }
.hvac-mt-0 { margin-top: 0; }
.hvac-mt-1 { margin-top: var(--hvac-spacing-1); }
.hvac-mt-2 { margin-top: var(--hvac-spacing-2); }
.hvac-mt-3 { margin-top: var(--hvac-spacing-3); }
.hvac-mt-4 { margin-top: var(--hvac-spacing-4); }
.hvac-mt-6 { margin-top: var(--hvac-spacing-6); }
.hvac-mt-8 { margin-top: var(--hvac-spacing-8); }
.hvac-mb-0 { margin-bottom: 0; }
.hvac-mb-1 { margin-bottom: var(--hvac-spacing-1); }
.hvac-mb-2 { margin-bottom: var(--hvac-spacing-2); }
.hvac-mb-3 { margin-bottom: var(--hvac-spacing-3); }
.hvac-mb-4 { margin-bottom: var(--hvac-spacing-4); }
.hvac-mb-6 { margin-bottom: var(--hvac-spacing-6); }
.hvac-mb-8 { margin-bottom: var(--hvac-spacing-8); }
.hvac-p-0 { padding: 0; }
.hvac-p-1 { padding: var(--hvac-spacing-1); }
.hvac-p-2 { padding: var(--hvac-spacing-2); }
.hvac-p-3 { padding: var(--hvac-spacing-3); }
.hvac-p-4 { padding: var(--hvac-spacing-4); }
.hvac-p-6 { padding: var(--hvac-spacing-6); }
.hvac-p-8 { padding: var(--hvac-spacing-8); }
/* Layout utilities */
.hvac-flex { display: flex; }
.hvac-inline-flex { display: inline-flex; }
.hvac-block { display: block; }
.hvac-inline-block { display: inline-block; }
.hvac-hidden { display: none; }
.hvac-flex-row { flex-direction: row; }
.hvac-flex-col { flex-direction: column; }
.hvac-flex-wrap { flex-wrap: wrap; }
.hvac-flex-nowrap { flex-wrap: nowrap; }
.hvac-items-start { align-items: flex-start; }
.hvac-items-center { align-items: center; }
.hvac-items-end { align-items: flex-end; }
.hvac-items-stretch { align-items: stretch; }
.hvac-justify-start { justify-content: flex-start; }
.hvac-justify-center { justify-content: center; }
.hvac-justify-end { justify-content: flex-end; }
.hvac-justify-between { justify-content: space-between; }
.hvac-justify-around { justify-content: space-around; }
.hvac-gap-1 { gap: var(--hvac-spacing-1); }
.hvac-gap-2 { gap: var(--hvac-spacing-2); }
.hvac-gap-3 { gap: var(--hvac-spacing-3); }
.hvac-gap-4 { gap: var(--hvac-spacing-4); }
.hvac-gap-6 { gap: var(--hvac-spacing-6); }
/* Grid utilities */
.hvac-grid { display: grid; }
.hvac-grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.hvac-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.hvac-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.hvac-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
/* Responsive design */
@media (max-width: 640px) {
.hvac-grid-cols-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.hvac-grid-cols-3 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.hvac-grid-cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.hvac-btn {
width: 100%;
margin-bottom: var(--hvac-spacing-2);
}
.hvac-flex {
flex-direction: column;
}
.hvac-content h1 {
font-size: var(--hvac-font-size-2xl);
}
.hvac-content h2 {
font-size: var(--hvac-font-size-xl);
}
}
@media (max-width: 480px) {
.hvac-card-body,
.hvac-card-header,
.hvac-card-footer {
padding: var(--hvac-spacing-4);
}
.hvac-table th,
.hvac-table td {
padding: var(--hvac-spacing-2);
font-size: var(--hvac-font-size-xs);
}
}
/* Focus management for accessibility */
.hvac-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* High contrast mode support */
@media (prefers-contrast: high) {
:root {
--hvac-border: #000000;
--hvac-border-light: #333333;
}
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
.hvac-btn,
.hvac-card,
.hvac-form-control {
transition: none;
}
}
/* Print styles */
/* Focus Management Styles - WCAG 2.1 Compliance */
/* Added for keyboard accessibility and screen reader support */
/* Button Focus Styles */
.hvac-button:focus,
.hvac-content .button:focus,
.hvac-content button:focus,
.hvac-content input[type="submit"]:focus,
.hvac-email-submit:focus,
.hvac-filter-submit:focus,
.hvac-certificate-actions button:focus,
.hvac-certificate-actions a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
border-radius: 4px;
}
/* Input Focus Styles */
.hvac-form-input:focus,
.hvac-content input[type="text"]:focus,
.hvac-content input[type="email"]:focus,
.hvac-content input[type="password"]:focus,
.hvac-content input[type="url"]:focus,
.hvac-content textarea:focus,
.hvac-content select:focus,
.hvac-email-form-row input:focus,
.hvac-email-form-row textarea:focus,
.hvac-filter-group input:focus,
.hvac-filter-group select:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
border-color: #005fcc;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* Link Focus Styles */
.hvac-content a:focus,
.hvac-event-link:focus,
.hvac-certificate-link:focus,
.hvac-attendee-profile-icon:focus,
.hvac-dashboard-nav a:focus,
.hvac-email-navigation a:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
text-decoration: underline;
background-color: rgba(0, 95, 204, 0.1);
border-radius: 2px;
}
/* Interactive Element Focus Styles */
.hvac-attendee-checkbox:focus,
.hvac-select-all-container input[type="checkbox"]:focus,
.hvac-modal-close:focus,
.hvac-certificate-table tr:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
box-shadow: 0 0 0 3px rgba(0, 95, 204, 0.2);
}
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.hvac-content *:focus {
outline: 3px solid #000000;
outline-offset: 2px;
background-color: #ffff00;
color: #000000;
}
}
/* Focus-visible polyfill support */
/* Reset focus for mouse users while preserving keyboard accessibility */
.js-focus-visible :focus:not(.focus-visible) {
outline: none;
box-shadow: none;
}
/* Ensure focus is visible for keyboard users */
.js-focus-visible .focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
}
@media print {
.hvac-btn,
.hvac-card {
box-shadow: none;
}
.hvac-table {
border-collapse: collapse;
}
.hvac-table th,
.hvac-table td {
border: 1px solid #000;
}
}

286
assets/css/hvac-layout.css Normal file
View file

@ -0,0 +1,286 @@
/**
* HVAC Layout Styles
*
* Ensures all HVAC pages follow the theme's layout settings
* - Full width container with max width of 1200px
* - 20px padding on all sides
*/
/* Container Layout for All HVAC Pages */
.hvac-plugin-page .site-content .ast-container,
.hvac-plugin-page .ast-container {
max-width: 1200px !important;
width: 100% !important;
margin: 0 auto !important;
padding: 20px !important;
box-sizing: border-box !important;
}
/* Ensure content area also follows max width */
.hvac-plugin-page .content-area {
max-width: 100% !important;
padding: 0 !important;
}
/* Force full-width layout on HVAC pages - Astra specific */
body.ast-no-sidebar.hvac-page .site-content,
body.ast-no-sidebar.hvac-trainer-page .site-content,
body.ast-no-sidebar.hvac-plugin-active .site-content {
/* Let Astra handle the layout */
}
/* Ensure containers use proper width on HVAC pages */
.hvac-page-wrapper .container {
max-width: 1200px;
width: 100%;
margin: 0 auto;
padding: 0 20px;
}
/* Override Astra's container constraints on HVAC pages */
body.hvac-page .ast-container,
body.hvac-trainer-page .ast-container,
body.hvac-plugin-active .ast-container,
body.ast-no-sidebar.hvac-page .ast-container,
body.ast-no-sidebar.hvac-trainer-page .ast-container {
max-width: 100% !important;
width: 100% !important;
margin-left: auto !important;
margin-right: auto !important;
padding-left: 40px !important;
padding-right: 40px !important;
}
/* Force full-width for all content containers */
body.hvac-page #content > .ast-container,
body.hvac-trainer-page #content > .ast-container,
body.hvac-plugin-active #content > .ast-container,
body.hvac-page .site-content > .ast-container,
body.hvac-trainer-page .site-content > .ast-container {
max-width: 100% !important;
width: 100% !important;
}
/* Override any inline styles from Astra */
body.hvac-page .ast-container[style*="max-width"],
body.hvac-trainer-page .ast-container[style*="max-width"] {
max-width: 100% !important;
}
/* Inner content wrapper - wider for better use of space */
body.hvac-page .hvac-page-wrapper,
body.hvac-trainer-page .hvac-page-wrapper,
body.hvac-plugin-active .hvac-page-wrapper {
max-width: 1600px;
margin: 0 auto;
padding: 0 20px;
}
/* Specific container overrides */
body.hvac-page .hvac-page-wrapper .container,
body.hvac-trainer-page .hvac-page-wrapper .container {
max-width: 100%;
width: 100%;
padding: 0;
}
/* Dashboard specific full-width */
body.hvac-trainer-dashboard .hvac-dashboard-wrapper {
max-width: 100%;
padding: 20px 40px;
}
/* Certificate pages full-width */
body.hvac-certificate-reports .hvac-certificate-reports-content,
body.page-template-page-generate-certificates .hvac-generate-certificates-content {
max-width: 100%;
padding: 20px 40px;
}
/* Ensure full width layout */
.hvac-plugin-page.ast-separate-container .ast-container {
background-color: #fff;
border-radius: 0;
}
/* Override theme's narrow content */
.hvac-plugin-page .entry-content {
max-width: none !important;
margin: 0 !important;
padding: 0 !important;
}
/* Dashboard specific adjustments */
.hvac-dashboard {
background-color: #f9f9f9;
padding: 20px;
border-radius: 8px;
margin: 0;
}
/* Event manage page specific */
.tribe-community-events {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
/* Certificate pages */
.hvac-certificate-wrapper {
background: #fff;
padding: 20px;
border-radius: 8px;
margin: 0;
}
/* Form containers */
.hvac-form-container {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
/* Navigation menus */
.hvac-event-navigation,
.hvac-dashboard-nav {
margin-bottom: 20px;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.hvac-plugin-page .site-content,
.hvac-plugin-page .ast-container,
.hvac-plugin-page .content-area {
padding: 15px !important;
}
.hvac-dashboard,
.tribe-community-events,
.hvac-certificate-wrapper,
.hvac-form-container {
padding: 15px;
}
}
/* Print styles */
@media print {
.hvac-plugin-page .site-content,
.hvac-plugin-page .ast-container,
.hvac-plugin-page .content-area {
max-width: 100% !important;
padding: 0 !important;
}
}
/* Ensure Event Calendar Community forms have proper styling */
.tribe-community-events .tribe-events-community-details,
.tribe-community-events .event-dynamic-helper-text,
.tribe-community-events .tribe-section {
margin-bottom: 20px;
}
.tribe-community-events h3 {
margin-top: 30px;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 2px solid #e5e7eb;
font-size: 1.3em;
color: #333;
}
.tribe-community-events label {
display: block;
margin-bottom: 5px;
font-weight: 600;
color: #333;
}
.tribe-community-events input[type="text"],
.tribe-community-events input[type="email"],
.tribe-community-events input[type="url"],
.tribe-community-events input[type="tel"],
.tribe-community-events input[type="number"],
.tribe-community-events input[type="date"],
.tribe-community-events input[type="time"],
.tribe-community-events select,
.tribe-community-events textarea {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
background: #fff;
transition: border-color 0.2s;
}
.tribe-community-events input[type="text"]:focus,
.tribe-community-events input[type="email"]:focus,
.tribe-community-events input[type="url"]:focus,
.tribe-community-events input[type="tel"]:focus,
.tribe-community-events input[type="number"]:focus,
.tribe-community-events input[type="date"]:focus,
.tribe-community-events input[type="time"]:focus,
.tribe-community-events select:focus,
.tribe-community-events textarea:focus {
outline: none;
border-color: #0073aa;
box-shadow: 0 0 0 3px rgba(0, 115, 170, 0.1);
}
.tribe-community-events .tribe-button,
.tribe-community-events input[type="submit"] {
background: #0073aa;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
font-size: 16px;
font-weight: 500;
cursor: pointer;
transition: background 0.2s;
}
.tribe-community-events .tribe-button:hover,
.tribe-community-events input[type="submit"]:hover {
background: #005a87;
}
/* Event form specific styling */
.tribe-community-events .event-dynamic-helper-text {
background: #f8f9fa;
padding: 15px;
border-radius: 4px;
border-left: 4px solid #0073aa;
margin-bottom: 20px;
}
.tribe-community-events .tribe-section-content {
padding: 15px 0;
}
/* Required field indicators */
.tribe-community-events .req {
color: #d63638;
font-weight: bold;
}
/* Error messages */
.tribe-community-events .error,
.tribe-community-events .tribe-error {
color: #d63638;
font-size: 14px;
margin-top: 5px;
}
/* Success messages */
.tribe-community-events .updated,
.tribe-community-events .tribe-success {
background: #d4edda;
border: 1px solid #c3e6cb;
color: #155724;
padding: 10px 15px;
border-radius: 4px;
margin: 20px 0;
}

View file

@ -0,0 +1,62 @@
/**
* 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;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.hvac-page-wrapper {
padding: 20px 15px;
}
.hvac-page-wrapper .container {
padding: 0 15px;
}
}