/* =========================================================
   STRUCTURA — Main Stylesheet
   Dirección: Blueprint técnico
   ========================================================= */

@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap');

:root {
  --bg:        #0A0E13;
  --surface:   #10161D;
  --surface-2: #161D26;
  --border:    #232B35;
  --text:      #E7ECEF;
  --muted:     #7C8894;
  --accent:    #2DD4FF;
  --accent-dim: rgba(45, 212, 255, 0.12);
  --accent-dk: #0FA8CE;

  --font-sans: 'IBM Plex Sans', sans-serif;
  --font-mono: 'IBM Plex Mono', monospace;

  --flow:   cubic-bezier(.22, .61, .30, 1);
  --spring: cubic-bezier(.34, 1.4, .5, 1);
}

* { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior: auto; }

body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-sans);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 { font-weight: 600; letter-spacing: -0.01em; }
a { color: var(--accent); text-decoration: none; }

.container { width: 90%; max-width: 1160px; margin-inline: auto; }

.mono { font-family: var(--font-mono); }

/* ---- Reveal on scroll ---- */
.reveal {
  opacity: 0;
  scale: .96;
  filter: blur(6px);
  transition: opacity .8s var(--flow), scale .8s var(--flow), filter .8s var(--flow);
}
.reveal.is-in { opacity: 1; scale: 1; filter: blur(0); }
.reveal--stagger.is-in { transition-delay: var(--d, 0ms); }
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity:1; scale:1; filter:blur(0); transition:none; }
}

/* ---- Grid backdrop motif ---- */
.grid-backdrop {
  background-image:
    linear-gradient(rgba(45,212,255,0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(45,212,255,0.05) 1px, transparent 1px);
  background-size: 48px 48px;
}

/* ---- Nav ---- */
.nav {
  position: sticky; top:0; z-index:100;
  background: rgba(10,14,19,0.85);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border);
  padding: 18px 0;
}
.nav__inner { display:flex; align-items:center; justify-content:space-between; }
.nav__logo { display:flex; align-items:center; gap:10px; }
.nav__mark {
  width:34px; height:34px;
  display:flex; align-items:center; justify-content:center;
  transition: transform .5s var(--spring);
}
.nav__logo.is-clicked .nav__mark { transform: scale(1.15) rotate(-6deg); }
.nav__name { font-family: var(--font-mono); font-size:1.05rem; font-weight:600; color: var(--text); }
.nav__name span { color: var(--accent); }
.nav__links { display:flex; align-items:center; gap:34px; list-style:none; }
.nav__links a { color: var(--muted); font-size:0.88rem; transition: color .2s var(--flow); }
.nav__links a:hover { color: var(--text); }
.nav__cta {
  border:1px solid var(--accent); color:var(--accent) !important;
  padding:9px 20px; font-family: var(--font-mono); font-size:0.82rem !important;
  transition: background .2s var(--flow), color .2s var(--flow), transform .2s var(--spring);
}
.nav__cta:hover { background: var(--accent); color: var(--bg) !important; }
.nav__cta:active { transform: translateY(2px) scale(.97); }

/* ---- Hero ---- */
.hero {
  min-height: 90vh;
  display:flex; align-items:center;
  position: relative;
  overflow:hidden;
}
.hero__inner {
  position:relative; z-index:1; padding-block:80px;
  display:grid; grid-template-columns: 1fr 1fr; gap:40px; align-items:center;
}
.hero__content { max-width:560px; }
.hero__eyebrow {
  font-family: var(--font-mono); font-size:0.82rem; color: var(--accent);
  display:flex; align-items:center; gap:10px; margin-bottom:28px;
}
.hero__eyebrow::before { content:''; width:8px; height:8px; background:var(--accent); border-radius:50%; box-shadow:0 0 12px var(--accent); }
.hero__title { font-size: clamp(2.4rem, 5vw, 3.6rem); line-height:1.15; margin-bottom:24px; }
.hero__title .hl { color: var(--accent); }
.hero__sub { font-size:1.05rem; color: var(--muted); max-width:520px; margin-bottom:40px; }
.hero__actions { display:flex; gap:16px; flex-wrap:wrap; }

@keyframes float-idle {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-12px); }
}
@media (prefers-reduced-motion: reduce) { .hero__hub { animation:none; } }

.btn-primary {
  display:inline-flex; align-items:center; gap:10px;
  background: var(--accent); color: var(--bg);
  font-family: var(--font-mono); font-weight:600; font-size:0.9rem;
  padding:15px 30px;
  transition: transform .2s var(--spring), background .2s var(--flow);
}
.btn-primary:hover { background: var(--accent-dk); }
.btn-primary:active { transform: translateY(2px) scale(.97); }

.btn-ghost {
  display:inline-flex; align-items:center; gap:10px;
  background:transparent; border:1px solid var(--border); color: var(--text);
  font-family: var(--font-mono); font-size:0.9rem;
  padding:14px 28px;
  transition: border-color .2s var(--flow), transform .2s var(--spring), background .2s var(--flow);
}
.btn-ghost:hover { border-color: var(--accent); background: var(--accent-dim); }
.btn-ghost:active { transform: translateY(2px) scale(.97); }

/* ---- Section shared ---- */
.section { padding: 110px 0; }
.section-eyebrow { font-family: var(--font-mono); font-size:0.8rem; color: var(--accent); margin-bottom:16px; }
.section-title { font-size: clamp(1.7rem, 3.2vw, 2.3rem); margin-bottom:18px; }
.section-sub { color: var(--muted); max-width:540px; font-size:1rem; }

/* ---- Services ---- */
.services-grid {
  display:grid; grid-template-columns:1fr 1fr; gap:1px;
  margin-top:56px; background: var(--border);
}
.service-block { background: var(--bg); padding:48px 40px; }
.service-block__num { font-family: var(--font-mono); color: var(--accent); font-size:0.85rem; margin-bottom:20px; }
.service-block h3 { font-size:1.3rem; margin-bottom:14px; }
.service-block p { color: var(--muted); font-size:0.95rem; margin-bottom:24px; }
.service-block__tags { display:flex; gap:8px; flex-wrap:wrap; }
.tag {
  font-family: var(--font-mono); font-size:0.72rem; color: var(--accent);
  border:1px solid var(--border); padding:4px 10px;
}

/* ---- Products (SaaS) ---- */
.products { background: var(--surface); }
.product-grid { display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:56px; }
.product-card {
  background: var(--bg); border:1px solid var(--border);
  padding:36px; transition: border-color .3s var(--flow), transform .3s var(--flow);
}
.product-card:hover { border-color: var(--accent); transform: translateY(-3px); }
.product-card__status {
  display:inline-flex; align-items:center; gap:6px;
  font-family: var(--font-mono); font-size:0.7rem; color: var(--accent);
  margin-bottom:20px;
}
.product-card__status::before { content:''; width:6px; height:6px; background:var(--accent); border-radius:50%; }
.product-card h3 { font-size:1.15rem; margin-bottom:12px; }
.product-card p { color: var(--muted); font-size:0.9rem; margin-bottom:20px; }
.product-card__meta { display:flex; gap:20px; font-family: var(--font-mono); font-size:0.75rem; color: var(--muted); border-top:1px solid var(--border); padding-top:16px; }

/* ---- Portfolio ---- */
.portfolio-grid { display:grid; grid-template-columns: repeat(3,1fr); gap:20px; margin-top:56px; }
.folio-card {
  aspect-ratio: 4/3;
  background: linear-gradient(150deg, var(--surface-2), var(--surface));
  border: 1px solid var(--border);
  display:flex; flex-direction:column; justify-content:flex-end;
  padding:24px; position:relative; overflow:hidden;
  transition: border-color .3s var(--flow);
}
.folio-card:hover { border-color: var(--accent); }
.folio-card__label { font-family: var(--font-mono); font-size:0.72rem; color: var(--accent); margin-bottom:6px; }
.folio-card__name { font-size:1.1rem; font-weight:600; }

/* ---- Contact ---- */
.contact { text-align:center; }
.contact-inner { max-width:600px; margin-inline:auto; }
.contact .section-sub { margin-inline:auto; }
.contact__actions { display:flex; justify-content:center; gap:16px; margin-top:36px; flex-wrap:wrap; }

/* ---- Footer ---- */
.footer {
  border-top:1px solid var(--border);
  padding: 32px 0;
  display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:16px;
}
.footer__brand { font-family: var(--font-mono); font-size:0.85rem; color: var(--muted); }
.footer__brand span { color: var(--accent); }
.footer__links { display:flex; gap:24px; }
.footer__links a { font-size:0.82rem; color: var(--muted); }
.footer__links a:hover { color: var(--text); }

/* ---- Ticker / Marquee ---- */
.ticker {
  background: var(--surface);
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  overflow: hidden;
  padding: 22px 0;
}
.ticker__track { display:flex; width: max-content; animation: ticker-scroll 32s linear infinite; }
.ticker:hover .ticker__track { animation-play-state: paused; }
.ticker__group { display:flex; align-items:center; flex-shrink:0; }
.ticker__item {
  font-family: var(--font-mono); font-size:0.95rem; color: var(--text);
  white-space:nowrap; padding-inline: 22px;
}
.ticker__item--dim { color: var(--muted); }
.ticker__dot { width:6px; height:6px; background: var(--accent); border-radius:2px; transform:rotate(45deg); flex-shrink:0; }
.ticker__dot--dim { background: var(--accent-dim); border: 1px solid var(--accent); }
@keyframes ticker-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .ticker__track { animation: none; }
}

/* ---- Hub diagram ---- */
.hub {
  position: relative;
  max-width: 680px; margin: 64px auto 0;
  aspect-ratio: 640/440;
}
.hero__hub { margin:0; max-width:100%; }
.hub__lines { position:absolute; inset:0; width:100%; height:100%; }
.hub__lines path {
  fill:none; stroke: var(--border); stroke-width:1.5; stroke-dasharray: 4 6;
  animation: dash-flow 1.2s linear infinite;
}
@keyframes dash-flow { to { stroke-dashoffset: -20; } }

.hub__core {
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:72px; height:72px; border-radius:18px;
  background: var(--bg); border:1px solid var(--accent);
  display:flex; align-items:center; justify-content:center;
  box-shadow: 0 0 40px rgba(45,212,255,0.18);
  animation: core-pulse 2.4s ease-in-out infinite;
}
@keyframes core-pulse {
  0%, 100% { box-shadow: 0 0 30px rgba(45,212,255,0.16); }
  50%      { box-shadow: 0 0 52px rgba(45,212,255,0.32); }
}
.hub__core svg { width:34px; height:34px; }
.hub__core-label {
  position:absolute; top:calc(50% + 52px); left:50%; transform:translateX(-50%);
  font-size:0.68rem; letter-spacing:0.14em; color: var(--muted); white-space:nowrap;
}
.hub__node {
  position:absolute; transform:translate(-50%,-50%);
  display:flex; align-items:center; gap:8px;
}
.hub__node-dot {
  width:12px; height:12px; border-radius:3px; transform:rotate(45deg);
  background: var(--accent); box-shadow:0 0 14px var(--accent);
}
.hub__node-label {
  font-size:0.85rem; font-weight:500; color: var(--text); white-space:nowrap;
}
.hub__card {
  position:absolute; background: var(--bg); border:1px solid var(--border);
  border-radius:12px; padding:18px 20px; width:220px;
  box-shadow: 0 12px 30px rgba(0,0,0,0.35);
}
.hub__card--stat { top:-6%; left:-4%; }
.hub__card--flow { bottom:-8%; right:-2%; }
.hub__card-head {
  display:flex; align-items:center; gap:8px; font-size:0.68rem; color: var(--accent);
  letter-spacing:0.1em; margin-bottom:14px;
}
.hub__live-dot {
  width:6px; height:6px; background: var(--accent); border-radius:50%;
  box-shadow:0 0 8px var(--accent);
  animation: live-pulse 1.6s ease-in-out infinite;
}
@keyframes live-pulse {
  0%, 100% { opacity:1; box-shadow:0 0 8px var(--accent); }
  50%      { opacity:0.4; box-shadow:0 0 2px var(--accent); }
}
.hub__card {
  position:absolute; background: var(--bg); border:1px solid var(--border);
  border-radius:12px; padding:18px 20px; width:220px;
  box-shadow: 0 12px 30px rgba(0,0,0,0.35);
  animation: float-idle 5s ease-in-out infinite;
}
.hub__card--flow { animation-delay: -2.5s; }
.hub__bars { display:flex; align-items:flex-end; gap:5px; height:44px; margin-bottom:14px; }
.hub__bars span { flex:1; background: var(--border); border-radius:2px; }
.hub__bars span.is-accent { background: var(--accent); }
.hub__stat { font-family: var(--font-mono); font-size:1.15rem; font-weight:600; color: var(--text); }
.hub__stat small { display:block; font-family: var(--font-sans); font-weight:400; font-size:0.72rem; color: var(--muted); margin-top:2px; }
.hub__flow { display:flex; align-items:center; gap:10px; }
.hub__flow-step {
  font-family: var(--font-mono); font-size:0.75rem; color: var(--text);
  border:1px solid var(--border); padding:8px 12px; border-radius:8px;
}
.hub__flow-arrow { color: var(--accent); }

@media (max-width:820px) {
  .hub { max-width: 100%; aspect-ratio: 1/1.3; }
  .hub__card { width:170px; padding:14px 16px; }
  .hub__node-label { font-size:0.72rem; }
  .hub__card--stat { top:-2%; left:-2%; }
  .hub__card--flow { bottom:-2%; right:-2%; }
}

/* ---- Mobile ---- */
@media (max-width: 820px) {
  .nav__links { display:none; }
  .hero__inner { grid-template-columns: 1fr; padding-block:56px; }
  .hero__content { max-width:100%; }
  .hero__hub { margin-top:48px; max-width:440px; margin-inline:auto; }
  .services-grid, .product-grid { grid-template-columns: 1fr; }
  .portfolio-grid { grid-template-columns: 1fr; }
  .footer { flex-direction:column; text-align:center; }
}