/* ============================================ Interactivity Enhancements - Enhanced User Experience ============================================ This stylesheet provides enhanced interactivity features: - Real-time URL validation with visual feedback - Contextual help tooltips and guidance - Enhanced keyboard navigation - Accessibility improvements - Visual feedback and animations Requirements: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8 ============================================ */ /* ============================================ URL Validation & Real-time Feedback ============================================ */ .url-validation-container { position: relative; margin-top: var(--eip-spacing-sm); } .validation-feedback { display: none; align-items: center; gap: var(--eip-spacing-sm); padding: var(--eip-spacing-md) var(--eip-spacing-lg); border-radius: var(--eip-radius-lg); font-size: 0.9rem; font-weight: 600; backdrop-filter: var(--eip-glass-blur); border: 1px solid transparent; animation: slideInDown 0.3s ease-out; transition: all var(--eip-transition-normal); } .validation-feedback.valid { background: var(--eip-success-light); color: #69db7c; border-color: rgba(40, 167, 69, 0.3); box-shadow: 0 4px 16px rgba(40, 167, 69, 0.2); } .validation-feedback.invalid { background: var(--eip-error-light); color: #ff8a95; border-color: rgba(220, 53, 69, 0.3); box-shadow: 0 4px 16px rgba(220, 53, 69, 0.2); } .validation-feedback.validating { background: rgba(0, 122, 204, 0.1); color: #74c0fc; border-color: rgba(0, 122, 204, 0.3); box-shadow: 0 4px 16px rgba(0, 122, 204, 0.2); } .validation-icon { font-size: 1.2rem; display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; flex-shrink: 0; } .validation-spinner { width: 16px; height: 16px; border: 2px solid var(--eip-secondary); border-top: 2px solid transparent; border-radius: 50%; animation: spin 1s linear infinite; } .validation-message { flex: 1; line-height: 1.4; } /* Enhanced URL Input with Real-time Feedback */ .enhanced-url-input.valid { border-color: var(--eip-success) !important; box-shadow: 0 0 0 4px rgba(40, 167, 69, 0.15) !important; } .enhanced-url-input.invalid { border-color: var(--eip-error) !important; box-shadow: 0 0 0 4px rgba(220, 53, 69, 0.15) !important; } .enhanced-url-input.validating { border-color: var(--eip-secondary) !important; box-shadow: 0 0 0 4px rgba(0, 122, 204, 0.15) !important; } /* Input Guidance */ .input-guidance { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-lg); padding: var(--eip-spacing-lg); margin-top: var(--eip-spacing-md); backdrop-filter: var(--eip-glass-blur); animation: slideInDown 0.4s ease-out; position: relative; overflow: hidden; } .input-guidance::before { content: ''; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background: var(--eip-secondary-gradient); border-radius: 0 2px 2px 0; } .guidance-content { display: flex; flex-direction: column; gap: var(--eip-spacing-md); } .guidance-title { font-size: 1rem; font-weight: 700; color: var(--eip-secondary); display: flex; align-items: center; gap: var(--eip-spacing-sm); } .guidance-text { color: var(--eip-text-secondary); font-size: 0.95rem; line-height: 1.5; } .guidance-examples { display: flex; flex-direction: column; gap: var(--eip-spacing-sm); } .example-title { font-size: 0.85rem; font-weight: 600; color: var(--eip-text-muted); text-transform: uppercase; letter-spacing: 0.5px; } .example-url { font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; font-size: 0.85rem; color: var(--eip-text-link); background: rgba(0, 122, 204, 0.1); padding: var(--eip-spacing-sm) var(--eip-spacing-md); border-radius: var(--eip-radius-sm); border: 1px solid rgba(0, 122, 204, 0.2); } /* ============================================ Help Tooltips & Contextual Guidance ============================================ */ .help-tooltip { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-lg); padding: var(--eip-spacing-lg); max-width: 320px; color: var(--eip-text-primary); font-size: 0.9rem; backdrop-filter: var(--eip-glass-blur-strong); box-shadow: var(--eip-shadow-xl); animation: fadeInUp 0.3s ease-out; z-index: var(--eip-z-tooltip); position: fixed; } .tooltip-header { display: flex; align-items: center; gap: var(--eip-spacing-sm); margin-bottom: var(--eip-spacing-md); padding-bottom: var(--eip-spacing-sm); border-bottom: 1px solid var(--eip-glass-border); } .tooltip-icon { font-size: 1.2rem; } .tooltip-title { font-weight: 700; color: var(--eip-text-primary); font-size: 1rem; } .tooltip-content p { margin: 0 0 var(--eip-spacing-md) 0; line-height: 1.5; color: var(--eip-text-secondary); } .tooltip-examples, .tooltip-shortcuts { margin-top: var(--eip-spacing-md); } .examples-title, .shortcuts-title { font-size: 0.8rem; font-weight: 700; color: var(--eip-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: var(--eip-spacing-sm); } .example { font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; font-size: 0.8rem; color: var(--eip-text-link); background: rgba(0, 122, 204, 0.1); padding: var(--eip-spacing-xs) var(--eip-spacing-sm); border-radius: var(--eip-radius-sm); margin-bottom: var(--eip-spacing-xs); border: 1px solid rgba(0, 122, 204, 0.2); } .shortcut { display: flex; align-items: center; gap: var(--eip-spacing-sm); margin-bottom: var(--eip-spacing-xs); font-size: 0.85rem; } .shortcut kbd { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-sm); padding: 0.2rem 0.5rem; font-family: inherit; font-size: 0.8rem; font-weight: 600; color: var(--eip-text-primary); min-width: 24px; text-align: center; backdrop-filter: var(--eip-glass-blur); } /* Help Button */ .help-button { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 0.8rem; color: var(--eip-text-muted); transition: all var(--eip-transition-normal); backdrop-filter: var(--eip-glass-blur); z-index: var(--eip-z-elevated); } .help-button:hover, .help-button:focus { background: var(--eip-glass-bg-hover); border-color: var(--eip-secondary); color: var(--eip-secondary); transform: scale(1.1); box-shadow: 0 0 12px rgba(0, 122, 204, 0.3); } /* Step Help Icons */ .step-help-icon { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: 50%; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 0.7rem; color: var(--eip-text-muted); transition: all var(--eip-transition-normal); backdrop-filter: var(--eip-glass-blur); position: absolute; right: var(--eip-spacing-sm); top: var(--eip-spacing-sm); } .step-help-icon:hover, .step-help-icon:focus { background: var(--eip-glass-bg-hover); border-color: var(--eip-secondary); color: var(--eip-secondary); transform: scale(1.15); box-shadow: 0 0 8px rgba(0, 122, 204, 0.3); } /* ============================================ Enhanced Title Selection with Visual Guidance ============================================ */ /* Recommendation Badge */ .recommendation-badge { position: absolute; top: var(--eip-spacing-sm); right: var(--eip-spacing-sm); background: var(--eip-primary-gradient); color: var(--eip-text-primary); padding: 0.3rem 0.6rem; border-radius: var(--eip-radius-md); font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: var(--eip-shadow-sm); animation: pulseGlow 2s ease-in-out infinite; } /* Character Count */ .char-count { position: absolute; bottom: var(--eip-spacing-sm); right: var(--eip-spacing-sm); font-size: 0.7rem; color: var(--eip-text-muted); background: var(--eip-glass-bg); padding: 0.2rem 0.5rem; border-radius: var(--eip-radius-sm); border: 1px solid var(--eip-glass-border); backdrop-filter: var(--eip-glass-blur); } /* Text Truncation */ .option-text.truncated { position: relative; } .expand-text-btn { background: none; border: none; color: var(--eip-secondary); font-size: 0.8rem; font-weight: 600; cursor: pointer; padding: 0.2rem 0.4rem; border-radius: var(--eip-radius-sm); transition: all var(--eip-transition-normal); margin-left: var(--eip-spacing-sm); } .expand-text-btn:hover, .expand-text-btn:focus { background: rgba(0, 122, 204, 0.1); color: var(--eip-secondary-hover); transform: scale(1.05); } /* Enhanced Title Option Highlighting */ .title-option.highlighted { border-color: var(--eip-secondary) !important; background: rgba(0, 122, 204, 0.08) !important; transform: translateX(4px) scale(1.01) !important; box-shadow: 0 4px 20px rgba(0, 122, 204, 0.15) !important; } .title-option:focus { outline: 2px solid var(--eip-secondary); outline-offset: 2px; } /* Title Selection Guidance */ .title-selection-guidance { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-lg); padding: var(--eip-spacing-md); margin-left: auto; backdrop-filter: var(--eip-glass-blur); max-width: 280px; } .guidance-header { display: flex; align-items: center; gap: var(--eip-spacing-sm); margin-bottom: var(--eip-spacing-sm); } .guidance-icon { font-size: 1rem; } .guidance-shortcuts { display: flex; flex-wrap: wrap; gap: var(--eip-spacing-sm); } .shortcut-item { display: flex; align-items: center; gap: var(--eip-spacing-xs); font-size: 0.8rem; color: var(--eip-text-secondary); } .shortcut-item kbd { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-sm); padding: 0.1rem 0.4rem; font-size: 0.7rem; font-weight: 600; color: var(--eip-text-primary); min-width: 20px; text-align: center; } /* ============================================ Progress Guidance & Contextual Help ============================================ */ .progress-guidance { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-lg); padding: var(--eip-spacing-lg); margin-top: var(--eip-spacing-md); backdrop-filter: var(--eip-glass-blur); animation: slideInUp 0.4s ease-out; } .progress-guidance .guidance-content { display: flex; align-items: center; gap: var(--eip-spacing-lg); } .progress-guidance .guidance-icon { font-size: 2rem; animation: float 3s ease-in-out infinite; } .progress-guidance .guidance-text { flex: 1; } .progress-guidance .guidance-title { font-size: 1.1rem; font-weight: 700; color: var(--eip-text-primary); margin-bottom: var(--eip-spacing-sm); } .progress-guidance .guidance-description { color: var(--eip-text-secondary); font-size: 0.9rem; line-height: 1.5; } /* ============================================ Enhanced Accessibility Features ============================================ */ /* Screen Reader Only Content */ .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; } /* Required Field Indicators */ .required-indicator { color: var(--eip-error); font-weight: 700; margin-left: var(--eip-spacing-xs); font-size: 1.1rem; } /* Enhanced Focus Indicators */ .enhanced-url-input:focus, .title-option:focus, .progress-step:focus-within, input:focus, select:focus, textarea:focus, button:focus { outline: 2px solid var(--eip-primary); outline-offset: 2px; } /* High Contrast Mode Support */ @media (prefers-contrast: high) { .validation-feedback.valid { background: #000; color: #00ff00; border: 2px solid #00ff00; } .validation-feedback.invalid { background: #000; color: #ff0000; border: 2px solid #ff0000; } .help-tooltip { background: #000; color: #fff; border: 2px solid #fff; } .title-option.highlighted { background: #000 !important; border: 3px solid #fff !important; } } /* ============================================ User Feedback & Visual Responses ============================================ */ .user-feedback { display: flex; align-items: center; gap: var(--eip-spacing-sm); padding: var(--eip-spacing-md) var(--eip-spacing-lg); border-radius: var(--eip-radius-lg); font-size: 0.9rem; font-weight: 600; backdrop-filter: var(--eip-glass-blur-strong); border: 1px solid transparent; box-shadow: var(--eip-shadow-lg); position: fixed; z-index: var(--eip-z-tooltip); max-width: 400px; animation: slideInUp 0.3s ease-out; } .user-feedback.success { background: var(--eip-success-light); color: #69db7c; border-color: rgba(40, 167, 69, 0.3); } .user-feedback.error { background: var(--eip-error-light); color: #ff8a95; border-color: rgba(220, 53, 69, 0.3); } .user-feedback.warning { background: rgba(255, 193, 7, 0.15); color: #ffd43b; border-color: rgba(255, 193, 7, 0.3); } .user-feedback.info { background: rgba(0, 122, 204, 0.15); color: #74c0fc; border-color: rgba(0, 122, 204, 0.3); } .feedback-icon { font-size: 1.2rem; flex-shrink: 0; } .feedback-message { flex: 1; line-height: 1.4; } /* ============================================ Keyboard Navigation Enhancements ============================================ */ /* Focus Management */ .focus-trap { position: relative; } .focus-trap:focus-within { outline: 2px solid var(--eip-primary); outline-offset: 4px; border-radius: var(--eip-radius-lg); } /* Tab Order Indicators (for development/debugging) */ [tabindex]:not([tabindex="-1"]) { position: relative; } /* Enhanced Button Focus States */ button:focus-visible { outline: 2px solid var(--eip-primary); outline-offset: 2px; box-shadow: 0 0 0 4px rgba(255, 153, 0, 0.2); } /* Enhanced Input Focus States */ input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--eip-primary); outline-offset: 2px; box-shadow: 0 0 0 4px rgba(255, 153, 0, 0.15); } /* ============================================ Responsive Enhancements ============================================ */ @media (max-width: 768px) { .help-tooltip { max-width: 280px; font-size: 0.85rem; } .input-guidance { padding: var(--eip-spacing-md); } .title-selection-guidance { max-width: 100%; margin-left: 0; margin-top: var(--eip-spacing-md); } .guidance-shortcuts { justify-content: center; } .user-feedback { max-width: 90vw; font-size: 0.85rem; } } @media (max-width: 480px) { .help-tooltip { max-width: 90vw; font-size: 0.8rem; padding: var(--eip-spacing-md); } .validation-feedback { font-size: 0.8rem; padding: var(--eip-spacing-sm) var(--eip-spacing-md); } .recommendation-badge { font-size: 0.6rem; padding: 0.2rem 0.4rem; } .char-count { font-size: 0.6rem; } } /* ============================================ Reduced Motion Support ============================================ */ @media (prefers-reduced-motion: reduce) { .help-tooltip, .validation-feedback, .input-guidance, .user-feedback, .progress-guidance { animation: none !important; } .recommendation-badge { animation: none !important; } .progress-guidance .guidance-icon { animation: none !important; } .validation-spinner { animation: none !important; border: 2px solid var(--eip-secondary); } .title-option.highlighted, .help-button:hover, .step-help-icon:hover { transform: none !important; } } /* ============================================ Print Styles ============================================ */ @media print { .help-tooltip, .help-button, .step-help-icon, .validation-feedback, .input-guidance, .user-feedback, .title-selection-guidance, .progress-guidance { display: none !important; } } /* ============================================ Dark Mode Enhancements ============================================ */ @media (prefers-color-scheme: dark) { .help-tooltip { box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); } .validation-feedback { box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4); } .user-feedback { box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); } }