package email // CVEmailTheme provides a custom Hermes theme matching the CV's aesthetic // Features: // - Clean, minimal design with professional typography // - Green accent color (#27ae60) matching CV highlights // - Bracket aesthetic { } for headers // - Responsive layout for all devices // - Dark mode support via @media queries // CVThemeCSS returns the CSS for the CV email theme func CVThemeCSS() string { return ` /* CV Email Theme - Responsive & Clean */ /* Reset and Base */ body, html { margin: 0; padding: 0; width: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Quicksand', Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333333; background-color: #f5f5f5; } /* Container */ .email-container { max-width: 600px; margin: 0 auto; padding: 20px; } .email-wrapper { background-color: #ffffff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); overflow: hidden; } /* Header */ .email-header { background: linear-gradient(135deg, #2b2b2b 0%, #1a1a1a 100%); padding: 30px 40px; text-align: center; } .email-logo { color: #ffffff; font-size: 24px; font-weight: 700; letter-spacing: -0.5px; margin: 0; } .email-logo .bracket { color: #27ae60; font-weight: 700; } /* Body */ .email-body { padding: 40px; } .email-greeting { font-size: 20px; font-weight: 600; color: #1a1a1a; margin-bottom: 20px; } .email-intro { font-size: 16px; color: #444444; margin-bottom: 30px; line-height: 1.7; } /* Content Card */ .content-card { background-color: #fafafa; border-left: 4px solid #27ae60; border-radius: 0 6px 6px 0; padding: 25px; margin: 25px 0; } .content-card-header { font-size: 14px; font-weight: 600; color: #27ae60; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 15px; } /* Data Table */ .data-table { width: 100%; border-collapse: collapse; } .data-table tr { border-bottom: 1px solid #eeeeee; } .data-table tr:last-child { border-bottom: none; } .data-table td { padding: 12px 0; vertical-align: top; } .data-table .label { font-weight: 600; color: #666666; width: 100px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.3px; } .data-table .value { color: #333333; font-size: 15px; } /* Message Box */ .message-box { background-color: #ffffff; border: 1px solid #e0e0e0; border-radius: 6px; padding: 20px; margin-top: 15px; font-size: 15px; line-height: 1.7; color: #333333; white-space: pre-wrap; } /* Metadata */ .email-metadata { margin-top: 30px; padding-top: 20px; border-top: 1px solid #eeeeee; font-size: 12px; color: #999999; } .email-metadata span { display: inline-block; margin-right: 20px; } /* Footer */ .email-footer { background-color: #fafafa; padding: 30px 40px; text-align: center; border-top: 1px solid #eeeeee; } .email-footer-text { font-size: 13px; color: #888888; margin: 0; } .email-footer-link { color: #27ae60; text-decoration: none; } .email-footer-link:hover { text-decoration: underline; } /* Bracket Decoration */ .bracket-wrap { display: inline; } .bracket-wrap::before { content: '{ '; color: #27ae60; font-weight: 700; } .bracket-wrap::after { content: ' }'; color: #27ae60; font-weight: 700; } /* Responsive */ @media only screen and (max-width: 600px) { .email-container { padding: 10px; } .email-header { padding: 25px 20px; } .email-body { padding: 25px 20px; } .email-footer { padding: 20px; } .content-card { padding: 20px 15px; } .data-table .label { display: block; padding-bottom: 4px; } .data-table .value { display: block; padding-bottom: 8px; } } /* Dark Mode: Disabled via "light only" color-scheme meta tag * Gmail iOS aggressively inverts colors in dark mode, ignoring CSS. * Using "light only" forces consistent rendering across all clients. * See: https://www.hteumeuleu.com/2021/emails-react-to-dark-mode/ */ ` } // ContactEmailHTMLTemplate returns the HTML template for contact form emails // Note: Uses "light only" color scheme to prevent Gmail iOS dark mode from // inverting colors unpredictably. This ensures consistent appearance across all clients. func ContactEmailHTMLTemplate() string { return ` New Contact Form Message
` } // ContactEmailPlainTemplate returns the plain text template for contact form emails func ContactEmailPlainTemplate() string { return ` ═══════════════════════════════════════════════════════════════ { CV CONTACT } ═══════════════════════════════════════════════════════════════ NEW MESSAGE RECEIVED ──────────────────────────────────────────────────────────────── CONTACT DETAILS ─────────────── From: {{.Name}} Email: {{.Email}} {{if .Company}}Company: {{.Company}} {{end}}{{if .Subject}}Subject: {{.Subject}} {{end}} MESSAGE ─────────────── {{.Message}} ──────────────────────────────────────────────────────────────── IP: {{.IP}} Time: {{.Time.Format "Jan 02, 2006 at 15:04 MST"}} ──────────────────────────────────────────────────────────────── Sent from: juan.andres.morenorub.io ═══════════════════════════════════════════════════════════════ ` }