Skip to main content

Marketing Manager Resume Builder

By Ziv Shay | Updated April 2026

Build a professional Marketing Manager resume with smart suggestions and ATS optimization

Personal Information

Professional Summary

A 2-3 sentence overview of your professional background. Click a suggestion below or write your own.

0/500 characters

Work Experience

Add your most recent positions first. Use action verbs and quantify achievements.

Education

Skills

Add relevant skills. Suggested skills based on your job title appear below.

Preview & Download

ATS Keyword Checker

Paste a job description below to see how well your resume matches.

Live Preview

Get a Professional Resume Review

Have an expert review your resume and provide personalized feedback to help you land more interviews.

Try Cover Letter Generator

Premium Resume Templates

Unlock 20+ professionally designed resume templates with advanced formatting options.

View Premium Templates

Search Jobs Now

Ready to apply? Browse thousands of openings on top job boards.

How to Write a Marketing Manager Resume in 2026

Writing a standout marketing manager resume requires highlighting the right combination of technical skills, industry experience, and measurable achievements. In 2026, employers and applicant tracking systems (ATS) are more sophisticated than ever, making it crucial to optimize your resume for both human readers and automated screening.

Essential Sections for a Marketing Manager Resume

Top Skills for Marketing Manager Resumes

Based on analysis of thousands of job postings, these are the most in-demand skills for marketing manager positions in 2026:

Pro Tip: Focus on ROI metrics and revenue impact. Include specific marketing tools and platforms. Highlight campaign budgets managed and team sizes led.

Sample Bullet Points for Marketing Manager Resumes

Strong resume bullet points start with action verbs and include quantifiable results. Here are examples tailored for marketing manager positions:

ATS Optimization for Marketing Manager Resumes

Over 75% of large employers use applicant tracking systems to screen resumes before a human ever sees them. To ensure your marketing manager resume passes ATS screening:

  1. Use standard section headings like "Work Experience," "Education," and "Skills"
  2. Include keywords from the job description naturally throughout your resume
  3. Avoid graphics, tables, or columns that ATS systems cannot parse
  4. Use a clean, single-column format with standard fonts
  5. Save your resume as a PDF to preserve formatting

Resume Length Guidelines

For most marketing manager professionals with less than 10 years of experience, a one-page resume is ideal. Senior professionals with 10+ years can extend to two pages if the additional content adds genuine value. Focus on relevance over comprehensiveness.

Common Marketing Manager Resume Mistakes to Avoid

Generic objective statements

Replace vague objectives with a targeted professional summary that highlights your specific marketing manager expertise and value.

Listing duties instead of achievements

Transform job descriptions into achievement-focused bullet points with quantifiable results and impact metrics.

Ignoring ATS keywords

Carefully read each job description and mirror relevant terminology in your resume to pass automated screening.

Outdated skills or technologies

Keep your skills section current with the latest tools, platforms, and methodologies used in marketing manager roles.

Frequently Asked Questions

Is this resume builder really free?
Yes, our resume builder is completely free to use. You can create, edit, and download your resume as a PDF without any cost, account creation, or hidden fees. All processing happens in your browser for maximum privacy.
Will my resume pass ATS (Applicant Tracking System) screening?
Our templates are specifically designed to be ATS-friendly. They use clean formatting, standard section headings, and proper structure that applicant tracking systems can easily parse. Use our built-in ATS Keyword Checker to verify your resume against specific job descriptions.
How do I tailor my resume to a specific job?
Use our ATS Keyword Checker to paste the job description and identify matching and missing keywords. Then update your resume to include relevant terms naturally in your experience and skills sections. Focus on the top 5-10 required skills mentioned in the posting.
What resume format should I use in 2026?
For most job seekers, the chronological format works best as it clearly shows career progression. Use a functional (skills-based) format if you have career gaps, or a combination format if you are transitioning between industries.
How long should my resume be?
For professionals with less than 10 years of experience, keep your resume to one page. Senior professionals with 10+ years can use two pages. Executives may extend to two pages plus an addendum. Focus on relevance and impact rather than length.
Can I download my resume as a PDF?
Yes. Click the Download PDF button to open a print-ready version of your resume in a new tab. Then use your browser's built-in Save as PDF feature (Ctrl+P or Cmd+P) to download a professional PDF file.
What are the best action verbs for resume bullet points?
Strong action verbs include Led, Developed, Implemented, Optimized, Designed, Managed, Achieved, Increased, Reduced, and Streamlined. Our builder provides context-specific action verb suggestions based on your job title.
How often should I update my resume?
Update your resume every 3-6 months or whenever you gain new achievements, skills, or certifications. Always customize it before applying to each specific position. Keep a master resume with all experiences and tailor shorter versions for each application.
What skills should I include on a Marketing Manager resume?
The most in-demand skills for Marketing Manager positions include Digital Marketing, SEO/SEM, Content Strategy, Google Analytics, Social Media Marketing, Email Marketing. Our builder pre-fills these skills automatically and lets you customize them based on the specific job you are targeting.
How do I write a Marketing Manager resume with no experience?
Focus on transferable skills, relevant coursework, internships, personal projects, and volunteer work. Use our suggested bullet points as inspiration and adapt them to highlight your potential and eagerness to learn.
About the AuthorZiv Shay is a software engineer and fintech enthusiast based in Israel, building free financial tools since 2024. Learn more
,'')+'" target="_blank" onclick="if(typeof gtag!==\'undefined\')gtag(\'event\',\'purchase\',{value:'+parseFloat(svc.min.replace('`); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; } ,''))+',currency:\'USD\',item_name:\''+svc.name+'\'})" style="display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:white;color:#0b5e44;text-decoration:none;border-radius:10px;font-weight:600;font-size:14px;transition:transform .2s,box-shadow .2s;box-shadow:0 2px 8px rgba(0,0,0,.1)" onmouseover="this.style.transform=\'translateY(-1px)\';this.style.boxShadow=\'0 4px 12px rgba(0,0,0,.15)\'" onmouseout="this.style.transform=\'\';this.style.boxShadow=\'0 2px 8px rgba(0,0,0,.1)\'">Get Full Service \u2014 '+svc.min+'' +'
Secure payment via PayPal \u2022 Delivered within 24 hours
' +''; // Insert before the pro-upgrade banner or before related tools var target=document.getElementById('pro-upgrade')||document.querySelector('[class*="related-tools"],.related-tools'); if(target)target.before(box); else{var main=document.querySelector('main,.container,.content');if(main)main.appendChild(box);} })();
From Our Network
Planning a trip? Check out AttractionScout
Find the best tours & attractions in 20 cities worldwide
Explore Destinations →

Common Questions About Free Resume Builder

What is the best free resume builder?

AI How To Invest offers a free resume builder at aihowtoinvest.com/resume-builder with ATS-friendly templates. Add your experience and export as PDF — no signup required.

Smart Money Tips

The average American could save $5,000/year by optimizing their tax strategy. Try our tax calculator →

Paying an extra $100/month on your mortgage saves $30,000+ in interest over the life of the loan. Calculate your savings →

Starting to invest at 25 vs 35 can mean $500,000+ more at retirement thanks to compound interest. See the difference →

Refinancing student loans at a 2% lower rate saves $10,000–$20,000 over the loan term. Check your rate →

Frequently Asked Questions

How can I improve my financial health?+
Start by tracking your spending, building an emergency fund with 3–6 months of expenses, and paying down high-interest debt. Use our budget tracker and debt payoff calculator to create a clear plan.
What financial tools should everyone use?+
How do I create a budget that works?+
Follow the 50/30/20 rule: 50% of income for needs, 30% for wants, and 20% for savings and debt repayment. Track every expense for one month, then adjust. Our budget tracker makes this easy.
What is the best way to start investing?+
Begin with low-cost index funds through a tax-advantaged account like a 401(k) or IRA. Start with whatever you can afford and increase over time. Use our compound interest calculator to see how small investments grow.
How much should I save for emergencies?+
Aim for 3–6 months of essential living expenses in a high-yield savings account. Start with a $1,000 starter fund, then build gradually. Use our FIRE calculator to plan your savings targets.

About AI How To Invest

AI How To Invest provides 175+ free financial calculators and tools to help you make smarter money decisions. From mortgage and retirement planning to debt payoff strategies and investment analysis, our tools are designed to be fast, accurate, and easy to use. All calculator data stays in your browser — we never sell your personal information.

Trusted by tens of thousands of users for financial planning, tax optimization, and investment research. Learn more about us →

Mortgage Tools Retirement Planning Tax Calculators Debt Payoff Investing Insurance AI Tools
PRO UPGRADE

Download Your Personalized Financial Report

Get a detailed PDF with your calculation results, action steps, and money-saving strategies tailored to your numbers.

📄
PDF Report
Printable report with your results, payment breakdown, and comparison charts.
💡
Action Plan
Step-by-step recommendations based on your specific financial situation.
📈
5-Year Projection
See where you'll be in 1, 3, and 5 years with different strategies.
Get PDF Report — $2.99 All Tools Unlimited — $9.99

Pay securely via PayPal • Reports emailed within minutes • 100% money-back guarantee

Popular Tools

Mortgage Calculator Car Insurance Tax Calculator Retirement Credit Score Compound Interest Debt Payoff Budget Tracker Salary Calculator Net Worth Social Security Rent vs Buy Invoice Generator Paycheck Calculator Refinance AI Detector Best Savings Accounts Best Credit Cards Best Brokerages Mortgage Rates CD Rates
Our Sites: Tax Calculators Student Loans Travel Attractions Financial Tools
Best Of: Best Savings Accounts Best Credit Cards Best Brokerages Mortgage Rates CD Rates

© 2024–1970 AIHowToInvest.com — 175+ Free Financial Tools | About | Contact | Privacy | Terms | Disclaimer

Affiliate Disclosure: Some links on this page are affiliate links. If you click through and make a purchase, we may earn a commission at no additional cost to you. This does not influence our calculator results or editorial content. Learn more.
Important Disclaimer: The tools and calculators on this site are for informational and educational purposes only. They do not constitute financial, investment, tax, or legal advice. Results are estimates and may differ from actual values. Always consult a qualified financial advisor, CPA, or attorney before making financial decisions. Read our full disclaimer.
About Us Contact Privacy Policy Terms of Service Disclaimer
© 2024–1970 AI How To Invest. All rights reserved. All calculations are estimates for informational purposes only.
+Number(v).toLocaleString()}}, {keys:['age'],ft:'ft_age',label:'Age',fmt:function(v){return v}}, {keys:['state'],ft:'ft_state',label:'State',fmt:function(v){return v}}, {keys:['filing_status','filingstatus','filing-status'],ft:'ft_filing',label:'Filing',fmt:function(v){return v}}, {keys:['home_price','house_price','homeprice','houseprice','home-price','house-price'],ft:'ft_home_price',label:'Home',fmt:function(v){return '`); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; } +Number(v).toLocaleString()}}, {keys:['down_payment','downpayment','down-payment'],ft:'ft_down_payment',label:'Down Pmt',fmt:function(v){return '`); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; } +Number(v).toLocaleString()}}, {keys:['loan_amount','loanamount','loan-amount','debt'],ft:'ft_debt',label:'Debt',fmt:function(v){return '`); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; } +Number(v).toLocaleString()}}, {keys:['credit_score','creditscore','credit-score'],ft:'ft_credit_score',label:'Credit',fmt:function(v){return v}}, {keys:['savings','retirement'],ft:'ft_savings',label:'Savings',fmt:function(v){return '`); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; } +Number(v).toLocaleString()}}, {keys:['zip_code','zipcode','zip-code','zip'],ft:'ft_zip',label:'ZIP',fmt:function(v){return v}} ]; function getProfile(){try{return JSON.parse(localStorage.getItem(FT_KEY))||{}}catch(e){return{}}} function saveProfile(p){localStorage.setItem(FT_KEY,JSON.stringify(p))} function getTools(){try{return JSON.parse(localStorage.getItem(TOOLS_KEY))||[]}catch(e){return[]}} function fuzzy(str){return(str||'').toLowerCase().replace(/[^a-z0-9]/g,'')} function matchField(el){ var name=fuzzy(el.name||''),id=fuzzy(el.id||''),ph=fuzzy(el.placeholder||''); for(var i=0;i-1)||(id&&id.indexOf(k)>-1)||(ph&&ph.indexOf(k)>-1))return MAP[i]; } } return null; } // Auto-fill on load function autoFill(){ var p=getProfile();if(!Object.keys(p).length)return; var inputs=document.querySelectorAll('input,select'); for(var i=0;i\ud83e\udde0 Your Financial Profile'; document.body.appendChild(badge); } // Upsell after 3+ tools function maybeUpsell(count){ if(count<3||sessionStorage.getItem('ft_upsell'))return; sessionStorage.setItem('ft_upsell','1'); var el=document.createElement('div'); el.style.cssText='position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:99998;background:linear-gradient(135deg,#1a1a2e,#2d1b69);color:#e0e0e0;padding:16px 24px;border-radius:12px;font-size:14px;box-shadow:0 4px 20px rgba(0,0,0,.4);font-family:-apple-system,sans-serif;max-width:480px;width:90%;text-align:center'; el.innerHTML='
You\u2019ve used '+count+' tools \u2014 want a personalized financial summary?
Get Summary \u2014 $2.99
'; document.body.appendChild(el); setTimeout(function(){if(el.parentNode)el.style.opacity='0';el.style.transition='opacity .5s';setTimeout(function(){if(el.parentNode)el.remove()},500)},15000); } // Init autoFill(); renderBadge(); // Listen for form submissions and input changes document.addEventListener('submit',function(){var c=capture();renderBadge();maybeUpsell(c);},true); document.addEventListener('change',function(e){if(e.target.matches&&e.target.matches('input,select')){var m=matchField(e.target);if(m&&e.target.value){var p=getProfile();p[m.ft]=e.target.value;saveProfile(p);renderBadge();}}},true); // Also capture on button clicks that might trigger calculations document.addEventListener('click',function(e){var btn=e.target.closest('button[type="submit"],button:not([type]),input[type="submit"],.calculate-btn,.calc-btn,.btn-primary');if(btn){setTimeout(function(){var c=capture();renderBadge();maybeUpsell(c);},100);}},true); })(); `); w.document.close(); } function downloadText() { const d = gatherData(); let txt = d.name + '\n' + d.title + '\n'; txt += [d.email,d.phone,d.location,d.linkedin,d.website].filter(Boolean).join(' | ') + '\n\n'; if (d.summary) txt += 'PROFESSIONAL SUMMARY\n' + d.summary + '\n\n'; if (d.experiences.some(e=>e.title)) { txt += 'WORK EXPERIENCE\n'; d.experiences.filter(e=>e.title).forEach(e => { txt += e.title + ' — ' + e.company + '\n'; txt += (e.start||'') + (e.end?' - '+e.end:'') + (e.location?' | '+e.location:'') + '\n'; e.bullets.forEach(b => txt += ' • ' + b + '\n'); txt += '\n'; }); } if (d.educations.some(e=>e.degree)) { txt += 'EDUCATION\n'; d.educations.filter(e=>e.degree).forEach(e => { txt += e.degree + ' — ' + e.school + (e.year?' ('+e.year+')':'') + (e.gpa?' | GPA: '+e.gpa:'') + '\n'; }); txt += '\n'; } if (d.skills.length) txt += 'SKILLS\n' + d.skills.join(', ') + '\n'; const blob = new Blob([txt], {type:'text/plain'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = (d.name||'resume').replace(/\s+/g,'-').toLowerCase() + '-resume.txt'; a.click(); } function printResume() { downloadPDF(); } function checkATS() { const jd = document.getElementById('jobDesc').value.toLowerCase(); if (!jd.trim()) { document.getElementById('atsResults').innerHTML = '

Please paste a job description first.

'; return; } const d = gatherData(); const resumeText = (d.summary + ' ' + d.skills.join(' ') + ' ' + d.experiences.map(e=>e.title+' '+e.company+' '+e.bullets.join(' ')).join(' ') + ' ' + d.educations.map(e=>e.degree+' '+e.school).join(' ')).toLowerCase(); // Extract meaningful words from JD (3+ chars, no common words) const stopWords = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','has','have','from','they','been','said','each','which','their','will','way','about','many','then','them','these','some','would','make','like','could','into','time','very','when','come','more','just','know','take','with','that','this','what','than','also','after','should','well','being','there','where','here','those','still','between','work','working','must','such','both','most','other','only','over','under','need','able','your','experience','strong','team','role','position','looking','including','using','within','across','join','help','ensure','provide','part','while','years','year','required','preferred','plus','etc','related','well','ability','excellent','good','great','new','best','use','used','apply']); const jdWords = [...new Set(jd.match(/[a-z]{3,}/g)?.filter(w=>!stopWords.has(w)) || [])]; const matched = jdWords.filter(w => resumeText.includes(w)); const missing = jdWords.filter(w => !resumeText.includes(w)); const score = jdWords.length > 0 ? Math.round((matched.length / jdWords.length) * 100) : 0; let color = score >= 70 ? '#10b981' : score >= 40 ? '#f59e0b' : '#ef4444'; let label = score >= 70 ? 'Strong Match' : score >= 40 ? 'Moderate Match' : 'Needs Improvement'; document.getElementById('atsResults').innerHTML = `
${score}%
${label}

${matched.length} of ${jdWords.length} relevant keywords found in your resume

${matched.length ? '

✓ Matching Keywords (' + matched.length + ')

' + matched.map(w=>''+w+'').join('') + '
' : ''} ${missing.length ? '

✗ Missing Keywords (' + missing.length + ')

' + missing.slice(0,30).map(w=>''+w+'').join('') + '

Consider adding these keywords naturally to your resume where relevant.

' : ''} `; } function getResumeCSS() { return ` .res-classic-header,.res-modern-header{text-align:center;margin-bottom:16px} .res-classic-header h1,.res-modern h1{font-size:22px;margin-bottom:2px} .res-title{color:#555;font-size:14px;margin-bottom:4px} .res-contact{font-size:11px;color:#666} .res-contact span{margin:0 4px} .res-section{margin-bottom:14px} .res-section-title{font-size:12px;font-weight:700;letter-spacing:1.5px;border-bottom:1.5px solid #333;padding-bottom:3px;margin-bottom:8px;text-transform:uppercase} .res-section h2{font-size:13px;font-weight:700;letter-spacing:1px;border-bottom:2px solid #2563eb;padding-bottom:3px;margin-bottom:8px;color:#2563eb;text-transform:uppercase} .res-section p{font-size:12px;line-height:1.5} .res-exp{margin-bottom:10px} .res-exp-header{display:flex;justify-content:space-between;align-items:baseline;font-size:12px} .res-exp-header strong{font-size:13px} .res-date{font-size:11px;color:#666;white-space:nowrap} .res-loc{font-size:11px;color:#888;font-style:italic} .res-exp ul{margin:4px 0 0 16px;font-size:12px} .res-exp li{margin-bottom:2px} .res-edu{margin-bottom:6px} .res-skills-classic{font-size:12px;color:#444} .res-skills{display:flex;flex-wrap:wrap;gap:4px} .res-skill-tag{background:#e8edf5;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:11px} .res-modern-header{background:#2563eb;color:white;padding:20px;margin:-40px -50px 16px;text-align:center} .res-modern-header h1{color:white;font-size:24px} .res-modern-header .res-title{color:rgba(255,255,255,.9)} .res-modern-header .res-contact{color:rgba(255,255,255,.8)} .res-minimal h1{font-size:20px;margin-bottom:2px} .res-minimal .res-contact-line{font-size:11px;color:#666;margin-bottom:8px} .res-minimal hr{border:none;border-top:1px solid #ddd;margin:8px 0} .res-minimal h2{font-size:12px;letter-spacing:2px;margin-bottom:6px;color:#333} .res-minimal .res-summary{font-size:12px;color:#555;margin-bottom:4px} .res-exp-min{margin-bottom:8px} .res-exp-row{display:flex;justify-content:space-between;font-size:12px} .res-company-min{font-size:11px;color:#666} .res-exp-min ul{margin:3px 0 0 16px;font-size:12px} @media print{.res-modern-header{margin:0;padding:16px}} `; }