/* daezpro.com — 12-dossier-lens-cascade.css
   Dossier "pérdidas técnicas": doble lente (.lens ingeniería/financiera), cápsula
   de respuesta (.capsule) y la cascada de pérdidas (.cascade) — diagrama unifilar
   en corte de la energía que se fuga tramo a tramo. */

/* ---------------------------------------------------------------- LENTE */
.lens{
  display:inline-flex;
  align-items:center;
  gap:2px;
  padding:3px;
  background:var(--bg-canvas);
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  flex:0 0 auto;
}
/* dentro de la barra de anclas se ancla a la derecha, sin romper el scroll de links */
.secnav__inner .lens{ margin-left:auto; }

/* Barra de anclas que además lleva el lente (.secnav--lens):
   el scroll horizontal se traslada de .secnav__inner a .secnav__scroll, para que
   el lente quede fijo a la derecha y NO se pierda al desplazar los anclas. */
.secnav--lens .secnav__inner{
  overflow-x:visible;
  flex-wrap:nowrap;
  align-items:center;
  gap:14px;
}
.secnav--lens .secnav__scroll{
  display:flex;
  gap:clamp(16px,2vw,28px);
  flex:1 1 auto;
  min-width:0;
  overflow-x:auto;
  scrollbar-width:none;
}
.secnav--lens .secnav__scroll::-webkit-scrollbar{ display:none; }

.lens__btn{
  padding:7px 15px;
  border:none;
  border-radius:var(--r-pill);
  background:transparent;
  font-family:var(--font-mono);
  font-size:var(--fs-xs);
  font-weight:500;
  letter-spacing:.02em;
  color:var(--text-body);
  white-space:nowrap;
  transition:background-color .16s ease, color .16s ease;
}
.lens__btn:hover{ color:var(--text-strong); }
.lens__btn.is-on{
  background:var(--text-strong);
  color:var(--text-invert);
}
.lens__btn.is-on:hover{ color:var(--text-invert); }

/* ------------------------------------------------------- VISTAS EXCLUYENTES
   .lens-eng / .lens-fin conviven SIEMPRE en el DOM (requisito de SEO); el CSS
   decide cuál se pinta según la clase que el JS pone en <body>. display:none
   oculta igual sin importar la etiqueta (span, p, div, tr, li…) porque nunca
   fijamos un display explícito en el lado visible: ese elemento conserva su
   display nativo según su propia etiqueta. */
.lens-mode-eng .lens-fin,
.lens-mode-fin .lens-eng{
  display:none;
}
/* Anti-parpadeo: el <script> en línea del <head> (ver src/shell.html) resuelve
   ?vista=financiera ANTES del primer pintado y marca <html data-vista>. Sin
   esto, un enlace compartido mostraría un fogonazo de la vista de ingeniería
   hasta que corriera 04-dossier.js al final del body. */
html[data-vista="eng"] .lens-fin,
html[data-vista="fin"] .lens-eng{
  display:none;
}
/* …pero una vez que el JS pone la clase en <body>, ESA manda: si no, cambiar de
   vista con los botones no tendría efecto (el atributo del <html> ganaría). */
body.lens-mode-fin .lens-fin,
body.lens-mode-eng .lens-eng{
  display:revert;
}
/* Respaldo estático: sin JS de ningún tipo, se ve la vista de ingeniería. */
html:not([data-vista]) body:not(.lens-mode-fin):not(.lens-mode-eng) .lens-fin{
  display:none;
}

/* --------------------------------------------------------------- CÁPSULA */
.capsule{
  max-width:62ch;
  margin-top:18px;
  padding:16px 22px;
  border-left:3px solid var(--accent);
  background:var(--bg-canvas);
  border-radius:0 var(--r-md) var(--r-md) 0;
  font-size:var(--fs-h3);
  line-height:1.6;
  color:var(--text-body);
}
.capsule b,.capsule strong{ color:var(--text-strong); font-weight:600; }

/* --------------------------------------------------------------- CASCADA
   Custom properties --flow / --bleed: attr() todavía no es fiable para valores
   numéricos usados en calc()/longitudes, así que el JS (04-dossier.js →
   initCascade) lee data-flow / data-bleed de cada .cascade__stage y las vuelca
   como style="--flow:…; --bleed:…" en el propio elemento. Los valores por
   defecto de aquí abajo son el respaldo si el JS no corre. */
.cascade{
  margin-top:clamp(32px,3.4vw,44px);
  border-top:1px solid var(--border);
}
.cascade__stage{
  --flow:100;
  --bleed:1;
  display:grid;
  grid-template-columns:150px minmax(0,1fr) 188px;
  column-gap:28px;
  row-gap:10px;
  align-items:center;
  padding:24px 4px 20px;
  border-bottom:1px solid var(--border);
}

.cascade__level{ display:flex; flex-direction:column; gap:3px; }
.cascade__v{
  font-family:var(--font-mono);
  font-size:var(--fs-title);
  font-weight:600;
  letter-spacing:-0.01em;
  color:var(--text-strong);
}
.cascade__name{ font-size:var(--fs-xs); line-height:1.35; color:var(--text-body); }

/* el tronco: energía que sigue fluyendo hacia la siguiente etapa */
.cascade__trunk{
  position:relative;
  height:30px;
  background:
    repeating-linear-gradient(90deg, var(--border) 0 1px, transparent 1px 14px),
    var(--bg-canvas);
  border:1px solid var(--border);
  border-radius:var(--r-sm);
}
.cascade__trunk::before{
  content:"";
  position:absolute;
  inset:0;
  width:calc(var(--flow, 100) * 1%);
  background:linear-gradient(180deg, var(--text-strong), color-mix(in srgb, var(--text-strong) 76%, transparent));
  border-radius:var(--r-xs);
  transition:width .3s ease;
}
/* la sangría: la energía que se fuga en esta etapa, grosor ∝ --bleed */
.cascade__bleed{
  position:absolute;
  top:-1px;
  left:calc(var(--flow, 100) * 1% - 3px);
  height:calc(100% + 2px);
  width:clamp(7px, calc(var(--bleed, 1) * 11px), 42px);
  background:var(--accent);
  clip-path:polygon(0 0, 100% 22%, 76% 100%, 0 100%);
  transition:width .3s ease, left .3s ease;
}

.cascade__loss{
  text-align:right;
  font-size:var(--fs-body);
  line-height:1.4;
  color:var(--text-body);
}
.cascade__loss b{ color:var(--accent-strong); font-weight:700; }

.cascade__mech{
  grid-column:1 / -1;
  margin-top:2px;
  font-family:var(--font-mono);
  font-size:var(--fs-xs);
  color:var(--text-body);
  opacity:.85;
}

.cascade__total{
  margin-top:22px;
  padding-top:18px;
  border-top:2px solid var(--text-strong);
  font-family:var(--font-display);
  font-weight:700;
  font-size:clamp(18px,1.7vw,22px);
  letter-spacing:-0.01em;
  color:var(--text-strong);
}
.cascade__total b{ color:var(--accent-strong); }

/* ---------------------------------------------------------- RESPONSIVE */
@media (max-width:900px){
  .cascade__stage{ grid-template-columns:130px minmax(0,1fr) 150px; column-gap:18px; }
}
@media (max-width:700px){
  .lens__btn{ padding:6px 12px; font-size:var(--fs-xs); flex:1 1 0; text-align:center; }
  .capsule{ font-size:var(--fs-h3); padding:14px 18px; }

  /* El lente pasa a su propia fila, a lo ancho: es el control principal del
     documento y no puede quedar escondido tras el scroll de los anclas. */
  .secnav--lens .secnav__inner{ flex-direction:column; align-items:stretch; gap:10px; }
  .secnav--lens .secnav__scroll{ order:2; }
  .secnav--lens .lens{ order:1; margin-left:0; display:flex; }

  .cascade__stage{
    grid-template-columns:1fr;
    row-gap:12px;
    padding:20px 2px 18px;
  }
  .cascade__loss{ text-align:left; }
  .cascade__trunk{ height:24px; }
}

/* -------------------------------------------------- REDUCED MOTION */
@media (prefers-reduced-motion:reduce){
  .cascade__trunk::before,
  .cascade__bleed,
  .lens__btn{ transition:none; }
}
