/* SPDX-License-Identifier: GPL-3.0-or-later · Trenalia */
/* /simulacion: «¿Qué pasaría si…?» (móvil primero; en escritorio, resultados en dos columnas). Colores de styles.css */
.sim-page {
  --sig-etcs2: #12935c; --sig-lzb: #1f6fd1; --sig-etcs1: #0f8b9b; --sig-asfa: #b57600; --sig-unk: #7d8899;
  --sev1: #6b7686; --sev2: #b57600; --sev3: #c75a00; --sev4: #d93a32;
  --heat: #1f6fd1; --base-ln: #7d8899; --scen-ln: #1f6fd1; --cmp-a: #1f6fd1; --cmp-b: #c75a00;
  --mod-pos: #c75a00; --mod-neg: #1f6fd1; --mod-me: #1f6fd1; --mod-bi: #8a6d3b;
}
:root[data-theme="dark"] .sim-page {
  --sig-etcs2: #3ecf8e; --sig-lzb: #5aa9ff; --sig-etcs1: #3cc6d6; --sig-asfa: #f2b33d; --sig-unk: #8b95a7;
  --sev1: #8b95a7; --sev2: #f2b33d; --sev3: #ff9b3d; --sev4: #ff5a52;
  --heat: #5aa9ff; --base-ln: #8c9ab3; --scen-ln: #5aa9ff; --cmp-a: #5aa9ff; --cmp-b: #ff9b3d;
  --mod-pos: #ff9b3d; --mod-neg: #5aa9ff; --mod-me: #5aa9ff; --mod-bi: #d6b56e;
}
.sim-page [hidden] { display: none !important; }
.sim-page .an-tools { margin-left: 4px; }
.sim-tag { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; padding: 2px 7px; border-radius: 999px; background: var(--panel-2); border: 1px solid var(--line); color: var(--muted); }
.sim-main { max-width: 1180px; margin: 0 auto; padding: 18px 16px 8px; box-sizing: border-box; }
.sim-main *, .sim-main *::before, .sim-main *::after { box-sizing: border-box; }
.small { font-size: 12.5px; }
.mono { font-family: var(--mono); }
.nowrap { white-space: nowrap; }
.sim-boot { text-align: center; padding: 40px 0; }

/* ── Tarjetas, botones, formularios ── */
.sim-card { background: var(--panel); border: 1px solid var(--line); border-radius: 16px; padding: 16px; margin: 0 0 14px; min-width: 0; }
.sim-h2 { display: flex; align-items: center; gap: 8px; font-size: 18px; line-height: 1.25; margin: 0 0 6px; }
.sim-h3 { font-size: 15px; margin: 0 0 6px; }
.sim-n { flex: none; display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--on); color: var(--on-fg); font-size: 13px; font-weight: 700; }
.sim-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 46px; padding: 0 18px; border-radius: 12px; border: 1px solid var(--line); background: var(--panel-2); color: var(--text); font: 700 15px var(--sans); cursor: pointer; }
.sim-btn:hover { border-color: var(--blue); }
.sim-btn:focus-visible, .sim-chip:focus-visible, .sim-sec:focus-visible, .sim-tg:focus-visible, .sim-table th button:focus-visible { outline: 3px solid var(--blue); outline-offset: 2px; }
.sim-btn.primary { background: var(--blue); border-color: var(--blue); color: var(--on-accent); }
.sim-btn.big { min-height: 52px; padding: 0 28px; font-size: 16px; }
.sim-btn:disabled { opacity: .65; cursor: progress; }
.sim-btns { display: flex; flex-wrap: wrap; gap: 8px; }
.sim-msg { min-height: 0; margin: 8px 0 0; color: var(--warn-fg); font-size: 14px; }
.sim-msg.info { color: var(--muted); }
.sim-msg:empty { margin: 0; }
.sim-form { display: grid; gap: 12px; }
.sim-f { display: grid; gap: 4px; min-width: 0; }
.sim-f > span, .sim-field label, .sim-lbl { font-size: 12px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.sim-f input, .sim-f select, .sim-f textarea, .sim-field input, .sim-days select {
  width: 100%; min-height: 46px; padding: 0 12px; font: 16px var(--sans); color: var(--text); background: var(--panel); border: 1px solid var(--line); border-radius: 11px; outline: none; }
.sim-f textarea { padding: 10px 12px; min-height: 84px; resize: vertical; line-height: 1.4; }
.sim-f input:focus, .sim-f select:focus, .sim-f textarea:focus, .sim-field input:focus { border-color: var(--blue); box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 25%, transparent); }
.sim-f input.bad, .sim-f select.bad { border-color: var(--red); box-shadow: 0 0 0 3px color-mix(in srgb, var(--red) 20%, transparent); }
.sim-f.sm > span { font-size: 11px; }
.sim-f.sm input, .sim-f.sm select { min-height: 40px; font-size: 15px; padding: 0 10px; }
.sim-f-hint { color: var(--muted); font-size: 12px; }
.sim-row2 { display: grid; gap: 12px; }
@media (min-width: 620px) { .sim-row2 { grid-template-columns: 1fr 1fr; } }
.sim-check { display: flex; align-items: flex-start; gap: 10px; font-size: 14px; }
.sim-check input { margin-top: 3px; width: 18px; height: 18px; flex: none; accent-color: var(--blue); }
.sim-privacy { font-size: 13px; line-height: 1.45; padding: 10px 12px; border-radius: 10px; background: var(--panel-2); border: 1px solid var(--line); color: var(--muted); }
.sim-privacy a { color: var(--blue); }
.sim-disc { margin: 10px 0; padding: 10px 12px; border-radius: 10px; background: var(--alert-amber-bg); color: var(--warn-fg); font-size: 13.5px; line-height: 1.4; border: 1px solid color-mix(in srgb, var(--amber) 35%, transparent); }
.sim-empty { color: var(--muted); font-size: 14px; margin: 8px 0; }

/* Segmentos / pestañas */
.sim-seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 4px; padding: 4px; background: var(--panel-2); border: 1px solid var(--line); border-radius: 12px; }
.sim-seg button { min-height: 40px; border: 0; border-radius: 9px; background: transparent; font: 700 14px var(--sans); color: var(--muted); cursor: pointer; padding: 0 10px; }
.sim-seg button[aria-selected="true"], .sim-seg button[aria-checked="true"] { background: var(--on); color: var(--on-fg); }
.sim-seg button:focus-visible, .sim-tabs button:focus-visible { outline: 3px solid var(--blue); outline-offset: 1px; }
.sim-seg.small button { min-height: 32px; font-size: 13px; }

/* ── Sin sesión ── */
.sim-gate { display: grid; gap: 18px; align-items: start; }
@media (min-width: 960px) { .sim-gate { grid-template-columns: 1fr minmax(420px, 520px); gap: 32px; padding-top: 18px; } }
.sim-hero h1 { font-size: 30px; line-height: 1.12; margin: 0 0 10px; letter-spacing: -.015em; }
.sim-lead { font-size: 16.5px; line-height: 1.5; margin: 0 0 12px; }
.sim-feats { margin: 0 0 12px; padding: 0; list-style: none; display: grid; gap: 8px; }
.sim-feats li { position: relative; padding-left: 26px; line-height: 1.4; }
.sim-feats li::before { content: ''; position: absolute; left: 4px; top: 6px; width: 10px; height: 10px; border-radius: 3px; background: var(--blue); }
.sim-feats li:nth-child(2)::before { background: var(--sev3); }
.sim-feats li:nth-child(3)::before { background: var(--green); }
.sim-auth { display: grid; gap: 14px; margin: 0; }
.sim-ok { padding: 14px; border-radius: 12px; background: color-mix(in srgb, var(--green) 12%, var(--panel)); border: 1px solid color-mix(in srgb, var(--green) 40%, transparent); }
.sim-ok p { margin: 4px 0 0; }
.sim-pw { max-width: 520px; margin: 18px auto; }

/* ── Con sesión ── */
.sim-user { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; justify-content: flex-end; margin: -6px 0 10px; font-size: 14px; }
.sim-who { color: var(--muted); margin-right: auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.sim-tabs { display: flex; gap: 4px; padding: 4px; margin: 0 0 14px; background: var(--panel-2); border: 1px solid var(--line); border-radius: 12px; overflow-x: auto; scrollbar-width: none; }
.sim-tabs button { flex: 1 0 auto; min-height: 42px; padding: 0 14px; border: 0; border-radius: 9px; background: transparent; font: 700 14px var(--sans); color: var(--muted); cursor: pointer; white-space: nowrap; }
.sim-tabs button[aria-selected="true"] { background: var(--on); color: var(--on-fg); }

/* Ámbito */
.sim-scope { display: grid; gap: 10px; margin-top: 10px; }
@media (min-width: 760px) { .sim-scope { grid-template-columns: 1fr 1fr 220px auto; align-items: start; } .sim-scope .sim-btn { margin-top: 21px; } }
.sim-field { position: relative; display: grid; gap: 4px; min-width: 0; }
.sim-ac { position: absolute; z-index: 30; top: 100%; left: 0; right: 0; margin: 4px 0 0; padding: 4px; list-style: none; background: var(--panel); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 8px 24px var(--shadow); max-height: 300px; overflow: auto; }
.sim-ac li { padding: 10px 12px; border-radius: 8px; cursor: pointer; }
.sim-ac li[aria-selected="true"], .sim-ac li:hover { background: var(--panel-2); }
.sim-ac .sim-ac-none { color: var(--muted); cursor: default; }
.sim-mode { margin: 2px 0 0; font-size: 12px; line-height: 1.35; color: var(--faint); display: flex; flex-wrap: wrap; gap: 2px 8px; }
.sim-mode span { padding: 1px 0; }
.sim-mode.is-past .past, .sim-mode.is-fut .fut { color: var(--text); font-weight: 700; }
.sim-mode.is-past .past::before, .sim-mode.is-fut .fut::before { content: '● '; color: var(--blue); }

/* Corredor */
.sim-corr { margin-top: 14px; border-top: 1px solid var(--line); padding-top: 12px; }
.sim-corr-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 14px; align-items: baseline; font-size: 14.5px; }
.sim-corr-head .an-sub { margin: 0 0 0 4px; font-size: 13px; }
.sim-corr-sel { font-size: 13px; color: var(--muted); display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
.sim-corr-sel .an-link { font-size: 13px; }
.sim-lines-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0; }
.sim-chip { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel-2); color: var(--text); font: 600 13.5px var(--sans); cursor: pointer; text-align: left; }
.sim-chip:hover { border-color: var(--blue); }
.sim-chip.ro { cursor: default; min-height: 28px; font-size: 12.5px; padding: 0 10px; }
.sim-chip.ro:hover { border-color: var(--line); }
.sim-chip.ro b { color: var(--muted); font-weight: 600; }
.sim-chip.add { border-style: dashed; background: transparent; }

.sim-strip { list-style: none; margin: 12px 0 6px; padding: 0; display: grid; }
.sim-st { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 14px; min-height: 26px; }
.sim-st .dot { flex: none; width: 14px; height: 14px; border-radius: 50%; border: 3px solid var(--text); background: var(--panel); margin-left: 3px; }
.sim-sec-li { padding-left: 9px; }
.sim-sec { position: relative; width: 100%; display: grid; grid-template-columns: 4px 1fr auto; gap: 12px; align-items: center; text-align: left; padding: 8px 10px 8px 0; margin: 2px 0; background: transparent; border: 1px solid transparent; border-radius: 12px; color: var(--text); font: inherit; cursor: pointer; }
.sim-sec .rail { align-self: stretch; width: 4px; border-radius: 2px; background: var(--sig-unk); margin-left: 0; }
.sim-sec.is-single .rail { background: repeating-linear-gradient(180deg, currentColor 0 6px, transparent 6px 10px); width: 4px; }
.sim-sec .rail.sig-etcs2 { color: var(--sig-etcs2); } .sim-sec .rail.sig-lzb { color: var(--sig-lzb); } .sim-sec .rail.sig-etcs1 { color: var(--sig-etcs1); }
.sim-sec .rail.sig-asfa { color: var(--sig-asfa); } .sim-sec .rail.sig-unk { color: var(--sig-unk); }
.sim-sec:not(.is-single) .rail { background: currentColor; }
.sim-sec:hover { background: var(--panel-2); }
.sim-sec[aria-pressed="true"] { background: color-mix(in srgb, var(--blue) 10%, var(--panel)); border-color: var(--blue); }
.sim-sec-body { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; min-width: 0; }
.sim-sec-km { font-weight: 700; font-size: 14px; min-width: 52px; }
.sim-bds { display: inline-flex; gap: 4px; flex-wrap: wrap; }
.sim-sec-meta { display: inline-flex; flex-wrap: wrap; gap: 2px 10px; font-size: 12.5px; color: var(--muted); }
.sim-sec-meta .inv { color: var(--sev3); }
.sim-sec-check { width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--line); display: grid; place-items: center; font-size: 13px; color: transparent; }
.sim-sec[aria-pressed="true"] .sim-sec-check { background: var(--blue); border-color: var(--blue); color: var(--on-accent); }
.sim-bd { display: inline-block; font-size: 11.5px; font-weight: 700; padding: 1px 7px; border-radius: 6px; border: 1px solid currentColor; white-space: nowrap; line-height: 1.5; }
.sim-bd.sig-etcs2 { color: var(--sig-etcs2); } .sim-bd.sig-lzb { color: var(--sig-lzb); } .sim-bd.sig-etcs1 { color: var(--sig-etcs1); }
.sim-bd.sig-asfa { color: var(--sig-asfa); } .sim-bd.sig-unk { color: var(--sig-unk); }
.sim-bd.single { color: var(--text); border-style: dashed; }

.sim-sec-od { display: none; }
@media (min-width: 760px) {
  /* En pantalla ancha, el corredor en horizontal: una tarjeta por tramo (se desplaza si no cabe) */
  .sim-strip { display: flex; gap: 6px; align-items: stretch; overflow-x: auto; padding: 4px 2px 10px; scroll-snap-type: x proximity; }
  .sim-st { display: none; }
  .sim-sec-li { flex: 1 0 136px; min-width: 0; padding: 0; scroll-snap-align: start; display: flex; }
  .sim-sec { grid-template-columns: 1fr; grid-template-rows: auto 4px auto; gap: 8px; padding: 10px 12px 12px; margin: 0; align-items: start; align-content: start; border-color: var(--line); background: var(--panel); }
  .sim-sec:hover { background: var(--panel-2); }
  .sim-sec-od { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; font-size: 12.5px; font-weight: 700; line-height: 1.25; padding-right: 22px; height: 3.75em; overflow-wrap: anywhere; }
  .sim-sec .rail { grid-row: 2; width: auto; height: 4px; margin: 0 -12px; border-radius: 0; }
  .sim-sec-od { grid-row: 1; }
  .sim-sec-body { grid-row: 3; }
  .sim-sec.is-single .rail { width: auto; background: repeating-linear-gradient(90deg, currentColor 0 8px, transparent 8px 12px); }
  .sim-sec-body { flex-direction: column; align-items: flex-start; gap: 6px; }
  .sim-sec-check { position: absolute; top: 9px; right: 9px; }
}

/* Escenario */
.sim-presets, .sim-add { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 10px 0 0; }
.sim-presets .sim-lbl, .sim-add .sim-lbl { width: 100%; }
@media (min-width: 760px) { .sim-presets .sim-lbl, .sim-add .sim-lbl { width: auto; min-width: 64px; } }
.sim-ivs { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 10px; }
.sim-iv { border: 1px solid var(--line); border-left: 4px solid var(--blue); border-radius: 12px; padding: 10px 12px 12px; background: var(--panel-2); }
.sim-iv.new { animation: sim-new 1.6s ease-out 1; }
@keyframes sim-new { 0% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 45%, transparent); } 100% { box-shadow: 0 0 0 0 transparent; } }
.sim-iv.t-delay { border-left-color: var(--sev3); } .sim-iv.t-cancel { border-left-color: var(--sev4); } .sim-iv.t-closure { border-left-color: var(--sev4); }
.sim-iv.t-extraTrains { border-left-color: var(--blue); } .sim-iv.t-headway { border-left-color: var(--sig-etcs2); } .sim-iv.t-speed { border-left-color: var(--sev2); }
.sim-iv-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.sim-iv-n { font-size: 12px; font-weight: 700; color: var(--muted); }
.sim-x { margin-left: auto; width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--line); background: var(--panel); color: var(--muted); font-size: 20px; line-height: 1; cursor: pointer; }
.sim-x:hover { color: var(--red); border-color: var(--red); }
.sim-iv-fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
.sim-f-secs { grid-column: 1 / -1; }
.sim-secs-v { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; font-size: 14px; }
.sim-secs-v .an-link { font-size: 13px; }
.sim-secs-v .an-link:disabled { color: var(--faint); text-decoration: none; cursor: default; }
.sim-inv { margin-top: 16px; padding: 12px; border-radius: 12px; border: 1px solid var(--line); }
.sim-inv label { display: flex; justify-content: space-between; gap: 10px; font-weight: 600; font-size: 14px; }
.sim-inv b { font-family: var(--mono); }
.sim-inv input[type=range] { width: 100%; margin: 10px 0 2px; accent-color: var(--blue); }
.sim-inv .an-sub { margin: 0; }
.sim-run { display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: center; margin-top: 16px; }
.sim-run .sim-btn { flex: 1 1 220px; max-width: 360px; }
.sim-spin { display: none; width: 18px; height: 18px; border-radius: 50%; border: 2.5px solid currentColor; border-right-color: transparent; animation: sim-spin .8s linear infinite; }
.sim-btn.busy .sim-spin { display: inline-block; }
@keyframes sim-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .sim-spin { animation-duration: 2s; } .sim-iv.new { animation: none; } }

/* ── Resultados ── */
.sim-results { scroll-margin-top: 70px; transition: opacity .2s; }
.sim-results.stale { opacity: .45; }
.sim-res-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; margin: 18px 0 0; }
.sim-card .sim-res-head { margin-top: 0; }
.sim-badge { font-size: 12.5px; font-weight: 700; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel-2); }
.sim-badge.past { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 45%, transparent); }
.sim-badge.fut { color: var(--sev3); border-color: color-mix(in srgb, var(--sev3) 45%, transparent); }
.sim-kpis { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 12px 0 8px; }
@media (min-width: 760px) { .sim-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1100px) { .sim-kpis { grid-template-columns: repeat(6, minmax(0, 1fr)); } }
.sim-kpi { display: grid; gap: 2px; align-content: start; padding: 12px 14px; border-radius: 14px; background: var(--panel); border: 1px solid var(--line); min-width: 0; }
.sim-kpi .k { font-size: 12px; color: var(--muted); font-weight: 600; line-height: 1.25; }
.sim-kpi .v { font: 700 24px/1.15 var(--sans); letter-spacing: -.01em; font-variant-numeric: tabular-nums; }
.sim-kpi .d { font-size: 12.5px; color: var(--muted); }
.sim-kpi .d.worse b { color: var(--red); } .sim-kpi .d.better b { color: var(--green); }
.sim-kpi.hot .v { color: var(--sev3); }
.sim-calib { margin: 0 0 12px; font-size: 13.5px; color: var(--muted); padding: 8px 12px; border-radius: 10px; background: var(--panel-2); border: 1px solid var(--line); }
.sim-grid { display: grid; gap: 0 14px; }
@media (min-width: 1000px) { .sim-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }

/* Gráfico de retraso por hora */
.sim-legend { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 13px; color: var(--muted); margin: 4px 0 6px; }
.sim-legend .lg { display: inline-flex; align-items: center; gap: 6px; }
.sim-legend i { width: 22px; height: 0; border-top: 2px solid var(--scen-ln); }
.sim-legend .base i { border-top: 2px dashed var(--base-ln); }
.sim-chart { width: 100%; min-height: 210px; }
.sim-svg { display: block; width: 100%; height: auto; overflow: visible; touch-action: pan-y; }
.sim-svg .gl { stroke: var(--line); stroke-width: 1; }
.sim-svg .axis { stroke: var(--hover-line); stroke-width: 1; }
.sim-svg .tick { fill: var(--muted); font: 11px var(--sans); font-variant-numeric: tabular-nums; }
.sim-svg .unit { fill: var(--faint); font: 10.5px var(--sans); }
.sim-svg .ln { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.sim-svg .ln.base { stroke: var(--base-ln); stroke-dasharray: 5 4; }
.sim-svg .ln.scen { stroke: var(--scen-ln); }
.sim-svg .gap { fill: var(--scen-ln); opacity: .12; }
.sim-svg .pt { stroke: var(--panel); stroke-width: 2; }
.sim-svg .pt.scen { fill: var(--scen-ln); } .sim-svg .pt.base { fill: var(--base-ln); }
.sim-svg .dl { fill: var(--text); font: 700 12px var(--sans); paint-order: stroke; stroke: var(--panel); stroke-width: 3px; }
.sim-svg .cross { stroke: var(--muted); stroke-width: 1; stroke-dasharray: 2 3; }
.sim-svg .hit { fill: transparent; cursor: crosshair; }
.sim-tip { position: fixed; z-index: 60; pointer-events: none; display: grid; gap: 3px; min-width: 150px; max-width: 260px; padding: 8px 10px; border-radius: 10px; background: var(--modal-bg); border: 1px solid var(--line); box-shadow: 0 6px 20px var(--shadow); font-size: 13px; color: var(--text); }
.sim-tip .tr { display: flex; align-items: center; gap: 6px; }
.sim-tip .tr b { margin-left: auto; font-variant-numeric: tabular-nums; }
.sim-tip .muted { color: var(--muted); }
.sim-tip .sw { width: 14px; border-top: 2px solid var(--scen-ln); }
.sim-tip .sw.base { border-top: 2px dashed var(--base-ln); }

/* Ocupación (mapa de calor) */
.sim-heat-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12.5px; color: var(--muted); margin: 6px 0 8px; align-items: center; }
.sim-heat-legend span { display: inline-flex; align-items: center; gap: 4px; }
.sim-heat-legend .cell { width: 16px; height: 14px; display: inline-block; border-radius: 3px; }
.sim-heat-legend .ramp .cell { margin-right: -2px; }
.sim-heat-wrap { overflow-x: auto; padding-bottom: 4px; --cols: 18; }
.sim-heat { display: grid; gap: 2px; min-width: calc(118px + var(--cols) * 24px); }
.sim-heat .hr { display: grid; grid-template-columns: 118px repeat(var(--cols), minmax(22px, 1fr)); gap: 2px; align-items: stretch; }
.sim-heat .rh { font-size: 12px; line-height: 1.2; padding: 0 6px 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; align-self: center; }
.sim-heat .ch { font-size: 10.5px; color: var(--muted); text-align: center; font-variant-numeric: tabular-nums; }
.sim-heat .cell { min-height: 26px; border-radius: 4px; display: grid; place-items: center; font-size: 10px; font-weight: 700; font-variant-numeric: tabular-nums; position: relative; }
.cell.na { background: repeating-linear-gradient(45deg, var(--panel-2) 0 3px, transparent 3px 6px); }
.cell.b0 { background: color-mix(in srgb, var(--heat) 7%, var(--panel)); }
.cell.b1 { background: color-mix(in srgb, var(--heat) 15%, var(--panel)); }
.cell.b2 { background: color-mix(in srgb, var(--heat) 24%, var(--panel)); }
.cell.b3 { background: color-mix(in srgb, var(--heat) 34%, var(--panel)); }
.cell.b4 { background: color-mix(in srgb, var(--heat) 46%, var(--panel)); }
.cell.b5 { background: color-mix(in srgb, var(--heat) 58%, var(--panel)); }
.cell.b6 { background: color-mix(in srgb, var(--heat) 70%, var(--panel)); }
.cell.warn { background: color-mix(in srgb, var(--amber) 55%, var(--panel)); color: var(--text); box-shadow: inset 0 0 0 2px var(--amber); }
.cell.crit { background: var(--red); color: #fff; box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--red) 70%, #000); }
.cell.up::after { content: ''; position: absolute; top: 2px; right: 2px; width: 0; height: 0; border-left: 5px solid transparent; border-top: 5px solid var(--text); opacity: .75; }
.cell.crit.up::after { border-top-color: #fff; }

/* Árbol de afectados */
.sim-tree-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 8px 14px; }
.sim-tree-head .sim-h3 { margin: 0; }
.sim-tree-tools { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; }
.sim-tree-tools .an-link { font-size: 13px; }
.sim-sev-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12.5px; color: var(--muted); margin: 0 0 8px; }
.sim-sev-legend span { display: inline-flex; align-items: center; gap: 5px; }
.sim-sev-legend i { width: 10px; height: 10px; border-radius: 3px; background: var(--sev1); }
.sim-sev-legend .s2 i { background: var(--sev2); } .sim-sev-legend .s3 i { background: var(--sev3); } .sim-sev-legend .s4 i { background: var(--sev4); }
.sim-tree ul { list-style: none; margin: 0; padding: 0; }
.sim-tree ul[role=group] { margin-left: 13px; padding-left: 12px; border-left: 1.5px solid var(--line); }
.sim-tn { --sev: var(--sev1); }
.sim-tn.s2 { --sev: var(--sev2); } .sim-tn.s3 { --sev: var(--sev3); } .sim-tn.s4 { --sev: var(--sev4); }
.sim-tn-row { position: relative; display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 6px; align-items: center; padding: 5px 6px 5px 0; border-radius: 8px; }
.sim-tn-row:hover { background: var(--panel-2); }
ul[role=group] > .sim-tn > .sim-tn-row::before { content: ''; position: absolute; left: -12px; top: 50%; width: 10px; border-top: 1.5px solid var(--line); }
.sim-tg { width: 28px; height: 28px; border-radius: 7px; border: 0; background: transparent; color: var(--muted); cursor: pointer; display: grid; place-items: center; font-size: 13px; }
.sim-tg:hover { background: var(--panel-2); color: var(--text); }
.sim-tg span { display: inline-block; transition: transform .15s; }
[aria-expanded="true"] > .sim-tn-row .sim-tg span { transform: rotate(90deg); }
.sim-tg.leaf::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--sev); }
.sim-tn-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; min-width: 0; }
.sim-tn-ico { color: var(--sev); font-size: 13px; }
.sim-tn-lbl { font-weight: 600; overflow-wrap: anywhere; }
.k-intervention > .sim-tn-row .sim-tn-lbl, .k-line > .sim-tn-row .sim-tn-lbl { font-weight: 700; font-size: 15px; }
.k-intervention > .sim-tn-row, .k-line > .sim-tn-row { padding-top: 8px; padding-bottom: 8px; }
.sim-tree > ul > .sim-tn + .sim-tn { border-top: 1px solid var(--line); margin-top: 4px; padding-top: 4px; }
.sim-tn-line { font-size: 12.5px; color: var(--muted); }
.sim-tn-via { font-size: 12px; color: var(--faint); }
.sim-tn-count { font-size: 12px; color: var(--muted); padding: 0 7px; border-radius: 999px; background: var(--panel-2); border: 1px solid var(--line); white-space: nowrap; }
.sim-tn-min { display: grid; justify-items: end; gap: 3px; min-width: 64px; }
.sim-tn-min b { font-variant-numeric: tabular-nums; font-size: 13.5px; color: var(--sev); padding: 1px 8px; border-radius: 999px; background: color-mix(in srgb, var(--sev) 13%, transparent); white-space: nowrap; }
.sim-tn-min .sim-bar { width: 72px; }
.sim-tn.more { padding: 4px 0 4px 34px; }
.sim-tn.more .an-link { font-size: 13px; }

/* Barras dentro de tablas y del árbol (ancho por --w) */
.sim-bar { display: block; height: 6px; border-radius: 3px; background: var(--panel-2); position: relative; overflow: hidden; }
.sim-bar::before { content: ''; position: absolute; inset: 0 auto 0 0; width: var(--w, 0%); border-radius: 3px; background: var(--sev, var(--blue)); }
.sim-bar.s1 { --sev: var(--sev1); } .sim-bar.s2 { --sev: var(--sev2); } .sim-bar.s3 { --sev: var(--sev3); } .sim-bar.s4 { --sev: var(--sev4); }
.sim-bar.sig-etcs2 { --sev: var(--sig-etcs2); } .sim-bar.sig-lzb { --sev: var(--sig-lzb); } .sim-bar.sig-etcs1 { --sev: var(--sig-etcs1); }
.sim-bar.sig-asfa { --sev: var(--sig-asfa); } .sim-bar.sig-unk { --sev: var(--sig-unk); } .sim-bar.inv { --sev: var(--sev3); }
.sim-cellbar { display: grid; grid-template-columns: minmax(40px, 1fr) auto; gap: 8px; align-items: center; }
.sim-cellbar b { font-weight: 600; white-space: nowrap; }

/* Tablas */
.sim-tablewrap { overflow-x: auto; margin: 6px -4px 0; padding: 0 4px; }
.sim-table { width: 100%; border-collapse: collapse; font-size: 13.5px; font-variant-numeric: tabular-nums; }
.sim-table th { text-align: left; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-weight: 700; padding: 6px 8px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.sim-table td { padding: 8px; border-bottom: 1px solid var(--line); vertical-align: top; }
.sim-table tbody tr:hover td { background: var(--panel-2); }
.sim-table .n { text-align: right; }
.sim-table .w { min-width: 150px; }
.sim-table td.cause { color: var(--muted); font-size: 12.5px; min-width: 140px; }
.sim-table .b { font-weight: 700; }
.sim-table .sim-od { color: var(--muted); font-size: 12px; margin-top: 2px; white-space: nowrap; }
.sim-table.sortable th button { border: 0; background: none; padding: 0; font: inherit; color: inherit; text-transform: inherit; letter-spacing: inherit; cursor: pointer; white-space: nowrap; }
.sim-table.sortable th[aria-sort="ascending"], .sim-table.sortable th[aria-sort="descending"] { color: var(--text); }
.sim-dl { display: inline-block; font-weight: 700; padding: 1px 7px; border-radius: 999px; color: var(--sev1); background: color-mix(in srgb, currentColor 12%, transparent); white-space: nowrap; }
.sim-dl.s2 { color: var(--sev2); } .sim-dl.s3 { color: var(--sev3); } .sim-dl.s4 { color: var(--sev4); }
.sim-days { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); font-weight: 600; }
.sim-days select { min-height: 38px; width: auto; font-size: 14px; }

/* Supuestos */
.sim-assume summary { cursor: pointer; font-weight: 700; font-size: 15px; }
.sim-assume ul { margin: 10px 0 0; padding-left: 20px; display: grid; gap: 6px; font-size: 14px; color: var(--muted); line-height: 1.45; }

/* ── Sprint 062: aprendizaje, opciones, escenarios, exportación ── */
/* Píldora de aprendizaje */
.sim-pill { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; min-height: 28px; padding: 3px 12px 3px 6px; border-radius: 999px; font-size: 12.5px; font-weight: 600; background: var(--panel-2); border: 1px solid var(--line); color: var(--muted); }
.sim-pill.is-learning { color: var(--text); border-color: color-mix(in srgb, var(--blue) 45%, var(--line)); }
.sim-pill-bar { flex: none; width: 46px; height: 6px; border-radius: 3px; background: var(--line); overflow: hidden; }
.sim-pill-bar i { display: block; height: 100%; width: var(--w, 0%); background: var(--blue); border-radius: 3px; transition: width .4s; }
.sim-pill.is-none .sim-pill-bar { display: none; }
.sim-pill.is-none::before { content: 'ⓘ'; padding-left: 4px; }
.sim-pill.is-learning .sim-pill-bar i { animation: sim-pulse 1.6s ease-in-out infinite; }
@keyframes sim-pulse { 50% { opacity: .55; } }

/* Botones con icono */
.sim-ibtn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; min-height: 40px; padding: 0 14px; border-radius: 11px; border: 1px solid var(--line); background: var(--panel-2); color: var(--text); font: 700 14px var(--sans); cursor: pointer; white-space: nowrap; }
.sim-ibtn svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.sim-ibtn:hover { border-color: var(--blue); }
.sim-ibtn:focus-visible, .sim-file:focus-within, .sim-pick:focus-within, .sim-rcard input:focus-visible + .sim-rcard-in, .sim-ocard input:focus-visible + .sim-ocard-in, .sim-switch input:focus-visible + .sim-switch-in { outline: 3px solid var(--blue); outline-offset: 2px; }
.sim-ibtn.primary { background: var(--blue); border-color: var(--blue); color: var(--on-accent); }
.sim-ibtn:disabled { opacity: .5; cursor: not-allowed; }
.sim-ibtn.icon { width: 40px; padding: 0; }
.sim-ibtn.icon.on { color: var(--green); border-color: color-mix(in srgb, var(--green) 50%, var(--line)); }
.sim-ibtn.danger:hover, .sim-ibtn.danger[data-armed="1"] { color: var(--red); border-color: var(--red); }
.sim-ibtn.danger[data-armed="1"] { width: auto; padding: 0 12px; }
.sim-del-sure:empty { display: none; }
.sim-btn.sm { min-height: 38px; padding: 0 14px; font-size: 14px; border-radius: 10px; }

/* Opciones: anillos (efecto mariposa) */
.sim-opts { margin: 16px 0 0; padding: 14px; border: 1px solid var(--line); border-radius: 14px; min-width: 0; display: grid; gap: 12px; }
.sim-opts > .sim-h3 { margin: 0; }
.sim-opt { display: grid; gap: 6px; min-width: 0; }
.sim-opt-line { margin: 0; }
.sim-rings { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; max-width: 640px; }
.sim-rcard, .sim-ocard, .sim-switch { position: relative; display: block; min-width: 0; cursor: pointer; }
.sim-rcard input, .sim-ocard input, .sim-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.sim-rcard-in { display: grid; justify-items: center; gap: 2px; padding: 8px 4px 9px; border: 1.5px solid var(--line); border-radius: 12px; background: var(--panel); text-align: center; height: 100%; }
.sim-rcard-in b { font-size: 16px; line-height: 1.1; }
.sim-rcard-in small { font-size: 11px; line-height: 1.2; color: var(--muted); overflow-wrap: anywhere; }
.sim-rsvg { display: block; width: 100%; max-width: 56px; }
.rings { display: block; width: 100%; height: auto; }
.rings .rg { fill: none; stroke: var(--line); stroke-width: 2; }
.rings .rg.off { stroke-dasharray: 3 3; opacity: .55; }
.rings .rg.on { stroke: var(--blue); }
.rings .rg.on.r1 { fill: color-mix(in srgb, var(--blue) 14%, transparent); }
.rings .rg.on.r2 { fill: color-mix(in srgb, var(--blue) 9%, transparent); }
.rings .rg.on.r3 { fill: color-mix(in srgb, var(--blue) 6%, transparent); }
.rings .rg.on.r0 { fill: var(--blue); stroke: var(--blue); }
.rings .rg-line { stroke: var(--on-accent); stroke-width: 2.5; stroke-linecap: round; }
.rings .rg-net { fill: color-mix(in srgb, var(--sev3) 14%, transparent); stroke: var(--sev3); stroke-width: 2; }
.sim-rcard:hover .sim-rcard-in, .sim-ocard:hover .sim-ocard-in { border-color: var(--hover-line); }
.sim-rcard input:checked + .sim-rcard-in, .sim-ocard input:checked + .sim-ocard-in { border-color: var(--blue); background: color-mix(in srgb, var(--blue) 9%, var(--panel)); box-shadow: 0 0 0 1px var(--blue); }
.sim-rcard input:checked + .sim-rcard-in small { color: var(--text); font-weight: 600; }
.sim-opt-now { margin: 0; font-weight: 600; }
.sim-opt-warn { margin: 0; color: var(--warn-fg); }

/* Opciones avanzadas (plegadas) */
.sim-adv { border-top: 1px solid var(--line); padding-top: 10px; }
.sim-adv summary { cursor: pointer; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; font-weight: 700; font-size: 14px; list-style: none; min-height: 32px; align-content: center; }
.sim-adv summary::-webkit-details-marker { display: none; }
.sim-adv summary::before { content: '▸'; color: var(--muted); transition: transform .15s; display: inline-block; }
.sim-adv[open] summary::before { transform: rotate(90deg); }
.sim-adv summary:focus-visible { outline: 3px solid var(--blue); outline-offset: 2px; border-radius: 6px; }
.sim-adv-sum { font-weight: 500; font-size: 12.5px; color: var(--muted); }
.sim-adv-body { display: grid; gap: 14px; margin-top: 10px; }
.sim-cards3, .sim-cards2 { display: grid; gap: 8px; grid-template-columns: 1fr; }
@media (min-width: 620px) { .sim-cards3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sim-cards2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.sim-ocard-in { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 2px 10px; align-items: start; padding: 10px 12px; border: 1.5px solid var(--line); border-radius: 12px; background: var(--panel); height: 100%; }
.sim-ocard-in b { font-size: 14px; }
.sim-ocard-in small { grid-column: 2; font-size: 12.5px; color: var(--muted); line-height: 1.35; }
.sim-oico { grid-row: span 2; width: 26px; height: 26px; fill: none; stroke: var(--blue); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.sim-switch-in { display: grid; grid-template-columns: 30px minmax(0, 1fr) 46px; gap: 10px; align-items: center; padding: 10px 12px; border: 1.5px solid var(--line); border-radius: 12px; background: var(--panel); }
.sim-switch-in .sim-oico { grid-row: auto; }
.sim-switch-txt { display: grid; gap: 2px; min-width: 0; }
.sim-switch-txt b { font-size: 14px; } .sim-switch-txt small { font-size: 12.5px; color: var(--muted); }
.sim-switch-knob { position: relative; width: 46px; height: 26px; border-radius: 13px; background: var(--line); transition: background .15s; }
.sim-switch-knob::after { content: ''; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 3px var(--shadow); transition: transform .15s; }
.sim-switch input:checked + .sim-switch-in .sim-switch-knob { background: var(--blue); }
.sim-switch input:checked + .sim-switch-in .sim-switch-knob::after { transform: translateX(20px); }

/* Fichero del escenario */
.sim-io { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); }
.sim-io .sim-lbl { width: 100%; }
@media (min-width: 760px) { .sim-io .sim-lbl { width: auto; margin-right: 4px; } }
.sim-file input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.sim-file { position: relative; }

/* Resultados: ámbito, herramientas, guardar */
.sim-res-scope, .sim-res-learned { margin: 6px 0 0; color: var(--muted); line-height: 1.4; }
.sim-res-learned { color: var(--faint); }
.sim-res-tools { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; justify-content: space-between; margin: 12px 0 0; padding: 10px 12px; border: 1px solid var(--line); border-radius: 14px; background: var(--panel); }
.sim-exp { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.sim-exp .sim-lbl { margin-right: 4px; }
.sim-save { display: grid; gap: 10px; margin: 10px 0 0; padding: 12px; border: 1px solid var(--blue); border-radius: 12px; background: var(--panel); max-width: 560px; }
.sim-save .an-sub { margin: 0; }
.sim-kpi-h { font-size: 13px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin: 14px 0 -2px; }
.sim-kpis.net .sim-kpi { background: var(--panel-2); }
.sim-print-desc { display: none; }

/* Alcance del tren (anillo) y Cercanías */
.sim-hop { display: inline-block; font-size: 11.5px; font-weight: 700; padding: 0 7px; border-radius: 999px; line-height: 1.6; white-space: nowrap; background: var(--panel-2); border: 1px solid var(--line); color: var(--muted); }
.sim-hop.h0 { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 45%, transparent); }
.sim-hop.h2, .sim-hop.h3 { border-style: dashed; }
.sim-bd.cer { color: var(--sev3); padding: 0 5px; font-size: 11px; vertical-align: 1px; }
.sim-sec-meta .ovt { color: var(--sig-etcs1); }
.sim-sec-meta .hw.inf { color: var(--text); }

/* Escenarios guardados: tarjetas con mini gráfico y KPI */
.sim-scn-top { margin: 10px 0 0; }
.sim-scns { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); }
.sim-scn { display: grid; gap: 6px; align-content: start; padding: 12px; border: 1.5px solid var(--line); border-radius: 14px; background: var(--panel); min-width: 0; }
.sim-scn.is-cur { border-style: dashed; }
.sim-scn.is-picked { border-color: var(--blue); background: color-mix(in srgb, var(--blue) 6%, var(--panel)); }
.sim-scn .sim-scn-top { margin: 0; display: flex; gap: 8px; align-items: flex-start; justify-content: space-between; }
.sim-scn-nm { display: grid; gap: 4px; min-width: 0; overflow-wrap: anywhere; }
.sim-scn-nm > b { font-size: 15px; line-height: 1.25; }
.sim-scn-bds { display: flex; flex-wrap: wrap; gap: 4px; }
.sim-scn-meta, .sim-scn-opts { margin: 0; overflow-wrap: anywhere; }
.sim-pick { position: relative; flex: none; cursor: pointer; }
.sim-pick input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.sim-pick span { display: inline-flex; align-items: center; gap: 5px; min-height: 30px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel-2); font-size: 12.5px; font-weight: 700; color: var(--muted); }
.sim-pick input:checked + span { background: var(--on); color: var(--on-fg); border-color: var(--on); }
.sim-spark { height: 46px; border-radius: 8px; background: var(--panel-2); padding: 1px; }
.sim-spark svg { display: block; width: 100%; height: 44px; }
.sim-spark .sp-base { fill: none; stroke: var(--base-ln); stroke-width: 1.5; stroke-dasharray: 4 3; vector-effect: non-scaling-stroke; }
.sim-spark .sp-scen { fill: none; stroke: var(--scen-ln); stroke-width: 2; vector-effect: non-scaling-stroke; }
.sim-spark .sp-gap { fill: var(--scen-ln); opacity: .14; }
.sim-spark-none { display: grid; place-items: center; height: 44px; font-size: 12px; color: var(--faint); }
.sim-kchips { display: flex; flex-wrap: wrap; gap: 5px; }
.sim-kchip { display: inline-flex; align-items: center; min-height: 24px; padding: 0 9px; border-radius: 999px; font-size: 12.5px; font-weight: 700; background: var(--panel-2); border: 1px solid var(--line); white-space: nowrap; font-variant-numeric: tabular-nums; }
.sim-kchip.hot { color: var(--sev3); border-color: color-mix(in srgb, var(--sev3) 40%, transparent); }
.sim-kchip.net { color: var(--muted); border-style: dashed; }
.sim-kchip.ring { gap: 5px; padding-left: 4px; }
.sim-mini-ring { display: inline-block; width: 18px; height: 18px; }
.sim-res-scope.sim-kchips { margin-top: 8px; }
.sim-scn-acts { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 2px; }
.sim-badge.sm { font-size: 11.5px; padding: 1px 8px; }
.sim-badge.other { color: var(--muted); }
.sim-badge.shared { color: var(--green); border-color: color-mix(in srgb, var(--green) 45%, transparent); }
.sim-badge.cur { color: var(--sev3); }
.sim-cmp-bar { position: sticky; bottom: 8px; z-index: 5; display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; justify-content: space-between; margin-top: 12px; padding: 8px 10px 8px 14px; border-radius: 14px; background: var(--modal-bg); border: 1px solid var(--line); box-shadow: 0 4px 16px var(--shadow); }
.sim-cmp-bar .an-sub { margin: 0; }

/* Comparación: tarjetas A/B y KPI con diferencia en color */
.sim-cmp-key { display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 6px; font: 700 11.5px var(--sans); font-style: normal; color: var(--on-accent); background: var(--cmp-a); flex: none; }
.sim-cmp-key.b { background: var(--cmp-b); }
.sim-cmp-heads { display: grid; gap: 8px; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 8px 0 4px; }
.sim-cmp-card { display: grid; gap: 4px; align-content: start; padding: 10px 12px; border-radius: 12px; border: 1.5px solid var(--cmp-a); background: color-mix(in srgb, var(--cmp-a) 6%, var(--panel)); min-width: 0; overflow-wrap: anywhere; }
.sim-cmp-card.b { border-color: var(--cmp-b); background: color-mix(in srgb, var(--cmp-b) 6%, var(--panel)); }
.sim-cmp-card .an-sub { margin: 0; }
.sim-cmp-nm { display: flex; gap: 8px; align-items: center; font-size: 15px; }
.sim-cmp-grid { display: grid; gap: 8px; margin-top: 8px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 160px), 1fr)); }
.sim-cmp-tile { display: grid; gap: 6px; align-content: start; padding: 10px 12px; border-radius: 14px; border: 1px solid var(--line); background: var(--panel); min-width: 0; }
.sim-cmp-tile .k { font-size: 12px; color: var(--muted); font-weight: 600; line-height: 1.25; }
.sim-cmp-vals { display: grid; gap: 4px; }
.sim-cmp-vals .v { display: flex; align-items: center; gap: 7px; font: 700 20px/1.15 var(--sans); font-variant-numeric: tabular-nums; min-width: 0; overflow-wrap: anywhere; }
.sim-cmp-d { justify-self: start; font-weight: 700; font-size: 13px; white-space: nowrap; padding: 2px 9px; border-radius: 999px; color: var(--muted); background: var(--panel-2); font-variant-numeric: tabular-nums; }
.sim-cmp-d.worse { color: var(--red); background: color-mix(in srgb, var(--red) 13%, transparent); }
.sim-cmp-d.better { color: var(--green); background: color-mix(in srgb, var(--green) 13%, transparent); }
#hCmpTl { margin-top: 16px; }
.sim-legend .cmp-a i { border-top: 3px solid var(--cmp-a); } .sim-legend .cmp-b i { border-top: 3px dashed var(--cmp-b); }
.sim-svg .ln.cmp-a { stroke: var(--cmp-a); stroke-width: 2.5; }
.sim-svg .ln.cmp-b { stroke: var(--cmp-b); stroke-width: 2.5; stroke-dasharray: 9 3; }
.sim-svg .dl.cmp-a { fill: var(--cmp-a); } .sim-svg .dl.cmp-b { fill: var(--cmp-b); }
.sim-tip .sw.cmp-a { border-top-color: var(--cmp-a); } .sim-tip .sw.cmp-b { border-top: 2px dashed var(--cmp-b); }
/* ── Sprint 063: modelos propios (PMML) en 5 pasos ── */
.sim-model-row { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 10px; align-items: center; max-width: 560px; }
.sim-model-row .sim-oico { grid-row: auto; }
.sim-model-row select { width: 100%; min-height: 44px; padding: 0 10px; font: 15px var(--sans); color: var(--text); background: var(--panel); border: 1.5px solid var(--line); border-radius: 11px; }
.sim-model-row select:focus-visible { outline: 3px solid var(--blue); outline-offset: 2px; }
.sim-model-banner { display: flex; gap: 10px; align-items: flex-start; margin: 10px 0 0; padding: 10px 12px; border-radius: 12px; font-size: 14px; line-height: 1.4; border: 1px solid var(--line); overflow-wrap: anywhere; }
.sim-model-banner .ico { flex: none; display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; font-weight: 800; font-size: 13px; color: var(--on-accent); }
.sim-model-banner.ok { background: color-mix(in srgb, var(--green) 10%, var(--panel)); border-color: color-mix(in srgb, var(--green) 45%, transparent); }
.sim-model-banner.ok .ico { background: var(--green); }
.sim-model-banner.fb { background: var(--alert-amber-bg); color: var(--warn-fg); border-color: color-mix(in srgb, var(--amber) 45%, transparent); }
.sim-model-banner.fb .ico { background: var(--amber); }
.sim-kchip.mod { color: var(--green); border-color: color-mix(in srgb, var(--green) 40%, transparent); }
.sim-kchip.mod.fb { color: var(--warn-fg); border-color: color-mix(in srgb, var(--amber) 45%, transparent); }
.sim-kchip.ok { color: var(--green); border-color: color-mix(in srgb, var(--green) 40%, transparent); }
.sim-kchip.warn { color: var(--warn-fg); border-color: color-mix(in srgb, var(--amber) 45%, transparent); background: var(--alert-amber-bg); }
.sim-kchip.rep { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 40%, transparent); }
.sim-kchip.kind { color: var(--text); }
.sim-kchip.mae.better { color: var(--green); border-color: color-mix(in srgb, var(--green) 45%, transparent); background: color-mix(in srgb, var(--green) 9%, var(--panel)); }
.sim-kchip.mae.worse { color: var(--red); border-color: color-mix(in srgb, var(--red) 40%, transparent); background: color-mix(in srgb, var(--red) 8%, var(--panel)); }
.sim-kchips .sim-kchip { white-space: normal; max-width: 100%; overflow-wrap: anywhere; }

/* Stepper */
.mod-intro .sim-h2 { margin-bottom: 2px; }
.mod-steps { list-style: none; margin: 14px 0 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); counter-reset: none; position: relative; }
.mod-steps li { position: relative; min-width: 0; }
.mod-steps li + li::before { content: ''; position: absolute; top: 19px; right: calc(50% + 22px); left: calc(-50% + 22px); height: 3px; border-radius: 2px; background: var(--line); }
.mod-steps li:has(.is-done) + li::before, .mod-steps li:has(.is-done) + li:has(.is-cur)::before { background: var(--green); }
.mod-steps button { width: 100%; display: grid; justify-items: center; gap: 6px; padding: 0 2px 4px; border: 0; background: none; color: var(--text); font: 600 12.5px/1.2 var(--sans); cursor: pointer; text-align: center; border-radius: 10px; }
.mod-steps button:focus-visible { outline: 3px solid var(--blue); outline-offset: 2px; }
.mod-num { display: inline-grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; border: 2.5px solid var(--line); background: var(--panel); font: 800 16px var(--sans); color: var(--muted); transition: background .15s, border-color .15s; }
.mod-st-t { overflow-wrap: anywhere; color: var(--muted); }
.mod-steps button.is-done .mod-num { border-color: var(--green); background: color-mix(in srgb, var(--green) 14%, var(--panel)); color: var(--green); }
.mod-steps button.is-cur .mod-num { border-color: var(--blue); background: var(--blue); color: var(--on-accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--blue) 22%, transparent); }
.mod-steps button.is-cur .mod-st-t { color: var(--text); font-weight: 800; }
.mod-steps button:disabled { cursor: not-allowed; opacity: .55; }
.mod-steps button:not(:disabled):hover .mod-num { border-color: var(--blue); }
.mod-cur { margin: 10px 0 0; color: var(--muted); text-align: center; overflow-wrap: anywhere; }
.mod-why { margin: 0 0 12px; font-size: 14px; }
.mod-step .sim-h2 { margin-bottom: 4px; }
.mod-nav { display: flex; flex-wrap: wrap; gap: 10px; justify-content: space-between; align-items: center; margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line); }
.mod-nav .sim-btn.big { margin-left: auto; }
.mod-sub { min-width: 0; margin-top: 16px; }
.mod-sub > .sim-h3 { margin-bottom: 2px; }
.mod-sub > .an-sub { margin: 0 0 8px; }
.mod-two { display: grid; gap: 0 24px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 900px) { .mod-two { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }

/* 1. Subir */
.mod-drop { position: relative; display: grid; justify-items: center; gap: 4px; padding: 26px 16px; border: 2.5px dashed color-mix(in srgb, var(--blue) 45%, var(--line)); border-radius: 18px; background: color-mix(in srgb, var(--blue) 4%, var(--panel)); text-align: center; cursor: pointer; transition: background .15s, border-color .15s; }
.mod-drop:hover, .mod-drop.is-over { border-color: var(--blue); background: color-mix(in srgb, var(--blue) 11%, var(--panel)); }
.mod-drop:focus-within { outline: 3px solid var(--blue); outline-offset: 2px; }
.mod-drop input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.mod-drop svg { width: 44px; height: 44px; fill: none; stroke: var(--blue); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.mod-drop b { font-size: 17px; }
.mod-drop-or { color: var(--blue); font-weight: 700; font-size: 14.5px; text-decoration: underline; text-underline-offset: 3px; }
.mod-drop small { color: var(--muted); font-size: 12.5px; }
.mod-pending { display: grid; gap: 10px; margin-top: 12px; padding: 12px; border: 1.5px solid var(--blue); border-radius: 14px; background: var(--panel); }
.mod-file-row { display: flex; gap: 8px; align-items: center; font-weight: 700; font-size: 14px; overflow-wrap: anywhere; min-width: 0; }
.mod-file-row svg { flex: none; width: 22px; height: 22px; fill: none; stroke: var(--blue); stroke-width: 2; stroke-linejoin: round; }
.mod-examples { margin-top: 14px; display: grid; gap: 8px; }
.mod-ex-list { display: grid; gap: 8px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }
.mod-ex { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 4px 10px; align-items: start; padding: 10px 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel-2); min-width: 0; }
.mod-ex-t { display: grid; gap: 2px; min-width: 0; } .mod-ex-t b { font-size: 14px; } .mod-ex-t small { font-size: 12.5px; color: var(--muted); line-height: 1.35; }
.mod-ex-acts { grid-column: 2; display: flex; gap: 6px; }
.mod-kind-ico, .mod-kbox { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: 10px; background: color-mix(in srgb, var(--blue) 12%, var(--panel)); color: var(--blue); flex: none; }
.mod-kbox.k-tree, .mod-kind-ico.k-tree { background: color-mix(in srgb, var(--green) 13%, var(--panel)); color: var(--green); }
.mod-kbox.k-ensemble { background: color-mix(in srgb, var(--sev3) 13%, var(--panel)); color: var(--sev3); }
.mod-kbox.big { width: 48px; height: 48px; border-radius: 13px; }
.mod-kico { width: 66%; height: 66%; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.mod-list-head { margin-top: 20px; padding-top: 14px; border-top: 1px solid var(--line); }
.mod-list-head .sim-h3 { margin: 0; }
.mod-card-top { display: flex; gap: 10px; align-items: flex-start; min-width: 0; }
.sim-badge.kind { color: var(--muted); }

/* 2. Entender */
.mod-head { display: grid; gap: 10px; margin: 0 0 14px; padding: 12px; border-radius: 14px; background: var(--panel-2); border: 1px solid var(--line); }
.mod-head-t { display: flex; gap: 12px; align-items: center; min-width: 0; }
.mod-head-t b { font-size: 17px; overflow-wrap: anywhere; }
.mod-head-t .an-sub { margin: 2px 0 0; }
.mod-flow { display: grid; gap: 8px; align-items: center; grid-template-columns: minmax(0, 1fr); margin: 6px 0 4px; }
@media (min-width: 760px) { .mod-flow { grid-template-columns: minmax(0, 1.5fr) 42px minmax(140px, .8fr) 42px minmax(0, .9fr); } }
.mod-flow-col { display: grid; gap: 6px; min-width: 0; align-content: center; }
.mod-pills { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.mod-pill { display: flex; gap: 8px; align-items: center; min-width: 0; padding: 6px 10px 6px 6px; border-radius: 12px; border: 1.5px solid var(--line); background: var(--panel); }
.mod-pill.t-cat { border-color: color-mix(in srgb, var(--sev3) 40%, var(--line)); }
.mod-pill.t-num { border-color: color-mix(in srgb, var(--blue) 35%, var(--line)); }
.mod-pill.out { border-color: var(--green); background: color-mix(in srgb, var(--green) 9%, var(--panel)); }
.mod-pill-t { display: grid; min-width: 0; } .mod-pill-t b { font-family: var(--mono); font-size: 13.5px; overflow-wrap: anywhere; } .mod-pill-t small { font-size: 11.5px; color: var(--muted); }
.mod-ty { flex: none; display: inline-grid; place-items: center; min-width: 26px; height: 26px; padding: 0 4px; border-radius: 8px; font: 800 12px var(--mono); font-style: normal; background: color-mix(in srgb, var(--blue) 14%, var(--panel)); color: var(--blue); }
.mod-ty.cat { background: color-mix(in srgb, var(--sev3) 14%, var(--panel)); color: var(--sev3); }
.sim-f .mod-ty { min-width: 20px; height: 18px; font-size: 10px; border-radius: 5px; vertical-align: 1px; }
.mod-arrow { position: relative; height: 26px; }
.mod-arrow::before { content: ''; position: absolute; left: 50%; top: 0; bottom: 6px; border-left: 2.5px solid var(--muted); transform: translateX(-50%); }
.mod-arrow::after { content: ''; position: absolute; left: 50%; bottom: 0; border: 7px solid transparent; border-top: 9px solid var(--muted); border-bottom: 0; transform: translateX(-50%); }
@media (min-width: 760px) {
  .mod-arrow { height: 20px; }
  .mod-arrow::before { left: 0; right: 8px; top: 50%; bottom: auto; border-left: 0; border-top: 2.5px solid var(--muted); transform: translateY(-50%); }
  .mod-arrow::after { left: auto; right: 0; top: 50%; bottom: auto; border: 7px solid transparent; border-left: 9px solid var(--muted); border-right: 0; transform: translateY(-50%); }
}
.mod-flow-box { display: grid; justify-items: center; gap: 4px; padding: 16px 12px; border-radius: 16px; border: 2px solid var(--blue); background: color-mix(in srgb, var(--blue) 8%, var(--panel)); color: var(--blue); text-align: center; min-width: 0; }
.mod-flow-box.k-tree { border-color: var(--green); background: color-mix(in srgb, var(--green) 8%, var(--panel)); color: var(--green); }
.mod-flow-box.k-ensemble { border-color: var(--sev3); background: color-mix(in srgb, var(--sev3) 8%, var(--panel)); color: var(--sev3); }
.mod-flow-box .mod-kico { width: 38px; height: 38px; }
.mod-flow-box b { color: var(--text); font-size: 15px; }
.mod-flow-box small { color: var(--muted); font-size: 12px; overflow-wrap: anywhere; }
.mod-imp { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
.mod-imp li { display: grid; grid-template-columns: minmax(70px, 34%) minmax(40px, 1fr) 44px; gap: 10px; align-items: center; font-size: 13.5px; }
.mod-imp-n { font-family: var(--mono); overflow-wrap: anywhere; }
.mod-imp b { text-align: right; font-variant-numeric: tabular-nums; }
.mod-ibar { height: 12px; border-radius: 6px; --sev: var(--blue); }
.mod-ibar::before { border-radius: 6px; }
.mod-try { display: grid; gap: 10px; }
.mod-try-fields { display: grid; gap: 8px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 150px), 1fr)); }
.mod-try-fields .sim-f > span { text-transform: none; letter-spacing: 0; font-family: var(--mono); font-size: 12px; overflow-wrap: anywhere; }
.mod-try .sim-btn { justify-self: start; }
.mod-try-out { display: grid; gap: 2px; margin-top: 10px; padding: 12px 14px; border-radius: 14px; border: 1.5px solid var(--blue); background: color-mix(in srgb, var(--blue) 6%, var(--panel)); }
.mod-try-out .k { font-size: 12px; color: var(--muted); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; }
.mod-try-v { font: 800 34px/1.1 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.01em; overflow-wrap: anywhere; }
.mod-try-v small { font-size: 16px; font-weight: 700; color: var(--muted); }
.mod-try-v.pos { color: var(--mod-pos); } .mod-try-v.neg { color: var(--mod-neg); }
.mod-try-out .an-sub { margin: 0; }
/* Vista previa: árbol */
.mod-ptree { margin-top: 4px; }
.mod-ptree .mod-tn { --sev: var(--muted); }
.mod-cond { font-family: var(--mono); font-size: 13px; font-weight: 600; padding: 2px 8px; border-radius: 8px; background: var(--panel-2); border: 1px solid var(--line); overflow-wrap: anywhere; }
.mod-cond.all { font-family: var(--sans); color: var(--muted); }
.mod-score { font-variant-numeric: tabular-nums; font-weight: 800; font-size: 13.5px; padding: 2px 9px; border-radius: 999px; white-space: nowrap; color: var(--sev); background: color-mix(in srgb, var(--sev) 15%, transparent); border: 1px solid color-mix(in srgb, var(--sev) 40%, transparent); }
.mod-tn.sc-zero, .mod-sc-legend .sc-zero { --sev: var(--muted); }
.mod-tn.sc-pos1 { --sev: color-mix(in srgb, var(--mod-pos) 55%, var(--muted)); } .mod-tn.sc-pos2 { --sev: color-mix(in srgb, var(--mod-pos) 80%, var(--muted)); } .mod-tn.sc-pos3, .mod-sc-legend .sc-pos3 { --sev: var(--mod-pos); }
.mod-tn.sc-neg1 { --sev: color-mix(in srgb, var(--mod-neg) 55%, var(--muted)); } .mod-tn.sc-neg2 { --sev: color-mix(in srgb, var(--mod-neg) 80%, var(--muted)); } .mod-tn.sc-neg3, .mod-sc-legend .sc-neg3 { --sev: var(--mod-neg); }
.mod-tn.sc-cat { --sev: var(--blue); }
.mod-tn.leaf > .sim-tn-row .mod-score { font-size: 14.5px; padding: 3px 11px; }
.mod-tn:not(.leaf) > .sim-tn-row .mod-score { opacity: .7; font-weight: 700; font-size: 12px; }
.mod-sc-legend, .mod-cf-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12.5px; color: var(--muted); margin: 0 0 8px; }
.mod-sc-legend span, .mod-cf-legend span { display: inline-flex; align-items: center; gap: 5px; }
.mod-sc-legend i { width: 12px; height: 12px; border-radius: 50%; background: var(--sev); }
.mod-cf-legend i { width: 14px; height: 10px; border-radius: 3px; }
.mod-cf-legend .pos i { background: var(--mod-pos); } .mod-cf-legend .neg i { background: var(--mod-neg); }
/* Vista previa: coeficientes */
.mod-icpt { margin: 0 0 8px; }
.mod-cf { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.mod-cf li { display: grid; grid-template-columns: minmax(90px, 36%) minmax(80px, 1fr) 56px; gap: 10px; align-items: center; font-size: 13.5px; }
.mod-cf-n { font-family: var(--mono); font-size: 12.5px; overflow-wrap: anywhere; }
.mod-cf-bar { display: grid; grid-template-columns: 1fr 1fr; height: 16px; position: relative; }
.mod-cf-bar::after { content: ''; position: absolute; left: 50%; top: -3px; bottom: -3px; border-left: 1.5px solid var(--muted); }
.mod-cf-bar > span { display: flex; align-items: stretch; min-width: 0; }
.mod-cf-bar .neg { justify-content: flex-end; }
.mod-cf-bar i { display: block; width: var(--w, 0%); border-radius: 4px; }
.mod-cf-bar .neg i { background: var(--mod-neg); border-top-right-radius: 0; border-bottom-right-radius: 0; }
.mod-cf-bar .pos i { background: var(--mod-pos); border-top-left-radius: 0; border-bottom-left-radius: 0; }
.mod-cf b { text-align: right; font-variant-numeric: tabular-nums; } .mod-cf b.pos { color: var(--mod-pos); } .mod-cf b.neg { color: var(--mod-neg); }

/* 3. Asociar */
.mod-map-head { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; justify-content: space-between; margin-top: 18px; }
.mod-map-head .sim-h3 { margin: 0; }
#modMapSum { margin: 4px 0 8px; font-weight: 600; }
.mod-map { display: grid; gap: 8px; }
.mod-map-cols { display: none; }
.mod-mrow { --st: var(--amber); display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; padding: 10px; border-radius: 14px; border: 1.5px solid color-mix(in srgb, var(--st) 45%, var(--line)); background: color-mix(in srgb, var(--st) 5%, var(--panel)); min-width: 0; }
.mod-mrow.st-ok { --st: var(--green); } .mod-mrow.st-sug { --st: var(--green); border-style: dashed; } .mod-mrow.st-bad { --st: var(--red); }
.mod-min { min-width: 0; }
.mod-conn { position: relative; height: 22px; }
.mod-conn i { position: absolute; left: 22px; top: 0; bottom: 0; border-left: 3px solid var(--st); }
.mod-conn i::before, .mod-conn i::after { content: ''; position: absolute; left: -6.5px; width: 10px; height: 10px; border-radius: 50%; background: var(--st); }
.mod-conn i::before { top: -3px; } .mod-conn i::after { bottom: -3px; }
.mod-mrow.st-sug .mod-conn i { border-left-style: dashed; }
.mod-mrow.st-miss .mod-conn i::after, .mod-mrow.st-bad .mod-conn i::after { background: var(--panel); border: 2.5px solid var(--st); width: 6px; height: 6px; left: -7px; }
.mod-msrc { display: grid; gap: 6px; min-width: 0; }
.mod-msrc select, .mod-cval, .mod-vmap select, .mod-vmap input { width: 100%; min-height: 44px; padding: 0 10px; font: 15px var(--sans); color: var(--text); background: var(--panel); border: 1.5px solid color-mix(in srgb, var(--st) 50%, var(--line)); border-radius: 11px; min-width: 0; }
.mod-vmap select, .mod-vmap input { min-height: 36px; font-size: 14px; border-color: var(--line); }
.mod-msrc select:focus-visible, .mod-cval:focus-visible, .mod-vmap select:focus-visible, .mod-vmap input:focus-visible { outline: 3px solid var(--blue); outline-offset: 1px; }
.mod-msrc-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: center; }
.mod-msrc-meta .an-sub { margin: 0; }
.mod-st { font-size: 12.5px; font-weight: 700; color: color-mix(in srgb, var(--st) 80%, var(--text)); }
.mod-mrow.st-miss .mod-st { color: var(--warn-fg); }
.mod-accept { min-height: 30px; font-size: 12.5px; color: var(--green); border-color: color-mix(in srgb, var(--green) 50%, var(--line)); }
.mod-tywarn { margin: 0; color: var(--warn-fg); }
.mod-vmap { width: 100%; border-collapse: collapse; font-size: 13px; margin-top: 2px; }
.mod-vmap caption { text-align: left; font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); padding: 0 0 4px; }
.mod-vmap th { text-align: left; font-size: 11px; color: var(--faint); font-weight: 700; padding: 2px 6px; }
.mod-vmap td { padding: 3px 6px; vertical-align: middle; }
.mod-vmap td:first-child { width: 40%; overflow-wrap: anywhere; }
.mod-vmap code { font-family: var(--mono); font-size: 12.5px; padding: 1px 6px; border-radius: 6px; background: var(--panel-2); border: 1px solid var(--line); }
.mod-vmap tr.def td:first-child { color: var(--muted); font-style: italic; }
@media (min-width: 760px) {
  .mod-map-cols { display: grid; grid-template-columns: minmax(0, .9fr) 70px minmax(0, 1.3fr); font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); padding: 0 10px; }
  .mod-mrow { grid-template-columns: minmax(0, .9fr) 70px minmax(0, 1.3fr); align-items: start; }
  .mod-conn { height: 44px; }
  .mod-conn i { left: 6px; right: 6px; top: 50%; bottom: auto; border-left: 0; border-top: 3px solid var(--st); transform: translateY(-50%); }
  .mod-mrow.st-sug .mod-conn i { border-top-style: dashed; }
  .mod-conn i::before, .mod-conn i::after { top: -6.5px; bottom: auto; left: auto; }
  .mod-conn i::before { left: -4px; } .mod-conn i::after { right: -4px; }
  .mod-mrow.st-miss .mod-conn i::after, .mod-mrow.st-bad .mod-conn i::after { top: -7px; left: auto; right: -5px; }
  .mod-min { padding-top: 2px; }
}
.mod-out-grid { display: grid; gap: 8px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 760px) { .mod-out-grid { grid-template-columns: 1.3fr 1.3fr .7fr .7fr; } }
.mod-out-grid .sim-f:nth-child(-n+2) { grid-column: span 2; }
@media (min-width: 760px) { .mod-out-grid .sim-f:nth-child(-n+2) { grid-column: auto; } }
.mod-out .an-sub { margin: 6px 0 0; }
.mod-save-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 16px; }
.mod-check { list-style: none; margin: 10px 0 0; padding: 10px 12px; display: grid; gap: 6px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel-2); font-size: 14px; }
.mod-check li { display: flex; gap: 8px; align-items: flex-start; overflow-wrap: anywhere; min-width: 0; }
.mod-ci { flex: none; display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; font-weight: 800; font-size: 12px; color: var(--on-accent); background: var(--amber); }
.mod-check .ok .mod-ci { background: var(--green); } .mod-check .bad .mod-ci { background: var(--red); }
.mod-check .ok { font-weight: 700; }

/* 4. Validar */
.mod-val-go { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
#modVal { margin-top: 14px; transition: opacity .2s; }
#modVal.stale { opacity: .45; }
.mod-vs-grid { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 8px; align-items: stretch; }
.mod-vs-mid { align-self: center; font-weight: 800; color: var(--muted); font-size: 14px; }
.mod-vs-tile { position: relative; display: grid; gap: 2px; align-content: start; padding: 14px; border-radius: 16px; border: 2px solid var(--line); background: var(--panel); min-width: 0; }
.mod-vs-tile .k { font-size: 13px; font-weight: 700; color: var(--muted); }
.mod-vs-tile .v { font: 800 38px/1.05 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.02em; overflow-wrap: anywhere; }
.mod-vs-tile .v small { font-size: 15px; font-weight: 700; color: var(--muted); letter-spacing: 0; }
.mod-vs-tile .d { font-size: 12.5px; color: var(--muted); }
.mod-vs-tile.me .k::before { content: ''; display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--mod-me); margin-right: 6px; }
.mod-vs-tile.bi .k::before { content: ''; display: inline-block; width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--mod-bi); margin-right: 6px; vertical-align: -1px; box-sizing: border-box; }
.mod-vs-tile.win { border-color: var(--green); background: color-mix(in srgb, var(--green) 8%, var(--panel)); }
.mod-vs-tile.win .v { color: var(--green); }
.mod-win { justify-self: start; margin-top: 4px; font-size: 12.5px; font-weight: 800; color: var(--on-accent); background: var(--green); border-radius: 999px; padding: 2px 10px; }
.mod-verdict { margin: 10px 0 0; font-weight: 700; font-size: 15px; }
.mod-verdict.model { color: var(--green); } .mod-verdict.builtin { color: var(--warn-fg); }
.mod-val-kpis { margin-top: 10px; }
.mod-scatter { max-width: 560px; }
.mod-sc-svg .diag { stroke: var(--muted); stroke-width: 1.5; stroke-dasharray: 6 4; }
.mod-sc-svg .pts-bi circle { fill: none; stroke: var(--mod-bi); stroke-width: 1.3; opacity: .75; }
.mod-sc-svg .pts-me circle { fill: var(--mod-me); opacity: .62; }
.sim-legend .mod-me i { width: 10px; height: 10px; border-radius: 50%; border: 0; background: var(--mod-me); }
.sim-legend .mod-bi i { width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--mod-bi); box-sizing: border-box; }
.sim-legend .mod-diag i { border-top: 2px dashed var(--muted); }
.mod-cls { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.mod-cls li { display: grid; grid-template-columns: minmax(80px, 34%) minmax(0, 1fr); gap: 10px; align-items: center; }
.mod-cls-n { display: grid; min-width: 0; } .mod-cls-n b { font-size: 13.5px; overflow-wrap: anywhere; } .mod-cls-n small { font-size: 11.5px; color: var(--muted); }
.mod-cbars { display: grid; gap: 4px; }
.mod-cbar { display: grid; grid-template-columns: minmax(30px, 1fr) 44px; gap: 8px; align-items: center; font-size: 12.5px; }
.mod-cbar b { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.mod-cbar.win b { color: var(--green); font-weight: 800; }
.mod-cbar .sim-bar { height: 10px; border-radius: 5px; }
.mod-cbar.me .sim-bar { --sev: var(--mod-me); } .mod-cbar.bi .sim-bar { --sev: var(--mod-bi); }
.mod-ex-in { font-family: var(--mono); font-size: 12px; overflow-wrap: anywhere; min-width: 180px; }
.mod-closer { font-weight: 800; color: var(--green); }

/* 5. Simular */
.mod-final-card { display: flex; gap: 12px; align-items: center; padding: 12px; border-radius: 14px; border: 1.5px solid var(--line); background: var(--panel-2); min-width: 0; }
.mod-final-t { display: grid; gap: 6px; min-width: 0; } .mod-final-t > b { font-size: 16px; overflow-wrap: anywhere; }
.mod-final-steps { margin: 12px 0 0; padding-left: 22px; display: grid; gap: 6px; font-size: 14px; line-height: 1.4; }
.mod-play { width: 18px; height: 18px; fill: currentColor; }
@media (max-width: 420px) {
  .mod-num { width: 34px; height: 34px; font-size: 14.5px; }
  .mod-steps li + li::before { top: 16px; right: calc(50% + 19px); left: calc(-50% + 19px); }
  .mod-steps button { font-size: 11px; }
  .mod-vs-tile { padding: 10px; } .mod-vs-tile .v { font-size: 27px; }
  .mod-vs-grid { gap: 5px; }
  .mod-nav .sim-btn.big { width: 100%; padding: 0 14px; }
  .mod-imp li { grid-template-columns: minmax(70px, 38%) minmax(30px, 1fr) 40px; gap: 8px; }
  .mod-cf li { grid-template-columns: minmax(80px, 38%) minmax(60px, 1fr) 48px; gap: 6px; }
  .mod-drop { padding: 20px 12px; }
}
@media (prefers-reduced-motion: reduce) { .sim-pill.is-learning .sim-pill-bar i { animation: none; } }

@media (max-width: 420px) {
  .sim-card { padding: 14px 12px; border-radius: 14px; }
  .sim-hero h1 { font-size: 26px; }
  .sim-kpi .v { font-size: 21px; }
  .sim-heat .hr { grid-template-columns: 96px repeat(var(--cols), minmax(22px, 1fr)); }
  .sim-heat { min-width: calc(96px + var(--cols) * 24px); }
  .sim-tree ul[role=group] { margin-left: 9px; padding-left: 8px; }
  ul[role=group] > .sim-tn > .sim-tn-row::before { left: -8px; width: 6px; }
  .sim-tn-min .sim-bar { width: 56px; }
  .sim-cmp-vals .v { font-size: 16.5px; gap: 5px; white-space: nowrap; }
  .sim-cmp-tile { padding: 10px; }
  .sim-exp .sim-ibtn { padding: 0 11px; }
}

@media (max-width: 640px) {
  /* Tablas como fichas: la primera celda es el título; el resto, en dos columnas con su nombre encima */
  .sim-tablewrap { overflow: visible; margin: 6px 0 0; padding: 0; }
  .sim-table.cards, .sim-table.cards tbody, .sim-table.cards td { display: block; }
  .sim-table.cards thead { display: none; }
  .sim-table.cards.sortable thead { display: block; margin-bottom: 4px; }
  .sim-table.cards.sortable thead tr { display: flex; flex-wrap: wrap; gap: 6px; }
  .sim-table.cards.sortable th { border: 0; padding: 0; }
  .sim-table.cards.sortable th button { min-height: 30px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel-2); font-size: 11px; }
  .sim-table.cards.sortable th[aria-sort="ascending"] button, .sim-table.cards.sortable th[aria-sort="descending"] button { background: var(--on); color: var(--on-fg); border-color: var(--on); }
  .sim-table.cards tbody tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 12px; padding: 10px 0; border-bottom: 1px solid var(--line); }
  .sim-table.cards tbody tr:hover td { background: none; }
  .sim-table.cards td { border: 0; padding: 0; text-align: left; min-width: 0; }
  .sim-table.cards td:first-child { grid-column: 1 / -1; font-weight: 600; }
  .sim-table.cards td.w, .sim-table.cards td.cause { grid-column: 1 / -1; min-width: 0; }
  .sim-table.cards td[data-l]::before { content: attr(data-l); display: block; font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--faint); margin-bottom: 1px; }
  .sim-table .sim-od { white-space: normal; }
  .sim-table.cards tr.grp { display: block; padding: 10px 0 0; border: 0; }
  .sim-table.cards tr.grp th { display: block; border: 0; padding: 0; }
}

/* ── Impresión / PDF: solo el resultado, a todo el ancho, con la descripción del escenario y el aviso ── */
@media print {
  :root, :root[data-theme="dark"] {
    --bg: #fff; --panel: #fff; --panel-2: #f1f4f8; --line: #c9d1dd; --text: #111; --muted: #444; --faint: #666;
    --green: #12935c; --amber: #b57600; --red: #d93a32; --blue: #1f6fd1; --on: #16202f; --on-fg: #fff; --on-accent: #fff;
    --alert-amber-bg: #fff8e8; --warn-fg: #8a2a22; --err-fg: #b42318; --hover-line: #a9b6c9;
  }
  :root[data-theme="dark"] .sim-page {
    --sig-etcs2: #12935c; --sig-lzb: #1f6fd1; --sig-etcs1: #0f8b9b; --sig-asfa: #b57600; --sig-unk: #7d8899;
    --sev1: #6b7686; --sev2: #b57600; --sev3: #c75a00; --sev4: #d93a32; --heat: #1f6fd1; --base-ln: #7d8899; --scen-ln: #1f6fd1; --cmp-a: #1f6fd1; --cmp-b: #c75a00;
  }
  html, body.sim-page { background: #fff !important; color: #111; }
  .sim-page { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .an-top, .an-foot, .mn, #mnPanel, .sim-user, .sim-tabs, .sim-pill, #gate, #pwBox, #boot, #vSig, #vInv, #vScn, #vMod,
  #vSim > .sim-card, .sim-res-tools, .sim-cmp-bar, .sim-save, #saveMsg, .sim-tree-tools, .sim-tip, .sim-tg, button, form, input, select { display: none !important; }
  .sim-main { max-width: none; padding: 0; }
  .sim-results.stale { opacity: 1; }
  .sim-print-desc { display: block; margin: 8px 0; }
  .sim-print-desc ul { margin: 4px 0 0; padding-left: 18px; font-size: 12px; line-height: 1.4; }
  .sim-grid { grid-template-columns: 1fr !important; }
  .sim-card, .sim-kpi, .sim-disc, .sim-print-desc, .sim-table tr, .sim-tn-row { break-inside: avoid; page-break-inside: avoid; }
  .sim-card { border-color: #c9d1dd; box-shadow: none; }
  .sim-h2, .sim-h3 { break-after: avoid; page-break-after: avoid; }
  .sim-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .sim-heat-wrap, .sim-tablewrap { overflow: visible !important; }
  .sim-heat { min-width: 0 !important; }
  .sim-svg { max-width: 100%; }
  .sim-table.sortable th button { display: inline !important; }
}

/* ── Sprint 064: varios días, incertidumbre, rotaciones, estaciones, modelo integrado, mercancías, ONNX/WASM ── */
.sim-h4 { font-size: 13.5px; margin: 10px 0 4px; color: var(--muted); }
/* Días seguidos (en el ámbito) */
.sim-mdays { grid-column: 1 / -1; display: grid; gap: 6px; min-width: 0; margin-top: 2px; }
.sim-dchips { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; max-width: 560px; }
.sim-dchip { position: relative; cursor: pointer; min-width: 0; }
.sim-dchip input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.sim-dchip-in { display: grid; justify-items: center; gap: 2px; padding: 8px 4px; border: 1.5px solid var(--line); border-radius: 12px; background: var(--panel); text-align: center; height: 100%; }
.sim-dchip-in b { font-size: 17px; line-height: 1.1; }
.sim-dchip-in small { font-size: 11px; color: var(--muted); line-height: 1.15; }
.sim-dchip:hover .sim-dchip-in { border-color: var(--hover-line); }
.sim-dchip input:checked + .sim-dchip-in { border-color: var(--blue); background: color-mix(in srgb, var(--blue) 9%, var(--panel)); box-shadow: 0 0 0 1px var(--blue); }
.sim-dchip input:focus-visible + .sim-dchip-in { outline: 3px solid var(--blue); outline-offset: 2px; }
.sim-dsq { display: grid; grid-template-columns: repeat(7, 5px); gap: 1.5px; justify-content: center; min-height: 17px; align-content: center; }
.sim-dsq i { width: 5px; height: 5px; border-radius: 1.5px; background: var(--blue); opacity: .75; }
.sim-dsq.n1 { grid-template-columns: 9px; } .sim-dsq.n1 i { width: 9px; height: 9px; border-radius: 2.5px; }
.sim-dsq.n3 { grid-template-columns: repeat(3, 6px); } .sim-dsq.n3 i { width: 6px; height: 6px; }
/* Fechas de un cambio */
.sim-iv-dates { display: flex; flex-wrap: wrap; align-items: end; gap: 8px 12px; margin-top: 10px; padding-top: 8px; border-top: 1px dashed var(--line); }
.sim-iv-dates .an-sub { margin: 0; align-self: center; }
.sim-iv-dates.is-on .sim-lbl { width: 100%; }
.sim-iv-dates .sim-f { flex: 1 1 140px; max-width: 200px; }
.sim-iv-dates .an-link { font-size: 13px; padding-bottom: 10px; }
.sim-f input[type=date] { min-width: 0; }
/* Ver en el mapa: el interruptor destacado */
.sim-switch-hero .sim-switch-in { border-color: color-mix(in srgb, var(--blue) 40%, var(--line)); background: color-mix(in srgb, var(--blue) 5%, var(--panel)); }
.sim-switch-hero .sim-switch-txt b { font-size: 15px; }
/* Incertidumbre: tarjetas con nube de puntos */
.sim-mcs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; max-width: 560px; }
.sim-mcsvg { display: block; width: 100%; max-width: 64px; }
.mcs { display: block; width: 100%; height: auto; }
.mcs .mc-p { fill: var(--blue); opacity: .55; }
.mcs .mc-1 { fill: var(--blue); }
.mcs .mc-band { stroke: var(--blue); stroke-width: 4; stroke-linecap: round; opacity: .3; }
.mcs .mc-mid { fill: var(--blue); }
/* Modelo integrado: la tarjeta de ML desactivada */
.sim-ocard.is-off { cursor: not-allowed; }
.sim-ocard.is-off .sim-ocard-in { opacity: .6; border-style: dashed; }
.sim-ocard.is-off .sim-oico { stroke: var(--muted); }
.sim-ml-why { color: var(--text) !important; font-weight: 600; }
.sim-ml-why:empty { display: none; }
/* KPI con margen p10–p90 */
.sim-rng { position: relative; display: block; height: 12px; margin: 6px 0 2px; border-radius: 6px; background: var(--panel-2); }
.sim-rng i { position: absolute; top: 0; bottom: 0; left: var(--l, 0%); }
.sim-rng .rs { width: var(--w, 0%); border-radius: 6px; background: color-mix(in srgb, var(--scen-ln) 45%, transparent); }
.sim-rng .rb { width: var(--w, 0%); top: 2px; bottom: 2px; border-radius: 4px; border: 1.5px dashed var(--base-ln); }
.sim-rng .rm { width: 4px; margin-left: -2px; top: -3px; bottom: -3px; border-radius: 2px; background: var(--scen-ln); }
.sim-rng-t { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.sim-kpi.unc .v::after { content: ' p50'; font-size: 11px; font-weight: 700; color: var(--muted); letter-spacing: 0; }
.sim-unc-note { margin: 0 0 10px; color: var(--muted); padding: 6px 12px; border-left: 3px solid var(--scen-ln); }
.sim-svg .band.scen { fill: var(--scen-ln); opacity: .16; }
.sim-svg .band.base { fill: none; stroke: var(--base-ln); stroke-width: 1.2; stroke-dasharray: 3 3; opacity: .9; }
.sim-legend .band i { height: 10px; border: 0; border-radius: 3px; background: color-mix(in srgb, var(--scen-ln) 22%, transparent); }
.sim-legend .bband i { height: 10px; border: 1.5px dashed var(--base-ln); border-radius: 3px; }
.sim-pw { display: grid; grid-template-columns: minmax(36px, 1fr) auto; gap: 6px; align-items: center; min-width: 96px; }
.sim-pw .sim-bar { --sev: var(--sev2); }
.sim-pw.hi .sim-bar { --sev: var(--sev4); } .sim-pw.lo .sim-bar { --sev: var(--sev1); }
.sim-pw b { font-weight: 700; }
/* Varios días */
.sim-md-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 760px) { .sim-md-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; } }
.sim-kpi .v.sm { font-size: 18px; }
.sim-md-charts { display: grid; gap: 4px 20px; }
@media (min-width: 900px) { .sim-md-charts { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.sim-chart.sm { min-height: 150px; }
.sim-svg .dbar { fill: var(--sev1); }
.sim-svg .dbar.s2 { fill: var(--sev2); } .sim-svg .dbar.s3 { fill: var(--sev3); } .sim-svg .dbar.s4 { fill: var(--sev4); }
.sim-svg .dmark { fill: var(--blue); font: 10px var(--sans); }
.sim-md-mark { margin: 2px 0 0; }
/* Rotaciones y estaciones */
.sim-h-ico { display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 7px; background: color-mix(in srgb, var(--sig-etcs1) 14%, var(--panel)); color: var(--sig-etcs1); font-size: 15px; }
#hTurn, #hSt { display: flex; align-items: center; gap: 6px; }
.sim-chains { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; }
.sim-chain { --sev: var(--sev1); display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 7px 10px; border-radius: 12px; border: 1px solid var(--line); border-left: 4px solid var(--sev); background: var(--panel); }
.sim-chain.s2 { --sev: var(--sev2); } .sim-chain.s3 { --sev: var(--sev3); } .sim-chain.s4 { --sev: var(--sev4); }
.sim-chain-t { font-weight: 700; padding: 2px 9px; border-radius: 8px; background: var(--panel-2); border: 1px solid var(--line); }
.sim-chain-st { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; color: var(--sig-etcs1); font-weight: 600; min-width: 0; overflow-wrap: anywhere; }
.sim-chain-st::before, .sim-chain-st::after { content: ''; width: 14px; border-top: 2px solid var(--hover-line); }
.sim-chain-st small { color: var(--muted); font-weight: 500; }
.sim-chain .sim-dl { margin-left: auto; }
.sim-bd.turn { color: var(--sig-etcs1); border-color: color-mix(in srgb, var(--sig-etcs1) 50%, transparent); }
.sim-sat { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 10px; }
.sim-sat-i { padding: 8px 10px; border-radius: 12px; border: 1px solid var(--line); background: var(--panel); display: grid; gap: 6px; }
.sim-sat-h { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.sim-sat-h b { margin-right: auto; overflow-wrap: anywhere; min-width: 0; }
.sim-sat-i .an-sub { margin: 0; }
.sim-slots { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; }
.sim-slots i { width: 16px; height: 16px; border-radius: 4px; }
.sim-slots i.in { background: color-mix(in srgb, var(--blue) 70%, var(--panel)); }
.sim-slots i.out { background: var(--red); }
.sim-slots .wall { width: 3px; height: 22px; margin: 0 4px; border-radius: 2px; background: var(--text); }
.sim-slots .more { font-size: 12px; font-weight: 700; color: var(--muted); } .sim-slots .more.out { color: var(--red); }
/* Chip del modelo integrado en el resultado */
.sim-kchip.bm { color: var(--muted); }
.sim-kchip.bm.ml { color: var(--green); border-color: color-mix(in srgb, var(--green) 40%, transparent); }
/* Mercancías (RFC) */
.sim-h-svg { width: 24px; height: 24px; fill: none; stroke: var(--blue); stroke-width: 1.8; stroke-linejoin: round; flex: none; }
.sim-fr-cards { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 230px), 1fr)); margin: 10px 0 16px; }
.sim-frc { display: grid; gap: 8px; align-content: start; padding: 12px; border-radius: 14px; border: 1.5px solid var(--line); background: var(--panel); min-width: 0; }
.sim-frc-h { display: flex; gap: 10px; align-items: flex-start; min-width: 0; }
.sim-frc-h > div { display: grid; min-width: 0; margin-right: auto; overflow-wrap: anywhere; }
.sim-frc-h small { color: var(--muted); font-size: 12px; }
.sim-frc-b { flex: none; display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: 10px; background: color-mix(in srgb, var(--sev3) 13%, var(--panel)); color: var(--sev3); font-weight: 800; }
.sim-frc-n { display: flex; align-items: baseline; gap: 6px; }
.sim-frc-n .v { font: 800 30px/1 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.sim-frc-n .k { font-size: 13px; color: var(--muted); font-weight: 600; }
.sim-frc-p { display: grid; grid-template-columns: minmax(40px, 1fr) auto; gap: 8px; align-items: center; font-size: 13px; }
.sim-frc-p .sim-bar { height: 8px; border-radius: 4px; } .sim-bar.ok { --sev: var(--green); }
.sim-frc .an-sub { margin: 0; }
.sim-badge.ver { color: var(--green); border-color: color-mix(in srgb, var(--green) 45%, transparent); white-space: nowrap; }
.sim-frc-h .sim-badge { flex: none; }
.sim-fac { display: grid; grid-template-columns: minmax(60px, 1fr) auto; gap: 8px; align-items: center; }
.sim-fac-bar { position: relative; height: 10px; border-radius: 5px; background: var(--panel-2); }
.sim-fac-bar::after { content: ''; position: absolute; left: 50%; top: -3px; bottom: -3px; border-left: 1.5px solid var(--muted); }
.sim-fac-bar i { position: absolute; top: 0; bottom: 0; width: var(--w, 0%); border-radius: 5px; }
.sim-fac.up .sim-fac-bar i { left: 50%; background: var(--sev3); }
.sim-fac.dn .sim-fac-bar i { right: 50%; background: var(--blue); }
.sim-fac b { font-variant-numeric: tabular-nums; }
.sim-fac.up b { color: var(--sev3); } .sim-fac.dn b { color: var(--blue); }
#frSrc a { font-size: 12.5px; }
/* Modelos: formatos, manifiesto, red neuronal */
.mod-fmts { display: flex; gap: 6px; justify-content: center; margin: 2px 0; }
.mod-fmt { display: inline-block; font: 800 11px/1.6 var(--mono); padding: 0 7px; border-radius: 6px; letter-spacing: .03em; color: var(--blue); background: color-mix(in srgb, var(--blue) 12%, var(--panel)); border: 1px solid color-mix(in srgb, var(--blue) 35%, transparent); vertical-align: 1px; }
.mod-fmt.onnx { color: var(--green); background: color-mix(in srgb, var(--green) 12%, var(--panel)); border-color: color-mix(in srgb, var(--green) 35%, transparent); }
.mod-fmt.wasm { color: #7a4fd6; background: color-mix(in srgb, #7a4fd6 12%, var(--panel)); border-color: color-mix(in srgb, #7a4fd6 35%, transparent); }
:root[data-theme="dark"] .mod-fmt.wasm { color: #b49cff; }
.mod-fmt:empty { display: none; }
.mod-man { display: grid; gap: 8px; justify-items: start; padding: 10px; border-radius: 12px; border: 1px dashed color-mix(in srgb, #7a4fd6 50%, var(--line)); }
.mod-man .an-sub { margin: 0; }
.mod-man-info { margin: 0; color: var(--warn-fg); font-weight: 600; }
.mod-man-info.ok { color: var(--green); } .mod-man-info.bad { color: var(--red); }
.mod-kbox.k-network, .mod-kind-ico.k-network { background: color-mix(in srgb, #7a4fd6 13%, var(--panel)); color: #7a4fd6; }
.mod-kind-ico.k-wasm { background: color-mix(in srgb, #7a4fd6 13%, var(--panel)); color: #7a4fd6; }
:root[data-theme="dark"] .mod-kbox.k-network, :root[data-theme="dark"] .mod-kind-ico.k-network, :root[data-theme="dark"] .mod-kind-ico.k-wasm { color: #b49cff; }
.mod-flow-box.k-network { border-color: #7a4fd6; background: color-mix(in srgb, #7a4fd6 8%, var(--panel)); color: #7a4fd6; }
.mod-net { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 0; align-items: stretch; }
.mod-layer { display: flex; align-items: center; min-width: 0; --op: var(--muted); }
.mod-layer.op-dense { --op: var(--blue); } .mod-layer.op-act { --op: var(--green); } .mod-layer.op-tree { --op: var(--sev3); } .mod-layer.op-prep { --op: #7a4fd6; }
.mod-layer-arr { width: 22px; height: 2px; background: var(--muted); position: relative; flex: none; }
.mod-layer-arr::after { content: ''; position: absolute; right: -1px; top: -4px; border: 5px solid transparent; border-left: 6px solid var(--muted); border-right: 0; }
.mod-layer-box { display: grid; justify-items: center; gap: 2px; min-width: 84px; padding: 8px 10px; border-radius: 12px; border: 2px solid var(--op); background: color-mix(in srgb, var(--op) 8%, var(--panel)); text-align: center; }
.mod-layer-box b { font-size: 13px; color: var(--text); }
.mod-layer-box small { font-size: 11px; color: var(--muted); }
.mod-layer-sh { font-size: 11px; color: var(--op); font-weight: 700; }
.mod-layer-dots { display: flex; gap: 3px; margin-top: 2px; }
.mod-layer-dots i { width: 7px; height: 7px; border-radius: 50%; background: var(--op); opacity: .8; }
.mod-layer-dots.more::after { content: '…'; color: var(--op); font-size: 11px; line-height: 7px; }
@media (max-width: 420px) {
  .sim-dchip-in b { font-size: 15px; }
  .sim-dchip-in small { font-size: 10px; }
  .sim-mcs { gap: 4px; }
  .sim-rcard-in small { font-size: 10.5px; }
  .sim-frc-n .v { font-size: 26px; }
}
@media print { .sim-md-charts { grid-template-columns: 1fr 1fr; } }

/* ── Conectar con Claude u otro cliente MCP (public/simulacion-mcp.js) ── */
.sim-mcp > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 8px; }
.sim-mcp > summary::-webkit-details-marker { display: none; }
.sim-mcp > summary::before { content: "▸"; color: var(--muted); transition: transform .15s; }
.sim-mcp[open] > summary::before { transform: rotate(90deg); }
.sim-mcp > summary .sim-h2 { margin: 0; }
.sim-mcp[open] > summary { margin-bottom: 10px; }
.sim-mcp .sim-h3 { margin-top: 16px; }
.sim-mcp-url { display: block; font-weight: 600; font-size: 14px; margin: 10px 0 0; }
.sim-mcp-copy { display: flex; gap: 8px; margin-top: 4px; min-width: 0; }
.sim-mcp-copy input { flex: 1 1 auto; min-width: 0; min-height: 46px; padding: 0 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel-2); color: var(--text); font: 14px var(--mono); }
.sim-mcp-cmd { margin: 6px 0 0; padding: 10px 12px; border-radius: 12px; background: var(--panel-2); border: 1px solid var(--line); overflow-x: auto; font: 12.5px/1.5 var(--mono); white-space: pre-wrap; word-break: break-all; }
.sim-mcp-new { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 16px; margin-top: 12px; }
.sim-mcp-new > label { display: flex; flex-direction: column; gap: 4px; font-weight: 600; font-size: 14px; flex: 1 1 220px; }
.sim-mcp-new > label input { min-height: 46px; padding: 0 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); color: var(--text); font: 15px var(--sans); }
.sim-mcp-new fieldset { border: 0; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 14px; }
.sim-mcp-new legend { font-weight: 600; padding: 0; margin-bottom: 4px; }
.sim-mcp-key { margin-top: 12px; padding: 12px; border: 1px solid var(--amber); border-radius: 12px; }
.sim-mcp-key .sim-msg { margin: 0 0 6px; font-weight: 600; }
.sim-mcp-key .an-link { margin-top: 8px; }
.sim-mcp code { font-family: var(--mono); }
@media print { .sim-mcp { display: none !important; } }
