.card{position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.12);border-radius:28px;background:linear-gradient(145deg,rgba(255,255,255,.11),rgba(255,255,255,.045));padding:26px;min-height:220px;box-shadow:0 24px 70px rgba(0,0,0,.20);transition:transform .35s ease,border-color .35s ease,background .35s ease}.card:hover{transform:translateY(-8px);border-color:rgba(0,229,255,.38);background:linear-gradient(145deg,rgba(255,255,255,.15),rgba(255,255,255,.06))}.card-topline{position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent2))}.card h3{font-size:1.32rem;line-height:1.12;margin:0 0 14px;letter-spacing:-.035em}.card p{color:var(--muted);line-height:1.65}.kpi-shell{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.kpi{border:1px solid rgba(255,255,255,.12);border-radius:26px;background:rgba(255,255,255,.06);padding:24px;text-align:center}.kpi strong{display:block;font-size:clamp(2rem,5vw,4rem);letter-spacing:-.07em;background:linear-gradient(135deg,var(--text),var(--accent2));-webkit-background-clip:text;color:transparent}.kpi span{color:var(--muted);font-weight:700}@media(max-width:860px){.kpi-shell{grid-template-columns:1fr 1fr}}@media(max-width:520px){.kpi-shell{grid-template-columns:1fr}}

/* Sprint 2.1 — Publications module, preserving Sprint 1.1 cyber look */
.publications-section h2{max-width:980px}.pub-filters{display:grid;grid-template-columns:minmax(260px,1.5fr) repeat(3,minmax(150px,.7fr));gap:12px;margin:26px 0 30px;padding:14px;border:1px solid rgba(255,255,255,.12);border-radius:24px;background:linear-gradient(135deg,rgba(255,255,255,.08),rgba(255,255,255,.035));box-shadow:0 24px 80px rgba(0,0,0,.22);backdrop-filter:blur(18px)}.pub-filters input,.pub-filters select{width:100%;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(0,0,0,.25);color:var(--text);outline:none}.publication-list{display:grid;gap:16px}.publication-card{position:relative;display:grid;grid-template-columns:94px 1fr;gap:18px;padding:22px;border:1px solid rgba(255,255,255,.12);border-radius:28px;background:linear-gradient(135deg,rgba(255,255,255,.09),rgba(255,255,255,.035));box-shadow:0 22px 70px rgba(0,0,0,.2);overflow:hidden;transition:transform .24s ease,border-color .24s ease,background .24s ease}.publication-card:before{content:"";position:absolute;inset:0 0 auto 0;height:1px;background:linear-gradient(90deg,transparent,var(--accent2),var(--accent),transparent);opacity:.55}.publication-card:hover{transform:translateY(-3px);border-color:rgba(0,229,255,.34);background:linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.045))}.pub-year{display:grid;place-items:center;width:78px;height:78px;border-radius:24px;background:radial-gradient(circle at 30% 20%,rgba(0,229,255,.42),rgba(139,92,246,.22));border:1px solid rgba(255,255,255,.16);font-weight:900;font-size:1.1rem;color:#fff}.pub-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.pub-meta span{font-size:.68rem;text-transform:uppercase;letter-spacing:.16em;color:var(--accent2);border:1px solid rgba(0,229,255,.24);border-radius:999px;padding:5px 9px;background:rgba(0,229,255,.06)}.publication-card h3{margin:0 0 10px;font-size:clamp(1.05rem,2vw,1.45rem);line-height:1.25}.pub-authors,.pub-venue{margin:0 0 8px;color:var(--muted);line-height:1.55}.pub-venue{color:rgba(244,247,255,.82);font-weight:700}.pub-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}.pub-links a{border-radius:999px;padding:8px 12px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);color:var(--text);font-weight:800;font-size:.86rem}.pub-links a:hover{border-color:rgba(0,229,255,.45);box-shadow:0 0 24px rgba(0,229,255,.12)}.pub-empty{padding:22px;border:1px dashed rgba(255,255,255,.2);border-radius:22px;color:var(--muted)}@media(max-width:820px){.pub-filters{grid-template-columns:1fr}.publication-card{grid-template-columns:1fr}.pub-year{width:auto;height:auto;display:inline-flex;padding:10px 14px}}
.pub-filters .pub-reset{border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(255,255,255,.08);color:var(--text);font-weight:900}.pub-filters .pub-reset:hover{border-color:rgba(0,229,255,.42);box-shadow:0 0 22px rgba(0,229,255,.12)}.pub-filters select option{background:#080b18;color:#f4f7ff}.pub-filter-status{margin:-16px 0 22px;color:var(--muted);font-weight:800;font-size:.92rem}@media(min-width:821px){.pub-filters{grid-template-columns:minmax(260px,1.5fr) repeat(3,minmax(150px,.7fr)) minmax(110px,.45fr)}}

.publication-card.is-hidden{display:none!important}

/* Sprint 2.4 — Books / Heyzine module. Uses the same Sprint 1.1 cyber visual language. */
.books-section h2{max-width:980px}.book-filters{display:grid;grid-template-columns:minmax(260px,1.5fr) minmax(150px,.55fr) minmax(110px,.35fr);gap:12px;margin:26px 0 30px;padding:14px;border:1px solid rgba(255,255,255,.12);border-radius:24px;background:linear-gradient(135deg,rgba(255,255,255,.08),rgba(255,255,255,.035));box-shadow:0 24px 80px rgba(0,0,0,.22);backdrop-filter:blur(18px)}.book-filters input,.book-filters select{width:100%;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(0,0,0,.25);color:var(--text);outline:none}.book-filters select option{background:#080b18;color:#f4f7ff}.book-filters .book-reset{border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(255,255,255,.08);color:var(--text);font-weight:900}.book-filters .book-reset:hover{border-color:rgba(0,229,255,.42);box-shadow:0 0 22px rgba(0,229,255,.12)}.book-filter-status{margin:-16px 0 22px;color:var(--muted);font-weight:800;font-size:.92rem}.book-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.book-card{position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.12);border-radius:30px;background:linear-gradient(145deg,rgba(255,255,255,.105),rgba(255,255,255,.04));box-shadow:0 24px 80px rgba(0,0,0,.24);transition:transform .28s ease,border-color .28s ease,background .28s ease}.book-card:before{content:"";position:absolute;inset:0 0 auto 0;height:1px;background:linear-gradient(90deg,transparent,var(--accent2),var(--accent),transparent);opacity:.6}.book-card:hover{transform:translateY(-5px);border-color:rgba(0,229,255,.34);background:linear-gradient(145deg,rgba(255,255,255,.14),rgba(255,255,255,.052))}.book-visual{position:relative;aspect-ratio:16/10;background:radial-gradient(circle at 25% 10%,rgba(0,229,255,.22),transparent 34%),rgba(0,0,0,.26);border-bottom:1px solid rgba(255,255,255,.1)}.book-visual iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#050711}.book-content{padding:22px}.book-content h3{margin:0 0 10px;font-size:clamp(1.15rem,2vw,1.6rem);line-height:1.18;letter-spacing:-.035em}.book-card.is-hidden{display:none!important}@media(max-width:980px){.book-list{grid-template-columns:1fr}}@media(max-width:720px){.book-filters{grid-template-columns:1fr}.book-visual{aspect-ratio:4/3}}


/* Sprint 2.5 — Intellectual Property module. Preserves Sprint 1.1 cyber visual language. */
.ip-section h2{max-width:980px}.ip-filters{display:grid;grid-template-columns:minmax(260px,1.5fr) minmax(150px,.55fr) minmax(190px,.75fr) minmax(110px,.35fr);gap:12px;margin:26px 0 30px;padding:14px;border:1px solid rgba(255,255,255,.12);border-radius:24px;background:linear-gradient(135deg,rgba(255,255,255,.08),rgba(255,255,255,.035));box-shadow:0 24px 80px rgba(0,0,0,.22);backdrop-filter:blur(18px)}.ip-filters input,.ip-filters select{width:100%;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(0,0,0,.25);color:var(--text);outline:none}.ip-filters select option{background:#080b18;color:#f4f7ff}.ip-filters .ip-reset{border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:13px 14px;background:rgba(255,255,255,.08);color:var(--text);font-weight:900}.ip-filters .ip-reset:hover{border-color:rgba(0,229,255,.42);box-shadow:0 0 22px rgba(0,229,255,.12)}.ip-filter-status{margin:-16px 0 22px;color:var(--muted);font-weight:800;font-size:.92rem}.ip-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.ip-card{position:relative;display:grid;grid-template-columns:94px 1fr;gap:18px;align-items:start;padding:22px;border:1px solid rgba(255,255,255,.12);border-radius:28px;background:linear-gradient(135deg,rgba(255,255,255,.09),rgba(255,255,255,.035));box-shadow:0 22px 70px rgba(0,0,0,.2);overflow:hidden;transition:transform .24s ease,border-color .24s ease,background .24s ease}.ip-card:before{content:"";position:absolute;inset:0 0 auto 0;height:1px;background:linear-gradient(90deg,transparent,var(--accent2),var(--accent),transparent);opacity:.55}.ip-card:hover{transform:translateY(-4px);border-color:rgba(0,229,255,.34);background:linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.045))}.ip-badge{display:grid;place-items:center;width:78px;height:78px;border-radius:24px;background:radial-gradient(circle at 30% 20%,rgba(139,92,246,.42),rgba(0,229,255,.2));border:1px solid rgba(255,255,255,.16);font-weight:900;color:#fff}.ip-badge span{font-size:1rem}.ip-content h3{margin:0 0 12px;font-size:clamp(1.05rem,2vw,1.42rem);line-height:1.25}.ip-card.is-hidden{display:none!important}@media(max-width:980px){.ip-list{grid-template-columns:1fr}}@media(max-width:760px){.ip-filters{grid-template-columns:1fr}.ip-card{grid-template-columns:1fr}.ip-badge{width:auto;height:auto;display:inline-flex;padding:10px 14px}}

/* Sprint 3 — Dashboard, global search and dynamic detail */
.dashboard-section .lead.small,
.detail-section .lead.small { max-width: 920px; font-size: 1.02rem; color: var(--muted); }
.dash-kpis { display:grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap:16px; margin:26px 0; }
.dash-kpi { position:relative; overflow:hidden; padding:22px; border:1px solid rgba(255,255,255,.14); border-radius:24px; background:linear-gradient(145deg, rgba(255,255,255,.12), rgba(255,255,255,.04)); box-shadow:0 20px 55px rgba(0,0,0,.22); }
.dash-kpi::after { content:""; position:absolute; inset:auto -20% -45% 35%; height:90px; background:radial-gradient(circle, color-mix(in srgb, var(--accent2) 45%, transparent), transparent 70%); filter:blur(10px); }
.dash-kpi strong { display:block; font-size:clamp(2rem,4vw,4rem); line-height:1; }
.dash-kpi span { display:block; margin-top:8px; color:var(--muted); font-weight:700; text-transform:uppercase; letter-spacing:.08em; font-size:.78rem; }
.dashboard-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:18px; margin-top:22px; }
.chart-card, .detail-card { border:1px solid rgba(255,255,255,.13); border-radius:26px; background:rgba(255,255,255,.065); padding:22px; backdrop-filter: blur(18px); }
.chart-card h3, .detail-card h2 { margin:0 0 16px; }
.bar-row { display:grid; grid-template-columns: 120px 1fr 42px; gap:12px; align-items:center; margin:10px 0; color:var(--muted); }
.bar-track { height:12px; border-radius:999px; background:rgba(255,255,255,.1); overflow:hidden; }
.bar-track i { display:block; height:100%; border-radius:999px; background:linear-gradient(90deg, var(--accent), var(--accent2), var(--accent3)); box-shadow:0 0 22px color-mix(in srgb, var(--accent2) 45%, transparent); }
.section-subtitle { margin-top:36px; }
.result-grid { display:grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap:16px; margin-top:20px; }
.result-card { display:block; text-decoration:none; color:var(--text); padding:20px; border-radius:22px; background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.12); transition: transform .25s ease, border-color .25s ease, background .25s ease; }
.result-card:hover { transform: translateY(-4px); border-color: color-mix(in srgb, var(--accent2) 55%, white 0%); background:rgba(255,255,255,.11); }
.result-card span { display:block; color:var(--accent2); font-size:.75rem; text-transform:uppercase; letter-spacing:.08em; font-weight:800; margin-bottom:10px; }
.result-card h3 { margin:0 0 10px; font-size:1rem; }
.result-card p { margin:0; color:var(--muted); font-size:.9rem; line-height:1.5; }
.global-search-box { display:grid; grid-template-columns:1fr 240px; gap:12px; margin:22px 0 8px; }
.global-search-box input, .global-search-box select { width:100%; border:1px solid rgba(255,255,255,.14); border-radius:16px; background:rgba(3,7,18,.78); color:var(--text); padding:14px 16px; outline:none; }
.detail-hero { position:relative; overflow:hidden; border:1px solid rgba(255,255,255,.14); border-radius:32px; padding:34px; margin-bottom:20px; background:linear-gradient(135deg, rgba(139,92,246,.20), rgba(0,229,255,.08), rgba(255,255,255,.04)); }
.detail-hero h1 { font-size:clamp(2rem,5vw,4rem); line-height:.98; margin:10px 0 14px; }
.detail-grid { display:grid; grid-template-columns: minmax(0,1.35fr) minmax(280px,.65fr); gap:18px; }
.detail-card div { display:grid; grid-template-columns:180px 1fr; gap:12px; padding:10px 0; border-bottom:1px solid rgba(255,255,255,.08); }
.detail-card div:last-child { border-bottom:0; }
.detail-card strong { color:var(--accent2); text-transform:capitalize; }
.detail-card span { color:var(--muted); overflow-wrap:anywhere; }
.back-link { display:inline-flex; margin-bottom:16px; color:var(--accent2); text-decoration:none; font-weight:800; }
.related-link { display:block; color:var(--text); text-decoration:none; border:1px solid rgba(255,255,255,.1); border-radius:16px; padding:12px; margin:10px 0; background:rgba(255,255,255,.05); }
.related-link span { display:block; color:var(--accent3); font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; margin-bottom:5px; }
@media (max-width: 900px) { .dash-kpis, .dashboard-grid, .result-grid, .detail-grid, .global-search-box { grid-template-columns:1fr; } .bar-row { grid-template-columns:90px 1fr 36px; } }
.publication-card h3 a, .book-card h3 a, .ip-card h3 a { color:inherit; text-decoration:none; }
.publication-card h3 a:hover, .book-card h3 a:hover, .ip-card h3 a:hover { color:var(--accent2); }

/* Sprint 4.3 — YouTube video collection */
.video-gallery-section .video-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(320px,1fr));
  gap:22px;
  margin-top:24px;
}
.video-card{
  position:relative;
  overflow:hidden;
  border:1px solid rgba(255,255,255,.12);
  border-radius:28px;
  padding:16px;
  background:linear-gradient(145deg,rgba(255,255,255,.095),rgba(255,255,255,.035));
  box-shadow:0 22px 70px rgba(0,0,0,.34);
  backdrop-filter:blur(18px);
}
.video-card:before{
  content:"";
  position:absolute;
  inset:-1px;
  pointer-events:none;
  background:radial-gradient(circle at 18% 0%,rgba(0,229,255,.22),transparent 34%),radial-gradient(circle at 86% 12%,rgba(180,82,255,.18),transparent 30%);
  opacity:.85;
}
.video-card > *{position:relative;z-index:1}
.video-frame{
  position:relative;
  overflow:hidden;
  aspect-ratio:16/9;
  border-radius:20px;
  margin-bottom:16px;
  background:rgba(0,0,0,.35);
  border:1px solid rgba(255,255,255,.1);
}
.video-frame iframe,
.video-frame img{
  width:100%;
  height:100%;
  display:block;
  border:0;
  object-fit:cover;
}
.video-card h3{
  margin:12px 0 10px;
  font-size:1.08rem;
  line-height:1.25;
}
.video-card h3 a{color:inherit;text-decoration:none}
.video-card p{color:var(--muted);font-size:.95rem;line-height:1.55}

/* Sprint 4.8 — smart navigation cards */
.linked-card{display:flex;flex-direction:column;gap:12px}.linked-card .tag-row{margin-top:auto}.card-link{align-self:flex-start;margin-top:8px;border-radius:999px;padding:10px 14px;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#03111f!important;text-decoration:none;font-weight:900;box-shadow:0 14px 34px rgba(0,229,255,.18);transition:transform .22s ease,filter .22s ease}.card-link:hover{transform:translateY(-2px);filter:brightness(1.08)}

/* Sprint 4.9: KPI cards are fully clickable navigation elements. */
a.kpi, a.dash-kpi { color: inherit; text-decoration: none; cursor: pointer; display:block; }
.kpi.is-clickable, .dash-kpi.is-clickable { position:relative; transition: transform .28s ease, border-color .28s ease, background .28s ease, box-shadow .28s ease; }
.kpi.is-clickable:hover, .dash-kpi.is-clickable:hover { transform: translateY(-6px); border-color: rgba(0,229,255,.42); background: linear-gradient(145deg, rgba(255,255,255,.14), rgba(255,255,255,.065)); box-shadow:0 24px 70px rgba(0,229,255,.10), 0 18px 50px rgba(0,0,0,.24); }
.kpi.is-clickable:focus-visible, .dash-kpi.is-clickable:focus-visible { outline:2px solid var(--accent2); outline-offset:4px; }

/* Sprint 4.12 — estabilidad móvil para publicaciones largas */
.publication-card.is-hidden{display:none!important}.publication-load-more{display:flex;justify-content:center;padding:22px 0 46px}.pub-load-more{border:1px solid rgba(255,255,255,.14);border-radius:999px;padding:13px 20px;background:linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.055));color:var(--text);font-weight:900;cursor:pointer;box-shadow:0 18px 46px rgba(0,0,0,.22);backdrop-filter:blur(14px);transition:transform .22s ease,border-color .22s ease,background .22s ease}.pub-load-more:hover{transform:translateY(-2px);border-color:rgba(0,229,255,.42);background:linear-gradient(135deg,rgba(255,255,255,.16),rgba(255,255,255,.075))}.publication-list{contain:layout paint}.publication-card{content-visibility:auto;contain-intrinsic-size:170px}
@media(max-width:760px){.publication-list{gap:12px}.publication-card{grid-template-columns:1fr!important;padding:18px;border-radius:22px;transform:none!important;content-visibility:auto;contain-intrinsic-size:260px}.publication-card:hover{transform:none!important}.publication-card:before,.publication-card:after{animation:none!important}.pub-year{width:auto;min-height:auto;display:inline-flex;align-self:flex-start;padding:9px 12px;border-radius:16px}.pub-filters{grid-template-columns:1fr!important;gap:10px;padding:12px;margin:18px 0 20px}.pub-filters input,.pub-filters select,.pub-reset{min-height:46px}.pub-links{display:flex;flex-wrap:wrap;gap:8px}.pub-links a{margin:0}.publications-section{overflow:visible}.orb,.orb-a,.orb-b{animation:none!important}.reveal{transition:none!important}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}

/* Sprint 4.14 — public UI refinement: full-card navigation without extra CMS-like buttons */
.interactive-card{cursor:pointer;position:relative}.interactive-card .stretched-card-link{position:absolute;inset:0;z-index:1;border-radius:inherit;font-size:0;color:transparent;text-indent:-9999px}.interactive-card h3 a,.interactive-card .pub-links,.interactive-card .pub-links a,.interactive-card iframe,.interactive-card button{position:relative;z-index:2}.interactive-card:hover{box-shadow:0 26px 90px rgba(0,229,255,.10),0 20px 70px rgba(0,0,0,.25)}
.card.linked-card .card-link{display:none!important}.card.linked-card{cursor:pointer}.card.linked-card:after,.book-card.interactive-card:after,.ip-card.interactive-card:after,.publication-card.interactive-card:after,.video-card.interactive-card:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(135deg,rgba(0,229,255,.10),transparent 38%,rgba(139,92,246,.08));opacity:0;transition:opacity .24s ease}.card.linked-card:hover:after,.book-card.interactive-card:hover:after,.ip-card.interactive-card:hover:after,.publication-card.interactive-card:hover:after,.video-card.interactive-card:hover:after{opacity:1}.book-card .pub-links,.ip-card .pub-links{pointer-events:auto}.book-card iframe{pointer-events:none}.book-card .pub-links a,.ip-card .pub-links a{pointer-events:auto}.card.linked-card .stretched-card-link:focus-visible,.book-card .stretched-card-link:focus-visible,.ip-card .stretched-card-link:focus-visible{outline:2px solid var(--accent2);outline-offset:4px}

/* Sprint 4.21 - cards con link completo opcional */
.card.linked-card { position: relative; }
.card .stretched-card-link {
  position:absolute;
  inset:0;
  z-index:4;
  border-radius:inherit;
  font-size:0;
  color:transparent;
}
.card.linked-card:hover {
  transform: translateY(-2px);
  border-color: rgba(80,220,255,.36);
}
