634 lines
15 KiB
Markdown
634 lines
15 KiB
Markdown
|
|
# User Guide - CV Website Features
|
||
|
|
|
||
|
|
This guide provides comprehensive documentation for all interactive features of the CV website.
|
||
|
|
|
||
|
|
## Table of Contents
|
||
|
|
|
||
|
|
- [Zoom Feature](#zoom-feature)
|
||
|
|
- [Language Switching](#language-switching)
|
||
|
|
- [CV Customization](#cv-customization)
|
||
|
|
- [PDF Export](#pdf-export)
|
||
|
|
- [Navigation](#navigation)
|
||
|
|
- [Accessibility](#accessibility)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Zoom Feature
|
||
|
|
|
||
|
|
The CV includes an intelligent zoom control for comfortable viewing at any size.
|
||
|
|
|
||
|
|
### Overview
|
||
|
|
|
||
|
|
The zoom feature allows you to adjust the CV display size from 25% (bird's-eye view) to 175% (enhanced readability) while keeping navigation controls at a consistent, accessible size.
|
||
|
|
|
||
|
|
### How to Use
|
||
|
|
|
||
|
|
#### Visual Control
|
||
|
|
|
||
|
|
The zoom control appears as a draggable widget near the bottom of the screen (desktop only).
|
||
|
|
|
||
|
|
**Components:**
|
||
|
|
- **Slider**: Drag anywhere between 25% and 175% zoom
|
||
|
|
- **Min/Max Labels**: Show the range (25% and 175%)
|
||
|
|
- **Reset Button**: Circular button showing current zoom percentage
|
||
|
|
- **Close Button**: Small X button (top-right corner) to hide the control
|
||
|
|
|
||
|
|
**Interaction:**
|
||
|
|
1. **Adjust Zoom**: Click and drag the slider to your preferred zoom level
|
||
|
|
2. **Reset to Default**: Click the circular button (shows current %) to return to 100%
|
||
|
|
3. **Reposition Control**: Click and drag the control itself (not the slider/buttons) to move it anywhere on screen
|
||
|
|
4. **Hide Control**: Click the X button to hide the control
|
||
|
|
5. **Show Control**: Access from hamburger menu (☰) → Select "Zoom"
|
||
|
|
|
||
|
|
#### Keyboard Shortcuts
|
||
|
|
|
||
|
|
The zoom feature supports standard browser-style keyboard shortcuts:
|
||
|
|
|
||
|
|
| Shortcut | Action | Increment |
|
||
|
|
|----------|--------|-----------|
|
||
|
|
| `Ctrl/Cmd + Plus (+)` | Zoom In | +10% |
|
||
|
|
| `Ctrl/Cmd + Minus (-)` | Zoom Out | -10% |
|
||
|
|
| `Ctrl/Cmd + 0` | Reset to Default | 100% |
|
||
|
|
|
||
|
|
**Note**: These shortcuts work regardless of whether the zoom control is visible.
|
||
|
|
|
||
|
|
#### Menu Access
|
||
|
|
|
||
|
|
1. Click the **hamburger menu (☰)** in the top-left corner
|
||
|
|
2. Hover or click **"Zoom"** menu item
|
||
|
|
3. The zoom control will appear
|
||
|
|
4. Use the control as described above
|
||
|
|
|
||
|
|
### What Zooms vs. What Stays Fixed
|
||
|
|
|
||
|
|
#### Elements That Zoom (Content)
|
||
|
|
|
||
|
|
The following elements scale according to the zoom level:
|
||
|
|
- All CV content (text, headings, paragraphs)
|
||
|
|
- Images and icons within the CV
|
||
|
|
- CV paper and layout structure
|
||
|
|
- Section spacing and margins
|
||
|
|
- All typography and line heights
|
||
|
|
|
||
|
|
**Behavior at >100% zoom:**
|
||
|
|
- Content extends beyond viewport width
|
||
|
|
- Horizontal scrollbar appears
|
||
|
|
- Natural overflow allows full-size viewing
|
||
|
|
- Matches browser zoom behavior
|
||
|
|
|
||
|
|
#### Elements That Stay Fixed (UI Controls)
|
||
|
|
|
||
|
|
The following elements maintain consistent size regardless of zoom:
|
||
|
|
- **Action Bar**: Top black bar with all buttons
|
||
|
|
- **Hamburger Menu**: Navigation menu and all menu items
|
||
|
|
- **Zoom Control**: The zoom widget itself
|
||
|
|
- **Back-to-Top Button**: Bottom-right corner button
|
||
|
|
- **Info Button**: Information modal trigger
|
||
|
|
- **Footer**: Bottom footer remains at normal size
|
||
|
|
|
||
|
|
**Why fixed UI?**
|
||
|
|
- **Accessibility**: Controls stay at standard touch target size (44x44px)
|
||
|
|
- **Usability**: Buttons never become too large or too small
|
||
|
|
- **Consistency**: Predictable interaction at any zoom level
|
||
|
|
- **Navigation**: Always accessible regardless of content zoom state
|
||
|
|
|
||
|
|
### Design Rationale
|
||
|
|
|
||
|
|
#### Zoom Range: 25-175%
|
||
|
|
|
||
|
|
**25% - Bird's Eye View:**
|
||
|
|
- See entire CV structure at once
|
||
|
|
- Great for navigation and overview
|
||
|
|
- Check layout balance and spacing
|
||
|
|
- Quick section location
|
||
|
|
- Ideal for presentations or large screens
|
||
|
|
|
||
|
|
**100% - Optimal Reading:**
|
||
|
|
- Default and recommended setting
|
||
|
|
- Calibrated for comfortable reading
|
||
|
|
- Optimal font rendering and line length
|
||
|
|
- Balanced for most screen sizes
|
||
|
|
- Professional presentation view
|
||
|
|
|
||
|
|
**175% - Enhanced Readability:**
|
||
|
|
- Enhanced readability for detailed review
|
||
|
|
- Accessibility support for vision needs
|
||
|
|
- Close inspection of specific content
|
||
|
|
- Better for small or high-DPI screens
|
||
|
|
- Reduced eye strain for long reading sessions
|
||
|
|
|
||
|
|
#### Fixed UI Elements (Inverse Zoom Technique)
|
||
|
|
|
||
|
|
**Technical Implementation:**
|
||
|
|
Fixed buttons use `zoom: 1/zoomLevel` to counteract content zoom.
|
||
|
|
|
||
|
|
**Example:**
|
||
|
|
- Content zoom: 150% (`zoom: 1.5`)
|
||
|
|
- Button inverse: 67% (`zoom: 0.67`)
|
||
|
|
- Result: Button stays at original size
|
||
|
|
|
||
|
|
**Benefits:**
|
||
|
|
- Buttons remain at accessibility-compliant size (44x44px)
|
||
|
|
- Prevents unusably large buttons at 175% zoom
|
||
|
|
- Prevents unusably small buttons at 25% zoom
|
||
|
|
- Maintains muscle memory for button positions
|
||
|
|
- Consistent visual hierarchy
|
||
|
|
|
||
|
|
#### Horizontal Scroll Behavior
|
||
|
|
|
||
|
|
**Why horizontal scroll appears:**
|
||
|
|
- Content naturally extends beyond viewport at >100% zoom
|
||
|
|
- Allows viewing full-size content without compression
|
||
|
|
- Matches expected browser zoom behavior
|
||
|
|
- Prevents text reflow issues
|
||
|
|
- Maintains layout integrity
|
||
|
|
|
||
|
|
**User Experience:**
|
||
|
|
- Smooth scrolling on all devices
|
||
|
|
- Keyboard navigation supported (arrow keys)
|
||
|
|
- Mouse wheel scrolling (shift + wheel)
|
||
|
|
- Trackpad gestures work naturally
|
||
|
|
- Does not interfere with vertical scrolling
|
||
|
|
|
||
|
|
### Optimal Viewing Tips
|
||
|
|
|
||
|
|
#### Quick Overview (25-75% Zoom)
|
||
|
|
|
||
|
|
**Best For:**
|
||
|
|
- Getting familiar with CV structure
|
||
|
|
- Locating specific sections quickly
|
||
|
|
- Checking overall layout balance
|
||
|
|
- Comparing multiple sections
|
||
|
|
- Presentation mode on large screens
|
||
|
|
|
||
|
|
**Recommended Settings:**
|
||
|
|
- Zoom: 50-75%
|
||
|
|
- View: Full screen
|
||
|
|
- Navigation: Use section links
|
||
|
|
|
||
|
|
#### Comfortable Reading (100% Zoom)
|
||
|
|
|
||
|
|
**Best For:**
|
||
|
|
- Primary reading experience
|
||
|
|
- Professional presentation
|
||
|
|
- Standard review and evaluation
|
||
|
|
- Sharing with others
|
||
|
|
- PDF export preparation
|
||
|
|
|
||
|
|
**Recommended Settings:**
|
||
|
|
- Zoom: 100% (default)
|
||
|
|
- View: Full screen or windowed
|
||
|
|
- Font rendering: Optimal
|
||
|
|
|
||
|
|
#### Detailed Review (125-175% Zoom)
|
||
|
|
|
||
|
|
**Best For:**
|
||
|
|
- Enhanced readability needs
|
||
|
|
- Close inspection of content
|
||
|
|
- Accessibility requirements
|
||
|
|
- Small screen viewing
|
||
|
|
- Detailed proofreading
|
||
|
|
|
||
|
|
**Recommended Settings:**
|
||
|
|
- Zoom: 125-150%
|
||
|
|
- Use horizontal scroll to navigate
|
||
|
|
- Focus on one section at a time
|
||
|
|
- Combine with section navigation
|
||
|
|
|
||
|
|
### Persistence and Storage
|
||
|
|
|
||
|
|
**Automatic Save:**
|
||
|
|
- Your zoom level is automatically saved to browser's localStorage
|
||
|
|
- Returns to your preferred zoom when you revisit
|
||
|
|
- No manual save required
|
||
|
|
|
||
|
|
**Per-Device Storage:**
|
||
|
|
- Each device/browser remembers its own zoom preference
|
||
|
|
- Desktop and mobile can have different settings
|
||
|
|
- Private/Incognito mode does not persist zoom
|
||
|
|
|
||
|
|
**Storage Keys:**
|
||
|
|
- `cv-zoom`: Current zoom percentage (25-175)
|
||
|
|
- `cv-zoom-position`: Custom position if dragged
|
||
|
|
- `cv-zoom-visible`: Whether control is shown/hidden
|
||
|
|
|
||
|
|
**Clear Storage:**
|
||
|
|
To reset zoom preferences:
|
||
|
|
1. Browser DevTools → Application → Local Storage
|
||
|
|
2. Find keys starting with `cv-zoom`
|
||
|
|
3. Delete to reset to defaults
|
||
|
|
|
||
|
|
### Mobile Behavior
|
||
|
|
|
||
|
|
**Automatic Handling:**
|
||
|
|
- Zoom control is **hidden on mobile devices** (screens ≤768px)
|
||
|
|
- Mobile browsers have native pinch-to-zoom
|
||
|
|
- Native zoom works better on small screens
|
||
|
|
- Touch gestures are more intuitive on mobile
|
||
|
|
|
||
|
|
**Why hidden on mobile?**
|
||
|
|
- Limited screen space for controls
|
||
|
|
- Native pinch-to-zoom is superior
|
||
|
|
- Touch targets would be too small
|
||
|
|
- Desktop-oriented feature
|
||
|
|
- Mobile viewport already optimized
|
||
|
|
|
||
|
|
**Mobile Alternatives:**
|
||
|
|
- Use browser's native pinch-to-zoom
|
||
|
|
- Double-tap to zoom sections
|
||
|
|
- Use browser zoom in/out buttons
|
||
|
|
|
||
|
|
### Accessibility Features
|
||
|
|
|
||
|
|
#### Keyboard Support
|
||
|
|
|
||
|
|
**Full Keyboard Navigation:**
|
||
|
|
- `Tab`: Navigate to zoom control
|
||
|
|
- `Space`/`Enter`: Activate reset button
|
||
|
|
- `Arrow Keys`: Adjust slider (when focused)
|
||
|
|
- `Ctrl/Cmd + Plus/Minus/0`: Global shortcuts
|
||
|
|
- `Esc`: Close menu/modals
|
||
|
|
|
||
|
|
#### Screen Reader Support
|
||
|
|
|
||
|
|
**ARIA Attributes:**
|
||
|
|
```html
|
||
|
|
<input
|
||
|
|
type="range"
|
||
|
|
aria-label="Adjust CV zoom level"
|
||
|
|
aria-valuemin="25"
|
||
|
|
aria-valuemax="175"
|
||
|
|
aria-valuenow="100"
|
||
|
|
aria-valuetext="100%"
|
||
|
|
>
|
||
|
|
```
|
||
|
|
|
||
|
|
**Announcements:**
|
||
|
|
- Current zoom level announced on change
|
||
|
|
- Reset button announces "Reset zoom to 100%"
|
||
|
|
- Slider range clearly communicated
|
||
|
|
- Interactive elements properly labeled
|
||
|
|
|
||
|
|
#### Visual Accessibility
|
||
|
|
|
||
|
|
**High Contrast:**
|
||
|
|
- Slider track: Clear contrast ratio
|
||
|
|
- Button borders: Visible in all modes
|
||
|
|
- Text labels: White on semi-transparent background
|
||
|
|
- Focus indicators: 2px white outline
|
||
|
|
|
||
|
|
**Focus Indicators:**
|
||
|
|
- All interactive elements have visible focus
|
||
|
|
- Keyboard navigation clearly indicated
|
||
|
|
- Tab order follows logical flow
|
||
|
|
|
||
|
|
**Touch Targets:**
|
||
|
|
- All buttons meet 44x44px minimum
|
||
|
|
- Slider thumb: 18px diameter
|
||
|
|
- Close button: 24px diameter
|
||
|
|
- Reset button: 44px diameter
|
||
|
|
|
||
|
|
### Troubleshooting
|
||
|
|
|
||
|
|
#### Zoom Not Working
|
||
|
|
|
||
|
|
**Symptoms:**
|
||
|
|
- Slider moves but nothing happens
|
||
|
|
- Keyboard shortcuts don't work
|
||
|
|
- Page doesn't zoom
|
||
|
|
|
||
|
|
**Solutions:**
|
||
|
|
1. Check browser console for JavaScript errors
|
||
|
|
2. Ensure JavaScript is enabled
|
||
|
|
3. Try hard refresh: `Ctrl/Cmd + Shift + R`
|
||
|
|
4. Clear browser cache and reload
|
||
|
|
5. Check if browser zoom is interfering (reset to 100%)
|
||
|
|
|
||
|
|
#### Zoom Control Not Visible
|
||
|
|
|
||
|
|
**Symptoms:**
|
||
|
|
- Can't find zoom control on page
|
||
|
|
- Control disappeared
|
||
|
|
|
||
|
|
**Solutions:**
|
||
|
|
1. Check if you're on mobile (control hidden <768px)
|
||
|
|
2. Open hamburger menu → Click "Zoom" to show
|
||
|
|
3. Check localStorage: `cv-zoom-visible` should be `true`
|
||
|
|
4. Control may be positioned off-screen (drag from edge)
|
||
|
|
5. Refresh page to reset position
|
||
|
|
|
||
|
|
#### Zoom Resets on Refresh
|
||
|
|
|
||
|
|
**Symptoms:**
|
||
|
|
- Zoom goes back to 100% every time
|
||
|
|
- Preference not saving
|
||
|
|
|
||
|
|
**Solutions:**
|
||
|
|
1. Check if localStorage is enabled in browser
|
||
|
|
2. Ensure you're not in Private/Incognito mode
|
||
|
|
3. Check browser privacy settings
|
||
|
|
4. Try a different browser to isolate issue
|
||
|
|
|
||
|
|
#### Horizontal Scroll Issues
|
||
|
|
|
||
|
|
**Symptoms:**
|
||
|
|
- Can't scroll horizontally when zoomed
|
||
|
|
- Content cut off at edges
|
||
|
|
|
||
|
|
**Solutions:**
|
||
|
|
1. Ensure body overflow-x is set to auto
|
||
|
|
2. Try Shift + Mouse Wheel for horizontal scroll
|
||
|
|
3. Use keyboard arrow keys
|
||
|
|
4. Check if browser extensions are interfering
|
||
|
|
|
||
|
|
#### Fixed Buttons Look Wrong
|
||
|
|
|
||
|
|
**Symptoms:**
|
||
|
|
- Buttons too large or too small
|
||
|
|
- Buttons scaling with content
|
||
|
|
|
||
|
|
**Solutions:**
|
||
|
|
1. Check if CSS zoom property is supported
|
||
|
|
2. Verify browser compatibility (all modern browsers)
|
||
|
|
3. Check for conflicting CSS from extensions
|
||
|
|
4. Try disabling browser themes/extensions
|
||
|
|
|
||
|
|
### Technical Details
|
||
|
|
|
||
|
|
#### Implementation
|
||
|
|
|
||
|
|
**CSS Zoom Property:**
|
||
|
|
```css
|
||
|
|
.zoom-wrapper {
|
||
|
|
zoom: 1.25; /* 125% zoom example */
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Inverse Zoom for Fixed Elements:**
|
||
|
|
```css
|
||
|
|
.fixed-button {
|
||
|
|
zoom: 0.8; /* 1/1.25 = 0.8 to counteract 125% */
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Horizontal Overflow:**
|
||
|
|
```css
|
||
|
|
body {
|
||
|
|
overflow-x: auto; /* Allow horizontal scroll */
|
||
|
|
}
|
||
|
|
|
||
|
|
.zoom-wrapper {
|
||
|
|
min-width: 100vw; /* When zoomed > 100% */
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### JavaScript API
|
||
|
|
|
||
|
|
**Key Functions:**
|
||
|
|
```javascript
|
||
|
|
// Apply zoom level
|
||
|
|
applyZoom(zoomValue, saveToStorage)
|
||
|
|
|
||
|
|
// Increment/decrement zoom
|
||
|
|
incrementZoom(step)
|
||
|
|
|
||
|
|
// Update display
|
||
|
|
updateZoomDisplay(zoomValue)
|
||
|
|
|
||
|
|
// Check mobile view
|
||
|
|
isMobileView()
|
||
|
|
```
|
||
|
|
|
||
|
|
**Event Listeners:**
|
||
|
|
- `input`: Real-time slider updates
|
||
|
|
- `click`: Reset button handler
|
||
|
|
- `keydown`: Global keyboard shortcuts
|
||
|
|
- `resize`: Handle viewport changes
|
||
|
|
|
||
|
|
#### Browser Compatibility
|
||
|
|
|
||
|
|
**Supported Browsers:**
|
||
|
|
- Chrome/Edge 90+ (Full support)
|
||
|
|
- Firefox 90+ (Full support)
|
||
|
|
- Safari 13+ (Full support)
|
||
|
|
- Opera 76+ (Full support)
|
||
|
|
|
||
|
|
**CSS Zoom Support:**
|
||
|
|
- Webkit/Blink: Native support
|
||
|
|
- Firefox: Supported since Firefox 90
|
||
|
|
- All modern browsers support CSS zoom
|
||
|
|
|
||
|
|
**Fallback:**
|
||
|
|
- No fallback needed (all modern browsers)
|
||
|
|
- For older browsers, zoom would simply not work
|
||
|
|
- Page remains fully functional without zoom
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Language Switching
|
||
|
|
|
||
|
|
The CV supports instant language switching between English and Spanish without page reload.
|
||
|
|
|
||
|
|
### How to Use
|
||
|
|
|
||
|
|
**From Action Bar:**
|
||
|
|
1. Click language flag icon in top bar
|
||
|
|
2. Select English or Spanish
|
||
|
|
3. Content swaps instantly via HTMX
|
||
|
|
|
||
|
|
**From Menu:**
|
||
|
|
1. Open hamburger menu (☰)
|
||
|
|
2. Hover over "Language" item
|
||
|
|
3. Select preferred language
|
||
|
|
|
||
|
|
**Via URL:**
|
||
|
|
- English: `?lang=en`
|
||
|
|
- Spanish: `?lang=es`
|
||
|
|
|
||
|
|
**Persistence:**
|
||
|
|
- Language preference saved to localStorage
|
||
|
|
- Returns to your preferred language on next visit
|
||
|
|
- Works across all pages
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## CV Customization
|
||
|
|
|
||
|
|
### CV Length Toggle
|
||
|
|
|
||
|
|
**Short Version:**
|
||
|
|
- Concise overview
|
||
|
|
- Key highlights only
|
||
|
|
- 1-2 pages when printed
|
||
|
|
- Quick review
|
||
|
|
|
||
|
|
**Long Version:**
|
||
|
|
- Complete details
|
||
|
|
- Full project descriptions
|
||
|
|
- Comprehensive experience
|
||
|
|
- In-depth review
|
||
|
|
|
||
|
|
**Toggle:**
|
||
|
|
1. Action bar toggle switch
|
||
|
|
2. Hamburger menu → "Long Version"
|
||
|
|
3. Preference persisted to localStorage
|
||
|
|
|
||
|
|
### Logo Visibility
|
||
|
|
|
||
|
|
**Show Logos:**
|
||
|
|
- Company and technology logos visible
|
||
|
|
- Visual brand recognition
|
||
|
|
- More engaging presentation
|
||
|
|
|
||
|
|
**Hide Logos:**
|
||
|
|
- Text-only presentation
|
||
|
|
- Cleaner, more formal look
|
||
|
|
- Better for print
|
||
|
|
|
||
|
|
**Toggle:**
|
||
|
|
1. Action bar toggle switch
|
||
|
|
2. Hamburger menu → "Show Logos"
|
||
|
|
3. Preference persisted to localStorage
|
||
|
|
|
||
|
|
### Theme Switching
|
||
|
|
|
||
|
|
**Default Theme:**
|
||
|
|
- Gray background with paper texture
|
||
|
|
- Sidebars with contact info
|
||
|
|
- Header and footer visible
|
||
|
|
- Full visual design
|
||
|
|
|
||
|
|
**Clean Theme:**
|
||
|
|
- White background
|
||
|
|
- No sidebars
|
||
|
|
- Minimal chrome
|
||
|
|
- Print-optimized
|
||
|
|
|
||
|
|
**Toggle:**
|
||
|
|
1. Action bar toggle switch
|
||
|
|
2. Hamburger menu → "Clean Theme"
|
||
|
|
3. Preference persisted to localStorage
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## PDF Export
|
||
|
|
|
||
|
|
### Server-Side Generation
|
||
|
|
|
||
|
|
**Recommended Method:**
|
||
|
|
1. Click "Download as PDF" in action bar
|
||
|
|
2. Server generates PDF using headless Chrome
|
||
|
|
3. File downloads automatically
|
||
|
|
4. Filename: `CV-Juan-Andres-Moreno-Rubio-{lang}.pdf`
|
||
|
|
|
||
|
|
**Advantages:**
|
||
|
|
- Consistent rendering across platforms
|
||
|
|
- Perfect font rendering
|
||
|
|
- No browser compatibility issues
|
||
|
|
- Professional quality output
|
||
|
|
|
||
|
|
### Browser Print
|
||
|
|
|
||
|
|
**Alternative Method:**
|
||
|
|
1. Click "Print Friendly" in action bar
|
||
|
|
2. Browser print dialog opens
|
||
|
|
3. Select "Save as PDF"
|
||
|
|
4. Configure print settings
|
||
|
|
|
||
|
|
**Settings:**
|
||
|
|
- Switches to clean theme
|
||
|
|
- Forces short version
|
||
|
|
- Removes interactive elements
|
||
|
|
- Optimized for printing
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Navigation
|
||
|
|
|
||
|
|
### Section Navigation
|
||
|
|
|
||
|
|
**Table of Contents:**
|
||
|
|
- Auto-generated from CV sections
|
||
|
|
- Click any section to scroll smoothly
|
||
|
|
- Header stays visible during navigation
|
||
|
|
|
||
|
|
**Hamburger Menu:**
|
||
|
|
- Mobile-friendly navigation
|
||
|
|
- Hover to open on desktop
|
||
|
|
- Click to open on mobile
|
||
|
|
- Automatic closing after selection
|
||
|
|
|
||
|
|
**Back to Top:**
|
||
|
|
- Appears after scrolling 300px
|
||
|
|
- Smooth scroll to top
|
||
|
|
- Always accessible
|
||
|
|
- Bottom-right position
|
||
|
|
|
||
|
|
### Collapsible Sections
|
||
|
|
|
||
|
|
**Details/Summary:**
|
||
|
|
- Click section headers to expand/collapse
|
||
|
|
- Mobile accordion style
|
||
|
|
- Desktop always expanded
|
||
|
|
|
||
|
|
**Expand/Collapse All:**
|
||
|
|
- Action bar buttons
|
||
|
|
- Hamburger menu options
|
||
|
|
- Affects all collapsible sections
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Accessibility
|
||
|
|
|
||
|
|
### Keyboard Navigation
|
||
|
|
|
||
|
|
**Tab Order:**
|
||
|
|
- Logical flow through all interactive elements
|
||
|
|
- Visible focus indicators
|
||
|
|
- Skip links for main content
|
||
|
|
- All features accessible via keyboard
|
||
|
|
|
||
|
|
### Screen Readers
|
||
|
|
|
||
|
|
**ARIA Labels:**
|
||
|
|
- All interactive elements labeled
|
||
|
|
- Form controls properly described
|
||
|
|
- Dynamic content announcements
|
||
|
|
- Semantic HTML structure
|
||
|
|
|
||
|
|
### Visual Accessibility
|
||
|
|
|
||
|
|
**Color Contrast:**
|
||
|
|
- WCAG AA compliant
|
||
|
|
- High contrast mode support
|
||
|
|
- Focus indicators visible
|
||
|
|
|
||
|
|
**Font Scaling:**
|
||
|
|
- Responsive typography
|
||
|
|
- Works with browser zoom
|
||
|
|
- Readable at all sizes
|
||
|
|
|
||
|
|
**Motion Preferences:**
|
||
|
|
- Respects prefers-reduced-motion
|
||
|
|
- Smooth scrolling optional
|
||
|
|
- Animations can be disabled
|
||
|
|
|
||
|
|
### Touch Targets
|
||
|
|
|
||
|
|
**Minimum Sizes:**
|
||
|
|
- All buttons: 44x44px
|
||
|
|
- Touch-friendly spacing
|
||
|
|
- No overlapping targets
|
||
|
|
- Adequate margins
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
For issues, questions, or feedback:
|
||
|
|
- GitHub Issues: https://github.com/txemac/cv/issues
|
||
|
|
- Documentation: See /doc folder
|
||
|
|
- Live Demo: https://juan.andres.morenorub.io/
|
||
|
|
|
||
|
|
**Last Updated:** 2025-11-12
|