# 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 ``` **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