/* Fuentes alojadas en el propio servidor (sin llamadas a Google) */
@font-face{font-family:"Roboto";src:url("fonts/roboto-latin-400-normal.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Roboto";src:url("fonts/roboto-latin-500-normal.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Roboto";src:url("fonts/roboto-latin-700-normal.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Libre Baskerville";src:url("fonts/libre-baskerville-latin-400-normal.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Libre Baskerville";src:url("fonts/libre-baskerville-latin-400-italic.woff2") format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Libre Baskerville";src:url("fonts/libre-baskerville-latin-700-normal.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}

/* Colores: azul web Universidade de Vigo (#073349), azul Campus Vigo (Pantone 306),
   azul Investigación (Pantone 293) y naranja Docencia (Pantone 021) */
:root{
  --navy:#073349;
  --campus:#0094E0;
  --link:#0047BA;
  --docencia:#ED6E00;
  --bg:#F4F6F8;
  --paper:#FFFFFF;
  --line:#D6DEE5;
  --text:#14212B;
  --muted:#4F5F6B;
  --serif:"Libre Baskerville","New Baskerville","Baskerville",Georgia,serif;
  --sans:"Roboto",system-ui,-apple-system,"Segoe UI",Arial,sans-serif;
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
*,*::before,*::after{box-sizing:inherit}
html{scroll-behavior:smooth;scroll-padding-top:calc(env(safe-area-inset-top,0px) + 80px)}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:1.0625rem;line-height:1.65;-webkit-font-smoothing:antialiased}
a{color:var(--link);text-underline-offset:3px}
a:hover{color:var(--navy)}
:focus-visible{outline:3px solid var(--campus);outline-offset:3px;border-radius:2px}
img{max-width:100%}
.skip{position:absolute;left:-999px;top:0;background:var(--navy);color:#fff;padding:.6rem 1rem;z-index:50}
.skip:focus{left:1rem;top:1rem;color:#fff}

/* Cabecera: fondo blanco para que el logotipo se vea en su versión original */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--paper);border-bottom:1px solid var(--line)}
.top .in{max-width:1160px;margin:0 auto;padding:.9rem 1.5rem;display:flex;align-items:center;gap:2rem}
.logo{display:block;flex:0 0 auto;padding:.25rem 0}
.logo img{display:block;height:34px;width:auto}
.top nav{margin-left:auto;min-width:0}
.menu{list-style:none;margin:0;padding:0;display:flex;gap:1.4rem;overflow-x:auto;scrollbar-width:none}
.menu::-webkit-scrollbar{display:none}
.menu a{color:var(--muted);text-decoration:none;font-size:.95rem;white-space:nowrap;font-weight:500}
.menu a:hover{color:var(--navy)}
@media (max-width:820px){.top .in{flex-wrap:wrap;gap:.5rem}.top nav{margin-left:0;width:100%}.menu{padding-bottom:.2rem}}

main{max-width:1160px;margin:0 auto;padding:0 1.5rem}
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.15;margin:0;color:var(--navy)}
h2{font-size:clamp(1.9rem,3.8vw,2.7rem);margin-bottom:1rem}
h3{font-size:1.2rem}
p{margin:0 0 1rem;max-width:66ch}
section{padding:5rem 0;border-top:1px solid var(--line)}
.intro{color:var(--muted);margin-bottom:2.5rem}

/* Portada */
.hero{padding:4rem 0 3rem;border-top:0}
.hero h1{font-size:clamp(2.8rem,8.5vw,6.4rem);line-height:1.02;letter-spacing:-.02em;max-width:10ch}
.hero .lead{display:grid;grid-template-columns:1.2fr 1fr;gap:2.5rem;margin-top:2.25rem;align-items:end}
.hero .lead p{font-size:1.2rem;margin:0;max-width:42ch}
.actions{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:flex-end}
.btn{display:inline-block;padding:.8rem 1.3rem;border-radius:999px;border:1.5px solid var(--navy);color:var(--navy);text-decoration:none;font-weight:500;font-size:.95rem}
.btn:hover{background:var(--navy);color:#fff}
.btn.solid{background:var(--navy);color:#fff}
.btn.solid:hover{background:var(--link);border-color:var(--link)}
@media (max-width:760px){.hero .lead{grid-template-columns:1fr}.actions{justify-content:flex-start}}

.map{margin:3rem 0 0;background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.map svg{display:block;width:100%;height:auto}
.map figcaption{padding:.9rem 1.3rem;border-top:1px solid var(--line);color:var(--muted);font-size:.92rem}
.edge{fill:none;stroke-width:1.6}
.edge.main{stroke:var(--campus);stroke-opacity:.6}
.edge.sec{stroke:var(--line);stroke-dasharray:4 6}
.edge.draw{stroke-dashoffset:600;animation:draw 1.5s ease forwards}
.edge.main.draw{stroke-dasharray:600}
@keyframes draw{to{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.edge.draw{animation:none;stroke-dashoffset:0}}
.node circle{fill:var(--paper);stroke:var(--campus);stroke-width:2.2}
.node text{font-family:var(--sans);font-size:15px;font-weight:500;fill:var(--text)}
.node text.s{font-size:12.5px;font-weight:400;fill:var(--muted)}
.node.core circle{fill:var(--navy);stroke:none}
.node.core text{fill:#fff;font-family:var(--serif);font-size:21px}
.map-list{display:none}
@media (max-width:640px){.map svg{display:none}.map-list{display:grid;gap:.75rem;list-style:none;margin:0;padding:1.25rem}.map-list li{border-left:3px solid var(--campus);padding-left:.8rem}.map-list b{display:block;color:var(--navy);font-weight:500}.map-list span{color:var(--muted);font-size:.92rem}}

/* Sobre mí */
.about{display:grid;grid-template-columns:1fr 1.25fr;gap:3rem;align-items:start}
.about .big{font-family:var(--serif);font-size:clamp(1.55rem,3vw,2.2rem);line-height:1.3;color:var(--navy);margin:0;max-width:20ch}
.about .txt p{color:var(--muted)}
.about .txt p strong{color:var(--text);font-weight:500}
@media (max-width:820px){.about{grid-template-columns:1fr;gap:1.5rem}}

/* Trayectoria */
.cv{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem 3.5rem}
.cv ul{margin:.9rem 0 0;padding-left:1.15rem}
.cv li{margin-bottom:.5rem}
.cv li::marker{color:var(--campus)}
.cv .box{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:1.6rem}
.cv .box + .box{margin-top:1.5rem}
@media (max-width:820px){.cv{grid-template-columns:1fr}}
.teach{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem;margin-top:1rem}
.teach a{display:block;background:var(--paper);border:1px solid var(--line);border-top:4px solid var(--docencia);border-radius:8px;padding:1.1rem 1.2rem;text-decoration:none;color:var(--text)}
.teach a:hover{border-color:var(--docencia)}
.teach b{display:block;font-family:var(--serif);font-weight:400;color:var(--navy);font-size:1.08rem;margin-bottom:.2rem}
.teach span{color:var(--muted);font-size:.92rem}


/* Especialización */
.areas{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.area{background:var(--paper);padding:1.5rem 1.4rem}
.area svg{width:32px;height:32px;color:var(--campus);margin-bottom:.9rem}
.area h3{font-size:1.1rem;margin-bottom:.35rem}
.area p{color:var(--muted);font-size:.95rem;margin:0}

/* Publicaciones con portadas reales */
.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}
.filters button{font:inherit;font-size:.92rem;background:var(--paper);color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:.45rem 1rem;cursor:pointer}
.filters button:hover{color:var(--navy);border-color:var(--navy)}
.filters button[aria-pressed="true"]{background:var(--navy);border-color:var(--navy);color:#fff}
.covers{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:2rem 1.5rem;list-style:none;margin:0;padding:0}
.covers li[hidden]{display:none}
.covers a{display:flex;flex-direction:column;text-decoration:none;color:var(--text);height:100%}
.frame{aspect-ratio:3/4;background:var(--paper);border:1px solid var(--line);border-radius:4px;display:flex;align-items:center;justify-content:center;padding:.8rem;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease}
.covers a:hover .frame{transform:translateY(-4px);box-shadow:0 10px 24px rgba(7,51,73,.14)}
@media (prefers-reduced-motion:reduce){.frame{transition:none}.covers a:hover .frame{transform:none}}
.frame img{max-height:100%;max-width:100%;object-fit:contain;box-shadow:0 2px 8px rgba(7,51,73,.18)}
/* Portada tipográfica si no hay imagen */
.frame.nocover{background:var(--navy);color:#fff;align-items:flex-end;justify-content:flex-start;padding:1.1rem;position:relative}
.frame.nocover::before{content:"";position:absolute;top:1.1rem;left:1.1rem;width:36px;height:3px;background:var(--campus)}
.frame.nocover span{font-family:var(--serif);font-size:1rem;line-height:1.3}
.covers .t{font-family:var(--serif);font-size:1rem;line-height:1.35;margin-top:.8rem;color:var(--navy)}
.covers .m{font-size:.85rem;color:var(--muted);margin-top:.25rem}

/* Patentes y congresos */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem}
.card{background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
.card .pic{aspect-ratio:16/10;background:var(--bg);display:flex;align-items:center;justify-content:center;overflow:hidden;border-bottom:1px solid var(--line)}
.card .pic img{width:100%;height:100%;object-fit:cover}
.card .pic.nocover{display:none}
.card .body{padding:1.3rem 1.4rem 1.5rem}
.card .meta{color:var(--muted);font-size:.88rem;margin-bottom:.45rem}
.card h3{margin-bottom:.55rem;font-size:1.12rem;line-height:1.3}
.card p{color:var(--muted);font-size:.95rem;margin:0}

/* Contacto */
.contact{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem;align-items:start}
.contact dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:.7rem 1.4rem;background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:1.6rem}
.contact dt{color:var(--muted)}
.contact dd{margin:0;overflow-wrap:anywhere}
@media (max-width:820px){.contact{grid-template-columns:1fr}}

footer{background:var(--navy);color:#C9D6DE;margin-top:2rem}
footer .in{max-width:1160px;margin:0 auto;padding:2rem 1.5rem;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;font-size:.9rem}
footer a{color:#fff}
.covers li > div{display:flex;flex-direction:column;height:100%}
.card .meta .granted{color:var(--link);font-weight:500}
/* Divulgación y medios */
.media{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem}
.mcard{background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
.mhead{display:flex;align-items:center;gap:.75rem;padding:1.1rem 1.4rem;color:#fff;font-weight:500;font-size:.95rem}
.mhead svg{width:30px;height:30px;flex:0 0 auto}
.mcard.radio .mhead{background:var(--navy)}
.mcard.podcast .mhead{background:var(--link)}
.mcard.curso .mhead{background:#8A4A00}
.mbody{padding:1.3rem 1.4rem 1.5rem;display:flex;flex-direction:column;flex:1}
.mbody .meta{color:var(--muted);font-size:.88rem;margin-bottom:.4rem}
.mbody h3{margin-bottom:.55rem;font-size:1.15rem;line-height:1.3}
.mbody p{color:var(--muted);font-size:.95rem;margin:0 0 1rem}
.mlink{margin-top:auto;font-weight:500;font-size:.95rem}
/* Retrato en portada */
.hero-top{display:grid;grid-template-columns:1fr minmax(220px,340px);gap:3rem;align-items:center}
.portrait{margin:0;position:relative}
.portrait::before{content:"";position:absolute;inset:12px -10px -12px 12px;border:2px solid var(--campus);border-radius:12px}
.portrait img{position:relative;display:block;width:100%;height:auto;border-radius:12px}
@media (max-width:820px){.hero-top{grid-template-columns:1fr;gap:2rem}.portrait{max-width:260px;order:-1}}
/* Caso destacado */
.feature{background:var(--paper);border:1px solid var(--line);border-left:6px solid var(--navy);border-radius:12px;padding:1.8rem;margin-bottom:1.5rem}
.feature .meta{color:var(--muted);font-size:.9rem;margin-bottom:.5rem}
.feature h3{font-size:clamp(1.3rem,2.4vw,1.6rem);line-height:1.25;margin-bottom:.8rem;max-width:34ch}
.feature p{color:var(--muted)}
.outlets{list-style:none;margin:1.5rem 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.75rem}
.outlets a,.outlets div{display:block;border:1px solid var(--line);border-radius:8px;padding:.7rem .9rem;text-decoration:none;color:var(--text);height:100%}
.outlets a:hover{border-color:var(--link)}
.outlets b{display:block;font-family:var(--serif);font-weight:400;color:var(--navy);font-size:1.05rem}
.outlets span{color:var(--muted);font-size:.85rem}
/* Foto de evento */
.event{max-width:600px;margin:0 0 1.5rem;border-radius:12px;overflow:hidden;background:var(--paper);border:1px solid var(--line)}
.event img{display:block;width:100%;height:auto;max-height:340px;object-fit:cover;object-position:center 30%}
.event figcaption{padding:.8rem 1.3rem;color:var(--muted);font-size:.92rem}
.mcard.series{grid-column:1/-1}
.eps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}
.eps li{border-top:3px solid var(--link);padding-top:.7rem;display:flex;flex-direction:column;gap:.2rem}
.eps .d{color:var(--muted);font-size:.85rem}
.eps a{font-family:var(--serif);color:var(--navy);text-decoration:none;font-size:1.05rem;line-height:1.3}
.eps a:hover{text-decoration:underline;color:var(--link)}
.eps small{color:var(--muted);font-size:.9rem;line-height:1.45}
.cv li strong{font-weight:500;color:var(--navy)}
.mcard.tv .mhead{background:#5C2D91}
.eps .t{font-family:var(--serif);color:var(--navy);font-size:1.05rem;line-height:1.3}
/* Docencia */
.courses{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem}
.course{background:var(--paper);border:1px solid var(--line);border-top:4px solid var(--docencia);border-radius:10px;padding:1.4rem 1.5rem}
.course.past{border-top-color:var(--line)}
.course .lvl{display:inline-block;font-size:.8rem;font-weight:500;color:#8A4A00;background:#FDEBDB;border-radius:999px;padding:.1rem .65rem;margin-bottom:.6rem}
.course.past .lvl{color:var(--muted);background:var(--bg)}
.course h3{font-size:1.12rem;line-height:1.3}
.course h3 a{color:var(--navy);text-decoration:none}
.course h3 a:hover{text-decoration:underline}
.course ul{list-style:none;margin:1rem 0 0;padding:0}
.course li{display:flex;flex-direction:column;padding:.6rem 0;border-top:1px solid var(--line)}
.course li b{font-weight:500}
.course li span{color:var(--muted);font-size:.88rem}
.sub3{margin:3rem 0 1rem;font-size:1.4rem}
.works{list-style:none;margin:0;padding:0}
.works li{display:grid;grid-template-columns:9rem 1fr;gap:1.5rem;padding:1rem 0;border-top:1px solid var(--line)}
.works .wy{color:var(--docencia);font-weight:500;font-size:.92rem;color:#8A4A00}
.works .wt{font-family:var(--serif);color:var(--navy);line-height:1.4}
@media (max-width:600px){.works li{grid-template-columns:1fr;gap:.3rem}}
.src{color:var(--muted);font-size:.88rem;margin-top:1.5rem}
.mcard.prensa .mhead{background:#33475B}
.mlinks{list-style:none;margin:auto 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}
.mlinks a,.mlinks span{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:.25rem .8rem;font-size:.9rem;text-decoration:none}
.mlinks span{color:var(--muted)}
.mlinks a:hover{border-color:var(--link)}
.event{margin:1.5rem 0 0}
/* Selector de idioma */
.lang{display:flex;gap:.25rem;flex:0 0 auto;font-size:.88rem;font-weight:500}
.lang span,.lang a{padding:.25rem .55rem;border-radius:999px;text-decoration:none}
.lang span{background:var(--navy);color:#fff}
.lang a{color:var(--muted);border:1px solid var(--line)}
.lang a:hover{color:var(--navy);border-color:var(--navy)}
@media (max-width:820px){.lang{position:absolute;right:1.5rem;top:1rem}.top .in{position:relative}}
.covers .tr{font-style:italic;color:var(--muted);font-size:.88rem;line-height:1.4;margin-top:.2rem}
