:root{
  --bg:#F7F4EC;--panel:#FCFBF8;--line:#D9D4C8;--text:#1F2A44;--muted:#5F6B7A;--primary:#0F6B68;--primary2:#0B5754;--neutral:#5C6670;--neutral2:#B4BDC6;--pos:#3FA56A;--neg:#B64A4A;--gold:#C79A1B;--shadow:0 14px 40px rgba(31,42,68,.10)
}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;overflow:hidden}body:before{content:"";position:fixed;inset:0;background-image:radial-gradient(rgba(31,42,68,.14) 1px, transparent 1px);background-size:18px 18px;pointer-events:none;opacity:.45}.hidden{display:none!important}.brand{letter-spacing:.36em;font-size:12px;font-weight:900;color:var(--primary);text-transform:uppercase}.beta{letter-spacing:0;color:#c83939;margin-left:8px;font-weight:800}.home{position:relative;min-height:100vh;display:grid;place-items:center;padding:30px}.homeCard{width:min(740px,92vw);background:rgba(252,251,248,.92);border:1px solid var(--line);border-radius:28px;box-shadow:var(--shadow);padding:34px}.home h1{font-size:clamp(42px,5vw,72px);line-height:.95;margin:12px 0 10px;letter-spacing:-.06em}.subcopy{color:var(--muted);margin:0 0 18px}.search{position:relative;display:flex;gap:10px}.search input{width:100%;height:58px;border:1px solid #bfd1d1;border-radius:18px;background:#fff;color:var(--text);font-size:16px;padding:0 48px 0 18px;outline:none;box-shadow:0 0 0 3px rgba(15,107,104,.06)}.search button{border:0;border-radius:18px;background:var(--primary);color:white;font-weight:800;padding:0 28px;min-width:120px;cursor:pointer}.clear{position:absolute;right:142px;top:17px;border:0!important;background:transparent!important;color:#477!important;min-width:0!important;padding:0!important;font-size:22px}.suggestions{position:absolute;z-index:80;left:0;right:130px;top:64px;background:rgba(252,251,248,.98);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);overflow:hidden;padding:6px}.suggestion{display:flex;gap:12px;align-items:center;padding:10px;border-radius:14px;text-decoration:none;color:var(--text);cursor:pointer}.suggestion:hover{background:#eef4f3}.avatarMini{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:#e9eff0;color:var(--primary);font-weight:900;overflow:hidden;flex:0 0 auto}.avatarMini img{width:100%;height:100%;object-fit:cover}.sugName{display:block;font-weight:900}.sugSub{display:block;color:var(--muted);font-size:12px}.notice{margin:18px 0 0;border:1px solid var(--line);background:#f5f7f6;border-radius:14px;padding:10px 14px;font-size:12px;color:var(--muted);font-weight:700}.notice strong{color:var(--text)}.notice .migration{display:block;color:#c83939;margin-top:3px}.metricLine{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.metricPill{background:#fff;border:1px solid #e1ded5;border-radius:14px;padding:10px 14px;font-size:12px;color:var(--muted);font-weight:800}.metricPill b{display:block;color:var(--primary);font-size:22px}.footer{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);font-size:12px;color:var(--muted);background:rgba(252,251,248,.86);border:1px solid var(--line);border-radius:18px;padding:8px 14px;z-index:30}.topbar{position:fixed;top:14px;left:14px;z-index:50;width:min(520px,calc(100vw - 28px));background:rgba(252,251,248,.92);border:1px solid var(--line);border-radius:18px;box-shadow:0 8px 30px rgba(31,42,68,.08);padding:10px}.topbar .search input{height:46px;border-radius:14px}.topbar .search button{border-radius:14px}.topbar .clear{right:106px;top:11px}.actions{position:fixed;right:14px;top:14px;z-index:50;display:flex;gap:8px}.actions button,.zoom button{border:1px solid var(--line);background:rgba(252,251,248,.95);color:var(--text);border-radius:14px;padding:12px 16px;font-weight:800;box-shadow:0 8px 20px rgba(31,42,68,.06);cursor:pointer}.wrap{position:fixed;inset:0;overflow:hidden;cursor:grab}.canvas{position:absolute;left:0;top:0;width:4200px;height:3000px;transform-origin:0 0}.svg{position:absolute;inset:0;width:4200px;height:3000px}.nodes{position:absolute;inset:0}.node{position:absolute;transform:translate(-50%,-50%);user-select:none;cursor:pointer}.node .bubble{width:108px;height:108px;border-radius:50%;background:var(--primary);display:grid;place-items:center;color:white;font-weight:900;font-size:28px;border:4px solid var(--primary2);box-shadow:var(--shadow);overflow:hidden}.node .bubble img{width:100%;height:100%;object-fit:cover}.node.person:not(.center) .bubble{background:#fff;border:3px solid var(--gold);color:var(--primary);width:74px;height:74px;font-size:18px}.label{position:absolute;left:50%;top:calc(100% + 8px);transform:translateX(-50%);background:rgba(252,251,248,.96);border:1px solid #ddd;border-radius:8px;padding:5px 8px;text-align:center;font-weight:900;white-space:nowrap;font-size:13px;box-shadow:0 8px 18px rgba(31,42,68,.07)}.label .sub{display:block;color:var(--muted);font-size:11px;font-weight:700}.node.group .box{min-width:160px;max-width:240px;text-align:center;border-radius:14px;padding:16px 18px;background:var(--primary);color:white;border:3px solid var(--gold);box-shadow:var(--shadow);font-weight:900}.node.group.inactive .box{background:#edf1f2;color:#7b8790;border-color:#d8dee3}.node.group .sub{font-size:12px;opacity:.9;margin-top:4px}.tooltip{position:absolute;z-index:90;max-width:330px;background:rgba(252,251,248,.98);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:12px;pointer-events:auto}.tipRow{display:flex;gap:10px;align-items:center}.tipPic{width:44px;height:44px;border-radius:50%;background:#eaf0f1;color:var(--primary);display:grid;place-items:center;font-weight:900;overflow:hidden;flex:0 0 auto}.tipPic img{width:100%;height:100%;object-fit:cover}.tipTitle{font-weight:950}.tipSub{font-size:12px;color:var(--muted);font-weight:700}.tipParty{margin-left:8px;border-radius:999px;background:#eef5f4;color:var(--primary);font-size:10px;font-weight:900;padding:3px 6px}.tipAction{width:100%;margin-top:10px;border:1px solid var(--line);background:#f3f8f7;color:var(--primary);border-radius:12px;padding:10px;font-weight:900;cursor:pointer;text-align:left}.side{position:fixed;right:18px;top:72px;bottom:18px;width:min(390px,calc(100vw - 36px));z-index:60;background:rgba(252,251,248,.98);border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow);padding:22px;overflow:auto}.close{float:right;border:0;background:#eef1f4;border-radius:14px;padding:8px 12px;font-weight:900}.kicker{letter-spacing:.24em;text-transform:uppercase;color:var(--primary);font-size:12px;font-weight:950}.side h2{font-size:26px;line-height:1.02;margin:10px 0}.kv{font-size:14px;color:var(--muted);margin:6px 0}.section{border-top:1px solid var(--line);margin-top:18px;padding-top:16px}.section h3{letter-spacing:.20em;text-transform:uppercase;color:var(--primary);font-size:12px;margin:0 0 10px}.cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat{border:1px solid #e1ded5;border-radius:14px;background:#fff;padding:12px;color:var(--muted);font-size:12px;font-weight:800}.stat b{font-size:24px;color:var(--primary)}.legend{position:fixed;left:18px;bottom:60px;background:rgba(252,251,248,.95);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:14px;z-index:40;font-size:12px;font-weight:800;color:var(--muted);min-width:230px}.legend h4{margin:0 0 10px;color:var(--text);letter-spacing:.14em}.legrow{display:flex;align-items:center;gap:10px;margin:8px 0}.legline{width:38px;height:4px;border-radius:99px}.zoom{position:fixed;left:265px;bottom:60px;z-index:40;display:grid;gap:6px}.toast{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:white;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:16px 20px;color:var(--text);z-index:200}.admin{overflow:auto;background:#f4f6f8}.adminWrap{max-width:1180px;margin:auto;padding:26px}.adminNav{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0 22px}.adminNav a{padding:10px 14px;border-radius:12px;border:1px solid #d8e1e3;text-decoration:none;color:var(--text);background:white;font-weight:900}.adminCard{background:white;border:1px solid #d8e1e3;border-radius:18px;padding:20px;margin:14px 0;box-shadow:0 8px 25px rgba(31,42,68,.06)}.admin h1{color:#12345a}.admin input,.admin textarea,.admin select{width:100%;padding:11px;border:1px solid #ccd7dc;border-radius:10px;background:#fff}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.btn{border:0;border-radius:12px;padding:11px 15px;background:var(--primary);color:white;font-weight:900;cursor:pointer}.table{width:100%;border-collapse:collapse}.table th,.table td{border-bottom:1px solid #e6eaee;padding:10px;text-align:left;font-size:13px}.table th{color:var(--primary);font-size:11px;text-transform:uppercase;letter-spacing:.12em}
@media(max-width:900px){.side{left:12px;right:12px;top:auto;height:46vh;width:auto}.actions{top:auto;bottom:14px}.legend,.zoom{display:none}.homeCard{padding:24px}.search{display:block}.search button{margin-top:8px;height:48px;width:100%}.clear{right:16px!important}.suggestions{right:0}.topbar{width:calc(100vw - 28px)}}


/* =========================================================
   MAPA POLÍTICO · BETA 1.5 · Estilo unificado gestor/login
   ========================================================= */
.admin{overflow:auto;background:radial-gradient(circle at 1px 1px,rgba(31,42,68,.09) 1px,transparent 0) 0 0/18px 18px,var(--bg);}
.admin:before{display:none}.adminShell{min-height:100vh;display:grid;grid-template-columns:280px 1fr}.adminSide{position:sticky;top:0;height:100vh;background:rgba(252,251,248,.94);border-right:1px solid var(--line);padding:26px 18px;box-shadow:8px 0 30px rgba(31,42,68,.05)}.adminSideNote{color:var(--muted);font-size:13px;line-height:1.4}.adminMain{padding:28px;max-width:1280px;width:100%;}.adminTop{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.adminTop h1{font-size:38px;line-height:1;margin:4px 0 0;letter-spacing:-.04em;color:var(--text)}.adminUser{background:rgba(252,251,248,.95);border:1px solid var(--line);border-radius:16px;padding:10px 12px;min-width:190px;text-align:right}.adminUser span{display:block;color:var(--muted);font-size:12px}.adminUser a{display:inline-block;margin-top:6px;color:var(--neg);font-weight:900;text-decoration:none}.adminNav{display:grid;gap:8px;margin-top:20px}.adminNav a{display:block;padding:12px 14px;border-radius:14px;border:1px solid transparent;text-decoration:none;color:var(--text);background:#fff;font-weight:900;box-shadow:0 5px 15px rgba(31,42,68,.04)}.adminNav a:hover{border-color:var(--primary);color:var(--primary)}.adminCard{background:rgba(252,251,248,.96);border:1px solid var(--line);border-radius:22px;padding:22px;margin:16px 0;box-shadow:0 12px 30px rgba(31,42,68,.06)}.heroCard{border-left:5px solid var(--primary)}.adminCard h2{margin-top:0}.moduleGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.moduleGrid a{background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px;text-decoration:none;color:var(--text);font-weight:950}.moduleGrid a:hover{color:var(--primary);border-color:var(--primary)}.admin input,.admin textarea,.admin select{width:100%;padding:12px 13px;border:1px solid #ccd7dc;border-radius:12px;background:#fff;color:var(--text);font-size:15px}.admin label{display:block;color:var(--primary);font-size:12px;text-transform:uppercase;letter-spacing:.12em;font-weight:950;margin:8px 0 6px}.admin .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}.admin .full{grid-column:1/-1}.btn,.admin button{border:0;border-radius:14px;padding:12px 16px;background:var(--primary);color:white;font-weight:950;cursor:pointer;text-decoration:none;display:inline-block}.btn:hover,.admin button:hover{background:var(--primary2)}.ghost{background:#eef2f4!important;color:var(--text)!important}.table{width:100%;border-collapse:collapse}.table th,.table td{border-bottom:1px solid #e6eaee;padding:12px;text-align:left;font-size:13px;vertical-align:top}.table th{color:var(--primary);font-size:11px;text-transform:uppercase;letter-spacing:.12em}.msgBox,.errBox{padding:12px 14px;border-radius:14px;margin:12px 0;font-weight:850}.msgBox{background:#eaf7ef;color:#1d6b3e;border:1px solid #bfe8ce}.errBox{background:#fff0f0;color:var(--neg);border:1px solid #f1c4c4}.smallNote{font-size:13px;color:var(--muted)}.miniForm{padding:12px;background:#f7f9fa;border:1px solid #e3e8eb;border-radius:14px;margin-top:10px}.loginBody,.installBody{min-height:100vh;display:grid;place-items:center;padding:28px}.loginCard,.installCard{width:min(620px,94vw);background:rgba(252,251,248,.96);border:1px solid var(--line);border-radius:26px;box-shadow:var(--shadow);padding:30px}.installCard{width:min(1040px,94vw)}.installWrap{width:100%;display:grid;place-items:center}.loginCard h1,.installCard h1{font-size:44px;line-height:.98;margin:16px 0 8px;letter-spacing:-.05em}.lead{color:var(--muted);line-height:1.55}.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:22px 0}.step{border:1px solid var(--line);border-radius:14px;padding:14px;background:#fff}.step b{color:var(--primary)}.status{display:inline-flex;gap:8px;align-items:center;border:1px solid var(--line);border-radius:999px;padding:8px 12px;background:#fff;color:var(--muted);font-size:13px;margin:6px 8px 6px 0}.dot{width:9px;height:9px;border-radius:50%;background:var(--neg)}.dot.ok{background:var(--pos)}.check{display:flex!important;gap:9px;align-items:flex-start;text-transform:none!important;letter-spacing:0!important;color:var(--muted)!important;font-size:15px!important}.check input{width:auto!important;margin-top:4px}.actions{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:20px}.note{margin-top:20px;border-left:4px solid var(--gold);padding:12px 14px;background:#fff8e6;border-radius:12px;color:#59440b}code{background:#eef2f4;padding:2px 6px;border-radius:6px}@media(max-width:900px){.adminShell{grid-template-columns:1fr}.adminSide{position:relative;height:auto}.adminTop{display:block}.steps{grid-template-columns:1fr}.loginCard h1,.installCard h1{font-size:34px}}

/* =========================================================
   BETA 1.5 v5 · Login/instalador reforzados
   Mantiene la portada pública como referencia visual.
   ========================================================= */
body.admin.loginBody,
body.admin.installBody{
  min-height:100vh;
  display:grid !important;
  place-items:center !important;
  padding:28px;
  background:radial-gradient(circle at 1px 1px, rgba(31,42,68,.12) 1px, transparent 0) 0 0/18px 18px, var(--bg) !important;
}
.authShell,.installWrap{width:100%;display:grid;place-items:center;position:relative;z-index:1}.authCard,.installCard{background:rgba(252,251,248,.96);border:1px solid var(--line);border-radius:28px;box-shadow:var(--shadow);padding:32px}.authCard{width:min(620px,94vw)}.authCard.wide{width:min(880px,94vw)}.installCard{width:min(1040px,94vw)}.authCard h1,.installCard h1{font-size:clamp(34px,4vw,52px);line-height:.98;margin:16px 0 10px;letter-spacing:-.055em;color:var(--text)}.authForm{display:grid;gap:10px;margin-top:20px}.authForm label,.installCard label{display:block;color:var(--primary);font-size:12px;text-transform:uppercase;letter-spacing:.14em;font-weight:950;margin:8px 0 2px}.authForm input,.installCard input,.installCard select{width:100%;height:50px;border:1px solid #ccd7dc;border-radius:14px;background:#fff;color:var(--text);font-size:15px;padding:0 14px;outline:none}.authForm input:focus,.installCard input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(15,107,104,.10)}.authForm .btn{height:50px;margin-top:8px}.authLinks{display:flex;gap:12px;flex-wrap:wrap;margin-top:18px}.authLinks a{color:var(--primary);font-weight:850;text-decoration:none}.authLinks a:hover{text-decoration:underline}.warnBox{background:#fff8e6;color:#7b5a00;border:1px solid #ead48e;padding:12px 14px;border-radius:14px;margin:12px 0;font-weight:850}.diagTable{width:100%;border-collapse:collapse;margin:16px 0}.diagTable td{border-bottom:1px solid #e6eaee;padding:10px}.okText{color:var(--primary);font-weight:950}.badText{color:var(--neg);font-weight:950}.installCard h2{margin:24px 0 8px;color:var(--text)}.installActions{position:static!important;display:flex!important;gap:12px;align-items:center;flex-wrap:wrap;margin-top:20px}.installActions .btn,.installActions button{box-shadow:none}.installCard .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.installCard .full{grid-column:1/-1}.installCard .check input{height:auto}.installCard .check span{text-transform:none;letter-spacing:0;font-size:15px;color:var(--muted);font-weight:700}.installCard .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:22px 0}.installCard .step{border:1px solid var(--line);border-radius:16px;background:#fff;padding:15px;color:var(--text)}.installCard .step b{color:var(--primary)}@media(max-width:800px){body.admin.loginBody,body.admin.installBody{padding:16px}.authCard,.installCard{padding:24px}.installCard .steps{grid-template-columns:1fr}.installCard .grid{grid-template-columns:1fr}}


/* =========================================================
   HOTFIX BUSCADOR PÚBLICO · BETA 1.5
   Corrige desbordes, estado activo y sugerencias en tablero.
   ========================================================= */
#app .topbar{
  position:fixed;
  top:12px;
  left:12px;
  z-index:120;
  width:min(560px, calc(100vw - 250px));
  max-width:calc(100vw - 250px);
  background:rgba(252,251,248,.96);
  backdrop-filter:blur(12px);
}
.topSearchWrap{
  margin-top:8px;
}
.activePerson{
  display:block;
  margin:2px 2px 7px;
  color:var(--muted);
  font-size:12px;
  font-weight:850;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
#app .topbar .search{
  width:100%;
  display:flex;
  align-items:center;
}
#app .topbar .search input{
  min-width:0;
  flex:1 1 auto;
  height:46px;
  padding-right:42px;
}
#app .topbar .search button:not(.clear){
  flex:0 0 auto;
  min-width:92px;
  padding:0 18px;
  height:46px;
}
#app .topbar .clear{
  right:104px;
  top:12px;
}
#app .topbar .suggestions{
  top:54px;
  left:0;
  right:0;
  max-height:360px;
  overflow:auto;
}
#app .actions{
  z-index:130;
}
@media(max-width:900px){
  #app .topbar{
    width:calc(100vw - 24px);
    max-width:calc(100vw - 24px);
    left:12px;
    right:12px;
  }
  #app .actions{
    top:112px;
    right:12px;
  }
  #app .topbar .search{
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    gap:8px;
  }
  #app .topbar .search button:not(.clear){
    width:auto;
    margin-top:0;
  }
  #app .topbar .clear{
    right:104px!important;
    top:12px!important;
  }
}


/* =========================================================
   HOTFIX EXPANSIÓN RECURSIVA CONTROLADA
   ========================================================= */
.node.person.expanded .bubble{
  box-shadow:0 0 0 6px rgba(15,107,104,.16), var(--shadow);
}
.tipAction.primaryAction{
  background:var(--primary)!important;
  color:#fff!important;
  border-color:var(--primary)!important;
}
.smallHint{
  font-size:12px;
  color:var(--muted);
  margin-top:8px;
  line-height:1.35;
}


/* =========================================================
   HOTFIX EXPANSIÓN RECURSIVA V2
   ========================================================= */
.node.person.expanded .bubble,
.node.person.related .bubble:hover{
  box-shadow:0 0 0 6px rgba(15,107,104,.16), var(--shadow);
}
.tipAction.primaryAction{
  background:var(--primary)!important;
  color:#fff!important;
  border-color:var(--primary)!important;
}
.smallHint{
  font-size:12px;
  color:var(--muted);
  margin-top:8px;
  line-height:1.35;
}


/* =========================================================
   HOTFIX REORDENAMIENTO MANUAL DE CONSTELACIÓN
   ========================================================= */
.node{
  cursor:grab;
  touch-action:none;
  user-select:none;
}
.node.dragging{
  cursor:grabbing;
  z-index:80;
}
.node.pinned .bubble,
.node.pinned .box{
  box-shadow:0 0 0 4px rgba(176,141,60,.18), var(--shadow);
}
.svg line{
  transition:none;
}


/* =========================================================
   HOTFIX ARRASTRE DE AGRUPADOR EN BLOQUE
   ========================================================= */
.node.draggingBundle .bubble,
.node.draggingBundle .box{
  box-shadow:0 0 0 5px rgba(15,107,104,.12), var(--shadow);
}
.node.group.dragging .box{
  box-shadow:0 0 0 6px rgba(176,141,60,.24), var(--shadow);
}


/* =========================================================
   HOTFIX ARRASTRE V2 ROBUSTO
   ========================================================= */
.nodes{
  pointer-events:auto;
}
.node{
  cursor:grab!important;
  pointer-events:auto!important;
  touch-action:none!important;
  user-select:none!important;
  -webkit-user-select:none!important;
}
.node.dragging{
  cursor:grabbing!important;
  z-index:999!important;
}
.node.draggingBundle{
  z-index:998!important;
}
.node.draggingBundle .bubble,
.node.draggingBundle .box{
  box-shadow:0 0 0 5px rgba(15,107,104,.14), var(--shadow)!important;
}
.node.group.dragging .box{
  box-shadow:0 0 0 7px rgba(176,141,60,.28), var(--shadow)!important;
}
.node.pinned .bubble,
.node.pinned .box{
  box-shadow:0 0 0 4px rgba(176,141,60,.16), var(--shadow);
}


/* =========================================================
   HOTFIX LAYOUT POR RAMAS / CONSTELACIÓN ABIERTA
   ========================================================= */
.node .label{
  max-width:180px;
}
.node.group .box{
  min-width:185px;
}
.node.person.related .label{
  transform:translateX(-50%) scale(.96);
  transform-origin:top center;
}


/* =========================================================
   HOTFIX EXPANSION CONTEXTUAL
   ========================================================= */
.node.expansionFocus .bubble,
.node.expansionFocus .box{
  box-shadow:0 0 0 7px rgba(15,107,104,.18), var(--shadow)!important;
}

/* =========================================================
   HOTFIX FICHAS ANALÍTICAS
   ========================================================= */
.analysisBlock{background:rgba(15,107,104,.045);border:1px solid rgba(15,107,104,.16);border-radius:14px;padding:14px}
.analysisIntro{margin:0 0 12px;color:var(--muted);font-size:13px;line-height:1.45}
.analysisCards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0 12px}
.analysisStat{border:1px solid var(--line);border-radius:12px;padding:10px 8px;background:#fff}
.analysisStat b{display:block;color:var(--primary);font-size:17px;line-height:1.1}
.analysisStat span{display:block;color:var(--muted);font-size:11px;font-weight:800;margin-top:4px}
.miniBars{display:flex;height:7px;overflow:hidden;border-radius:999px;background:#e8edf0;margin-top:10px}
.miniBars span{display:block;height:100%}.barPos{background:#3BA267}.barNeu{background:#5C6670}.barNeg{background:#C43D3D}
.chipLine{display:flex;justify-content:space-between;gap:10px;border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:7px 0;background:#fff}
.chipLine b{color:var(--text);font-size:13px}.chipLine span{color:var(--muted);font-size:12px;font-weight:800}
.analysisLinkCard{border:1px solid var(--line);border-radius:14px;padding:12px;background:#fff;margin:9px 0}
.analysisLinkTop{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;margin-bottom:9px}
.analysisLinkTop b{color:var(--text);font-size:13px;line-height:1.2}
.analysisLinkTop span{color:var(--muted);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;text-align:right}
.analysisGridTiny{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:8px}
.analysisGridTiny div{background:#f7faf9;border-radius:10px;padding:8px 7px}.analysisGridTiny strong{display:block;font-size:12px;color:var(--primary)}.analysisGridTiny span{display:block;font-size:10px;color:var(--muted);font-weight:900}
#side{overflow:auto}
@media(max-width:720px){.analysisCards,.analysisGridTiny{grid-template-columns:1fr}}

/* =========================================================
   HOTFIX LECTURA ORIGEN → ELEMENTO
   ========================================================= */
.originReading{
  background:linear-gradient(180deg, rgba(15,107,104,.075), rgba(15,107,104,.035));
  border:1px solid rgba(15,107,104,.22);
  border-radius:15px;
  padding:14px;
}
.routeLine{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  padding:10px 12px;
  border-radius:12px;
  background:#fff;
  border:1px solid var(--line);
  margin:8px 0 12px;
  color:var(--text);
}
.routeLine b{font-size:13px}
.routeLine span{color:var(--primary);font-weight:950}
.routeList{display:grid;gap:8px;margin-top:10px}
.routeItem{
  display:grid;
  gap:3px;
  border:1px solid var(--line);
  border-radius:12px;
  padding:10px 12px;
  background:#fff;
}
.routeItem b{font-size:12px;color:var(--text)}
.routeItem span{font-size:12px;color:var(--muted);font-weight:800}
.routeItem em{font-style:normal;font-size:11px;color:var(--primary);font-weight:900}

/* =========================================================
   HOTFIX MOBILE / TABLET INTERACTION
   ========================================================= */
html,body,#app,#viewport,#world{overscroll-behavior:none}
#viewport{touch-action:none}
.node{pointer-events:auto!important;cursor:pointer!important;touch-action:none!important;-webkit-tap-highlight-color:transparent}
.node.dragging{cursor:grabbing!important}
.node .bubble,.node .box{touch-action:none!important}
.svg line{pointer-events:stroke}
#side,.topbar,.actions,.legend,.zoom{touch-action:auto}
@media(max-width:900px){
  #side{position:fixed;left:10px!important;right:10px!important;bottom:10px!important;top:auto!important;width:auto!important;max-height:58vh;overflow:auto;z-index:240;border-radius:22px}
  #side.hidden{display:none!important}
  #app .topbar{width:calc(100vw - 20px)!important;max-width:calc(100vw - 20px)!important;left:10px!important;top:10px!important;z-index:230}
  #app .actions{top:104px!important;right:10px!important;z-index:225}
  .legend{left:10px!important;bottom:82px!important;max-width:calc(100vw - 24px);z-index:120}
  .zoom{left:auto!important;right:12px!important;bottom:82px!important;z-index:130}
  .node.person .bubble{width:62px;height:62px}
  .node.group .box{min-width:170px;max-width:210px}
  .node .label{max-width:170px;font-size:11px}
}
@media(max-width:640px){
  #app .topbar .search{grid-template-columns:minmax(0,1fr) 84px!important}
  #app .topbar .search button:not(.clear){min-width:84px!important;padding:0 12px!important}
  #app .topbar .clear{right:94px!important}
  #side{max-height:62vh}
  .analysisCards,.analysisGridTiny{grid-template-columns:1fr!important}
}

/* =========================================================
   HOTFIX MOBILE / TABLET V2 · TAP FIRST
   ========================================================= */
html,body{
  overscroll-behavior:none;
}
#viewport,#world{
  touch-action:none!important;
}
.node{
  pointer-events:auto!important;
  cursor:pointer!important;
  touch-action:manipulation!important;
  -webkit-tap-highlight-color:rgba(15,107,104,.18);
}
.node .bubble,
.node .box,
.node .label{
  pointer-events:auto!important;
}
.svg line{
  pointer-events:stroke!important;
}
#side,.topbar,.actions,.legend,.zoom{
  touch-action:auto!important;
}
@media (pointer:coarse){
  .node{
    cursor:pointer!important;
  }
  .node.person .bubble{
    width:68px!important;
    height:68px!important;
  }
  .node.group .box{
    min-width:190px!important;
    max-width:230px!important;
    padding:14px 16px!important;
  }
}
@media(max-width:900px){
  #side{
    position:fixed!important;
    left:10px!important;
    right:10px!important;
    bottom:10px!important;
    top:auto!important;
    width:auto!important;
    max-height:60vh!important;
    overflow:auto!important;
    z-index:999!important;
    border-radius:22px!important;
  }
  #side.hidden{display:none!important}
  #app .topbar{
    width:calc(100vw - 20px)!important;
    max-width:calc(100vw - 20px)!important;
    left:10px!important;
    top:10px!important;
    z-index:990!important;
  }
  #app .actions{
    top:104px!important;
    right:10px!important;
    z-index:980!important;
  }
  .legend{
    left:10px!important;
    bottom:82px!important;
    max-width:calc(100vw - 24px)!important;
    z-index:150!important;
  }
  .zoom{
    left:auto!important;
    right:12px!important;
    bottom:82px!important;
    z-index:160!important;
  }
}
@media(max-width:640px){
  #app .topbar .search{
    grid-template-columns:minmax(0,1fr) 84px!important;
  }
  #app .topbar .search button:not(.clear){
    min-width:84px!important;
    padding:0 12px!important;
  }
  #app .topbar .clear{
    right:94px!important;
  }
  #side{
    max-height:64vh!important;
  }
  .analysisCards,.analysisGridTiny{
    grid-template-columns:1fr!important;
  }
}

/* =========================================================
   HOTFIX ZOOM MÓVIL V3
   ========================================================= */
.zoom button,
#zin,
#zout{
  touch-action:manipulation!important;
  -webkit-tap-highlight-color:rgba(15,107,104,.18);
  user-select:none!important;
}
@media(pointer:coarse){
  .zoom button,
  #zin,
  #zout{
    min-width:46px!important;
    min-height:46px!important;
    font-size:18px!important;
  }
}

/* =========================================================
   HOTFIX RELACIONES EXPLÍCITAS EN LECTURA ORIGEN → PERSONA
   ========================================================= */
.explicitReading{
  background:linear-gradient(180deg, rgba(176,141,60,.12), rgba(15,107,104,.045));
  border-color:rgba(176,141,60,.35);
}
.explicitReading .routeLine span{
  color:#b08d3c;
}

/* =========================================================
   HOTFIX LISTA DE RELACIONES EXPLÍCITAS EN PERSONA ORIGEN
   ========================================================= */
.explicitList{
  background:linear-gradient(180deg, rgba(176,141,60,.10), rgba(255,255,255,.9));
  border:1px solid rgba(176,141,60,.28);
  border-radius:15px;
  padding:14px;
}
.explicitRelationCard{
  border:1px solid var(--line);
  border-radius:14px;
  padding:12px;
  background:#fff;
  margin:10px 0;
}

/* =========================================================
   HOTFIX V3 · RELACIÓN EXPLÍCITA VISIBLE COMO TARJETA
   ========================================================= */
.explicitBadgeNode{
  position:absolute;
  width:235px;
  transform:translate(-50%,-50%);
  border:1px solid rgba(176,141,60,.42);
  background:linear-gradient(180deg,#fffdf8,#fff);
  border-radius:16px;
  padding:12px 14px;
  box-shadow:0 14px 30px rgba(31,42,68,.10);
  z-index:8;
  cursor:pointer;
  pointer-events:auto;
}
.explicitBadgeNode:hover{
  box-shadow:0 18px 36px rgba(176,141,60,.18);
  border-color:#b08d3c;
}
.explicitBadgeKicker{
  color:#b08d3c;
  text-transform:uppercase;
  letter-spacing:.16em;
  font-size:10px;
  font-weight:950;
  margin-bottom:5px;
}
.explicitBadgeTitle{
  color:var(--text);
  font-weight:950;
  line-height:1.15;
  font-size:13px;
}
.explicitBadgeMeta{
  color:var(--muted);
  font-size:11px;
  line-height:1.25;
  margin-top:4px;
}
.explicitBadgeScore{
  margin-top:7px;
  color:var(--primary);
  font-size:11px;
  font-weight:950;
}
@media(max-width:720px){
  .explicitBadgeNode{
    width:205px;
    padding:10px 12px;
  }
}


/* HOTFIX: ocultar tarjetas de relación explícita.
   Las relaciones personales deben representarse como agrupadores específicos. */
.explicitBadgeNode{display:none!important}

/* =========================================================
   HOTFIX PIZARRA INFINITA · WORLD DINÁMICO
   ========================================================= */
.wrap{
  overflow:hidden!important;
}
.canvas{
  min-width:4200px;
  min-height:3000px;
  overflow:visible!important;
}
.svg{
  overflow:visible!important;
}
.nodes{
  overflow:visible!important;
}


/* =========================================================
   MOBILE_NAV_FIX_V5 · override final
   ========================================================= */
html,body{
  overflow:hidden!important;
  overscroll-behavior:none!important;
  -webkit-overflow-scrolling:auto!important;
}
#app,#wrap,.wrap,#canvas,.canvas,#svg,.svg,#nodes,.nodes{
  touch-action:none!important;
  overscroll-behavior:none!important;
}
#wrap,.wrap{
  position:fixed!important;
  inset:0!important;
  overflow:hidden!important;
  cursor:grab;
}
#wrap.isPanning,.wrap.isPanning{
  cursor:grabbing;
}
#canvas,.canvas{
  transform-origin:0 0!important;
  will-change:transform;
}
.node{
  touch-action:manipulation!important;
  -webkit-tap-highlight-color:transparent!important;
}
#side,.topbar,.actions,.zoom,.legend,button,input,textarea,select,a,.suggestions{
  touch-action:manipulation!important;
}
@media(max-width:900px){
  #app .actions{
    top:118px!important;
    right:10px!important;
    bottom:auto!important;
    z-index:980!important;
  }
  .zoom{
    display:flex!important;
    flex-direction:column!important;
    right:12px!important;
    bottom:86px!important;
    left:auto!important;
    z-index:970!important;
  }
  .legend{
    display:none!important;
  }
  .footer{
    z-index:20!important;
    pointer-events:none!important;
  }
  .footer a{
    pointer-events:auto!important;
  }
}

