{"id":1032,"date":"2026-01-27T13:04:14","date_gmt":"2026-01-27T13:04:14","guid":{"rendered":"https:\/\/5.olasdevida.es\/?page_id=1032"},"modified":"2026-01-27T13:04:52","modified_gmt":"2026-01-27T13:04:52","slug":"27aso-50","status":"publish","type":"page","link":"https:\/\/5.olasdevida.es\/index.php\/27aso-50\/","title":{"rendered":"27Aso-50"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1032\" class=\"elementor elementor-1032\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f4f1524 e-con-full e-flex e-con e-parent\" data-id=\"f4f1524\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-29e2777 elementor-widget elementor-widget-html\" data-id=\"29e2777\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- \u2705 OLAS DE VIDA \u00b7 PANEL M\u00c9DICO (ELEMENTOR \u00b7 1 BLOQUE)\r\n     - NO se toca la tabla\/listado\r\n     - Se mejora POPUP (ficha) + enlaces tipo \"tiles\"\r\n     - Se recupera \"Julian\" (iframe)\r\n     - JS ES5 \u00b7 Robusto Elementor\r\n-->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700&family=Poppins:wght@500;600;700&display=swap\" rel=\"stylesheet\">\r\n\r\n<div id=\"ovApp\">\r\n  <div class=\"ov-wrapper\">\r\n    <div class=\"ov-header\">\r\n      <div>\r\n        <div class=\"ov-title\">\ud83d\udc99 Olas de Vida \u00b7 Panel M\u00e9dico <span class=\"badge\">DEMO \u00b7 DATOS 100% FICTICIOS<\/span><\/div>\r\n        <div class=\"ov-sub\">Seguimiento emocional\u2013f\u00edsico\u2013ps\u00edquico entre ciclos \u00b7 para ver a la <b>persona<\/b> (no solo el tumor)<\/div>\r\n        <div class=\"chips\">\r\n          <span class=\"chip\"><span class=\"dot crit\"><\/span>CR\u00cdTICO<\/span>\r\n          <span class=\"chip\"><span class=\"dot high\"><\/span>ALTO RIESGO<\/span>\r\n          <span class=\"chip\"><span class=\"dot mod\"><\/span>MODERADO<\/span>\r\n          <span class=\"chip\"><span class=\"dot ok\"><\/span>ESTABLE<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ov-right\">\r\n        <div class=\"ov-doc\">Dr. Fern\u00e1ndez <small>Unidad de Oncolog\u00eda \u00b7 Olas de Vida<\/small><\/div>\r\n        <div class=\"ov-now\" id=\"ovNow\">\u00daltima sesi\u00f3n: \u2014<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"ov-inner\">\r\n      <div class=\"ov-kpis\">\r\n        <div class=\"ov-kpi glow-ok\">\r\n          <div class=\"lbl\">Pacientes activos<\/div>\r\n          <div class=\"val\" id=\"kpiTotal\">\u2014<\/div>\r\n          <div class=\"tag\">Cartera asignada (demo)<\/div>\r\n        <\/div>\r\n        <div class=\"ov-kpi glow-crit\">\r\n          <div class=\"lbl\">Alertas cr\u00edticas<\/div>\r\n          <div class=\"val\" id=\"kpiCrit\">\u2014<\/div>\r\n          <div class=\"tag\">Banderas rojas hoy<\/div>\r\n        <\/div>\r\n        <div class=\"ov-kpi glow-high\">\r\n          <div class=\"lbl\">Alta supervisi\u00f3n<\/div>\r\n          <div class=\"val\" id=\"kpiHigh\">\u2014<\/div>\r\n          <div class=\"tag\">Requiere seguimiento cercano<\/div>\r\n        <\/div>\r\n        <div class=\"ov-kpi glow-mod\">\r\n          <div class=\"lbl\">Adherencia reportes<\/div>\r\n          <div class=\"val\" id=\"kpiAdh\">\u2014<\/div>\r\n          <div class=\"tag\">\u00daltimos 14 d\u00edas (sim.)<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- \u2705 LISTADO (NO TOCAR DISE\u00d1O\/COMPORTAMIENTO) -->\r\n      <div class=\"ov-panel\">\r\n        <div class=\"ov-panel-top\">\r\n          <div>\r\n            <h3>\ud83d\udce5 Bandeja de pacientes<\/h3>\r\n            <p>Haz clic en el <b>nombre<\/b> \u2192 popup con <b>vista m\u00e9dico<\/b> + <b>ficha<\/b> + <b>nuevo formulario<\/b> (guarda hist\u00f3rico).<\/p>\r\n          <\/div>\r\n\r\n          <div class=\"ov-actions\">\r\n            <input id=\"ovSearch\" class=\"ov-input\" placeholder=\"Buscar por nombre, ID o diagn\u00f3stico\u2026\" \/>\r\n            <select id=\"ovFilter\" class=\"ov-select\" aria-label=\"Filtrar por estado\">\r\n              <option value=\"ALL\">Todos<\/option>\r\n              <option value=\"CRITICO\">Cr\u00edtico<\/option>\r\n              <option value=\"ALTO\">Alto riesgo<\/option>\r\n              <option value=\"MODERADO\">Moderado<\/option>\r\n              <option value=\"ESTABLE\">Estable<\/option>\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"ov-table-wrap\">\r\n          <table class=\"ov-table\">\r\n            <thead>\r\n              <tr>\r\n                <th>Paciente<\/th>\r\n                <th>ID<\/th>\r\n                <th>Proceso \/ Diagn\u00f3stico<\/th>\r\n                <th class=\"c\">Dolor<\/th>\r\n                <th class=\"c\">\u00c1nimo<\/th>\r\n                <th>Estado<\/th>\r\n                <th>\u00daltimo formulario<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"tablaBody\">\r\n              <tr><td colspan=\"7\" class=\"muted\">Cargando pacientes\u2026<\/td><\/tr>\r\n            <\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n\r\n        <div class=\"ov-foot\">\r\n          <div class=\"ov-foot-left\">\r\n            <span class=\"pill\">\ud83d\udca1 \u201cVer en 10s qui\u00e9n est\u00e1 peor y por qu\u00e9\u201d<\/span>\r\n            <span class=\"pill\">\ud83d\udcc4 Informes: 1 p\u00e1gina imprimible desde el popup<\/span>\r\n            <span class=\"pill soft\">\ud83e\udef6 Informe centrado en la persona (no cl\u00ednico)<\/span>\r\n          <\/div>\r\n          <div class=\"ov-foot-right muted\">*Simulaci\u00f3n demo para UX \u00b7 no es historia cl\u00ednica<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"ov-bottom\">\r\n        <!-- Informes -->\r\n        <div class=\"ov-box\">\r\n          <h4>\ud83d\udcc4 Informes (1 p\u00e1gina)<\/h4>\r\n          <div class=\"sub\">Se generan desde la super ficha. Para \u201cver a la persona\u201d: emocional + f\u00edsico + ps\u00edquico.<\/div>\r\n          <div class=\"btnstack\">\r\n            <button class=\"btn primary\" id=\"btnResumen15\" disabled>\ud83d\uddd3\ufe0f Resumen 15 d\u00edas<\/button>\r\n            <button class=\"btn primary\" id=\"btnEmocional\" disabled>\ud83e\udde0 Resumen emocional<\/button>\r\n            <button class=\"btn ghost\" id=\"btnAlertas\" disabled>\ud83d\udea8 Lista de alertas<\/button>\r\n            <button class=\"btn ghost\" id=\"btnPrint\">\ud83d\udda8\ufe0f Imprimir panel<\/button>\r\n            <div class=\"hint\">Selecciona un paciente (clic en nombre) para activar informes.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Lectura r\u00e1pida -->\r\n        <div class=\"ov-box\">\r\n          <h4>\ud83e\udded Lectura r\u00e1pida<\/h4>\r\n          <div class=\"sub\">Al abrir la super ficha, aqu\u00ed queda un \u201cresumen en 1 mirada\u201d.<\/div>\r\n          <div class=\"mini\">\r\n            <div class=\"miniRow\"><span>Seleccionado<\/span><b id=\"selName\">\u2014<\/b><\/div>\r\n            <div class=\"miniRow\"><span>Estado<\/span><b id=\"selState\">\u2014<\/b><\/div>\r\n            <div class=\"miniRow\"><span>Raz\u00f3n corta<\/span><b id=\"selReason\">\u2014<\/b><\/div>\r\n            <div class=\"miniRow\"><span>Tendencia<\/span><b id=\"selTrend\">\u2014<\/b><\/div>\r\n            <div class=\"miniRow\"><span>Qu\u00e9 vigilar hoy<\/span><b id=\"selWatch\">\u2014<\/b><\/div>\r\n          <\/div>\r\n          <div class=\"note\">*Triage humano con contexto (no \u201canal\u00edtica\u201d).<\/div>\r\n        <\/div>\r\n\r\n        <!-- \u2705 Julian (RECUPERADO) -->\r\n        <div class=\"ov-box\">\r\n          <h4>\ud83e\udd16 Asistente cl\u00ednico<\/h4>\r\n          <div class=\"sub\">Julian AI (demo) \u00b7 puedes quitarlo sin romper nada.<\/div>\r\n          <div class=\"julianCard\">\r\n            <div class=\"julianHead\">\r\n              <div class=\"julianAvatar\" aria-hidden=\"true\"><\/div>\r\n              <div class=\"julianMeta\">\r\n                <div class=\"julianName\">Julian <span class=\"julianPill\">AI<\/span><\/div>\r\n                <div class=\"julianRole\">Asistente Oncol\u00f3gico<\/div>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"iframeWrap\">\r\n              <iframe\r\n                src=\"https:\/\/eu.jotform.com\/agent\/019ad9bc86b471129ecafec7a28f03a41b91\"\r\n                title=\"Julian AI\"\r\n                loading=\"lazy\"\r\n                sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-modals\"\r\n                allow=\"microphone\"><\/iframe>\r\n            <\/div>\r\n            <div class=\"note\">*Fase 2: agente por reglas + explicaci\u00f3n de prioridad.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- \u2705 MODAL OLAS (FICHA MEJORADA) -->\r\n  <div class=\"modal\" id=\"modal\" aria-hidden=\"true\" role=\"dialog\" aria-label=\"Olas del paciente\">\r\n    <div class=\"backdrop\" data-close=\"1\"><\/div>\r\n    <div class=\"dialog\" role=\"document\">\r\n      <div class=\"dHead\">\r\n        <div>\r\n          <div class=\"dTitle\" id=\"mTitle\">Paciente \u00b7 ID<\/div>\r\n          <div class=\"dSub\" id=\"mDx\">\u2014<\/div>\r\n          <div class=\"dMeta\" id=\"mMeta\"><\/div>\r\n        <\/div>\r\n        <button class=\"close\" type=\"button\" data-close=\"1\">\u2715<\/button>\r\n      <\/div>\r\n\r\n      <!-- NUEVO LAYOUT: sidebar tabs + body -->\r\n      <div class=\"dBody dBody2\">\r\n        <div class=\"tabRail\">\r\n          <button class=\"tBtn on\" type=\"button\" data-tab=\"tabResumen\">\r\n            <span class=\"tI\">\u26a1<\/span><span>Vista m\u00e9dico<\/span><small>decidir en 10s<\/small>\r\n          <\/button>\r\n          <button class=\"tBtn\" type=\"button\" data-tab=\"tabFicha\">\r\n            <span class=\"tI\">\ud83e\uddfe<\/span><span>Ficha<\/span><small>15 d\u00edas + funci\u00f3n<\/small>\r\n          <\/button>\r\n          <button class=\"tBtn\" type=\"button\" data-tab=\"tabAcciones\">\r\n            <span class=\"tI\">\ud83e\uddca<\/span><span>Acciones<\/span><small>informes \/ links<\/small>\r\n          <\/button>\r\n        <\/div>\r\n\r\n        <div class=\"tabMain\">\r\n          <div id=\"mBody\" class=\"tabContent\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  :root{\r\n    --bg:#0b1220;\r\n    --panel:#0f172a;\r\n    --card:#111c33;\r\n    --border:rgba(148,163,184,.22);\r\n    --muted:#93a4bd;\r\n    --text:#e7eefc;\r\n\r\n    --crit:#ff2e55; --crit2:#ff6b6b;\r\n    --high:#ffb020; --high2:#ffd166;\r\n    --mod:#4ea8ff;  --mod2:#7cc7ff;\r\n    --ok:#2ee59d;   --ok2:#7cf0c8;\r\n  }\r\n\r\n  #ovApp *{box-sizing:border-box}\r\n  #ovApp{\r\n    font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\r\n    color:var(--text);\r\n    padding:16px;\r\n  }\r\n  .ov-wrapper{\r\n    max-width:1200px;margin:0 auto 24px;\r\n    background:linear-gradient(135deg, rgba(15,23,42,.95), rgba(10,15,30,.92));\r\n    border:1px solid var(--border);\r\n    border-radius:18px;\r\n    overflow:hidden;\r\n    box-shadow:0 26px 70px rgba(0,0,0,.55);\r\n  }\r\n\r\n  .ov-header{\r\n    padding:18px 20px 16px;\r\n    display:flex;gap:14px;justify-content:space-between;flex-wrap:wrap;\r\n    background:\r\n      radial-gradient(circle at 10% 0%, rgba(34,211,238,.28), transparent 55%),\r\n      radial-gradient(circle at 80% 20%, rgba(124,58,237,.35), transparent 55%),\r\n      linear-gradient(135deg, rgba(37,99,235,.65), rgba(124,58,237,.55));\r\n    border-bottom:1px solid rgba(255,255,255,.12);\r\n  }\r\n  .ov-title{\r\n    font-family:Poppins,Inter,sans-serif;\r\n    font-size:20px;font-weight:700;\r\n    display:flex;align-items:center;gap:10px;\r\n  }\r\n  .badge{\r\n    font-size:10px;letter-spacing:.08em;text-transform:uppercase;\r\n    padding:6px 10px;border-radius:999px;\r\n    border:1px solid rgba(255,255,255,.22);\r\n    background:rgba(0,0,0,.18);\r\n  }\r\n  .ov-sub{font-size:13px;color:rgba(255,255,255,.92);margin-top:4px}\r\n\r\n  .ov-right{\r\n    min-width:260px;text-align:right;\r\n    background:rgba(0,0,0,.12);\r\n    border:1px solid rgba(255,255,255,.18);\r\n    padding:10px 12px;border-radius:14px;\r\n    backdrop-filter: blur(6px);\r\n  }\r\n  .ov-doc{font-family:Poppins,Inter,sans-serif;font-size:14px;font-weight:700}\r\n  .ov-doc small{display:block;font-size:12px;font-weight:500;opacity:.95;margin-top:2px}\r\n  .ov-now{font-size:11px;color:rgba(255,255,255,.85);margin-top:8px}\r\n\r\n  .chips{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}\r\n  .chip{\r\n    display:inline-flex;align-items:center;gap:8px;\r\n    padding:7px 10px;border-radius:999px;\r\n    border:1px solid rgba(255,255,255,.14);\r\n    background:rgba(0,0,0,.22);\r\n    font-size:11px;color:rgba(255,255,255,.92);\r\n    font-weight:900;letter-spacing:.04em;\r\n    user-select:none;\r\n  }\r\n  .dot{width:8px;height:8px;border-radius:999px;background:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.06)}\r\n  .dot.crit{background:var(--crit)} .dot.high{background:var(--high)} .dot.mod{background:var(--mod)} .dot.ok{background:var(--ok)}\r\n\r\n  .ov-inner{padding:16px}\r\n\r\n  .ov-kpis{\r\n    display:grid;\r\n    grid-template-columns:repeat(auto-fit,minmax(190px,1fr));\r\n    gap:12px;margin-bottom:14px;\r\n  }\r\n  .ov-kpi{\r\n    background:linear-gradient(135deg, rgba(17,28,51,.92), rgba(12,20,40,.92));\r\n    border:1px solid var(--border);\r\n    border-radius:16px;\r\n    padding:14px 14px;\r\n    position:relative;overflow:hidden;\r\n  }\r\n  .ov-kpi:before{\r\n    content:\"\";position:absolute;inset:-2px;\r\n    background:\r\n      radial-gradient(520px 160px at 10% 0%, rgba(34,211,238,.20), transparent 60%),\r\n      radial-gradient(420px 160px at 100% 20%, rgba(124,58,237,.22), transparent 60%);\r\n    pointer-events:none;\r\n  }\r\n  .ov-kpi>*{position:relative}\r\n  .ov-kpi .lbl{\r\n    font-size:11px;letter-spacing:.10em;text-transform:uppercase;\r\n    color:var(--muted);font-weight:900;\r\n  }\r\n  .ov-kpi .val{\r\n    font-family:Poppins,Inter,sans-serif;\r\n    font-size:30px;font-weight:900;margin-top:8px;line-height:1;\r\n  }\r\n  .ov-kpi .tag{font-size:12px;margin-top:8px;color:rgba(231,238,252,.92)}\r\n  .glow-crit .val{color:var(--crit2);text-shadow:0 0 22px rgba(255,46,85,.35)}\r\n  .glow-high .val{color:var(--high2);text-shadow:0 0 22px rgba(255,176,32,.28)}\r\n  .glow-mod .val{color:var(--mod2);text-shadow:0 0 22px rgba(78,168,255,.25)}\r\n  .glow-ok .val{color:var(--ok2);text-shadow:0 0 22px rgba(46,229,157,.22)}\r\n\r\n  .ov-panel{\r\n    background:linear-gradient(135deg, rgba(17,28,51,.92), rgba(12,20,40,.92));\r\n    border:1px solid var(--border);\r\n    border-radius:16px;\r\n    padding:12px;margin-bottom:14px;\r\n  }\r\n  .ov-panel-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}\r\n  .ov-panel h3{\r\n    margin:0 0 4px 0;\r\n    font-family:Poppins,Inter,sans-serif;\r\n    font-size:15px;font-weight:900;\r\n  }\r\n  .ov-panel p{margin:0 0 10px 0;font-size:12px;color:var(--muted)}\r\n\r\n  .ov-actions{display:flex;gap:10px;align-items:center}\r\n  .ov-input{\r\n    height:36px;padding:0 12px;border-radius:12px;\r\n    border:1px solid rgba(148,163,184,.28);\r\n    min-width:260px;outline:none;\r\n    background:rgba(0,0,0,.18);color:var(--text)\r\n  }\r\n  .ov-input::placeholder{color:rgba(231,238,252,.55)}\r\n  .ov-select{\r\n    height:36px;padding:0 10px;border-radius:12px;\r\n    border:1px solid rgba(148,163,184,.28);\r\n    outline:none;background:rgba(0,0,0,.18);color:var(--text)\r\n  }\r\n  @media (max-width: 980px){ .ov-input{min-width:180px;} }\r\n\r\n  .ov-table-wrap{\r\n    border:1px solid rgba(148,163,184,.22);\r\n    border-radius:14px;\r\n    overflow:hidden;\r\n    max-height:360px;\r\n    overflow:auto;\r\n    background:rgba(8,12,24,.35);\r\n  }\r\n  .ov-table{width:100%;border-collapse:collapse;font-size:12px}\r\n  .ov-table thead th{\r\n    position:sticky;top:0;z-index:2;\r\n    text-align:left;padding:10px;\r\n    background:rgba(2,6,23,.85);\r\n    border-bottom:1px solid rgba(148,163,184,.22);\r\n    color:rgba(231,238,252,.85);\r\n    font-weight:900;font-size:11px;\r\n    letter-spacing:.08em;text-transform:uppercase;\r\n  }\r\n  .ov-table tbody td{\r\n    padding:10px;border-bottom:1px solid rgba(148,163,184,.14);\r\n    color:rgba(231,238,252,.92);\r\n    vertical-align:middle;\r\n  }\r\n  .ov-table tbody tr:hover td{background:rgba(78,168,255,.06)}\r\n  .c{text-align:center}\r\n  .muted{color:rgba(231,238,252,.75);text-align:center}\r\n\r\n  .ov-name{\r\n    background:none;border:none;padding:0;margin:0;\r\n    color:#e7eefc;text-decoration:underline;\r\n    cursor:pointer;font:inherit;font-weight:900;\r\n    text-align:left;\r\n  }\r\n  .ov-name:hover{color:#bfe1ff}\r\n\r\n  .rowbar{position:relative}\r\n  .rowbar:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:4px;background:transparent}\r\n  tr.state-CRITICO .rowbar:before{background:linear-gradient(180deg,var(--crit),rgba(255,46,85,.15))}\r\n  tr.state-ALTO .rowbar:before{background:linear-gradient(180deg,var(--high),rgba(255,176,32,.15))}\r\n  tr.state-MODERADO .rowbar:before{background:linear-gradient(180deg,var(--mod),rgba(78,168,255,.15))}\r\n  tr.state-ESTABLE .rowbar:before{background:linear-gradient(180deg,var(--ok),rgba(46,229,157,.15))}\r\n\r\n  .state{font-weight:900;letter-spacing:.05em}\r\n  .state.CRITICO{color:var(--crit2);text-shadow:0 0 18px rgba(255,46,85,.25)}\r\n  .state.ALTO{color:var(--high2);text-shadow:0 0 18px rgba(255,176,32,.18)}\r\n  .state.MODERADO{color:var(--mod2);text-shadow:0 0 18px rgba(78,168,255,.18)}\r\n  .state.ESTABLE{color:var(--ok2);text-shadow:0 0 18px rgba(46,229,157,.14)}\r\n  .reason{opacity:.88;font-weight:800;margin-left:6px}\r\n  .trend{opacity:.9;font-weight:900;margin-left:8px}\r\n  .trendUp{color:var(--crit2)} .trendFlat{color:rgba(231,238,252,.88)} .trendDown{color:var(--ok2)}\r\n\r\n  .ov-foot{\r\n    margin-top:10px;\r\n    display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;\r\n    align-items:center;\r\n  }\r\n  .pill{\r\n    display:inline-flex;align-items:center;gap:8px;\r\n    padding:7px 10px;border-radius:999px;\r\n    border:1px solid rgba(148,163,184,.18);\r\n    background:rgba(0,0,0,.14);\r\n    font-size:11px;font-weight:900;color:rgba(231,238,252,.92);\r\n  }\r\n  .pill.soft{\r\n    border:1px solid rgba(46,229,157,.22);\r\n    background:rgba(46,229,157,.08);\r\n    color:rgba(231,238,252,.95);\r\n  }\r\n\r\n  .ov-bottom{\r\n    display:grid;\r\n    grid-template-columns:repeat(auto-fit,minmax(300px,1fr));\r\n    gap:12px;\r\n  }\r\n  .ov-box{\r\n    background:linear-gradient(135deg, rgba(17,28,51,.92), rgba(12,20,40,.92));\r\n    border:1px solid var(--border);\r\n    border-radius:16px;\r\n    padding:12px;\r\n    min-height:360px;\r\n    display:flex;flex-direction:column;\r\n  }\r\n  .ov-box h4{\r\n    margin:0 0 4px 0;\r\n    font-family:Poppins,Inter,sans-serif;\r\n    font-size:14px;font-weight:900;\r\n  }\r\n  .ov-box .sub{margin:0 0 10px 0;font-size:12px;color:var(--muted);min-height:34px}\r\n\r\n  .btn{\r\n    display:inline-flex;align-items:center;justify-content:center;gap:8px;\r\n    border-radius:14px;padding:11px 12px;\r\n    font-size:12px;font-weight:900;\r\n    letter-spacing:.06em;text-transform:uppercase;\r\n    cursor:pointer;border:1px solid rgba(255,255,255,.14);\r\n    color:#fff;text-decoration:none;\r\n    background:rgba(0,0,0,.22);\r\n    transition:transform .12s ease, filter .12s ease, box-shadow .12s ease;\r\n    user-select:none;\r\n  }\r\n  .btn:hover{transform:translateY(-1px);filter:brightness(1.06);box-shadow:0 10px 22px rgba(0,0,0,.35)}\r\n  .btn.primary{border:none;background:linear-gradient(135deg, rgba(37,99,235,.95), rgba(124,58,237,.95))}\r\n  .btn.ghost{background:rgba(0,0,0,.08);border:1px solid rgba(148,163,184,.22);color:#e7eefc}\r\n  .btn:disabled{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}\r\n  .btnstack{margin-top:auto;display:flex;flex-direction:column;gap:10px}\r\n  .hint,.note{font-size:11px;color:var(--muted);margin-top:10px}\r\n\r\n  .mini{\r\n    flex:1;border-radius:16px;border:1px solid rgba(148,163,184,.22);\r\n    background:rgba(0,0,0,.18);padding:12px;\r\n    display:flex;flex-direction:column;gap:10px\r\n  }\r\n  .miniRow{display:flex;justify-content:space-between;gap:10px;align-items:center;color:rgba(231,238,252,.80)}\r\n  .miniRow b{color:rgba(231,238,252,.98);text-align:right}\r\n\r\n  \/* Julian header *\/\r\n  .julianCard{display:flex;flex-direction:column;gap:10px;flex:1}\r\n  .julianHead{\r\n    display:flex;gap:10px;align-items:center;\r\n    padding:10px;border-radius:16px;\r\n    border:1px solid rgba(148,163,184,.18);\r\n    background:rgba(0,0,0,.14);\r\n  }\r\n  .julianAvatar{\r\n    width:40px;height:40px;border-radius:14px;\r\n    background:\r\n      radial-gradient(circle at 30% 20%, rgba(124,240,200,.55), transparent 60%),\r\n      radial-gradient(circle at 70% 80%, rgba(124,58,237,.55), transparent 60%),\r\n      rgba(255,255,255,.06);\r\n    border:1px solid rgba(255,255,255,.14);\r\n    box-shadow:0 12px 30px rgba(0,0,0,.25);\r\n  }\r\n  .julianName{font-weight:900}\r\n  .julianRole{font-size:12px;color:rgba(231,238,252,.75);font-weight:700;margin-top:2px}\r\n  .julianPill{\r\n    margin-left:8px;font-size:10px;letter-spacing:.10em;text-transform:uppercase;\r\n    padding:5px 8px;border-radius:999px;\r\n    border:1px solid rgba(255,255,255,.18);\r\n    background:rgba(0,0,0,.18);\r\n  }\r\n\r\n  .iframeWrap{\r\n    flex:1;border-radius:16px;overflow:hidden;\r\n    border:1px solid rgba(148,163,184,.22);\r\n    background:#050914;position:relative;min-height:240px;\r\n  }\r\n  .iframeWrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0}\r\n\r\n  \/* MODAL *\/\r\n  .modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;z-index:99999;padding:16px}\r\n  .modal.on{display:flex}\r\n  .backdrop{position:absolute;inset:0;background:rgba(0,0,0,.72);backdrop-filter:blur(6px)}\r\n  .dialog{\r\n    position:relative;width:100%;max-width:1120px;max-height:90vh;overflow:hidden;\r\n    border-radius:18px;border:1px solid rgba(255,255,255,.16);\r\n    background:linear-gradient(135deg, rgba(17,28,51,.98), rgba(9,14,30,.98));\r\n    box-shadow:0 30px 90px rgba(0,0,0,.7);\r\n  }\r\n  .dHead{\r\n    padding:14px;border-bottom:1px solid rgba(148,163,184,.18);\r\n    display:flex;align-items:flex-start;justify-content:space-between;gap:10px;\r\n    background:\r\n      radial-gradient(600px 180px at 10% 0%, rgba(34,211,238,.18), transparent 60%),\r\n      radial-gradient(520px 180px at 90% 10%, rgba(124,58,237,.18), transparent 60%),\r\n      rgba(2,6,23,.38);\r\n  }\r\n  .dTitle{font-family:Poppins,Inter,sans-serif;font-weight:900;font-size:16px;line-height:1.2;margin:0}\r\n  .dSub{margin-top:6px;font-size:12px;color:rgba(231,238,252,.80)}\r\n  .dMeta{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px}\r\n  .close{\r\n    background:rgba(0,0,0,.20);\r\n    border:1px solid rgba(255,255,255,.16);\r\n    color:#fff;width:38px;height:38px;border-radius:12px;\r\n    cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;\r\n  }\r\n\r\n  \/* NUEVO BODY DEL MODAL *\/\r\n  .dBody2{padding:0;display:flex;gap:0;max-height:calc(90vh - 72px);overflow:hidden}\r\n  .tabRail{\r\n    width:260px;flex:0 0 260px;\r\n    border-right:1px solid rgba(148,163,184,.18);\r\n    background:rgba(2,6,23,.28);\r\n    padding:12px;\r\n    display:flex;flex-direction:column;gap:10px;\r\n  }\r\n  .tBtn{\r\n    width:100%;\r\n    text-align:left;\r\n    border-radius:16px;\r\n    border:1px solid rgba(148,163,184,.20);\r\n    background:rgba(0,0,0,.14);\r\n    color:rgba(231,238,252,.92);\r\n    padding:12px 12px;\r\n    cursor:pointer;\r\n    transition:transform .12s ease, filter .12s ease, box-shadow .12s ease;\r\n  }\r\n  .tBtn:hover{transform:translateY(-1px);filter:brightness(1.06);box-shadow:0 10px 22px rgba(0,0,0,.28)}\r\n  .tBtn.on{\r\n    border:none;\r\n    background:linear-gradient(135deg, rgba(37,99,235,.95), rgba(124,58,237,.95));\r\n  }\r\n  .tBtn span{display:inline-flex;gap:10px;align-items:center;font-weight:900}\r\n  .tBtn small{display:block;margin-top:4px;color:rgba(231,238,252,.78);font-weight:700}\r\n  .tI{width:26px;height:26px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.12)}\r\n\r\n  .tabMain{flex:1;overflow:auto}\r\n  .tabContent{padding:14px}\r\n\r\n  @media (max-width: 980px){\r\n    .dBody2{flex-direction:column}\r\n    .tabRail{width:100%;flex:0 0 auto;flex-direction:row;overflow:auto}\r\n    .tBtn{min-width:240px}\r\n  }\r\n\r\n  \/* ====== POPUP: NUEVO LOOK \"AGRESIVO\" PARA M\u00c9DICO ====== *\/\r\n  .heroTriage{\r\n    border-radius:18px;\r\n    border:1px solid rgba(148,163,184,.22);\r\n    background:\r\n      radial-gradient(900px 260px at 15% 0%, rgba(34,211,238,.18), transparent 60%),\r\n      radial-gradient(700px 260px at 90% 20%, rgba(124,58,237,.20), transparent 60%),\r\n      rgba(0,0,0,.16);\r\n    padding:14px;\r\n  }\r\n  .heroTop{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;flex-wrap:wrap}\r\n  .heroTitle{font-family:Poppins,Inter,sans-serif;font-weight:900;font-size:15px}\r\n  .heroSub{margin-top:6px;font-size:12px;color:rgba(231,238,252,.80);font-weight:700;line-height:1.45}\r\n  .heroState{\r\n    display:inline-flex;align-items:center;gap:10px;\r\n    padding:10px 12px;border-radius:16px;\r\n    border:1px solid rgba(255,255,255,.14);\r\n    background:rgba(0,0,0,.16);\r\n    font-weight:900;\r\n  }\r\n  .heroDot{width:10px;height:10px;border-radius:999px;box-shadow:0 0 0 5px rgba(255,255,255,.06)}\r\n  .heroDot.crit{background:var(--crit)}\r\n  .heroDot.high{background:var(--high)}\r\n  .heroDot.mod{background:var(--mod)}\r\n  .heroDot.ok{background:var(--ok)}\r\n  .heroStateText{font-size:12px;letter-spacing:.08em;text-transform:uppercase}\r\n  .heroReason{opacity:.92}\r\n\r\n  .hotline{\r\n    margin-top:10px;\r\n    display:grid;\r\n    grid-template-columns: 1.2fr .8fr;\r\n    gap:10px;\r\n  }\r\n  @media (max-width: 920px){ .hotline{grid-template-columns:1fr;} }\r\n\r\n  .quoteCard{\r\n    border-radius:18px;border:1px solid rgba(148,163,184,.22);\r\n    background:rgba(0,0,0,.16);\r\n    padding:14px;\r\n  }\r\n  .quote{font-weight:900;line-height:1.35;font-size:15px}\r\n  .personaLine{margin-top:10px;font-size:12px;color:rgba(231,238,252,.80);font-weight:700;line-height:1.45}\r\n\r\n  .alerts{margin-top:10px;display:flex;gap:10px;flex-wrap:wrap}\r\n  .alert{\r\n    font-size:12px;font-weight:900;padding:10px 12px;border-radius:14px;\r\n    border:1px solid rgba(148,163,184,.22);background:rgba(0,0,0,.16)\r\n  }\r\n  .alert b{color:rgba(231,238,252,.95)}\r\n\r\n  \/* Tarjetas m\u00e9tricas (m\u00e1s visual) *\/\r\n  .metricGrid{\r\n    margin-top:12px;\r\n    display:grid;\r\n    grid-template-columns:repeat(5,minmax(0,1fr));\r\n    gap:10px;\r\n  }\r\n  @media (max-width: 920px){ .metricGrid{grid-template-columns:repeat(2,minmax(0,1fr));} }\r\n\r\n  .mCard{\r\n    border-radius:18px;\r\n    border:1px solid rgba(148,163,184,.22);\r\n    background:rgba(2,6,23,.20);\r\n    padding:12px;\r\n    position:relative;\r\n    overflow:hidden;\r\n  }\r\n  .mCard:before{\r\n    content:\"\";position:absolute;inset:-2px;opacity:.6;\r\n    background:\r\n      radial-gradient(240px 120px at 0% 0%, rgba(124,240,200,.10), transparent 60%),\r\n      radial-gradient(260px 120px at 100% 0%, rgba(124,58,237,.10), transparent 60%);\r\n    pointer-events:none;\r\n  }\r\n  .mCard>*{position:relative}\r\n  .mK{font-size:11px;letter-spacing:.10em;text-transform:uppercase;color:rgba(231,238,252,.72);font-weight:900}\r\n  .mV{margin-top:6px;font-family:Poppins,Inter,sans-serif;font-weight:900;font-size:20px}\r\n  .mMini{margin-top:6px;font-size:12px;color:rgba(231,238,252,.82);font-weight:700;line-height:1.35}\r\n  .mMeter{margin-top:10px;height:10px;border-radius:999px;background:rgba(148,163,184,.18);overflow:hidden;border:1px solid rgba(148,163,184,.14)}\r\n  .mBar{height:100%;width:0%;border-radius:999px;background:linear-gradient(90deg, rgba(46,229,157,.95), rgba(124,240,200,.95))}\r\n  .sev-crit .mBar{background:linear-gradient(90deg, rgba(255,46,85,.96), rgba(255,107,107,.96))}\r\n  .sev-high .mBar{background:linear-gradient(90deg, rgba(255,176,32,.96), rgba(255,209,102,.96))}\r\n  .sev-mod  .mBar{background:linear-gradient(90deg, rgba(78,168,255,.96), rgba(124,199,255,.96))}\r\n\r\n  \/* Funci\u00f3n *\/\r\n  .sect{\r\n    margin-top:12px;border:1px solid rgba(148,163,184,.22);\r\n    border-radius:18px;background:rgba(2,6,23,.18);padding:12px\r\n  }\r\n  .sectTitle{font-size:11px;letter-spacing:.10em;text-transform:uppercase;color:rgba(231,238,252,.72);font-weight:900;margin-bottom:10px}\r\n\r\n  .funcGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\r\n  @media (max-width: 920px){ .funcGrid{grid-template-columns:repeat(2,minmax(0,1fr));} }\r\n  .fCard{\r\n    border:1px solid rgba(148,163,184,.20);\r\n    border-radius:18px;\r\n    background:rgba(0,0,0,.14);\r\n    padding:12px\r\n  }\r\n  .fK{font-size:11px;color:rgba(231,238,252,.70);font-weight:900;letter-spacing:.10em;text-transform:uppercase}\r\n  .fV{margin-top:8px;font-size:20px;font-weight:900}\r\n\r\n  \/* \u2705 ACCIONES: TILES MODERNOS (los \"enlaces\") *\/\r\n  .tiles{\r\n    margin-top:12px;\r\n    display:grid;\r\n    grid-template-columns:repeat(3,minmax(0,1fr));\r\n    gap:10px;\r\n  }\r\n  @media (max-width: 920px){ .tiles{grid-template-columns:1fr;} }\r\n  .tile{\r\n    border-radius:18px;\r\n    border:1px solid rgba(148,163,184,.22);\r\n    background:\r\n      radial-gradient(520px 160px at 10% 0%, rgba(34,211,238,.12), transparent 60%),\r\n      radial-gradient(420px 160px at 100% 20%, rgba(124,58,237,.14), transparent 60%),\r\n      rgba(0,0,0,.14);\r\n    padding:14px;\r\n    cursor:pointer;\r\n    transition:transform .12s ease, filter .12s ease, box-shadow .12s ease;\r\n  }\r\n  .tile:hover{transform:translateY(-2px);filter:brightness(1.06);box-shadow:0 14px 30px rgba(0,0,0,.35)}\r\n  .tileTop{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}\r\n  .tileI{\r\n    width:40px;height:40px;border-radius:16px;\r\n    display:flex;align-items:center;justify-content:center;\r\n    background:rgba(255,255,255,.08);\r\n    border:1px solid rgba(255,255,255,.14);\r\n    font-size:18px;\r\n  }\r\n  .tileT{font-weight:900;font-size:14px}\r\n  .tileS{margin-top:6px;color:rgba(231,238,252,.78);font-weight:700;font-size:12px;line-height:1.35}\r\n  .tileTag{\r\n    display:inline-flex;align-items:center;gap:8px;\r\n    margin-top:10px;\r\n    padding:7px 10px;border-radius:999px;\r\n    border:1px solid rgba(148,163,184,.20);\r\n    background:rgba(0,0,0,.12);\r\n    font-size:11px;font-weight:900;color:rgba(231,238,252,.92);\r\n  }\r\n  .tile.primary{border:none;background:linear-gradient(135deg, rgba(37,99,235,.92), rgba(124,58,237,.92))}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  \"use strict\";\r\n\r\n  \/* =========================\r\n     12 PACIENTES FICTICIOS (DEMO)\r\n  ========================= *\/\r\n  var patients = [\r\n    { name:\"Samuel Rold\u00e1n Aguirre\", id:\"ODV110\", dx:\"P\u00e1ncreas \u00b7 FOLFIRINOX \u00b7 Ciclo 3\/12\",\r\n      lastLabel:\"Hoy \u00b7 09:50\",\r\n      statusHint:\"CRITICO\", reason:\"\ud83d\ude23 dolor\", trend:\"\u2192\",\r\n      headline:\"El dolor se me ha disparado y me deja sin energ\u00eda para nada.\",\r\n      vals:{dolor:8,fatiga:9,sueno:4,ansiedad:6,apetito:2},\r\n      func:{hogar:2, trabajo_social:1, reposo:10, ayuda_familiar:9},\r\n      meds:[\"Opioide de base + rescate\",\"Laxante preventivo\",\"Antiem\u00e9tico PRN\"],\r\n      voz:{hard:\"El dolor y quedarme sin fuerzas.\", force:\"Mi pareja y sentir que reaccionamos r\u00e1pido si empeoro.\"}\r\n    },\r\n    { name:\"Clara Rivas Beltr\u00e1n\", id:\"ODV111\", dx:\"Mama TN \u00b7 Neoadyuvancia \u00b7 Ciclo 1\/6\",\r\n      lastLabel:\"Hace 2h\",\r\n      statusHint:\"ALTO\", reason:\"\ud83e\udde0 ansiedad\", trend:\"\u2192\",\r\n      headline:\"Me da miedo no hacerlo bien y estar olvidando algo importante.\",\r\n      vals:{dolor:6,fatiga:7,sueno:4,ansiedad:7,apetito:6},\r\n      func:{hogar:7, trabajo_social:4, reposo:6, ayuda_familiar:3},\r\n      meds:[\"Ondansetr\u00f3n PRN\",\"Rutina de sue\u00f1o\"],\r\n      voz:{hard:\"La incertidumbre y anticipar el siguiente ciclo.\", force:\"Tener instrucciones claras y apoyo en casa.\"}\r\n    },\r\n    { name:\"Nuria Salas Montoro\", id:\"ODV105\", dx:\"Ovario \u00b7 Carbo\/Taxol \u00b7 Ciclo 3\/6\",\r\n      lastLabel:\"Hoy \u00b7 10:55\",\r\n      statusHint:\"ALTO\", reason:\"\ud83e\udde0 ansiedad\", trend:\"\u2192\",\r\n      headline:\"Los olores me dan arcadas y me da miedo perder peso.\",\r\n      vals:{dolor:3,fatiga:6,sueno:6,ansiedad:7,apetito:4},\r\n      func:{hogar:6, trabajo_social:3, reposo:6, ayuda_familiar:4},\r\n      meds:[\"Suplemento nutricional oral\",\"Ondansetr\u00f3n PRN\"],\r\n      voz:{hard:\"Las n\u00e1useas con olores y la sensaci\u00f3n de fragilidad.\", force:\"Comidas peque\u00f1as y m\u00fasica para distraer.\"}\r\n    },\r\n    { name:\"Raquel Esteban Llorente\", id:\"ODV107\", dx:\"Mama (HR+) \u00b7 AC-T \u00b7 Ciclo 4\/8\",\r\n      lastLabel:\"Hoy \u00b7 07:25\",\r\n      statusHint:\"ALTO\", reason:\"\ud83d\ude23 dolor\", trend:\"\u2192\",\r\n      headline:\"Tengo ratos de baj\u00f3n y me cuesta levantarme por la ma\u00f1ana.\",\r\n      vals:{dolor:7,fatiga:8,sueno:3,ansiedad:6,apetito:5},\r\n      func:{hogar:5, trabajo_social:2, reposo:8, ayuda_familiar:6},\r\n      meds:[\"Dexametasona seg\u00fan pauta\",\"Enjuagues (mucositis leve)\",\"Hidrataci\u00f3n\"],\r\n      voz:{hard:\"El cansancio y no dormir bien.\", force:\"Mi hermana y sentirme acompa\u00f1ada.\"}\r\n    },\r\n    { name:\"H\u00e9ctor Lozano Perales\", id:\"ODV108\", dx:\"Linfoma DLBCL \u00b7 R-CHOP \u00b7 Ciclo 2\/6\",\r\n      lastLabel:\"Ayer \u00b7 21:05\",\r\n      statusHint:\"ALTO\", reason:\"\ud83e\udde0 ansiedad\", trend:\"\u2192\",\r\n      headline:\"Me preocupa cada s\u00edntoma y me cuesta estar tranquilo.\",\r\n      vals:{dolor:4,fatiga:7,sueno:4,ansiedad:8,apetito:5},\r\n      func:{hogar:5, trabajo_social:2, reposo:7, ayuda_familiar:6},\r\n      meds:[\"Profilaxis antiem\u00e9tica\",\"Ansiol\u00edtico PRN\",\"Enjuagues\"],\r\n      voz:{hard:\"La ansiedad anticipatoria.\", force:\"Hablar con el equipo y mi familia.\"}\r\n    },\r\n    { name:\"Patricia Vega R\u00edos\", id:\"ODV103\", dx:\"Colorrectal \u00b7 FOLFOX \u00b7 Ciclo 6\/12\",\r\n      lastLabel:\"Hoy \u00b7 08:05\",\r\n      statusHint:\"ALTO\", reason:\"\ud83e\udeab fatiga\", trend:\"\u2192\",\r\n      headline:\"No es dolor; es como si el cuerpo no respondiera y me apagara.\",\r\n      vals:{dolor:5,fatiga:8,sueno:5,ansiedad:5,apetito:4},\r\n      func:{hogar:5, trabajo_social:3, reposo:8, ayuda_familiar:5},\r\n      meds:[\"Metoclopramida PRN\",\"Hidrataci\u00f3n\",\"Pautas de descanso\"],\r\n      voz:{hard:\"La fatiga y no poder hacer lo m\u00ednimo.\", force:\"Rutina corta y que me organicen el d\u00eda.\"}\r\n    },\r\n    { name:\"In\u00e9s Cabrera Ure\u00f1a\", id:\"ODV109\", dx:\"Endometrio \u00b7 QT+RT \u00b7 Semana 4\",\r\n      lastLabel:\"Hoy \u00b7 11:30\",\r\n      statusHint:\"ALTO\", reason:\"\ud83d\udebd diarrea\", trend:\"\u2192\",\r\n      headline:\"La diarrea me limita y me da miedo salir de casa.\",\r\n      vals:{dolor:5,fatiga:7,sueno:5,ansiedad:6,apetito:5},\r\n      func:{hogar:6, trabajo_social:2, reposo:6, ayuda_familiar:4},\r\n      meds:[\"Loperamida seg\u00fan pauta\",\"Hidrataci\u00f3n + sales\"],\r\n      voz:{hard:\"No poder planificar el d\u00eda.\", force:\"Saber qu\u00e9 tomar y que esto es temporal.\"}\r\n    },\r\n    { name:\"Luc\u00eda Morales Serrano\", id:\"ODV101\", dx:\"Pulm\u00f3n NSCLC EGFR+ \u00b7 Osimertinib \u00b7 1\u00aa l\u00ednea\",\r\n      lastLabel:\"Hoy \u00b7 09:15\",\r\n      statusHint:\"MODERADO\", reason:\"\ud83d\ude34 sue\u00f1o\", trend:\"\u2193\",\r\n      headline:\"Voy mejor, pero por la noche me despierto y me quedo pensando.\",\r\n      vals:{dolor:2,fatiga:4,sueno:4,ansiedad:5,apetito:7},\r\n      func:{hogar:8, trabajo_social:7, reposo:4, ayuda_familiar:2},\r\n      meds:[\"Crema emoliente (rash leve)\",\"Higiene de sue\u00f1o\"],\r\n      voz:{hard:\"La cabeza no para por la noche.\", force:\"Caminar y rutina diaria.\"}\r\n    },\r\n    { name:\"Marta Ruiz Cifuentes\", id:\"ODV112\", dx:\"Mama HER2+ \u00b7 TCHP \u00b7 Ciclo 3\",\r\n      lastLabel:\"Hoy \u00b7 10:10\",\r\n      statusHint:\"MODERADO\", reason:\"\ud83e\udde0 ansiedad\", trend:\"\u2191\",\r\n      headline:\"Antes de dormir me pongo peor; me preocupa no aguantar el siguiente ciclo.\",\r\n      vals:{dolor:4,fatiga:7,sueno:4,ansiedad:8,apetito:6},\r\n      func:{hogar:6, trabajo_social:4, reposo:7, ayuda_familiar:5},\r\n      meds:[\"Ondansetr\u00f3n 8mg PRN\",\"Lorazepam 0,5mg nocte\",\"Omeprazol 20mg\"],\r\n      voz:{hard:\"Las noches y no desconectar.\", force:\"Mi hija y tener un plan claro.\"}\r\n    },\r\n    { name:\"Diego Cordero Mena\", id:\"ODV104\", dx:\"Pr\u00f3stata \u00b7 RT + Hormonoterapia\",\r\n      lastLabel:\"Ayer \u00b7 18:20\",\r\n      statusHint:\"ESTABLE\", reason:\"\u2192 controlado\", trend:\"\u2192\",\r\n      headline:\"Orino m\u00e1s a menudo, pero en general lo llevo bien.\",\r\n      vals:{dolor:3,fatiga:5,sueno:6,ansiedad:3,apetito:7},\r\n      func:{hogar:8, trabajo_social:7, reposo:4, ayuda_familiar:2},\r\n      meds:[\"Hidrataci\u00f3n\",\"Medidas higi\u00e9nico-diet\u00e9ticas\"],\r\n      voz:{hard:\"La incomodidad al final del d\u00eda.\", force:\"Caminar y rutina.\"}\r\n    },\r\n    { name:\"Tom\u00e1s Ferrer Alonso\", id:\"ODV102\", dx:\"Mieloma \u00b7 Dara-Rd \u00b7 Ciclo 4\",\r\n      lastLabel:\"Ayer \u00b7 08:40\",\r\n      statusHint:\"ESTABLE\", reason:\"\u2192 estable\", trend:\"\u2192\",\r\n      headline:\"Voy con cuidado, pero en general puedo hacer mi d\u00eda.\",\r\n      vals:{dolor:4,fatiga:5,sueno:6,ansiedad:4,apetito:7},\r\n      func:{hogar:8, trabajo_social:6, reposo:5, ayuda_familiar:3},\r\n      meds:[\"Vitamina D \/ calcio (seg\u00fan pauta)\",\"Hidrataci\u00f3n\"],\r\n      voz:{hard:\"Los d\u00edas de cansancio.\", force:\"Mis rutinas y sentir progreso.\"}\r\n    },\r\n    { name:\"Sergio Navarro Pe\u00f1as\", id:\"ODV106\", dx:\"Melanoma \u00b7 anti-PD1 \u00b7 Ciclo 5\",\r\n      lastLabel:\"Ayer \u00b7 12:10\",\r\n      statusHint:\"ESTABLE\", reason:\"\u2192 tolerancia\", trend:\"\u2192\",\r\n      headline:\"Solo algo de picor y cansancio leve, el resto bien.\",\r\n      vals:{dolor:2,fatiga:4,sueno:6,ansiedad:3,apetito:7},\r\n      func:{hogar:9, trabajo_social:8, reposo:3, ayuda_familiar:1},\r\n      meds:[\"Crema emoliente\",\"Antihistam\u00ednico PRN\"],\r\n      voz:{hard:\"El picor cuando se activa.\", force:\"Saber que lo tengo controlado.\"}\r\n    }\r\n  ];\r\n\r\n  \/* =========================\r\n     HELPERS\r\n  ========================= *\/\r\n  var selected=null;\r\n\r\n  function pad2(n){ return (n<10?\"0\":\"\")+n; }\r\n  function fmtNow(){\r\n    var d=new Date();\r\n    return pad2(d.getDate())+\"\/\"+pad2(d.getMonth()+1)+\"\/\"+d.getFullYear()+\" \u00b7 \"+pad2(d.getHours())+\":\"+pad2(d.getMinutes());\r\n  }\r\n  function clamp(n,min,max){ return Math.max(min, Math.min(max,n)); }\r\n  function avg(arr){ if(!arr||!arr.length) return 0; var s=0; for(var i=0;i<arr.length;i++) s+=arr[i]; return s\/arr.length; }\r\n  function avgSlice(arr, idx){\r\n    if(!arr||!arr.length) return 0;\r\n    var v=[]; for(var i=0;i<idx.length;i++){ var k=idx[i]; if(arr[k]!=null) v.push(arr[k]); }\r\n    return v.length ? avg(v) : 0;\r\n  }\r\n  function esc(s){\r\n    s = String(s==null?\"\":s);\r\n    return s.replace(\/[&<>\"']\/g,function(m){\r\n      return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]);\r\n    });\r\n  }\r\n\r\n  function calcEstado(p){\r\n    if(p.statusHint===\"CRITICO\") return \"CRITICO\";\r\n    if(p.statusHint===\"ALTO\") return \"ALTO\";\r\n    if(p.statusHint===\"MODERADO\") return \"MODERADO\";\r\n    return \"ESTABLE\";\r\n  }\r\n  function estadoLabel(e){ return e===\"CRITICO\"?\"CR\u00cdTICO\":(e===\"ALTO\"?\"ALTO RIESGO\":(e===\"MODERADO\"?\"MODERADO\":\"ESTABLE\")); }\r\n  function estadoClass(e){ return e===\"CRITICO\"?\"CRITICO\":(e===\"ALTO\"?\"ALTO\":(e===\"MODERADO\"?\"MODERADO\":\"ESTABLE\")); }\r\n  function dotClass(e){ return (e===\"CRITICO\"?\"crit\":(e===\"ALTO\"?\"high\":(e===\"MODERADO\"?\"mod\":\"ok\"))); }\r\n  function rank(e){ return (e===\"CRITICO\"?0:(e===\"ALTO\"?1:(e===\"MODERADO\"?2:3))); }\r\n  function trendClass(t){ return (t===\"\u2191\"?\"trendUp\":(t===\"\u2193\"?\"trendDown\":\"trendFlat\")); }\r\n  function lastFormLabel(p){ return p.lastLabel || \"\u2014\"; }\r\n\r\n  \/\/ \u00c1nimo (bienestar percibido): derivado de ansiedad + sue\u00f1o (no cl\u00ednico; lectura humana)\r\n  function calcAnimo(p){\r\n    var a = (p.vals && p.vals.ansiedad!=null) ? p.vals.ansiedad : 5;\r\n    var s = (p.vals && p.vals.sueno!=null) ? p.vals.sueno : 5;\r\n    var raw = 10 - (0.65*a + 0.35*(10-s));\r\n    return Math.round(clamp(raw,0,10));\r\n  }\r\n\r\n  function genSeries15(seed, base, driftFn){\r\n    var h=0; for(var i=0;i<seed.length;i++) h = (h*31 + seed.charCodeAt(i)) >>> 0;\r\n    function rnd(){ h = (1664525*h + 1013904223) >>> 0; return (h\/4294967296); }\r\n    var x=base, out=[];\r\n    for(var d=1; d<=15; d++){\r\n      var noise=(rnd()-0.5)*1.4;\r\n      x = x + driftFn(d) + noise*0.55;\r\n      x = clamp(x,0,10);\r\n      out.push(Math.round(x*10)\/10);\r\n    }\r\n    return out;\r\n  }\r\n  function buildOlas(p){\r\n    var v=p.vals||{}, seed=p.id;\r\n    var dolor   = genSeries15(seed+\"D\", v.dolor,   function(day){ return (day<=4?0.05:0); });\r\n    var fatiga  = genSeries15(seed+\"F\", v.fatiga,  function(day){ return (day<=6?0.10:-0.05); });\r\n    var sueno   = genSeries15(seed+\"S\", v.sueno,   function(day){ return (day<=5?-0.08:0.06); });\r\n    var ansiedad= genSeries15(seed+\"A\", v.ansiedad,function(day){ return (day<=3?0.08:-0.02); });\r\n    var apetito = genSeries15(seed+\"P\", v.apetito, function(day){ return (day<=5?-0.06:0.05); });\r\n    return {dolor:dolor,fatiga:fatiga,sueno:sueno,ansiedad:ansiedad,apetito:apetito};\r\n  }\r\n\r\n  function watchList(p){\r\n    var w=[];\r\n    if((p.reason||\"\").indexOf(\"\ud83d\udd25\")!==-1) w.push(\"\ud83d\udd25 Fiebre\/escalofr\u00edos: si reaparece \u2192 contacto\");\r\n    if((p.reason||\"\").indexOf(\"\ud83d\ude23\")!==-1 || (p.vals && p.vals.dolor>=7)) w.push(\"\ud83d\ude23 Dolor alto sostenido pese a rescate\");\r\n    if((p.reason||\"\").indexOf(\"\ud83d\udebd\")!==-1) w.push(\"\ud83d\udebd Diarrea + debilidad \/ no tolera l\u00edquidos\");\r\n    if((p.reason||\"\").indexOf(\"\ud83e\udde0\")!==-1 || (p.vals && p.vals.ansiedad>=8)) w.push(\"\ud83e\udde0 Ansiedad intensa: contacto breve reduce carga\");\r\n    if((p.reason||\"\").indexOf(\"\ud83d\ude34\")!==-1 || (p.vals && p.vals.sueno<=3)) w.push(\"\ud83d\ude34 Insomnio: empeora \u00e1nimo y tolerancia\");\r\n    if((p.reason||\"\").indexOf(\"\ud83c\udf7d\")!==-1 || (p.vals && p.vals.apetito<=3)) w.push(\"\ud83c\udf7d Ingesta baja: peque\u00f1as tomas + suplemento\");\r\n    if(!w.length) w.push(\"\u2192 Sin banderas rojas hoy: mantener plan y registrar cambios\");\r\n    return w.slice(0,3);\r\n  }\r\n\r\n  function personaLine(p){\r\n    var s=[];\r\n    if(p.vals && p.vals.sueno<=3) s.push(\"sue\u00f1o muy roto\");\r\n    if(p.vals && p.vals.ansiedad>=8) s.push(\"ansiedad alta\");\r\n    if(p.vals && p.vals.apetito<=3) s.push(\"ingesta muy baja\");\r\n    if(p.func && p.func.trabajo_social<=2) s.push(\"aislamiento\");\r\n    if(p.func && p.func.ayuda_familiar>=7) s.push(\"requiere apoyo\");\r\n    if(!s.length) return \"Se mantiene con rutina y ajustes peque\u00f1os.\";\r\n    return \"Hoy destaca: \" + s.join(\" \u00b7 \") + \".\";\r\n  }\r\n\r\n  function renderKPIs(){\r\n    var total=patients.length, crit=0, high=0;\r\n    for(var i=0;i<patients.length;i++){\r\n      var e=calcEstado(patients[i]);\r\n      if(e===\"CRITICO\") crit++;\r\n      if(e===\"ALTO\") high++;\r\n    }\r\n    document.getElementById(\"kpiTotal\").textContent=String(total);\r\n    document.getElementById(\"kpiCrit\").textContent=String(crit);\r\n    document.getElementById(\"kpiHigh\").textContent=String(high);\r\n    document.getElementById(\"kpiAdh\").textContent=String(84+Math.floor(Math.random()*13))+\"%\";\r\n  }\r\n\r\n  function renderTable(){\r\n    var tbody=document.getElementById(\"tablaBody\");\r\n    if(!tbody) return;\r\n\r\n    var q=(document.getElementById(\"ovSearch\").value||\"\").trim().toLowerCase();\r\n    var f=document.getElementById(\"ovFilter\").value;\r\n\r\n    var list=patients.slice();\r\n\r\n    if(f!==\"ALL\") list=list.filter(function(p){ return calcEstado(p)===f; });\r\n    if(q){\r\n      list=list.filter(function(p){\r\n        return (p.name||\"\").toLowerCase().indexOf(q)!==-1 ||\r\n               (p.id||\"\").toLowerCase().indexOf(q)!==-1 ||\r\n               (p.dx||\"\").toLowerCase().indexOf(q)!==-1;\r\n      });\r\n    }\r\n\r\n    list.sort(function(a,b){\r\n      var ea=calcEstado(a), eb=calcEstado(b);\r\n      if(rank(ea)!==rank(eb)) return rank(ea)-rank(eb);\r\n      var sa=((a.vals&&a.vals.dolor)||0)+((a.vals&&a.vals.ansiedad)||0);\r\n      var sb=((b.vals&&b.vals.dolor)||0)+((b.vals&&b.vals.ansiedad)||0);\r\n      return sb-sa;\r\n    });\r\n\r\n    renderKPIs();\r\n\r\n    if(!list.length){\r\n      tbody.innerHTML='<tr><td colspan=\"7\" class=\"muted\">Sin pacientes con estos filtros.<\/td><\/tr>';\r\n      return;\r\n    }\r\n\r\n    var rows=[];\r\n    for(var i=0;i<list.length;i++){\r\n      var p=list[i];\r\n      var e=calcEstado(p);\r\n      var animo=calcAnimo(p);\r\n      rows.push(\r\n        '<tr class=\"state-'+e+'\" data-pid=\"'+esc(p.id)+'\">'\r\n        + '<td class=\"rowbar\"><button class=\"ov-name\" type=\"button\" data-open=\"'+esc(p.id)+'\">'+esc(p.name)+'<\/button><\/td>'\r\n        + '<td>'+esc(p.id)+'<\/td>'\r\n        + '<td>'+esc(p.dx)+'<\/td>'\r\n        + '<td class=\"c\"><b>\ud83d\ude23 '+esc((p.vals&&p.vals.dolor!=null)?p.vals.dolor:\"\u2014\")+'\/10<\/b><\/td>'\r\n        + '<td class=\"c\"><b>\ud83d\ude42 '+esc(animo)+'\/10<\/b><\/td>'\r\n        + '<td>'\r\n          + '<span class=\"state '+estadoClass(e)+'\">'+esc(estadoLabel(e))+'<\/span>'\r\n          + '<span class=\"reason\">'+esc(\" \"+(p.reason||\"\"))+'<\/span>'\r\n          + '<span class=\"trend '+trendClass(p.trend||\"\u2192\")+'\">'+esc(\" \"+(p.trend||\"\u2192\"))+'<\/span>'\r\n        + '<\/td>'\r\n        + '<td>'+esc(lastFormLabel(p))+'<\/td>'\r\n        + '<\/tr>'\r\n      );\r\n    }\r\n    tbody.innerHTML = rows.join(\"\");\r\n  }\r\n\r\n  function findPatient(pid){\r\n    for(var i=0;i<patients.length;i++){ if(patients[i].id===pid) return patients[i]; }\r\n    return null;\r\n  }\r\n\r\n  function metricBadWhenLow(key){ return (key===\"sueno\" || key===\"apetito\"); }\r\n  function metricSeverity(key, val){\r\n    if(metricBadWhenLow(key)){\r\n      if(val<=2) return \"crit\";\r\n      if(val<=4) return \"high\";\r\n      if(val<=6) return \"mod\";\r\n      return \"ok\";\r\n    }\r\n    if(val>=8) return \"crit\";\r\n    if(val>=7) return \"high\";\r\n    if(val>=4) return \"mod\";\r\n    return \"ok\";\r\n  }\r\n  function sevClass(sev){\r\n    return sev===\"crit\" ? \"sev-crit\" : (sev===\"high\" ? \"sev-high\" : (sev===\"mod\" ? \"sev-mod\" : \"sev-ok\"));\r\n  }\r\n  function meterWidth(key, val){\r\n    if(metricBadWhenLow(key)) return clamp((10 - val) * 10, 0, 100);\r\n    return clamp(val * 10, 0, 100);\r\n  }\r\n\r\n  function olaHint(p, key){\r\n    var v=p.vals||{};\r\n    if(key===\"dolor\")   return (v.dolor>=7) ? \"Limita rutina; valorar ajuste de soporte\/llamada.\" : \"Molestia controlable; vigilar picos.\";\r\n    if(key===\"fatiga\")  return (v.fatiga>=7)? \"Condiciona el d\u00eda; priorizar descanso guiado.\" : \"Sube al final del d\u00eda; manejable.\";\r\n    if(key===\"sueno\")   return (v.sueno<=3) ? \"Sue\u00f1o fragmentado; impacta \u00e1nimo y tolerancia.\" : \"Aceptable; mantener higiene.\";\r\n    if(key===\"ansiedad\")return (v.ansiedad>=7) ? \"Anticipatoria; mejora con plan + contacto breve.\" : \"Manejable; apoyos funcionan.\";\r\n    if(key===\"apetito\") return (v.apetito<=4)? \"Riesgo de ingesta insuficiente; peque\u00f1as tomas.\" : \"Razonable; mantener.\";\r\n    return \"\";\r\n  }\r\n\r\n  function metricCard(p, key, title, val){\r\n    var sev = metricSeverity(key, val);\r\n    var cls = sevClass(sev);\r\n    var w = meterWidth(key, val);\r\n    var hint = olaHint(p, key);\r\n    return ''\r\n      + '<div class=\"mCard '+cls+'\">'\r\n      +   '<div class=\"mK\">'+esc(title)+'<\/div>'\r\n      +   '<div class=\"mV\">'+esc(val)+'\/10<\/div>'\r\n      +   '<div class=\"mMeter\"><div class=\"mBar\" style=\"width:'+esc(w)+'%\"><\/div><\/div>'\r\n      +   '<div class=\"mMini\">'+esc(hint)+'<\/div>'\r\n      + '<\/div>';\r\n  }\r\n\r\n  function openModal(pid){\r\n    var p=findPatient(pid);\r\n    if(!p) return;\r\n    selected=p;\r\n\r\n    var e=calcEstado(p);\r\n    var dot = dotClass(e);\r\n    var watch=watchList(p);\r\n    var animo=calcAnimo(p);\r\n\r\n    \/\/ lectura r\u00e1pida (panel)\r\n    document.getElementById(\"selName\").textContent = p.name+\" \u00b7 \"+p.id;\r\n    document.getElementById(\"selState\").textContent = estadoLabel(e);\r\n    document.getElementById(\"selReason\").textContent = p.reason || \"\u2014\";\r\n    document.getElementById(\"selTrend\").textContent = p.trend || \"\u2192\";\r\n    document.getElementById(\"selWatch\").textContent = watch[0] || \"\u2014\";\r\n\r\n    \/\/ activar informes\r\n    document.getElementById(\"btnResumen15\").disabled=false;\r\n    document.getElementById(\"btnEmocional\").disabled=false;\r\n    document.getElementById(\"btnAlertas\").disabled=false;\r\n\r\n    \/\/ cabecera modal\r\n    document.getElementById(\"mTitle\").textContent = p.name+\" \u00b7 \"+p.id;\r\n    document.getElementById(\"mDx\").textContent = p.dx;\r\n\r\n    document.getElementById(\"mMeta\").innerHTML =\r\n      '<span class=\"chip\"><span class=\"dot '+dot+'\"><\/span>'+esc(estadoLabel(e))+' <span style=\"opacity:.85;margin-left:6px\">'+esc(p.reason||\"\")+' \u00b7 '+esc(p.trend||\"\u2192\")+'<\/span><\/span>' +\r\n      '<span class=\"chip\">\ud83d\udd52 '+esc(lastFormLabel(p))+'<\/span>' +\r\n      '<span class=\"chip\">\ud83d\ude42 \u00c1nimo '+esc(animo)+'\/10<\/span>';\r\n\r\n    \/\/ construir tabs: Vista m\u00e9dico (default)\r\n    renderTab(\"tabResumen\");\r\n\r\n    \/\/ abrir\r\n    var modal=document.getElementById(\"modal\");\r\n    modal.classList.add(\"on\");\r\n    modal.setAttribute(\"aria-hidden\",\"false\");\r\n\r\n    \/\/ set tab active\r\n    setActiveTabButton(\"tabResumen\");\r\n  }\r\n\r\n  function setActiveTabButton(tabId){\r\n    var btns=document.querySelectorAll(\"#modal .tBtn\");\r\n    for(var i=0;i<btns.length;i++){\r\n      var b=btns[i];\r\n      b.classList.toggle(\"on\", b.getAttribute(\"data-tab\")===tabId);\r\n    }\r\n  }\r\n\r\n  function renderTab(tabId){\r\n    if(!selected) return;\r\n    var p=selected;\r\n    var e=calcEstado(p);\r\n    var dot = dotClass(e);\r\n    var watch=watchList(p);\r\n    var animo=calcAnimo(p);\r\n    var v=p.vals||{};\r\n    var func=p.func||{hogar:5,trabajo_social:5,reposo:5,ayuda_familiar:5};\r\n    var meds=p.meds||[];\r\n\r\n    var alertsHtml=[];\r\n    for(var i=0;i<watch.length;i++){\r\n      alertsHtml.push('<div class=\"alert\"><b>Hoy:<\/b> '+esc(watch[i])+'<\/div>');\r\n    }\r\n\r\n    if(tabId===\"tabResumen\"){\r\n      var html = ''\r\n        + '<div class=\"heroTriage\">'\r\n        +   '<div class=\"heroTop\">'\r\n        +     '<div>'\r\n        +       '<div class=\"heroTitle\">\u26a1 Vista m\u00e9dico (decisi\u00f3n r\u00e1pida)<\/div>'\r\n        +       '<div class=\"heroSub\">En 10 segundos: estado, por qu\u00e9, y qu\u00e9 vigilar hoy. (Centrado en la persona, no anal\u00edtica.)<\/div>'\r\n        +     '<\/div>'\r\n        +     '<div class=\"heroState\">'\r\n        +       '<span class=\"heroDot '+esc(dot)+'\"><\/span>'\r\n        +       '<span class=\"heroStateText\">'+esc(estadoLabel(e))+'<\/span>'\r\n        +       '<span class=\"heroReason\">'+esc(\"\u00b7 \"+(p.reason||\"\u2014\"))+'<\/span>'\r\n        +       '<span style=\"opacity:.9\">'+esc(\"\u00b7 \"+(p.trend||\"\u2192\"))+'<\/span>'\r\n        +     '<\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"hotline\">'\r\n        +   '<div class=\"quoteCard\">'\r\n        +     '<div class=\"quote\">\u201c'+esc(p.headline||\"\u2014\")+'\u201d<\/div>'\r\n        +     '<div class=\"personaLine\">'+esc(personaLine(p))+'<\/div>'\r\n        +   '<\/div>'\r\n        +   '<div class=\"quoteCard\">'\r\n        +     '<div class=\"heroTitle\">\ud83e\udded Resumen humano<\/div>'\r\n        +     '<div class=\"heroSub\" style=\"margin-top:10px\">'\r\n        +       '<b>Bienestar:<\/b> '+esc(animo)+'\/10<br>'\r\n        +       '<b>\u00daltimo reporte:<\/b> '+esc(lastFormLabel(p))+'<br>'\r\n        +       '<b>Plan hoy:<\/b> '+esc(watch[0]||\"\u2014\")\r\n        +     '<\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"alerts\">'+alertsHtml.join(\"\")+'<\/div>'\r\n\r\n        + '<div class=\"metricGrid\">'\r\n        +   metricCard(p, \"dolor\",   \"\ud83d\ude23 Dolor\",   v.dolor!=null?v.dolor:5)\r\n        +   metricCard(p, \"fatiga\",  \"\ud83e\udeab Fatiga\",  v.fatiga!=null?v.fatiga:5)\r\n        +   metricCard(p, \"sueno\",   \"\ud83d\ude34 Sue\u00f1o\",   v.sueno!=null?v.sueno:5)\r\n        +   metricCard(p, \"ansiedad\",\"\ud83e\udde0 Ansiedad\",v.ansiedad!=null?v.ansiedad:5)\r\n        +   metricCard(p, \"apetito\", \"\ud83c\udf7d Apetito\", v.apetito!=null?v.apetito:5)\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"sect\">'\r\n        +   '<div class=\"sectTitle\">Impacto funcional (c\u00f3mo vive)<\/div>'\r\n        +   '<div class=\"funcGrid\">'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Hogar<\/div><div class=\"fV\">'+esc(func.hogar)+'\/10<\/div><\/div>'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Trabajo\/Social<\/div><div class=\"fV\">'+esc(func.trabajo_social)+'\/10<\/div><\/div>'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Reposo<\/div><div class=\"fV\">'+esc(func.reposo)+'\/10<\/div><\/div>'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Ayuda familiar<\/div><div class=\"fV\">'+esc(func.ayuda_familiar)+'\/10<\/div><\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>';\r\n      document.getElementById(\"mBody\").innerHTML = html;\r\n      return;\r\n    }\r\n\r\n    if(tabId===\"tabFicha\"){\r\n      \/\/ lectura \u201cficha\u201d parecida a lo que te gust\u00f3, pero m\u00e1s c\u00f3modo\r\n      var olas=buildOlas(p);\r\n      var tl = [\r\n        {label:\"D\u00edas 1\u20133\", idx:[0,1,2]},\r\n        {label:\"D\u00edas 4\u20137\", idx:[3,4,5,6]},\r\n        {label:\"D\u00edas 8\u201311\", idx:[7,8,9,10]},\r\n        {label:\"D\u00edas 12\u201315\", idx:[11,12,13,14]}\r\n      ];\r\n      var tlHtml=[];\r\n      for(var j=0;j<tl.length;j++){\r\n        var b=tl[j];\r\n        tlHtml.push(\r\n          '<div class=\"fCard\">'\r\n          + '<div class=\"fK\">'+esc(b.label)+'<\/div>'\r\n          + '<div class=\"heroSub\" style=\"margin-top:10px;line-height:1.55\">'\r\n          + 'Dolor ~ <b>'+esc(avgSlice(olas.dolor,b.idx).toFixed(1))+'\/10<\/b><br>'\r\n          + 'Fatiga ~ '+esc(avgSlice(olas.fatiga,b.idx).toFixed(1))+' \u00b7 Sue\u00f1o ~ '+esc(avgSlice(olas.sueno,b.idx).toFixed(1))+'<br>'\r\n          + 'Ansiedad ~ '+esc(avgSlice(olas.ansiedad,b.idx).toFixed(1))+' \u00b7 Apetito ~ '+esc(avgSlice(olas.apetito,b.idx).toFixed(1))\r\n          + '<\/div><\/div>'\r\n        );\r\n      }\r\n\r\n      var medsHtml = meds.length\r\n        ? meds.map(function(x){ return '<span class=\"chip\">\ud83d\udc8a '+esc(x)+'<\/span>'; }).join(\"\")\r\n        : '<span style=\"opacity:.8\">\u2014<\/span>';\r\n\r\n      var html2 = ''\r\n        + '<div class=\"heroTriage\">'\r\n        +   '<div class=\"heroTop\">'\r\n        +     '<div>'\r\n        +       '<div class=\"heroTitle\">\ud83e\uddfe Ficha del paciente (ciclo 15 d\u00edas)<\/div>'\r\n        +       '<div class=\"heroSub\">Lectura sin gr\u00e1ficos. Enfocado a tolerancia, funci\u00f3n, \u00e1nimo y alertas humanas.<\/div>'\r\n        +     '<\/div>'\r\n        +     '<div class=\"heroState\">'\r\n        +       '<span class=\"heroDot '+esc(dot)+'\"><\/span>'\r\n        +       '<span class=\"heroStateText\">'+esc(estadoLabel(e))+'<\/span>'\r\n        +       '<span class=\"heroReason\">'+esc(\"\u00b7 \"+(p.reason||\"\u2014\"))+'<\/span>'\r\n        +     '<\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"metricGrid\">'\r\n        +   metricCard(p, \"dolor\",   \"\ud83d\ude23 Dolor\",   v.dolor!=null?v.dolor:5)\r\n        +   metricCard(p, \"fatiga\",  \"\ud83e\udeab Fatiga\",  v.fatiga!=null?v.fatiga:5)\r\n        +   metricCard(p, \"sueno\",   \"\ud83d\ude34 Sue\u00f1o\",   v.sueno!=null?v.sueno:5)\r\n        +   metricCard(p, \"ansiedad\",\"\ud83e\udde0 Ansiedad\",v.ansiedad!=null?v.ansiedad:5)\r\n        +   metricCard(p, \"apetito\", \"\ud83c\udf7d Apetito\", v.apetito!=null?v.apetito:5)\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"sect\"><div class=\"sectTitle\">L\u00ednea de tiempo (d\u00edas 1\u201315)<\/div>'\r\n        +   '<div class=\"funcGrid\">'+tlHtml.join(\"\")+'<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"sect\"><div class=\"sectTitle\">Soporte tomado<\/div>'\r\n        +   '<div style=\"display:flex;gap:8px;flex-wrap:wrap\">'+medsHtml+'<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"sect\"><div class=\"sectTitle\">Voz del paciente<\/div>'\r\n        +   '<div class=\"funcGrid\" style=\"grid-template-columns:1fr 1fr\">'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Lo m\u00e1s dif\u00edcil<\/div><div class=\"heroSub\" style=\"margin-top:10px\">'+esc((p.voz&&p.voz.hard)||\"\u2014\")+'<\/div><\/div>'\r\n        +     '<div class=\"fCard\"><div class=\"fK\">Lo que le da fuerzas<\/div><div class=\"heroSub\" style=\"margin-top:10px\">'+esc((p.voz&&p.voz.force)||\"\u2014\")+'<\/div><\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>';\r\n\r\n      document.getElementById(\"mBody\").innerHTML = html2;\r\n      return;\r\n    }\r\n\r\n    if(tabId===\"tabAcciones\"){\r\n      \/\/ \u2705 Tiles modernos para enlaces\/acciones (lo que pediste)\r\n      var html3 = ''\r\n        + '<div class=\"heroTriage\">'\r\n        +   '<div class=\"heroTop\">'\r\n        +     '<div>'\r\n        +       '<div class=\"heroTitle\">\ud83e\uddca Acciones r\u00e1pidas<\/div>'\r\n        +       '<div class=\"heroSub\">Botones grandes, cuadrados y claros para el m\u00e9dico. Aqu\u00ed decide r\u00e1pido.<\/div>'\r\n        +     '<\/div>'\r\n        +     '<div class=\"heroState\">'\r\n        +       '<span class=\"heroDot '+esc(dot)+'\"><\/span>'\r\n        +       '<span class=\"heroStateText\">'+esc(estadoLabel(e))+'<\/span>'\r\n        +       '<span class=\"heroReason\">'+esc(\"\u00b7 \"+(p.reason||\"\u2014\"))+'<\/span>'\r\n        +     '<\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"tiles\">'\r\n        +   '<div class=\"tile primary\" data-report=\"resumen15\">'\r\n        +     '<div class=\"tileTop\"><div><div class=\"tileT\">Resumen 15 d\u00edas<\/div><div class=\"tileS\">1 p\u00e1gina \u00b7 para consulta r\u00e1pida<\/div><\/div><div class=\"tileI\">\ud83d\uddd3\ufe0f<\/div><\/div>'\r\n        +     '<div class=\"tileTag\">Imprimible \u00b7 claro<\/div>'\r\n        +   '<\/div>'\r\n\r\n        +   '<div class=\"tile primary\" data-report=\"emocional\">'\r\n        +     '<div class=\"tileTop\"><div><div class=\"tileT\">Bienestar emocional<\/div><div class=\"tileS\">ansiedad \u00b7 sue\u00f1o \u00b7 voz<\/div><\/div><div class=\"tileI\">\ud83e\udde0<\/div><\/div>'\r\n        +     '<div class=\"tileTag\">Lectura humana<\/div>'\r\n        +   '<\/div>'\r\n\r\n        +   '<div class=\"tile\" data-report=\"alertas\">'\r\n        +     '<div class=\"tileTop\"><div><div class=\"tileT\">Lista de alertas<\/div><div class=\"tileS\">checklist de actuaci\u00f3n<\/div><\/div><div class=\"tileI\">\ud83d\udea8<\/div><\/div>'\r\n        +     '<div class=\"tileTag\">Prioridad hoy<\/div>'\r\n        +   '<\/div>'\r\n        + '<\/div>'\r\n\r\n        + '<div class=\"sect\"><div class=\"sectTitle\">Qu\u00e9 vigilar hoy<\/div><div class=\"alerts\">'+alertsHtml.join(\"\")+'<\/div><\/div>'\r\n\r\n        + '<div style=\"margin-top:14px;color:#93a4bd;font-size:11px;font-weight:800\">SIMULACI\u00d3N INTERNA \u2014 DATOS 100% FICTICIOS (TEST)<\/div>';\r\n\r\n      document.getElementById(\"mBody\").innerHTML = html3;\r\n      return;\r\n    }\r\n  }\r\n\r\n  function closeModal(){\r\n    var modal=document.getElementById(\"modal\");\r\n    modal.classList.remove(\"on\");\r\n    modal.setAttribute(\"aria-hidden\",\"true\");\r\n  }\r\n\r\n  function openReport(type){\r\n    if(!selected){ alert(\"Selecciona un paciente primero (clic en nombre).\"); return; }\r\n    var p=selected;\r\n    var e=calcEstado(p);\r\n    var w=watchList(p);\r\n    var olas=buildOlas(p);\r\n    var animo=calcAnimo(p);\r\n\r\n    function page(title, body){\r\n      return ''\r\n        + '<!doctype html><html><head><meta charset=\"utf-8\"><title>'+esc(title)+'<\/title>'\r\n        + '<style>'\r\n        + 'body{font-family:system-ui;margin:26px;color:#111}'\r\n        + 'h1{margin:0 0 8px;font-size:20px}'\r\n        + 'h2{margin:18px 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.10em;color:#333}'\r\n        + '.tag{display:inline-block;margin:4px 6px 0 0;padding:6px 10px;border-radius:999px;background:#f3f4f6;font-weight:800;font-size:12px}'\r\n        + '.box{border:1px solid #e5e7eb;border-radius:12px;padding:12px;background:#fff;margin-top:10px}'\r\n        + '.grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}'\r\n        + '.k{font-size:11px;letter-spacing:.10em;text-transform:uppercase;color:#555;font-weight:900}'\r\n        + '.v{font-size:18px;font-weight:900;margin-top:4px}'\r\n        + '.mini{margin-top:6px;color:#555;font-size:12px;line-height:1.35}'\r\n        + '.list li{margin:6px 0}'\r\n        + '@media(max-width:900px){.grid{grid-template-columns:repeat(2,minmax(0,1fr));}}'\r\n        + '<\/style><\/head><body>'\r\n        + '<h1>'+esc(title)+'<\/h1>'\r\n        + '<div style=\"margin-top:4px;color:#333\"><b>'+esc(p.name)+' \u00b7 '+esc(p.id)+'<\/b> \u2014 '+esc(p.dx)+'<\/div>'\r\n        + '<div style=\"margin-top:6px\">'\r\n        + '<span class=\"tag\">Estado: '+esc(estadoLabel(e))+'<\/span>'\r\n        + '<span class=\"tag\">Raz\u00f3n: '+esc(p.reason||\"\")+'<\/span>'\r\n        + '<span class=\"tag\">Tendencia: '+esc(p.trend||\"\u2192\")+'<\/span>'\r\n        + '<span class=\"tag\">\u00daltimo: '+esc(lastFormLabel(p))+'<\/span>'\r\n        + '<span class=\"tag\">Bienestar: '+esc(animo)+'\/10<\/span>'\r\n        + '<\/div>'\r\n        + '<div class=\"box\" style=\"margin-top:10px;background:#f9fafb\"><b>Informe centrado en la persona<\/b>'\r\n        + '<div style=\"margin-top:6px;color:#444;font-size:12px;line-height:1.45\">No sustituye informes m\u00e9dicos ni anal\u00edticas. Resume bienestar, carga emocional, tolerancia y funcionamiento para apoyar decisiones r\u00e1pidas entre ciclos.<\/div><\/div>'\r\n        + body\r\n        + '<div style=\"margin-top:16px;color:#666;font-size:11px\">SIMULACI\u00d3N INTERNA \u2014 DATOS 100% FICTICIOS (TEST)<\/div>'\r\n        + '<\/body><\/html>';\r\n    }\r\n\r\n    function openHTML(html){\r\n      var w = window.open(\"\", \"_blank\");\r\n      if(!w){ alert(\"Popup bloqueado.\"); return; }\r\n      w.document.open(); w.document.write(html); w.document.close();\r\n    }\r\n\r\n    if(type===\"resumen15\"){\r\n      var tl = [\r\n        {t:\"D\u00edas 1\u20133\",  d:avgSlice(olas.dolor,[0,1,2]).toFixed(1)},\r\n        {t:\"D\u00edas 4\u20137\",  d:avgSlice(olas.dolor,[3,4,5,6]).toFixed(1)},\r\n        {t:\"D\u00edas 8\u201311\", d:avgSlice(olas.dolor,[7,8,9,10]).toFixed(1)},\r\n        {t:\"D\u00edas 12\u201315\",d:avgSlice(olas.dolor,[11,12,13,14]).toFixed(1)}\r\n      ];\r\n      var body = ''\r\n        + '<div class=\"box\"><b>Frase del paciente<\/b><div style=\"margin-top:6px\">\u201c'+esc(p.headline||\"\u2014\")+'\u201d<\/div>'\r\n        + '<div style=\"margin-top:8px;color:#555;font-size:12px\">'+esc(personaLine(p))+'<\/div><\/div>'\r\n        + '<h2>Qu\u00e9 vigilar hoy<\/h2><div class=\"box\"><ul class=\"list\">'+(function(){var out=[],i; for(i=0;i<w.length;i++) out.push('<li>'+esc(w[i])+'<\/li>'); return out.join('');})()+'<\/ul><\/div>'\r\n        + '<h2>Olas (actual + lectura)<\/h2>'\r\n        + '<div class=\"box\"><div class=\"grid\">'\r\n        +   '<div><div class=\"k\">Dolor<\/div><div class=\"v\">\ud83d\ude23 '+p.vals.dolor+'\/10<\/div><div class=\"mini\">'+esc(olaHint(p,\"dolor\"))+'<\/div><\/div>'\r\n        +   '<div><div class=\"k\">Fatiga<\/div><div class=\"v\">\ud83e\udeab '+p.vals.fatiga+'\/10<\/div><div class=\"mini\">'+esc(olaHint(p,\"fatiga\"))+'<\/div><\/div>'\r\n        +   '<div><div class=\"k\">Sue\u00f1o<\/div><div class=\"v\">\ud83d\ude34 '+p.vals.sueno+'\/10<\/div><div class=\"mini\">'+esc(olaHint(p,\"sueno\"))+'<\/div><\/div>'\r\n        +   '<div><div class=\"k\">Ansiedad<\/div><div class=\"v\">\ud83e\udde0 '+p.vals.ansiedad+'\/10<\/div><div class=\"mini\">'+esc(olaHint(p,\"ansiedad\"))+'<\/div><\/div>'\r\n        +   '<div><div class=\"k\">Apetito<\/div><div class=\"v\">\ud83c\udf7d '+p.vals.apetito+'\/10<\/div><div class=\"mini\">'+esc(olaHint(p,\"apetito\"))+'<\/div><\/div>'\r\n        + '<\/div><\/div>'\r\n        + '<h2>Evoluci\u00f3n por bloques<\/h2>'\r\n        + '<div class=\"box\"><ul class=\"list\">'+(function(){var out=[],i; for(i=0;i<tl.length;i++) out.push('<li><b>'+tl[i].t+':<\/b> dolor medio ~ '+tl[i].d+'\/10<\/li>'); return out.join('');})()+'<\/ul><\/div>';\r\n      return openHTML(page(\"Resumen 15 d\u00edas (1 p\u00e1gina) \u00b7 Olas de Vida\", body));\r\n    }\r\n\r\n    if(type===\"emocional\"){\r\n      var body2 = ''\r\n        + '<div class=\"box\"><b>Frase del paciente<\/b><div style=\"margin-top:6px\">\u201c'+esc(p.headline||\"\u2014\")+'\u201d<\/div>'\r\n        + '<div style=\"margin-top:8px;color:#555;font-size:12px\">'+esc(personaLine(p))+'<\/div><\/div>'\r\n        + '<h2>Lectura de bienestar<\/h2>'\r\n        + '<div class=\"box\">'\r\n        +   '<div><b>Bienestar (s\u00edntesis):<\/b> '+animo+'\/10<\/div>'\r\n        +   '<div style=\"margin-top:6px\"><b>Ansiedad:<\/b> '+p.vals.ansiedad+'\/10 \u00b7 <span style=\"color:#555\">'+esc(olaHint(p,\"ansiedad\"))+'<\/span><\/div>'\r\n        +   '<div style=\"margin-top:6px\"><b>Sue\u00f1o:<\/b> '+p.vals.sueno+'\/10 \u00b7 <span style=\"color:#555\">'+esc(olaHint(p,\"sueno\"))+'<\/span><\/div>'\r\n        + '<\/div>'\r\n        + '<h2>Qu\u00e9 vigilar hoy<\/h2>'\r\n        + '<div class=\"box\"><ul class=\"list\">'+(function(){var out=[],i; for(i=0;i<w.length;i++) out.push('<li>'+esc(w[i])+'<\/li>'); return out.join('');})()+'<\/ul><\/div>';\r\n      return openHTML(page(\"Resumen de bienestar \u00b7 Olas de Vida\", body2));\r\n    }\r\n\r\n    if(type===\"alertas\"){\r\n      var body3 = ''\r\n        + '<h2>Checklist de actuaci\u00f3n<\/h2>'\r\n        + '<div class=\"box\"><ul class=\"list\">'\r\n        +   '<li>\u2610 Revisado estado general<\/li>'\r\n        +   '<li>\u2610 Llamada \/ contacto (si procede)<\/li>'\r\n        +   '<li>\u2610 Ajuste soporte (antiem\u00e9tico\/antidiarreico\/analgesia)<\/li>'\r\n        +   '<li>\u2610 Educaci\u00f3n: qu\u00e9 vigilar y cu\u00e1ndo avisar<\/li>'\r\n        + '<\/ul><\/div>'\r\n        + '<h2>Alertas del paciente<\/h2>'\r\n        + '<div class=\"box\"><ul class=\"list\">'+(function(){var out=[],i; for(i=0;i<w.length;i++) out.push('<li>'+esc(w[i])+'<\/li>'); return out.join('');})()+'<\/ul><\/div>';\r\n      return openHTML(page(\"Lista de alertas \u00b7 Olas de Vida\", body3));\r\n    }\r\n  }\r\n\r\n  function wire(){\r\n    var s=document.getElementById(\"ovSearch\");\r\n    var f=document.getElementById(\"ovFilter\");\r\n    if(s && !s.__b){ s.__b=true; s.addEventListener(\"input\", renderTable); }\r\n    if(f && !f.__b){ f.__b=true; f.addEventListener(\"change\", renderTable); }\r\n\r\n    var tbody=document.getElementById(\"tablaBody\");\r\n    if(tbody && !tbody.__b){\r\n      tbody.__b=true;\r\n      tbody.addEventListener(\"click\", function(ev){\r\n        var t=ev.target;\r\n        var pid = t && t.getAttribute ? t.getAttribute(\"data-open\") : null;\r\n        if(pid) openModal(pid);\r\n      });\r\n    }\r\n\r\n    var modal=document.getElementById(\"modal\");\r\n    if(modal && !modal.__b){\r\n      modal.__b=true;\r\n      modal.addEventListener(\"click\", function(ev){\r\n        var t=ev.target;\r\n        if(t && t.getAttribute && t.getAttribute(\"data-close\")===\"1\") closeModal();\r\n      });\r\n      document.addEventListener(\"keydown\", function(ev){\r\n        if(ev.key===\"Escape\") closeModal();\r\n      });\r\n\r\n      \/\/ Tabs\r\n      var rail = modal.querySelector(\".tabRail\");\r\n      if(rail){\r\n        rail.addEventListener(\"click\", function(ev){\r\n          var t=ev.target;\r\n          \/\/ buscar bot\u00f3n\r\n          while(t && t!==rail && !(t.classList && t.classList.contains(\"tBtn\"))) t=t.parentNode;\r\n          if(!t || t===rail) return;\r\n          var tabId = t.getAttribute(\"data-tab\");\r\n          if(!tabId) return;\r\n          setActiveTabButton(tabId);\r\n          renderTab(tabId);\r\n        });\r\n      }\r\n\r\n      \/\/ Tiles actions (delegated)\r\n      var mBody=document.getElementById(\"mBody\");\r\n      if(mBody){\r\n        mBody.addEventListener(\"click\", function(ev){\r\n          var t=ev.target;\r\n          while(t && t!==mBody && !(t.getAttribute && (t.getAttribute(\"data-report\") || t.classList.contains(\"tile\")))) t=t.parentNode;\r\n          if(!t || t===mBody) return;\r\n          var rep = t.getAttribute(\"data-report\");\r\n          if(!rep && t.classList && t.classList.contains(\"tile\")) rep = t.getAttribute(\"data-report\");\r\n          if(rep) openReport(rep);\r\n        });\r\n      }\r\n    }\r\n\r\n    \/\/ informes globales\r\n    var b15=document.getElementById(\"btnResumen15\");\r\n    var be=document.getElementById(\"btnEmocional\");\r\n    var ba=document.getElementById(\"btnAlertas\");\r\n    var bp=document.getElementById(\"btnPrint\");\r\n\r\n    if(b15 && !b15.__b){ b15.__b=true; b15.addEventListener(\"click\", function(){ openReport(\"resumen15\"); }); }\r\n    if(be && !be.__b){ be.__b=true; be.addEventListener(\"click\", function(){ openReport(\"emocional\"); }); }\r\n    if(ba && !ba.__b){ ba.__b=true; ba.addEventListener(\"click\", function(){ openReport(\"alertas\"); }); }\r\n    if(bp && !bp.__b){ bp.__b=true; bp.addEventListener(\"click\", function(){ window.print(); }); }\r\n  }\r\n\r\n  function bootOnce(){\r\n    var tb=document.getElementById(\"tablaBody\");\r\n    var now=document.getElementById(\"ovNow\");\r\n    if(!tb || !now) return false;\r\n\r\n    now.textContent=\"\u00daltima sesi\u00f3n: \"+fmtNow();\r\n    wire();\r\n    renderKPIs();\r\n    renderTable();\r\n    return true;\r\n  }\r\n\r\n  function boot(){\r\n    if(bootOnce()) return;\r\n\r\n    var obs=new MutationObserver(function(){\r\n      if(bootOnce()) obs.disconnect();\r\n    });\r\n    obs.observe(document.documentElement,{childList:true,subtree:true});\r\n\r\n    setTimeout(function(){ bootOnce(); }, 1200);\r\n  }\r\n\r\n  if(document.readyState===\"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n  else boot();\r\n\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc99 Olas de Vida \u00b7 Panel M\u00e9dico DEMO \u00b7 DATOS 100% FICTICIOS Seguimiento emocional\u2013f\u00edsico\u2013ps\u00edquico entre ciclos \u00b7 para ver a la persona (no solo el tumor) CR\u00cdTICO ALTO RIESGO MODERADO ESTABLE Dr. Fern\u00e1ndez Unidad de Oncolog\u00eda \u00b7 Olas de Vida \u00daltima sesi\u00f3n: \u2014 Pacientes activos \u2014 Cartera asignada (demo) Alertas cr\u00edticas \u2014 Banderas rojas hoy [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1032","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/pages\/1032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":4,"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/pages\/1032\/revisions"}],"predecessor-version":[{"id":1036,"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/pages\/1032\/revisions\/1036"}],"wp:attachment":[{"href":"https:\/\/5.olasdevida.es\/index.php\/wp-json\/wp\/v2\/media?parent=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}