/* ============================================ Responsive Design and Accessibility Enhancements ============================================ This stylesheet provides comprehensive responsive design and accessibility features for the Enhanced Item Management system. Requirements: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8 Table of Contents: 1. CSS Variables for Responsive Design 2. Mobile-First Responsive Breakpoints 3. Tablet Responsive Design 4. Desktop Responsive Design 5. Accessibility Features (ARIA, Screen Reader Support) 6. High-Contrast Mode Support 7. Reduced-Motion Support 8. Keyboard Navigation Enhancements 9. Touch-Friendly Interactions 10. Print Styles ============================================ */ /* ============================================ 1. CSS Variables for Responsive Design ============================================ */ :root { /* Responsive Breakpoints */ --bp-mobile: 480px; --bp-tablet: 768px; --bp-desktop: 1024px; --bp-large: 1200px; /* Responsive Spacing */ --spacing-mobile: 0.5rem; --spacing-tablet: 1rem; --spacing-desktop: 1.5rem; /* Responsive Typography */ --font-size-xs: clamp(0.7rem, 2vw, 0.8rem); --font-size-sm: clamp(0.8rem, 2.5vw, 0.9rem); --font-size-base: clamp(0.9rem, 3vw, 1rem); --font-size-lg: clamp(1rem, 3.5vw, 1.2rem); --font-size-xl: clamp(1.2rem, 4vw, 1.5rem); --font-size-xxl: clamp(1.5rem, 5vw, 2rem); --font-size-xxxl: clamp(2rem, 6vw, 3rem); /* Touch Target Sizes */ --touch-target-min: 44px; --touch-target-comfortable: 48px; /* Accessibility Colors */ --focus-color: #005fcc; --focus-outline: 2px solid var(--focus-color); --focus-outline-offset: 2px; /* High Contrast Colors */ --hc-bg: #000000; --hc-text: #ffffff; --hc-border: #ffffff; --hc-accent: #ffff00; } /* ============================================ 2. Mobile-First Responsive Breakpoints (≤ 480px) ============================================ */ /* Mobile styles are applied via media query to avoid overriding base styles */ @media (max-width: 480px) { /* Base Mobile Styles */ .amazon-ext-enhanced-items-content { padding: var(--spacing-mobile); font-size: var(--font-size-base); } /* Mobile Header */ .enhanced-items-header { margin-bottom: var(--spacing-tablet); text-align: center; } .enhanced-items-header h2 { font-size: var(--font-size-xxl); margin-bottom: var(--spacing-mobile); line-height: 1.2; } /* Mobile Form Layout */ .add-enhanced-item-form { flex-direction: column; gap: var(--spacing-mobile); padding: var(--spacing-mobile); } .enhanced-url-input { width: 100%; min-height: var(--touch-target-min); font-size: var(--font-size-base); padding: 0.75rem; } .extract-btn { width: 100%; min-height: var(--touch-target-comfortable); font-size: var(--font-size-base); padding: 0.75rem; touch-action: manipulation; } /* Mobile Item Cards */ .enhanced-item { flex-direction: column; padding: var(--spacing-mobile); gap: var(--spacing-mobile); } .item-header { flex-direction: column; align-items: flex-start; gap: var(--spacing-mobile); } .item-custom-title { font-size: var(--font-size-lg); line-height: 1.3; word-break: break-word; hyphens: auto; } .price { font-size: var(--font-size-base); padding: 0.5rem 0.75rem; align-self: flex-start; } /* Mobile Item Actions */ .item-actions { flex-direction: column; width: 100%; gap: var(--spacing-mobile); } .item-actions button { width: 100%; min-height: var(--touch-target-min); font-size: var(--font-size-sm); padding: 0.75rem; touch-action: manipulation; } /* Mobile Progress Indicator */ .progress-steps { gap: var(--spacing-mobile); } .progress-step { padding: var(--spacing-mobile); font-size: var(--font-size-sm); } .step-icon { font-size: 1.2rem; width: 1.5rem; height: 1.5rem; } /* Mobile Title Selection */ .title-selection-container { padding: var(--spacing-mobile); margin: var(--spacing-mobile) 0; } .title-option { padding: var(--spacing-mobile); min-height: var(--touch-target-min); touch-action: manipulation; } .option-text { font-size: var(--font-size-base); line-height: 1.4; word-break: break-word; hyphens: auto; } .selection-actions { flex-direction: column; gap: var(--spacing-mobile); } .confirm-selection-btn, .skip-ai-btn { width: 100%; min-height: var(--touch-target-comfortable); font-size: var(--font-size-base); touch-action: manipulation; } /* Mobile Modals */ .edit-modal, .manual-input-form { width: 95vw; max-width: none; margin: var(--spacing-mobile); max-height: 90vh; } .edit-modal-header, .form-header { padding: var(--spacing-mobile); } .edit-modal-content, .form-content { padding: var(--spacing-mobile); gap: var(--spacing-mobile); } .edit-modal-footer, .form-actions { flex-direction: column; gap: var(--spacing-mobile); padding: var(--spacing-mobile); } .save-changes-btn, .cancel-edit-btn, .save-manual-btn, .cancel-manual-btn { width: 100%; min-height: var(--touch-target-comfortable); touch-action: manipulation; } } /* ============================================ 3. Tablet Responsive Design (481px - 768px) ============================================ */ @media (min-width: 481px) and (max-width: 768px) { .amazon-ext-enhanced-items-content { padding: var(--spacing-tablet); } .enhanced-items-header h2 { font-size: var(--font-size-xxxl); } /* Tablet Form Layout */ .add-enhanced-item-form { flex-direction: row; flex-wrap: wrap; gap: var(--spacing-tablet); padding: var(--spacing-tablet); } .enhanced-url-input { flex: 1; min-width: 250px; } .extract-btn { flex-shrink: 0; width: auto; min-width: 120px; } /* Tablet Item Cards */ .enhanced-item { flex-direction: row; padding: var(--spacing-tablet); gap: var(--spacing-tablet); } .item-header { flex-direction: row; align-items: flex-start; gap: var(--spacing-tablet); } .item-custom-title { font-size: var(--font-size-xl); } /* Tablet Item Actions */ .item-actions { flex-direction: column; width: auto; min-width: 140px; } .item-actions button { width: 100%; } /* Tablet Title Selection */ .title-selection-container { padding: var(--spacing-tablet); } .title-option { padding: var(--spacing-tablet); } .selection-actions { flex-direction: row; justify-content: center; } .confirm-selection-btn, .skip-ai-btn { width: auto; min-width: 140px; } /* Tablet Modals */ .edit-modal, .manual-input-form { width: 90vw; max-width: 600px; } .edit-modal-footer, .form-actions { flex-direction: row; justify-content: flex-end; } .save-changes-btn, .cancel-edit-btn, .save-manual-btn, .cancel-manual-btn { width: auto; min-width: 120px; } } /* ============================================ 4. Desktop Responsive Design (≥ 769px) ============================================ */ @media (min-width: 769px) { .amazon-ext-enhanced-items-content { padding: var(--spacing-desktop); } .enhanced-items-header { text-align: left; } .enhanced-items-header h2 { font-size: var(--font-size-xxxl); } /* Desktop Form Layout */ .add-enhanced-item-form { flex-direction: row; align-items: center; gap: var(--spacing-desktop); padding: var(--spacing-desktop); } .enhanced-url-input { flex: 1; min-width: 300px; } .extract-btn { width: auto; min-width: 140px; } /* Desktop Item Cards */ .enhanced-item { flex-direction: row; padding: var(--spacing-desktop); gap: var(--spacing-desktop); } .item-header { flex-direction: row; align-items: flex-start; gap: var(--spacing-desktop); } .item-custom-title { font-size: var(--font-size-xl); } /* Desktop Item Actions */ .item-actions { flex-direction: column; width: auto; min-width: 160px; } /* Desktop Title Selection */ .title-selection-container { padding: var(--spacing-desktop); max-width: 800px; } .title-option { padding: var(--spacing-desktop); } .selection-actions { flex-direction: row; justify-content: center; } /* Desktop Modals */ .edit-modal, .manual-input-form { width: 80vw; max-width: 700px; } } /* Large Desktop (≥ 1200px) */ @media (min-width: 1200px) { .amazon-ext-enhanced-items-content { max-width: 1200px; margin: 0 auto; } .enhanced-item { max-width: 100%; } .title-selection-container { max-width: 900px; } .edit-modal, .manual-input-form { max-width: 800px; } } /* ============================================ 5. Accessibility Features (ARIA, Screen Reader Support) ============================================ */ /* Screen Reader Only Content */ .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } /* Skip Links */ .skip-link { position: absolute; top: -40px; left: 6px; background: var(--eip-primary); color: white; padding: 8px; text-decoration: none; border-radius: 4px; z-index: 100000; font-weight: 600; } .skip-link:focus { top: 6px; } /* Enhanced Focus Indicators */ *:focus { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } /* Remove outline for mouse users, keep for keyboard users */ *:focus:not(:focus-visible) { outline: none; } *:focus-visible { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } /* Enhanced Button Focus */ button:focus-visible, .extract-btn:focus-visible, .item-actions button:focus-visible { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); box-shadow: 0 0 0 4px rgba(0, 95, 204, 0.2); } /* Enhanced Input Focus */ input:focus-visible, select:focus-visible, textarea:focus-visible { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); box-shadow: 0 0 0 4px rgba(0, 95, 204, 0.15); } /* Enhanced Interactive Element Focus */ .title-option:focus-visible, .enhanced-item:focus-within { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } /* Required Field Indicators */ .required::after { content: " *"; color: var(--eip-error); font-weight: bold; margin-left: 0.25rem; } /* Error State Indicators */ .error { border-color: var(--eip-error) !important; box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.2) !important; } .error + .error-message { display: block; color: var(--eip-error); font-size: var(--font-size-sm); margin-top: 0.25rem; } /* Success State Indicators */ .success { border-color: var(--eip-success) !important; box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.2) !important; } /* Loading State Indicators */ .loading { position: relative; pointer-events: none; } .loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid var(--eip-primary); border-top-color: transparent; border-radius: 50%; animation: spin 1s linear infinite; } /* ARIA Live Regions */ .live-region { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; } /* Enhanced Form Labels */ label { display: block; font-weight: 600; margin-bottom: 0.5rem; color: var(--eip-text-primary); } label.inline { display: inline-flex; align-items: center; gap: 0.5rem; font-weight: normal; } /* Form Field Groups */ .form-group { margin-bottom: 1.5rem; } .form-group:last-child { margin-bottom: 0; } /* Fieldset Styling */ fieldset { border: 1px solid var(--eip-glass-border); border-radius: var(--eip-radius-lg); padding: var(--spacing-tablet); margin-bottom: 1.5rem; } legend { font-weight: 700; color: var(--eip-text-primary); padding: 0 0.5rem; } /* ============================================ 6. High-Contrast Mode Support ============================================ */ @media (prefers-contrast: high) { :root { --eip-bg-dark: var(--hc-bg); --eip-bg-card: var(--hc-bg); --eip-text-primary: var(--hc-text); --eip-text-secondary: var(--hc-text); --eip-border: var(--hc-border); --eip-primary: var(--hc-accent); --eip-secondary: var(--hc-accent); } .amazon-ext-enhanced-items-content { background: var(--hc-bg); color: var(--hc-text); } .enhanced-item { background: var(--hc-bg); border: 2px solid var(--hc-border); color: var(--hc-text); } .enhanced-item:hover { background: var(--hc-bg); border-color: var(--hc-accent); } .enhanced-url-input { background: var(--hc-bg); border: 2px solid var(--hc-border); color: var(--hc-text); } .enhanced-url-input:focus { border-color: var(--hc-accent); box-shadow: 0 0 0 4px var(--hc-accent); } .extract-btn { background: var(--hc-accent); color: var(--hc-bg); border: 2px solid var(--hc-accent); } .extract-btn:hover { background: var(--hc-bg); color: var(--hc-accent); } .price { background: var(--hc-accent); color: var(--hc-bg); border: 2px solid var(--hc-accent); } .item-actions button { background: var(--hc-bg); border: 2px solid var(--hc-border); color: var(--hc-text); } .item-actions button:hover { background: var(--hc-accent); color: var(--hc-bg); border-color: var(--hc-accent); } .title-option { background: var(--hc-bg); border: 2px solid var(--hc-border); color: var(--hc-text); } .title-option:hover, .title-option.selected { background: var(--hc-bg); border-color: var(--hc-accent); color: var(--hc-text); } .progress-step { background: var(--hc-bg); border: 2px solid var(--hc-border); color: var(--hc-text); } .progress-step.active { border-color: var(--hc-accent); color: var(--hc-accent); } .error-message { background: var(--hc-bg); color: var(--hc-text); border: 2px solid var(--hc-text); } .success-message { background: var(--hc-bg); color: var(--hc-text); border: 2px solid var(--hc-text); } } /* ============================================ 7. Reduced-Motion Support ============================================ */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } /* Remove hover transforms */ .enhanced-item:hover, .extract-btn:hover, .item-actions button:hover, .title-option:hover, .price:hover { transform: none !important; } /* Remove loading animations */ .loading::after { animation: none !important; border: 2px solid var(--eip-primary); } /* Remove progress animations */ .progress-step.active .step-icon, .loading-indicator::before { animation: none !important; } /* Remove floating animations */ .empty-icon { animation: none !important; } } /* ============================================ 8. Keyboard Navigation Enhancements ============================================ */ /* Tab Order Management */ .tab-trap { position: relative; } .tab-trap:focus-within { outline: 2px solid var(--focus-color); outline-offset: 4px; } /* Enhanced Keyboard Navigation for Item Cards */ .enhanced-item { position: relative; } .enhanced-item:focus-within { outline: 2px solid var(--focus-color); outline-offset: 2px; } /* Keyboard Navigation for Title Selection */ .title-options { role: radiogroup; } .title-option { cursor: pointer; position: relative; } .title-option[aria-selected="true"] { border-color: var(--eip-secondary); background: rgba(0, 122, 204, 0.1); } /* Keyboard Shortcuts Display */ .keyboard-shortcut { display: inline-flex; align-items: center; gap: 0.25rem; font-size: var(--font-size-xs); color: var(--eip-text-muted); margin-left: auto; } .kbd { background: var(--eip-glass-bg); border: 1px solid var(--eip-glass-border); border-radius: 3px; padding: 0.1rem 0.3rem; font-family: monospace; font-size: 0.8em; font-weight: 600; color: var(--eip-text-primary); min-width: 1.5em; text-align: center; } /* Enhanced Modal Keyboard Navigation */ .modal-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal-content { position: relative; max-height: 90vh; overflow-y: auto; } /* Focus Management for Modals */ .modal-content:focus { outline: none; } .modal-header .close-btn:focus { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); } /* ============================================ 9. Touch-Friendly Interactions ============================================ */ /* Touch Target Sizing */ button, .extract-btn, .item-actions button, .title-option, input, select, textarea { min-height: var(--touch-target-min); min-width: var(--touch-target-min); } /* Comfortable Touch Targets for Primary Actions */ .extract-btn, .confirm-selection-btn, .save-changes-btn, .save-manual-btn { min-height: var(--touch-target-comfortable); } /* Touch Feedback */ button:active, .extract-btn:active, .item-actions button:active, .title-option:active { transform: scale(0.98); transition: transform 0.1s ease; } /* Prevent Touch Callouts */ button, .extract-btn, .item-actions button, .title-option { -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; touch-action: manipulation; } /* Touch Scroll Improvements */ .amazon-ext-enhanced-items-content, .edit-modal-content, .form-content { -webkit-overflow-scrolling: touch; scroll-behavior: smooth; } /* Swipe Gestures (for future enhancement) */ .swipe-container { touch-action: pan-x pan-y; overflow: hidden; } /* ============================================ 10. Print Styles ============================================ */ @media print { /* Reset colors for print */ * { background: white !important; color: black !important; box-shadow: none !important; text-shadow: none !important; } /* Hide interactive elements */ .add-enhanced-item-form, .extraction-progress, .item-actions, .edit-modal-overlay, .manual-input-form-container, .title-selection-container, button, .extract-btn { display: none !important; } /* Optimize layout for print */ .amazon-ext-enhanced-items-content { padding: 0; font-size: 12pt; line-height: 1.4; } .enhanced-items-header h2 { font-size: 18pt; margin-bottom: 12pt; border-bottom: 1pt solid black; padding-bottom: 6pt; } .enhanced-item { border: 1pt solid black; margin-bottom: 12pt; padding: 12pt; break-inside: avoid; page-break-inside: avoid; } .item-custom-title { font-size: 14pt; font-weight: bold; margin-bottom: 6pt; } .price { font-size: 12pt; font-weight: bold; background: none; border: 1pt solid black; padding: 3pt 6pt; display: inline-block; } .item-url { font-size: 10pt; word-break: break-all; } .created-date { font-size: 10pt; font-style: italic; } /* Print page breaks */ .enhanced-item:nth-child(3n) { page-break-after: always; } /* Print headers and footers */ @page { margin: 1in; @top-center { content: "Enhanced Items List"; font-size: 10pt; } @bottom-center { content: counter(page); font-size: 10pt; } } } /* ============================================ Additional Responsive Utilities ============================================ */ /* Responsive Text Utilities */ .text-responsive { font-size: var(--font-size-base); } .text-responsive-sm { font-size: var(--font-size-sm); } .text-responsive-lg { font-size: var(--font-size-lg); } /* Responsive Spacing Utilities */ .spacing-responsive { padding: var(--spacing-mobile); } @media (min-width: 481px) { .spacing-responsive { padding: var(--spacing-tablet); } } @media (min-width: 769px) { .spacing-responsive { padding: var(--spacing-desktop); } } /* Responsive Visibility Utilities */ .mobile-only { display: block; } .tablet-up { display: none; } .desktop-up { display: none; } @media (min-width: 481px) { .mobile-only { display: none; } .tablet-up { display: block; } } @media (min-width: 769px) { .desktop-up { display: block; } } /* Responsive Grid Utilities */ .responsive-grid { display: grid; gap: var(--spacing-mobile); grid-template-columns: 1fr; } @media (min-width: 481px) { .responsive-grid { gap: var(--spacing-tablet); grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); } } @media (min-width: 769px) { .responsive-grid { gap: var(--spacing-desktop); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } } /* Responsive Flex Utilities */ .responsive-flex { display: flex; flex-direction: column; gap: var(--spacing-mobile); } @media (min-width: 481px) { .responsive-flex { flex-direction: row; gap: var(--spacing-tablet); } } @media (min-width: 769px) { .responsive-flex { gap: var(--spacing-desktop); } }