810ee7955b
**Issue 1: URL corruption in "See this CV in..." links**
- Bug: replaceYearPlaceholder used fmt.Sprintf on ALL URLs
- URLs like "/?lang=es" were corrupted to "/?lang=es%!(EXTRA string=2025)"
- Fix: Changed to strings.ReplaceAll("{{YEAR}}", year)
- Result: Only replaces actual {{YEAR}} placeholders, leaves other URLs intact
**Issue 2: Download filename not respected**
- Bug: Shortcut URLs (cv-jamr-2025-en.pdf) redirected with HTTP 301
- Browsers used original URL filename instead of Content-Disposition header
- Fix: Generate PDF directly in DefaultCVShortcut handler
- Result: Returns PDF with correct filename in Content-Disposition header
Files changed:
- internal/models/cv.go: Fixed replaceYearPlaceholder function
- internal/handlers/cv.go: Changed redirect to direct PDF generation
Both fixes verified:
- "See this CV in Spanish" link: href="/?lang=es" ✓
- Download link: filename=cv-jamr-2025-en.pdf ✓
45 lines
1.4 KiB
CSS
45 lines
1.4 KiB
CSS
/* ============================================================================
|
|
MAIN.CSS - Entry Point (New Modular Structure)
|
|
============================================================================ */
|
|
|
|
/* 01 - Foundation */
|
|
@import './01-foundation/_reset.css';
|
|
@import './01-foundation/_variables.css';
|
|
@import './01-foundation/_typography.css';
|
|
@import './01-foundation/_themes.css';
|
|
|
|
/* 02 - Layout */
|
|
@import './02-layout/_container.css';
|
|
@import './02-layout/_page.css';
|
|
@import './02-layout/_grid.css';
|
|
@import './02-layout/_paper.css';
|
|
|
|
/* 03 - Components */
|
|
@import './03-components/_action-bar.css';
|
|
@import './03-components/_sidebar.css';
|
|
@import './03-components/_cv-header.css';
|
|
@import './03-components/_cv-section.css';
|
|
@import './03-components/_experience.css';
|
|
@import './03-components/_projects.css';
|
|
@import './03-components/_courses.css';
|
|
@import './03-components/_education.css';
|
|
@import './03-components/_languages.css';
|
|
|
|
/* 04 - Interactive */
|
|
@import './04-interactive/_toggles.css';
|
|
@import './04-interactive/_navigation.css';
|
|
@import './04-interactive/_scroll-behavior.css';
|
|
@import './04-interactive/_buttons.css';
|
|
@import './04-interactive/_modals.css';
|
|
@import './04-interactive/_toasts.css';
|
|
@import './04-interactive/_zoom-control.css';
|
|
|
|
/* 05 - Responsive */
|
|
@import './05-responsive/_breakpoints.css';
|
|
|
|
/* 06 - Effects */
|
|
@import './06-effects/_skeleton.css';
|
|
|
|
/* 08 - Contexts */
|
|
@import './08-contexts/_print.css';
|