Files
acuna_homepage/index.html
Lorenzo Venerandi 7220a734b2
All checks were successful
Build and Deploy / build (push) Successful in 18s
Build and Deploy / Deploy to target (push) Successful in 3s
moved cv
2025-10-14 13:25:19 +02:00

1806 lines
107 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="it" data-theme="dark">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Alessandro Acuna — Structural Engineer</title>
<meta name="description" content="Portfolio & CV of Alessandro Acuna, Structural Engineer specialized in composites, CAD, and FEA." />
<meta property="og:title" content="Alessandro Acuna — Structural Engineer" />
<meta property="og:description" content="Portfolio & CV of Alessandro Acuna, Structural Engineer specialized in composites, CAD, and FEA." />
<meta property="og:type" content="website" />
<meta name="theme-color" content="#0b0c10" />
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='0.9em' font-size='90'>A</text></svg>">
<style>
/* --- THEME TOKENS --- */
:root{
--bg:#0b0c10; --surface:#0f1116; --text:#e5e7eb; --muted:#94a3b8; --primary:#0ea5e9; --ring:#22d3ee; --card:#111318; --border:#1f2937; --chip:#111827; --chip-text:#cbd5e1;
}
[data-theme="dark"]{
--bg:#0b0c10; --surface:#0f1116; --text:#e5e7eb; --muted:#94a3b8; --primary:#0ea5e9; --ring:#22d3ee; --card:#111318; --border:#1f2937; --chip:#111827; --chip-text:#cbd5e1;
}
[data-theme="light"]{
--bg:#f8fafc; --surface:#ffffff; --text:#0f172a; --muted:#475569; --primary:#0284c7; --ring:#22d3ee; --card:#ffffff; --border:#e2e8f0; --chip:#f1f5f9; --chip-text:#0f172a;
}
/* --- BASE --- */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,"Helvetica Neue",Arial,"Apple Color Emoji","Segoe UI Emoji";background:var(--bg);color:var(--text);}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
.container{max-width:1000px;margin:0 auto;padding:24px}
/* --- LAYOUT / CARDS / DIVIDERS --- */
header{position:sticky;top:0;z-index:50;background:color-mix(in oklab, var(--surface) 80%, transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}
nav{display:flex;align-items:center;gap:16px;justify-content:space-between}
nav .links{display:flex;gap:12px;flex-wrap:wrap}
nav a{padding:10px 12px;border-radius:10px}
nav a:hover{background:var(--chip)}
.btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);padding:10px 14px;border-radius:12px;background:linear-gradient(180deg,var(--surface),var(--card));color:var(--text);box-shadow:0 1px 0 rgba(255,255,255,0.04) inset, 0 8px 24px rgba(2,8,23,0.25); cursor:pointer;}
.btn:hover{transform:translateY(-1px)}
.btn.primary{border-color:transparent;background:linear-gradient(180deg,rgba(14,165,233,0.15),rgba(14,165,233,0.05));}
.grid{display:grid;gap:16px}
.hero{display:grid;grid-template-columns:1.4fr 1fr;gap:24px;align-items:center;padding:40px 0}
.section{padding:16px 0 32px}
.card{border:1px solid var(--border);background:var(--card);border-radius:16px;padding:20px; box-shadow:0 1px 0 rgba(255,255,255,0.03) inset, 0 10px 24px rgba(2,8,23,0.15)}
.timeline{display:grid;gap:14px}
.item{display:grid;grid-template-columns:180px 1fr;gap:14px}
.item + .item{border-top:1px solid var(--border); padding-top:14px; margin-top:6px}
h1{font-size:clamp(28px,4vw,44px);line-height:1.1;margin:0 0 8px 0}
h2{font-size:clamp(22px,3vw,30px);margin:24px 0 12px}
h3{font-size:18px;margin:0 0 6px}
p{color:var(--muted);margin:8px 0}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{background:var(--chip);color:var(--chip-text);padding:6px 10px;border-radius:999px;font-size:12px;border:1px solid var(--border)}
.project{border-left:3px solid var(--primary);padding-left:12px}
.kbd{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;background:var(--chip);border:1px solid var(--border);padding:2px 6px;border-radius:6px;font-size:12px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* --- TITOLI (titolo sopra, where sotto) --- */
.brand{
display:flex;
flex-direction:column;
align-items:flex-start;
gap:2px;
line-height:1.25;
}
.brand .where{ font-weight:500; opacity:.85; }
/* --- LOGHI --- */
.when{display:flex;flex-direction:column;gap:8px;align-items:center;justify-content:center;text-align:center;min-height:60px}
.logo-box{width:160px;height:60px;display:grid;place-items:center;background:transparent;border:1px solid transparent;border-radius:10px}
.logo{display:block;height:auto;max-height:48px;max-width:100%;object-fit:contain;image-rendering:auto;opacity:.98}
.logo--wide{max-height:44px}
.logo--square{max-height:52px}
/* --- LISTE --- */
.timeline .item ul{ margin:8px 0 0 0; padding-left:18px; list-style-position:outside; }
.timeline .item li{ margin:4px 0; }
@media(max-width:860px){
.hero{grid-template-columns:1fr}
.item{grid-template-columns:1fr}
}
.footer{padding:24px 0;color:var(--muted);font-size:14px;border-top:1px solid var(--border)}
/* =======================
MODAL (dialog)
======================= */
dialog.project-modal {
width:min(900px, 92vw);
border:1px solid var(--border);
border-radius:16px;
padding:0;
background:var(--surface);
color:var(--text);
box-shadow:0 25px 60px rgba(0,0,0,.45);
}
dialog.project-modal::backdrop{
background:rgba(2,8,23,.55);
backdrop-filter:blur(3px);
}
.modal-header{
display:flex;justify-content:space-between;align-items:center;
padding:16px 18px;border-bottom:1px solid var(--border);background:var(--card);
}
.modal-title{font-size:18px;margin:0}
.modal-body{padding:18px;display:grid;gap:14px;max-height:70vh;overflow:auto}
.modal-actions{
display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid var(--border);background:var(--card)
}
.modal-close{cursor:pointer}
.modal-close:hover{opacity:.85}
.modal-gallery{
display:grid;gap:10px;
grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
}
.modal-gallery img{
width:100%;height:180px;object-fit:cover;border-radius:10px;border:1px solid var(--border);cursor:zoom-in;
}
/* Progetti cliccabili */
.project[data-modal]{cursor:pointer;transition:transform .12s ease;}
.project[data-modal]:hover{ transform:translateY(-2px); }
/* ===== CUSTOM LANGUAGE DROPDOWN ===== */
.lang-switcher{ position:relative; display:inline-flex; }
.lang-btn{
display:inline-flex; align-items:center; gap:8px;
padding:8px 10px; border:1px solid var(--border); border-radius:12px;
background:var(--card); cursor:pointer; user-select:none;
}
.lang-flag{ font-size:18px; line-height:1; }
.lang-code{ font-weight:600; letter-spacing:.4px; }
.lang-caret{ font-size:14px; opacity:.8; }
.lang-menu{
position:absolute; top:calc(100% + 8px); right:0; z-index:100;
min-width:180px; background:var(--surface); border:1px solid var(--border); border-radius:12px;
box-shadow:0 12px 32px rgba(0,0,0,.3); padding:6px; display:none;
}
.lang-menu.open{ display:block; }
.lang-option{
display:flex; align-items:center; gap:10px; padding:10px; border-radius:10px; cursor:pointer;
}
.lang-option:hover, .lang-option[aria-selected="true"]{ background:var(--chip); }
.lang-name{ flex:1; }
.lang-short{ opacity:.65; font-size:12px; }
.lang-check{ opacity:0; }
.lang-option[aria-selected="true"] .lang-check{ opacity:1; }
/* ===== LIGHTBOX ===== */
dialog#lightbox{
padding:0; border:none; background:transparent; max-width:96vw;
}
dialog#lightbox::backdrop{
background:rgba(0,0,0,.85);
backdrop-filter: blur(2px);
}
.lightbox-wrap{
position:relative; display:flex; align-items:center; justify-content:center; padding:12px;
}
.lightbox-figure{
margin:0; background:var(--surface); border:1px solid var(--border); border-radius:12px;
max-width:96vw; max-height:90vh; display:flex; flex-direction:column; overflow:hidden;
box-shadow:0 30px 80px rgba(0,0,0,.6);
}
.lightbox-img{
max-width:96vw; max-height:80vh; width:auto; height:auto; display:block; object-fit:contain;
background:#000;
}
.lightbox-caption{
padding:10px 12px; font-size:14px; color:var(--muted); background:var(--card); border-top:1px solid var(--border);
}
.lightbox-close{
position:absolute; top:8px; right:8px; z-index:2;
}
/* A11y */
:focus-visible{ outline:2px solid var(--ring); outline-offset:2px; border-radius:8px; }
:target{ scroll-margin-top: 90px; }
@media (prefers-reduced-motion: reduce){
*{transition-duration:0.001ms !important; animation-duration:0.001ms !important; animation-iteration-count:1 !important;}
}
</style>
<!-- Tema: toggle visibile, persistenza -->
<script>
(function(){
const KEY='aa-theme';
const metaTheme = document.querySelector('meta[name="theme-color"]');
const apply = (t)=>{
const theme = (t==='light') ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', theme);
if(metaTheme) metaTheme.setAttribute('content', theme==='light' ? '#ffffff' : '#0b0c10');
};
const saved = localStorage.getItem(KEY);
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
apply(saved || (prefersDark ? 'dark' : 'dark'));
window.addEventListener('DOMContentLoaded', ()=>{
const btn = document.getElementById('themeToggle');
const setIcon = ()=>{
const cur = document.documentElement.getAttribute('data-theme') || 'dark';
btn.textContent = (cur==='dark') ? '☀️' : '🌙';
btn.title = (cur==='dark') ? 'Passa a tema chiaro' : 'Passa a tema scuro';
};
setIcon();
btn.addEventListener('click', ()=>{
const cur = document.documentElement.getAttribute('data-theme') || 'dark';
const next = (cur==='dark') ? 'light' : 'dark';
apply(next);
localStorage.setItem(KEY, next);
setIcon();
});
});
})();
</script>
<!-- JSON-LD base -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Alessandro Acuna",
"jobTitle": "Structural Engineer",
"email": "mailto:alessan.acunaguardia@gmail.com",
"telephone": "+393277671048",
"url": "",
"sameAs": ["https://www.linkedin.com/in/aleacuna"],
"knowsAbout": ["Composite Materials","FEA","CAD","Aerospace","Python"]
}
</script>
</head>
<body>
<header>
<div class="container">
<nav>
<div class="links" aria-label="Navigation">
<a href="#about" data-i18n="nav.about">About</a>
<a href="#experience" data-i18n="nav.experience">Experience</a>
<a href="#projects" data-i18n="nav.projects">Projects</a>
<a href="#education" data-i18n="nav.education">Education</a>
<a href="#skills" data-i18n="nav.skills">Skills</a>
<a href="#contact" data-i18n="nav.contact">Contact</a>
</div>
<!-- Language dropdown + Theme + CV -->
<div class="links">
<div class="lang-switcher" id="langSwitcher">
<button class="lang-btn" id="langBtn" aria-haspopup="listbox" aria-expanded="false" aria-controls="langMenu" title="Language">
<span class="lang-flag" id="langFlag">🇮🇹</span>
<span class="lang-code" id="langCode">IT</span>
<span class="lang-caret"></span>
</button>
<div class="lang-menu" id="langMenu" role="listbox" tabindex="-1">
<div class="lang-option" role="option" data-lang="it" aria-selected="true">
<span class="lang-flag">🇮🇹</span><span class="lang-name">Italiano</span><span class="lang-short">IT</span><span class="lang-check"></span>
</div>
<div class="lang-option" role="option" data-lang="en" aria-selected="false">
<span class="lang-flag">🇬🇧</span><span class="lang-name">English</span><span class="lang-short">EN</span><span class="lang-check"></span>
</div>
<div class="lang-option" role="option" data-lang="de" aria-selected="false">
<span class="lang-flag">🇩🇪</span><span class="lang-name">Deutsch</span><span class="lang-short">DE</span><span class="lang-check"></span>
</div>
<div class="lang-option" role="option" data-lang="es" aria-selected="false">
<span class="lang-flag">🇪🇸</span><span class="lang-name">Español</span><span class="lang-short">ES</span><span class="lang-check"></span>
</div>
</div>
</div>
<button id="themeToggle" class="btn" aria-label="Toggle theme" title="Light/Dark">🌓</button>
<a class="btn primary" href="res/Alessandro_Acuna_CV.pdf" download data-i18n="cta.downloadCv" data-i18n-attr="title" title="Scarica il CV">⬇️ Scarica CV</a>
</div>
</nav>
</div>
</header>
<main class="container">
<!-- HERO -->
<section class="hero" id="about">
<div class="card">
<h1>Alessandro Acuna</h1>
<h2 style="margin:0 0 10px 0" data-i18n="hero.role">Structural Engineer</h2>
<p data-i18n="hero.blurb">
Mechanical Engineer passionate about aerospace and advanced manufacturing, specialized in developing structural components from concept to advanced FEM validation. Focus on composite materials, CAD, FEA, and explicit simulations.
</p>
<div class="chips" aria-label="Highlights">
<span class="chip">Composite Materials</span>
<span class="chip">FEA (Abaqus, Ansys, Nastran, Hypermesh)</span>
<span class="chip">CAD (CATIA V5, NX, Creo)</span>
<span class="chip">PASS and SAP</span>
<span class="chip">Python (Numpy, Pandas, Matplotlib)</span>
</div>
<div style="margin-top:16px; display:flex; gap:10px; flex-wrap:wrap">
<a class="btn" href="mailto:alessan.acunaguardia@gmail.com">📧 Email</a>
<a class="btn" href="tel:+393277671048">📱 +393277671048</a>
<a class="btn" href="https://www.linkedin.com/in/aleacuna" target="_blank" rel="noopener">💼 LinkedIn</a>
</div>
</div>
<div class="grid">
<div class="card">
<h3 data-i18n="availability.title">Availability</h3>
<p data-i18n="availability.text">Currently at Airbus (contract until Dec 2025). Open to a new Structural Engineer role from January 2026.</p>
<p class="kbd" data-i18n="availability.location">Madrid, Spain · DE IT ES UK</p>
</div>
<div class="card">
<h3 data-i18n="keycompetencies.title">Key competencies</h3>
<div class="chips">
<span class="chip" data-i18n="keycompetencies.damageTolerance">Damage Tolerance</span>
<span class="chip" data-i18n="keycompetencies.buckling">Buckling &amp; Pre-sizing</span>
<span class="chip" data-i18n="keycompetencies.impact">Impact &amp; Energy Absorption</span>
<span class="chip" data-i18n="keycompetencies.drawing">Drawings &amp; GD&amp;T</span>
<span class="chip" data-i18n="keycompetencies.data">Data Analysis</span>
</div>
</div>
</div>
</section>
<!-- EXPERIENCE -->
<section id="experience" class="section">
<h2 data-i18n="sections.experience">Experience</h2>
<div class="timeline">
<!-- AIRBUS -->
<div class="card item">
<div class="when">Jan 2025 Present
<div class="logo-box"><img class="logo logo--wide" alt="Airbus logo" src="res/logos/airbus.svg" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.airbus.com" target="_blank" rel="noopener" data-i18n="exp.airbus.title">AIRBUS - Structural Design &amp; Analysis Engineer</a>
<span class="where" data-i18n="exp.airbus.where">Madrid, ES</span>
</h3>
<ul>
<li data-i18n="exp.airbus.p1">Development and assessment of <strong>repair solutions</strong> for composite and metallic components.</li>
<li data-i18n="exp.airbus.p2">Part design for <strong>A350 HTP</strong> and <strong>Section 19</strong> (rear fuselage) in <strong>CATIA V5</strong>.</li>
<li data-i18n="exp.airbus.p3">Design Office interface in production, ensuring structural integrity and compliance.</li>
<li data-i18n="exp.airbus.p4">Development of <strong>numerical models</strong> and explicit simulations for composite damage mechanisms.</li>
</ul>
</div>
</div>
<!-- DLR -->
<div class="card item">
<div class="when">Mar 2024 Dec 2024
<div class="logo-box"><img class="logo logo--square" alt="DLR logo" src="res/logos/dlr.svg" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.dlr.de" target="_blank" rel="noopener" data-i18n="exp.dlr.title">DLR - Master Thesis · R&amp;D Engineer</a>
<span class="where" data-i18n="exp.dlr.where">Stuttgart, DE</span>
</h3>
<ul>
<li data-i18n="exp.dlr.p1">Thesis for the EU project <strong>r-LightBioCom</strong> on sustainable high-performance composites for automotive/aerospace.</li>
<li data-i18n="exp.dlr.p2">Computed environmental footprint for 1 kg of materials in <strong>openLCA</strong>.</li>
<li data-i18n="exp.dlr.p3"><strong>Quasi-static &amp; dynamic</strong> compression tests on cores (honeycomb/foam) and <strong>KPIs</strong> combining <em>LCA</em> and mechanical performance.</li>
<li data-i18n="exp.dlr.p4">Implementation and calibration of <strong>LS-DYNA MAT cards</strong> from test data.</li>
<li data-i18n="exp.dlr.p5"><strong>FEM</strong> static/dynamic analyses to validate experiments.</li>
</ul>
</div>
</div>
<!-- UNIBO MOTORSPORT -->
<div class="card item">
<div class="when">Oct 2021 Sep 2023
<div class="logo-box"><img class="logo logo--square" alt="UniBo Motorsport logo" src="res/logos/unibo-motorsport.png" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://motorsport.unibo.it/" target="_blank" rel="noopener" data-i18n="exp.unibo.title">UniBo Motorsport - Stress &amp; Design Engineer</a>
<span class="where" data-i18n="exp.unibo.where">Bologna, IT</span>
</h3>
<ul>
<li data-i18n="exp.unibo.p1"><strong>Design</strong> and <strong>Stress Analysis</strong> of automotive parts (monocoque moulds, dashboard support, driver harness).</li>
<li data-i18n="exp.unibo.p2"><strong>FEM</strong> on CFRP chassis under multiple loads; investigation of delamination causes.</li>
</ul>
</div>
</div>
<!-- DVP -->
<div class="card item">
<div class="when">Jul 2022 Sep 2022
<div class="logo-box"><img class="logo" alt="DVP Vacuum Technology logo" src="res/logos/dvp-vacuum.png" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.dvp.it" target="_blank" rel="noopener" data-i18n="exp.dvp.title">D.V.P. Vacuum Technology - Bachelor Thesis · R&amp;D Engineer</a>
<span class="where" data-i18n="exp.dvp.where">Bologna, IT</span>
</h3>
<ul>
<li data-i18n="exp.dvp.p1">Experimental campaigns on flow rates and pressure losses in turbines and control valves.</li>
<li data-i18n="exp.dvp.p2">Built <strong>performance maps</strong> in <strong>GT-Suite</strong> and validated the model.</li>
</ul>
</div>
</div>
<!-- CPC -->
<div class="card item">
<div class="when">Feb 2022 Apr 2022
<div class="logo-box"><img class="logo" alt="CPC Group logo" src="res/logos/cpc.png" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.cpcgroup.it" target="_blank" rel="noopener" data-i18n="exp.cpc.title">CPC Group - Composite Laminator</a>
<span class="where" data-i18n="exp.cpc.where">Modena, IT</span>
</h3>
<ul>
<li data-i18n="exp.cpc.p1">Lamination of <strong>CFRP</strong> moulds and a chassis for Formula SAE team.</li>
</ul>
</div>
</div>
</div>
</section>
<!-- PROJECTS -->
<section id="projects" class="section">
<h2 data-i18n="sections.projects">Academic Projects</h2>
<div class="grid">
<div class="card project" data-modal="tmpl-stiffened-panels">
<h3 data-i18n="projects.card.stiff.title">Composite stiffened panels</h3>
<p data-i18n="projects.card.stiff.teaser">Buckling & damage tolerance checks, layup optimization (skin & stringers), deflection verification. <span class="where">UPM · FebMay 2025</span></p>
</div>
<div class="card project" data-modal="tmpl-composite-hashin">
<h3 data-i18n="projects.card.hashin.title">Composite laminate — Hashin (Abaqus)</h3>
<p data-i18n="projects.card.hashin.teaser">UD laminate under tension vs compression; ply-by-ply failure using Hashin initiation; FEM-driven analysis. <span class="where">UPM · JanMar 2025</span></p>
</div>
<div class="card project" data-modal="tmpl-section19">
<h3 data-i18n="projects.card.sec19.title">Rear Fuselage — Section 19 (Skin & Stringers)</h3>
<p data-i18n="projects.card.sec19.teaser">Skin laminate & stringer concept, drop-offs, reinforcements, frame joints (clips, Ø4.8 mm). <span class="where">UPM · JanMar 2024</span></p>
</div>
<div class="card project" data-modal="tmpl-handlebar-support">
<h3 data-i18n="projects.card.handlebar.title">Motorbike rear subframe — AlSi10Mg (SLM)</h3>
<p data-i18n="projects.card.handlebar.teaser">Topology optimization, VDI 2230 bolted joints, static/fatigue validation (Ansys), weight minimization. <span class="where">Unibo · SepDec 2024</span></p>
</div>
<div class="card project" data-modal="tmpl-drone-structure">
<h3 data-i18n="projects.card.drone.title">Composite drone structure</h3>
<p data-i18n="projects.card.drone.teaser">Lamination definition, thickness optimization, harmonic & impact FEM analyses. <span class="where">Unibo · FebJun 2023</span></p>
</div>
</div>
</section>
<!-- TEMPLATES DETTAGLI PROGETTI (i18n) -->
<!-- Stiffened Panels -->
<template id="tmpl-stiffened-panels">
<h4 data-i18n="proj.stiff.h4">Composite stiffened panels</h4>
<p data-i18n-html="proj.stiff.obj"><strong>Objective —</strong> Design and validate CFRP panels with stringers, minimizing weight while meeting buckling and damage-tolerance requirements under the defined load cases.</p>
<div>
<a class="btn primary" href="res/projects/stiffened-panels/report.pdf" target="_blank" rel="noopener" data-i18n="proj.common.download">📄 Download report</a>
</div>
<h5 data-i18n="proj.common.what">What I did</h5>
<ul>
<li data-i18n="proj.stiff.li1">Defined <strong>layups</strong> for skin and stringers (symmetry, balance, ply percentages).</li>
<li data-i18n="proj.stiff.li2"><strong>Pre-sized</strong> reinforcements and verified <strong>local/global buckling</strong> and <strong>stringer crippling</strong>.</li>
<li data-i18n="proj.stiff.li3">Checked <strong>deflections</strong> and <strong>margins of safety (MS)</strong> vs requirements.</li>
<li data-i18n="proj.stiff.li4">Performed <strong>thickness optimization</strong> (weight vs stiffness/stability) with FEM feedback.</li>
<li data-i18n="proj.stiff.li5">Used <strong>buckling mode shapes</strong> to guide redesign iterations.</li>
</ul>
<h5 data-i18n="proj.common.tools">Tools</h5>
<p data-i18n="proj.stiff.tools">Abaqus / Ansys for FEM; engineering spreadsheets for trade-offs; aerospace laminate rules.</p>
<h5 data-i18n="proj.common.results">Results</h5>
<ul>
<li data-i18n="proj.stiff.r1">Weight reduction: <strong>≈ XY%</strong> (replace with your actual value).</li>
<li data-i18n="proj.stiff.r2"><strong>MS ≥ 0</strong> for buckling and crippling on critical load cases.</li>
<li data-i18n="proj.stiff.r3"><strong>Deflections ≤</strong> specified limit.</li>
</ul>
<div class="modal-gallery">
<figure>
<img src="res/projects/stiffened-panels/panel_overview.jpg" alt="Panel and stringers overview" loading="lazy">
<figcaption data-i18n="proj.stiff.cap1">Panel &amp; stringers overview</figcaption>
</figure>
<figure>
<img src="res/projects/stiffened-panels/buckling_modes.png" alt="Buckling modes 13 from FEM" loading="lazy">
<figcaption data-i18n="proj.stiff.cap2">Buckling modes 13 (FEM)</figcaption>
</figure>
<figure>
<img src="res/projects/stiffened-panels/layup_table.png" alt="Layup and thickness table" loading="lazy">
<figcaption data-i18n="proj.stiff.cap3">Layup &amp; thickness table</figcaption>
</figure>
</div>
<hr style="border:none;border-top:1px solid var(--border);margin:8px 0 4px">
<ul class="chips" aria-label="Highlights">
<li class="chip" data-i18n="proj.stiff.ch1">Buckling &amp; Crippling</li>
<li class="chip" data-i18n="proj.stiff.ch2">Optimized Layup</li>
<li class="chip" data-i18n="proj.stiff.ch3">FEM-Driven</li>
<li class="chip" data-i18n="proj.stiff.ch4">MS ≥ 0</li>
</ul>
</template>
<!-- Hashin (Abaqus) -->
<template id="tmpl-composite-hashin">
<h4 data-i18n="proj.hashin.h4">Composite laminate — Hashin (Abaqus)</h4>
<p data-i18n-html="proj.hashin.obj"><strong>Objective —</strong> Simulate a UD laminate under tension and compression using <em>Hashin damage initiation</em> to identify ply-by-ply failure and compare tensile vs compressive capacity.</p>
<div>
<a class="btn primary" href="res/projects/hashin/report.pdf" target="_blank" rel="noopener" data-i18n="proj.common.download">📄 Download report</a>
</div>
<h5 data-i18n="proj.common.model">Model</h5>
<ul>
<li data-i18n="proj.hashin.m1">Coupon: <strong>100 × 20 mm</strong>, <strong>10 plies × 0.25 mm = 2.5 mm</strong>; symmetric layup <strong>[0°, ±45°, 0°, 90°]s</strong>.</li>
<li data-i18n="proj.hashin.m2">Elements: <strong>S4R</strong> shell mesh (~2 mm); material: UD lamina with elastic + Hashin inputs.</li>
<li data-i18n="proj.hashin.m3">BC/Load: bottom clamped; top edge coupled to a Reference Point with prescribed Y-displacement.</li>
<li data-i18n="proj.hashin.m4">Damage model: <strong>Hashin initiation</strong> (no damage evolution). Outputs: HSNFTCRT, HSNFCCRT, HSNMTCRT, HSNMCCRT.</li>
</ul>
<h5 data-i18n="proj.common.results">Results</h5>
<ul>
<li data-i18n="proj.hashin.r1"><strong>Tension:</strong> 90° matrix-tension → ±45° matrix-shear → 0° fiber-tension; <strong>UTS ≈ 413 MPa</strong>.</li>
<li data-i18n="proj.hashin.r2"><strong>Compression:</strong> ±45° matrix-compression → 90° matrix-compression → 0° fiber-compression; <strong>UCS ≈ 336 MPa</strong>.</li>
<li data-i18n="proj.hashin.r3"><strong>Strength ratio:</strong> UTS/UCS ≈ <strong>1.23</strong> (≈23% stronger in tension).</li>
</ul>
<div class="modal-gallery">
<figure>
<img src="res/projects/hashin/mesh.png" alt="Mesh and layup definition (S4R shell model)" loading="lazy">
<figcaption data-i18n="proj.hashin.cap1">Mesh &amp; layup (S4R shells)</figcaption>
</figure>
<figure>
<img src="res/projects/hashin/damage_evolution.png" alt="Hashin indices showing first-ply failure" loading="lazy">
<figcaption data-i18n="proj.hashin.cap2">Hashin maps — first-ply failure</figcaption>
</figure>
<figure>
<img src="res/projects/hashin/tension_stress_strain.png" alt="Tension stressstrain curve with stage markers" loading="lazy">
<figcaption data-i18n="proj.hashin.cap3">Tension σ–ε (staged stiffness drops)</figcaption>
</figure>
<figure>
<img src="res/projects/hashin/compression_stress_strain.png" alt="Compression stressstrain curve with stage markers" loading="lazy">
<figcaption data-i18n="proj.hashin.cap4">Compression σ–ε (staged stiffness drops)</figcaption>
</figure>
</div>
<hr style="border:none;border-top:1px solid var(--border);margin:8px 0 4px">
<ul class="chips" aria-label="Highlights">
<li class="chip" data-i18n="proj.hashin.ch1">Hashin initiation</li>
<li class="chip" data-i18n="proj.hashin.ch2">[0/±45/0/90]s</li>
<li class="chip" data-i18n="proj.hashin.ch3">UTS 413 MPa</li>
<li class="chip" data-i18n="proj.hashin.ch4">UCS 336 MPa</li>
<li class="chip" data-i18n="proj.hashin.ch5">Ratio ≈ 1.23</li>
</ul>
</template>
<!-- Section 19 -->
<template id="tmpl-section19">
<h4 data-i18n="proj.sec19.h4">Rear Fuselage — Section 19 (Skin &amp; Stringers)</h4>
<p data-i18n-html="proj.sec19.obj"><strong>Objective —</strong> Define composite skin and stringer concept, reinforcements, drop-offs, and frame joints (clips, Ø4.8 mm) for a fuselage bay between Frames AB.</p>
<div>
<a class="btn primary" href="res/projects/section19/report.pdf" target="_blank" rel="noopener" data-i18n="proj.common.download">📄 Download report</a>
</div>
<h5 data-i18n="proj.sec19.given">Given data</h5>
<ul>
<li data-i18n="proj.sec19.g1"><strong>Geometry:</strong> cylinder <strong>R = 4500 mm</strong>; frames <strong>550 mm</strong> apart; stringer pitch <strong>150 mm</strong>.</li>
<li data-i18n="proj.sec19.g2"><strong>Material:</strong> UD, <strong>CPT 0.184 mm</strong>.</li>
<li data-i18n="proj.sec19.g3"><strong>Skin:</strong> base <strong>9 plies (2/4/3)</strong>; reinforcement <strong>14 plies (2/8/4)</strong>, <strong>100 × 70 mm</strong> patch.</li>
<li data-i18n="proj.sec19.g4"><strong>Stringers:</strong> <strong>h &lt; 35 mm</strong>, <strong>R ≥ 3 mm</strong>; web <strong>20 plies</strong> (50% 0° / 40% ±45° / 10% 90°); <strong>web = 2× flange</strong>.</li>
<li data-i18n="proj.sec19.g5"><strong>Joints:</strong> clips + <strong>Ø 4.8 mm</strong> fasteners.</li>
</ul>
<h5 data-i18n="proj.common.what">What I did</h5>
<ul>
<li data-i18n="proj.sec19.li1">Built the master geometry (frames &amp; stringers on skin), set pitch and feet widths.</li>
<li data-i18n="proj.sec19.li2">Mapped skin layups, drop-offs and reinforcement footprint.</li>
<li data-i18n="proj.sec19.li3">Sized stringer web/flanges and verified repairability (L1 for Ø4.8 mm).</li>
<li data-i18n="proj.sec19.li4">Defined clip joints and prepared drawings, materials list, and panel weight.</li>
</ul>
<div class="modal-gallery">
<img src="res/projects/section19/catia_iso.png" alt="Master geometry: frames and stringers on fuselage surface" loading="lazy">
<img src="res/projects/section19/laminate_map.png" alt="Skin laminate map with drop-offs and reinforcement" loading="lazy">
<img src="res/projects/section19/stringer_section.png" alt="Stringer web/flange section and clip joint to frame" loading="lazy">
</div>
<hr style="border:none;border-top:1px solid var(--border);margin:8px 0 4px">
<ul class="chips" aria-label="Highlights">
<li class="chip" data-i18n="proj.sec19.ch1">R 4500 mm</li>
<li class="chip" data-i18n="proj.sec19.ch2">Pitch 150 mm</li>
<li class="chip" data-i18n="proj.sec19.ch3">UD CPT 0.184 mm</li>
<li class="chip" data-i18n="proj.sec19.ch4">Clips Ø 4.8 mm</li>
</ul>
</template>
<!-- Handlebar / Rear Subframe -->
<template id="tmpl-handlebar-support">
<h4 data-i18n="proj.handle.h4">Motorbike Rear Subframe — AlSi10Mg (SLM)</h4>
<p data-i18n-html="proj.handle.obj"><strong>Objective —</strong> Design the lightest possible rear saddle frame within the boundary envelope, load-case compliant (static + fatigue), manufacturable by SLM (AlSi10Mg).</p>
<div>
<a class="btn primary" href="res/projects/handlebar/report.pdf" target="_blank" rel="noopener" data-i18n="proj.common.download">📄 Download report</a>
</div>
<h5 data-i18n="proj.common.process">Process</h5>
<ul>
<li data-i18n="proj.handle.p1"><strong>AM setup:</strong> AlSi10Mg; printer SLM <em>NXG XII 600</em> (590 × 560 × 367 mm).</li>
<li data-i18n="proj.handle.p2"><strong>Topology:</strong> stress-based trial (~2.8 kg) → <strong>compliance-based</strong> (~2.06 kg) with rebuilds.</li>
<li data-i18n="proj.handle.p3"><strong>Bolts (VDI 2230):</strong> Subframe M8×4; saddle M5×4; preload &amp; checks via hand calcs + MATLAB from FEA reactions.</li>
<li data-i18n="proj.handle.p4"><strong>Validation (Ansys):</strong> static + fatigue, mesh conv. ~1.5 mm; local refinements near bolts.</li>
</ul>
<h5 data-i18n="proj.common.results">Results</h5>
<ul>
<li data-i18n="proj.handle.r1"><strong>Safety factors:</strong> &gt; 2 static, &gt; 1 fatigue (Goodman).</li>
<li data-i18n="proj.handle.r2"><strong>Deflection:</strong> &lt; 2 mm under defined loads.</li>
<li data-i18n="proj.handle.r3"><strong>Final weight:</strong> ~<strong>656 g</strong> after combined-load map optimization.</li>
</ul>
<div class="modal-gallery">
<img src="res/projects/handlebar/design_space.png" alt="Design vs non-design space for the rear subframe" loading="lazy">
<img src="res/projects/handlebar/topology_outputs.png" alt="Topology optimization outputs (stress- vs compliance-based)" loading="lazy">
<img src="res/projects/handlebar/combined_load_map.png" alt="MATLAB combined-load map used for weight edits" loading="lazy">
<img src="res/projects/handlebar/final_geometry.png" alt="Final subframe geometry and mesh" loading="lazy">
</div>
<hr style="border:none;border-top:1px solid var(--border);margin:8px 0 4px">
<ul class="chips" aria-label="Highlights">
<li class="chip" data-i18n="proj.handle.ch1">AlSi10Mg — SLM</li>
<li class="chip" data-i18n="proj.handle.ch2">Topology-Optimized</li>
<li class="chip" data-i18n="proj.handle.ch3">VDI 2230 bolts</li>
<li class="chip" data-i18n="proj.handle.ch4">SF&gt;2 / SF&gt;1</li>
<li class="chip" data-i18n="proj.handle.ch5">~656 g</li>
</ul>
</template>
<!-- Drone Structure -->
<template id="tmpl-drone-structure">
<h4 data-i18n="proj.drone.h4">Composite drone structure</h4>
<p data-i18n-html="proj.drone.obj"><strong>Objective —</strong> Define laminate schedule and thicknesses to minimize weight while maintaining stiffness and strength on a composite drone frame, with harmonic and impact checks on critical members.</p>
<div>
<a class="btn primary" href="res/projects/drone/report.pdf" target="_blank" rel="noopener" data-i18n="proj.common.download">📄 Download report</a>
</div>
<h5 data-i18n="proj.common.what">What I did</h5>
<ul>
<li data-i18n="proj.drone.li1">Selected laminate families for arms and central plate (ply angles, stacking rules, symmetry/balance).</li>
<li data-i18n="proj.drone.li2">Ran <strong>thickness optimization</strong> under flight-load envelopes (hover, maneuver, landing).</li>
<li data-i18n="proj.drone.li3">Built FEM and extracted <strong>harmonic response</strong> to avoid resonance near rotor frequencies.</li>
<li data-i18n="proj.drone.li4">Performed <strong>impact scenarios</strong> on weak spots (arm-hub joints, landing edges).</li>
</ul>
<h5 data-i18n="proj.common.results">Results</h5>
<ul>
<li data-i18n="proj.drone.r1">Weight reduction vs baseline while keeping <strong>MS ≥ 0</strong> in static checks.</li>
<li data-i18n="proj.drone.r2">Minimum separation to rotor-induced frequencies achieved.</li>
<li data-i18n="proj.drone.r3">Local reinforcements added only where needed after impact assessment.</li>
</ul>
<div class="modal-gallery">
<img src="res/projects/drone/frame_layup.jpg" alt="Layup definition and thickness map on drone frame" loading="lazy">
<img src="res/projects/drone/harmonic.png" alt="Harmonic response — mode proximity to rotor frequencies" loading="lazy">
<img src="res/projects/drone/impact_results.png" alt="Impact FEM results on arm-hub joint" loading="lazy">
</div>
<hr style="border:none;border-top:1px solid var(--border);margin:8px 0 4px">
<ul class="chips" aria-label="Highlights">
<li class="chip" data-i18n="proj.drone.ch1">Layup Optimization</li>
<li class="chip" data-i18n="proj.drone.ch2">Harmonic Check</li>
<li class="chip" data-i18n="proj.drone.ch3">Impact FEM</li>
<li class="chip" data-i18n="proj.drone.ch4">MS ≥ 0</li>
</ul>
</template>
<!-- EDUCATION -->
<section id="education" class="section">
<h2 data-i18n="sections.education">Education</h2>
<div class="timeline">
<div class="card item">
<div class="when">Oct 2024 Jun 2025
<div class="logo-box"><img class="logo logo--square" alt="UPM logo" src="res/logos/UPM.png" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.upm.es" target="_blank" rel="noopener">Master in Composite Materials</a>
<span class="where">AIRBUS Programme, Universidad Politécnica de Madrid</span>
</h3>
<p>Courses: Design & Analysis of Advanced Composite Structures · Abaqus Lab · Space Structures.</p>
</div>
</div>
<div class="card item">
<div class="when">Oct 2022 Dec 2025 / Mar 2026
<div class="logo-box"><img class="logo logo--square" alt="University of Bologna logo" src="res/logos/unibo.svg" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.unibo.it" target="_blank" rel="noopener">MSc in Mechanical Engineering (Minor: Mechanical Design & Modelling)</a>
<span class="where">University of Bologna</span>
</h3>
<p>Courses: Chassis & Body · Surface CAD · Structural CAD · Product Development Processes & Methods.</p>
</div>
</div>
<div class="card item">
<div class="when">Sep 2023 Feb 2024
<div class="logo-box"><img class="logo logo--square" alt="University of Stuttgart logo" src="res/logos/Universitat.svg" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.uni-stuttgart.de" target="_blank" rel="noopener">Erasmus+ Aerospace Engineering</a>
<span class="where">University of Stuttgart</span>
</h3>
<p>Computational Dynamics (Robotics) · Computational Mechanics of Structures · Advanced FEA Technology.</p>
</div>
</div>
<div class="card item">
<div class="when">Sep 2019 Oct 2022
<div class="logo-box"><img class="logo logo--square" alt="University of Bologna logo" src="res/logos/unibo.svg" /></div>
</div>
<div>
<h3 class="brand">
<a class="brand-link" href="https://www.unibo.it" target="_blank" rel="noopener">BSc in Mechanical Engineering</a>
<span class="where">University of Bologna</span>
</h3>
</div>
</div>
</div>
</section>
<!-- SKILLS -->
<section id="skills" class="section">
<h2 data-i18n="sections.skills">Skills</h2>
<div class="card">
<h3 data-i18n="skills.software">Software</h3>
<div class="skills-grid">
<div>CAD: Siemens NX, CATIA V5, PTC Creo</div>
<div>FEA: Ansys, Abaqus, Hypermesh/Nastran, GT-Suite</div>
<div>Programming: Python (pandas, matplotlib, pycatia)</div>
<div data-i18n="skills.data">Data Analysis: Excel, Python</div>
</div>
</div>
<div class="card" style="margin-top:12px">
<h3 data-i18n="skills.soft">Soft Skills</h3>
<div class="chips">
<span class="chip" data-i18n="skills.teamwork">Teamwork</span>
<span class="chip" data-i18n="skills.adapt">Adaptability</span>
<span class="chip" data-i18n="skills.creative">Creative Problem Solving</span>
</div>
</div>
<div class="card" style="margin-top:12px">
<h3 data-i18n="skills.langs">Languages</h3>
<div class="lang-grid">
<div data-i18n="lang.it">Italian — Native</div>
<div data-i18n="lang.es">Spanish — Fluent (C2)</div>
<div data-i18n="lang.en">English — Fluent (C1)</div>
<div data-i18n="lang.de">German — Basic (A1)</div>
</div>
</div>
</section>
<!-- CONTACT -->
<section id="contact" class="section">
<h2 data-i18n="sections.contact">Contact</h2>
<div class="card">
<p data-i18n="contact.cta">Interested in collaborating or need the CV in a different format? Get in touch.</p>
<div style="margin-bottom:18px">
<strong data-i18n="contact.locationTitle">Current location:</strong> Madrid, Spain
<div style="margin:10px 0;">
<iframe src="https://www.openstreetmap.org/export/embed.html?bbox=-3.745%2C40.312%2C-3.543%2C40.563&amp;layer=mapnik&amp;marker=40.4168%2C-3.7038" style="width:100%;height:220px;border-radius:12px;border:1px solid var(--border);" allowfullscreen loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
<div style="font-size:13px;color:var(--muted);margin-top:4px;text-align:right"><a href="https://www.openstreetmap.org/?mlat=40.4168&amp;mlon=-3.7038#map=12/40.4168/-3.7038" target="_blank" rel="noopener" style="color:var(--primary)" data-i18n="contact.viewmap">View larger map</a></div>
</div>
<div style="margin:10px 0 18px 0">
<strong data-i18n="contact.hoursTitle">Contact hours (Madrid time):</strong>
<ul style="margin:6px 0 0 0;padding-left:18px;font-size:15px;color:var(--muted)">
<li data-i18n="contact.hours.weekdays">Monday - Friday: 09:00 - 19:00</li>
<li data-i18n="contact.hours.saturday">Saturday: 09:00 - 19:00</li>
<li data-i18n="contact.hours.sunday">Sunday: 09:00 - 12:00</li>
</ul>
</div>
</div>
<div style="display:flex; gap:10px; flex-wrap:wrap">
<a class="btn" href="mailto:alessan.acunaguardia@gmail.com">📧 alessan.acunaguardia@gmail.com</a>
<a class="btn" href="tel:+393277671048">📱 +39 327 767 1048</a>
<a class="btn" href="https://www.linkedin.com/in/aleacuna" target="_blank" rel="noopener">💼 linkedin.com/in/aleacuna</a>
</div>
</div>
</section>
<section class="footer">
<div>© <span id="year"></span> Alessandro Acuna · <span data-i18n="footer.updated">Last updated:</span> <span id="updated"></span></div>
</section>
</main>
<!-- DIALOG PROGETTO -->
<dialog class="project-modal" id="projectModal" aria-modal="true" role="dialog" aria-labelledby="modalTitle">
<div class="modal-header">
<h3 class="modal-title" id="modalTitle" data-i18n="modal.title">Project details</h3>
<button class="btn modal-close" type="button" aria-label="Chiudi"></button>
</div>
<div class="modal-body" id="projectModalBody"></div>
<div class="modal-actions">
<button class="btn modal-close" type="button" data-i18n="modal.close">Close</button>
</div>
</dialog>
<!-- DIALOG LIGHTBOX -->
<dialog id="lightbox" aria-labelledby="lightboxCaption">
<div class="lightbox-wrap">
<button class="btn lightbox-close" type="button" aria-label="Close"></button>
<figure class="lightbox-figure">
<img id="lightboxImg" class="lightbox-img" src="" alt="">
<figcaption id="lightboxCaption" class="lightbox-caption"></figcaption>
</figure>
</div>
</dialog>
<!-- MODALI -->
<script>
(function(){
const modal = document.getElementById('projectModal');
const body = document.getElementById('projectModalBody');
const titleEl = modal.querySelector('.modal-title');
let lastTrigger = null;
const getFocusables = () =>
modal.querySelectorAll('button,[href],input,select,textarea,[tabindex]:not([tabindex="-1"])');
document.addEventListener('click', (e)=>{
const card = e.target.closest('.project[data-modal]');
if(!card) return;
lastTrigger = card;
const tmplId = card.getAttribute('data-modal');
const tmpl = document.getElementById(tmplId);
if(!tmpl){ console.warn('Template non trovato:', tmplId); return; }
const cardTitle = card.querySelector('h3')?.textContent?.trim() || 'Dettagli progetto';
titleEl.textContent = cardTitle;
body.innerHTML = '';
body.appendChild(tmpl.content.cloneNode(true));
// Re-applica traduzioni ai contenuti appena iniettati
if(window.__i18n && typeof window.__i18n.apply === 'function'){
window.__i18n.apply();
}
if(typeof modal.showModal === 'function'){ modal.showModal(); }
else { modal.setAttribute('open',''); }
setTimeout(()=>{ getFocusables()[0]?.focus(); }, 0);
document.body.style.overflow = 'hidden';
});
modal.addEventListener('click', (e)=>{
if(e.target.closest('.modal-close')) modal.close();
});
modal.addEventListener('click', (e)=>{
const r = modal.getBoundingClientRect();
const inside = (e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom);
if(!inside) modal.close();
});
modal.addEventListener('cancel', (e)=>{ e.preventDefault(); modal.close(); });
modal.addEventListener('close', ()=>{
document.body.style.overflow = '';
lastTrigger?.focus();
});
modal.addEventListener('keydown',(e)=>{
if(e.key !== 'Tab') return;
const f = [...getFocusables()];
if(!f.length) return;
const i = f.indexOf(document.activeElement);
if(e.shiftKey && (i === 0 || i === -1)){ e.preventDefault(); f[f.length-1].focus(); }
else if(!e.shiftKey && (i === f.length-1)){ e.preventDefault(); f[0].focus(); }
});
})();
</script>
<!-- LIGHTBOX -->
<script>
(function(){
const lb = document.getElementById('lightbox');
const img = document.getElementById('lightboxImg');
const cap = document.getElementById('lightboxCaption');
document.addEventListener('click', (e)=>{
const targetImg = e.target.closest('.modal-gallery img');
if(!targetImg) return;
img.src = targetImg.src;
img.alt = targetImg.alt || '';
cap.textContent = targetImg.closest('figure')?.querySelector('figcaption')?.textContent || targetImg.alt || '';
if(typeof lb.showModal === 'function'){ lb.showModal(); }
else { lb.setAttribute('open',''); }
});
lb.addEventListener('click', (e)=>{
if(e.target.closest('.lightbox-close')) lb.close();
});
lb.addEventListener('click', (e)=>{
const r = lb.getBoundingClientRect();
const inside = (e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom);
if(!inside) lb.close();
});
lb.addEventListener('cancel', (e)=>{ e.preventDefault(); lb.close(); });
})();
</script>
<!-- i18n + CUSTOM LANGUAGE UI -->
<script>
(function(){
const DEFAULT_LANG = 'it';
const STORAGE_KEY = 'site-lang';
const t = {
/* =========================
ITALIANO
========================= */
it: {
'cta.downloadCv': '⬇️ Scarica CV',
'cta.downloadCv@title': 'Scarica il CV',
'nav.about':'About',
'nav.experience':'Esperienza',
'nav.projects':'Progetti',
'nav.education':'Formazione',
'nav.skills':'Competenze',
'nav.contact':'Contatti',
'hero.role':'Structural Engineer',
'hero.blurb':'Ingegnere Meccanico appassionato di aerospazio e advanced manufacturing, specializzato nello sviluppo di componenti strutturali dal concept alla validazione FEM avanzata. Focus su materiali compositi, CAD, FEA e simulazioni esplicite.',
'availability.title':'Disponibilità',
'availability.text':'Attualmente in Airbus (contratto fino a Dic 2025). Disponibile per un nuovo ruolo da Gennaio 2026.',
'availability.location':'Madrid, Spain · DE IT ES UK',
'keycompetencies.title':'Competenze chiave',
'keycompetencies.damageTolerance':'Damage Tolerance',
'keycompetencies.buckling':'Buckling & Pre-sizing',
'keycompetencies.impact':'Impact & Energy Absorption',
'keycompetencies.drawing':'Drawings & GD&T',
'keycompetencies.data':'Data Analysis',
'sections.experience':'Esperienza',
'sections.projects':'Progetti Accademici',
'sections.education':'Formazione',
'sections.skills':'Competenze',
'sections.contact':'Contatti',
'projects.card.stiff.title':'Pannelli compositi irrigiditi',
'projects.card.stiff.teaser':'Verifiche di buckling e damage tolerance, ottimizzazione layup (skin & stringers), verifica deflessioni. <span class="where">UPM · FebMag 2025</span>',
'projects.card.hashin.title':'Laminato composito — Hashin (Abaqus)',
'projects.card.hashin.teaser':'Provino UD a trazione vs. compressione; failure ply-by-ply con Hashin; analisi FEM. <span class="where">UPM · GenMar 2025</span>',
'projects.card.sec19.title':'Sezione 19 — fusoliera posteriore (Skin & Stringers)',
'projects.card.sec19.teaser':'Skin laminate & concept stringers, drop-off, rinforzi, giunti a frame (clip, Ø4.8 mm). <span class="where">UPM · GenMar 2024</span>',
'projects.card.handlebar.title':'Subframe posteriore moto — AlSi10Mg (SLM)',
'projects.card.handlebar.teaser':'Topology optimization, bulloneria VDI 2230, validazione static/fatica (Ansys), minimizzazione peso. <span class="where">Unibo · SetDic 2024</span>',
'projects.card.drone.title':'Struttura drone in composito',
'projects.card.drone.teaser':'Definizione lamina, ottimizzazione spessori, analisi armoniche & impatto. <span class="where">Unibo · FebGiu 2023</span>',
'skills.software':'Software',
'skills.data':'Data Analysis: Excel, Python',
'skills.soft':'Soft Skills',
'skills.teamwork':'Teamwork',
'skills.adapt':'Adaptability',
'skills.creative':'Creative Problem Solving',
'skills.langs':'Lingue',
'lang.it':'Italiano — Madrelingua',
'lang.es':'Spagnolo — Fluente (C2)',
'lang.en':'Inglese — Fluente (C1)',
'lang.de':'Tedesco — Base (A1)',
'contact.cta':'Interessa collaborare o vuoi il CV in un formato diverso? Scrivimi.',
'contact.locationTitle':'Località attuale:',
'contact.viewmap':'Apri mappa',
'contact.hoursTitle':'Orari di contatto (ora di Madrid):',
'contact.hours.weekdays':'Lunedì - Venerdì: 09:00 - 19:00',
'contact.hours.saturday':'Sabato: 09:00 - 19:00',
'contact.hours.sunday':'Domenica: 09:00 - 12:00',
'footer.updated':'Ultimo aggiornamento:',
'modal.title':'Dettagli progetto',
'modal.close':'Chiudi',
/* EXPERIENCE (IT) */
'exp.airbus.title':'AIRBUS - Structural Design & Analysis Engineer',
'exp.airbus.where':'Madrid, ES',
'exp.airbus.p1':'Sviluppo e valutazione di <strong>riparazioni</strong> per componenti in composito e metallo.',
'exp.airbus.p2':'Progettazione parti per <strong>A350 HTP</strong> e <strong>Sezione 19</strong> (fusoliera posteriore) in <strong>CATIA V5</strong>.',
'exp.airbus.p3':'Interfaccia Design Office in produzione, garantendo integrità strutturale e compliance.',
'exp.airbus.p4':'Sviluppo di <strong>modelli numerici</strong> e simulazioni esplicite su meccanismi di danno nei compositi.',
'exp.dlr.title':'DLR - Tesi di Laurea · R&D Engineer',
'exp.dlr.where':'Stoccarda, DE',
'exp.dlr.p1':'Tesi per il progetto UE <strong>r-LightBioCom</strong> su compositi sostenibili ad alte prestazioni per automotive/aerospazio.',
'exp.dlr.p2':'Calcolo dellimpronta ambientale per 1 kg di materiali con <strong>openLCA</strong>.',
'exp.dlr.p3':'Test di compressione <strong>quasi-statici e dinamici</strong> su cores (honeycomb/foam) e definizione di <strong>KPI</strong> integrando <em>LCA</em> e prestazioni meccaniche.',
'exp.dlr.p4':'Implementazione e calibrazione <strong>MAT cards</strong> in <strong>LS-DYNA</strong> dai dati sperimentali.',
'exp.dlr.p5':'<strong>Analisi FEM</strong> statiche/dinamiche per validare i risultati sperimentali.',
'exp.unibo.title':'UniBo Motorsport - Stress & Design Engineer',
'exp.unibo.where':'Bologna, IT',
'exp.unibo.p1':'<strong>Design</strong> e <strong>Stress Analysis</strong> di parti automotive (stampi monoscocca, supporto cruscotto, imbragatura pilota).',
'exp.unibo.p2':'<strong>FEM</strong> su telaio CFRP con carichi multipli; indagine sulle cause di delaminazione.',
'exp.dvp.title':'D.V.P. Vacuum Technology - Tesi Triennale · R&D Engineer',
'exp.dvp.where':'Bologna, IT',
'exp.dvp.p1':'Campagne sperimentali su portate e perdite di carico in turbine e valvole.',
'exp.dvp.p2':'Sviluppo di <strong>mappe prestazionali</strong> in <strong>GT-Suite</strong> e validazione modello.',
'exp.cpc.title':'CPC Group - Composite Laminator',
'exp.cpc.where':'Modena, IT',
'exp.cpc.p1':'Laminazione di stampi <strong>CFRP</strong> e di un telaio per il team Formula SAE.',
/* PROGETTI — common */
'proj.common.what':'Cosa ho fatto',
'proj.common.model':'Modello',
'proj.common.tools':'Strumenti',
'proj.common.results':'Risultati',
'proj.common.process':'Processo',
'proj.common.download':'📄 Scarica report',
/* === PROGETTI — dettagli (IT) === */
'proj.stiff.h4':'Pannelli compositi irrigiditi',
'proj.stiff.obj':'<strong>Obiettivo —</strong> Progettare e validare pannelli CFRP irrigiditi minimizzando il peso e rispettando i requisiti di buckling e damage tolerance.',
'proj.stiff.li1':'Definizione dei <strong>layup</strong> per skin e stringers (simmetria, bilanciamento, percentuali).',
'proj.stiff.li2':'<strong>Predimensionamento</strong> dei rinforzi e verifica di <strong>buckling</strong> locale/globale e <strong>crippling</strong> stringer.',
'proj.stiff.li3':'Verifica <strong>deflessioni</strong> e <strong>MS</strong> vs requisiti.',
'proj.stiff.li4':'<strong>Ottimizzazione spessori</strong> con feedback FEM.',
'proj.stiff.li5':'Uso delle <strong>forme modali</strong> di buckling per guidare il redesign.',
'proj.stiff.tools':'Abaqus / Ansys; fogli ingegneristici; regole aerospaziali di laminazione.',
'proj.stiff.r1':'Riduzione di peso: <strong>≈ XY%</strong>.',
'proj.stiff.r2':'<strong>MS ≥ 0</strong> per buckling/crippling nei casi critici.',
'proj.stiff.r3':'<strong>Deflessioni ≤</strong> limite.',
'proj.stiff.cap1':'Vista pannello & stringers',
'proj.stiff.cap2':'Modi di buckling 13 (FEM)',
'proj.stiff.cap3':'Tabella layup & spessori',
'proj.stiff.ch1':'Buckling & Crippling',
'proj.stiff.ch2':'Layup ottimizzato',
'proj.stiff.ch3':'FEM-Driven',
'proj.stiff.ch4':'MS ≥ 0',
'proj.hashin.h4':'Laminato composito — Hashin (Abaqus)',
'proj.hashin.obj':'<strong>Obiettivo —</strong> Simulare un laminato UD a trazione e compressione con <em>inizio danno Hashin</em> per identificare il first-ply failure e confrontare la capacità a trazione/pressione.',
'proj.hashin.m1':'Provino: <strong>100 × 20 mm</strong>, <strong>10 lamine × 0.25 mm = 2.5 mm</strong>; layup simmetrico <strong>[0°, ±45°, 0°, 90°]s</strong>.',
'proj.hashin.m2':'Elementi: <strong>S4R</strong> (≈2 mm); materiale: lamina UD con elastico + Hashin.',
'proj.hashin.m3':'Vincoli/Carico: bordo inferiore vincolato; bordo superiore accoppiato a RP con spostamento prescr. in Y.',
'proj.hashin.m4':'Danno: <strong>Hashin initiation</strong> (no evoluzione). Output: HSNFTCRT, HSNFCCRT, HSNMTCRT, HSNMCCRT.',
'proj.hashin.r1':'<strong>Trazione:</strong> 90° matrix-tension → ±45° matrix-shear → 0° fiber-tension; <strong>UTS ≈ 413 MPa</strong>.',
'proj.hashin.r2':'<strong>Compressione:</strong> ±45° matrix-compression → 90° matrix-compression → 0° fiber-compression; <strong>UCS ≈ 336 MPa</strong>.',
'proj.hashin.r3':'<strong>Rapporto:</strong> UTS/UCS ≈ <strong>1.23</strong>.',
'proj.hashin.cap1':'Mesh & layup (S4R)',
'proj.hashin.cap2':'Mappe Hashin — first-ply',
'proj.hashin.cap3':'σ–ε trazione (drop di rigidezza)',
'proj.hashin.cap4':'σ–ε compressione (drop di rigidezza)',
'proj.hashin.ch1':'Hashin initiation',
'proj.hashin.ch2':'[0/±45/0/90]s',
'proj.hashin.ch3':'UTS 413 MPa',
'proj.hashin.ch4':'UCS 336 MPa',
'proj.hashin.ch5':'Rapporto ≈ 1.23',
'proj.sec19.h4':'Sezione 19 — fusoliera (Skin & Stringers)',
'proj.sec19.obj':'<strong>Obiettivo —</strong> Definire skin e stringers in composito, rinforzi, drop-off e giunti ai frame (clip, Ø4.8 mm) per un pannello tra i frame AB.',
'proj.sec19.given':'Dati di base',
'proj.sec19.g1':'<strong>Geometria:</strong> cilindro <strong>R = 4500 mm</strong>; frame distanti <strong>550 mm</strong>; pitch stringer <strong>150 mm</strong>.',
'proj.sec19.g2':'<strong>Materiale:</strong> UD, <strong>CPT 0.184 mm</strong>.',
'proj.sec19.g3':'<strong>Skin:</strong> base <strong>9 lamine (2/4/3)</strong>; rinforzo <strong>14 lamine (2/8/4)</strong>, patch <strong>100 × 70 mm</strong>.',
'proj.sec19.g4':'<strong>Stringers:</strong> <strong>h &lt; 35 mm</strong>, <strong>R ≥ 3 mm</strong>; anima <strong>20 lamine</strong> (50% 0° / 40% ±45° / 10% 90°); <strong>anima = 2× flange</strong>.',
'proj.sec19.g5':'<strong>Giunzioni:</strong> clip + <strong>Ø 4.8 mm</strong> fasteners.',
'proj.sec19.li1':'Geometria master (frame & stringer sulla skin), pitch e piedi.',
'proj.sec19.li2':'Mappatura layup skin, drop-off e footprint di rinforzo.',
'proj.sec19.li3':'Sizing web/flange e verifiche riparabilità (L1 con Ø4.8).',
'proj.sec19.li4':'Definizione clip e preparazione tavole/materiali/peso.',
'proj.sec19.ch1':'R 4500 mm',
'proj.sec19.ch2':'Pitch 150 mm',
'proj.sec19.ch3':'UD CPT 0.184 mm',
'proj.sec19.ch4':'Clip Ø 4.8 mm',
'proj.handle.h4':'Subframe posteriore moto — AlSi10Mg (SLM)',
'proj.handle.obj':'<strong>Obiettivo —</strong> Progettare il telaio sellino più leggero entro gli ingombri, conforme ai carichi (statico + fatica), producibile in SLM (AlSi10Mg).',
'proj.handle.p1':'<strong>AM:</strong> AlSi10Mg; stampante SLM <em>NXG XII 600</em> (590 × 560 × 367 mm).',
'proj.handle.p2':'<strong>Topologia:</strong> stress-based (~2.8 kg) → <strong>compliance-based</strong> (~2.06 kg).',
'proj.handle.p3':'<strong>Bulloni (VDI 2230):</strong> Subframe M8×4; sella M5×4; preload + check da reazioni FEM.',
'proj.handle.p4':'<strong>Validazione (Ansys):</strong> statico + fatica; mesh ~1.5 mm.',
'proj.handle.r1':'<strong>Fattori di sicurezza:</strong> &gt; 2 statico, &gt; 1 fatica.',
'proj.handle.r2':'<strong>Deflessione:</strong> &lt; 2 mm.',
'proj.handle.r3':'<strong>Peso finale:</strong> ~<strong>656 g</strong>.',
'proj.handle.ch1':'AlSi10Mg — SLM',
'proj.handle.ch2':'Topology-Optimized',
'proj.handle.ch3':'VDI 2230',
'proj.handle.ch4':'SF&gt;2 / SF&gt;1',
'proj.handle.ch5':'~656 g',
'proj.drone.h4':'Struttura drone in composito',
'proj.drone.obj':'<strong>Obiettivo —</strong> Definire layup e spessori per minimizzare il peso mantenendo rigidezza/resistenza; verifiche armoniche e impatto.',
'proj.drone.li1':'Selezione famiglie di laminati per bracci e piastra.',
'proj.drone.li2':'<strong>Ottimizzazione spessori</strong> su inviluppo carichi di volo.',
'proj.drone.li3':'FEM con <strong>risposta armonica</strong> lontano da frequenze rotori.',
'proj.drone.li4':'Scenari di <strong>impatto</strong> su giunti braccio-mozzo e bordi datterraggio.',
'proj.drone.r1':'Riduzione peso con <strong>MS ≥ 0</strong>.',
'proj.drone.r2':'Separazione minima da frequenze indotte dai rotori.',
'proj.drone.r3':'Rinforzi locali solo dove necessari.',
'proj.drone.ch1':'Layup Optimization',
'proj.drone.ch2':'Harmonic Check',
'proj.drone.ch3':'Impact FEM',
'proj.drone.ch4':'MS ≥ 0'
},
/* =========================
ENGLISH
========================= */
en: {
'cta.downloadCv': '⬇️ Download CV',
'cta.downloadCv@title': 'Download CV',
'nav.about':'About',
'nav.experience':'Experience',
'nav.projects':'Projects',
'nav.education':'Education',
'nav.skills':'Skills',
'nav.contact':'Contact',
'hero.role':'Structural Engineer',
'hero.blurb':'Mechanical Engineer passionate about aerospace and advanced manufacturing, specialized in developing structural components from concept to advanced FEM validation. Focus on composite materials, CAD, FEA, and explicit simulations.',
'availability.title':'Availability',
'availability.text':'Currently at Airbus (contract until Dec 2025). Open to a new Structural Engineer role from January 2026.',
'availability.location':'Madrid, Spain · DE IT ES UK',
'keycompetencies.title':'Key competencies',
'keycompetencies.damageTolerance':'Damage Tolerance',
'keycompetencies.buckling':'Buckling & Pre-sizing',
'keycompetencies.impact':'Impact & Energy Absorption',
'keycompetencies.drawing':'Drawings & GD&T',
'keycompetencies.data':'Data Analysis',
'sections.experience':'Experience',
'sections.projects':'Academic Projects',
'sections.education':'Education',
'sections.skills':'Skills',
'sections.contact':'Contact',
'projects.card.stiff.title':'Composite stiffened panels',
'projects.card.stiff.teaser':'Buckling & damage tolerance checks, layup optimization (skin & stringers), deflection verification. <span class="where">UPM · FebMay 2025</span>',
'projects.card.hashin.title':'Composite laminate — Hashin (Abaqus)',
'projects.card.hashin.teaser':'UD laminate under tension vs compression; ply-by-ply failure using Hashin initiation; FEM-driven analysis. <span class="where">UPM · JanMar 2025</span>',
'projects.card.sec19.title':'Rear Fuselage — Section 19 (Skin & Stringers)',
'projects.card.sec19.teaser':'Skin laminate & stringer concept, drop-offs, reinforcements, frame joints (clips, Ø4.8 mm). <span class="where">UPM · JanMar 2024</span>',
'projects.card.handlebar.title':'Motorbike rear subframe — AlSi10Mg (SLM)',
'projects.card.handlebar.teaser':'Topology optimization, VDI 2230 bolted joints, static/fatigue validation (Ansys), weight minimization. <span class="where">Unibo · SepDec 2024</span>',
'projects.card.drone.title':'Composite drone structure',
'projects.card.drone.teaser':'Lamination definition, thickness optimization, harmonic & impact FEM analyses. <span class="where">Unibo · FebJun 2023</span>',
'skills.software':'Software',
'skills.data':'Data Analysis: Excel, Python',
'skills.soft':'Soft Skills',
'skills.teamwork':'Teamwork',
'skills.adapt':'Adaptability',
'skills.creative':'Creative Problem Solving',
'skills.langs':'Languages',
'lang.it':'Italian — Native',
'lang.es':'Spanish — Fluent (C2)',
'lang.en':'English — Fluent (C1)',
'lang.de':'German — Basic (A1)',
'contact.cta':'Interested in collaborating or need the CV in a different format? Get in touch.',
'contact.locationTitle':'Current location:',
'contact.viewmap':'View larger map',
'contact.hoursTitle':'Contact hours (Madrid time):',
'contact.hours.weekdays':'Monday - Friday: 09:00 - 19:00',
'contact.hours.saturday':'Saturday: 09:00 - 19:00',
'contact.hours.sunday':'Sunday: 09:00 - 12:00',
'footer.updated':'Last updated:',
'modal.title':'Project details',
'modal.close':'Close',
/* EXPERIENCE */
'exp.airbus.title':'AIRBUS - Structural Design & Analysis Engineer',
'exp.airbus.where':'Madrid, ES',
'exp.airbus.p1':'Development and assessment of <strong>repair solutions</strong> for composite and metallic components.',
'exp.airbus.p2':'Part design for <strong>A350 HTP</strong> and <strong>Section 19</strong> (rear fuselage) in <strong>CATIA V5</strong>.',
'exp.airbus.p3':'Design Office interface in production, ensuring structural integrity and compliance.',
'exp.airbus.p4':'Development of <strong>numerical models</strong> and explicit simulations for composite damage mechanisms.',
'exp.dlr.title':'DLR - Master Thesis · R&amp;D Engineer',
'exp.dlr.where':'Stuttgart, DE',
'exp.dlr.p1':'Thesis for the EU project <strong>r-LightBioCom</strong> on sustainable high-performance composites for automotive/aerospace.',
'exp.dlr.p2':'Computed environmental footprint for 1 kg of materials in <strong>openLCA</strong>.',
'exp.dlr.p3':'<strong>Quasi-static &amp; dynamic</strong> compression tests on cores (honeycomb/foam) and <strong>KPIs</strong> combining <em>LCA</em> and mechanical performance.',
'exp.dlr.p4':'Implementation and calibration of <strong>LS-DYNA MAT cards</strong> from test data.',
'exp.dlr.p5':'<strong>FEM</strong> static/dynamic analyses to validate experiments.',
'exp.unibo.title':'UniBo Motorsport - Stress & Design Engineer',
'exp.unibo.where':'Bologna, IT',
'exp.unibo.p1':'<strong>Design</strong> and <strong>Stress Analysis</strong> of automotive parts (monocoque moulds, dashboard support, driver harness).',
'exp.unibo.p2':'<strong>FEM</strong> on CFRP chassis under multiple loads; investigation of delamination causes.',
'exp.dvp.title':'D.V.P. Vacuum Technology - Bachelor Thesis · R&amp;D Engineer',
'exp.dvp.where':'Bologna, IT',
'exp.dvp.p1':'Experimental campaigns on flow rates and pressure losses in turbines and control valves.',
'exp.dvp.p2':'Built <strong>performance maps</strong> in <strong>GT-Suite</strong> and validated the model.',
'exp.cpc.title':'CPC Group - Composite Laminator',
'exp.cpc.where':'Modena, IT',
'exp.cpc.p1':'Lamination of <strong>CFRP</strong> moulds and a chassis for Formula SAE team.',
/* === PROJECT DETAILS (EN) === */
'proj.common.what':'What I did',
'proj.common.model':'Model',
'proj.common.tools':'Tools',
'proj.common.results':'Results',
'proj.common.process':'Process',
'proj.common.download':'📄 Download report',
'proj.stiff.h4':'Composite stiffened panels',
'proj.stiff.obj':'<strong>Objective —</strong> Design and validate CFRP panels with stringers, minimizing weight while meeting buckling and damage-tolerance requirements under the defined load cases.',
'proj.stiff.li1':'Defined <strong>layups</strong> for skin and stringers (symmetry, balance, ply percentages).',
'proj.stiff.li2':'<strong>Pre-sized</strong> reinforcements and verified <strong>local/global buckling</strong> and <strong>stringer crippling</strong>.',
'proj.stiff.li3':'Checked <strong>deflections</strong> and <strong>margins of safety (MS)</strong> vs requirements.',
'proj.stiff.li4':'Performed <strong>thickness optimization</strong> (weight vs stiffness/stability) with FEM feedback.',
'proj.stiff.li5':'Used <strong>buckling mode shapes</strong> to guide redesign iterations.',
'proj.stiff.tools':'Abaqus / Ansys for FEM; engineering spreadsheets for trade-offs; aerospace laminate rules.',
'proj.stiff.r1':'Weight reduction: <strong>≈ XY%</strong> (replace with your actual value).',
'proj.stiff.r2':'<strong>MS ≥ 0</strong> for buckling and crippling on critical load cases.',
'proj.stiff.r3':'<strong>Deflections ≤</strong> specified limit.',
'proj.stiff.cap1':'Panel & stringers overview',
'proj.stiff.cap2':'Buckling modes 13 (FEM)',
'proj.stiff.cap3':'Layup & thickness table',
'proj.stiff.ch1':'Buckling & Crippling',
'proj.stiff.ch2':'Optimized Layup',
'proj.stiff.ch3':'FEM-Driven',
'proj.stiff.ch4':'MS ≥ 0',
'proj.hashin.h4':'Composite laminate — Hashin (Abaqus)',
'proj.hashin.obj':'<strong>Objective —</strong> Simulate a UD laminate under tension and compression using <em>Hashin damage initiation</em> to identify ply-by-ply failure and compare tensile vs compressive capacity.',
'proj.hashin.m1':'Coupon: <strong>100 × 20 mm</strong>, <strong>10 plies × 0.25 mm = 2.5 mm</strong>; symmetric layup <strong>[0°, ±45°, 0°, 90°]s</strong>.',
'proj.hashin.m2':'Elements: <strong>S4R</strong> shell mesh (~2 mm); material: UD lamina with elastic + Hashin inputs.',
'proj.hashin.m3':'BC/Load: bottom clamped; top edge coupled to a Reference Point with prescribed Y-displacement.',
'proj.hashin.m4':'Damage model: <strong>Hashin initiation</strong> (no damage evolution). Outputs: HSNFTCRT, HSNFCCRT, HSNMTCRT, HSNMCCRT.',
'proj.hashin.r1':'<strong>Tension:</strong> 90° matrix-tension → ±45° matrix-shear → 0° fiber-tension; <strong>UTS ≈ 413 MPa</strong>.',
'proj.hashin.r2':'<strong>Compression:</strong> ±45° matrix-compression → 90° matrix-compression → 0° fiber-compression; <strong>UCS ≈ 336 MPa</strong>.',
'proj.hashin.r3':'<strong>Strength ratio:</strong> UTS/UCS ≈ <strong>1.23</strong> (≈23% stronger in tension).',
'proj.hashin.cap1':'Mesh & layup (S4R shells)',
'proj.hashin.cap2':'Hashin maps — first-ply failure',
'proj.hashin.cap3':'Tension σ–ε (staged stiffness drops)',
'proj.hashin.cap4':'Compression σ–ε (staged stiffness drops)',
'proj.hashin.ch1':'Hashin initiation',
'proj.hashin.ch2':'[0/±45/0/90]s',
'proj.hashin.ch3':'UTS 413 MPa',
'proj.hashin.ch4':'UCS 336 MPa',
'proj.hashin.ch5':'Ratio ≈ 1.23',
'proj.sec19.h4':'Rear Fuselage — Section 19 (Skin & Stringers)',
'proj.sec19.obj':'<strong>Objective —</strong> Define composite skin and stringer concept, reinforcements, drop-offs, and frame joints (clips, Ø4.8 mm) for a fuselage bay between Frames AB.',
'proj.sec19.given':'Given data',
'proj.sec19.g1':'<strong>Geometry:</strong> cylinder <strong>R = 4500 mm</strong>; frames <strong>550 mm</strong> apart; stringer pitch <strong>150 mm</strong>.',
'proj.sec19.g2':'<strong>Material:</strong> UD, <strong>CPT 0.184 mm</strong>.',
'proj.sec19.g3':'<strong>Skin:</strong> base <strong>9 plies (2/4/3)</strong>; reinforcement <strong>14 plies (2/8/4)</strong>, <strong>100 × 70 mm</strong> patch.',
'proj.sec19.g4':'<strong>Stringers:</strong> <strong>h &lt; 35 mm</strong>, <strong>R ≥ 3 mm</strong>; web <strong>20 plies</strong> (50% 0° / 40% ±45° / 10% 90°); <strong>web = 2× flange</strong>.',
'proj.sec19.g5':'<strong>Joints:</strong> clips + <strong>Ø 4.8 mm</strong> fasteners.',
'proj.sec19.li1':'Built the master geometry (frames & stringers on skin), set pitch and feet widths.',
'proj.sec19.li2':'Mapped skin layups, drop-offs and reinforcement footprint.',
'proj.sec19.li3':'Sized stringer web/flanges and verified repairability (L1 for Ø4.8 mm).',
'proj.sec19.li4':'Defined clip joints and prepared drawings, materials list, and panel weight.',
'proj.sec19.ch1':'R 4500 mm',
'proj.sec19.ch2':'Pitch 150 mm',
'proj.sec19.ch3':'UD CPT 0.184 mm',
'proj.sec19.ch4':'Clips Ø 4.8 mm',
'proj.handle.h4':'Motorbike Rear Subframe — AlSi10Mg (SLM)',
'proj.handle.obj':'<strong>Objective —</strong> Design the lightest possible rear saddle frame within the boundary envelope, load-case compliant (static + fatigue), manufacturable by SLM (AlSi10Mg).',
'proj.handle.p1':'<strong>AM setup:</strong> AlSi10Mg; printer SLM <em>NXG XII 600</em> (590 × 560 × 367 mm).',
'proj.handle.p2':'<strong>Topology:</strong> stress-based trial (~2.8 kg) → <strong>compliance-based</strong> (~2.06 kg) with rebuilds.',
'proj.handle.p3':'<strong>Bolts (VDI 2230):</strong> Subframe M8×4; saddle M5×4; preload & checks via hand calcs + MATLAB from FEA reactions.',
'proj.handle.p4':'<strong>Validation (Ansys):</strong> static + fatigue, mesh conv. ~1.5 mm; local refinements near bolts.',
'proj.handle.r1':'<strong>Safety factors:</strong> &gt; 2 static, &gt; 1 fatigue (Goodman).',
'proj.handle.r2':'<strong>Deflection:</strong> &lt; 2 mm under defined loads.',
'proj.handle.r3':'<strong>Final weight:</strong> ~<strong>656 g</strong> after combined-load map optimization.',
'proj.handle.ch1':'AlSi10Mg — SLM',
'proj.handle.ch2':'Topology-Optimized',
'proj.handle.ch3':'VDI 2230 bolts',
'proj.handle.ch4':'SF&gt;2 / SF&gt;1',
'proj.handle.ch5':'~656 g',
'proj.drone.h4':'Composite drone structure',
'proj.drone.obj':'<strong>Objective —</strong> Define laminate schedule and thicknesses to minimize weight while maintaining stiffness and strength on a composite drone frame, with harmonic and impact checks on critical members.',
'proj.drone.li1':'Selected laminate families for arms and central plate (ply angles, stacking rules, symmetry/balance).',
'proj.drone.li2':'Ran <strong>thickness optimization</strong> under flight-load envelopes (hover, maneuver, landing).',
'proj.drone.li3':'Built FEM and extracted <strong>harmonic response</strong> to avoid resonance near rotor frequencies.',
'proj.drone.li4':'Performed <strong>impact scenarios</strong> on weak spots (arm-hub joints, landing edges).',
'proj.drone.r1':'Weight reduction vs baseline while keeping <strong>MS ≥ 0</strong> in static checks.',
'proj.drone.r2':'Minimum separation to rotor-induced frequencies achieved.',
'proj.drone.r3':'Local reinforcements added only where needed after impact assessment.',
'proj.drone.ch1':'Layup Optimization',
'proj.drone.ch2':'Harmonic Check',
'proj.drone.ch3':'Impact FEM',
'proj.drone.ch4':'MS ≥ 0'
},
/* =========================
DEUTSCH (mit vollständigen Modal-Übersetzungen)
========================= */
de: {
'cta.downloadCv': '⬇️ Lebenslauf herunterladen',
'cta.downloadCv@title': 'Lebenslauf herunterladen',
'nav.about':'Über mich',
'nav.experience':'Erfahrung',
'nav.projects':'Projekte',
'nav.education':'Ausbildung',
'nav.skills':'Fähigkeiten',
'nav.contact':'Kontakt',
'hero.role':'Strukturingenieur',
'hero.blurb':'Maschinenbauingenieur mit Leidenschaft für Luft- und Raumfahrt sowie Advanced Manufacturing; Entwicklung von Strukturbauteilen vom Konzept bis zur FEM-Validierung. Fokus auf Verbundwerkstoffe, CAD, FEA und explizite Simulationen.',
'availability.title':'Verfügbarkeit',
'availability.text':'Derzeit bei Airbus (Vertrag bis Dez 2025). Ab Januar 2026 verfügbar.',
'availability.location':'Madrid, Spanien · DE IT ES UK',
'keycompetencies.title':'Kernkompetenzen',
'keycompetencies.damageTolerance':'Schadens­toleranz',
'keycompetencies.buckling':'Beulen & Vordimensionierung',
'keycompetencies.impact':'Aufprall & Energieaufnahme',
'keycompetencies.drawing':'Zeichnungen & GD&T',
'keycompetencies.data':'Datenanalyse',
'sections.experience':'Erfahrung',
'sections.projects':'Akademische Projekte',
'sections.education':'Ausbildung',
'sections.skills':'Fähigkeiten',
'sections.contact':'Kontakt',
'projects.card.stiff.title':'Versteifte Verbundpaneele',
'projects.card.stiff.teaser':'Beul- & Schadens­toleranzprüfungen, Layup-Optimierung (Skin & Stringer), Durchbiegungsprüfung. <span class="where">UPM · FebMai 2025</span>',
'projects.card.hashin.title':'Verbundlaminat — Hashin (Abaqus)',
'projects.card.hashin.teaser':'UD-Laminat Zug vs. Druck; ply-by-ply Versagen mit Hashin; FEM-gestützte Analyse. <span class="where">UPM · JanMär 2025</span>',
'projects.card.sec19.title':'Heckrumpf — Sektion 19 (Skin & Stringers)',
'projects.card.sec19.teaser':'Skin-Laminat & Stringer-Konzept, Drop-offs, Verstärkungen, Rahmenverbindungen (Clips, Ø4,8 mm). <span class="where">UPM · JanMär 2024</span>',
'projects.card.handlebar.title':'Motorrad-Heckrahmen — AlSi10Mg (SLM)',
'projects.card.handlebar.teaser':'Topologie­optimierung, VDI 2230 Schrauben, statische/Ermüdungs­prüfung (Ansys), Gewichts­minimierung. <span class="where">Unibo · SepDez 2024</span>',
'projects.card.drone.title':'Verbund-Drone-Struktur',
'projects.card.drone.teaser':'Laminatdefinition, Dickenoptimierung, harmonische & Schlag-FEM. <span class="where">Unibo · FebJun 2023</span>',
'skills.software':'Software',
'skills.data':'Datenanalyse: Excel, Python',
'skills.soft':'Soft Skills',
'skills.teamwork':'Teamarbeit',
'skills.adapt':'Anpassungsfähigkeit',
'skills.creative':'Kreatives Problemlösen',
'skills.langs':'Sprachen',
'lang.it':'Italienisch — Muttersprache',
'lang.es':'Spanisch — Fließend (C2)',
'lang.en':'Englisch — Fließend (C1)',
'lang.de':'Deutsch — Grundkenntnisse (A1)',
'contact.cta':'Interesse an einer Zusammenarbeit oder CV in anderem Format? Kontaktieren Sie mich.',
'contact.locationTitle':'Aktueller Standort:',
'contact.viewmap':'Größere Karte anzeigen',
'contact.hoursTitle':'Kontaktzeiten (Madrid):',
'contact.hours.weekdays':'Montag Freitag: 09:00 19:00',
'contact.hours.saturday':'Samstag: 09:00 19:00',
'contact.hours.sunday':'Sonntag: 09:00 12:00',
'footer.updated':'Letzte Aktualisierung:',
'modal.title':'Projektdetails',
'modal.close':'Schließen',
'exp.airbus.title':'AIRBUS - Structural Design & Analysis Engineer',
'exp.airbus.where':'Madrid, ES',
'exp.airbus.p1':'Entwicklung und Bewertung von <strong>Reparatur­lösungen</strong> für Verbund- und Metallbauteile.',
'exp.airbus.p2':'Teilekonstruktion für <strong>A350 HTP</strong> und <strong>Sektion 19</strong> (Heckrumpf) in <strong>CATIA V5</strong>.',
'exp.airbus.p3':'Schnittstelle Design Office in der Produktion; Sicherstellung von Strukturintegrität und Compliance.',
'exp.airbus.p4':'Entwicklung von <strong>numerischen Modellen</strong> und expliziten Simulationen zu Schadensmechanismen in Verbundwerkstoffen.',
'exp.dlr.title':'DLR - Masterarbeit · R&amp;D Engineer',
'exp.dlr.where':'Stuttgart, DE',
'exp.dlr.p1':'Arbeit für das EU-Projekt <strong>r-LightBioCom</strong> zu nachhaltigen Hochleistungsverbunden für Automotive/Aerospace.',
'exp.dlr.p2':'Berechnung des Umweltfußabdrucks je 1 kg Material in <strong>openLCA</strong>.',
'exp.dlr.p3':'<strong>Quasi-statische &amp; dynamische</strong> Druckversuche an Kernen (Wabe/Schaum) und <strong>KPI</strong> aus <em>LCA</em> und Mechanik.',
'exp.dlr.p4':'Implementierung und Kalibrierung von <strong>LS-DYNA MAT-Karten</strong> aus Testdaten.',
'exp.dlr.p5':'<strong>FEM</strong> statisch/dynamisch zur Validierung der Versuche.',
'exp.unibo.title':'UniBo Motorsport - Stress & Design Engineer',
'exp.unibo.where':'Bologna, IT',
'exp.unibo.p1':'<strong>Konstruktion</strong> und <strong>Spannungsanalyse</strong> (Monocoqueformen, Armaturenbrettträger, Fahrer­gurt).',
'exp.unibo.p2':'<strong>FEM</strong> am CFRP-Chassis unter Mehrfachlasten; Untersuchung von Delaminationen.',
'exp.dvp.title':'D.V.P. Vacuum Technology - Bachelorarbeit · R&amp;D Engineer',
'exp.dvp.where':'Bologna, IT',
'exp.dvp.p1':'Versuchsreihen zu Durchsätzen und Druckverlusten in Turbinen und Ventilen.',
'exp.dvp.p2':'Erstellung von <strong>Leistungs­kennfeldern</strong> in <strong>GT-Suite</strong> und Modellvalidierung.',
'exp.cpc.title':'CPC Group - Composite Laminator',
'exp.cpc.where':'Modena, IT',
'exp.cpc.p1':'Laminieren von <strong>CFRP</strong>-Formen und eines Chassis für das Formula-SAE-Team.',
/* PROJEKTE — gemeinsam */
'proj.common.what':'Was ich gemacht habe',
'proj.common.model':'Modell',
'proj.common.tools':'Werkzeuge',
'proj.common.results':'Ergebnisse',
'proj.common.process':'Prozess',
'proj.common.download':'📄 Bericht herunterladen',
/* === PROJEKTE — Details (DE) === */
'proj.stiff.h4':'Versteifte Verbundpaneele',
'proj.stiff.obj':'<strong>Ziel —</strong> CFRP-Paneele mit Stringern auslegen und validieren, Gewicht minimieren und Beul-/Schadens­toleranz-Anforderungen erfüllen.',
'proj.stiff.li1':'<strong>Layups</strong> für Skin und Stringer definiert (Symmetrie, Balance, Lagenanteile).',
'proj.stiff.li2':'Verstärkungen <strong>vordimensioniert</strong> und <strong>lokales/globales Beulen</strong> sowie <strong>Stringer-Crippling</strong> geprüft.',
'proj.stiff.li3':'<strong>Durchbiegungen</strong> und <strong>Safety Margins (MS)</strong> gegen Anforderungen überprüft.',
'proj.stiff.li4':'<strong>Dickenoptimierung</strong> (Gewicht vs. Steifigkeit/Stabilität) mit FEM-Feedback.',
'proj.stiff.li5':'<strong>Beulmoden</strong> genutzt, um Redesign-Iterationen zu steuern.',
'proj.stiff.tools':'Abaqus / Ansys für FEM; Ingenieur-Spreadsheets; Luftfahrt-Laminatregeln.',
'proj.stiff.r1':'Gewichtsreduktion: <strong>≈ XY %</strong>.',
'proj.stiff.r2':'<strong>MS ≥ 0</strong> für Beulen und Crippling in kritischen Lastfällen.',
'proj.stiff.r3':'<strong>Durchbiegungen ≤</strong> Grenzwert.',
'proj.stiff.cap1':'Übersicht Paneel & Stringer',
'proj.stiff.cap2':'Beulmoden 13 (FEM)',
'proj.stiff.cap3':'Layup- & Dicken­tabelle',
'proj.stiff.ch1':'Beulen & Crippling',
'proj.stiff.ch2':'Optimiertes Layup',
'proj.stiff.ch3':'FEM-getrieben',
'proj.stiff.ch4':'MS ≥ 0',
'proj.hashin.h4':'Verbundlaminat — Hashin (Abaqus)',
'proj.hashin.obj':'<strong>Ziel —</strong> UD-Laminat unter Zug und Druck mit <em>Hashin-Schadenseinleitung</em> simulieren, ply-by-ply-Versagen identifizieren und Zug- vs. Drucktragfähigkeit vergleichen.',
'proj.hashin.m1':'Probekörper: <strong>100 × 20 mm</strong>, <strong>10 Lagen × 0,25 mm = 2,5 mm</strong>; symmetrisches Layup <strong>[0°, ±45°, 0°, 90°]s</strong>.',
'proj.hashin.m2':'Elemente: <strong>S4R</strong> Schalenelemente (~2 mm); Material: UD-Lage mit elastischen + Hashin-Parametern.',
'proj.hashin.m3':'Randbedingungen/Last: unten eingespannt; obere Kante an RP gekoppelt mit vorgeschriebener Y-Verschiebung.',
'proj.hashin.m4':'Schadensmodell: <strong>Hashin-Initiation</strong> (keine Evolution). Outputs: HSNFTCRT, HSNFCCRT, HSNMTCRT, HSNMCCRT.',
'proj.hashin.r1':'<strong>Zug:</strong> 90° Matrix-Zug → ±45° Matrix-Schub → 0° Faser-Zug; <strong>UTS ≈ 413 MPa</strong>.',
'proj.hashin.r2':'<strong>Druck:</strong> ±45° Matrix-Druck → 90° Matrix-Druck → 0° Faser-Druck; <strong>UCS ≈ 336 MPa</strong>.',
'proj.hashin.r3':'<strong>Verhältnis:</strong> UTS/UCS ≈ <strong>1,23</strong> (≈23 % stärker in Zug).',
'proj.hashin.cap1':'Mesh & Layup (S4R-Schalen)',
'proj.hashin.cap2':'Hashin-Karten — First-Ply-Failure',
'proj.hashin.cap3':'Zug σ–ε (stufenweise Steifigkeitsabfälle)',
'proj.hashin.cap4':'Druck σ–ε (stufenweise Steifigkeitsabfälle)',
'proj.hashin.ch1':'Hashin-Initiation',
'proj.hashin.ch2':'[0/±45/0/90]s',
'proj.hashin.ch3':'UTS 413 MPa',
'proj.hashin.ch4':'UCS 336 MPa',
'proj.hashin.ch5':'Verhältnis ≈ 1,23',
'proj.sec19.h4':'Heckrumpf — Sektion 19 (Skin & Stringers)',
'proj.sec19.obj':'<strong>Ziel —</strong> Skin- und Stringer-Konzept in Verbundbauweise festlegen, Verstärkungen, Drop-offs und Rahmenverbindungen (Clips, Ø4,8 mm) für ein Rumpffeld zwischen Rahmen AB.',
'proj.sec19.given':'Gegebene Daten',
'proj.sec19.g1':'<strong>Geometrie:</strong> Zylinder <strong>R = 4500 mm</strong>; Rahmenabstand <strong>550 mm</strong>; Stringer-Pitch <strong>150 mm</strong>.',
'proj.sec19.g2':'<strong>Material:</strong> UD, <strong>CPT 0,184 mm</strong>.',
'proj.sec19.g3':'<strong>Skin:</strong> Basis <strong>9 Lagen (2/4/3)</strong>; Verstärkung <strong>14 Lagen (2/8/4)</strong>, Patch <strong>100 × 70 mm</strong>.',
'proj.sec19.g4':'<strong>Stringer:</strong> <strong>h &lt; 35 mm</strong>, <strong>R ≥ 3 mm</strong>; Steg <strong>20 Lagen</strong> (50 % 0° / 40 % ±45° / 10 % 90°); <strong>Steg = 2× Flansch</strong>.',
'proj.sec19.g5':'<strong>Verbindungen:</strong> Clips + <strong>Ø 4,8 mm</strong> Befestiger.',
'proj.sec19.li1':'Mastergeometrie (Rahmen & Stringer auf der Skin), Pitch und Fußbreiten erstellt.',
'proj.sec19.li2':'Skin-Layups, Drop-offs und Verstärkungs-Footprint kartiert.',
'proj.sec19.li3':'Stringer-Steg/Flansche dimensioniert und Reparierbarkeit (L1 für Ø4,8 mm) geprüft.',
'proj.sec19.li4':'Clip-Verbindungen definiert, Zeichnungen, Materialliste und Paneelgewicht vorbereitet.',
'proj.sec19.ch1':'R 4500 mm',
'proj.sec19.ch2':'Pitch 150 mm',
'proj.sec19.ch3':'UD CPT 0,184 mm',
'proj.sec19.ch4':'Clips Ø 4,8 mm',
'proj.handle.h4':'Motorrad-Heckrahmen — AlSi10Mg (SLM)',
'proj.handle.obj':'<strong>Ziel —</strong> Möglichst leichten Sattel-Heckrahmen innerhalb der Hüllkurve konstruieren, lastfallkonform (statisch + Ermüdung), herstellbar per SLM (AlSi10Mg).',
'proj.handle.p1':'<strong>AM-Setup:</strong> AlSi10Mg; SLM-Drucker <em>NXG XII 600</em> (590 × 560 × 367 mm).',
'proj.handle.p2':'<strong>Topologie:</strong> Spannungs­basiert (~2,8 kg) → <strong>Compliance-basiert</strong> (~2,06 kg) mit Rebuilds.',
'proj.handle.p3':'<strong>Schrauben (VDI 2230):</strong> Heckrahmen M8×4; Sattel M5×4; Vorspannung & Nachweise über Handrechnungen + MATLAB aus FEM-Reaktionen.',
'proj.handle.p4':'<strong>Validierung (Ansys):</strong> statisch + Ermüdung; Netzkonvergenz ~1,5 mm; lokale Verfeinerungen an Schrauben.',
'proj.handle.r1':'<strong>Sicherheitsfaktoren:</strong> &gt; 2 statisch, &gt; 1 Ermüdung (Goodman).',
'proj.handle.r2':'<strong>Durchbiegung:</strong> &lt; 2 mm unter definierten Lasten.',
'proj.handle.r3':'<strong>Endgewicht:</strong> ~<strong>656 g</strong> nach Optimierung mit kombinierten Lastkarten.',
'proj.handle.ch1':'AlSi10Mg — SLM',
'proj.handle.ch2':'Topologie-optimiert',
'proj.handle.ch3':'VDI 2230',
'proj.handle.ch4':'SF&gt;2 / SF&gt;1',
'proj.handle.ch5':'~656 g',
'proj.drone.h4':'Verbund-Drone-Struktur',
'proj.drone.obj':'<strong>Ziel —</strong> Laminataufbau und Dicken zur Gewichtsminimierung bei ausreichender Steifigkeit/Festigkeit festlegen; harmonische und Schlagprüfungen an kritischen Bauteilen.',
'proj.drone.li1':'Laminatfamilien für Arme und Mittelplatte (Lagenwinkel, Stapelregeln, Symmetrie/Balanz) ausgewählt.',
'proj.drone.li2':'<strong>Dickenoptimierung</strong> über Fluglast-Hüllkurven (Hover, Manöver, Landung).',
'proj.drone.li3':'FEM aufgebaut und <strong>harmonische Antwort</strong> extrahiert, Resonanznähe zu Rotorfrequenzen vermieden.',
'proj.drone.li4':'<strong>Schlagszenarien</strong> an Schwachstellen (Arm-Nabe, Landekanten) bewertet.',
'proj.drone.r1':'Gewichtsreduktion ggü. Basis bei <strong>MS ≥ 0</strong> in statischen Nachweisen.',
'proj.drone.r2':'Mindestabstand zu rotorinduzierten Frequenzen erreicht.',
'proj.drone.r3':'Lokale Verstärkungen nur bei Bedarf nach Schlagbewertung hinzugefügt.',
'proj.drone.ch1':'Layup-Optimierung',
'proj.drone.ch2':'Harmonische Prüfung',
'proj.drone.ch3':'Schlag-FEM',
'proj.drone.ch4':'MS ≥ 0'
},
/* =========================
ESPAÑOL (con modales completos)
========================= */
es: {
'cta.downloadCv': '⬇️ Descargar CV',
'cta.downloadCv@title': 'Descargar CV',
'nav.about':'Sobre mí',
'nav.experience':'Experiencia',
'nav.projects':'Proyectos',
'nav.education':'Educación',
'nav.skills':'Habilidades',
'nav.contact':'Contacto',
'hero.role':'Ingeniero Estructural',
'hero.blurb':'Ingeniero mecánico apasionado por el sector aeroespacial y la fabricación avanzada, especializado en desarrollar componentes estructurales desde el concepto hasta la validación FEM. Enfoque en materiales compuestos, CAD, FEA y simulaciones explícitas.',
'availability.title':'Disponibilidad',
'availability.text':'Actualmente en Airbus (contrato hasta dic 2025). Disponible para un nuevo rol desde enero de 2026.',
'availability.location':'Madrid, España · DE IT ES UK',
'keycompetencies.title':'Competencias clave',
'keycompetencies.damageTolerance':'Tolerancia al daño',
'keycompetencies.buckling':'Pandeo & pre-dimensionado',
'keycompetencies.impact':'Impacto & absorción de energía',
'keycompetencies.drawing':'Planos & GD&T',
'keycompetencies.data':'Análisis de datos',
'sections.experience':'Experiencia',
'sections.projects':'Proyectos Académicos',
'sections.education':'Educación',
'sections.skills':'Habilidades',
'sections.contact':'Contacto',
'projects.card.stiff.title':'Paneles compuestos rigidizados',
'projects.card.stiff.teaser':'Verificaciones de pandeo y tolerancia al daño, optimización de layup (skin & stringers), verificación de flechas. <span class="where">UPM · FebMay 2025</span>',
'projects.card.hashin.title':'Laminado compuesto — Hashin (Abaqus)',
'projects.card.hashin.teaser':'Laminado UD a tracción vs compresión; fallo ply-by-ply con Hashin; análisis FEM. <span class="where">UPM · EneMar 2025</span>',
'projects.card.sec19.title':'Sección 19 del fuselaje trasero (Skin & Stringers)',
'projects.card.sec19.teaser':'Skin laminate y concepto de stringers, drop-offs, refuerzos, uniones a marcos (clips, Ø4,8 mm). <span class="where">UPM · EneMar 2024</span>',
'projects.card.handlebar.title':'Subchasis trasero de moto — AlSi10Mg (SLM)',
'projects.card.handlebar.teaser':'Optimización topológica, uniones atornilladas VDI 2230, validación estática/fatiga (Ansys), minimización de peso. <span class="where">Unibo · SepDic 2024</span>',
'projects.card.drone.title':'Estructura de dron compuesta',
'projects.card.drone.teaser':'Definición de laminado, optimización de espesores, análisis armónico y de impacto FEM. <span class="where">Unibo · FebJun 2023</span>',
'skills.software':'Software',
'skills.data':'Análisis de datos: Excel, Python',
'skills.soft':'Soft Skills',
'skills.teamwork':'Trabajo en equipo',
'skills.adapt':'Adaptabilidad',
'skills.creative':'Resolución creativa de problemas',
'skills.langs':'Idiomas',
'lang.it':'Italiano — Nativo',
'lang.es':'Español — Fluido (C2)',
'lang.en':'Inglés — Fluido (C1)',
'lang.de':'Alemán — Básico (A1)',
'contact.cta':'¿Colaboramos o necesitas el CV en otro formato? Escríbeme.',
'contact.locationTitle':'Ubicación actual:',
'contact.viewmap':'Ver mapa ampliado',
'contact.hoursTitle':'Horario de contacto (Madrid):',
'contact.hours.weekdays':'Lunes - Viernes: 09:00 - 19:00',
'contact.hours.saturday':'Sábado: 09:00 - 19:00',
'contact.hours.sunday':'Domingo: 09:00 - 12:00',
'footer.updated':'Última actualización:',
'modal.title':'Detalles del proyecto',
'modal.close':'Cerrar',
'exp.airbus.title':'AIRBUS - Structural Design & Analysis Engineer',
'exp.airbus.where':'Madrid, ES',
'exp.airbus.p1':'Desarrollo y evaluación de <strong>reparaciones</strong> para componentes compuestos y metálicos.',
'exp.airbus.p2':'Diseño de piezas para <strong>A350 HTP</strong> y <strong>Sección 19</strong> (fuselaje trasero) en <strong>CATIA V5</strong>.',
'exp.airbus.p3':'Interfaz con Design Office en producción, garantizando integridad estructural y cumplimiento.',
'exp.airbus.p4':'Desarrollo de <strong>modelos numéricos</strong> y simulaciones explícitas de daño en compuestos.',
'exp.dlr.title':'DLR - Tesis de Máster · R&amp;D Engineer',
'exp.dlr.where':'Stuttgart, DE',
'exp.dlr.p1':'Tesis para el proyecto UE <strong>r-LightBioCom</strong> sobre compuestos sostenibles de alto rendimiento para automoción/aeroespacio.',
'exp.dlr.p2':'Huella ambiental por 1 kg de material con <strong>openLCA</strong>.',
'exp.dlr.p3':'Ensayos de compresión <strong>quasi-estáticos y dinámicos</strong> en núcleos (panal/espuma) y <strong>KPI</strong> combinando <em>LCA</em> y prestaciones mecánicas.',
'exp.dlr.p4':'Implementación y calibración de <strong>cartas MAT</strong> en <strong>LS-DYNA</strong> a partir de ensayos.',
'exp.dlr.p5':'Análisis <strong>FEM</strong> estáticos/dinámicos para validar los resultados.',
'exp.unibo.title':'UniBo Motorsport - Stress & Design Engineer',
'exp.unibo.where':'Bolonia, IT',
'exp.unibo.p1':'<strong>Diseño</strong> y <strong>análisis de tensiones</strong> (moldes de monocasco, soporte de salpicadero, arnés).',
'exp.unibo.p2':'<strong>FEM</strong> en chasis CFRP con múltiples cargas; investigación de delaminaciones.',
'exp.dvp.title':'D.V.P. Vacuum Technology - Tesis de Grado · R&amp;D Engineer',
'exp.dvp.where':'Bolonia, IT',
'exp.dvp.p1':'Campañas experimentales sobre caudales y pérdidas de carga en turbinas y válvulas.',
'exp.dvp.p2':'Desarrollo de <strong>mapas de rendimiento</strong> en <strong>GT-Suite</strong> y validación del modelo.',
'exp.cpc.title':'CPC Group - Composite Laminator',
'exp.cpc.where':'Módena, IT',
'exp.cpc.p1':'Laminación de moldes <strong>CFRP</strong> y de un chasis para el equipo de Formula SAE.',
/* PROYECTOS — común */
'proj.common.what':'Qué hice',
'proj.common.model':'Modelo',
'proj.common.tools':'Herramientas',
'proj.common.results':'Resultados',
'proj.common.process':'Proceso',
'proj.common.download':'📄 Descargar informe',
/* === PROYECTOS — Detalles (ES) === */
'proj.stiff.h4':'Paneles compuestos rigidizados',
'proj.stiff.obj':'<strong>Objetivo —</strong> Diseñar y validar paneles CFRP con rigidizadores, minimizando peso y cumpliendo requisitos de pandeo y tolerancia al daño.',
'proj.stiff.li1':'Definí <strong>layups</strong> para piel y stringers (simetría, balance, porcentajes de capas).',
'proj.stiff.li2':'<strong>Pre-dimensioné</strong> refuerzos y verifiqué <strong>pandeo local/global</strong> y <strong>crippling</strong> de stringers.',
'proj.stiff.li3':'Comprobé <strong>flechas</strong> y <strong>márgenes de seguridad (MS)</strong> vs requisitos.',
'proj.stiff.li4':'Realicé <strong>optimización de espesores</strong> (peso vs rigidez/estabilidad) con feedback FEM.',
'proj.stiff.li5':'Usé <strong>modos de pandeo</strong> para guiar iteraciones de rediseño.',
'proj.stiff.tools':'Abaqus / Ansys para FEM; hojas de cálculo de ingeniería; reglas aeronáuticas de laminado.',
'proj.stiff.r1':'Reducción de peso: <strong>≈ XY %</strong>.',
'proj.stiff.r2':'<strong>MS ≥ 0</strong> para pandeo y crippling en casos críticos.',
'proj.stiff.r3':'<strong>Flechas ≤</strong> límite especificado.',
'proj.stiff.cap1':'Vista de panel & rigidizadores',
'proj.stiff.cap2':'Modos de pandeo 13 (FEM)',
'proj.stiff.cap3':'Tabla de layup & espesores',
'proj.stiff.ch1':'Pandeo & Crippling',
'proj.stiff.ch2':'Layup optimizado',
'proj.stiff.ch3':'Impulsado por FEM',
'proj.stiff.ch4':'MS ≥ 0',
'proj.hashin.h4':'Laminado compuesto — Hashin (Abaqus)',
'proj.hashin.obj':'<strong>Objetivo —</strong> Simular un laminado UD a tracción y compresión con <em>inicio de daño Hashin</em> para identificar fallo ply-by-ply y comparar capacidad a tracción vs compresión.',
'proj.hashin.m1':'Probeta: <strong>100 × 20 mm</strong>, <strong>10 capas × 0,25 mm = 2,5 mm</strong>; layup simétrico <strong>[0°, ±45°, 0°, 90°]s</strong>.',
'proj.hashin.m2':'Elementos: <strong>S4R</strong> de cascarón (~2 mm); material: lamina UD con elástico + parámetros Hashin.',
'proj.hashin.m3':'BC/Carga: borde inferior empotrado; borde superior acoplado a RP con desplazamiento prescrito en Y.',
'proj.hashin.m4':'Modelo de daño: <strong>Hashin initiation</strong> (sin evolución). Salidas: HSNFTCRT, HSNFCCRT, HSNMTCRT, HSNMCCRT.',
'proj.hashin.r1':'<strong>Tracción:</strong> 90° matriz-tracción → ±45° matriz-corte → 0° fibra-tracción; <strong>UTS ≈ 413 MPa</strong>.',
'proj.hashin.r2':'<strong>Compresión:</strong> ±45° matriz-compresión → 90° matriz-compresión → 0° fibra-compresión; <strong>UCS ≈ 336 MPa</strong>.',
'proj.hashin.r3':'<strong>Relación:</strong> UTS/UCS ≈ <strong>1,23</strong> (≈23 % más fuerte a tracción).',
'proj.hashin.cap1':'Malla & layup (S4R cascarón)',
'proj.hashin.cap2':'Mapas Hashin — first-ply failure',
'proj.hashin.cap3':'σ–ε tracción (caídas escalonadas de rigidez)',
'proj.hashin.cap4':'σ–ε compresión (caídas escalonadas de rigidez)',
'proj.hashin.ch1':'Hashin initiation',
'proj.hashin.ch2':'[0/±45/0/90]s',
'proj.hashin.ch3':'UTS 413 MPa',
'proj.hashin.ch4':'UCS 336 MPa',
'proj.hashin.ch5':'Relación ≈ 1,23',
'proj.sec19.h4':'Sección 19 del fuselaje trasero (Skin & Stringers)',
'proj.sec19.obj':'<strong>Objetivo —</strong> Definir skin y stringers en compuesto, refuerzos, drop-offs y uniones a marcos (clips, Ø4,8 mm) para una bahía entre marcos AB.',
'proj.sec19.given':'Datos de partida',
'proj.sec19.g1':'<strong>Geometría:</strong> cilindro <strong>R = 4500 mm</strong>; separación de marcos <strong>550 mm</strong>; pitch de stringers <strong>150 mm</strong>.',
'proj.sec19.g2':'<strong>Material:</strong> UD, <strong>CPT 0,184 mm</strong>.',
'proj.sec19.g3':'<strong>Skin:</strong> base <strong>9 capas (2/4/3)</strong>; refuerzo <strong>14 capas (2/8/4)</strong>, parche <strong>100 × 70 mm</strong>.',
'proj.sec19.g4':'<strong>Stringers:</strong> <strong>h &lt; 35 mm</strong>, <strong>R ≥ 3 mm</strong>; alma <strong>20 capas</strong> (50 % 0° / 40 % ±45° / 10 % 90°); <strong>alma = 2× alas</strong>.',
'proj.sec19.g5':'<strong>Uniones:</strong> clips + <strong>Ø 4,8 mm</strong>.',
'proj.sec19.li1':'Construí la geometría maestra (marcos & stringers en la piel), ajusté pitch y anchuras de pies.',
'proj.sec19.li2':'Mapeé layups de piel, drop-offs y huella del refuerzo.',
'proj.sec19.li3':'Dimensioné alma/alas del stringer y verifiqué reparabilidad (L1 para Ø4,8 mm).',
'proj.sec19.li4':'Definí uniones con clips y preparé planos, lista de materiales y peso del panel.',
'proj.sec19.ch1':'R 4500 mm',
'proj.sec19.ch2':'Pitch 150 mm',
'proj.sec19.ch3':'UD CPT 0,184 mm',
'proj.sec19.ch4':'Clips Ø 4,8 mm',
'proj.handle.h4':'Subchasis trasero de moto — AlSi10Mg (SLM)',
'proj.handle.obj':'<strong>Objetivo —</strong> Diseñar el subchasis más ligero posible dentro del sobre geométrico, conforme a cargas (estático + fatiga), fabricable por SLM (AlSi10Mg).',
'proj.handle.p1':'<strong>AM setup:</strong> AlSi10Mg; impresora SLM <em>NXG XII 600</em> (590 × 560 × 367 mm).',
'proj.handle.p2':'<strong>Topología:</strong> basado en tensiones (~2,8 kg) → <strong>basado en cumplimiento</strong> (~2,06 kg) con reconstrucciones.',
'proj.handle.p3':'<strong>Tornillería (VDI 2230):</strong> Subchasis M8×4; asiento M5×4; pretensado & comprobaciones con cálculos manuales + MATLAB a partir de reacciones FEM.',
'proj.handle.p4':'<strong>Validación (Ansys):</strong> estática + fatiga; convergencia de malla ~1,5 mm; refinamientos locales en tornillos.',
'proj.handle.r1':'<strong>Factores de seguridad:</strong> &gt; 2 estático, &gt; 1 fatiga (Goodman).',
'proj.handle.r2':'<strong>Flecha:</strong> &lt; 2 mm bajo cargas definidas.',
'proj.handle.r3':'<strong>Peso final:</strong> ~<strong>656 g</strong> tras optimización con mapa de cargas combinadas.',
'proj.handle.ch1':'AlSi10Mg — SLM',
'proj.handle.ch2':'Topología optimizada',
'proj.handle.ch3':'VDI 2230',
'proj.handle.ch4':'SF&gt;2 / SF&gt;1',
'proj.handle.ch5':'~656 g',
'proj.drone.h4':'Estructura de dron compuesta',
'proj.drone.obj':'<strong>Objetivo —</strong> Definir laminado y espesores para minimizar peso manteniendo rigidez y resistencia; comprobaciones armónicas y de impacto en miembros críticos.',
'proj.drone.li1':'Seleccioné familias de laminados para brazos y placa central (ángulos, reglas de apilamiento, simetría/balance).',
'proj.drone.li2':'<strong>Optimización de espesores</strong> bajo envolventes de carga de vuelo (hover, maniobra, aterrizaje).',
'proj.drone.li3':'Construí FEM y extraje <strong>respuesta armónica</strong> para evitar resonancia cerca de frecuencias de rotores.',
'proj.drone.li4':'Realicé <strong>escenarios de impacto</strong> en zonas débiles (uniones brazo-buje, bordes de aterrizaje).',
'proj.drone.r1':'Reducción de peso vs baseline manteniendo <strong>MS ≥ 0</strong> en verificaciones estáticas.',
'proj.drone.r2':'Se logró separación mínima respecto a frecuencias inducidas por el rotor.',
'proj.drone.r3':'Refuerzos locales añadidos sólo donde fue necesario tras la evaluación de impacto.',
'proj.drone.ch1':'Optimización de layup',
'proj.drone.ch2':'Chequeo armónico',
'proj.drone.ch3':'FEM de impacto',
'proj.drone.ch4':'MS ≥ 0'
}
};
let currentLang = DEFAULT_LANG;
// ===== helper con fallback (lang -> en -> default) =====
function resolveKey(key, lang){
const order = [lang, 'en', DEFAULT_LANG];
for(const L of order){
if(t[L] && typeof t[L][key] === 'string') return t[L][key];
}
return null;
}
function applyNodeTranslation(node, value){
if(node.hasAttribute('data-i18n-html')) node.innerHTML = value;
else node.innerHTML = value;
}
function translateAttributes(node, key, lang){
const attr = node.getAttribute('data-i18n-attr');
if(!attr) return;
const k = key + '@' + attr;
const v = resolveKey(k, lang);
if(v) node.setAttribute(attr, v);
}
function translatePage(lang){
currentLang = lang;
document.documentElement.setAttribute('lang', lang);
document.querySelectorAll('[data-i18n],[data-i18n-html]').forEach(el=>{
const key = el.getAttribute('data-i18n') || el.getAttribute('data-i18n-html');
const val = resolveKey(key, lang);
if(typeof val === 'string'){
applyNodeTranslation(el, val);
}
translateAttributes(el, key, lang);
});
}
// API globale per ri-applicare la traduzione (usata anche dai modali)
window.__i18n = {
getLang: ()=>currentLang,
apply: ()=>translatePage(currentLang),
set: (lang)=>{ localStorage.setItem(STORAGE_KEY, lang); translatePage(lang); updateLangUI(lang); }
};
// ====== UI CUSTOM DROPDOWN ======
const langBtn = document.getElementById('langBtn');
const langMenu = document.getElementById('langMenu');
const langSwitcher = document.getElementById('langSwitcher');
const flagEl = document.getElementById('langFlag');
const codeEl = document.getElementById('langCode');
const flags = { it:'🇮🇹', en:'🇬🇧', de:'🇩🇪', es:'🇪🇸' };
function updateLangUI(lang){
flagEl.textContent = flags[lang] || '🌐';
codeEl.textContent = (lang || 'it').toUpperCase();
langMenu.querySelectorAll('.lang-option').forEach(o=>{
o.setAttribute('aria-selected', o.dataset.lang === lang ? 'true' : 'false');
});
}
function openMenu(){
langMenu.classList.add('open');
langBtn.setAttribute('aria-expanded','true');
langMenu.focus();
}
function closeMenu(){
langMenu.classList.remove('open');
langBtn.setAttribute('aria-expanded','false');
}
langBtn.addEventListener('click', ()=>{
const open = langMenu.classList.contains('open');
if(open) closeMenu(); else openMenu();
});
// Click su opzioni
langMenu.addEventListener('click', (e)=>{
const opt = e.target.closest('.lang-option');
if(!opt) return;
const lang = opt.dataset.lang;
window.__i18n.set(lang);
closeMenu();
langBtn.focus();
});
// Tastiera su menu (ESC / frecce / invio)
langMenu.addEventListener('keydown', (e)=>{
const opts = Array.from(langMenu.querySelectorAll('.lang-option'));
const cur = opts.findIndex(o => o.getAttribute('aria-selected')==='true');
if(e.key==='Escape'){ e.preventDefault(); closeMenu(); langBtn.focus(); }
if(['ArrowDown','ArrowUp'].includes(e.key)){
e.preventDefault();
let i = cur;
if(e.key==='ArrowDown') i = (cur+1) % opts.length;
if(e.key==='ArrowUp') i = (cur-1+opts.length) % opts.length;
opts[i].focus?.();
}
if(e.key==='Enter' || e.key===' '){
e.preventDefault();
document.activeElement?.click();
}
});
// Chiudi con click fuori
document.addEventListener('click', (e)=>{
if(!langSwitcher.contains(e.target)) closeMenu();
});
// Init lingua (saved / browser / default)
const saved = localStorage.getItem(STORAGE_KEY);
const browser = (navigator.language || '').slice(0,2).toLowerCase();
const initial = saved || (['it','en','de','es'].includes(browser) ? browser : DEFAULT_LANG);
updateLangUI(initial);
translatePage(initial);
})();
</script>
<script>
// Footer dates
document.getElementById('year').textContent = new Date().getFullYear();
document.getElementById('updated').textContent = new Date().toLocaleDateString();
</script>
</body>
</html>