{"id":975,"date":"2026-03-29T21:21:41","date_gmt":"2026-03-29T19:21:41","guid":{"rendered":"https:\/\/torreshospitalityconsulting.com\/?page_id=975"},"modified":"2026-03-29T21:30:05","modified_gmt":"2026-03-29T19:30:05","slug":"calculadora","status":"publish","type":"page","link":"https:\/\/torreshospitalityconsulting.com\/en\/calculadora\/","title":{"rendered":"Ancillary Income Calculator"},"content":{"rendered":"<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Calculadora de Revenue Potencial \u00b7 Torres Hospitality Consulting<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@300;400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  :root {\n    --red:         #e8312a;\n    --red-dim:     rgba(232,49,42,0.07);\n    --red-border:  rgba(232,49,42,0.28);\n    --black:       #1a1a1a;\n    --dark:        #333333;\n    --gray:        #777777;\n    --gray-light:  #b0b0b0;\n    --border:      #e0e0e0;\n    --bg:          #f5f5f5;\n    --white:       #ffffff;\n    --green:       #27ae60;\n    --green-dim:   rgba(39,174,96,0.07);\n    --green-border:rgba(39,174,96,0.28);\n  }\n\n  * { margin: 0; padding: 0; box-sizing: border-box; }\n\n  body {\n    font-family: 'DM Sans', sans-serif;\n    background: var(--white);\n    color: var(--black);\n    min-height: 100vh;\n  }\n\n  .top-bar { height: 4px; background: var(--red); }\n\n  .wrapper {\n    max-width: 860px;\n    margin: 0 auto;\n    padding: 52px 24px 80px;\n  }\n\n  \/* HEADER *\/\n  .header { margin-bottom: 48px; }\n\n  .brand {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 28px;\n  }\n\n  .brand-bar { width: 32px; height: 3px; background: var(--red); flex-shrink: 0; }\n\n  .brand span {\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--gray);\n  }\n\n  h1 {\n    font-size: clamp(28px, 4.5vw, 46px);\n    font-weight: 800;\n    line-height: 1.1;\n    color: var(--black);\n    margin-bottom: 16px;\n    letter-spacing: -0.02em;\n  }\n\n  h1 em { font-style: normal; color: var(--red); }\n\n  .subtitle {\n    font-size: 15px;\n    color: var(--gray);\n    font-weight: 400;\n    max-width: 560px;\n    line-height: 1.7;\n  }\n\n  \/* GRID *\/\n  .calc-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n    margin-bottom: 16px;\n  }\n\n  @media (max-width: 600px) { .calc-grid { grid-template-columns: 1fr; } }\n\n  \/* CARDS *\/\n  .card {\n    background: var(--white);\n    border: 1px solid var(--border);\n    border-radius: 12px;\n    padding: 28px;\n    transition: border-color 0.2s, box-shadow 0.2s;\n  }\n\n  .card:hover {\n    border-color: var(--red);\n    box-shadow: 0 4px 20px rgba(232,49,42,0.07);\n  }\n\n  .card-label {\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--red);\n    margin-bottom: 20px;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n\n  .card-label::before {\n    content: '';\n    display: block;\n    width: 14px; height: 2px;\n    background: var(--red);\n  }\n\n  \/* INPUTS *\/\n  .field { margin-bottom: 20px; }\n  .field:last-child { margin-bottom: 0; }\n\n  .field label {\n    display: block;\n    font-size: 12px;\n    font-weight: 600;\n    color: var(--dark);\n    margin-bottom: 8px;\n  }\n\n  .input-wrap { position: relative; }\n\n  .input-wrap .unit {\n    position: absolute;\n    right: 14px; top: 50%;\n    transform: translateY(-50%);\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--gray-light);\n    pointer-events: none;\n  }\n\n  input[type=\"number\"] {\n    width: 100%;\n    background: var(--bg);\n    border: 1px solid var(--border);\n    border-radius: 8px;\n    padding: 13px 40px 13px 16px;\n    font-family: 'DM Sans', sans-serif;\n    font-size: 16px;\n    font-weight: 600;\n    color: var(--black);\n    outline: none;\n    transition: border-color 0.2s;\n    -moz-appearance: textfield;\n  }\n\n  input[type=\"number\"]::-webkit-inner-spin-button,\n  input[type=\"number\"]::-webkit-outer-spin-button { -webkit-appearance: none; }\n\n  input[type=\"number\"]:focus {\n    border-color: var(--red);\n    background: var(--white);\n  }\n\n  \/* SLIDER *\/\n  .slider-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    margin-bottom: 12px;\n  }\n\n  .slider-header label { font-size: 12px; font-weight: 600; color: var(--dark); }\n\n  .slider-value { font-size: 26px; font-weight: 800; color: var(--black); }\n\n  input[type=\"range\"] {\n    width: 100%;\n    height: 4px;\n    background: var(--border);\n    border-radius: 4px;\n    outline: none;\n    cursor: pointer;\n    -webkit-appearance: none;\n    margin-bottom: 8px;\n  }\n\n  input[type=\"range\"]::-webkit-slider-thumb {\n    -webkit-appearance: none;\n    width: 20px; height: 20px;\n    background: var(--red);\n    border-radius: 50%;\n    border: 3px solid var(--white);\n    box-shadow: 0 0 0 2px var(--red);\n    cursor: pointer;\n    transition: transform 0.15s;\n  }\n\n  input[type=\"range\"]::-webkit-slider-thumb:hover { transform: scale(1.15); }\n\n  .slider-ticks {\n    display: flex;\n    justify-content: space-between;\n    font-size: 10px;\n    color: var(--gray-light);\n  }\n\n  \/* SCENARIOS \u2014 vertical stack, no overflow *\/\n  .scenarios { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }\n\n  .scenario-btn {\n    background: var(--bg);\n    border: 1.5px solid var(--border);\n    border-radius: 10px;\n    padding: 12px 16px;\n    cursor: pointer;\n    transition: all 0.2s;\n    color: var(--black);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    width: 100%;\n    text-align: left;\n  }\n\n  .scenario-btn:hover { border-color: var(--red); background: var(--red-dim); }\n\n  .scenario-btn.active {\n    border-color: var(--red);\n    background: var(--red-dim);\n    box-shadow: 0 2px 10px rgba(232,49,42,0.1);\n  }\n\n  .scenario-info { flex: 1; min-width: 0; }\n\n  .scenario-name {\n    font-size: 10px;\n    font-weight: 700;\n    color: var(--red);\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    margin-bottom: 2px;\n  }\n\n  .scenario-desc {\n    font-size: 11px;\n    color: var(--gray);\n    line-height: 1.3;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  .scenario-value {\n    font-size: 20px;\n    font-weight: 800;\n    color: var(--black);\n    flex-shrink: 0;\n  }\n\n  \/* RESULTS *\/\n  .results-header {\n    margin-bottom: 16px;\n    padding-bottom: 16px;\n    border-bottom: 1px solid var(--border);\n  }\n\n  .results-header h2 {\n    font-size: 14px;\n    font-weight: 700;\n    color: var(--black);\n    margin-bottom: 3px;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n  }\n\n  .results-header p { font-size: 12px; color: var(--gray); }\n\n  .results-grid {\n    display: grid;\n    grid-template-columns: repeat(3,1fr);\n    gap: 12px;\n    margin-bottom: 14px;\n  }\n\n  @media (max-width: 600px) { .results-grid { grid-template-columns: 1fr; } }\n\n  .result-card {\n    border-radius: 10px;\n    padding: 22px 16px;\n    text-align: center;\n    position: relative;\n    overflow: hidden;\n    transition: transform 0.2s;\n  }\n\n  .result-card:hover { transform: translateY(-2px); }\n\n  .result-card::before {\n    content: '';\n    position: absolute;\n    top: 0; left: 0; right: 0;\n    height: 3px;\n  }\n\n  .result-card.current  { background: var(--bg); border: 1px solid var(--border); }\n  .result-card.current::before { background: var(--gray-light); }\n\n  .result-card.medio  { background: var(--red-dim); border: 1px solid var(--red-border); }\n  .result-card.medio::before { background: var(--red); }\n\n  .result-card.optimo { background: var(--green-dim); border: 1px solid var(--green-border); }\n  .result-card.optimo::before { background: var(--green); }\n\n  .result-tag {\n    font-size: 9px;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    margin-bottom: 12px;\n    color: var(--gray);\n  }\n\n  .result-card.medio .result-tag  { color: var(--red); }\n  .result-card.optimo .result-tag { color: var(--green); }\n\n  .result-amount {\n    font-size: 30px;\n    font-weight: 800;\n    line-height: 1;\n    margin-bottom: 4px;\n    color: var(--black);\n  }\n\n  .result-card.medio .result-amount  { color: var(--red); }\n  .result-card.optimo .result-amount { color: var(--green); }\n\n  .result-period { font-size: 10px; color: var(--gray-light); margin-bottom: 12px; }\n\n  .result-per-stay {\n    font-size: 11px;\n    padding: 4px 10px;\n    border-radius: 20px;\n    background: rgba(0,0,0,0.05);\n    display: inline-block;\n    color: var(--gray);\n    font-weight: 500;\n  }\n\n  \/* GAP *\/\n  .gap-card {\n    background: var(--black);\n    border-radius: 12px;\n    padding: 28px;\n    display: flex;\n    align-items: center;\n    gap: 24px;\n    margin-bottom: 14px;\n  }\n\n  @media (max-width: 600px) { .gap-card { flex-direction: column; } }\n\n  .gap-icon { font-size: 34px; flex-shrink: 0; }\n\n  .gap-label {\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--gray-light);\n    margin-bottom: 6px;\n  }\n\n  .gap-amount {\n    font-size: 40px;\n    font-weight: 800;\n    color: var(--white);\n    line-height: 1;\n    margin-bottom: 6px;\n  }\n\n  .gap-desc { font-size: 12px; color: var(--gray-light); line-height: 1.6; }\n\n  \/* BENCHMARK *\/\n  .benchmark-card {\n    background: var(--white);\n    border: 1px solid var(--border);\n    border-radius: 12px;\n    padding: 28px;\n    margin-bottom: 14px;\n  }\n\n  .benchmark-title {\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--red);\n    margin-bottom: 20px;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n\n  .benchmark-title::before {\n    content: '';\n    display: block;\n    width: 14px; height: 2px;\n    background: var(--red);\n  }\n\n  .bar-track {\n    position: relative;\n    height: 6px;\n    background: var(--bg);\n    border-radius: 6px;\n    margin-bottom: 14px;\n    margin-top: 28px;\n  }\n\n  .bar-fill {\n    position: absolute;\n    left: 0; top: 0; bottom: 0; right: 0;\n    border-radius: 6px;\n    background: linear-gradient(90deg, #e8312a 0%, #ccc 50%, #27ae60 100%);\n    opacity: 0.2;\n  }\n\n  .bar-pointer {\n    position: absolute;\n    top: -22px;\n    transform: translateX(-50%);\n    font-size: 11px;\n    font-weight: 700;\n    color: var(--red);\n    white-space: nowrap;\n    transition: left 0.4s ease;\n  }\n\n  .bar-pointer::after {\n    content: '';\n    position: absolute;\n    bottom: -10px; left: 50%;\n    transform: translateX(-50%);\n    width: 2px; height: 8px;\n    background: var(--red);\n  }\n\n  .bar-labels {\n    display: flex;\n    justify-content: space-between;\n    font-size: 10px;\n    color: var(--gray-light);\n  }\n\n  .benchmark-cols {\n    display: grid;\n    grid-template-columns: repeat(4,1fr);\n    gap: 8px;\n    margin-top: 20px;\n    text-align: center;\n  }\n\n  .bench-col-label {\n    font-size: 9px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: var(--gray-light);\n    margin-bottom: 6px;\n  }\n\n  .bench-col-val { font-size: 18px; font-weight: 800; }\n\n  \/* CTA *\/\n  .cta-card {\n    background: var(--red);\n    border-radius: 12px;\n    padding: 36px 32px;\n    text-align: center;\n    position: relative;\n    overflow: hidden;\n  }\n\n  .cta-card::before {\n    content: '';\n    position: absolute;\n    top: -60px; right: -60px;\n    width: 180px; height: 180px;\n    background: rgba(255,255,255,0.06);\n    border-radius: 50%;\n  }\n\n  .cta-card::after {\n    content: '';\n    position: absolute;\n    bottom: -80px; left: -40px;\n    width: 220px; height: 220px;\n    background: rgba(0,0,0,0.07);\n    border-radius: 50%;\n  }\n\n  .cta-card h3 {\n    font-size: 20px;\n    font-weight: 800;\n    color: var(--white);\n    margin-bottom: 10px;\n    position: relative; z-index: 1;\n  }\n\n  .cta-card p {\n    font-size: 14px;\n    color: rgba(255,255,255,0.85);\n    margin-bottom: 24px;\n    line-height: 1.6;\n    position: relative; z-index: 1;\n    max-width: 460px;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  .cta-btn {\n    display: inline-block;\n    background: var(--white);\n    color: var(--red);\n    font-family: 'DM Sans', sans-serif;\n    font-size: 13px;\n    font-weight: 700;\n    padding: 14px 32px;\n    border-radius: 6px;\n    text-decoration: none;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    position: relative; z-index: 1;\n    transition: transform 0.2s, box-shadow 0.2s;\n    border: none;\n    cursor: pointer;\n  }\n\n  .cta-btn:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 8px 28px rgba(0,0,0,0.2);\n  }\n\n  .cta-author {\n    margin-top: 14px;\n    font-size: 11px;\n    color: rgba(255,255,255,0.6);\n    position: relative; z-index: 1;\n  }\n\n  \/* FOOTER *\/\n  .calc-footer {\n    text-align: center;\n    margin-top: 48px;\n    padding-top: 24px;\n    border-top: 1px solid var(--border);\n    font-size: 11px;\n    color: var(--gray-light);\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n  }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"top-bar\"><\/div>\n\n<div class=\"wrapper\">\n\n  <!-- Header -->\n  <div class=\"header\">\n    <div class=\"brand\">\n      <div class=\"brand-bar\"><\/div>\n      <span>Torres Hospitality Consulting<\/span>\n    <\/div>\n    <h1>How much money does it leave?<br>your hotel <em>on the table<\/em>?<\/h1>\n    <p class=\"subtitle\">Enter your hotel details and calculate in seconds the upsell revenue you could be generating each year. The calculation is based on occupied nights\u2014every night is an upsell opportunity.<\/p>\n  <\/div>\n\n  <!-- Inputs -->\n  <div class=\"calc-grid\">\n\n    <div class=\"card\">\n      <div class=\"card-label\">Your hotel<\/div>\n\n      <div class=\"field\">\n        <label>Number of rooms<\/label>\n        <div class=\"input-wrap\">\n          <input type=\"number\" id=\"thc-rooms\" value=\"100\" min=\"10\" max=\"500\">\n          <span class=\"unit\">hab.<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"field\">\n        <div class=\"slider-header\">\n          <label>Average annual occupancy<\/label>\n          <span class=\"slider-value\" id=\"thc-occ-display\">72%<\/span>\n        <\/div>\n        <input type=\"range\" id=\"thc-occupancy\" min=\"30\" max=\"98\" value=\"72\">\n        <div class=\"slider-ticks\">\n          <span>30%<\/span><span>50%<\/span><span>70%<\/span><span>90%<\/span><span>98%<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <div class=\"card-label\">Current situation<\/div>\n\n      <div class=\"field\">\n        <label>Current ancillary revenue per stay<\/label>\n        <div class=\"input-wrap\">\n          <input type=\"number\" id=\"thc-current-rev\" value=\"5\" min=\"0\" max=\"200\">\n          <span class=\"unit\">\u20ac<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"field\">\n        <div class=\"card-label\" style=\"margin-bottom: 10px;\">Target scenario<\/div>\n        <div class=\"scenarios\">\n          <button class=\"scenario-btn\" onclick=\"thcSetScenario(this, 15)\">\n            <div class=\"scenario-info\">\n              <div class=\"scenario-name\">Base<\/div>\n              <div class=\"scenario-desc\">Basic active program<\/div>\n            <\/div>\n            <div class=\"scenario-value\">15\u20ac<\/div>\n          <\/button>\n          <button class=\"scenario-btn active\" onclick=\"thcSetScenario(this, 27)\">\n            <div class=\"scenario-info\">\n              <div class=\"scenario-name\">Half<\/div>\n              <div class=\"scenario-desc\">Structured implementation<\/div>\n            <\/div>\n            <div class=\"scenario-value\">27\u20ac<\/div>\n          <\/button>\n          <button class=\"scenario-btn\" onclick=\"thcSetScenario(this, 40)\">\n            <div class=\"scenario-info\">\n              <div class=\"scenario-name\">Optimum<\/div>\n              <div class=\"scenario-desc\">Top performers in the sector<\/div>\n            <\/div>\n            <div class=\"scenario-value\">40\u20ac<\/div>\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n\n  <!-- Results -->\n  <div class=\"results-header\">\n    <h2>Your revenue projection<\/h2>\n    <p>Based on <span id=\"thc-stays-count\">\u2014<\/span> Estimated annual occupied nights (rooms \u00d7 occupancy \u00d7 365 days)<\/p>\n  <\/div>\n\n  <div class=\"results-grid\">\n    <div class=\"result-card current\">\n      <div class=\"result-tag\">Current situation<\/div>\n      <div class=\"result-amount\" id=\"thc-current-total\">\u2014<\/div>\n      <div class=\"result-period\">per year<\/div>\n      <div class=\"result-per-stay\"><span id=\"thc-current-per\">\u2014<\/span>\u20ac \/ stay<\/div>\n    <\/div>\n    <div class=\"result-card medio\">\n      <div class=\"result-tag\">Target scenario<\/div>\n      <div class=\"result-amount\" id=\"thc-target-total\">\u2014<\/div>\n      <div class=\"result-period\">per year<\/div>\n      <div class=\"result-per-stay\"><span id=\"thc-target-per\">\u2014<\/span>\u20ac \/ stay<\/div>\n    <\/div>\n    <div class=\"result-card optimo\">\n      <div class=\"result-tag\">Optimal potential<\/div>\n      <div class=\"result-amount\" id=\"thc-optimo-total\">\u2014<\/div>\n      <div class=\"result-period\">per year<\/div>\n      <div class=\"result-per-stay\">\u20ac40 \/ stay<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Gap -->\n  <div class=\"gap-card\">\n    <div class=\"gap-icon\">\ud83d\udca1<\/div>\n    <div>\n      <div class=\"gap-label\">Uncaptured revenue vs. target scenario<\/div>\n      <div class=\"gap-amount\" id=\"thc-gap-amount\">\u2014<\/div>\n      <div class=\"gap-desc\" id=\"thc-gap-desc\">Enter your hotel details to see the calculation.<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Benchmark -->\n  <div class=\"benchmark-card\">\n    <div class=\"benchmark-title\">Where does your hotel stand in relation to the sector?<\/div>\n    <div style=\"font-size: 11px; color: var(--gray-light); margin-bottom: 4px;\">Ancillary revenue per stay \u00b7 4\u20135 star hotels \u00b7 Europe<\/div>\n    <div class=\"bar-track\">\n      <div class=\"bar-fill\"><\/div>\n      <div class=\"bar-pointer\" id=\"thc-benchmark-pointer\" style=\"left: 10%;\">5\u20ac<\/div>\n    <\/div>\n    <div class=\"bar-labels\">\n      <span>0\u20ac<\/span><span>10\u20ac<\/span><span>20\u20ac<\/span><span>30\u20ac<\/span><span>40\u20ac+<\/span>\n    <\/div>\n    <div class=\"benchmark-cols\">\n      <div>\n        <div class=\"bench-col-label\">No program<\/div>\n        <div class=\"bench-col-val\" style=\"color:var(--red);\">2\u20136\u20ac<\/div>\n      <\/div>\n      <div>\n        <div class=\"bench-col-label\">Essential<\/div>\n        <div class=\"bench-col-val\" style=\"color:var(--gray);\">12\u201318\u20ac<\/div>\n      <\/div>\n      <div>\n        <div class=\"bench-col-label\">Structured<\/div>\n        <div class=\"bench-col-val\" style=\"color:var(--dark);\">\u20ac25\u201335<\/div>\n      <\/div>\n      <div>\n        <div class=\"bench-col-label\">Top 10%<\/div>\n        <div class=\"bench-col-val\" style=\"color:var(--green);\">40\u20ac+<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- CTA -->\n  <div class=\"cta-card\">\n    <h3>Do you want to know exactly how to get there?<\/h3>\n    <p>Book a free 30-minute session with Pablo Torres. We&#039;ll analyze your situation together and I&#039;ll tell you which levers to activate first.<\/p>\n    <a href=\"mailto:pablo.torres@torresconsulting.co.uk?subject=Solicitud%20sesi%C3%B3n%20gratuita%20diagn%C3%B3stico%20upsell&#038;body=Hola%20Pablo%2C%0A%0AMe%20gustar%C3%ADa%20reservar%20una%20sesi%C3%B3n%20gratuita%20de%2030%20minutos%20para%20analizar%20el%20potencial%20de%20upsell%20de%20mi%20hotel.%0A%0ANombre%3A%20%0AHotel%3A%20%0AHabitaciones%3A%20%0A%0AGracias\" class=\"cta-btn\">Book a free session \u2192<\/a>\n    <div class=\"cta-author\">Pablo Torres \u00b7 pablo.torres@torresconsulting.co.uk<\/div>\n  <\/div>\n\n  <div class=\"calc-footer\">Torres Hospitality Consulting \u00b7 torreshospitalityconsulting.com<\/div>\n\n<\/div>\n\n<script>\n(function() {\n  var thcTarget = 27;\n\n  function fmt(n) {\n    if (n >= 1000000) return (n \/ 1000000).toFixed(1).replace('.', ',') + 'M\u20ac';\n    if (n >= 1000) return Math.round(n \/ 1000) + 'K\u20ac';\n    return Math.round(n) + '\u20ac';\n  }\n\n  function fmtFull(n) {\n    return n.toLocaleString('es-ES') + '\u20ac';\n  }\n\n  function thcCalculate() {\n    var rooms      = parseInt(document.getElementById('thc-rooms').value) || 0;\n    var occ        = parseInt(document.getElementById('thc-occupancy').value) || 0;\n    var currentPer = parseFloat(document.getElementById('thc-current-rev').value) || 0;\n\n    var stays        = Math.round(rooms * (occ \/ 100) * 365);\n    var currentTotal = Math.round(stays * currentPer);\n    var targetTotal  = Math.round(stays * thcTarget);\n    var optimoTotal  = Math.round(stays * 40);\n    var gap          = targetTotal - currentTotal;\n\n    document.getElementById('thc-stays-count').textContent = stays.toLocaleString('es-ES');\n    document.getElementById('thc-current-total').textContent = fmt(currentTotal);\n    document.getElementById('thc-target-total').textContent  = fmt(targetTotal);\n    document.getElementById('thc-optimo-total').textContent  = fmt(optimoTotal);\n    document.getElementById('thc-current-per').textContent   = currentPer.toFixed(0);\n    document.getElementById('thc-target-per').textContent    = thcTarget;\n    document.getElementById('thc-gap-amount').textContent    = fmtFull(Math.max(0, gap));\n\n    document.getElementById('thc-gap-desc').textContent = gap > 0\n      ? 'Con ' + rooms + ' habitaciones y un ' + occ + '% de ocupaci\u00f3n, tienes ' + stays.toLocaleString('es-ES') + ' estancias al a\u00f1o. Pasar de ' + currentPer + '\u20ac a ' + thcTarget + '\u20ac por estancia representa ' + fmtFull(gap) + ' de revenue adicional anual.'\n      : 'Tu revenue actual ya est\u00e1 en el escenario objetivo. \u00a1Bien hecho! Eval\u00faa si puedes alcanzar el nivel \u00f3ptimo.';\n\n    var pct = Math.min((currentPer \/ 50) * 100, 96);\n    var pointer = document.getElementById('thc-benchmark-pointer');\n    pointer.style.left = Math.max(3, pct) + '%';\n    pointer.textContent = currentPer + '\u20ac';\n  }\n\n  window.thcSetScenario = function(btn, val) {\n    var btns = document.querySelectorAll('.scenario-btn');\n    for (var i = 0; i < btns.length; i++) btns[i].classList.remove('active');\n    btn.classList.add('active');\n    thcTarget = val;\n    thcCalculate();\n  };\n\n  document.getElementById('thc-occupancy').addEventListener('input', function() {\n    document.getElementById('thc-occ-display').textContent = this.value + '%';\n    thcCalculate();\n  });\n\n  document.getElementById('thc-rooms').addEventListener('input', thcCalculate);\n  document.getElementById('thc-current-rev').addEventListener('input', thcCalculate);\n\n  \/\/ Run on load \u2014 compatible with WordPress\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', thcCalculate);\n  } else {\n    thcCalculate();\n  }\n})();\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Calculadora de Revenue Potencial \u00b7 Torres Hospitality Consulting Torres Hospitality Consulting \u00bfCu\u00e1nto dinero dejatu hotel sobre la mesa? Introduce los datos de tu hotel y calcula<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-blank.php","meta":{"footnotes":""},"class_list":["post-975","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/pages\/975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/comments?post=975"}],"version-history":[{"count":3,"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/pages\/975\/revisions"}],"predecessor-version":[{"id":978,"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/pages\/975\/revisions\/978"}],"wp:attachment":[{"href":"https:\/\/torreshospitalityconsulting.com\/en\/wp-json\/wp\/v2\/media?parent=975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}