web_design_ux_2025 38 Q&As

Web Design UX 2025 FAQ & Answers

38 expert Web Design UX 2025 answers researched from official documentation. Every answer cites authoritative sources you can verify.

unknown

38 questions
A

WCAG 2.2 (Web Content Accessibility Guidelines) is latest W3C standard for web accessibility. Focuses on making websites usable by people with disabilities. Key additions in 2.2: (1) Focus Not Obscured - ensure focus indicators visible, (2) Target Size Minimum - touch targets at least 24x24 CSS pixels, (3) Dragging Movements - alternatives to drag-and-drop, (4) Consistent Help - help and contact info consistent across pages. Legal impact: Accessibility lawsuits increased 300% since 2020. 2025 reality: 15% of global population has disabilities, inaccessible sites lose customers and face legal risks. Implementation follows A, AA, AAA conformance levels. AA level minimum for compliance. Use tools: axe DevTools, WAVE, Lighthouse accessibility audit. Essential for inclusive design and legal compliance in 2025.

99% confidence
A

WCAG 2.2 AA standard requirements for compliance: (1) Color Contrast - 4.5:1 for normal text, 3:1 for large text (18pt+), (2) Focus Visible - visible keyboard focus indicators, (3) Target Size - minimum 24x24px for touch targets (new in 2.2), (4) Keyboard Accessible - all functionality via keyboard, no keyboard traps, (5) Resizable Text - 200% zoom without breaking layout, (6) Alternative Text - meaningful alt text for images, (7) Captions - for pre-recorded video content, (8) Error Identification - clear error messages, (9) Status Messages - programmatically determinable status changes, (10) Focus Not Obscured - focus indicators not hidden (new in 2.2). 2025 enforcement: ADA lawsuits targeting WCAG 2.2 compliance. Essential for legal accessibility requirements and inclusive design.

99% confidence
A

Mobile-first design creates for mobile devices first, then enhances for larger screens. Design approach: Start with 320px-480px mobile layout, add complexity for tablet (768px+), desktop (1024px+). Benefits: (1) Performance - smaller bundles for mobile, faster load times, (2) Better UX - mobile experience prioritized (70% traffic mobile), (3) Progressive enhancement - features added as screen space increases, (4) Easier maintenance - simpler base, add enhancements upward. Implementation: CSS min-width media queries, fluid grids, flexible images. Modern tools: CSS Grid auto-fit, Flexbox, clamp() for fluid typography, Container Queries (2025). 2025 stats: Mobile conversion 60% lower than desktop due to poor mobile UX. Mobile-first reduces bounce rate by 30%. Essential for performance and user experience.

99% confidence
A

CSS Grid provides two-dimensional layout with intrinsic responsiveness. Core pattern: grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)) creates flexible columns without media queries. Key techniques: (1) auto-fit collapses empty tracks and expands filled ones, (2) minmax(250px, 1fr) sets minimum width with flexible growth, (3) Use min() to prevent overflow: repeat(auto-fit, minmax(min(250px, 100%), 1fr)). 2025 best practice: Grid for page layouts, Flexbox for component alignment, Container Queries for reusable components. Example: .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 1.5rem; }. Browser support: All modern browsers (Chrome 105+, Safari 16+, Firefox 110+). Avoid floats and absolute positioning for layouts. Essential for intrinsically responsive design without breakpoint complexity.

99% confidence
A

Semantic HTML5 uses elements that describe their meaning, not just appearance. Elements:

,
A

Always use semantic HTML first - native elements have superior assistive technology support. W3C's first rule of ARIA: "If you can use native HTML, do so." Pages with ARIA average 41% more accessibility errors than pages without (WebAIM 2024 study). Use ARIA only when: (1) Custom widgets have no HTML equivalent (combobox, treeview), (2) Adding context to icon buttons (aria-label="Close dialog"), (3) Dynamic content announcements (aria-live regions), (4) Complex interactive patterns. WCAG 2.2 (legal standard in 4,605 ADA lawsuits, 2024) does not require ARIA for compliance. Example: Use for icon-only buttons. Test with NVDA, JAWS, or VoiceOver to verify. Essential for avoiding accessibility regressions while supporting custom components.

99% confidence
A

Core Web Vitals are user experience metrics Google uses for ranking. Three metrics: (1) Largest Contentful Paint (LCP) - loading performance (target <2.5s), (2) Interaction to Next Paint (INP) - interactivity (target <200ms), (3) Cumulative Layout Shift (CLS) - visual stability (target <0.1). Optimization: LCP - optimize images (WebP, lazy loading), preload critical resources, reduce server response time. INP - reduce JavaScript execution time, optimize third-party scripts, use web workers. CLS - include dimensions for images/videos, avoid dynamic content above existing content, use font-display: swap. 2025 tools: Lighthouse, WebPageTest, Chrome DevTools Performance tab. Poor Core Web Vitals 40% lower conversion. Essential for SEO rankings and user experience.

99% confidence
A

LCP measures time until largest visible element loads. 2025 target: <2.5s for 75th percentile, <4s considered poor and harms SEO. Critical mistake: Never lazy-load the LCP image - delays the most important visual. Four optimization areas: (1) Time to First Byte - use CDN, optimize server response, HTTP/2/3, (2) Resource load delay - preload hero images with , (3) Resource load time - compress images (WebP 25-34% smaller than JPEG), use srcset for responsive images, (4) Render delay - inline critical CSS, defer non-critical JavaScript. LCP elements: Often hero images (60% of cases), large text blocks, or videos. Identify with Chrome DevTools LCP overlay. Measurement: Lighthouse, PageSpeed Insights, WebPageTest, Real User Monitoring. Essential for user experience and Google ranking algorithm.

99% confidence
A

CLS measures unexpected layout shifts during page load. Target: <0.1 (good), <0.25 (needs improvement). Images cause 60% of CLS issues (2024 web performance studies). Prevention: (1) Set image dimensions - ... enables browser to reserve space, (2) Use aspect-ratio CSS for responsive images, (3) Font optimization - font-display: swap with font fallback matching (size-adjust, ascent-override properties), (4) Reserve space for ads/embeds with min-height or aspect-ratio, (5) Avoid inserting content above existing content, (6) Use transform/opacity for animations (not layout properties). Modern technique: Facade loading for heavy embeds (YouTube, social media) - show placeholder until clicked. Measurement: PageSpeed Insights, Chrome DevTools CLS tracker, Core Web Vitals report. Impact: High CLS reduces conversion 25%. Essential for visual stability and user trust.

99% confidence
A

WCAG 2.2 requires specific contrast ratios for text readability. Level AA: Normal text (under 18pt or 14pt bold) requires 4.5:1 contrast ratio. Large text (18pt+ or 14pt+ bold) requires 3:1 ratio. Level AAA: Normal text 7:1, large text 4.5:1. Graphical objects: 3:1 for essential information. Implementation: Use tools like WebAIM Contrast Checker, Adobe Color Accessibility, Chrome DevTools contrast check. For dark mode: Invert light color scheme, ensure same ratios maintained. 2025 trend: 20% of websites fail color contrast, cause 15% accessibility complaints. Design process: Check contrast early, avoid relying on color alone for information, provide high contrast mode toggle. Use CSS contrast() function for dynamic themes. Essential for accessibility compliance and usability.

99% confidence
A

Dark mode must meet same WCAG 2.2 contrast requirements: 4.5:1 normal text, 3:1 large text. Critical: Dark mode doesn't automatically satisfy WCAG - you must verify contrast in both modes. Legal context: European Accessibility Act (June 2025), 4,605 ADA lawsuits (2024) require proper contrast. Implementation: (1) Avoid pure black (#000000) - use #121212 to reduce eye strain, (2) Test gray text on dark backgrounds for adequate contrast, (3) Provide user toggle between modes (accessibility experts recommend choice), (4) Use CSS custom properties: :root { --bg: #fff; --text: #000; } @media (prefers-color-scheme: dark) { :root { --bg: #121212; --text: #e0e0e0; } }. Verify with WebAIM Contrast Checker in both modes. Impact: Some users find dark mode harder to read despite preferences. Essential to offer both modes, not force one.

99% confidence
A

Keyboard navigation enables access without mouse. Requirements: (1) Tab order follows logical reading order, (2) Focus indicators visible and clear, (3) No keyboard traps (can tab in and out), (4) All interactive elements keyboard accessible, (5) Skip links for bypassing navigation. Implementation: Use native elements (button, link, input) which have keyboard support built-in. For custom components: handle tab key, focus/blur events, keyboard events (Enter, Space, arrows). Focus indicators: outline: 2px solid #0000FF; with adequate contrast. Skip link: Skip to main content hidden visually but available to screen readers. 2025 tools: axe keyboard navigation audit, tab through site manually. Test without mouse - critical accessibility requirement. Essential for motor disability accessibility and power users.

99% confidence
A

Focus management ensures keyboard users know their location on the page. Critical requirements (WCAG 2.1 SC 1.4.11): Focus indicator with 3:1 contrast, adequate surface area, and visibility. Use :focus-visible pseudo-class - shows focus for keyboard/programmatic focus, hides for mouse clicks based on browser heuristics. Implementation: button:focus-visible { outline: 3px solid #0066cc; outline-offset: 2px; }. Key principles: (1) Predictable focus order matching visual layout, (2) Visible high-contrast indicators, (3) Focus containment within modals/dialogs, (4) Focus restoration when closing components. JavaScript: element.focus() for programmatic focus, trap focus in modals by catching Tab/Shift+Tab. Modern browsers (2025) apply focus rings selectively, making :focus-visible essential to avoid redundant focus indicators on mouse/touch interactions. Test with keyboard-only navigation. Essential for accessibility compliance.

99% confidence
A

Fluid typography using CSS clamp() is the modern standard, replacing media query breakpoints. Syntax: font-size: clamp(min, preferred, max) where preferred combines viewport and user preferences. Critical for accessibility: Use rem + vw units to respect user font size settings, e.g., clamp(1rem, 0.5rem + 2vw, 3rem). Modern typescale (2025): Fluidly adapts across screen sizes without breakpoints, preserving hierarchy and rhythm from mobile to desktop. Implementation: h1 { font-size: clamp(2rem, 1.5rem + 3vw, 4rem); } scales between 2rem-4rem based on viewport. Tools: ClampGenerator.com, Fluid Type Generator for calculating values. Accessibility requirement: Must scale with browser zoom - rem units essential (never px for font-size). Benefits: No media queries, smooth scaling, maintains visual hierarchy. Test across 320px-1920px+ viewports. Essential for modern responsive design.

99% confidence
A

Container queries enable components to respond to their container size, not viewport - enabling truly modular, context-aware components. Browser support (2025): Chrome 105+, Edge 105+, Safari 16+, Firefox 110+ - now widespread and production-ready. Implementation: Set container-type: inline-size on parent, write @container rules for children. Example: .card { container-type: inline-size; } @container (min-width: 400px) { .card-content { display: grid; grid-template-columns: 1fr 1fr; } }. Use for: Reusable components that appear in different layouts (sidebar, main content, grid), component-level responsiveness based on available space. Don't use for: Page-level layouts (use media queries instead). Benefits: Components own their responsive styling, work across pages/templates without modification, reduced media query complexity. 2025 trend: Influencing balance of responsive design, enabling design systems with truly reusable components. Essential for modern component-based architecture.

99% confidence
A

Media queries respond to viewport/device characteristics, container queries respond to parent element dimensions. Media queries: @media (min-width: 768px) applies styles based on screen width. Container queries: @container (min-width: 400px) applies styles based on container width. Key difference: Container queries enable component-responsive design - components adapt to available space regardless of viewport size. Use media queries for: Page layout structure, global navigation changes, breakpoints affecting entire page. Use container queries for: Card layouts that appear in sidebar (narrow) or main content (wide), form components in different contexts, reusable design system components. 2025 pattern: Combine both - media queries for macro layout, container queries for micro component adaptations. Example: Navigation switches to hamburger at 768px viewport (media query), card switches to horizontal layout at 400px container width (container query). Essential for truly modular, context-aware component design.

99% confidence
A

Progressive enhancement starts with accessible baseline content, layering enhancements for capable browsers. 2025 relevance: Essential for accessibility, performance, and resilient experiences. Three-layer approach: (1) HTML foundation - semantic markup accessible to all users (screen readers, keyboard navigation, assistive technologies), (2) CSS enhancement - visual styling for capable browsers, (3) JavaScript features - advanced functionality for modern browsers. Benefits: Content accessible regardless of browser capability, faster loading (enhancements load conditionally), backwards compatible and forward-looking. Implementation: Deliver essential functionality via HTML forms/links, enhance with CSS @supports for feature detection, add JavaScript progressively with feature detection. Example: Starbucks uses responsive design + semantic HTML for cross-device ordering. Web pages built this way are inherently more accessible, backwards compatible, and resilient to failures. Essential for inclusive, performant web applications.

99% confidence
A

Combine automated and manual testing - automated tools catch only 30% of issues. Automated tools: (1) axe DevTools - browser extension, CI/CD integration, (2) Lighthouse - built into Chrome DevTools, (3) WAVE - web-based evaluation. Manual testing: (1) Keyboard-only navigation - tab through entire site, verify focus indicators, (2) Screen readers - NVDA (Windows, free), VoiceOver (Mac), JAWS (commercial), (3) Color contrast - verify 4.5:1 normal text, 3:1 large text, (4) Zoom to 200% - ensure layout doesn't break, (5) Mobile accessibility - test with TalkBack/VoiceOver. Testing workflow: Automated scan → Keyboard test → Screen reader test → User testing with people with disabilities. CI/CD integration: Run axe-core in build pipeline. Frequency: During development, before releases, after changes. Don't rely solely on automation - nuanced issues require manual testing. Essential for WCAG 2.2 compliance and inclusive design.

99% confidence
A

Form accessibility requires proper labeling and error handling. Key requirements: (1) Every input has associated label - , (2) Required fields clearly indicated, (3) Error messages programmatically associated, (4) Validation timing - don't validate until user completes field, (5) Group related fields with fieldset/legend. Implementation: Use aria-describedby for additional help text, aria-invalid for validation errors, aria-live for dynamic error announcements. Example:

. 2025 pattern: Use native HTML5 validation with custom ARIA enhancements. Test with screen reader and keyboard. Forms critical accessibility element - often first interaction point. Essential for form usability and compliance.

99% confidence
A

Alt text is required for all non-text content under WCAG 2.2 Success Criterion 1.1.1. European Accessibility Act (enforceable June 2025) makes compliance mandatory. Best practices: (1) Keep concise - under 125 characters, most important info first, (2) Focus on purpose not description - convey what information image provides, (3) Never write "image of" or "picture of" - redundant, (4) Decorative images - use alt="" to hide from screen readers. Image types: Informative images need short description of essential information, functional images describe action (not visual), complex images need longer description via nearby text or aria-describedby. Example: alt="Sales increased 25% in Q4" not alt="Graph showing blue bars rising". SVG: Add and <desc> elements, use role="img". AI automation tools emerging (2025) but verify quality. Test with screen readers to validate alt text conveys meaning. Essential for WCAG compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.allaccessible.org/blog/how-to-add-alternative-text-alt-text-descriptions-to-images-for-screen-readers" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>allaccessible.org</a><a href="https://www.w3.org/WAI/tutorials/images/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://www.wcag.com/blog/good-alt-text-bad-alt-text-making-your-content-perceivable/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>wcag.com</a><a href="https://www.w3.org/WAI/alt/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="1IMKoS" prefix="r21" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6543"],"question":[0,"How do I optimize web performance in 2025?"],"answer":[0,"2025 web performance optimization focuses on user experience metrics. Key strategies: (1) Image optimization - WebP/WebP2 formats, lazy loading, responsive images, (2) Critical CSS - inline above-fold styles, async load remaining CSS, (3) JavaScript optimization - code splitting, tree shaking, web workers for heavy tasks, (4) Resource loading - preload critical resources, use HTTP/2/3, implement service workers, (5) Core Web Vitals - target LCP <2.5s, INP <200ms, CLS <0.1. Tools: Lighthouse, WebPageTest, Chrome DevTools Performance panel. 2025 trends: 1-second load time target for ecommerce, automatic image optimization via CDN, edge computing for faster content delivery. Performance impacts conversion - 1s delay reduces conversion by 7%. Essential for user experience and SEO rankings."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/fast/"],[0,"https://developer.chrome.com/docs/devtools/performance/"],[0,"https://web.dev/performance-scoring/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-optimize-web-performance-in-2025"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-optimize-web-performance-in-2025" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-optimize-web-performance-in-2025" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I optimize web performance in 2025?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>2025 web performance optimization focuses on user experience metrics. Key strategies: (1) Image optimization - WebP/WebP2 formats, lazy loading, responsive images, (2) Critical CSS - inline above-fold styles, async load remaining CSS, (3) JavaScript optimization - code splitting, tree shaking, web workers for heavy tasks, (4) Resource loading - preload critical resources, use HTTP/2/3, implement service workers, (5) Core Web Vitals - target LCP <2.5s, INP <200ms, CLS <0.1. Tools: Lighthouse, WebPageTest, Chrome DevTools Performance panel. 2025 trends: 1-second load time target for ecommerce, automatic image optimization via CDN, edge computing for faster content delivery. Performance impacts conversion - 1s delay reduces conversion by 7%. Essential for user experience and SEO rankings.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/fast/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://developer.chrome.com/docs/devtools/performance/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.chrome.com</a><a href="https://web.dev/performance-scoring/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="1gU3dX" prefix="r22" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6544"],"question":[0,"What is modern CSS reset in 2025?"],"answer":[0,"Modern CSS resets establish consistent baseline across browsers. 2025 approach combines normalize.css (preserves useful defaults) with custom resets for specific needs. Minimal modern reset: * { margin: 0; padding: 0; box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { line-height: 1.5; font-family: system-ui, sans-serif; }. Why needed: Browsers apply different default styles to elements - resets eliminate inconsistencies. Best practices: (1) Use box-sizing: border-box globally for predictable sizing, (2) Reset margins/padding to avoid unexpected spacing, (3) Set base line-height for readability, (4) Use CSS custom properties for design tokens (colors, spacing, typography). Modern frameworks (Tailwind, Bootstrap) include opinionated resets. Popular standalone: Josh Comeau's Custom CSS Reset (2025-current). Benefits: Predictable cross-browser behavior, foundation for design system, reduces debugging time. Essential for professional web development."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.joshwcomeau.com/css/custom-css-reset/"],[0,"https://github.com/necolas/normalize.css"],[0,"https://css-tricks.com/normalize-or-reset/"],[0,"https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-is-modern-css-reset-in-2025"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-is-modern-css-reset-in-2025" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-is-modern-css-reset-in-2025" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What is modern CSS reset in 2025?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Modern CSS resets establish consistent baseline across browsers. 2025 approach combines normalize.css (preserves useful defaults) with custom resets for specific needs. Minimal modern reset: * { margin: 0; padding: 0; box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { line-height: 1.5; font-family: system-ui, sans-serif; }. Why needed: Browsers apply different default styles to elements - resets eliminate inconsistencies. Best practices: (1) Use box-sizing: border-box globally for predictable sizing, (2) Reset margins/padding to avoid unexpected spacing, (3) Set base line-height for readability, (4) Use CSS custom properties for design tokens (colors, spacing, typography). Modern frameworks (Tailwind, Bootstrap) include opinionated resets. Popular standalone: Josh Comeau's Custom CSS Reset (2025-current). Benefits: Predictable cross-browser behavior, foundation for design system, reduces debugging time. Essential for professional web development.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.joshwcomeau.com/css/custom-css-reset/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>joshwcomeau.com</a><a href="https://github.com/necolas/normalize.css" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>github.com</a><a href="https://css-tricks.com/normalize-or-reset/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>css-tricks.com</a><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="ZFWzh9" prefix="r23" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6545"],"question":[0,"What are CSS custom properties best practices?"],"answer":[0,"CSS custom properties serve as design tokens for maintainable, scalable design systems. 2025 best practices: (1) Define in :root for global tokens, component scope for local overrides, (2) Use semantic naming - --color-primary not --blue, (3) Organize by category - colors, spacing, typography, shadows, (4) Provide fallbacks: var(--primary, #0066cc), (5) Combine with modern CSS: --fluid-text: clamp(1rem, 2vw, 2rem). Implementation: :root { --color-primary: #0066cc; --spacing-base: 1rem; --font-size-sm: 0.875rem; }. Advanced (2025): Use @property for typed custom properties enabling smooth CSS animations: @property --rotation { syntax: '<angle>'; inherits: false; initial-value: 0deg; }. Benefits: Single source of truth, dynamic theming via JavaScript, maintainable design systems. Tools: Style Dictionary for multi-platform design tokens. Essential for modern CSS architecture and design systems."],"confidence":[0,0.99],"sources":[1,[[0,"https://backlight.dev/docs/design-tokens-using-css-custom-properties"],[0,"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties"],[0,"https://medium.com/@dimeloper/css-techniques-every-developer-should-know-in-2025-7524c1471a10"],[0,"https://web.dev/learn/css/css-variables/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-css-custom-properties-best-practices"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-css-custom-properties-best-practices" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-css-custom-properties-best-practices" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are CSS custom properties best practices?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>CSS custom properties serve as design tokens for maintainable, scalable design systems. 2025 best practices: (1) Define in :root for global tokens, component scope for local overrides, (2) Use semantic naming - --color-primary not --blue, (3) Organize by category - colors, spacing, typography, shadows, (4) Provide fallbacks: var(--primary, #0066cc), (5) Combine with modern CSS: --fluid-text: clamp(1rem, 2vw, 2rem). Implementation: :root { --color-primary: #0066cc; --spacing-base: 1rem; --font-size-sm: 0.875rem; }. Advanced (2025): Use @property for typed custom properties enabling smooth CSS animations: @property --rotation { syntax: '<angle>'; inherits: false; initial-value: 0deg; }. Benefits: Single source of truth, dynamic theming via JavaScript, maintainable design systems. Tools: Style Dictionary for multi-platform design tokens. Essential for modern CSS architecture and design systems.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://backlight.dev/docs/design-tokens-using-css-custom-properties" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>backlight.dev</a><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a><a href="https://medium.com/@dimeloper/css-techniques-every-developer-should-know-in-2025-7524c1471a10" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>medium.com</a><a href="https://web.dev/learn/css/css-variables/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="ZvjN5W" prefix="r24" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6546"],"question":[0,"How do I implement web accessibility for mobile devices?"],"answer":[0,"Mobile accessibility requires mobile-specific WCAG 2.2 considerations. Critical requirements: (1) Touch targets - minimum 24x24 CSS pixels with 8px spacing between targets (WCAG 2.2 SC 2.5.8), (2) Zoom support - content readable at 200% zoom without horizontal scrolling, (3) Orientation - support both portrait and landscape, (4) Voice control - actions must have accessible text labels, (5) Screen reader compatibility - test with VoiceOver (iOS) and TalkBack (Android). Implementation: Use rem/% units for scalability, button { min-width: 44px; min-height: 44px; } for adequate touch targets, proper spacing with margin/padding. 2025 context: 70% of web traffic is mobile, 15% of mobile users have disabilities. Common failures: Touch targets <24px, poor zoom behavior, inaccessible hamburger menus. Test on actual devices, not just emulators. Essential for inclusive mobile experiences and WCAG compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"],[0,"https://web.dev/mobile-web-accessibility/"],[0,"https://www.w3.org/WAI/mobile-accessibility/"],[0,"https://developer.mozilla.org/en-US/docs/Web/Accessibility/Mobile_accessibility"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-implement-web-accessibility-for-mobile-devices"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-implement-web-accessibility-for-mobile-devices" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-implement-web-accessibility-for-mobile-devices" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I implement web accessibility for mobile devices?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Mobile accessibility requires mobile-specific WCAG 2.2 considerations. Critical requirements: (1) Touch targets - minimum 24x24 CSS pixels with 8px spacing between targets (WCAG 2.2 SC 2.5.8), (2) Zoom support - content readable at 200% zoom without horizontal scrolling, (3) Orientation - support both portrait and landscape, (4) Voice control - actions must have accessible text labels, (5) Screen reader compatibility - test with VoiceOver (iOS) and TalkBack (Android). Implementation: Use rem/% units for scalability, button { min-width: 44px; min-height: 44px; } for adequate touch targets, proper spacing with margin/padding. 2025 context: 70% of web traffic is mobile, 15% of mobile users have disabilities. Common failures: Touch targets <24px, poor zoom behavior, inaccessible hamburger menus. Test on actual devices, not just emulators. Essential for inclusive mobile experiences and WCAG compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/mobile-web-accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://www.w3.org/WAI/mobile-accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/Mobile_accessibility" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="uQkgd" prefix="r25" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6547"],"question":[0,"What are modern CSS layout techniques?"],"answer":[0,"Modern CSS layout (2025) uses Flexbox, Grid, and Container Queries - avoiding legacy techniques like floats. Flexbox for one-dimensional layouts: .nav { display: flex; justify-content: space-between; align-items: center; } - ideal for navigation, card rows, form controls. Grid for two-dimensional layouts: .gallery { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; } - ideal for page structure, image galleries, dashboards. Container Queries for component-responsive design: .card { container-type: inline-size; } @container (min-width: 400px) { .card { grid-template-columns: 1fr 1fr; } }. 2025 pattern: Grid for macro page layout, Flexbox for micro component alignment, Container Queries for context-aware components. Browser support: Grid/Flexbox universal, Container Queries in Chrome 105+, Safari 16+, Firefox 110+. Avoid: Floats (legacy), absolute positioning for layouts. Essential for modern, maintainable responsive design."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/learn/css/grid/"],[0,"https://web.dev/learn/css/flexbox/"],[0,"https://web.dev/learn/css/container-queries/"],[0,"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-modern-css-layout-techniques"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-modern-css-layout-techniques" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-modern-css-layout-techniques" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are modern CSS layout techniques?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Modern CSS layout (2025) uses Flexbox, Grid, and Container Queries - avoiding legacy techniques like floats. Flexbox for one-dimensional layouts: .nav { display: flex; justify-content: space-between; align-items: center; } - ideal for navigation, card rows, form controls. Grid for two-dimensional layouts: .gallery { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; } - ideal for page structure, image galleries, dashboards. Container Queries for component-responsive design: .card { container-type: inline-size; } @container (min-width: 400px) { .card { grid-template-columns: 1fr 1fr; } }. 2025 pattern: Grid for macro page layout, Flexbox for micro component alignment, Container Queries for context-aware components. Browser support: Grid/Flexbox universal, Container Queries in Chrome 105+, Safari 16+, Firefox 110+. Avoid: Floats (legacy), absolute positioning for layouts. Essential for modern, maintainable responsive design.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/learn/css/grid/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://web.dev/learn/css/flexbox/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://web.dev/learn/css/container-queries/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="ZEOj9i" prefix="r26" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6548"],"question":[0,"How do I implement dark mode with CSS?"],"answer":[0,"Dark mode uses CSS custom properties with prefers-color-scheme media query and user toggle. Implementation: (1) Define color tokens in :root: :root { --bg: #fff; --text: #000; }, (2) Add dark mode override: @media (prefers-color-scheme: dark) { :root { --bg: #121212; --text: #e0e0e0; } }, (3) Manual toggle via data attribute: [data-theme=\"dark\"] { --bg: #121212; --text: #e0e0e0; }, (4) JavaScript toggle: document.documentElement.setAttribute('data-theme', 'dark'); localStorage.setItem('theme', 'dark'). Critical: Verify WCAG 2.2 contrast (4.5:1 normal, 3:1 large) in both modes. Use #121212 not pure black (#000000) for reduced eye strain. 2025 expectation: 80% of users expect dark mode option. Test both themes for contrast compliance. Benefits: User preference, OLED battery savings, reduced eye strain. Essential for modern web applications."],"confidence":[0,0.99],"sources":[1,[[0,"https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme"],[0,"https://web.dev/patterns/web-vitals-patterns/color-schemes/"],[0,"https://css-tricks.com/a-complete-guide-to-dark-mode-on-the-web/"],[0,"https://www.boia.org/blog/offering-a-dark-mode-doesnt-satisfy-wcag-color-contrast-requirements"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-implement-dark-mode-with-css"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-implement-dark-mode-with-css" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-implement-dark-mode-with-css" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I implement dark mode with CSS?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Dark mode uses CSS custom properties with prefers-color-scheme media query and user toggle. Implementation: (1) Define color tokens in :root: :root { --bg: #fff; --text: #000; }, (2) Add dark mode override: @media (prefers-color-scheme: dark) { :root { --bg: #121212; --text: #e0e0e0; } }, (3) Manual toggle via data attribute: [data-theme="dark"] { --bg: #121212; --text: #e0e0e0; }, (4) JavaScript toggle: document.documentElement.setAttribute('data-theme', 'dark'); localStorage.setItem('theme', 'dark'). Critical: Verify WCAG 2.2 contrast (4.5:1 normal, 3:1 large) in both modes. Use #121212 not pure black (#000000) for reduced eye strain. 2025 expectation: 80% of users expect dark mode option. Test both themes for contrast compliance. Benefits: User preference, OLED battery savings, reduced eye strain. Essential for modern web applications.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a><a href="https://web.dev/patterns/web-vitals-patterns/color-schemes/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://css-tricks.com/a-complete-guide-to-dark-mode-on-the-web/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>css-tricks.com</a><a href="https://www.boia.org/blog/offering-a-dark-mode-doesnt-satisfy-wcag-color-contrast-requirements" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>boia.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="yrhyX" prefix="r27" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6549"],"question":[0,"What are web accessibility testing tools?"],"answer":[0,"Accessibility testing requires both automated tools (catch 30% of issues) and manual testing. Automated tools: (1) axe DevTools - browser extension, CI/CD integration via axe-core, industry-leading accuracy, (2) Lighthouse - built into Chrome DevTools, scores accessibility + performance, (3) WAVE - visual feedback on accessibility issues. Manual testing tools: (1) Screen readers - NVDA (Windows, free), VoiceOver (Mac, built-in), JAWS (commercial standard), TalkBack (Android), (2) Keyboard-only testing - tab through site, verify all functionality accessible, (3) Color contrast checkers - WebAIM Contrast Checker verifies 4.5:1/3:1 ratios. Testing workflow: Run automated scan → Test keyboard navigation → Test with screen reader → User testing with people with disabilities. CI/CD: Integrate axe-core in build pipeline for continuous testing. 2025 trend: AI-powered tools emerging, screen reader cloud testing services. Essential for comprehensive WCAG 2.2 compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.deque.com/axe/devtools/"],[0,"https://web.dev/accessibility-testing/"],[0,"https://www.w3.org/WAI/test-evaluate/"],[0,"https://webaim.org/articles/contrast/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-web-accessibility-testing-tools"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-web-accessibility-testing-tools" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-web-accessibility-testing-tools" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are web accessibility testing tools?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Accessibility testing requires both automated tools (catch 30% of issues) and manual testing. Automated tools: (1) axe DevTools - browser extension, CI/CD integration via axe-core, industry-leading accuracy, (2) Lighthouse - built into Chrome DevTools, scores accessibility + performance, (3) WAVE - visual feedback on accessibility issues. Manual testing tools: (1) Screen readers - NVDA (Windows, free), VoiceOver (Mac, built-in), JAWS (commercial standard), TalkBack (Android), (2) Keyboard-only testing - tab through site, verify all functionality accessible, (3) Color contrast checkers - WebAIM Contrast Checker verifies 4.5:1/3:1 ratios. Testing workflow: Run automated scan → Test keyboard navigation → Test with screen reader → User testing with people with disabilities. CI/CD: Integrate axe-core in build pipeline for continuous testing. 2025 trend: AI-powered tools emerging, screen reader cloud testing services. Essential for comprehensive WCAG 2.2 compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.deque.com/axe/devtools/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>deque.com</a><a href="https://web.dev/accessibility-testing/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://www.w3.org/WAI/test-evaluate/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://webaim.org/articles/contrast/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>webaim.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="1D4zSA" prefix="r28" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6550"],"question":[0,"How do I ensure web content is accessible to screen readers?"],"answer":[0,"Screen reader accessibility requires semantic HTML and proper ARIA usage. Key practices: (1) Use semantic HTML elements (<nav>, <main>, <header>, <footer>) as landmarks, (2) Provide alt text for meaningful images, (3) Use heading hierarchy (h1-h6) without skipping levels, (4) Ensure form inputs have labels, (5) Add ARIA labels for custom elements, (6) Provide skip links to bypass navigation. Testing with actual screen readers - NVDA (free), VoiceOver (built-in Mac), JAWS (commercial). Listen to content reading - is it logical? Can users understand page structure? 2025 statistics: Screen reader usage increasing (3% of users), critical for legal compliance. Common issues: Missing form labels, empty alt text, improper heading structure. Essential for comprehensive web accessibility."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/learn/accessibility/focus/semantics/"],[0,"https://www.w3.org/WAI/WCAG22/Techniques/general/G141"],[0,"https://webaim.org/techniques/screenreader/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-ensure-web-content-is-accessible-to-screen-readers"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-ensure-web-content-is-accessible-to-screen-readers" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-ensure-web-content-is-accessible-to-screen-readers" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I ensure web content is accessible to screen readers?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Screen reader accessibility requires semantic HTML and proper ARIA usage. Key practices: (1) Use semantic HTML elements (<nav>, <main>, <header>, <footer>) as landmarks, (2) Provide alt text for meaningful images, (3) Use heading hierarchy (h1-h6) without skipping levels, (4) Ensure form inputs have labels, (5) Add ARIA labels for custom elements, (6) Provide skip links to bypass navigation. Testing with actual screen readers - NVDA (free), VoiceOver (built-in Mac), JAWS (commercial). Listen to content reading - is it logical? Can users understand page structure? 2025 statistics: Screen reader usage increasing (3% of users), critical for legal compliance. Common issues: Missing form labels, empty alt text, improper heading structure. Essential for comprehensive web accessibility.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/learn/accessibility/focus/semantics/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://www.w3.org/WAI/WCAG22/Techniques/general/G141" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://webaim.org/techniques/screenreader/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>webaim.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="105e78" prefix="r29" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6551"],"question":[0,"What are the best practices for responsive images?"],"answer":[0,"Responsive images use srcset and sizes to deliver optimal image for each screen size and density. 2025 best practices: (1) Use width descriptors (w) over density (x) for better predictability: srcset=\"img-480.jpg 480w, img-800.jpg 800w, img-2560.jpg 2560w\", (2) sizes attribute specifies image display width: sizes=\"(max-width: 800px) 100vw, 800px\", (3) Modern formats - WebP 26% smaller than PNG, 25-34% smaller than JPEG. Use <picture> to serve AVIF/WebP before JPEG/PNG. Implementation: <img src=\"fallback.jpg\" srcset=\"img-480.webp 480w, img-800.webp 800w\" sizes=\"(max-width: 800px) 100vw, 50vw\" loading=\"lazy\" alt=\"...\">. Performance impact: 800px image (128KB) vs 480px (63KB) saves 65KB. 53% of mobile users abandon sites >3s load time. Recommended sizes: 2560px max for most projects, 800px fallback. Essential for performance and Core Web Vitals."],"confidence":[0,0.99],"sources":[1,[[0,"https://dev.to/razbakov/responsive-images-best-practices-in-2025-4dlb"],[0,"https://www.debugbear.com/blog/responsive-images"],[0,"https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images"],[0,"https://web.dev/learn/images/responsive-images/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-the-best-practices-for-responsive-images"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-the-best-practices-for-responsive-images" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-the-best-practices-for-responsive-images" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are the best practices for responsive images?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Responsive images use srcset and sizes to deliver optimal image for each screen size and density. 2025 best practices: (1) Use width descriptors (w) over density (x) for better predictability: srcset="img-480.jpg 480w, img-800.jpg 800w, img-2560.jpg 2560w", (2) sizes attribute specifies image display width: sizes="(max-width: 800px) 100vw, 800px", (3) Modern formats - WebP 26% smaller than PNG, 25-34% smaller than JPEG. Use <picture> to serve AVIF/WebP before JPEG/PNG. Implementation: <img src="fallback.jpg" srcset="img-480.webp 480w, img-800.webp 800w" sizes="(max-width: 800px) 100vw, 50vw" loading="lazy" alt="...">. Performance impact: 800px image (128KB) vs 480px (63KB) saves 65KB. 53% of mobile users abandon sites >3s load time. Recommended sizes: 2560px max for most projects, 800px fallback. Essential for performance and Core Web Vitals.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://dev.to/razbakov/responsive-images-best-practices-in-2025-4dlb" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>dev.to</a><a href="https://www.debugbear.com/blog/responsive-images" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>debugbear.com</a><a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a><a href="https://web.dev/learn/images/responsive-images/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="ZGbXXq" prefix="r30" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6552"],"question":[0,"How do I implement error handling accessibility?"],"answer":[0,"Error messages must be accessible to screen reader users. Requirements: (1) Programmatically associate errors with form inputs, (2) Use aria-live regions for dynamic error announcements, (3) Provide clear, specific error descriptions, (4) Focus first error element after validation. Implementation: <input type=\"email\" aria-invalid=\"true\" aria-describedby=\"email-error\"> <div id=\"email-error\" role=\"alert\">Please enter valid email address</div>. Use aria-live=\"polite\" for non-critical errors, aria-live=\"assertive\" for critical errors. Validation timing: Don't validate until user moves to next field (avoid premature errors). 2025 pattern: Use :invalid pseudo-class with custom styling, ensure error text meets contrast requirements. Test by intentionally submitting invalid form with screen reader. Essential for form usability and accessibility compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/learn/forms/validation/"],[0,"https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA19"],[0,"https://a11yproject.com/posts/creating-accessible-forms/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-implement-error-handling-accessibility"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-implement-error-handling-accessibility" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-implement-error-handling-accessibility" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I implement error handling accessibility?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Error messages must be accessible to screen reader users. Requirements: (1) Programmatically associate errors with form inputs, (2) Use aria-live regions for dynamic error announcements, (3) Provide clear, specific error descriptions, (4) Focus first error element after validation. Implementation: <input type="email" aria-invalid="true" aria-describedby="email-error"> <div id="email-error" role="alert">Please enter valid email address</div>. Use aria-live="polite" for non-critical errors, aria-live="assertive" for critical errors. Validation timing: Don't validate until user moves to next field (avoid premature errors). 2025 pattern: Use :invalid pseudo-class with custom styling, ensure error text meets contrast requirements. Test by intentionally submitting invalid form with screen reader. Essential for form usability and accessibility compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/learn/forms/validation/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA19" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://a11yproject.com/posts/creating-accessible-forms/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>a11yproject.com</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="kzLos" prefix="r31" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6553"],"question":[0,"What are modern CSS units and when to use them?"],"answer":[0,"Modern CSS units enable responsive, accessible design. Unit guide: (1) rem - relative to root font-size, use for typography and spacing (respects user font preferences), (2) em - relative to parent font-size, use for component-local scaling, (3) px - absolute pixels, use only for borders and precise elements, (4) % - relative to parent, use for widths/heights, (5) vw/vh - viewport units, use cautiously (combine with rem for accessibility), (6) clamp() - fluid scaling, use for responsive typography. 2025 best practices: Never use px for font-size (breaks accessibility - users can't scale text). Responsive typography: font-size: clamp(1rem, 0.5rem + 2vw, 3rem) combines user preferences + viewport scaling. Spacing: Use rem for consistent scaling with user font size. Container queries: Use cqw/cqh (container query width/height) for component responsiveness. Essential for accessible, user-respecting design systems."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/learn/css/sizing/"],[0,"https://developer.mozilla.org/en-US/docs/Web/CSS/length"],[0,"https://css-tricks.com/fun-viewport-units/"],[0,"https://www.smashingmagazine.com/2022/01/modern-fluid-typography-css-clamp/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-modern-css-units-and-when-to-use-them"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-modern-css-units-and-when-to-use-them" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-modern-css-units-and-when-to-use-them" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are modern CSS units and when to use them?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Modern CSS units enable responsive, accessible design. Unit guide: (1) rem - relative to root font-size, use for typography and spacing (respects user font preferences), (2) em - relative to parent font-size, use for component-local scaling, (3) px - absolute pixels, use only for borders and precise elements, (4) % - relative to parent, use for widths/heights, (5) vw/vh - viewport units, use cautiously (combine with rem for accessibility), (6) clamp() - fluid scaling, use for responsive typography. 2025 best practices: Never use px for font-size (breaks accessibility - users can't scale text). Responsive typography: font-size: clamp(1rem, 0.5rem + 2vw, 3rem) combines user preferences + viewport scaling. Spacing: Use rem for consistent scaling with user font size. Container queries: Use cqw/cqh (container query width/height) for component responsiveness. Essential for accessible, user-respecting design systems.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/learn/css/sizing/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/length" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a><a href="https://css-tricks.com/fun-viewport-units/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>css-tricks.com</a><a href="https://www.smashingmagazine.com/2022/01/modern-fluid-typography-css-clamp/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>smashingmagazine.com</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="Z15TsLW" prefix="r32" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6554"],"question":[0,"What is touch accessibility and how do I implement it?"],"answer":[0,"Touch accessibility addresses motor impairments affecting touch interaction. WCAG 2.2 SC 2.5.8 requirements: (1) Minimum target size - 24x24 CSS pixels for all interactive elements, (2) Spacing - minimum 8px between targets to prevent mis-taps, (3) Alternatives to dragging - provide button/click alternatives for drag operations, (4) Timing customization - allow users to adjust time-based interactions. Implementation: button { min-width: 44px; min-height: 44px; margin: 8px; } ensures adequate touch targets exceeding minimum. Use padding to expand touch area beyond visual size. Avoid: Touch targets <24px, adjacent buttons without spacing, drag-only interfaces. Testing: Test with finger (not mouse pointer), use various finger sizes, mobility impairment simulators. 2025 context: 15% of users have motor impairments. Common failures: Icon buttons <24px, cramped mobile navs, swipe-only carousels. Essential for inclusive mobile design and WCAG 2.2 compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"],[0,"https://web.dev/mobile-web-accessibility/"],[0,"https://a11yproject.com/posts/touch-target-size/"],[0,"https://www.w3.org/WAI/mobile-accessibility/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-is-touch-accessibility-and-how-do-i-implement-it"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-is-touch-accessibility-and-how-do-i-implement-it" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-is-touch-accessibility-and-how-do-i-implement-it" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What is touch accessibility and how do I implement it?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Touch accessibility addresses motor impairments affecting touch interaction. WCAG 2.2 SC 2.5.8 requirements: (1) Minimum target size - 24x24 CSS pixels for all interactive elements, (2) Spacing - minimum 8px between targets to prevent mis-taps, (3) Alternatives to dragging - provide button/click alternatives for drag operations, (4) Timing customization - allow users to adjust time-based interactions. Implementation: button { min-width: 44px; min-height: 44px; margin: 8px; } ensures adequate touch targets exceeding minimum. Use padding to expand touch area beyond visual size. Avoid: Touch targets <24px, adjacent buttons without spacing, drag-only interfaces. Testing: Test with finger (not mouse pointer), use various finger sizes, mobility impairment simulators. 2025 context: 15% of users have motor impairments. Common failures: Icon buttons <24px, cramped mobile navs, swipe-only carousels. Essential for inclusive mobile design and WCAG 2.2 compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/mobile-web-accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://a11yproject.com/posts/touch-target-size/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>a11yproject.com</a><a href="https://www.w3.org/WAI/mobile-accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="2eRTO2" prefix="r33" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6555"],"question":[0,"What are progressive web app accessibility considerations?"],"answer":[0,"PWAs must meet WCAG 2.2 standards like traditional websites. Key accessibility areas: (1) Offline functionality - essential features accessible offline, clear offline/online status messages, graceful degradation when network fails, (2) Install prompts - accessible install UI, keyboard operable, clear alternative access, (3) Push notifications - accessible notification content, respect user preferences, provide notification settings, (4) Service worker handling - accessible error messages, loading states for screen readers, (5) Native-like interactions - maintain web accessibility (keyboard navigation, screen reader support, focus management). Implementation: Use aria-live for status updates, provide offline fallback content, test with screen readers in both modes. 2025 requirement: PWAs held to same accessibility standards as native apps and websites. Test with VoiceOver, NVDA, TalkBack in offline scenarios. Essential for inclusive PWA experiences."],"confidence":[0,0.99],"sources":[1,[[0,"https://web.dev/learn/pwa/accessibility/"],[0,"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps"],[0,"https://www.w3.org/WAI/WCAG22/Techniques/client-side-script/"],[0,"https://web.dev/accessibility-testing/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-progressive-web-app-accessibility-considerations"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-progressive-web-app-accessibility-considerations" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-progressive-web-app-accessibility-considerations" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are progressive web app accessibility considerations?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>PWAs must meet WCAG 2.2 standards like traditional websites. Key accessibility areas: (1) Offline functionality - essential features accessible offline, clear offline/online status messages, graceful degradation when network fails, (2) Install prompts - accessible install UI, keyboard operable, clear alternative access, (3) Push notifications - accessible notification content, respect user preferences, provide notification settings, (4) Service worker handling - accessible error messages, loading states for screen readers, (5) Native-like interactions - maintain web accessibility (keyboard navigation, screen reader support, focus management). Implementation: Use aria-live for status updates, provide offline fallback content, test with screen readers in both modes. 2025 requirement: PWAs held to same accessibility standards as native apps and websites. Test with VoiceOver, NVDA, TalkBack in offline scenarios. Essential for inclusive PWA experiences.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://web.dev/learn/pwa/accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a><a href="https://www.w3.org/WAI/WCAG22/Techniques/client-side-script/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/accessibility-testing/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="Z2c61CA" prefix="r34" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6556"],"question":[0,"How do I create accessible navigation patterns?"],"answer":[0,"Accessible navigation requires keyboard support, screen reader compatibility, and clear structure. Key elements: (1) Semantic HTML - <nav>, <ul>, <li>, <a>, (2) Skip links to bypass navigation, (3) Current page indication, (4) Mobile navigation accessible with keyboard, (5) ARIA labels for custom navigation. Implementation: <nav aria-label=\"Main navigation\"> <ul> <li><a href=\"/\" aria-current=\"page\">Home</a></li> </ul> </nav>. Mobile patterns: Ensure hamburger menu keyboard accessible, focus trapped within menu when open. Skip link: <a href=\"#main\" class=\"skip-link\">Skip to main content</a>. 2025 requirement: Navigation must be fully accessible via keyboard alone. Test by tabbing through entire navigation, especially mobile versions. Essential for user orientation and site accessibility."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.w3.org/WAI/WCAG22/Techniques/html/ARIA11"],[0,"https://web.dev/learn/accessibility/focus/"],[0,"https://a11yproject.com/posts/skip-nav-links/"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-create-accessible-navigation-patterns"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-create-accessible-navigation-patterns" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-create-accessible-navigation-patterns" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I create accessible navigation patterns?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Accessible navigation requires keyboard support, screen reader compatibility, and clear structure. Key elements: (1) Semantic HTML - <nav>, <ul>, <li>, <a>, (2) Skip links to bypass navigation, (3) Current page indication, (4) Mobile navigation accessible with keyboard, (5) ARIA labels for custom navigation. Implementation: <nav aria-label="Main navigation"> <ul> <li><a href="/" aria-current="page">Home</a></li> </ul> </nav>. Mobile patterns: Ensure hamburger menu keyboard accessible, focus trapped within menu when open. Skip link: <a href="#main" class="skip-link">Skip to main content</a>. 2025 requirement: Navigation must be fully accessible via keyboard alone. Test by tabbing through entire navigation, especially mobile versions. Essential for user orientation and site accessibility.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.w3.org/WAI/WCAG22/Techniques/html/ARIA11" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/learn/accessibility/focus/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://a11yproject.com/posts/skip-nav-links/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>a11yproject.com</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="bJRvF" prefix="r35" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6557"],"question":[0,"What are the best practices for accessible color design?"],"answer":[0,"Accessible color design requires contrast ratios and non-color indicators. WCAG 2.2 requirements: (1) Color contrast - 4.5:1 normal text, 3:1 large text, verified with WebAIM Contrast Checker, (2) Never rely on color alone for information - use icons, text labels, patterns as additional indicators, (3) Test in grayscale - ensure information remains clear without color, (4) Color blindness - avoid red/green combinations (8% of men affected), test with color blindness simulators. Implementation: Links need underlines or icons, not just color change. Error states: Use color + icon + text (not color alone). Success: Green checkmark + \"Success\" text. Tools: Adobe Color Accessibility, Chrome DevTools contrast check, grayscale CSS filter for testing. 2025 trends: Customizable themes, high contrast mode options, APCA (Advanced Perceptual Contrast Algorithm) emerging. Essential for inclusive design and WCAG compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://webaim.org/articles/contrast/"],[0,"https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html"],[0,"https://web.dev/color-and-contrast-accessibility/"],[0,"https://www.allaccessible.org/blog/color-contrast-accessibility-wcag-guide-2025"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-the-best-practices-for-accessible-color-design"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-the-best-practices-for-accessible-color-design" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-the-best-practices-for-accessible-color-design" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are the best practices for accessible color design?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Accessible color design requires contrast ratios and non-color indicators. WCAG 2.2 requirements: (1) Color contrast - 4.5:1 normal text, 3:1 large text, verified with WebAIM Contrast Checker, (2) Never rely on color alone for information - use icons, text labels, patterns as additional indicators, (3) Test in grayscale - ensure information remains clear without color, (4) Color blindness - avoid red/green combinations (8% of men affected), test with color blindness simulators. Implementation: Links need underlines or icons, not just color change. Error states: Use color + icon + text (not color alone). Success: Green checkmark + "Success" text. Tools: Adobe Color Accessibility, Chrome DevTools contrast check, grayscale CSS filter for testing. 2025 trends: Customizable themes, high contrast mode options, APCA (Advanced Perceptual Contrast Algorithm) emerging. Essential for inclusive design and WCAG compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://webaim.org/articles/contrast/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>webaim.org</a><a href="https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/color-and-contrast-accessibility/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://www.allaccessible.org/blog/color-contrast-accessibility-wcag-guide-2025" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>allaccessible.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="1lrVaB" prefix="r36" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6558"],"question":[0,"How do I implement accessible tables?"],"answer":[0,"Accessible tables use semantic HTML with proper header associations. Required structure: (1) <table> with <caption> describing table purpose, (2) <thead>, <tbody>, <tfoot> for organization, (3) <th> for headers with scope=\"col\" or scope=\"row\", (4) <td> for data cells. Simple table: <table><caption>Q4 Sales</caption><thead><tr><th scope=\"col\">Month</th><th scope=\"col\">Revenue</th></tr></thead><tbody><tr><th scope=\"row\">January</th><td>$50k</td></tr></tbody></table>. Complex tables: Use headers and id attributes for multi-level headers: <th id=\"q1-2025\" headers=\"2025\">Q1 2025</th>. 2025 requirements: Responsive mobile design (horizontal scroll or responsive patterns), keyboard navigation between cells, accessible sorting. Never use tables for layout - use CSS Grid/Flexbox. Test with screen reader (NVDA, JAWS) to verify logical reading order. Essential for data accessibility and WCAG compliance."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.w3.org/WAI/WCAG22/Techniques/html/H73"],[0,"https://web.dev/learn/html/tables/"],[0,"https://webaim.org/techniques/tables/"],[0,"https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"how-do-i-implement-accessible-tables"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="how-do-i-implement-accessible-tables" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#how-do-i-implement-accessible-tables" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">How do I implement accessible tables?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Accessible tables use semantic HTML with proper header associations. Required structure: (1) <table> with <caption> describing table purpose, (2) <thead>, <tbody>, <tfoot> for organization, (3) <th> for headers with scope="col" or scope="row", (4) <td> for data cells. Simple table: <table><caption>Q4 Sales</caption><thead><tr><th scope="col">Month</th><th scope="col">Revenue</th></tr></thead><tbody><tr><th scope="row">January</th><td>$50k</td></tr></tbody></table>. Complex tables: Use headers and id attributes for multi-level headers: <th id="q1-2025" headers="2025">Q1 2025</th>. 2025 requirements: Responsive mobile design (horizontal scroll or responsive patterns), keyboard navigation between cells, accessible sorting. Never use tables for layout - use CSS Grid/Flexbox. Test with screen reader (NVDA, JAWS) to verify logical reading order. Essential for data accessibility and WCAG compliance.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.w3.org/WAI/WCAG22/Techniques/html/H73" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://web.dev/learn/html/tables/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>web.dev</a><a href="https://webaim.org/techniques/tables/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>webaim.org</a><a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>developer.mozilla.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island><astro-island uid="Z1qd326" prefix="r37" component-url="/_astro/QACard.BmF4VKrW.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"id":[0,"6559"],"question":[0,"What are accessibility legal requirements in 2025?"],"answer":[0,"Digital accessibility is legally mandated worldwide in 2025. US: ADA (Americans with Disabilities Act) applies to websites - 4,605 lawsuits filed in 2024, targeting non-compliant sites. Section 508 mandatory for federal websites. EU: European Accessibility Act became enforceable June 28, 2025 - requires WCAG 2.1 AA compliance for digital products/services. Web Accessibility Directive for public sector. Other regions: Canada (Accessible Canada Act), Australia (Disability Discrimination Act). Standard: WCAG 2.2 Level AA now the legal baseline (referenced in lawsuits). Consequences: Fines ($50k-$100k+), mandatory remediation, legal costs, reputational damage. Benefits: 15% larger addressable market (people with disabilities), improved SEO, better UX for all users. Compliance essential for risk mitigation. Trend: Global convergence on WCAG 2.2 AA as minimum standard."],"confidence":[0,0.99],"sources":[1,[[0,"https://www.ada.gov/websites2/"],[0,"https://ec.europa.eu/growth/single-market/european-accessibility-act_en"],[0,"https://www.w3.org/WAI/policies/"],[0,"https://www.allaccessible.org/blog/implementing-aria-labels-for-web-accessibility"]]],"topic":[0,"web_design_ux_2025"],"slug":[0,"what-are-accessibility-legal-requirements-in-2025"]}" ssr="" client="visible" opts="{"name":"QACard","value":true}" await-children=""><article id="what-are-accessibility-legal-requirements-in-2025" class="scroll-mt-20 bg-white border border-gray-200 rounded-xl mb-4 hover:border-gray-300 transition-colors"><div class="p-5 border-b border-gray-100"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-amber-500 text-white text-xs font-bold rounded flex-shrink-0">Q</span><div class="flex-1"><a href="#what-are-accessibility-legal-requirements-in-2025" class="text-lg font-medium text-gray-900 hover:text-amber-600 transition-colors">What are accessibility legal requirements in 2025?</a></div><div class="flex items-center gap-2 flex-shrink-0"><button class="p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors" title="Copy link to this Q&A"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"></path></svg></button></div></div></div><div class="p-5"><div class="flex items-start gap-3"><span class="px-2.5 py-1 bg-gray-900 text-white text-xs font-bold rounded flex-shrink-0">A</span><div class="flex-1 min-w-0"><div class="prose prose-sm max-w-none prose-p:my-2 prose-code:bg-gray-100 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-gray-800 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-gray-900 prose-pre:text-gray-100"><p>Digital accessibility is legally mandated worldwide in 2025. US: ADA (Americans with Disabilities Act) applies to websites - 4,605 lawsuits filed in 2024, targeting non-compliant sites. Section 508 mandatory for federal websites. EU: European Accessibility Act became enforceable June 28, 2025 - requires WCAG 2.1 AA compliance for digital products/services. Web Accessibility Directive for public sector. Other regions: Canada (Accessible Canada Act), Australia (Disability Discrimination Act). Standard: WCAG 2.2 Level AA now the legal baseline (referenced in lawsuits). Consequences: Fines ($50k-$100k+), mandatory remediation, legal costs, reputational damage. Benefits: 15% larger addressable market (people with disabilities), improved SEO, better UX for all users. Compliance essential for risk mitigation. Trend: Global convergence on WCAG 2.2 AA as minimum standard.</p> </div><div class="mt-4 pt-3 border-t border-gray-100"><span class="text-xs font-medium text-gray-500 uppercase tracking-wide">Sources</span><div class="mt-1.5 flex flex-wrap gap-2"><a href="https://www.ada.gov/websites2/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>ada.gov</a><a href="https://ec.europa.eu/growth/single-market/european-accessibility-act_en" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>ec.europa.eu</a><a href="https://www.w3.org/WAI/policies/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>w3.org</a><a href="https://www.allaccessible.org/blog/implementing-aria-labels-for-web-accessibility" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 px-2 py-1 text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 hover:text-gray-800 rounded transition-colors"><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg>allaccessible.org</a></div></div><div class="mt-4 flex items-center justify-between flex-wrap gap-2"><span class="text-sm text-amber-600 font-medium">99% confidence</span><button class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg transition-colors"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg>Copy Answer</button></div></div></div></div></article><!--astro:end--></astro-island> </div> </section> </div> <div class="mt-16 text-center"> <a href="/kb" class="btn btn-primary inline-flex items-center gap-2"> <svg class="w-5 h-5 rotate-180" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path> </svg> Browse All Topics </a> </div> </main> </div> </div> </section> <script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><astro-island uid="22C7GK" prefix="r38" component-url="/_astro/BackToTop.Dfk0RXfA.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{}" ssr="" client="load" opts="{"name":"BackToTop","value":true}"></astro-island> </main> <footer class="relative bg-gray-900 text-white mt-auto border-t-2 border-amber-500 overflow-hidden"> <!-- Subtle decorative gradient --> <div class="absolute top-0 right-0 w-96 h-96 bg-amber-500/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2"></div> <div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 md:py-16"> <!-- Main Grid: Brand left, Links right --> <div class="grid grid-cols-1 lg:grid-cols-12 gap-10 lg:gap-12"> <!-- Brand Column --> <div class="lg:col-span-4"> <a href="/" class="inline-flex items-center gap-3 mb-4 group no-underline"> <img src="/logo-footer.svg" alt="AgentsKB" class="h-8 w-auto"> <span class="text-xl font-bold text-white transition-colors group-hover:text-amber-500">AgentsKB</span> </a> <p class="text-gray-400 text-sm leading-relaxed mb-6 max-w-xs"> Give your AI expert-level knowledge. Researched answers to any problem. </p> <!-- Stats badges --> <div class="flex flex-wrap gap-3"> <span class="inline-flex items-center gap-1.5 px-3 py-1.5 bg-gray-800 rounded-full text-xs text-gray-300 border border-gray-700"> <span class="w-1.5 h-1.5 bg-amber-500 rounded-full"></span> 26,841+ Q&As </span> <span class="inline-flex items-center gap-1.5 px-3 py-1.5 bg-gray-800 rounded-full text-xs text-gray-300 border border-gray-700"> <span class="w-1.5 h-1.5 bg-amber-500 rounded-full"></span> 0 domains </span> </div> </div> <!-- Links Grid: 2x2 on mobile, 3 cols on desktop --> <div class="lg:col-span-8 grid grid-cols-2 sm:grid-cols-3 gap-8"> <!-- Product --> <div> <h4 class="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-4">Product</h4> <ul class="space-y-2.5"> <li> <a href="/features" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Features </a> </li> <li> <a href="/kb" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Knowledge Base </a> </li> <li> <a href="/pricing" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Pricing </a> </li> <li> <a href="/comparison" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> AI Comparison </a> </li> </ul> </div> <!-- Developers --> <div> <h4 class="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-4">Developers</h4> <ul class="space-y-2.5"> <li> <a href="/docs" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Documentation </a> </li> <li> <a href="/playground" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Playground </a> </li> <li> <a href="https://github.com/Cranot/agentskb-mcp" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> GitHub <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li> <li> <a href="/status" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> System Status </a> </li> </ul> </div> <!-- Company --> <div class="col-span-2 sm:col-span-1"> <h4 class="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-4">Company</h4> <ul class="space-y-2.5"> <li> <a href="/about" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> About Us </a> </li> <li> <a href="/changelog" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Changelog </a> </li> <li> <a href="https://modelcontextprotocol.io" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> About MCP <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li> <li> <astro-island uid="2b4fuQ" prefix="r39" component-url="/_astro/ObfuscatedEmail.CR8ZgwAp.js" component-export="default" renderer-url="/_astro/client.BuOr9PT5.js" props="{"className":[0,"text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"]}" ssr="" client="load" opts="{"name":"ObfuscatedEmail","value":true}" await-children=""><span class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"><span class="text-gray-400">Loading...</span></span><!--astro:end--></astro-island> </li> <li> <a href="/legal/privacy" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Privacy Policy </a> </li> <li> <a href="/legal/terms" class="text-sm text-gray-400 hover:text-amber-500 transition-colors no-underline"> Terms of Service </a> </li> </ul> </div> </div> </div> <!-- Bottom Bar --> <div class="mt-12 pt-8 border-t border-gray-800"> <div class="flex flex-col sm:flex-row items-center justify-between gap-4"> <p class="text-sm text-gray-500"> © 2025 AgentsKB. All rights reserved. </p> <div class="flex items-center gap-4"> <a href="https://github.com/Cranot/agentskb-mcp" target="_blank" rel="noopener noreferrer" class="text-gray-500 hover:text-white transition-colors no-underline" aria-label="GitHub"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd"></path> </svg> </a> </div> </div> </div> </div> </footer> </body></html>