{"id":1511,"date":"2026-08-10T14:52:33","date_gmt":"2026-08-10T14:52:33","guid":{"rendered":"https:\/\/villasrivero.com\/?page_id=1511"},"modified":"2026-10-27T16:53:44","modified_gmt":"2026-10-27T16:53:44","slug":"dashboard-alaram","status":"publish","type":"page","link":"https:\/\/villasrivero.com\/en\/dashboard-alaram\/","title":{"rendered":"Dashboard Alaram"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1511\" class=\"elementor elementor-1511\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ebe9d5 e-flex e-con-boxed e-con e-parent\" data-id=\"3ebe9d5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5467c03 elementor-widget elementor-widget-html\" data-id=\"5467c03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"es\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>Alaram Holidays Home \u00b7 Villas Rivero<\/title>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\/dist\/chart.umd.min.js\"><\/script>\n<style>\n:root{\n --navy:#242B59;--sea:#4ABCC5;--sand:#D1B38C;--bg:#F7F6F3;--card:#fff;\n --line:#E4E1DA;--text:#171717;--muted:#6D6962;--up:#5BAE6A;--dn:#C97962;\n --upbg:#EEF8F0;--dnbg:#F8EDE8;--soft:#F3F1EC;--bluebg:#EDF8F9;\n}\n*{box-sizing:border-box}\nbody{margin:0;background:var(--bg);font-family:Arial,Helvetica,sans-serif;color:var(--text);line-height:1.5}\n.wrap{max-width:1240px;margin:0 auto;padding:0 28px}\nheader{background:linear-gradient(135deg,#242B59,#30386C);color:#fff;padding:36px 0 32px;border-bottom:4px solid var(--sand)}\n.head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}\n.brand{font-family:Georgia,serif;font-style:italic;font-size:32px}.brand span{color:var(--sea)}\n.kicker{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:#C2C7DC;margin-top:18px}\nh1{font-family:Georgia,serif;font-size:36px;font-weight:400;margin:5px 0 0}\n.meta{font-size:12px;color:#C7CBDE;line-height:1.7;text-align:right}.meta b{color:#fff}\nnav{background:rgba(255,255,255,.97);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;backdrop-filter:blur(8px)}\n.nav{display:flex;overflow:auto;gap:2px}.nav button{border:0;background:none;padding:15px 16px;font-size:12px;color:var(--muted);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent}\n.nav button.on{color:var(--navy);font-weight:700;border-bottom-color:var(--sea)}\nmain{padding:36px 0 58px}.pane{display:none}.pane.on{display:block}section{margin-bottom:46px}\n.eyebrow{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:#967A58;font-weight:700;margin-bottom:7px}\nh2{font-family:Georgia,serif;font-size:29px;font-weight:400;color:var(--navy);margin:0 0 7px}\nh3{font-family:Georgia,serif;font-size:21px;font-weight:400;color:var(--navy);margin:0 0 6px}\n.lead{font-size:14px;color:#5D5953;max-width:940px;margin:0 0 22px}\n.banner{background:#fff;border:1px solid var(--line);border-left:5px solid var(--sea);border-radius:9px;padding:17px 19px;margin-bottom:18px}\n.banner .big{font-family:Georgia,serif;font-size:23px;color:var(--navy);margin-bottom:4px}.banner p{font-size:12.5px;color:#59554F;margin:0}\n\n.hero{background:linear-gradient(135deg,#242B59,#333C74);border-radius:10px;color:#fff;padding:30px;box-shadow:0 14px 32px rgba(36,43,89,.13)}\n.hero-title{font-size:10px;text-transform:uppercase;letter-spacing:1.5px;color:#C9CDDF;margin-bottom:18px}\n.hero-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:19px}\n.hlabel{font-size:10px;text-transform:uppercase;letter-spacing:1.1px;color:#C2C7DA}\n.hvalue{font-family:Georgia,serif;font-size:38px;line-height:1.05;color:var(--sea);margin-top:6px}\n.hdesc{font-size:11px;color:#CDD1E1;margin-top:7px}.hdesc strong{color:#F2D5B0}\n.hero-note{margin-top:20px;background:#1C224A;padding:13px 15px;border-radius:6px;font-size:12px;color:#DDE0EC}.hero-note strong{color:#fff}\n\n.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:13px;margin-top:18px}\n.kpi{background:#fff;border:1px solid var(--line);border-radius:9px;padding:17px}\n.kpi .lab{font-size:9px;text-transform:uppercase;letter-spacing:.9px;color:var(--muted)}\n.kpi .vals{font-family:Georgia,serif;font-size:24px;color:var(--navy);margin:5px 0}\n.delta{font-size:11px;font-weight:700}.up{color:var(--up)}.dn{color:var(--dn)}\n\n.explain-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}\n.explain{background:#fff;border:1px solid var(--line);border-radius:9px;padding:15px}\n.explain .t{font-size:9px;text-transform:uppercase;color:#967A58;font-weight:700;letter-spacing:.8px}\n.explain .s{font-family:Georgia,serif;font-size:18px;color:var(--navy);margin:4px 0}\n.explain p{font-size:10.5px;color:#5D5953;margin:0}\n\n.reading{margin-top:17px;background:var(--upbg);border-left:4px solid var(--up);border-radius:0 9px 9px 0;padding:18px 20px;color:#3F5147}\n.reading h3{font-family:Georgia,serif;font-size:21px;font-weight:400;color:#2D6E3D;margin:0 0 8px}\n.reading p{font-size:13px;margin:7px 0}.reading strong{color:#2D6E3D}\n.note{background:#FBF6EE;border-left:4px solid var(--sand);padding:14px 17px;border-radius:0 7px 7px 0;font-size:11.5px;color:#554F48;margin-top:13px}\n\n.card{background:#fff;border:1px solid var(--line);border-radius:9px;padding:21px;box-shadow:0 2px 10px rgba(0,0,0,.025)}\n.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.chartbox{height:320px}\n\n.month-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}\n.month{background:#fff;border:1px solid var(--line);border-radius:9px;padding:17px;min-height:315px}\n.month.closed{border-top:4px solid var(--sea)}.month.live{border-top:4px solid var(--sand)}.month.future{border-top:4px solid #B9B3A8}\n.mname{font-family:Georgia,serif;font-size:21px;color:var(--navy)}\n.status{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);font-weight:700;margin-top:2px}\n.compare{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:13px}\n.box{background:#F7F6F3;border-radius:6px;padding:10px}.box .yr{font-size:8.5px;text-transform:uppercase;color:var(--muted)}.box .val{font-family:Georgia,serif;font-size:19px;color:var(--navy)}\n.result{font-size:11px;margin-top:9px;padding:7px 9px;border-radius:5px}\n.good{background:var(--upbg);color:var(--up);font-weight:700}.bad{background:var(--dnbg);color:var(--dn);font-weight:700}.neutral{background:#F4F1EA;color:#625D55}\n.metric-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin-top:9px}\n.micro{border:1px solid var(--line);border-radius:6px;padding:8px;background:#FCFBF9}.micro .l{font-size:8px;text-transform:uppercase;color:var(--muted)}.micro .v{font-family:Georgia,serif;font-size:16px;color:var(--navy)}.micro .sub{font-size:9px;color:var(--muted)}\n\n.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:9px;padding:7px 11px 13px}\ntable{width:100%;border-collapse:collapse;font-size:12px;min-width:900px}\nth{padding:10px 8px;border-bottom:1px solid var(--line);font-size:8.5px;text-transform:uppercase;letter-spacing:.65px;color:var(--muted);text-align:right;white-space:nowrap}\nth:first-child,td:first-child{text-align:left}\ntd{padding:10px 8px;border-bottom:1px solid #F0EEE9;text-align:right}\ntr:hover td{background:#FAFAF8}\n.rp{background:#F8FCF9;color:#2D6E3D;font-weight:700}\n.pos{color:var(--up);font-weight:700}.neg{color:var(--dn);font-weight:700}\n\n.toolbar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:16px 0}\n.toolbar label{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);font-weight:700}\n.toolbar select{display:block;margin-top:5px;border:1px solid var(--line);background:#fff;border-radius:6px;padding:10px 12px;color:var(--navy);min-width:210px}\n\n.detail-card{margin-top:16px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:20px}\n.detail-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;margin-top:13px}\n.dk{background:#F8F7F4;border-radius:7px;padding:11px}.dk .l{font-size:8px;text-transform:uppercase;color:var(--muted)}.dk .v{font-family:Georgia,serif;font-size:18px;color:var(--navy);margin-top:3px}.dk .s{font-size:9px;color:var(--muted);margin-top:2px}\n\n.hist-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:16px}\n.hist-card{background:#fff;border:1px solid var(--line);border-radius:9px;padding:18px}\n.hist-card .year{font-family:Georgia,serif;font-size:24px;color:var(--navy)}\n.hist-card .money{font-family:Georgia,serif;font-size:27px;color:var(--navy);margin:8px 0}\n.hist-card .small{font-size:11px;color:#5B5750}\n\nfooter{border-top:1px solid var(--line);padding:23px 0 30px;font-size:10.5px;color:var(--muted)}\n@media(max-width:1020px){.hero-grid,.kpis{grid-template-columns:1fr 1fr}.explain-grid{grid-template-columns:1fr 1fr}.month-grid{grid-template-columns:1fr 1fr}.detail-kpis{grid-template-columns:repeat(3,1fr)}.two{grid-template-columns:1fr}}\n@media(max-width:620px){.wrap{padding:0 15px}.meta{text-align:left}.hero-grid,.kpis,.explain-grid,.month-grid,.detail-kpis,.hist-grid{grid-template-columns:1fr}}\n<\/style>\n<\/head>\n<body>\n\n<header><div class=\"wrap\"><div class=\"head\">\n<div><div class=\"brand\">Villas <span>Rivero<\/span><\/div><div class=\"kicker\">Portfolio Dashboard<\/div><h1>Alaram Holidays Home<\/h1><\/div>\n<div class=\"meta\"><b>4 alojamientos<\/b><br>2025 hist\u00f3rico \u00b7 2026 producci\u00f3n actual<br>Actualizado \u00b7 19\/10\/2026<\/div>\n<\/div><\/div><\/header>\n\n<nav><div class=\"wrap nav\">\n<button class=\"on\" data-pane=\"resumen\">Situaci\u00f3n general<\/button>\n<button data-pane=\"meses\">Mes a mes<\/button>\n<button data-pane=\"alojamientos\">Alojamientos<\/button>\n<button data-pane=\"historico\">Comparativa 2025\u20132026<\/button>\n<\/div><\/nav>\n\n<main><div class=\"wrap\">\n\n<div class=\"pane on\" id=\"resumen\">\n<section>\n<div class=\"eyebrow\">Visi\u00f3n global<\/div>\n<h2>Situaci\u00f3n general<\/h2>\n\n<div class=\"banner\">\n<div class=\"big\">Comparaci\u00f3n homog\u00e9nea: abril\u2013diciembre<\/div>\n<p>El hist\u00f3rico 2025 disponible comienza en abril. Por eso la comparaci\u00f3n principal utiliza exactamente el mismo periodo en ambos a\u00f1os. Octubre de 2026 est\u00e1 en curso y noviembre\u2013diciembre reflejan reservas ya confirmadas.<\/p>\n<\/div>\n\n<div class=\"hero\">\n<div class=\"hero-title\">Abril\u2013diciembre 2025 vs abril\u2013diciembre 2026 OTB<\/div>\n<div class=\"hero-grid\">\n<div><div class=\"hlabel\">Revenue<\/div><div class=\"hvalue\" id=\"heroRevenue\"><\/div><div class=\"hdesc\"><strong id=\"rev25\"><\/strong> \u2192 <strong id=\"rev26\"><\/strong><\/div><\/div>\n<div><div class=\"hlabel\">Noches<\/div><div class=\"hvalue\" id=\"heroNights\"><\/div><div class=\"hdesc\"><strong id=\"n25\"><\/strong> \u2192 <strong id=\"n26\"><\/strong><\/div><\/div>\n<div><div class=\"hlabel\">RevPAR<\/div><div class=\"hvalue\" id=\"heroRevpar\"><\/div><div class=\"hdesc\"><strong id=\"rp25\"><\/strong> \u2192 <strong id=\"rp26\"><\/strong><\/div><\/div>\n<div><div class=\"hlabel\">Oct\u2013dic 2026<\/div><div class=\"hvalue\" id=\"futureRevenue\"><\/div><div class=\"hdesc\"><strong id=\"futureNights\"><\/strong> noches ya reservadas<\/div><\/div>\n<\/div>\n<div class=\"hero-note\"><strong>Lectura clave:<\/strong> 2026 ya supera claramente el resultado comparable de 2025, aun cuando octubre todav\u00eda est\u00e1 en curso y noviembre\u2013diciembre siguen abiertos a nuevas reservas.<\/div>\n<\/div>\n\n<div class=\"kpis\">\n<div class=\"kpi\"><div class=\"lab\">ADR<\/div><div class=\"vals\" id=\"adrVals\"><\/div><div class=\"delta\" id=\"adrDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"lab\">Ocupaci\u00f3n<\/div><div class=\"vals\" id=\"occVals\"><\/div><div class=\"delta up\" id=\"occDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"lab\">LOS<\/div><div class=\"vals\" id=\"losVals\"><\/div><div class=\"delta\" id=\"losDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"lab\">Abr\u2013sep cerrado<\/div><div class=\"vals\" id=\"closedVals\"><\/div><div class=\"delta up\" id=\"closedDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"lab\">Reservas<\/div><div class=\"vals\" id=\"reservationsVals\"><\/div><div class=\"delta\" id=\"reservationsDelta\"><\/div><\/div>\n<\/div>\n\n<div class=\"reading\">\n<h3>\u00bfQu\u00e9 nos dicen realmente los datos?<\/h3>\n<p>La mejora de Alaram es especialmente fuerte cuando comparamos meses ya cerrados. Entre abril y septiembre, el revenue pasa de <strong id=\"readClosed25\"><\/strong> a <strong id=\"readClosed26\"><\/strong>, una mejora del <strong id=\"readClosedChange\"><\/strong>.<\/p>\n<p>En el periodo completo comparable abril\u2013diciembre, el revenue ya reservado para 2026 supera en <strong id=\"readYearChange\"><\/strong> al resultado final de 2025. Las noches vendidas tambi\u00e9n crecen con fuerza y la ocupaci\u00f3n aumenta de <strong id=\"readOcc25\"><\/strong> a <strong id=\"readOcc26\"><\/strong>.<\/p>\n<p>El ADR es ligeramente inferior, pero el dato clave es el <strong>RevPAR<\/strong>: cada noche de calendario est\u00e1 produciendo bastante m\u00e1s dinero que el a\u00f1o anterior. Eso significa que el conjunto est\u00e1 aprovechando mejor su capacidad comercial.<\/p>\n<\/div>\n\n<div class=\"eyebrow\" style=\"margin-top:24px\">C\u00f3mo leer los KPIs<\/div>\n<div class=\"explain-grid\">\n<div class=\"explain\"><div class=\"t\">Revenue<\/div><div class=\"s\">Dinero generado<\/div><p>Ingreso total producido por las reservas.<\/p><\/div>\n<div class=\"explain\"><div class=\"t\">ADR<\/div><div class=\"s\">Precio medio por noche<\/div><p>Cu\u00e1nto paga de media cada noche vendida.<\/p><\/div>\n<div class=\"explain\"><div class=\"t\">RevPAR<\/div><div class=\"s\">Producci\u00f3n por noche disponible<\/div><p>Combina precio y ocupaci\u00f3n. Es la mejor lectura conjunta del rendimiento.<\/p><\/div>\n<div class=\"explain\"><div class=\"t\">Ocupaci\u00f3n<\/div><div class=\"s\">% de noches vendidas<\/div><p>Qu\u00e9 parte del calendario termin\u00f3 reservada.<\/p><\/div>\n<div class=\"explain\"><div class=\"t\">Noches<\/div><div class=\"s\">Noches vendidas<\/div><p>Volumen total de estancia producido.<\/p><\/div>\n<div class=\"explain\"><div class=\"t\">LOS<\/div><div class=\"s\">Duraci\u00f3n media<\/div><p>N\u00famero medio de noches por reserva.<\/p><\/div>\n<\/div>\n\n<div class=\"note\"><strong>Metodolog\u00eda:<\/strong> 2025 utiliza exclusivamente el hist\u00f3rico de Alaram que facilit\u00f3 el propietario. 2026 utiliza exclusivamente el Export de Villas Rivero del 19\/10\/2026. Los ingresos se imputan a los meses en los que realmente se disfrutan las noches. El RevPAR y la ocupaci\u00f3n se calculan sobre el calendario natural de las cuatro viviendas; no se han incorporado bloqueos.<\/div>\n<\/section>\n\n<section>\n<div class=\"two\">\n<div class=\"card\"><h3>Revenue mensual<\/h3><p class=\"lead\" style=\"margin-bottom:10px\">Abril\u2013diciembre 2025 vs 2026.<\/p><div class=\"chartbox\"><canvas id=\"revenueChart\"><\/canvas><\/div><\/div>\n<div class=\"card\"><h3>ADR vs RevPAR<\/h3><p class=\"lead\" style=\"margin-bottom:10px\">Precio medio frente a producci\u00f3n por noche disponible.<\/p><div class=\"chartbox\"><canvas id=\"adrRpChart\"><\/canvas><\/div><\/div>\n<\/div>\n<\/section>\n<\/div>\n\n<div class=\"pane\" id=\"meses\">\n<section>\n<div class=\"eyebrow\">Evoluci\u00f3n<\/div><h2>Mes a mes \u00b7 Alaram 1\u20134<\/h2>\n<p class=\"lead\">Abril\u2013septiembre est\u00e1n cerrados. Octubre est\u00e1 en curso y noviembre\u2013diciembre muestran la producci\u00f3n actualmente confirmada.<\/p>\n<div class=\"month-grid\" id=\"monthGrid\"><\/div>\n<\/section>\n<\/div>\n\n<div class=\"pane\" id=\"alojamientos\">\n<section>\n<div class=\"eyebrow\">Detalle por activo<\/div><h2>Alaram Holidays Home 1\u20134<\/h2>\n<p class=\"lead\">Comparativa del mismo periodo abril\u2013diciembre. 2026 todav\u00eda puede seguir creciendo.<\/p>\n<div class=\"table-wrap\"><table id=\"propertyTable\"><\/table><\/div>\n\n<div class=\"detail-card\">\n<div class=\"toolbar\"><label>Ver alojamiento<select id=\"propertySelect\"><\/select><\/label><\/div>\n<h3 id=\"detailName\"><\/h3>\n<div class=\"detail-kpis\" id=\"detailKpis\"><\/div>\n<div class=\"chartbox\" style=\"margin-top:16px\"><canvas id=\"propertyChart\"><\/canvas><\/div>\n<\/div>\n<\/section>\n<\/div>\n\n<div class=\"pane\" id=\"historico\">\n<section>\n<div class=\"eyebrow\">Comparativa<\/div><h2>2025 vs 2026<\/h2>\n<p class=\"lead\">Solo se utilizan los dos ejercicios solicitados. 2025 corresponde al hist\u00f3rico entregado; 2026 al \u00faltimo Export disponible.<\/p>\n<div class=\"hist-grid\" id=\"historyGrid\"><\/div>\n<div class=\"note\"><strong>Importante:<\/strong> 2026 no est\u00e1 cerrado. Octubre sigue en curso y noviembre\u2013diciembre todav\u00eda pueden incorporar nuevas reservas.<\/div>\n<\/section>\n<\/div>\n\n<\/div><\/main>\n<footer><div class=\"wrap\">Villas Rivero \u00b7 Alaram Holidays Home \u00b7 Actualizado 19\/10\/2026<\/div><\/footer>\n\n<script>\nconst D={\"updated\": \"19\/10\/2026\", \"months\": [\"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"], \"monthNums\": [4, 5, 6, 7, 8, 9, 10, 11, 12], \"period\": \"abril\u2013diciembre\", \"yearly\": {\"2025\": {\"revenue\": 30775.77, \"nights\": 352, \"reservations\": 72, \"adr\": 87.43, \"available\": 1100, \"revpar\": 27.98, \"occupancy\": 32.0, \"los\": 4.9}, \"2026\": {\"revenue\": 44078.45, \"nights\": 534, \"reservations\": 74, \"adr\": 82.54, \"available\": 1100, \"revpar\": 40.07, \"occupancy\": 48.5, \"los\": 7.2}}, \"closed\": {\"2025\": {\"revenue\": 12695.5, \"nights\": 178, \"adr\": 71.32, \"available\": 732, \"revpar\": 17.34, \"occupancy\": 24.3}, \"2026\": {\"revenue\": 21750.91, \"nights\": 320, \"adr\": 67.97, \"available\": 732, \"revpar\": 29.71, \"occupancy\": 43.7}}, \"future\": {\"revenue\": 22327.55, \"nights\": 214, \"adr\": 104.33}, \"monthly\": {\"4\": {\"2025\": {\"revenue\": 2064.14, \"nights\": 22, \"reservations\": 5, \"adr\": 93.82, \"available\": 120, \"revpar\": 17.2, \"occupancy\": 18.3}, \"2026\": {\"revenue\": 1084.81, \"nights\": 15, \"reservations\": 4, \"adr\": 72.32, \"available\": 120, \"revpar\": 9.04, \"occupancy\": 12.5}}, \"5\": {\"2025\": {\"revenue\": 2228.36, \"nights\": 31, \"reservations\": 7, \"adr\": 71.88, \"available\": 124, \"revpar\": 17.97, \"occupancy\": 25.0}, \"2026\": {\"revenue\": 2889.18, \"nights\": 42, \"reservations\": 8, \"adr\": 68.79, \"available\": 124, \"revpar\": 23.3, \"occupancy\": 33.9}}, \"6\": {\"2025\": {\"revenue\": 1071.0, \"nights\": 17, \"reservations\": 5, \"adr\": 63.0, \"available\": 120, \"revpar\": 8.93, \"occupancy\": 14.2}, \"2026\": {\"revenue\": 3234.68, \"nights\": 57, \"reservations\": 12, \"adr\": 56.75, \"available\": 120, \"revpar\": 26.96, \"occupancy\": 47.5}}, \"7\": {\"2025\": {\"revenue\": 2137.0, \"nights\": 32, \"reservations\": 9, \"adr\": 66.78, \"available\": 124, \"revpar\": 17.23, \"occupancy\": 25.8}, \"2026\": {\"revenue\": 4303.16, \"nights\": 56, \"reservations\": 13, \"adr\": 76.84, \"available\": 124, \"revpar\": 34.7, \"occupancy\": 45.2}}, \"8\": {\"2025\": {\"revenue\": 3529.0, \"nights\": 51, \"reservations\": 14, \"adr\": 69.2, \"available\": 124, \"revpar\": 28.46, \"occupancy\": 41.1}, \"2026\": {\"revenue\": 5485.15, \"nights\": 78, \"reservations\": 15, \"adr\": 70.32, \"available\": 124, \"revpar\": 44.24, \"occupancy\": 62.9}}, \"9\": {\"2025\": {\"revenue\": 1666.0, \"nights\": 25, \"reservations\": 6, \"adr\": 66.64, \"available\": 120, \"revpar\": 13.88, \"occupancy\": 20.8}, \"2026\": {\"revenue\": 4753.93, \"nights\": 72, \"reservations\": 8, \"adr\": 66.03, \"available\": 120, \"revpar\": 39.62, \"occupancy\": 60.0}}, \"10\": {\"2025\": {\"revenue\": 2180.32, \"nights\": 30, \"reservations\": 7, \"adr\": 72.68, \"available\": 124, \"revpar\": 17.58, \"occupancy\": 24.2}, \"2026\": {\"revenue\": 5667.02, \"nights\": 86, \"reservations\": 12, \"adr\": 65.9, \"available\": 124, \"revpar\": 45.7, \"occupancy\": 69.4}}, \"11\": {\"2025\": {\"revenue\": 7754.3, \"nights\": 71, \"reservations\": 11, \"adr\": 109.22, \"available\": 120, \"revpar\": 64.62, \"occupancy\": 59.2}, \"2026\": {\"revenue\": 8666.46, \"nights\": 71, \"reservations\": 8, \"adr\": 122.06, \"available\": 120, \"revpar\": 72.22, \"occupancy\": 59.2}}, \"12\": {\"2025\": {\"revenue\": 8145.65, \"nights\": 73, \"reservations\": 15, \"adr\": 111.58, \"available\": 124, \"revpar\": 65.69, \"occupancy\": 58.9}, \"2026\": {\"revenue\": 7994.07, \"nights\": 57, \"reservations\": 7, \"adr\": 140.25, \"available\": 124, \"revpar\": 64.47, \"occupancy\": 46.0}}}, \"properties\": {\"Alaram Holidays Home 1\": {\"2025\": {\"revenue\": 6180.68, \"nights\": 71, \"adr\": 87.05, \"revpar\": 22.48, \"occupancy\": 25.8, \"los\": 10.1, \"reservations\": 7}, \"2026\": {\"revenue\": 11222.95, \"nights\": 127, \"adr\": 88.37, \"revpar\": 40.81, \"occupancy\": 46.2, \"los\": 6.3, \"reservations\": 20}}, \"Alaram Holidays Home 2\": {\"2025\": {\"revenue\": 10202.0, \"nights\": 129, \"adr\": 79.09, \"revpar\": 37.1, \"occupancy\": 46.9, \"los\": 4.0, \"reservations\": 32}, \"2026\": {\"revenue\": 11602.54, \"nights\": 134, \"adr\": 86.59, \"revpar\": 42.19, \"occupancy\": 48.7, \"los\": 7.4, \"reservations\": 18}}, \"Alaram Holidays Home 3\": {\"2025\": {\"revenue\": 8171.6, \"nights\": 84, \"adr\": 97.28, \"revpar\": 29.71, \"occupancy\": 30.5, \"los\": 4.7, \"reservations\": 18}, \"2026\": {\"revenue\": 10849.2, \"nights\": 130, \"adr\": 83.46, \"revpar\": 39.45, \"occupancy\": 47.3, \"los\": 6.8, \"reservations\": 19}}, \"Alaram Holidays Home 4\": {\"2025\": {\"revenue\": 6221.49, \"nights\": 68, \"adr\": 91.49, \"revpar\": 22.62, \"occupancy\": 24.7, \"los\": 4.5, \"reservations\": 15}, \"2026\": {\"revenue\": 10403.75, \"nights\": 143, \"adr\": 72.75, \"revpar\": 37.83, \"occupancy\": 52.0, \"los\": 8.4, \"reservations\": 17}}}, \"propertyMonthly\": {\"Alaram Holidays Home 1\": {\"4\": {\"2025\": {\"revenue\": 1197.14, \"nights\": 13, \"reservations\": 2, \"adr\": 92.09, \"available\": 30, \"revpar\": 39.9, \"occupancy\": 43.3}, \"2026\": {\"revenue\": 366.25, \"nights\": 5, \"reservations\": 1, \"adr\": 73.25, \"available\": 30, \"revpar\": 12.21, \"occupancy\": 16.7}}, \"5\": {\"2025\": {\"revenue\": 662.86, \"nights\": 8, \"reservations\": 1, \"adr\": 82.86, \"available\": 31, \"revpar\": 21.38, \"occupancy\": 25.8}, \"2026\": {\"revenue\": 764.35, \"nights\": 11, \"reservations\": 2, \"adr\": 69.49, \"available\": 31, \"revpar\": 24.66, \"occupancy\": 35.5}}, \"6\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 822.29, \"nights\": 14, \"reservations\": 3, \"adr\": 58.73, \"available\": 30, \"revpar\": 27.41, \"occupancy\": 46.7}}, \"7\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 1025.89, \"nights\": 11, \"reservations\": 4, \"adr\": 93.26, \"available\": 31, \"revpar\": 33.09, \"occupancy\": 35.5}}, \"8\": {\"2025\": {\"revenue\": 420.0, \"nights\": 6, \"reservations\": 1, \"adr\": 70.0, \"available\": 31, \"revpar\": 13.55, \"occupancy\": 19.4}, \"2026\": {\"revenue\": 1206.06, \"nights\": 17, \"reservations\": 4, \"adr\": 70.94, \"available\": 31, \"revpar\": 38.91, \"occupancy\": 54.8}}, \"9\": {\"2025\": {\"revenue\": 560.0, \"nights\": 8, \"reservations\": 1, \"adr\": 70.0, \"available\": 30, \"revpar\": 18.67, \"occupancy\": 26.7}, \"2026\": {\"revenue\": 821.91, \"nights\": 11, \"reservations\": 2, \"adr\": 74.72, \"available\": 30, \"revpar\": 27.4, \"occupancy\": 36.7}}, \"10\": {\"2025\": {\"revenue\": 458.32, \"nights\": 5, \"reservations\": 1, \"adr\": 91.66, \"available\": 31, \"revpar\": 14.78, \"occupancy\": 16.1}, \"2026\": {\"revenue\": 1458.71, \"nights\": 23, \"reservations\": 3, \"adr\": 63.42, \"available\": 31, \"revpar\": 47.06, \"occupancy\": 74.2}}, \"11\": {\"2025\": {\"revenue\": 2108.29, \"nights\": 23, \"reservations\": 1, \"adr\": 91.66, \"available\": 30, \"revpar\": 70.28, \"occupancy\": 76.7}, \"2026\": {\"revenue\": 998.0, \"nights\": 7, \"reservations\": 1, \"adr\": 142.57, \"available\": 30, \"revpar\": 33.27, \"occupancy\": 23.3}}, \"12\": {\"2025\": {\"revenue\": 774.06, \"nights\": 8, \"reservations\": 2, \"adr\": 96.76, \"available\": 31, \"revpar\": 24.97, \"occupancy\": 25.8}, \"2026\": {\"revenue\": 3759.49, \"nights\": 28, \"reservations\": 3, \"adr\": 134.27, \"available\": 31, \"revpar\": 121.27, \"occupancy\": 90.3}}}, \"Alaram Holidays Home 2\": {\"4\": {\"2025\": {\"revenue\": 270.0, \"nights\": 3, \"reservations\": 1, \"adr\": 90.0, \"available\": 30, \"revpar\": 9.0, \"occupancy\": 10.0}, \"2026\": {\"revenue\": 273.72, \"nights\": 4, \"reservations\": 1, \"adr\": 68.43, \"available\": 30, \"revpar\": 9.12, \"occupancy\": 13.3}}, \"5\": {\"2025\": {\"revenue\": 693.0, \"nights\": 11, \"reservations\": 3, \"adr\": 63.0, \"available\": 31, \"revpar\": 22.35, \"occupancy\": 35.5}, \"2026\": {\"revenue\": 1090.58, \"nights\": 15, \"reservations\": 3, \"adr\": 72.71, \"available\": 31, \"revpar\": 35.18, \"occupancy\": 48.4}}, \"6\": {\"2025\": {\"revenue\": 1071.0, \"nights\": 17, \"reservations\": 5, \"adr\": 63.0, \"available\": 30, \"revpar\": 35.7, \"occupancy\": 56.7}, \"2026\": {\"revenue\": 610.4, \"nights\": 11, \"reservations\": 2, \"adr\": 55.49, \"available\": 30, \"revpar\": 20.35, \"occupancy\": 36.7}}, \"7\": {\"2025\": {\"revenue\": 1449.0, \"nights\": 23, \"reservations\": 6, \"adr\": 63.0, \"available\": 31, \"revpar\": 46.74, \"occupancy\": 74.2}, \"2026\": {\"revenue\": 698.56, \"nights\": 9, \"reservations\": 2, \"adr\": 77.62, \"available\": 31, \"revpar\": 22.53, \"occupancy\": 29.0}}, \"8\": {\"2025\": {\"revenue\": 1134.0, \"nights\": 18, \"reservations\": 5, \"adr\": 63.0, \"available\": 31, \"revpar\": 36.58, \"occupancy\": 58.1}, \"2026\": {\"revenue\": 1253.45, \"nights\": 14, \"reservations\": 4, \"adr\": 89.53, \"available\": 31, \"revpar\": 40.43, \"occupancy\": 45.2}}, \"9\": {\"2025\": {\"revenue\": 756.0, \"nights\": 12, \"reservations\": 4, \"adr\": 63.0, \"available\": 30, \"revpar\": 25.2, \"occupancy\": 40.0}, \"2026\": {\"revenue\": 1452.79, \"nights\": 21, \"reservations\": 3, \"adr\": 69.18, \"available\": 30, \"revpar\": 48.43, \"occupancy\": 70.0}}, \"10\": {\"2025\": {\"revenue\": 840.0, \"nights\": 11, \"reservations\": 3, \"adr\": 76.36, \"available\": 31, \"revpar\": 27.1, \"occupancy\": 35.5}, \"2026\": {\"revenue\": 1399.7, \"nights\": 24, \"reservations\": 2, \"adr\": 58.32, \"available\": 31, \"revpar\": 45.15, \"occupancy\": 77.4}}, \"11\": {\"2025\": {\"revenue\": 1500.0, \"nights\": 14, \"reservations\": 4, \"adr\": 107.14, \"available\": 30, \"revpar\": 50.0, \"occupancy\": 46.7}, \"2026\": {\"revenue\": 2708.25, \"nights\": 22, \"reservations\": 2, \"adr\": 123.1, \"available\": 30, \"revpar\": 90.28, \"occupancy\": 73.3}}, \"12\": {\"2025\": {\"revenue\": 2489.0, \"nights\": 20, \"reservations\": 4, \"adr\": 124.45, \"available\": 31, \"revpar\": 80.29, \"occupancy\": 64.5}, \"2026\": {\"revenue\": 2115.09, \"nights\": 14, \"reservations\": 2, \"adr\": 151.08, \"available\": 31, \"revpar\": 68.23, \"occupancy\": 45.2}}}, \"Alaram Holidays Home 3\": {\"4\": {\"2025\": {\"revenue\": 300.0, \"nights\": 3, \"reservations\": 1, \"adr\": 100.0, \"available\": 30, \"revpar\": 10.0, \"occupancy\": 10.0}, \"2026\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0}}, \"5\": {\"2025\": {\"revenue\": 490.0, \"nights\": 7, \"reservations\": 2, \"adr\": 70.0, \"available\": 31, \"revpar\": 15.81, \"occupancy\": 22.6}, \"2026\": {\"revenue\": 571.8, \"nights\": 8, \"reservations\": 2, \"adr\": 71.48, \"available\": 31, \"revpar\": 18.45, \"occupancy\": 25.8}}, \"6\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 1082.4, \"nights\": 18, \"reservations\": 4, \"adr\": 60.13, \"available\": 30, \"revpar\": 36.08, \"occupancy\": 60.0}}, \"7\": {\"2025\": {\"revenue\": 490.0, \"nights\": 7, \"reservations\": 2, \"adr\": 70.0, \"available\": 31, \"revpar\": 15.81, \"occupancy\": 22.6}, \"2026\": {\"revenue\": 1334.65, \"nights\": 20, \"reservations\": 2, \"adr\": 66.73, \"available\": 31, \"revpar\": 43.05, \"occupancy\": 64.5}}, \"8\": {\"2025\": {\"revenue\": 1120.0, \"nights\": 16, \"reservations\": 5, \"adr\": 70.0, \"available\": 31, \"revpar\": 36.13, \"occupancy\": 51.6}, \"2026\": {\"revenue\": 1474.97, \"nights\": 23, \"reservations\": 2, \"adr\": 64.13, \"available\": 31, \"revpar\": 47.58, \"occupancy\": 74.2}}, \"9\": {\"2025\": {\"revenue\": 350.0, \"nights\": 5, \"reservations\": 1, \"adr\": 70.0, \"available\": 30, \"revpar\": 11.67, \"occupancy\": 16.7}, \"2026\": {\"revenue\": 802.2, \"nights\": 10, \"reservations\": 2, \"adr\": 80.22, \"available\": 30, \"revpar\": 26.74, \"occupancy\": 33.3}}, \"10\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 1488.86, \"nights\": 20, \"reservations\": 4, \"adr\": 74.44, \"available\": 31, \"revpar\": 48.03, \"occupancy\": 64.5}}, \"11\": {\"2025\": {\"revenue\": 2760.0, \"nights\": 23, \"reservations\": 4, \"adr\": 120.0, \"available\": 30, \"revpar\": 92.0, \"occupancy\": 76.7}, \"2026\": {\"revenue\": 2256.36, \"nights\": 18, \"reservations\": 3, \"adr\": 125.35, \"available\": 30, \"revpar\": 75.21, \"occupancy\": 60.0}}, \"12\": {\"2025\": {\"revenue\": 2661.6, \"nights\": 23, \"reservations\": 5, \"adr\": 115.72, \"available\": 31, \"revpar\": 85.86, \"occupancy\": 74.2}, \"2026\": {\"revenue\": 1837.96, \"nights\": 13, \"reservations\": 1, \"adr\": 141.38, \"available\": 31, \"revpar\": 59.29, \"occupancy\": 41.9}}}, \"Alaram Holidays Home 4\": {\"4\": {\"2025\": {\"revenue\": 297.0, \"nights\": 3, \"reservations\": 1, \"adr\": 99.0, \"available\": 30, \"revpar\": 9.9, \"occupancy\": 10.0}, \"2026\": {\"revenue\": 444.84, \"nights\": 6, \"reservations\": 2, \"adr\": 74.14, \"available\": 30, \"revpar\": 14.83, \"occupancy\": 20.0}}, \"5\": {\"2025\": {\"revenue\": 382.5, \"nights\": 5, \"reservations\": 1, \"adr\": 76.5, \"available\": 31, \"revpar\": 12.34, \"occupancy\": 16.1}, \"2026\": {\"revenue\": 462.45, \"nights\": 8, \"reservations\": 1, \"adr\": 57.81, \"available\": 31, \"revpar\": 14.92, \"occupancy\": 25.8}}, \"6\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 719.6, \"nights\": 14, \"reservations\": 3, \"adr\": 51.4, \"available\": 30, \"revpar\": 23.99, \"occupancy\": 46.7}}, \"7\": {\"2025\": {\"revenue\": 198.0, \"nights\": 2, \"reservations\": 1, \"adr\": 99.0, \"available\": 31, \"revpar\": 6.39, \"occupancy\": 6.5}, \"2026\": {\"revenue\": 1244.05, \"nights\": 16, \"reservations\": 5, \"adr\": 77.75, \"available\": 31, \"revpar\": 40.13, \"occupancy\": 51.6}}, \"8\": {\"2025\": {\"revenue\": 855.0, \"nights\": 11, \"reservations\": 3, \"adr\": 77.73, \"available\": 31, \"revpar\": 27.58, \"occupancy\": 35.5}, \"2026\": {\"revenue\": 1550.67, \"nights\": 24, \"reservations\": 5, \"adr\": 64.61, \"available\": 31, \"revpar\": 50.02, \"occupancy\": 77.4}}, \"9\": {\"2025\": {\"revenue\": 0.0, \"nights\": 0, \"reservations\": 0, \"adr\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0}, \"2026\": {\"revenue\": 1677.03, \"nights\": 30, \"reservations\": 1, \"adr\": 55.9, \"available\": 30, \"revpar\": 55.9, \"occupancy\": 100.0}}, \"10\": {\"2025\": {\"revenue\": 882.0, \"nights\": 14, \"reservations\": 3, \"adr\": 63.0, \"available\": 31, \"revpar\": 28.45, \"occupancy\": 45.2}, \"2026\": {\"revenue\": 1319.75, \"nights\": 19, \"reservations\": 3, \"adr\": 69.46, \"available\": 31, \"revpar\": 42.57, \"occupancy\": 61.3}}, \"11\": {\"2025\": {\"revenue\": 1386.0, \"nights\": 11, \"reservations\": 2, \"adr\": 126.0, \"available\": 30, \"revpar\": 46.2, \"occupancy\": 36.7}, \"2026\": {\"revenue\": 2703.84, \"nights\": 24, \"reservations\": 2, \"adr\": 112.66, \"available\": 30, \"revpar\": 90.13, \"occupancy\": 80.0}}, \"12\": {\"2025\": {\"revenue\": 2220.99, \"nights\": 22, \"reservations\": 4, \"adr\": 100.95, \"available\": 31, \"revpar\": 71.64, \"occupancy\": 71.0}, \"2026\": {\"revenue\": 281.52, \"nights\": 2, \"reservations\": 1, \"adr\": 140.76, \"available\": 31, \"revpar\": 9.08, \"occupancy\": 6.5}}}}};\nconst euro=n=>new Intl.NumberFormat('es-ES',{style:'currency',currency:'EUR',maximumFractionDigits:0}).format(n||0);\nconst euro2=n=>new Intl.NumberFormat('es-ES',{style:'currency',currency:'EUR',minimumFractionDigits:2,maximumFractionDigits:2}).format(n||0);\nconst num=n=>new Intl.NumberFormat('es-ES').format(Math.round(n||0));\nconst change=(a,b)=>a?((b\/a)-1)*100:0;\nconst p1=n=>(n>=0?'+':'')+n.toFixed(1)+'%';\nconst cls=n=>n>=0?'pos':'neg';\nconst Y25=D.yearly['2025'],Y26=D.yearly['2026'],C25=D.closed['2025'],C26=D.closed['2026'];\n\ndocument.querySelectorAll('.nav button').forEach(b=>b.onclick=()=>{\n document.querySelectorAll('.nav button').forEach(x=>x.classList.remove('on'));\n document.querySelectorAll('.pane').forEach(x=>x.classList.remove('on'));\n b.classList.add('on');document.getElementById(b.dataset.pane).classList.add('on');window.scrollTo({top:0,behavior:'smooth'});\n});\n\nconst revCh=change(Y25.revenue,Y26.revenue),nCh=change(Y25.nights,Y26.nights),rpCh=change(Y25.revpar,Y26.revpar);\nheroRevenue.textContent=p1(revCh); rev25.textContent=euro(Y25.revenue); rev26.textContent=euro(Y26.revenue);\nheroNights.textContent=p1(nCh); n25.textContent=num(Y25.nights); n26.textContent=num(Y26.nights);\nheroRevpar.textContent=p1(rpCh); rp25.textContent=euro2(Y25.revpar); rp26.textContent=euro2(Y26.revpar);\nfutureRevenue.textContent=euro(D.future.revenue); futureNights.textContent=num(D.future.nights);\n\nadrVals.textContent=euro2(Y25.adr)+' \u2192 '+euro2(Y26.adr);\nconst adrCh=change(Y25.adr,Y26.adr); adrDelta.textContent=p1(adrCh); adrDelta.className='delta '+(adrCh>=0?'up':'dn');\noccVals.textContent=Y25.occupancy.toFixed(1)+'% \u2192 '+Y26.occupancy.toFixed(1)+'%';\noccDelta.textContent='+'+(Y26.occupancy-Y25.occupancy).toFixed(1)+' pp';\nlosVals.textContent=Y25.los.toFixed(1)+' \u2192 '+Y26.los.toFixed(1)+' noches';\nconst losCh=change(Y25.los,Y26.los); losDelta.textContent=p1(losCh); losDelta.className='delta '+(losCh>=0?'up':'dn');\nclosedVals.textContent=euro(C25.revenue)+' \u2192 '+euro(C26.revenue); closedDelta.textContent=p1(change(C25.revenue,C26.revenue));\nreservationsVals.textContent=num(Y25.reservations)+' \u2192 '+num(Y26.reservations);\nconst resCh=change(Y25.reservations,Y26.reservations); reservationsDelta.textContent=p1(resCh); reservationsDelta.className='delta '+(resCh>=0?'up':'dn');\n\nreadClosed25.textContent=euro(C25.revenue); readClosed26.textContent=euro(C26.revenue);\nreadClosedChange.textContent=p1(change(C25.revenue,C26.revenue));\nreadYearChange.textContent=p1(revCh); readOcc25.textContent=Y25.occupancy.toFixed(1)+'%'; readOcc26.textContent=Y26.occupancy.toFixed(1)+'%';\n\nChart.defaults.font.family='Arial, Helvetica, sans-serif';\nChart.defaults.color='#6D6962';\n\nnew Chart(revenueChart,{\n type:'bar',\n data:{labels:D.months,datasets:[\n  {label:'2025',data:D.monthNums.map(m=>D.monthly[String(m)]['2025'].revenue),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'2026',data:D.monthNums.map(m=>D.monthly[String(m)]['2026'].revenue),backgroundColor:'#4ABCC5',borderRadius:3}\n ]},\n options:{maintainAspectRatio:false,plugins:{legend:{position:'bottom',labels:{boxWidth:10}},tooltip:{callbacks:{label:x=>x.dataset.label+': '+euro(x.raw)}}},scales:{y:{grid:{color:'#EFEBE5'},ticks:{callback:v=>euro(v)}},x:{grid:{display:false}}}}\n});\n\nnew Chart(adrRpChart,{\n type:'bar',\n data:{labels:['ADR','RevPAR'],datasets:[\n  {label:'2025',data:[Y25.adr,Y25.revpar],backgroundColor:'#D1B38C',borderRadius:4},\n  {label:'2026',data:[Y26.adr,Y26.revpar],backgroundColor:'#4ABCC5',borderRadius:4}\n ]},\n options:{maintainAspectRatio:false,plugins:{legend:{position:'bottom',labels:{boxWidth:10}}},scales:{y:{grid:{color:'#EFEBE5'},ticks:{callback:v=>v+' \u20ac'}},x:{grid:{display:false}}}}\n});\n\nD.monthNums.forEach((m,i)=>{\n const name=D.months[i],a=D.monthly[String(m)]['2025'],b=D.monthly[String(m)]['2026'];\n const ch=change(a.revenue,b.revenue);\n const closed=m<=9, live=m===10;\n const css=closed?'closed':live?'live':'future';\n const status=closed?'Mes cerrado \u00b7 comparaci\u00f3n directa':live?'Mes en curso':'Reservas confirmadas';\n const message=closed?(ch>=0?'\u25b2 '+p1(ch):'\u25bc '+Math.abs(ch).toFixed(1)+'%'):(b.revenue>=a.revenue?'Ya supera 2025':'Todav\u00eda puede crecer');\n monthGrid.insertAdjacentHTML('beforeend',`<div class=\"month ${css}\">\n  <div class=\"mname\">${name}<\/div><div class=\"status\">${status}<\/div>\n  <div class=\"compare\"><div class=\"box\"><div class=\"yr\">2025<\/div><div class=\"val\">${euro(a.revenue)}<\/div><\/div><div class=\"box\"><div class=\"yr\">2026<\/div><div class=\"val\">${euro(b.revenue)}<\/div><\/div><\/div>\n  <div class=\"result ${closed?(ch>=0?'good':'bad'):'neutral'}\">${message}<\/div>\n  <div class=\"metric-grid\">\n   <div class=\"micro\"><div class=\"l\">ADR 2026<\/div><div class=\"v\">${euro2(b.adr)}<\/div><div class=\"sub\">2025: ${euro2(a.adr)}<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">RevPAR 2026<\/div><div class=\"v\">${euro2(b.revpar)}<\/div><div class=\"sub\">2025: ${euro2(a.revpar)}<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">Ocupaci\u00f3n 2026<\/div><div class=\"v\">${b.occupancy.toFixed(1)}%<\/div><div class=\"sub\">2025: ${a.occupancy.toFixed(1)}%<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">Noches 2026<\/div><div class=\"v\">${num(b.nights)}<\/div><div class=\"sub\">2025: ${num(a.nights)}<\/div><\/div>\n  <\/div>\n <\/div>`);\n});\n\nconst props=Object.keys(D.properties);\npropertyTable.innerHTML=`<thead><tr><th>Alojamiento<\/th><th>Revenue 2025<\/th><th>Revenue 2026<\/th><th>Variaci\u00f3n<\/th><th>Noches<\/th><th>ADR<\/th><th>RevPAR<\/th><th>Ocupaci\u00f3n<\/th><th>LOS<\/th><\/tr><\/thead><tbody>`+\nprops.map(p=>{\n const a=D.properties[p]['2025'],b=D.properties[p]['2026'],ch=change(a.revenue,b.revenue);\n return `<tr><td><strong>${p}<\/strong><\/td><td>${euro(a.revenue)}<\/td><td>${euro(b.revenue)}<\/td><td class=\"${cls(ch)}\">${p1(ch)}<\/td><td>${num(b.nights)}<\/td><td>${euro2(b.adr)}<\/td><td class=\"rp\">${euro2(b.revpar)}<\/td><td>${b.occupancy.toFixed(1)}%<\/td><td>${b.los.toFixed(1)}<\/td><\/tr>`;\n}).join('')+`<\/tbody>`;\n\nprops.forEach(p=>propertySelect.insertAdjacentHTML('beforeend',`<option>${p}<\/option>`));\n\nlet propChart=null;\nfunction renderProperty(){\n const p=propertySelect.value,a=D.properties[p]['2025'],b=D.properties[p]['2026'],ch=change(a.revenue,b.revenue);\n detailName.textContent=p;\n detailKpis.innerHTML=`\n <div class=\"dk\"><div class=\"l\">Revenue 2026<\/div><div class=\"v\">${euro(b.revenue)}<\/div><div class=\"s\">${p1(ch)} vs 2025<\/div><\/div>\n <div class=\"dk\"><div class=\"l\">Noches<\/div><div class=\"v\">${num(b.nights)}<\/div><div class=\"s\">2025: ${num(a.nights)}<\/div><\/div>\n <div class=\"dk\"><div class=\"l\">ADR<\/div><div class=\"v\">${euro2(b.adr)}<\/div><div class=\"s\">2025: ${euro2(a.adr)}<\/div><\/div>\n <div class=\"dk\"><div class=\"l\">RevPAR<\/div><div class=\"v\">${euro2(b.revpar)}<\/div><div class=\"s\">2025: ${euro2(a.revpar)}<\/div><\/div>\n <div class=\"dk\"><div class=\"l\">Ocupaci\u00f3n<\/div><div class=\"v\">${b.occupancy.toFixed(1)}%<\/div><div class=\"s\">2025: ${a.occupancy.toFixed(1)}%<\/div><\/div>\n <div class=\"dk\"><div class=\"l\">LOS<\/div><div class=\"v\">${b.los.toFixed(1)} noches<\/div><div class=\"s\">2025: ${a.los.toFixed(1)}<\/div><\/div>`;\n if(propChart)propChart.destroy();\n propChart=new Chart(propertyChart,{type:'bar',data:{labels:D.months,datasets:[\n  {label:'2025',data:D.monthNums.map(m=>D.propertyMonthly[p][String(m)]['2025'].revenue),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'2026',data:D.monthNums.map(m=>D.propertyMonthly[p][String(m)]['2026'].revenue),backgroundColor:'#4ABCC5',borderRadius:3}\n ]},options:{maintainAspectRatio:false,plugins:{legend:{position:'bottom'},tooltip:{callbacks:{label:x=>x.dataset.label+': '+euro(x.raw)}}},scales:{y:{grid:{color:'#EFEBE5'},ticks:{callback:v=>euro(v)}},x:{grid:{display:false}}}}});\n}\npropertySelect.onchange=renderProperty;renderProperty();\n\n['2025','2026'].forEach(y=>{\n const x=D.yearly[y];\n historyGrid.insertAdjacentHTML('beforeend',`<div class=\"hist-card\"><div class=\"year\">${y}${y==='2026'?' \u00b7 OTB':''}<\/div><div class=\"money\">${euro(x.revenue)}<\/div><div class=\"small\">ADR ${euro2(x.adr)} \u00b7 RevPAR ${euro2(x.revpar)} \u00b7 Ocupaci\u00f3n ${x.occupancy.toFixed(1)}% \u00b7 ${num(x.nights)} noches<\/div><\/div>`);\n});\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\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>Alaram Holidays Home \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard Alaram Holidays Home 4 alojamientos2025 hist\u00f3rico \u00b7 2026 producci\u00f3n actualActualizado \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamientos Comparativa 2025\u20132026 Visi\u00f3n global Situaci\u00f3n general Comparaci\u00f3n homog\u00e9nea: abril\u2013diciembre El hist\u00f3rico 2025 disponible comienza en abril. Por eso la comparaci\u00f3n principal utiliza exactamente el mismo periodo en ambos [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-1511","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dashboard Alaram - Villas Rivero<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/villasrivero.com\/en\/dashboard-alaram\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dashboard Alaram - Villas Rivero\" \/>\n<meta property=\"og:description\" content=\"Alaram Holidays Home \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard Alaram Holidays Home 4 alojamientos2025 hist\u00f3rico \u00b7 2026 producci\u00f3n actualActualizado \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamientos Comparativa 2025\u20132026 Visi\u00f3n global Situaci\u00f3n general Comparaci\u00f3n homog\u00e9nea: abril\u2013diciembre El hist\u00f3rico 2025 disponible comienza en abril. Por eso la comparaci\u00f3n principal utiliza exactamente el mismo periodo en ambos [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/villasrivero.com\/en\/dashboard-alaram\/\" \/>\n<meta property=\"og:site_name\" content=\"Villas Rivero\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-27T16:53:44+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-alaram\\\/\",\"url\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-alaram\\\/\",\"name\":\"Dashboard Alaram - Villas Rivero\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/villasrivero.com\\\/#website\"},\"datePublished\":\"2026-08-10T14:52:33+00:00\",\"dateModified\":\"2026-10-27T16:53:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-alaram\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/villasrivero.com\\\/dashboard-alaram\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-alaram\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/villasrivero.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dashboard Alaram\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/villasrivero.com\\\/#website\",\"url\":\"https:\\\/\\\/villasrivero.com\\\/\",\"name\":\"Villas Rivero\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/villasrivero.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dashboard Alaram - Villas Rivero","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/villasrivero.com\/en\/dashboard-alaram\/","og_locale":"en_GB","og_type":"article","og_title":"Dashboard Alaram - Villas Rivero","og_description":"Alaram Holidays Home \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard Alaram Holidays Home 4 alojamientos2025 hist\u00f3rico \u00b7 2026 producci\u00f3n actualActualizado \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamientos Comparativa 2025\u20132026 Visi\u00f3n global Situaci\u00f3n general Comparaci\u00f3n homog\u00e9nea: abril\u2013diciembre El hist\u00f3rico 2025 disponible comienza en abril. Por eso la comparaci\u00f3n principal utiliza exactamente el mismo periodo en ambos [&hellip;]","og_url":"https:\/\/villasrivero.com\/en\/dashboard-alaram\/","og_site_name":"Villas Rivero","article_modified_time":"2026-10-27T16:53:44+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/villasrivero.com\/dashboard-alaram\/","url":"https:\/\/villasrivero.com\/dashboard-alaram\/","name":"Dashboard Alaram - Villas Rivero","isPartOf":{"@id":"https:\/\/villasrivero.com\/#website"},"datePublished":"2026-08-10T14:52:33+00:00","dateModified":"2026-10-27T16:53:44+00:00","breadcrumb":{"@id":"https:\/\/villasrivero.com\/dashboard-alaram\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/villasrivero.com\/dashboard-alaram\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/villasrivero.com\/dashboard-alaram\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/villasrivero.com\/"},{"@type":"ListItem","position":2,"name":"Dashboard Alaram"}]},{"@type":"WebSite","@id":"https:\/\/villasrivero.com\/#website","url":"https:\/\/villasrivero.com\/","name":"Villas Rivero","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/villasrivero.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"}]}},"_links":{"self":[{"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages\/1511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/comments?post=1511"}],"version-history":[{"count":16,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages\/1511\/revisions"}],"predecessor-version":[{"id":1772,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages\/1511\/revisions\/1772"}],"wp:attachment":[{"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/media?parent=1511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}