{"id":1773,"date":"2026-10-28T16:43:42","date_gmt":"2026-10-28T16:43:42","guid":{"rendered":"https:\/\/villasrivero.com\/?page_id=1773"},"modified":"2026-10-28T16:44:04","modified_gmt":"2026-10-28T16:44:04","slug":"dashboard-laescuela","status":"publish","type":"page","link":"https:\/\/villasrivero.com\/en\/dashboard-laescuela\/","title":{"rendered":"Dashboard La escuela de la Sorrueda"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1773\" class=\"elementor elementor-1773\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-33ab041 e-flex e-con-boxed e-con e-parent\" data-id=\"33ab041\" 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-a9501d0 elementor-widget elementor-widget-html\" data-id=\"a9501d0\" 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>La escuela de La Sorrueda \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.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)}.neutral-txt{color:var(--muted)}\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.callout{background:var(--upbg);border-left:4px solid var(--up);border-radius:0 8px 8px 0;padding:17px 18px;font-size:13px;color:#3F5147}\n.callout strong{color:#2D6E3D}\n.note{background:#FBF6EE;border-left:4px solid var(--sand);padding:15px 18px;border-radius:0 7px 7px 0;font-size:12.5px;color:#554F48}\n.note strong{color:var(--navy)}\n\n.growth-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:16px}\n.growth-card{background:#fff;border:1px solid var(--line);border-radius:9px;padding:18px}\n.growth-card .lab{font-size:9px;text-transform:uppercase;color:var(--muted);letter-spacing:.8px}\n.growth-card .val{font-family:Georgia,serif;font-size:27px;color:var(--navy);margin:5px 0}\n.growth-card p{font-size:11px;color:#5B5750;margin:0}\n\n.block-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px}\n.block-kpi{background:#F8F7F4;border-radius:8px;padding:15px}\n.block-kpi .l{font-size:9px;text-transform:uppercase;color:var(--muted)}\n.block-kpi .v{font-family:Georgia,serif;font-size:24px;color:var(--navy);margin-top:4px}\n.block-kpi .s{font-size:10px;color:var(--muted);margin-top:3px}\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:325px}\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.blockline{margin-top:9px;padding:9px 10px;border-radius:6px;background:#F3F1EC;font-size:10.5px;color:#554F48}\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,.toolbar input{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.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:980px}\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.badge{display:inline-block;padding:3px 7px;border-radius:20px;font-size:9px;font-weight:700}\n.badge.new{background:var(--bluebg);color:#2C7680}.badge.old{background:#F3F1EC;color:#6C675F}\n.rp{background:#F8FCF9;color:#2D6E3D;font-weight:700}\n.neg{color:var(--dn);font-weight:700}.pos{color:var(--up);font-weight:700}\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.history-grid{display:grid;grid-template-columns:repeat(3,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 .count{font-size:10px;color:var(--muted)}\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.history-controls{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.3fr;gap:10px;margin:18px 0}\n.history-controls label{font-size:9px;text-transform:uppercase;color:var(--muted);font-weight:700}\n.history-controls select{width:100%;margin-top:5px;border:1px solid var(--line);background:#fff;border-radius:6px;padding:10px;color:var(--navy)}\n.history-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}\n.hk{background:#F8F7F4;border-radius:7px;padding:12px}.hk .l{font-size:8px;text-transform:uppercase;color:var(--muted)}.hk .pair{font-family:Georgia,serif;font-size:17px;color:var(--navy);margin:4px 0}.hk .chg{font-size:10px;font-weight:700}\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,.block-grid,.growth-grid{grid-template-columns:1fr 1fr}.month-grid{grid-template-columns:1fr 1fr}.detail-kpis{grid-template-columns:repeat(3,1fr)}.history-grid{grid-template-columns:1fr 1fr}.history-controls{grid-template-columns:1fr 1fr}.history-kpis{grid-template-columns:1fr 1fr}.two{grid-template-columns:1fr}}\n@media(max-width:620px){.wrap{padding:0 15px}.meta{text-align:left}.hero-grid,.kpis,.block-grid,.growth-grid,.month-grid,.detail-kpis,.history-grid,.history-controls,.history-kpis{grid-template-columns:1fr}}\n<\/style>\n<\/head>\n<body>\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>La escuela de La Sorrueda<\/h1><\/div>\n<div class=\"meta\"><b>1 alojamiento<\/b><br>2025 cerrado \u00b7 2026 todav\u00eda abierto<br>Datos actualizados \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\">Alojamiento<\/button>\n<button data-pane=\"historico\">Hist\u00f3rico 2024\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<p class=\"lead\">2025 est\u00e1 cerrado. 2026 incluye toda la producci\u00f3n ya confirmada hasta final de a\u00f1o y todav\u00eda puede seguir creciendo.<\/p>\n<div class=\"hero\">\n<div class=\"hero-title\">2025 completo vs 2026 a fecha de hoy<\/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 todav\u00eda est\u00e1 abierto. El alojamiento ya supera el revenue total de 2025, mientras ADR, RevPAR y ocupaci\u00f3n tambi\u00e9n mejoran. Octubre est\u00e1 en curso y noviembre\u2013diciembre todav\u00eda pueden seguir creciendo.<\/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\" 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\">Noches de calendario<\/div><div class=\"vals\" id=\"blockedVals\"><\/div><div class=\"delta\" id=\"blockedDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"lab\">Reservas<\/div><div class=\"vals\" id=\"activeVals\"><\/div><div class=\"delta\" id=\"activeDelta\"><\/div><\/div>\n<\/div>\n<\/section>\n\n<section>\n<div class=\"eyebrow\">Evoluci\u00f3n<\/div>\n<h2>C\u00f3mo est\u00e1 evolucionando el alojamiento<\/h2>\n<p class=\"lead\">Aqu\u00ed comparamos el mismo alojamiento en 2025 y 2026. As\u00ed podemos distinguir el crecimiento real del rendimiento sin mezclarlo con nuevas incorporaciones de cartera.<\/p>\n<div class=\"growth-grid\">\n<div class=\"growth-card\"><div class=\"lab\">Revenue total<\/div><div class=\"val\" id=\"totalGrowth\"><\/div><p>2025 completo frente a la producci\u00f3n 2026 ya confirmada.<\/p><\/div>\n<div class=\"growth-card\"><div class=\"lab\">ADR<\/div><div class=\"val\" id=\"adrGrowth\"><\/div><p>Evoluci\u00f3n del precio medio por noche vendida.<\/p><\/div>\n<div class=\"growth-card\"><div class=\"lab\">Enero\u2013septiembre cerrado<\/div><div class=\"val\" id=\"coreGrowth\"><\/div><p>Comparaci\u00f3n del mismo periodo ya cerrado en ambos a\u00f1os.<\/p><\/div>\n<\/div>\n<\/section>\n\n<section>\n<div class=\"eyebrow\">Rendimiento del calendario<\/div>\n<h2>Qu\u00e9 produce cada noche disponible<\/h2>\n<p class=\"lead\">El an\u00e1lisis utiliza el calendario natural del alojamiento. Este Export no incluye bloqueos, por lo que RevPAR y ocupaci\u00f3n no est\u00e1n ajustados por cierres del propietario.<\/p>\n<div class=\"block-grid\">\n<div class=\"block-kpi\"><div class=\"l\">Calendario 2025<\/div><div class=\"v\" id=\"block25\"><\/div><div class=\"s\" id=\"blockPct25\"><\/div><\/div>\n<div class=\"block-kpi\"><div class=\"l\">Calendario 2026<\/div><div class=\"v\" id=\"block26\"><\/div><div class=\"s\" id=\"blockPct26\"><\/div><\/div>\n<div class=\"block-kpi\"><div class=\"l\">RevPAR 2025<\/div><div class=\"v\" id=\"revpar25b\"><\/div><div class=\"s\">a\u00f1o cerrado<\/div><\/div>\n<div class=\"block-kpi\"><div class=\"l\">RevPAR 2026<\/div><div class=\"v\" id=\"revpar26b\"><\/div><div class=\"s\">producci\u00f3n confirmada<\/div><\/div>\n<\/div>\n<div class=\"callout\" id=\"blockRead\"><\/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\">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\">La diferencia entre precio medio y producci\u00f3n real 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 La escuela de La Sorrueda<\/h2>\n<p class=\"lead\">Enero\u2013septiembre est\u00e1n cerrados. Octubre est\u00e1 en curso y noviembre\u2013diciembre muestran \u00fanicamente la producci\u00f3n ya reservada.<\/p>\n<div class=\"month-grid\" id=\"monthGrid\"><\/div>\n<\/section>\n\n<section>\n<div class=\"eyebrow\">Detalle mensual<\/div><h2>Lectura de cada mes<\/h2>\n<p class=\"lead\">Selecciona un mes para ver Revenue, noches, ADR, RevPAR, ocupaci\u00f3n y LOS del alojamiento.<\/p>\n<div class=\"toolbar\">\n<label>Mes<select id=\"monthSelect\"><\/select><\/label>\n<label>Buscar alojamiento<input id=\"monthSearch\" placeholder=\"Buscar...\"><\/label>\n<\/div>\n<div class=\"table-wrap\"><table id=\"monthPropertyTable\"><\/table><\/div>\n<\/section>\n<\/div>\n\n<div class=\"pane\" id=\"alojamientos\">\n<section>\n<div class=\"eyebrow\">Detalle del activo<\/div><h2>La escuela de La Sorrueda<\/h2>\n<p class=\"lead\">2026 incluye reservas futuras ya confirmadas. La comparaci\u00f3n utiliza el mismo alojamiento en ambos ejercicios.<\/p>\n<div class=\"toolbar\">\n<label>Buscar<input id=\"propertySearch\" placeholder=\"Buscar alojamiento...\"><\/label>\n<label>Ordenar por<select id=\"propertySort\">\n<option value=\"rev26\">Revenue 2026<\/option>\n<option value=\"change\">Variaci\u00f3n revenue<\/option>\n<option value=\"adr\">ADR 2026<\/option>\n<option value=\"revpar\">RevPAR 2026<\/option>\n<option value=\"nights\">Noches 2026<\/option>\n<\/select><\/label>\n<\/div>\n<div class=\"table-wrap\"><table id=\"propertyTable\"><\/table><\/div>\n\n<div class=\"detail-card\">\n<div class=\"toolbar\" style=\"margin-top:0\"><label>Ver alojamiento<select id=\"propertyDetailSelect\"><\/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\">Consulta hist\u00f3rica<\/div><h2>Hist\u00f3rico 2024\u20132026 \u00b7 La escuela de La Sorrueda<\/h2>\n<p class=\"lead\">Consulta la evoluci\u00f3n hist\u00f3rica del mismo alojamiento entre 2024, 2025 y 2026.<\/p>\n<div class=\"history-grid\" id=\"historyGrid\"><\/div>\n\n<div class=\"history-controls\">\n<label>Alcance<select id=\"histScope\"><option value=\"portfolio\">La escuela de La Sorrueda<\/option><\/select><\/label>\n<label>A\u00f1o A<select id=\"histYearA\"><option>2024<\/option><option>2025<\/option><option>2026<\/option><\/select><\/label>\n<label>A\u00f1o B<select id=\"histYearB\"><option>2025<\/option><option>2024<\/option><option>2026<\/option><\/select><\/label>\n<label>Periodo<select id=\"histPeriod\"><option value=\"year\">A\u00f1o completo<\/option><\/select><\/label>\n<\/div>\n<div class=\"history-kpis\" id=\"historyKpis\"><\/div>\n<div class=\"note\" style=\"margin-top:14px\"><strong>Importante:<\/strong> 2026 todav\u00eda est\u00e1 abierto. RevPAR y ocupaci\u00f3n se calculan sobre calendario natural; el Export actual no incluye bloqueos.<\/div>\n<\/section>\n<\/div>\n\n<\/div><\/main>\n<footer><div class=\"wrap\">Villas Rivero \u00b7 La escuela de La Sorrueda \u00b7 Actualizado 19\/10\/2026<\/div><\/footer>\n\n<script>\nconst D={\"meta\": {\"updated\": \"19\/10\/2026\", \"active2024\": 1, \"active2025\": 1, \"active2026\": 1, \"new2026\": []}, \"months\": [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"], \"globalYear\": {\"2024\": {\"revenue\": 6998.0, \"nights\": 83, \"adr\": 84.31, \"los\": 11.86, \"blocked\": 0, \"sellable\": 366, \"available\": 366, \"revpar\": 19.12, \"occupancy\": 22.68, \"active_props\": 1, \"stays\": 7}, \"2025\": {\"revenue\": 14494.39, \"nights\": 145, \"adr\": 99.96, \"los\": 6.59, \"blocked\": 0, \"sellable\": 365, \"available\": 365, \"revpar\": 39.71, \"occupancy\": 39.73, \"active_props\": 1, \"stays\": 22}, \"2026\": {\"revenue\": 19678.93, \"nights\": 194, \"adr\": 101.44, \"los\": 6.47, \"blocked\": 0, \"sellable\": 365, \"available\": 365, \"revpar\": 53.91, \"occupancy\": 53.15, \"active_props\": 1, \"stays\": 30}}, \"globalMonthly\": {\"2024\": {\"1\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"2\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 29, \"units\": 29, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"3\": {\"revenue\": 1777.0, \"nights\": 21, \"adr\": 84.62, \"los\": 21, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 57.32, \"occupancy\": 67.74, \"stays\": 1}, \"4\": {\"revenue\": 1471.82, \"nights\": 18, \"adr\": 81.77, \"los\": 12.5, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 49.06, \"occupancy\": 60.0, \"stays\": 2}, \"5\": {\"revenue\": 584.18, \"nights\": 7, \"adr\": 83.45, \"los\": 11, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 18.84, \"occupancy\": 22.58, \"stays\": 1}, \"6\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"7\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"8\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"9\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"10\": {\"revenue\": 581.25, \"nights\": 6, \"adr\": 96.88, \"los\": 8, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 18.75, \"occupancy\": 19.35, \"stays\": 1}, \"11\": {\"revenue\": 694.75, \"nights\": 8, \"adr\": 86.84, \"los\": 7, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 23.16, \"occupancy\": 26.67, \"stays\": 2}, \"12\": {\"revenue\": 1889.0, \"nights\": 23, \"adr\": 82.13, \"los\": 11.5, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 60.94, \"occupancy\": 74.19, \"stays\": 2}}, \"2025\": {\"1\": {\"revenue\": 2357.33, \"nights\": 20, \"adr\": 117.87, \"los\": 6.67, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 76.04, \"occupancy\": 64.52, \"stays\": 3}, \"2\": {\"revenue\": 2604.0, \"nights\": 21, \"adr\": 124.0, \"los\": 7.0, \"blocked\": 0, \"sellable\": 28, \"units\": 28, \"revpar\": 93.0, \"occupancy\": 75.0, \"stays\": 3}, \"3\": {\"revenue\": 2296.35, \"nights\": 22, \"adr\": 104.38, \"los\": 11.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 74.08, \"occupancy\": 70.97, \"stays\": 2}, \"4\": {\"revenue\": 1286.0, \"nights\": 10, \"adr\": 128.6, \"los\": 5.0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 42.87, \"occupancy\": 33.33, \"stays\": 2}, \"5\": {\"revenue\": 312.14, \"nights\": 5, \"adr\": 62.43, \"los\": 5.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 10.07, \"occupancy\": 16.13, \"stays\": 1}, \"6\": {\"revenue\": 561.86, \"nights\": 9, \"adr\": 62.43, \"los\": 9.0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 18.73, \"occupancy\": 30.0, \"stays\": 1}, \"7\": {\"revenue\": 803.5, \"nights\": 10, \"adr\": 80.35, \"los\": 5.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 25.92, \"occupancy\": 32.26, \"stays\": 2}, \"8\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"9\": {\"revenue\": 634.8, \"nights\": 10, \"adr\": 63.48, \"los\": 5.0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 21.16, \"occupancy\": 33.33, \"stays\": 2}, \"10\": {\"revenue\": 884.35, \"nights\": 10, \"adr\": 88.43, \"los\": 3.33, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 28.53, \"occupancy\": 32.26, \"stays\": 3}, \"11\": {\"revenue\": 1166.1, \"nights\": 12, \"adr\": 97.17, \"los\": 4.0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 38.87, \"occupancy\": 40.0, \"stays\": 3}, \"12\": {\"revenue\": 1587.96, \"nights\": 16, \"adr\": 99.25, \"los\": 5.33, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 51.22, \"occupancy\": 51.61, \"stays\": 3}}, \"2026\": {\"1\": {\"revenue\": 3105.79, \"nights\": 25, \"adr\": 124.23, \"los\": 12.5, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 100.19, \"occupancy\": 80.65, \"stays\": 2}, \"2\": {\"revenue\": 2442.09, \"nights\": 19, \"adr\": 128.53, \"los\": 4.75, \"blocked\": 0, \"sellable\": 28, \"units\": 28, \"revpar\": 87.22, \"occupancy\": 67.86, \"stays\": 4}, \"3\": {\"revenue\": 1647.35, \"nights\": 15, \"adr\": 109.82, \"los\": 7.5, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 53.14, \"occupancy\": 48.39, \"stays\": 2}, \"4\": {\"revenue\": 1754.2, \"nights\": 19, \"adr\": 92.33, \"los\": 3.8, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 58.47, \"occupancy\": 63.33, \"stays\": 5}, \"5\": {\"revenue\": 951.94, \"nights\": 13, \"adr\": 73.23, \"los\": 4.33, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 30.71, \"occupancy\": 41.94, \"stays\": 3}, \"6\": {\"revenue\": 759.19, \"nights\": 11, \"adr\": 69.02, \"los\": 3.67, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 25.31, \"occupancy\": 36.67, \"stays\": 3}, \"7\": {\"revenue\": 1790.99, \"nights\": 18, \"adr\": 99.5, \"los\": 6.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 57.77, \"occupancy\": 58.06, \"stays\": 3}, \"8\": {\"revenue\": 931.53, \"nights\": 10, \"adr\": 93.15, \"los\": 5.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 30.05, \"occupancy\": 32.26, \"stays\": 2}, \"9\": {\"revenue\": 1286.56, \"nights\": 17, \"adr\": 75.68, \"los\": 4.25, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 42.89, \"occupancy\": 56.67, \"stays\": 4}, \"10\": {\"revenue\": 1668.08, \"nights\": 21, \"adr\": 79.43, \"los\": 7.0, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 53.81, \"occupancy\": 67.74, \"stays\": 3}, \"11\": {\"revenue\": 1370.43, \"nights\": 12, \"adr\": 114.2, \"los\": 6.0, \"blocked\": 0, \"sellable\": 30, \"units\": 30, \"revpar\": 45.68, \"occupancy\": 40.0, \"stays\": 2}, \"12\": {\"revenue\": 1970.77, \"nights\": 14, \"adr\": 140.77, \"los\": 4.67, \"blocked\": 0, \"sellable\": 31, \"units\": 31, \"revpar\": 63.57, \"occupancy\": 45.16, \"stays\": 3}}}, \"closed\": {\"2025\": {\"revenue\": 10855.98, \"nights\": 107, \"adr\": 101.46, \"los\": 6.69, \"blocked\": 0, \"sellable\": 273, \"available\": 273, \"revpar\": 39.77, \"occupancy\": 39.19, \"stays\": 16}, \"2026\": {\"revenue\": 14669.64, \"nights\": 147, \"adr\": 99.79, \"los\": 5.25, \"blocked\": 0, \"sellable\": 273, \"available\": 273, \"revpar\": 53.73, \"occupancy\": 53.85, \"stays\": 28}}, \"core\": {\"2025\": {\"revenue\": 10855.98, \"nights\": 107, \"adr\": 101.46, \"los\": 6.69, \"blocked\": 0, \"sellable\": 273, \"available\": 273, \"revpar\": 39.77, \"occupancy\": 39.19, \"stays\": 16}, \"2026\": {\"revenue\": 14669.64, \"nights\": 147, \"adr\": 99.79, \"los\": 5.25, \"blocked\": 0, \"sellable\": 273, \"available\": 273, \"revpar\": 53.73, \"occupancy\": 53.85, \"stays\": 28}}, \"future2026\": {\"revenue\": 5009.28, \"nights\": 47}, \"properties\": {\"La escuela de La Sorrueda\": {\"2024\": {\"revenue\": 6998.0, \"nights\": 83, \"adr\": 84.31, \"los\": 11.86, \"available\": 366, \"revpar\": 19.12, \"occupancy\": 22.68, \"stays\": 7}, \"2025\": {\"revenue\": 14494.39, \"nights\": 145, \"adr\": 99.96, \"los\": 6.59, \"available\": 365, \"revpar\": 39.71, \"occupancy\": 39.73, \"stays\": 22}, \"2026\": {\"revenue\": 19678.93, \"nights\": 194, \"adr\": 101.44, \"los\": 6.47, \"available\": 365, \"revpar\": 53.91, \"occupancy\": 53.15, \"stays\": 30}}}, \"propertyMonthly\": {\"La escuela de La Sorrueda\": {\"2024\": {\"1\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"2\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 29, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"3\": {\"revenue\": 1777.0, \"nights\": 21, \"adr\": 84.62, \"los\": 21, \"available\": 31, \"revpar\": 57.32, \"occupancy\": 67.74, \"stays\": 1}, \"4\": {\"revenue\": 1471.82, \"nights\": 18, \"adr\": 81.77, \"los\": 12.5, \"available\": 30, \"revpar\": 49.06, \"occupancy\": 60.0, \"stays\": 2}, \"5\": {\"revenue\": 584.18, \"nights\": 7, \"adr\": 83.45, \"los\": 11, \"available\": 31, \"revpar\": 18.84, \"occupancy\": 22.58, \"stays\": 1}, \"6\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"7\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"8\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"9\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 30, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"10\": {\"revenue\": 581.25, \"nights\": 6, \"adr\": 96.88, \"los\": 8, \"available\": 31, \"revpar\": 18.75, \"occupancy\": 19.35, \"stays\": 1}, \"11\": {\"revenue\": 694.75, \"nights\": 8, \"adr\": 86.84, \"los\": 7, \"available\": 30, \"revpar\": 23.16, \"occupancy\": 26.67, \"stays\": 2}, \"12\": {\"revenue\": 1889.0, \"nights\": 23, \"adr\": 82.13, \"los\": 11.5, \"available\": 31, \"revpar\": 60.94, \"occupancy\": 74.19, \"stays\": 2}}, \"2025\": {\"1\": {\"revenue\": 2357.33, \"nights\": 20, \"adr\": 117.87, \"los\": 6.67, \"available\": 31, \"revpar\": 76.04, \"occupancy\": 64.52, \"stays\": 3}, \"2\": {\"revenue\": 2604.0, \"nights\": 21, \"adr\": 124.0, \"los\": 7.0, \"available\": 28, \"revpar\": 93.0, \"occupancy\": 75.0, \"stays\": 3}, \"3\": {\"revenue\": 2296.35, \"nights\": 22, \"adr\": 104.38, \"los\": 11.0, \"available\": 31, \"revpar\": 74.08, \"occupancy\": 70.97, \"stays\": 2}, \"4\": {\"revenue\": 1286.0, \"nights\": 10, \"adr\": 128.6, \"los\": 5.0, \"available\": 30, \"revpar\": 42.87, \"occupancy\": 33.33, \"stays\": 2}, \"5\": {\"revenue\": 312.14, \"nights\": 5, \"adr\": 62.43, \"los\": 5.0, \"available\": 31, \"revpar\": 10.07, \"occupancy\": 16.13, \"stays\": 1}, \"6\": {\"revenue\": 561.86, \"nights\": 9, \"adr\": 62.43, \"los\": 9.0, \"available\": 30, \"revpar\": 18.73, \"occupancy\": 30.0, \"stays\": 1}, \"7\": {\"revenue\": 803.5, \"nights\": 10, \"adr\": 80.35, \"los\": 5.0, \"available\": 31, \"revpar\": 25.92, \"occupancy\": 32.26, \"stays\": 2}, \"8\": {\"revenue\": 0.0, \"nights\": 0, \"adr\": 0, \"los\": 0, \"available\": 31, \"revpar\": 0.0, \"occupancy\": 0.0, \"stays\": 0}, \"9\": {\"revenue\": 634.8, \"nights\": 10, \"adr\": 63.48, \"los\": 5.0, \"available\": 30, \"revpar\": 21.16, \"occupancy\": 33.33, \"stays\": 2}, \"10\": {\"revenue\": 884.35, \"nights\": 10, \"adr\": 88.43, \"los\": 3.33, \"available\": 31, \"revpar\": 28.53, \"occupancy\": 32.26, \"stays\": 3}, \"11\": {\"revenue\": 1166.1, \"nights\": 12, \"adr\": 97.17, \"los\": 4.0, \"available\": 30, \"revpar\": 38.87, \"occupancy\": 40.0, \"stays\": 3}, \"12\": {\"revenue\": 1587.96, \"nights\": 16, \"adr\": 99.25, \"los\": 5.33, \"available\": 31, \"revpar\": 51.22, \"occupancy\": 51.61, \"stays\": 3}}, \"2026\": {\"1\": {\"revenue\": 3105.79, \"nights\": 25, \"adr\": 124.23, \"los\": 12.5, \"available\": 31, \"revpar\": 100.19, \"occupancy\": 80.65, \"stays\": 2}, \"2\": {\"revenue\": 2442.09, \"nights\": 19, \"adr\": 128.53, \"los\": 4.75, \"available\": 28, \"revpar\": 87.22, \"occupancy\": 67.86, \"stays\": 4}, \"3\": {\"revenue\": 1647.35, \"nights\": 15, \"adr\": 109.82, \"los\": 7.5, \"available\": 31, \"revpar\": 53.14, \"occupancy\": 48.39, \"stays\": 2}, \"4\": {\"revenue\": 1754.2, \"nights\": 19, \"adr\": 92.33, \"los\": 3.8, \"available\": 30, \"revpar\": 58.47, \"occupancy\": 63.33, \"stays\": 5}, \"5\": {\"revenue\": 951.94, \"nights\": 13, \"adr\": 73.23, \"los\": 4.33, \"available\": 31, \"revpar\": 30.71, \"occupancy\": 41.94, \"stays\": 3}, \"6\": {\"revenue\": 759.19, \"nights\": 11, \"adr\": 69.02, \"los\": 3.67, \"available\": 30, \"revpar\": 25.31, \"occupancy\": 36.67, \"stays\": 3}, \"7\": {\"revenue\": 1790.99, \"nights\": 18, \"adr\": 99.5, \"los\": 6.0, \"available\": 31, \"revpar\": 57.77, \"occupancy\": 58.06, \"stays\": 3}, \"8\": {\"revenue\": 931.53, \"nights\": 10, \"adr\": 93.15, \"los\": 5.0, \"available\": 31, \"revpar\": 30.05, \"occupancy\": 32.26, \"stays\": 2}, \"9\": {\"revenue\": 1286.56, \"nights\": 17, \"adr\": 75.68, \"los\": 4.25, \"available\": 30, \"revpar\": 42.89, \"occupancy\": 56.67, \"stays\": 4}, \"10\": {\"revenue\": 1668.08, \"nights\": 21, \"adr\": 79.43, \"los\": 7.0, \"available\": 31, \"revpar\": 53.81, \"occupancy\": 67.74, \"stays\": 3}, \"11\": {\"revenue\": 1370.43, \"nights\": 12, \"adr\": 114.2, \"los\": 6.0, \"available\": 30, \"revpar\": 45.68, \"occupancy\": 40.0, \"stays\": 2}, \"12\": {\"revenue\": 1970.77, \"nights\": 14, \"adr\": 140.77, \"los\": 4.67, \"available\": 31, \"revpar\": 63.57, \"occupancy\": 45.16, \"stays\": 3}}}}, \"comparables\": [\"La escuela de La Sorrueda\"], \"matureCore\": [\"La escuela de La Sorrueda\"]};\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 p1=n=>(n>=0?'+':'')+n.toFixed(1)+'%';\nconst change=(a,b)=>a?((b\/a)-1)*100:0;\nconst cls=n=>n>=0?'pos':'neg';\nconst arrow=n=>n>=0?'\u25b2':'\u25bc';\nconst Y25=D.globalYear['2025'],Y26=D.globalYear['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\nfunction setDelta(id,val,suffix='%'){\n const e=document.getElementById(id);e.textContent=arrow(val)+' '+Math.abs(val).toFixed(1)+suffix;e.className='delta '+(val>=0?'up':'dn');\n}\nconst revCh=change(Y25.revenue,Y26.revenue),nightCh=change(Y25.nights,Y26.nights),rpCh=change(Y25.revpar,Y26.revpar);\ndocument.getElementById('heroRevenue').textContent=p1(revCh);\ndocument.getElementById('rev25').textContent=euro(Y25.revenue);document.getElementById('rev26').textContent=euro(Y26.revenue);\ndocument.getElementById('heroNights').textContent=p1(nightCh);document.getElementById('n25').textContent=num(Y25.nights);document.getElementById('n26').textContent=num(Y26.nights);\ndocument.getElementById('heroRevpar').textContent=p1(rpCh);document.getElementById('rp25').textContent=euro2(Y25.revpar);document.getElementById('rp26').textContent=euro2(Y26.revpar);\ndocument.getElementById('futureRevenue').textContent=euro(D.future2026.revenue);document.getElementById('futureNights').textContent=num(D.future2026.nights);\n\ndocument.getElementById('adrVals').textContent=euro2(Y25.adr)+' \u2192 '+euro2(Y26.adr);setDelta('adrDelta',change(Y25.adr,Y26.adr));\ndocument.getElementById('occVals').textContent=Y25.occupancy.toFixed(1)+'% \u2192 '+Y26.occupancy.toFixed(1)+'%';setDelta('occDelta',Y26.occupancy-Y25.occupancy,' pp');\ndocument.getElementById('losVals').textContent=Y25.los.toFixed(1)+' \u2192 '+Y26.los.toFixed(1)+' noches';setDelta('losDelta',change(Y25.los,Y26.los));\ndocument.getElementById('blockedVals').textContent=num(Y25.sellable)+' \u2192 '+num(Y26.sellable);setDelta('blockedDelta',change(Y25.sellable,Y26.sellable));\ndocument.getElementById('activeVals').textContent=num(Y25.stays)+' \u2192 '+num(Y26.stays);setDelta('activeDelta',change(Y25.stays,Y26.stays));\n\ndocument.getElementById('totalGrowth').textContent=p1(revCh);\ndocument.getElementById('adrGrowth').textContent=p1(change(Y25.adr,Y26.adr));\ndocument.getElementById('coreGrowth').textContent=p1(change(D.closed['2025'].revenue,D.closed['2026'].revenue));\n\ndocument.getElementById('block25').textContent=num(Y25.sellable)+' noches';document.getElementById('blockPct25').textContent='calendario natural';\ndocument.getElementById('block26').textContent=num(Y26.sellable)+' noches';document.getElementById('blockPct26').textContent='calendario natural';\ndocument.getElementById('revpar25b').textContent=euro2(Y25.revpar);document.getElementById('revpar26b').textContent=euro2(Y26.revpar);\ndocument.getElementById('blockRead').innerHTML=`Entre enero y septiembre, ya cerrados en ambos a\u00f1os, el Revenue pasa de <strong>${euro(D.closed['2025'].revenue)}<\/strong> a <strong>${euro(D.closed['2026'].revenue)}<\/strong> (${p1(change(D.closed['2025'].revenue,D.closed['2026'].revenue))}) y el RevPAR de <strong>${euro2(D.closed['2025'].revpar)}<\/strong> a <strong>${euro2(D.closed['2026'].revpar)}<\/strong>. El Export actual no incluye bloqueos, por lo que la lectura se realiza sobre calendario natural.`;\n\nChart.defaults.font.family='Arial, Helvetica, sans-serif';\nChart.defaults.color='#6D6962';\nnew Chart(document.getElementById('revenueChart'),{\n type:'bar',\n data:{labels:D.months,datasets:[\n  {label:'2025',data:D.months.map((_,i)=>D.globalMonthly['2025'][String(i+1)].revenue),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'2026',data:D.months.map((_,i)=>D.globalMonthly['2026'][String(i+1)].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});\nnew Chart(document.getElementById('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}},tooltip:{callbacks:{label:x=>x.dataset.label+': '+euro2(x.raw)}}},scales:{y:{grid:{color:'#EFEBE5'},ticks:{callback:v=>v+' \u20ac'}},x:{grid:{display:false}}}}\n});\n\n\/\/ MONTH CARDS\nconst monthGrid=document.getElementById('monthGrid');\nD.months.forEach((name,i)=>{\n const m=String(i+1),a=D.globalMonthly['2025'][m],b=D.globalMonthly['2026'][m];\n const revDelta=change(a.revenue,b.revenue),rpDelta=change(a.revpar,b.revpar);\n const status=i<9?'Mes cerrado \u00b7 comparaci\u00f3n directa':i===9?'Mes en curso \u00b7 a fecha de hoy':'Reservas ya confirmadas';\n const css=i<9?'closed':i===9?'live':'future';\n const result=i<9?(arrow(revDelta)+' '+Math.abs(revDelta).toFixed(1)+'% de revenue'):(b.revenue>=a.revenue?'Ya supera 2025':'Todav\u00eda puede seguir creciendo');\n const rcls=i<9?(revDelta>=0?'good':'bad'):'neutral';\n const units=b.sellable;\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 ${rcls}\">${result}<\/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)} \u00b7 ${arrow(rpDelta)} ${Math.abs(rpDelta).toFixed(1)}%<\/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\">LOS 2026<\/div><div class=\"v\">${b.los.toFixed(1)} noches<\/div><div class=\"sub\">2025: ${a.los.toFixed(1)}<\/div><\/div>\n  <\/div>\n  <div class=\"blockline\">Inventario operativo estimado 2026: <strong>${num(b.sellable)} noches<\/strong><\/div>\n <\/div>`);\n});\n\n\/\/ MONTH PROPERTY TABLE\nconst monthSelect=document.getElementById('monthSelect');\nD.months.forEach((x,i)=>monthSelect.insertAdjacentHTML('beforeend',`<option value=\"${i+1}\" ${i===9?'selected':''}>${x}<\/option>`));\nfunction propertyStatus(p){return '<span class=\"badge old\">Alojamiento<\/span>'}\nfunction renderMonthProperties(){\n const m=monthSelect.value,term=document.getElementById('monthSearch').value.toLowerCase();\n const rows=Object.keys(D.properties).filter(p=>p.toLowerCase().includes(term)).map(p=>{\n  const a=D.propertyMonthly[p]['2025'][m],b=D.propertyMonthly[p]['2026'][m];\n  return {p,a,b,change:change(a.revenue,b.revenue)};\n }).sort((x,y)=>y.b.revenue-x.b.revenue);\n document.getElementById('monthPropertyTable').innerHTML=`<thead><tr><th>Alojamiento<\/th><th>Tipo<\/th><th>Revenue 2025<\/th><th>Revenue 2026<\/th><th>Var.<\/th><th>Noches<\/th><th>ADR<\/th><th>RevPAR*<\/th><th>Ocupaci\u00f3n*<\/th><th>LOS<\/th><\/tr><\/thead><tbody>`+\n rows.map(x=>`<tr><td><strong>${x.p}<\/strong><\/td><td>${propertyStatus(x.p)}<\/td><td>${euro(x.a.revenue)}<\/td><td>${euro(x.b.revenue)}<\/td><td class=\"${cls(x.change)}\">${x.a.revenue?p1(x.change):'\u2014'}<\/td><td>${num(x.b.nights)}<\/td><td>${euro2(x.b.adr)}<\/td><td class=\"rp\">${x.b.available?euro2(x.b.revpar):'\u2014'}<\/td><td>${x.b.available?x.b.occupancy.toFixed(1)+'%':'\u2014'}<\/td><td>${x.b.los?x.b.los.toFixed(1):'\u2014'}<\/td><\/tr>`).join('')+\n `<\/tbody>`;\n}\nmonthSelect.onchange=renderMonthProperties;document.getElementById('monthSearch').oninput=renderMonthProperties;renderMonthProperties();\n\n\/\/ PROPERTY TABLE\nObject.keys(D.properties).sort().forEach(p=>document.getElementById('propertyDetailSelect').insertAdjacentHTML('beforeend',`<option>${p}<\/option>`));\nfunction renderPropertyTable(){\n const term=document.getElementById('propertySearch').value.toLowerCase(),sort=document.getElementById('propertySort').value;\n let rows=Object.keys(D.properties).filter(p=>p.toLowerCase().includes(term)).map(p=>{\n  const a=D.properties[p]['2025'],b=D.properties[p]['2026'];return {p,a,b,ch:change(a.revenue,b.revenue)};\n });\n rows.sort((x,y)=>{\n  if(sort==='change')return y.ch-x.ch;if(sort==='adr')return y.b.adr-x.b.adr;if(sort==='revpar')return y.b.revpar-x.b.revpar;if(sort==='nights')return y.b.nights-x.b.nights;return y.b.revenue-x.b.revenue;\n });\n document.getElementById('propertyTable').innerHTML=`<thead><tr><th>Alojamiento<\/th><th>Tipo<\/th><th>2025<\/th><th>2026 a fecha de hoy<\/th><th>Var.<\/th><th>Noches<\/th><th>ADR<\/th><th>RevPAR*<\/th><th>Ocupaci\u00f3n*<\/th><th>LOS<\/th><\/tr><\/thead><tbody>`+\n rows.map(x=>`<tr><td><strong>${x.p}<\/strong><\/td><td>${propertyStatus(x.p)}<\/td><td>${euro(x.a.revenue)}<\/td><td>${euro(x.b.revenue)}<\/td><td class=\"${cls(x.ch)}\">${x.a.revenue?p1(x.ch):'Nuevo'}<\/td><td>${num(x.b.nights)}<\/td><td>${euro2(x.b.adr)}<\/td><td class=\"rp\">${x.b.available?euro2(x.b.revpar):'\u2014'}<\/td><td>${x.b.available?x.b.occupancy.toFixed(1)+'%':'\u2014'}<\/td><td>${x.b.los?x.b.los.toFixed(1):'\u2014'}<\/td><\/tr>`).join('')+\n `<\/tbody>`;\n}\ndocument.getElementById('propertySearch').oninput=renderPropertyTable;document.getElementById('propertySort').onchange=renderPropertyTable;renderPropertyTable();\n\nlet propertyChart=null;\nfunction renderPropertyDetail(){\n const p=document.getElementById('propertyDetailSelect').value,a=D.properties[p]['2025'],b=D.properties[p]['2026'];\n document.getElementById('detailName').textContent=p;\n const ch=change(a.revenue,b.revenue);\n document.getElementById('detailKpis').innerHTML=`\n  <div class=\"dk\"><div class=\"l\">Revenue 2026<\/div><div class=\"v\">${euro(b.revenue)}<\/div><div class=\"s\">${a.revenue?p1(ch)+' vs 2025':'Nuevo en 2026'}<\/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\">${b.available?euro2(b.revpar):'\u2014'}<\/div><div class=\"s\">periodo activo estimado<\/div><\/div>\n  <div class=\"dk\"><div class=\"l\">Ocupaci\u00f3n*<\/div><div class=\"v\">${b.available?b.occupancy.toFixed(1)+'%':'\u2014'}<\/div><div class=\"s\">periodo activo estimado<\/div><\/div>\n  <div class=\"dk\"><div class=\"l\">LOS<\/div><div class=\"v\">${b.los?b.los.toFixed(1)+' noches':'\u2014'}<\/div><div class=\"s\">duraci\u00f3n media<\/div><\/div>`;\n const ctx=document.getElementById('propertyChart');\n if(propertyChart)propertyChart.destroy();\n propertyChart=new Chart(ctx,{type:'bar',data:{labels:D.months,datasets:[\n  {label:'2025',data:D.months.map((_,i)=>D.propertyMonthly[p]['2025'][String(i+1)].revenue),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'2026',data:D.months.map((_,i)=>D.propertyMonthly[p]['2026'][String(i+1)].revenue),backgroundColor:'#4ABCC5',borderRadius:3}\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}\ndocument.getElementById('propertyDetailSelect').onchange=renderPropertyDetail;renderPropertyDetail();\n\n\/\/ HISTORY\n['2024','2025','2026'].forEach(y=>{\n const x=D.globalYear[y];\n document.getElementById('historyGrid').insertAdjacentHTML('beforeend',`<div class=\"hist-card\"><div class=\"year\">${y}${y==='2026'?'*':''}<\/div><div class=\"count\">${x.active_props} alojamientos con actividad<\/div><div class=\"money\">${euro(x.revenue)}<\/div><div class=\"small\">ADR ${euro2(x.adr)} \u00b7 RevPAR ${euro2(x.revpar)} \u00b7 ${num(x.nights)} noches<\/div><\/div>`);\n});\nObject.keys(D.properties).sort().forEach(p=>document.getElementById('histScope').insertAdjacentHTML('beforeend',`<option>${p}<\/option>`));\nD.months.forEach((x,i)=>document.getElementById('histPeriod').insertAdjacentHTML('beforeend',`<option value=\"${i+1}\">${x}<\/option>`));\n\nfunction histItem(scope,year,period){\n if(scope==='portfolio')return period==='year'?D.globalYear[year]:D.globalMonthly[year][period];\n return period==='year'?D.properties[scope][year]:D.propertyMonthly[scope][year][period];\n}\nfunction renderHistory(){\n const scope=document.getElementById('histScope').value,ya=document.getElementById('histYearA').value,yb=document.getElementById('histYearB').value,period=document.getElementById('histPeriod').value;\n const a=histItem(scope,ya,period),b=histItem(scope,yb,period);\n const metrics=[\n  ['Revenue','revenue',euro],['Noches','nights',num],['ADR','adr',euro2],['RevPAR*','revpar',euro2],['LOS','los',n=>(n||0).toFixed(1)+' noches']\n ];\n document.getElementById('historyKpis').innerHTML=metrics.map(([lab,key,fmt])=>{\n  const c=change(a[key]||0,b[key]||0);return `<div class=\"hk\"><div class=\"l\">${lab}<\/div><div class=\"pair\">${fmt(a[key]||0)} \u2192 ${fmt(b[key]||0)}<\/div><div class=\"chg ${cls(c)}\">${a[key]?p1(c):'\u2014'}<\/div><\/div>`;\n }).join('');\n}\n['histScope','histYearA','histYearB','histPeriod'].forEach(id=>document.getElementById(id).onchange=renderHistory);renderHistory();\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<div class=\"elementor-element elementor-element-094f9ce e-flex e-con-boxed e-con e-parent\" data-id=\"094f9ce\" 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-48d6bc2 elementor-widget elementor-widget-html\" data-id=\"48d6bc2\" 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>Reina del Atl\u00e1ntico \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;--line:#E4E1DA;\n --muted:#6D6962;--up:#5BAE6A;--dn:#C97962;--upbg:#EEF8F0;--dnbg:#F8EDE8;\n --bluebg:#EDF8F9;--warn:#FFF8EC;\n}\n*{box-sizing:border-box}\nbody{margin:0;background:var(--bg);font-family:Arial,Helvetica,sans-serif;color:#171717;line-height:1.5}\n.wrap{max-width:1160px;margin: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:31px}.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:34px;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}\n.nav{display:flex;overflow:auto}.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:44px}\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\n.status-banner{background:#fff;border:1px solid var(--line);border-left:5px solid var(--sea);border-radius:9px;padding:18px 20px;margin-bottom:17px}\n.status-banner .big{font-family:Georgia,serif;font-size:24px;color:var(--navy);margin-bottom:4px}\n.status-banner p{margin:0;color:#555149;font-size:13px}\n.status-banner strong{color:var(--navy)}\n\n.hero{background:linear-gradient(135deg,#242B59,#333C74);border-radius:10px;color:#fff;padding:30px}\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:18px}\n.hlabel{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:#C2C7DA}\n.hvalue{font-family:Georgia,serif;font-size:35px;color:var(--sea);margin-top:5px}\n.hdesc{font-size:11px;color:#CDD1E1}.hdesc strong{color:#F2D5B0}\n\n.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-top:17px}\n.kpi{background:#fff;border:1px solid var(--line);border-radius:9px;padding:17px}\n.kpi .l{font-size:9px;text-transform:uppercase;color:var(--muted)}\n.kpi .v{font-family:Georgia,serif;font-size:23px;color:var(--navy);margin:5px 0}\n.kpi .s{font-size:10px;color:var(--muted)}\n.delta{font-size:11px;font-weight:700}.up{color:var(--up)}.dn{color:var(--dn)}\n\n.block-section{background:#fff;border:1px solid var(--line);border-radius:10px;padding:22px;margin-top:17px}\n.block-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:15px}\n.block-card{background:#F8F7F4;border-radius:8px;padding:15px}\n.block-card .l{font-size:9px;text-transform:uppercase;color:var(--muted)}\n.block-card .v{font-family:Georgia,serif;font-size:23px;color:var(--navy);margin:5px 0}\n.block-card .s{font-size:10px;color:var(--muted)}\n.impact{margin-top:16px;background:var(--warn);border-left:4px solid var(--sand);padding:15px 17px;border-radius:0 7px 7px 0;font-size:12.5px;color:#554F48}\n.impact strong{color:var(--navy)}\n.goodcall{margin-top:14px;background:var(--upbg);border-left:4px solid var(--up);padding:16px 18px;border-radius:0 8px 8px 0;font-size:13px;color:#3F5147}\n.goodcall strong{color:#2D6E3D}\n\n.two{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:17px}\n.card{background:#fff;border:1px solid var(--line);border-radius:9px;padding:20px}.chartbox{height:310px}\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:305px}\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;color:var(--muted);font-weight:700}\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:8px;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.metrics{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:9px}\n.micro{border:1px solid var(--line);border-radius:6px;padding:8px}.micro .l{font-size:8px;text-transform:uppercase;color:var(--muted)}.micro .v{font-family:Georgia,serif;font-size:16px;color:var(--navy)}.micro .s{font-size:9px;color:var(--muted)}\n.blockline{margin-top:8px;padding:8px 9px;border-radius:6px;background:#F3F1EC;font-size:10px;color:#554F48}\n\n.hist-controls{display:flex;gap:10px;flex-wrap:wrap;margin:15px 0}\n.hist-controls label{font-size:9px;text-transform:uppercase;color:var(--muted);font-weight:700}\n.hist-controls select{display:block;margin-top:5px;padding:9px 11px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--navy)}\n.hist-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}\n.hk{background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px}.hk .l{font-size:8px;text-transform:uppercase;color:var(--muted)}.hk .pair{font-family:Georgia,serif;font-size:17px;color:var(--navy);margin:4px 0}.hk .chg{font-size:10px;font-weight:700}\n.note{margin-top:13px;font-size:11px;color:var(--muted)}\nfooter{border-top:1px solid var(--line);padding:23px 0 30px;font-size:10.5px;color:var(--muted)}\n@media(max-width:900px){.hero-grid,.kpis,.block-grid{grid-template-columns:1fr 1fr}.month-grid{grid-template-columns:1fr 1fr}.two{grid-template-columns:1fr}.hist-kpis{grid-template-columns:1fr 1fr}}\n@media(max-width:620px){.wrap{padding:0 15px}.meta{text-align:left}.hero-grid,.kpis,.block-grid,.month-grid,.hist-kpis{grid-template-columns:1fr}}\n<\/style>\n<\/head>\n<body>\n<header><div class=\"wrap\"><div class=\"head\">\n<div><div class=\"brand\">Villas <span>Rivero<\/span><\/div><div class=\"kicker\">Informe de rendimiento<\/div><h1>Reina del Atl\u00e1ntico<\/h1><\/div>\n<div class=\"meta\"><b>Situaci\u00f3n 2026 a fecha de extracci\u00f3n<\/b><br>2025 cerrado \u00b7 2026 todav\u00eda abierto<br>Bloqueos 2025\u20132026 incorporados<\/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=\"historico\">Hist\u00f3rico 2024\u20132026<\/button>\n<\/div><\/nav>\n\n<main><div class=\"wrap\">\n<div class=\"pane on\" id=\"resumen\">\n\n<section>\n<div class=\"eyebrow\">Lectura principal<\/div><h2>Situaci\u00f3n general<\/h2>\n<div class=\"status-banner\">\n<div class=\"big\">2026 todav\u00eda no est\u00e1 cerrado<\/div>\n<p>La cifra actual de 2026 es <strong>producci\u00f3n ya confirmada<\/strong>, no el resultado final del ejercicio. Octubre y noviembre todav\u00eda tienen recorrido comercial y diciembre no tiene reservas registradas actualmente. Por eso no debe interpretarse la diferencia frente a 2025 como una ca\u00edda anual cerrada.<\/p>\n<\/div>\n\n<div class=\"hero\">\n<div class=\"hero-title\">Foto actual \u00b7 2025 cerrado vs 2026 abierto<\/div>\n<div class=\"hero-grid\">\n<div><div class=\"hlabel\">Revenue 2026 ya confirmado<\/div><div class=\"hvalue\" id=\"rev26\"><\/div><div class=\"hdesc\"><strong id=\"pct25\"><\/strong> de todo el revenue final de 2025<\/div><\/div>\n<div><div class=\"hlabel\">Bloqueos<\/div><div class=\"hvalue\" id=\"blockDiff\"><\/div><div class=\"hdesc\"><strong id=\"blocks\"><\/strong><\/div><\/div>\n<div><div class=\"hlabel\">Inventario vendible<\/div><div class=\"hvalue\" id=\"sellDelta\"><\/div><div class=\"hdesc\"><strong id=\"sellable\"><\/strong> noches<\/div><\/div>\n<div><div class=\"hlabel\">RevPAR ajustado<\/div><div class=\"hvalue\" id=\"rpChange\"><\/div><div class=\"hdesc\"><strong id=\"rpVals\"><\/strong><\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"kpis\">\n<div class=\"kpi\"><div class=\"l\">Revenue 2025 final<\/div><div class=\"v\" id=\"rev25\"><\/div><div class=\"s\">ejercicio ya cerrado<\/div><\/div>\n<div class=\"kpi\"><div class=\"l\">Para igualar 2025<\/div><div class=\"v\" id=\"gap\"><\/div><div class=\"s\">reservas adicionales necesarias<\/div><\/div>\n<div class=\"kpi\"><div class=\"l\">ADR<\/div><div class=\"v\" id=\"adr\"><\/div><div class=\"delta up\" id=\"adrDelta\"><\/div><\/div>\n<div class=\"kpi\"><div class=\"l\">Ocupaci\u00f3n ajustada<\/div><div class=\"v\" id=\"occ\"><\/div><div class=\"delta up\" id=\"occDelta\"><\/div><\/div>\n<\/div>\n\n<div class=\"block-section\">\n<h3>C\u00f3mo est\u00e1n afectando los bloqueos<\/h3>\n<p class=\"lead\">La vivienda ha tenido bastante menos inventario disponible para vender en 2026. Esta diferencia debe leerse junto al revenue, no por separado.<\/p>\n<div class=\"block-grid\">\n<div class=\"block-card\"><div class=\"l\">Bloqueos 2025<\/div><div class=\"v\" id=\"b25\"><\/div><div class=\"s\" id=\"bp25\"><\/div><\/div>\n<div class=\"block-card\"><div class=\"l\">Bloqueos 2026<\/div><div class=\"v\" id=\"b26\"><\/div><div class=\"s\" id=\"bp26\"><\/div><\/div>\n<div class=\"block-card\"><div class=\"l\">Noches a la venta<\/div><div class=\"v\" id=\"sellCompare\"><\/div><div class=\"s\">55 noches menos comercializables<\/div><\/div>\n<div class=\"block-card\"><div class=\"l\">Peso de los bloqueos<\/div><div class=\"v\" id=\"blockPctChange\"><\/div><div class=\"s\">incremento sobre calendario<\/div><\/div>\n<\/div>\n<div class=\"impact\" id=\"impactText\"><\/div>\n<div class=\"goodcall\" id=\"performanceText\"><\/div>\n<\/div>\n\n<div class=\"two\">\n<div class=\"card\"><h3>Revenue mensual<\/h3><p class=\"lead\" style=\"margin-bottom:8px\">2026 muestra reservas actualmente confirmadas; los meses futuros todav\u00eda pueden crecer.<\/p><div class=\"chartbox\"><canvas id=\"revenueChart\"><\/canvas><\/div><\/div>\n<div class=\"card\"><h3>Bloqueos por mes<\/h3><p class=\"lead\" style=\"margin-bottom:8px\">Comparativa directa de noches bloqueadas en 2025 y 2026.<\/p><div class=\"chartbox\"><canvas id=\"blocksChart\"><\/canvas><\/div><\/div>\n<\/div>\n<\/section>\n<\/div>\n\n<div class=\"pane\" id=\"meses\"><section>\n<div class=\"eyebrow\">Evoluci\u00f3n mensual<\/div><h2>Mes a mes<\/h2>\n<p class=\"lead\">Cada mes incluye revenue, ADR, RevPAR ajustado, ocupaci\u00f3n ajustada y bloqueos. Septiembre est\u00e1 en curso; octubre, noviembre y diciembre son producci\u00f3n on the books y no meses cerrados.<\/p>\n<div class=\"month-grid\" id=\"monthGrid\"><\/div>\n<\/section><\/div>\n\n<div class=\"pane\" id=\"historico\"><section>\n<div class=\"eyebrow\">Consulta hist\u00f3rica<\/div><h2>Hist\u00f3rico 2024\u20132026<\/h2>\n<p class=\"lead\">2025\u20132026 pueden analizarse con bloqueos. Para 2024 no disponemos del mismo detalle de disponibilidad, por lo que el RevPAR hist\u00f3rico de ese ejercicio se mantiene sobre calendario.<\/p>\n<div class=\"hist-controls\">\n<label>A\u00f1o A<select id=\"ya\"><option>2024<\/option><option selected>2025<\/option><option>2026<\/option><\/select><\/label>\n<label>A\u00f1o B<select id=\"yb\"><option>2024<\/option><option>2025<\/option><option selected>2026<\/option><\/select><\/label>\n<label>Periodo<select id=\"period\"><option value=\"year\">A\u00f1o completo \/ OTB<\/option><\/select><\/label>\n<\/div>\n<div class=\"hist-kpis\" id=\"histKpis\"><\/div>\n<div class=\"note\">En 2026 los meses futuros reflejan \u00fanicamente reservas actualmente confirmadas.<\/div>\n<\/section><\/div>\n\n<\/div><\/main>\n<footer><div class=\"wrap\">Villas Rivero \u00b7 Reina del Atl\u00e1ntico \u00b7 Revenue y bloqueos 2025\u20132026<\/div><\/footer>\n\n<script>\nconst D={\"months\": [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"], \"yearly\": {\"2024\": {\"revenue\": 15107.89, \"nights\": 86, \"available\": 366, \"stays\": 13, \"adr\": 175.67, \"revpar\": 41.28, \"occupancy\": 23.5, \"los\": 6.62}, \"2025\": {\"revenue\": 26410.33, \"nights\": 149, \"available\": 365, \"stays\": 22, \"adr\": 177.25, \"revpar\": 72.36, \"occupancy\": 40.82, \"los\": 6.77}, \"2026\": {\"revenue\": 23384.14, \"nights\": 128, \"available\": 365, \"stays\": 20, \"adr\": 182.69, \"revpar\": 64.07, \"occupancy\": 35.07, \"los\": 6.4}}, \"monthly\": {\"2024\": {\"1\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 31, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"2\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 29, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"3\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 31, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"4\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 30, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"5\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 31, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"6\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 30, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}, \"7\": {\"revenue\": 2128.0, \"nights\": 13, \"available\": 31, \"stays\": 3, \"adr\": 163.69, \"revpar\": 68.65, \"occupancy\": 41.94, \"los\": 4.33}, \"8\": {\"revenue\": 4598.42, \"nights\": 23, \"available\": 31, \"stays\": 2, \"adr\": 199.93, \"revpar\": 148.34, \"occupancy\": 74.19, \"los\": 11.5}, \"9\": {\"revenue\": 3084.39, \"nights\": 20, \"available\": 30, \"stays\": 3, \"adr\": 154.22, \"revpar\": 102.81, \"occupancy\": 66.67, \"los\": 6.67}, \"10\": {\"revenue\": 3484.85, \"nights\": 20, \"available\": 31, \"stays\": 4, \"adr\": 174.24, \"revpar\": 112.41, \"occupancy\": 64.52, \"los\": 5.0}, \"11\": {\"revenue\": 1302.23, \"nights\": 6, \"available\": 30, \"stays\": 2, \"adr\": 217.04, \"revpar\": 43.41, \"occupancy\": 20.0, \"los\": 3.0}, \"12\": {\"revenue\": 510.0, \"nights\": 4, \"available\": 31, \"stays\": 1, \"adr\": 127.5, \"revpar\": 16.45, \"occupancy\": 12.9, \"los\": 4.0}}, \"2025\": {\"1\": {\"revenue\": 3104.83, \"nights\": 22, \"available\": 31, \"stays\": 3, \"adr\": 141.13, \"revpar\": 100.16, \"occupancy\": 70.97, \"los\": 7.33}, \"2\": {\"revenue\": 2746.24, \"nights\": 12, \"available\": 28, \"stays\": 3, \"adr\": 228.85, \"revpar\": 98.08, \"occupancy\": 42.86, \"los\": 4.0}, \"3\": {\"revenue\": 837.0, \"nights\": 7, \"available\": 31, \"stays\": 1, \"adr\": 119.57, \"revpar\": 27.0, \"occupancy\": 22.58, \"los\": 7.0}, \"4\": {\"revenue\": 3038.22, \"nights\": 19, \"available\": 30, \"stays\": 3, \"adr\": 159.91, \"revpar\": 101.27, \"occupancy\": 63.33, \"los\": 6.33}, \"5\": {\"revenue\": 937.86, \"nights\": 8, \"available\": 31, \"stays\": 1, \"adr\": 117.23, \"revpar\": 30.25, \"occupancy\": 25.81, \"los\": 8.0}, \"6\": {\"revenue\": 2347.61, \"nights\": 11, \"available\": 30, \"stays\": 2, \"adr\": 213.42, \"revpar\": 78.25, \"occupancy\": 36.67, \"los\": 5.5}, \"7\": {\"revenue\": 4041.03, \"nights\": 21, \"available\": 31, \"stays\": 3, \"adr\": 192.43, \"revpar\": 130.36, \"occupancy\": 67.74, \"los\": 7.0}, \"8\": {\"revenue\": 2468.43, \"nights\": 11, \"available\": 31, \"stays\": 2, \"adr\": 224.4, \"revpar\": 79.63, \"occupancy\": 35.48, \"los\": 5.5}, \"9\": {\"revenue\": 2704.12, \"nights\": 18, \"available\": 30, \"stays\": 3, \"adr\": 150.23, \"revpar\": 90.14, \"occupancy\": 60.0, \"los\": 6.0}, \"10\": {\"revenue\": 1087.94, \"nights\": 7, \"available\": 31, \"stays\": 1, \"adr\": 155.42, \"revpar\": 35.09, \"occupancy\": 22.58, \"los\": 7.0}, \"11\": {\"revenue\": 1200.76, \"nights\": 8, \"available\": 30, \"stays\": 2, \"adr\": 150.09, \"revpar\": 40.03, \"occupancy\": 26.67, \"los\": 4.0}, \"12\": {\"revenue\": 1896.29, \"nights\": 5, \"available\": 31, \"stays\": 1, \"adr\": 379.26, \"revpar\": 61.17, \"occupancy\": 16.13, \"los\": 5.0}}, \"2026\": {\"1\": {\"revenue\": 1041.34, \"nights\": 5, \"available\": 31, \"stays\": 2, \"adr\": 208.27, \"revpar\": 33.59, \"occupancy\": 16.13, \"los\": 2.5}, \"2\": {\"revenue\": 696.0, \"nights\": 5, \"available\": 28, \"stays\": 1, \"adr\": 139.2, \"revpar\": 24.86, \"occupancy\": 17.86, \"los\": 5.0}, \"3\": {\"revenue\": 3410.94, \"nights\": 22, \"available\": 31, \"stays\": 3, \"adr\": 155.04, \"revpar\": 110.03, \"occupancy\": 70.97, \"los\": 7.33}, \"4\": {\"revenue\": 502.15, \"nights\": 3, \"available\": 30, \"stays\": 1, \"adr\": 167.38, \"revpar\": 16.74, \"occupancy\": 10.0, \"los\": 3.0}, \"5\": {\"revenue\": 1818.8, \"nights\": 12, \"available\": 31, \"stays\": 3, \"adr\": 151.57, \"revpar\": 58.67, \"occupancy\": 38.71, \"los\": 4.0}, \"6\": {\"revenue\": 566.0, \"nights\": 4, \"available\": 30, \"stays\": 1, \"adr\": 141.5, \"revpar\": 18.87, \"occupancy\": 13.33, \"los\": 4.0}, \"7\": {\"revenue\": 2778.59, \"nights\": 12, \"available\": 31, \"stays\": 2, \"adr\": 231.55, \"revpar\": 89.63, \"occupancy\": 38.71, \"los\": 6.0}, \"8\": {\"revenue\": 2355.68, \"nights\": 10, \"available\": 31, \"stays\": 3, \"adr\": 235.57, \"revpar\": 75.99, \"occupancy\": 32.26, \"los\": 3.33}, \"9\": {\"revenue\": 2530.96, \"nights\": 14, \"available\": 30, \"stays\": 2, \"adr\": 180.78, \"revpar\": 84.37, \"occupancy\": 46.67, \"los\": 7.0}, \"10\": {\"revenue\": 4685.28, \"nights\": 27, \"available\": 31, \"stays\": 4, \"adr\": 173.53, \"revpar\": 151.14, \"occupancy\": 87.1, \"los\": 6.75}, \"11\": {\"revenue\": 2998.39, \"nights\": 14, \"available\": 30, \"stays\": 2, \"adr\": 214.17, \"revpar\": 99.95, \"occupancy\": 46.67, \"los\": 7.0}, \"12\": {\"revenue\": 0.0, \"nights\": 0, \"available\": 31, \"stays\": 0, \"adr\": 0, \"revpar\": 0.0, \"occupancy\": 0.0, \"los\": 0}}}, \"blocks\": {\"2025\": {\"year\": {\"calendar\": 365, \"blocked\": 70, \"sellable\": 295, \"block_pct\": 19.18, \"revpar_adj\": 89.53, \"occ_adj\": 50.51}, \"months\": {\"1\": {\"calendar\": 31, \"blocked\": 5, \"sellable\": 26, \"block_pct\": 16.13, \"revpar_adj\": 119.42, \"occ_adj\": 84.62}, \"2\": {\"calendar\": 28, \"blocked\": 5, \"sellable\": 23, \"block_pct\": 17.86, \"revpar_adj\": 119.4, \"occ_adj\": 52.17}, \"3\": {\"calendar\": 31, \"blocked\": 2, \"sellable\": 29, \"block_pct\": 6.45, \"revpar_adj\": 28.86, \"occ_adj\": 24.14}, \"4\": {\"calendar\": 30, \"blocked\": 6, \"sellable\": 24, \"block_pct\": 20.0, \"revpar_adj\": 126.59, \"occ_adj\": 79.17}, \"5\": {\"calendar\": 31, \"blocked\": 2, \"sellable\": 29, \"block_pct\": 6.45, \"revpar_adj\": 32.34, \"occ_adj\": 27.59}, \"6\": {\"calendar\": 30, \"blocked\": 4, \"sellable\": 26, \"block_pct\": 13.33, \"revpar_adj\": 90.29, \"occ_adj\": 42.31}, \"7\": {\"calendar\": 31, \"blocked\": 5, \"sellable\": 26, \"block_pct\": 16.13, \"revpar_adj\": 155.42, \"occ_adj\": 80.77}, \"8\": {\"calendar\": 31, \"blocked\": 3, \"sellable\": 28, \"block_pct\": 9.68, \"revpar_adj\": 88.16, \"occ_adj\": 39.29}, \"9\": {\"calendar\": 30, \"blocked\": 4, \"sellable\": 26, \"block_pct\": 13.33, \"revpar_adj\": 104.0, \"occ_adj\": 69.23}, \"10\": {\"calendar\": 31, \"blocked\": 14, \"sellable\": 17, \"block_pct\": 45.16, \"revpar_adj\": 64.0, \"occ_adj\": 41.18}, \"11\": {\"calendar\": 30, \"blocked\": 13, \"sellable\": 17, \"block_pct\": 43.33, \"revpar_adj\": 70.63, \"occ_adj\": 47.06}, \"12\": {\"calendar\": 31, \"blocked\": 7, \"sellable\": 24, \"block_pct\": 22.58, \"revpar_adj\": 79.01, \"occ_adj\": 20.83}}}, \"2026\": {\"year\": {\"calendar\": 365, \"blocked\": 125, \"sellable\": 240, \"block_pct\": 34.25, \"revpar_adj\": 97.43, \"occ_adj\": 53.33}, \"months\": {\"1\": {\"calendar\": 31, \"blocked\": 19, \"sellable\": 12, \"block_pct\": 61.29, \"revpar_adj\": 86.78, \"occ_adj\": 41.67}, \"2\": {\"calendar\": 28, \"blocked\": 23, \"sellable\": 5, \"block_pct\": 82.14, \"revpar_adj\": 139.2, \"occ_adj\": 100.0}, \"3\": {\"calendar\": 31, \"blocked\": 7, \"sellable\": 24, \"block_pct\": 22.58, \"revpar_adj\": 142.12, \"occ_adj\": 91.67}, \"4\": {\"calendar\": 30, \"blocked\": 16, \"sellable\": 14, \"block_pct\": 53.33, \"revpar_adj\": 35.87, \"occ_adj\": 21.43}, \"5\": {\"calendar\": 31, \"blocked\": 11, \"sellable\": 20, \"block_pct\": 35.48, \"revpar_adj\": 90.94, \"occ_adj\": 60.0}, \"6\": {\"calendar\": 30, \"blocked\": 10, \"sellable\": 20, \"block_pct\": 33.33, \"revpar_adj\": 28.3, \"occ_adj\": 20.0}, \"7\": {\"calendar\": 31, \"blocked\": 7, \"sellable\": 24, \"block_pct\": 22.58, \"revpar_adj\": 115.77, \"occ_adj\": 50.0}, \"8\": {\"calendar\": 31, \"blocked\": 16, \"sellable\": 15, \"block_pct\": 51.61, \"revpar_adj\": 157.05, \"occ_adj\": 66.67}, \"9\": {\"calendar\": 30, \"blocked\": 9, \"sellable\": 21, \"block_pct\": 30.0, \"revpar_adj\": 120.52, \"occ_adj\": 66.67}, \"10\": {\"calendar\": 31, \"blocked\": 4, \"sellable\": 27, \"block_pct\": 12.9, \"revpar_adj\": 173.53, \"occ_adj\": 100.0}, \"11\": {\"calendar\": 30, \"blocked\": 3, \"sellable\": 27, \"block_pct\": 10.0, \"revpar_adj\": 111.05, \"occ_adj\": 51.85}, \"12\": {\"calendar\": 31, \"blocked\": 0, \"sellable\": 31, \"block_pct\": 0.0, \"revpar_adj\": 0.0, \"occ_adj\": 0.0}}}}, \"derived\": {\"pct_of_2025\": 88.54, \"gap_to_2025\": 3026.19, \"blocked_diff\": 55, \"sellable_change\": -18.64, \"block_pp\": 15.07, \"adr_change\": 3.07, \"revpar_change\": 8.82, \"occ_pp\": 2.82, \"blocked_capacity_2025_rp\": 4924.15, \"blocked_capacity_2026_rp\": 5358.65}};\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 p1=n=>(n>=0?'+':'')+n.toFixed(1)+'%';\nconst change=(a,b)=>a?((b\/a)-1)*100:0;\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 Y25=D.yearly['2025'],Y26=D.yearly['2026'],B25=D.blocks['2025'].year,B26=D.blocks['2026'].year,X=D.derived;\nrev26.textContent=euro(Y26.revenue);\npct25.textContent=X.pct_of_2025.toFixed(1)+'%';\nblockDiff.textContent='+'+num(X.blocked_diff);\nblocks.textContent=num(B25.blocked)+' \u2192 '+num(B26.blocked)+' noches';\nsellDelta.textContent=p1(X.sellable_change);\nsellable.textContent=num(B25.sellable)+' \u2192 '+num(B26.sellable);\nrpChange.textContent=p1(X.revpar_change);\nrpVals.textContent=euro2(B25.revpar_adj)+' \u2192 '+euro2(B26.revpar_adj);\n\nrev25.textContent=euro(Y25.revenue);\ngap.textContent=euro(X.gap_to_2025);\nadr.textContent=euro2(Y25.adr)+' \u2192 '+euro2(Y26.adr);\nadrDelta.textContent='\u25b2 +'+X.adr_change.toFixed(1)+'%';\nocc.textContent=B25.occ_adj.toFixed(1)+'% \u2192 '+B26.occ_adj.toFixed(1)+'%';\noccDelta.textContent='\u25b2 +'+X.occ_pp.toFixed(1)+' pp';\n\nb25.textContent=num(B25.blocked)+' noches';bp25.textContent=B25.block_pct.toFixed(1)+'% del calendario';\nb26.textContent=num(B26.blocked)+' noches';bp26.textContent=B26.block_pct.toFixed(1)+'% del calendario';\nsellCompare.textContent=num(B25.sellable)+' \u2192 '+num(B26.sellable);\nblockPctChange.textContent='+'+X.block_pp.toFixed(1)+' pp';\n\nimpactText.innerHTML=`En 2026 se han bloqueado <strong>${num(X.blocked_diff)} noches m\u00e1s<\/strong>. Eso reduce el inventario comercializable un <strong>${Math.abs(X.sellable_change).toFixed(1)}%<\/strong>. Para dimensionar el efecto: esas 55 noches, valoradas al RevPAR ajustado de 2025, representan aproximadamente <strong>${euro(X.blocked_capacity_2025_rp)}<\/strong> de capacidad potencial de producci\u00f3n que este a\u00f1o no ha estado disponible para vender. No es revenue garantizado, pero s\u00ed muestra que los bloqueos reducen de forma material el techo de ingresos.`;\n\nperformanceText.innerHTML=`Sobre las noches que s\u00ed han estado disponibles, el rendimiento <strong>mejora<\/strong>: ADR ${euro2(Y25.adr)} \u2192 ${euro2(Y26.adr)} (${p1(X.adr_change)}), ocupaci\u00f3n ajustada ${B25.occ_adj.toFixed(1)}% \u2192 ${B26.occ_adj.toFixed(1)}% (+${X.occ_pp.toFixed(1)} pp) y RevPAR ajustado ${euro2(B25.revpar_adj)} \u2192 ${euro2(B26.revpar_adj)} (${p1(X.revpar_change)}). Con 2026 todav\u00eda abierto, los datos no permiten leer la cifra actual como una ca\u00edda anual cerrada.`;\n\nChart.defaults.font.family='Arial, Helvetica, sans-serif';Chart.defaults.color='#6D6962';\n\nnew Chart(document.getElementById('revenueChart'),{\n type:'bar',\n data:{labels:D.months,datasets:[\n  {label:'2025',data:D.months.map((_,i)=>D.monthly['2025'][String(i+1)].revenue),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'2026 \u00b7 OTB',data:D.months.map((_,i)=>D.monthly['2026'][String(i+1)].revenue),backgroundColor:'#4ABCC5',borderRadius:3}\n ]},\n options:{maintainAspectRatio:false,plugins:{legend:{position:'bottom'},tooltip:{callbacks:{label:x=>x.dataset.label+': '+euro(x.raw)}}},scales:{y:{ticks:{callback:v=>euro(v)},grid:{color:'#EFEBE5'}},x:{grid:{display:false}}}}\n});\n\nnew Chart(document.getElementById('blocksChart'),{\n type:'bar',\n data:{labels:D.months,datasets:[\n  {label:'Bloqueos 2025',data:D.months.map((_,i)=>D.blocks['2025'].months[String(i+1)].blocked),backgroundColor:'#D1B38C',borderRadius:3},\n  {label:'Bloqueos 2026',data:D.months.map((_,i)=>D.blocks['2026'].months[String(i+1)].blocked),backgroundColor:'#4ABCC5',borderRadius:3}\n ]},\n options:{maintainAspectRatio:false,plugins:{legend:{position:'bottom'},tooltip:{callbacks:{label:x=>x.dataset.label+': '+num(x.raw)+' noches'}}},scales:{y:{beginAtZero:true,grid:{color:'#EFEBE5'},ticks:{precision:0}},x:{grid:{display:false}}}}\n});\n\nD.months.forEach((name,i)=>{\n const m=String(i+1),a=D.monthly['2025'][m],b=D.monthly['2026'][m],ba=D.blocks['2025'].months[m],bb=D.blocks['2026'].months[m];\n const status=i<8?'Mes cerrado':i===8?'Mes en curso':'Mes futuro \u00b7 reservas OTB';\n const css=i<8?'closed':i===8?'live':'future';\n let result='';\n if(i<8){\n   const ch=change(a.revenue,b.revenue);\n   result=`<div class=\"result ${ch>=0?'good':'bad'}\">${ch>=0?'\u25b2':'\u25bc'} ${Math.abs(ch).toFixed(1)}% de revenue<\/div>`;\n } else {\n   result=`<div class=\"result neutral\">${i===11 && b.revenue===0?'Sin reservas confirmadas actualmente \u00b7 mes todav\u00eda abierto':'Producci\u00f3n actualmente confirmada \u00b7 todav\u00eda puede crecer'}<\/div>`;\n }\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 final<\/div><div class=\"val\">${euro(a.revenue)}<\/div><\/div><div class=\"box\"><div class=\"yr\">2026 actual<\/div><div class=\"val\">${euro(b.revenue)}<\/div><\/div><\/div>\n  ${result}\n  <div class=\"metrics\">\n   <div class=\"micro\"><div class=\"l\">ADR 2026<\/div><div class=\"v\">${euro2(b.adr)}<\/div><div class=\"s\">2025: ${euro2(a.adr)}<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">RevPAR ajustado<\/div><div class=\"v\">${euro2(bb.revpar_adj)}<\/div><div class=\"s\">2025: ${euro2(ba.revpar_adj)}<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">Ocupaci\u00f3n ajustada<\/div><div class=\"v\">${bb.occ_adj.toFixed(1)}%<\/div><div class=\"s\">2025: ${ba.occ_adj.toFixed(1)}%<\/div><\/div>\n   <div class=\"micro\"><div class=\"l\">Bloqueos 2026<\/div><div class=\"v\">${num(bb.blocked)}<\/div><div class=\"s\">2025: ${num(ba.blocked)}<\/div><\/div>\n  <\/div>\n  <div class=\"blockline\">Noches vendibles: <strong>${num(ba.sellable)} en 2025<\/strong> \u2192 <strong>${num(bb.sellable)} en 2026<\/strong> \u00b7 Bloqueo ${ba.block_pct.toFixed(1)}% \u2192 ${bb.block_pct.toFixed(1)}%<\/div>\n <\/div>`);\n});\n\nD.months.forEach((x,i)=>period.insertAdjacentHTML('beforeend',`<option value=\"${i+1}\">${x}<\/option>`));\n\nfunction histData(year,p){\n const base=p==='year'?D.yearly[year]:D.monthly[year][p];\n let out={...base};\n if((year==='2025'||year==='2026')){\n   const bl=p==='year'?D.blocks[year].year:D.blocks[year].months[p];\n   out.revpar_display=bl.revpar_adj;\n   out.occupancy_display=bl.occ_adj;\n   out.blocked=bl.blocked;\n }else{\n   out.revpar_display=base.revpar;\n   out.occupancy_display=base.occupancy;\n   out.blocked=null;\n }\n return out;\n}\nfunction renderHistory(){\n const a=histData(ya.value,period.value),b=histData(yb.value,period.value);\n const arr=[\n  ['Revenue','revenue',euro],\n  ['Noches','nights',num],\n  ['ADR','adr',euro2],\n  ['RevPAR','revpar_display',euro2],\n  ['Ocupaci\u00f3n','occupancy_display',n=>(n||0).toFixed(1)+'%']\n ];\n histKpis.innerHTML=arr.map(([l,k,f])=>{\n   const c=change(a[k]||0,b[k]||0);\n   return `<div class=\"hk\"><div class=\"l\">${l}<\/div><div class=\"pair\">${f(a[k]||0)} \u2192 ${f(b[k]||0)}<\/div><div class=\"chg ${c>=0?'up':'dn'}\">${a[k]?p1(c):'\u2014'}<\/div><\/div>`;\n }).join('');\n}\n[ya,yb,period].forEach(x=>x.onchange=renderHistory);renderHistory();\n<\/script>\n<\/body><\/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>La escuela de La Sorrueda \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard La escuela de La Sorrueda 1 alojamiento2025 cerrado \u00b7 2026 todav\u00eda abiertoDatos actualizados \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamiento Hist\u00f3rico 2024\u20132026 Visi\u00f3n global Situaci\u00f3n general 2025 est\u00e1 cerrado. 2026 incluye toda la producci\u00f3n ya confirmada hasta final de a\u00f1o y todav\u00eda puede [&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-1773","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 La escuela de la Sorrueda - 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-laescuela\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dashboard La escuela de la Sorrueda - Villas Rivero\" \/>\n<meta property=\"og:description\" content=\"La escuela de La Sorrueda \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard La escuela de La Sorrueda 1 alojamiento2025 cerrado \u00b7 2026 todav\u00eda abiertoDatos actualizados \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamiento Hist\u00f3rico 2024\u20132026 Visi\u00f3n global Situaci\u00f3n general 2025 est\u00e1 cerrado. 2026 incluye toda la producci\u00f3n ya confirmada hasta final de a\u00f1o y todav\u00eda puede [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/villasrivero.com\/en\/dashboard-laescuela\/\" \/>\n<meta property=\"og:site_name\" content=\"Villas Rivero\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T16:44:04+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-laescuela\\\/\",\"url\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-laescuela\\\/\",\"name\":\"Dashboard La escuela de la Sorrueda - Villas Rivero\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/villasrivero.com\\\/#website\"},\"datePublished\":\"2026-10-28T16:43:42+00:00\",\"dateModified\":\"2026-10-28T16:44:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-laescuela\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/villasrivero.com\\\/dashboard-laescuela\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/villasrivero.com\\\/dashboard-laescuela\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/villasrivero.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dashboard La escuela de la Sorrueda\"}]},{\"@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 La escuela de la Sorrueda - 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-laescuela\/","og_locale":"en_GB","og_type":"article","og_title":"Dashboard La escuela de la Sorrueda - Villas Rivero","og_description":"La escuela de La Sorrueda \u00b7 Villas Rivero Villas RiveroPortfolio Dashboard La escuela de La Sorrueda 1 alojamiento2025 cerrado \u00b7 2026 todav\u00eda abiertoDatos actualizados \u00b7 19\/10\/2026 Situaci\u00f3n general Mes a mes Alojamiento Hist\u00f3rico 2024\u20132026 Visi\u00f3n global Situaci\u00f3n general 2025 est\u00e1 cerrado. 2026 incluye toda la producci\u00f3n ya confirmada hasta final de a\u00f1o y todav\u00eda puede [&hellip;]","og_url":"https:\/\/villasrivero.com\/en\/dashboard-laescuela\/","og_site_name":"Villas Rivero","article_modified_time":"2026-10-28T16:44:04+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/villasrivero.com\/dashboard-laescuela\/","url":"https:\/\/villasrivero.com\/dashboard-laescuela\/","name":"Dashboard La escuela de la Sorrueda - Villas Rivero","isPartOf":{"@id":"https:\/\/villasrivero.com\/#website"},"datePublished":"2026-10-28T16:43:42+00:00","dateModified":"2026-10-28T16:44:04+00:00","breadcrumb":{"@id":"https:\/\/villasrivero.com\/dashboard-laescuela\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/villasrivero.com\/dashboard-laescuela\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/villasrivero.com\/dashboard-laescuela\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/villasrivero.com\/"},{"@type":"ListItem","position":2,"name":"Dashboard La escuela de la Sorrueda"}]},{"@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\/1773","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=1773"}],"version-history":[{"count":4,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages\/1773\/revisions"}],"predecessor-version":[{"id":1777,"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/pages\/1773\/revisions\/1777"}],"wp:attachment":[{"href":"https:\/\/villasrivero.com\/en\/wp-json\/wp\/v2\/media?parent=1773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}