{"id":988136,"date":"2025-12-05T11:57:53","date_gmt":"2025-12-05T11:57:53","guid":{"rendered":"https:\/\/tamraghtsurfhouse.com\/?page_id=988136"},"modified":"2026-08-13T22:16:05","modified_gmt":"2026-08-13T22:16:05","slug":"pacchetti","status":"publish","type":"page","link":"https:\/\/tamraghtsurfhouse.com\/it\/packages\/","title":{"rendered":"Packages"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"988136\" class=\"elementor elementor-988136\" data-elementor-settings=\"{&quot;element_pack_global_tooltip_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true}}\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9e1006a e-con-full e-flex e-con e-parent\" data-id=\"9e1006a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b972bab elementor-widget elementor-widget-html\" data-id=\"b972bab\" 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<!-- =========================================================\r\n     TAMRAGHT SURF HOUSE\r\n     ROOM PRICE SEARCH ENGINE\r\n     Paste this entire block into a Custom HTML block.\r\n========================================================= -->\r\n\r\n<section id=\"tsh-room-search\">\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   BASE\r\n========================================================= *\/\r\n\r\n#tsh-room-search,\r\n#tsh-room-search * {\r\n    box-sizing: border-box;\r\n}\r\n\r\n#tsh-room-search {\r\n    --bg: #f4ebe3;\r\n    --navy: #07386f;\r\n    --orange: #D45700;\r\n    --white: #ffffff;\r\n    --muted: #8791a0;\r\n    --line: rgba(7,56,111,.14);\r\n    --soft: rgba(255,255,255,.48);\r\n    --success: #16865f;\r\n\r\n    width: 100%;\r\n    padding: 42px clamp(16px, 2vw, 32px);\r\n\r\n    background: var(--white);\r\n    color: var(--navy);\r\n\r\n    font-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n#tsh-room-search .tsh-search-inner {\r\n    width: 1400px;\r\n    max-width: 1780px;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   HEADER\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-search-heading {\r\n    max-width: 760px;\r\n    margin: 0 auto 30px;\r\n    text-align: center;\r\n}\r\n\r\n#tsh-room-search .tsh-search-kicker {\r\n    margin-bottom: 8px;\r\n\r\n    color: var(--orange);\r\n\r\n    font-size: 10px;\r\n    font-weight: 800;\r\n    letter-spacing: 1.4px;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n#tsh-room-search h2 {\r\n    margin: 0 0 10px;\r\n\r\n    color: var(--navy) !important;\r\n\r\n    font-size: clamp(30px, 4vw, 48px);\r\n    font-weight: 900;\r\n    line-height: 1;\r\n    letter-spacing: -1.6px;\r\n}\r\n\r\n#tsh-room-search .tsh-search-intro {\r\n    margin: 0;\r\n\r\n    color: var(--muted);\r\n\r\n    font-size: 14px;\r\n    line-height: 1.6;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SEARCH BAR\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-search-box {\r\n    position: relative;\r\n\r\n    display: grid;\r\n\r\n    \/*\r\n     * Centered search bar with a controlled max width,\r\n     * like the red sketch in the screenshot.\r\n     *\/\r\n    grid-template-columns:\r\n        minmax(230px, 1.1fr)\r\n        minmax(230px, 1.1fr)\r\n        minmax(185px, .72fr)\r\n        minmax(170px, .62fr);\r\n\r\n    gap: 0;\r\n\r\n    width: 100%;\r\n    max-width: 1040px;\r\n    margin: 0 auto;\r\n\r\n    overflow: hidden;\r\n\r\n    border: 1px solid var(--line);\r\n    border-radius: 22px;\r\n\r\n    background: var(--white);\r\n\r\n    box-shadow:\r\n        0 16px 42px\r\n        rgba(7,56,111,.10);\r\n}\r\n\r\n#tsh-room-search .tsh-search-field {\r\n    min-width: 0;\r\n    min-height: 96px;\r\n\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n\r\n    padding: 16px 20px;\r\n\r\n    border-right: 1px solid var(--line);\r\n}\r\n\r\n#tsh-room-search .tsh-search-label {\r\n    display: block;\r\n\r\n    width: 100%;\r\n\r\n    margin: 0 0 8px;\r\n\r\n    color: var(--muted);\r\n\r\n    font-size: 11px;\r\n    font-weight: 900;\r\n    line-height: 1.1;\r\n    letter-spacing: .85px;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n#tsh-room-search .tsh-date-field {\r\n    position: relative;\r\n    cursor: pointer;\r\n}\r\n\r\n#tsh-room-search .tsh-date-shell {\r\n    position: relative;\r\n\r\n    width: 100%;\r\n    min-height: 38px;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n\r\n    background: transparent;\r\n\r\n    cursor: pointer;\r\n}\r\n\r\n\r\n\/*\r\n * This is the visible text.\r\n *\r\n * Before selection:\r\n * \"Select check in date\"\r\n *\r\n * After selection:\r\n * the selected date is written here by JavaScript.\r\n *\r\n * The real native date input is transparent underneath,\r\n * which removes the blue dd\/mm\/yyyy selection artifact.\r\n *\/\r\n#tsh-room-search .tsh-date-placeholder {\r\n    position: relative;\r\n\r\n    display: block;\r\n\r\n    width: 100%;\r\n    max-width: calc(100% - 38px);\r\n\r\n    margin: 0;\r\n    padding: 0;\r\n\r\n    color: var(--navy);\r\n\r\n    font-size: clamp(15px, 1.05vw, 18px);\r\n    font-weight: 900;\r\n    line-height: 1.28;\r\n\r\n    pointer-events: none;\r\n\r\n    z-index: 4;\r\n}\r\n\r\n\r\n\/*\r\n * Keep this class harmless.\r\n * We no longer hide the visible text after a date is selected.\r\n *\/\r\n#tsh-room-search .tsh-date-placeholder.is-hidden {\r\n    display: block;\r\n}\r\n\r\n\r\n\/*\r\n * Native date input:\r\n * fills the ENTIRE date area, but is fully transparent.\r\n *\r\n * This means clicking the visible text itself opens\r\n * the browser's native calendar.\r\n *\/\r\n#tsh-room-search input[type=\"date\"] {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    margin: 0;\r\n    padding: 0;\r\n\r\n    border: 0 !important;\r\n    outline: 0 !important;\r\n\r\n    background: transparent !important;\r\n\r\n    opacity: 0 !important;\r\n\r\n    color: transparent !important;\r\n    caret-color: transparent !important;\r\n\r\n    font-size: 16px;\r\n\r\n    box-shadow: none !important;\r\n\r\n    cursor: pointer;\r\n\r\n    z-index: 6;\r\n}\r\n\r\n\r\n\/*\r\n * Remove all native visible date text \/ focus-selection artifacts.\r\n *\/\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit,\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit-fields-wrapper,\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit-text,\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit-month-field,\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit-day-field,\r\n#tsh-room-search input[type=\"date\"]::-webkit-datetime-edit-year-field,\r\n#tsh-room-search input[type=\"date\"]::-webkit-calendar-picker-indicator {\r\n    opacity: 0 !important;\r\n}\r\n\r\n\r\n\/*\r\n * Our own visible calendar icon.\r\n * pointer-events:none lets the transparent native input\r\n * underneath receive the click.\r\n *\/\r\n#tsh-room-search .tsh-date-shell::after {\r\n    content: \"\";\r\n\r\n    position: absolute;\r\n\r\n    top: 50%;\r\n    right: 0;\r\n\r\n    width: 18px;\r\n    height: 18px;\r\n\r\n    transform: translateY(-50%);\r\n\r\n    background-image:\r\n        url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2307386f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'\/%3E%3Cpath d='M16 3v4M8 3v4M3 11h18'\/%3E%3C\/svg%3E\");\r\n\r\n    background-repeat: no-repeat;\r\n    background-position: center;\r\n    background-size: contain;\r\n\r\n    pointer-events: none;\r\n\r\n    z-index: 5;\r\n}\r\n\r\n\r\n\/* Visible focus treatment without showing native date internals *\/\r\n#tsh-room-search .tsh-date-field:focus-within {\r\n    background: rgba(7,56,111,.025);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   GUEST SELECT\r\n   Native select = reliable on normal site + mobile browsers\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-guest-select-wrap {\r\n    position: relative;\r\n\r\n    width: 100%;\r\n}\r\n\r\n#tsh-room-search .tsh-guest-select {\r\n    width: 100%;\r\n    height: 38px;\r\n\r\n    display: block;\r\n\r\n    padding: 0 6px 0 0 !important;\r\n\r\n    border: 0 !important;\r\n    outline: 0 !important;\r\n\r\n    background: transparent !important;\r\n    color: var(--navy) !important;\r\n\r\n    font-family: inherit;\r\n    font-size: 16px;\r\n    font-weight: 900;\r\n\r\n    box-shadow: none !important;\r\n\r\n    cursor: pointer;\r\n}\r\n\r\n#tsh-room-search .tsh-guest-select:focus {\r\n    outline: 2px solid rgba(212,87,0,.25) !important;\r\n    outline-offset: 4px;\r\n}\r\n\r\n\r\n\r\n\/* =========================================================\r\n   SEARCH BUTTON\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-search-action {\r\n    min-height: 96px;\r\n\r\n    display: flex;\r\n    align-items: stretch;\r\n}\r\n\r\n#tsh-room-search .tsh-search-button {\r\n    width: 100%;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    gap: 8px;\r\n\r\n    padding: 0 20px !important;\r\n\r\n    border: 0 !important;\r\n    border-radius: 0 !important;\r\n\r\n    background: var(--orange) !important;\r\n    color: #fff !important;\r\n\r\n    font-family: inherit;\r\n    font-size: 14px;\r\n    font-weight: 900;\r\n\r\n    text-transform: uppercase;\r\n    letter-spacing: .4px;\r\n\r\n    box-shadow: none !important;\r\n\r\n    cursor: pointer;\r\n\r\n    transition: opacity .2s ease;\r\n}\r\n\r\n#tsh-room-search .tsh-search-button:hover,\r\n#tsh-room-search .tsh-search-button:focus {\r\n    opacity: .9;\r\n    color: #fff !important;\r\n}\r\n\r\n#tsh-room-search .tsh-search-button svg {\r\n    width: 18px;\r\n    height: 18px;\r\n\r\n    fill: none;\r\n    stroke: currentColor;\r\n    stroke-width: 2.2;\r\n    stroke-linecap: round;\r\n    stroke-linejoin: round;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   VALIDATION MESSAGE\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-search-message {\r\n    display: none;\r\n\r\n    margin-top: 12px;\r\n    padding: 12px 14px;\r\n\r\n    border: 1px solid rgba(212,87,0,.20);\r\n    border-radius: 9px;\r\n\r\n    background: rgba(212,87,0,.07);\r\n    color: var(--orange);\r\n\r\n    font-size: 12px;\r\n    font-weight: 700;\r\n}\r\n\r\n#tsh-room-search .tsh-search-message.is-visible {\r\n    display: block;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RESULTS\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-search-results {\r\n    display: none;\r\n\r\n    margin-top: 34px;\r\n}\r\n\r\n#tsh-room-search .tsh-search-results.is-visible {\r\n    display: block;\r\n}\r\n\r\n#tsh-room-search .tsh-results-top {\r\n    display: flex;\r\n    align-items: flex-end;\r\n    justify-content: space-between;\r\n\r\n    gap: 20px;\r\n\r\n    margin-bottom: 17px;\r\n}\r\n\r\n#tsh-room-search .tsh-results-title {\r\n    margin: 0 0 5px;\r\n\r\n    color: var(--navy);\r\n\r\n    font-size: 24px;\r\n    font-weight: 900;\r\n}\r\n\r\n#tsh-room-search .tsh-results-summary {\r\n    margin: 0;\r\n\r\n    color: var(--muted);\r\n\r\n    font-size: 12px;\r\n    line-height: 1.5;\r\n}\r\n\r\n#tsh-room-search .tsh-results-count {\r\n    flex-shrink: 0;\r\n\r\n    padding: 8px 12px;\r\n\r\n    border-radius: 999px;\r\n\r\n    background: var(--navy);\r\n    color: #fff;\r\n\r\n    font-size: 10px;\r\n    font-weight: 800;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLE\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-table-wrap {\r\n    width: 100%;\r\n\r\n    overflow-x: auto;\r\n\r\n    border: 1px solid var(--line);\r\n    border-radius: 14px;\r\n\r\n    background: rgba(255,255,255,.38);\r\n}\r\n\r\n#tsh-room-search .tsh-results-table {\r\n    width: 100%;\r\n    min-width: 1040px;\r\n\r\n    border-collapse: collapse;\r\n\r\n    color: var(--navy);\r\n}\r\n\r\n#tsh-room-search .tsh-results-table thead {\r\n    background: var(--navy);\r\n    color: #fff;\r\n}\r\n\r\n#tsh-room-search .tsh-results-table th {\r\n    padding: 15px 14px;\r\n\r\n    color: #fff !important;\r\n\r\n    font-size: 10px;\r\n    font-weight: 800;\r\n\r\n    letter-spacing: .65px;\r\n    text-align: left;\r\n    text-transform: uppercase;\r\n\r\n    white-space: nowrap;\r\n}\r\n\r\n#tsh-room-search .tsh-results-table td {\r\n    padding: 17px 14px;\r\n\r\n    border-bottom: 1px solid var(--line);\r\n\r\n    background: rgba(255,255,255,.46);\r\n\r\n    font-size: 12px;\r\n    vertical-align: middle;\r\n}\r\n\r\n#tsh-room-search .tsh-results-table tbody tr:last-child td {\r\n    border-bottom: 0;\r\n}\r\n\r\n#tsh-room-search .tsh-results-table tbody tr:hover td {\r\n    background: rgba(255,255,255,.72);\r\n}\r\n\r\n#tsh-room-search .tsh-results-table tbody tr.is-unavailable td {\r\n    opacity: .52;\r\n}\r\n\r\n#tsh-room-search .tsh-room-name {\r\n    display: block;\r\n\r\n    margin-bottom: 3px;\r\n\r\n    color: var(--navy);\r\n\r\n    font-size: 14px;\r\n    font-weight: 900;\r\n}\r\n\r\n#tsh-room-search .tsh-room-note {\r\n    color: var(--muted);\r\n\r\n    font-size: 10px;\r\n    line-height: 1.35;\r\n}\r\n\r\n#tsh-room-search .tsh-allocation-list,\r\n#tsh-room-search .tsh-breakdown-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n}\r\n\r\n#tsh-room-search .tsh-allocation-item {\r\n    color: var(--navy);\r\n\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n}\r\n\r\n#tsh-room-search .tsh-breakdown-item {\r\n    color: var(--muted);\r\n\r\n    font-size: 10px;\r\n    line-height: 1.35;\r\n}\r\n\r\n#tsh-room-search .tsh-best-value {\r\n    display: inline-flex;\r\n    align-items: center;\r\n\r\n    margin-top: 6px;\r\n    padding: 4px 7px;\r\n\r\n    border-radius: 999px;\r\n\r\n    background: rgba(212,87,0,.10);\r\n    color: var(--orange);\r\n\r\n    font-size: 9px;\r\n    font-weight: 900;\r\n\r\n    text-transform: uppercase;\r\n}\r\n\r\n#tsh-room-search .tsh-money {\r\n    color: var(--orange);\r\n\r\n    font-size: 15px;\r\n    font-weight: 900;\r\n\r\n    white-space: nowrap;\r\n}\r\n\r\n#tsh-room-search .tsh-total-money {\r\n    color: var(--navy);\r\n\r\n    font-size: 15px;\r\n    font-weight: 900;\r\n\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   STATUS BADGES\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-status {\r\n    display: inline-flex;\r\n    align-items: center;\r\n\r\n    gap: 6px;\r\n\r\n    padding: 7px 9px;\r\n\r\n    border-radius: 999px;\r\n\r\n    font-size: 10px;\r\n    font-weight: 800;\r\n\r\n    white-space: nowrap;\r\n}\r\n\r\n#tsh-room-search .tsh-status.available {\r\n    background: rgba(22,134,95,.10);\r\n    color: var(--success);\r\n}\r\n\r\n#tsh-room-search .tsh-status.unavailable {\r\n    background: rgba(7,56,111,.08);\r\n    color: var(--muted);\r\n}\r\n\r\n#tsh-room-search .tsh-status-dot {\r\n    width: 6px;\r\n    height: 6px;\r\n\r\n    border-radius: 50%;\r\n\r\n    background: currentColor;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SELECT BUTTON\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-select-room {\r\n    min-width: 86px;\r\n    min-height: 38px;\r\n\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    padding: 0 12px !important;\r\n\r\n    border: 0 !important;\r\n    border-radius: 999px !important;\r\n\r\n    background: var(--orange) !important;\r\n    color: #fff !important;\r\n\r\n    font-family: inherit;\r\n    font-size: 10px;\r\n    font-weight: 900;\r\n\r\n    text-transform: uppercase;\r\n\r\n    box-shadow: none !important;\r\n\r\n    cursor: pointer;\r\n}\r\n\r\n#tsh-room-search .tsh-select-room:hover,\r\n#tsh-room-search .tsh-select-room:focus {\r\n    opacity: .9;\r\n    color: #fff !important;\r\n}\r\n\r\n#tsh-room-search .tsh-select-room:disabled {\r\n    background: #d7d9dc !important;\r\n    color: #8f969f !important;\r\n\r\n    cursor: not-allowed;\r\n    opacity: 1;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRICING NOTE\r\n========================================================= *\/\r\n\r\n#tsh-room-search .tsh-pricing-note {\r\n    margin-top: 14px;\r\n\r\n    padding: 14px 16px;\r\n\r\n    border-left: 3px solid var(--orange);\r\n\r\n    background: rgba(255,255,255,.34);\r\n\r\n    color: var(--navy);\r\n\r\n    font-size: 11px;\r\n    line-height: 1.55;\r\n}\r\n\r\n#tsh-room-search .tsh-pricing-note strong {\r\n    color: var(--orange);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SMALL LAPTOP\r\n   Keep one row, but reduce sizes gracefully.\r\n========================================================= *\/\r\n\r\n@media (max-width: 1250px) and (min-width: 951px) {\r\n\r\n    #tsh-room-search {\r\n        padding-left: 16px;\r\n        padding-right: 16px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-box {\r\n        grid-template-columns:\r\n            minmax(205px, 1.06fr)\r\n            minmax(205px, 1.06fr)\r\n            minmax(170px, .72fr)\r\n            minmax(155px, .62fr);\r\n\r\n        max-width: 940px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field {\r\n        min-height: 92px;\r\n        padding: 15px 18px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-action {\r\n        min-height: 92px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-placeholder {\r\n        font-size: 16px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-label {\r\n        font-size: 10px;\r\n        margin-bottom: 12px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLET\r\n========================================================= *\/\r\n\r\n@media (max-width: 950px) {\r\n\r\n    #tsh-room-search {\r\n        padding-left: 18px;\r\n        padding-right: 18px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-box {\r\n        grid-template-columns: 1fr 1fr;\r\n        max-width: 860px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field {\r\n        min-height: 90px;\r\n        padding: 15px 18px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-action {\r\n        min-height: 90px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-placeholder {\r\n        font-size: 16px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field:nth-child(2) {\r\n        border-right: 0;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field:nth-child(3) {\r\n        border-top: 1px solid var(--line);\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-action {\r\n        border-top: 1px solid var(--line);\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n   Results become full-width cards.\r\n   No horizontal scrolling is needed.\r\n========================================================= *\/\r\n\r\n@media (max-width: 620px) {\r\n\r\n    #tsh-room-search {\r\n        padding: 36px 10px;\r\n        \r\n    }\r\n\r\n    #tsh-room-search .tsh-search-heading {\r\n        margin-bottom: 22px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-box {\r\n        grid-template-columns: 1fr;\r\n        max-width: none;\r\n        margin: 0;\r\n        border-radius: 12px;\r\n    }\r\n    #tsh-room-search .tsh-search-inner {\r\n    width: 100%;\r\n    max-width: 1780px;\r\n    margin: 0 auto;\r\n}\r\n\r\n    \/* =====================================================\r\n       CENTER ALL MOBILE SEARCH CONTENT\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-search-field {\r\n        align-items: center;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-label {\r\n        width: 100%;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-shell {\r\n        justify-content: center;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-placeholder {\r\n        width: 100%;\r\n        max-width: calc(100% - 38px);\r\n\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-shell::after {\r\n        right: 4px;\r\n    }\r\n\r\n    #tsh-room-search input[type=\"date\"] {\r\n        width: 100%;\r\n        max-width: none;\r\n    }\r\n\r\n    #tsh-room-search .tsh-guest-select-wrap {\r\n        display: flex;\r\n        justify-content: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-guest-select {\r\n        width: auto;\r\n        min-width: 150px;\r\n        max-width: 100%;\r\n        text-align: center;\r\n        text-align-last: center;\r\n        padding-left: 24px !important;\r\n        padding-right: 24px !important;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-action {\r\n        justify-content: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-button {\r\n        text-align: center;\r\n        justify-content: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-message {\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-top {\r\n        align-items: center;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-title,\r\n    #tsh-room-search .tsh-results-summary,\r\n    #tsh-room-search .tsh-results-count {\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field {\r\n        min-height: 82px;\r\n\r\n        border-right: 0;\r\n        border-bottom: 1px solid var(--line);\r\n\r\n        padding: 13px 16px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-label {\r\n        margin-bottom: 7px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-shell {\r\n        min-height: 34px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-date-placeholder {\r\n        font-size: 17px;\r\n        line-height: 1.25;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-field:nth-child(2),\r\n    #tsh-room-search .tsh-search-field:nth-child(3) {\r\n        border-top: 0;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-action {\r\n        min-height: 58px;\r\n        border-top: 0;\r\n    }\r\n\r\n    #tsh-room-search .tsh-search-button {\r\n        min-height: 58px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-top {\r\n        align-items: flex-start;\r\n        flex-direction: column;\r\n        gap: 10px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-title {\r\n        font-size: 21px;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       REMOVE DESKTOP TABLE \/ HORIZONTAL SCROLL\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-table-wrap {\r\n        width: 100%;\r\n\r\n        overflow: visible;\r\n\r\n        border: 0;\r\n        border-radius: 0;\r\n\r\n        background: transparent;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table {\r\n        width: 100%;\r\n        min-width: 0;\r\n\r\n        display: block;\r\n\r\n        border-collapse: separate;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table thead {\r\n        display: none;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table tbody {\r\n        width: 100%;\r\n\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n        gap: 14px;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       EACH RESULT = ONE CARD\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-results-table tbody tr {\r\n        width: 100%;\r\n\r\n        display: block;\r\n\r\n        overflow: hidden;\r\n\r\n        border: 1px solid var(--line);\r\n        border-radius: 14px;\r\n\r\n        background: #ffffff;\r\n\r\n        box-shadow:\r\n            0 8px 24px\r\n            rgba(7,56,111,.06);\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table tbody tr:hover td {\r\n        background: transparent;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table td {\r\n        width: 100%;\r\n\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n\r\n        align-items: center;\r\n        justify-items: center;\r\n\r\n        gap: 6px;\r\n\r\n        padding: 12px 14px;\r\n\r\n        border: 0;\r\n        border-bottom: 1px solid var(--line);\r\n\r\n        background: transparent;\r\n\r\n        font-size: 12px;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table td::before {\r\n        content:\r\n            attr(data-label);\r\n\r\n        width: 100%;\r\n\r\n        color: var(--muted);\r\n\r\n        font-size: 9px;\r\n        font-weight: 900;\r\n        letter-spacing: .55px;\r\n\r\n        line-height: 1.35;\r\n\r\n        text-align: center;\r\n        text-transform: uppercase;\r\n    }\r\n\r\n    #tsh-room-search .tsh-allocation-list,\r\n    #tsh-room-search .tsh-breakdown-list {\r\n        align-items: center;\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-room-note,\r\n    #tsh-room-search .tsh-allocation-item,\r\n    #tsh-room-search .tsh-breakdown-item {\r\n        text-align: center;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       ROOM HEADER\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-results-table\r\n    td.tsh-result-room {\r\n        display: block;\r\n\r\n        padding: 17px 14px 15px;\r\n\r\n        background:\r\n            rgba(244,235,227,.55);\r\n\r\n        text-align: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table\r\n    td.tsh-result-room::before {\r\n        display: block;\r\n\r\n        margin-bottom: 8px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-room-name {\r\n        display: block;\r\n\r\n        margin-bottom: 6px;\r\n\r\n        font-size: 16px;\r\n        line-height: 1.3;\r\n    }\r\n\r\n    #tsh-room-search .tsh-room-note {\r\n        display: block;\r\n\r\n        max-width: none;\r\n\r\n        font-size: 10px;\r\n        line-height: 1.45;\r\n    }\r\n\r\n    #tsh-room-search .tsh-best-value {\r\n        margin-top: 9px;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       ALLOCATION \/ BREAKDOWN\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-allocation-list,\r\n    #tsh-room-search .tsh-breakdown-list {\r\n        min-width: 0;\r\n\r\n        gap: 5px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-allocation-item {\r\n        font-size: 11px;\r\n        line-height: 1.45;\r\n    }\r\n\r\n    #tsh-room-search .tsh-breakdown-item {\r\n        overflow-wrap: anywhere;\r\n\r\n        font-size: 10px;\r\n        line-height: 1.5;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       TOTAL\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-result-total {\r\n        align-items: center;\r\n\r\n        background:\r\n            rgba(212,87,0,.035) !important;\r\n    }\r\n\r\n    #tsh-room-search .tsh-total-money {\r\n        color: var(--orange);\r\n\r\n        font-size: 20px;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       STATUS\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-result-status {\r\n        align-items: center;\r\n    }\r\n\r\n    #tsh-room-search .tsh-status {\r\n        width: fit-content;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       SELECT BUTTON\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-results-table\r\n    td.tsh-result-action {\r\n        display: block;\r\n\r\n        padding: 13px 14px;\r\n\r\n        border-bottom: 0;\r\n\r\n        background: transparent;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-table\r\n    td.tsh-result-action::before {\r\n        display: none;\r\n    }\r\n\r\n    #tsh-room-search .tsh-select-room {\r\n        width: 100%;\r\n        min-height: 48px;\r\n\r\n        border-radius: 8px !important;\r\n\r\n        font-size: 11px;\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       PRICING NOTE\r\n    ===================================================== *\/\r\n\r\n    #tsh-room-search .tsh-pricing-note {\r\n        margin-top: 18px;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SEARCH RESULTS POPUP\r\n========================================================= *\/\r\n\r\nhtml.tsh-room-results-open,\r\nbody.tsh-room-results-open {\r\n    overflow: hidden !important;\r\n}\r\n\r\n#tsh-room-search .tsh-results-modal {\r\n    position: fixed !important;\r\n\r\n    inset: 0 !important;\r\n\r\n    z-index: 999999 !important;\r\n\r\n    width: 100% !important;\r\n    height: 100% !important;\r\n\r\n    margin: 0 !important;\r\n    padding: 24px !important;\r\n\r\n    display: none !important;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    overflow: auto;\r\n\r\n    background: rgba(0,0,0,.72) !important;\r\n\r\n    backdrop-filter: blur(7px);\r\n    -webkit-backdrop-filter: blur(7px);\r\n}\r\n\r\n#tsh-room-search .tsh-results-modal.is-visible {\r\n    display: flex !important;\r\n}\r\n\r\n#tsh-room-search .tsh-results-modal-panel {\r\n    position: relative;\r\n\r\n    width: min(1220px, 100%);\r\n    max-height: calc(100vh - 48px);\r\n\r\n    overflow: auto;\r\n\r\n    padding: 70px 30px 30px;\r\n\r\n    border-radius: 22px;\r\n\r\n    background: #ffffff;\r\n\r\n    color: var(--navy);\r\n\r\n    box-shadow:\r\n        0 30px 90px\r\n        rgba(0,0,0,.32);\r\n}\r\n\r\n#tsh-room-search .tsh-results-modal-close {\r\n    position: absolute;\r\n\r\n    top: 18px;\r\n    right: 18px;\r\n\r\n    z-index: 30;\r\n\r\n    width: 44px;\r\n    height: 44px;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    padding: 0 !important;\r\n    margin: 0 !important;\r\n\r\n    border: 0 !important;\r\n    border-radius: 50% !important;\r\n\r\n    background: var(--orange) !important;\r\n    color: #ffffff !important;\r\n\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 27px;\r\n    font-weight: 500;\r\n    line-height: 1;\r\n\r\n    box-shadow:\r\n        0 8px 24px\r\n        rgba(0,0,0,.16) !important;\r\n\r\n    cursor: pointer;\r\n}\r\n\r\n#tsh-room-search .tsh-results-modal-close:hover,\r\n#tsh-room-search .tsh-results-modal-close:focus {\r\n    background: var(--navy) !important;\r\n    color: #ffffff !important;\r\n}\r\n\r\n#tsh-room-search\r\n.tsh-results-modal-panel\r\n.tsh-results-top,\r\n#tsh-room-search\r\n.tsh-results-modal-panel\r\n.tsh-table-wrap,\r\n#tsh-room-search\r\n.tsh-results-modal-panel\r\n.tsh-pricing-note {\r\n    width: 100%;\r\n    max-width: none;\r\n\r\n    margin-left: 0;\r\n    margin-right: 0;\r\n}\r\n\r\n\r\n\/* Mobile results popup *\/\r\n@media (max-width: 620px) {\r\n\r\n    #tsh-room-search .tsh-results-modal {\r\n        padding: 10px !important;\r\n        align-items: flex-start;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-modal-panel {\r\n        width: 100%;\r\n        max-height: calc(100vh - 20px);\r\n\r\n        padding: 60px 10px 16px;\r\n\r\n        border-radius: 16px;\r\n    }\r\n\r\n    #tsh-room-search .tsh-results-modal-close {\r\n        top: 10px;\r\n        right: 10px;\r\n\r\n        width: 40px;\r\n        height: 40px;\r\n\r\n        font-size: 24px;\r\n    }\r\n\r\n    #tsh-room-search\r\n    .tsh-results-modal-panel\r\n    .tsh-results-top {\r\n        align-items: center !important;\r\n        text-align: center;\r\n    }\r\n\r\n}\r\n\r\n\r\n<\/style>\r\n\r\n\r\n<div class=\"tsh-search-inner\">\r\n\r\n\r\n    <!-- =====================================================\r\n         HEADING\r\n    ====================================================== -->\r\n\r\n    <div class=\"tsh-search-heading\">\r\n\r\n        <div class=\"tsh-search-kicker\">\r\n            Check your surf stay\r\n        <\/div>\r\n\r\n        <h2>\r\n            Find your package price\r\n        <\/h2>\r\n\r\n        <p class=\"tsh-search-intro\">\r\n            Choose your arrival date, departure date and number of guests.\r\n            Minimum stay is 4 nights. We will calculate the package price\r\n            for every valid room option.\r\n        <\/p>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- =====================================================\r\n         SEARCH ENGINE\r\n    ====================================================== -->\r\n\r\n    <div class=\"tsh-search-box\">\r\n\r\n\r\n        <!-- CHECK-IN -->\r\n\r\n        <div class=\"tsh-search-field tsh-date-field\" data-date-field=\"checkin\">\r\n\r\n            <label\r\n                class=\"tsh-search-label\"\r\n                for=\"tshSearchCheckin\"\r\n            >\r\n                Check-in\r\n            <\/label>\r\n\r\n            <div class=\"tsh-date-shell\">\r\n\r\n                <span\r\n                    class=\"tsh-date-placeholder\"\r\n                    id=\"tshCheckinPlaceholder\"\r\n                >\r\n                    Select check in date\r\n                <\/span>\r\n\r\n                <input\r\n                    type=\"date\"\r\n                    id=\"tshSearchCheckin\"\r\n                    aria-label=\"Check-in date\"\r\n                >\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- CHECK-OUT -->\r\n\r\n        <div class=\"tsh-search-field tsh-date-field\" data-date-field=\"checkout\">\r\n\r\n            <label\r\n                class=\"tsh-search-label\"\r\n                for=\"tshSearchCheckout\"\r\n            >\r\n                Check-out\r\n            <\/label>\r\n\r\n            <div class=\"tsh-date-shell\">\r\n\r\n                <span\r\n                    class=\"tsh-date-placeholder\"\r\n                    id=\"tshCheckoutPlaceholder\"\r\n                >\r\n                    Select check out date\r\n                <\/span>\r\n\r\n                <input\r\n                    type=\"date\"\r\n                    id=\"tshSearchCheckout\"\r\n                    aria-label=\"Check-out date\"\r\n                >\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- GUESTS -->\r\n\r\n        <div class=\"tsh-search-field\">\r\n\r\n            <span class=\"tsh-search-label\">\r\n                Guests \u00b7 Max 10\r\n            <\/span>\r\n\r\n            <div class=\"tsh-guest-select-wrap\">\r\n\r\n                <select\r\n                    id=\"tshGuestSelect\"\r\n                    class=\"tsh-guest-select\"\r\n                    aria-label=\"Number of guests\"\r\n                >\r\n                    <option value=\"1\">1 Guest<\/option>\r\n                    <option value=\"2\">2 Guests<\/option>\r\n                    <option value=\"3\">3 Guests<\/option>\r\n                    <option value=\"4\">4 Guests<\/option>\r\n                    <option value=\"5\">5 Guests<\/option>\r\n                    <option value=\"6\">6 Guests<\/option>\r\n                    <option value=\"7\">7 Guests<\/option>\r\n                    <option value=\"8\">8 Guests<\/option>\r\n                    <option value=\"9\">9 Guests<\/option>\r\n                    <option value=\"10\">10 Guests<\/option>\r\n                <\/select>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- SEARCH -->\r\n\r\n        <div class=\"tsh-search-action\">\r\n\r\n            <button\r\n                type=\"button\"\r\n                class=\"tsh-search-button\"\r\n                id=\"tshRoomSearchButton\"\r\n            >\r\n\r\n                <svg\r\n                    viewBox=\"0 0 24 24\"\r\n                    aria-hidden=\"true\"\r\n                >\r\n                    <circle\r\n                        cx=\"11\"\r\n                        cy=\"11\"\r\n                        r=\"7\"\r\n                    ><\/circle>\r\n\r\n                    <path\r\n                        d=\"M20 20l-4-4\"\r\n                    ><\/path>\r\n                <\/svg>\r\n\r\n                Search\r\n\r\n            <\/button>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- VALIDATION -->\r\n\r\n    <div\r\n        class=\"tsh-search-message\"\r\n        id=\"tshRoomSearchMessage\"\r\n        role=\"alert\"\r\n    ><\/div>\r\n\r\n\r\n    <!-- =====================================================\r\n         RESULTS\r\n    ====================================================== -->\r\n\r\n    <div\r\n        class=\"tsh-search-results tsh-results-modal\"\r\n        id=\"tshRoomSearchResults\"\r\n        aria-live=\"polite\"\r\n        aria-hidden=\"true\"\r\n        role=\"dialog\"\r\n        aria-modal=\"true\"\r\n        aria-labelledby=\"tshResultsModalTitle\"\r\n    >\r\n\r\n        <div class=\"tsh-results-modal-panel\">\r\n\r\n            <button\r\n                type=\"button\"\r\n                class=\"tsh-results-modal-close\"\r\n                id=\"tshResultsModalClose\"\r\n                aria-label=\"Close results\"\r\n            >\r\n                \u00d7\r\n            <\/button>\r\n\r\n        <div class=\"tsh-results-top\">\r\n\r\n            <div>\r\n\r\n                <h3\r\n                    class=\"tsh-results-title\"\r\n                    id=\"tshResultsModalTitle\"\r\n                >\r\n                    Available room prices\r\n                <\/h3>\r\n\r\n                <p\r\n                    class=\"tsh-results-summary\"\r\n                    id=\"tshResultsSummary\"\r\n                ><\/p>\r\n\r\n                <p\r\n                    class=\"tsh-results-summary\"\r\n                    id=\"tshPricingFormula\"\r\n                    style=\"margin-top:4px;\"\r\n                >\r\n                    Full-stay prices are calculated automatically for every room and date range.\r\n                <\/p>\r\n\r\n            <\/div>\r\n\r\n            <div\r\n                class=\"tsh-results-count\"\r\n                id=\"tshResultsCount\"\r\n            ><\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <div class=\"tsh-table-wrap\">\r\n\r\n            <table class=\"tsh-results-table\">\r\n\r\n                <thead>\r\n\r\n                    <tr>\r\n\r\n                        <th>Room option<\/th>\r\n\r\n                        <th>Guest allocation<\/th>\r\n\r\n                        <th>Stay<\/th>\r\n\r\n                        <th>Total for your guests<\/th>\r\n\r\n                        <th>Total price breakdown<\/th>\r\n\r\n                        <th>Status<\/th>\r\n\r\n                        <th><\/th>\r\n\r\n                    <\/tr>\r\n\r\n                <\/thead>\r\n\r\n\r\n                <tbody id=\"tshResultsBody\"><\/tbody>\r\n\r\n            <\/table>\r\n\r\n        <\/div>\r\n\r\n\r\n        <div class=\"tsh-pricing-note\">\r\n\r\n            <strong>Room occupancy & pricing:<\/strong>\r\n            Twin and Double rooms are exactly 2 guests per room.\r\n            Triple rooms are exactly 3 guests per room.\r\n            Single rooms are exactly 1 guest.\r\n            Shared rooms can take remaining guests.\r\n            For every room and every date range, the breakdown shows the\r\n            full-stay price per guest \u00d7 the number of guests in that room option.\r\n\r\n        <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n<\/div>\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n    \"use strict\";\r\n\r\n\r\n    \/* =========================================================\r\n       ROOM PRICE RULES\r\n    ========================================================= *\/\r\n\r\n    const rooms = {\r\n\r\n        shared: {\r\n            id: \"shared\",\r\n            name: \"Shared Room\",\r\n            shortName: \"Shared\",\r\n            price: 55,\r\n            capacity: 1,\r\n            type: \"shared\"\r\n        },\r\n\r\n        twin: {\r\n            id: \"twin\",\r\n            name: \"Twin Room\",\r\n            shortName: \"Twin\",\r\n            price: 65,\r\n            capacity: 2,\r\n            minGuests: 2,\r\n            maxGuests: 2,\r\n            type: \"private\"\r\n        },\r\n\r\n        triple: {\r\n            id: \"triple\",\r\n            name: \"Triple Room\",\r\n            shortName: \"Triple\",\r\n            price: 55,\r\n            capacity: 3,\r\n            minGuests: 3,\r\n            maxGuests: 3,\r\n            type: \"private\"\r\n        },\r\n\r\n        double: {\r\n            id: \"double\",\r\n            name: \"Double Room\",\r\n            shortName: \"Double\",\r\n            price: 65,\r\n            capacity: 2,\r\n            minGuests: 2,\r\n            maxGuests: 2,\r\n            type: \"private\"\r\n        },\r\n\r\n        single: {\r\n            id: \"single\",\r\n            name: \"Single Room\",\r\n            shortName: \"Single\",\r\n            price: 75,\r\n            capacity: 1,\r\n            type: \"private\"\r\n        }\r\n\r\n    };\r\n\r\n\r\n    \/* =========================================================\r\n       ELEMENTS\r\n    ========================================================= *\/\r\n\r\n    const checkin =\r\n        document.getElementById(\r\n            \"tshSearchCheckin\"\r\n        );\r\n\r\n    const checkout =\r\n        document.getElementById(\r\n            \"tshSearchCheckout\"\r\n        );\r\n\r\n    const checkinPlaceholder =\r\n        document.getElementById(\r\n            \"tshCheckinPlaceholder\"\r\n        );\r\n\r\n    const checkoutPlaceholder =\r\n        document.getElementById(\r\n            \"tshCheckoutPlaceholder\"\r\n        );\r\n\r\n    const checkinField =\r\n        document.querySelector(\r\n            '[data-date-field=\"checkin\"]'\r\n        );\r\n\r\n    const checkoutField =\r\n        document.querySelector(\r\n            '[data-date-field=\"checkout\"]'\r\n        );\r\n\r\n    const guestSelect =\r\n        document.getElementById(\r\n            \"tshGuestSelect\"\r\n        );\r\n\r\n    const searchButton =\r\n        document.getElementById(\r\n            \"tshRoomSearchButton\"\r\n        );\r\n\r\n    const message =\r\n        document.getElementById(\r\n            \"tshRoomSearchMessage\"\r\n        );\r\n\r\n    const results =\r\n        document.getElementById(\r\n            \"tshRoomSearchResults\"\r\n        );\r\n\r\n    const resultsBody =\r\n        document.getElementById(\r\n            \"tshResultsBody\"\r\n        );\r\n\r\n    const resultsSummary =\r\n        document.getElementById(\r\n            \"tshResultsSummary\"\r\n        );\r\n\r\n    const resultsCount =\r\n        document.getElementById(\r\n            \"tshResultsCount\"\r\n        );\r\n\r\n    const resultsModalClose =\r\n        document.getElementById(\r\n            \"tshResultsModalClose\"\r\n        );\r\n\r\n\r\n    if (\r\n        !checkin ||\r\n        !checkout ||\r\n        !guestSelect ||\r\n        !searchButton ||\r\n        !message ||\r\n        !results ||\r\n        !resultsBody ||\r\n        !resultsSummary ||\r\n        !resultsCount\r\n    ) {\r\n        return;\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       GUEST STATE\r\n    ========================================================= *\/\r\n\r\n    let guests =\r\n        Math.min(\r\n            10,\r\n            Math.max(\r\n                1,\r\n                parseInt(\r\n                    guestSelect.value,\r\n                    10\r\n                ) || 1\r\n            )\r\n        );\r\n\r\n\r\n    guestSelect.addEventListener(\r\n        \"change\",\r\n        function () {\r\n\r\n            guests =\r\n                Math.min(\r\n                    10,\r\n                    Math.max(\r\n                        1,\r\n                        parseInt(\r\n                            guestSelect.value,\r\n                            10\r\n                        ) || 1\r\n                    )\r\n                );\r\n\r\n            guestSelect.value =\r\n                String(\r\n                    guests\r\n                );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    \/* =========================================================\r\n       DATE HELPERS\r\n    ========================================================= *\/\r\n\r\n    function toInputDate(date) {\r\n\r\n        const year =\r\n            date.getFullYear();\r\n\r\n        const month =\r\n            String(\r\n                date.getMonth() + 1\r\n            ).padStart(\r\n                2,\r\n                \"0\"\r\n            );\r\n\r\n        const day =\r\n            String(\r\n                date.getDate()\r\n            ).padStart(\r\n                2,\r\n                \"0\"\r\n            );\r\n\r\n        return (\r\n            year +\r\n            \"-\" +\r\n            month +\r\n            \"-\" +\r\n            day\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function parseDate(value) {\r\n\r\n        if (!value) {\r\n            return null;\r\n        }\r\n\r\n        const parts =\r\n            value.split(\"-\");\r\n\r\n        if (parts.length !== 3) {\r\n            return null;\r\n        }\r\n\r\n        return new Date(\r\n            Number(parts[0]),\r\n            Number(parts[1]) - 1,\r\n            Number(parts[2])\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function diffCalendarDays(\r\n        startDate,\r\n        endDate\r\n    ) {\r\n\r\n        const startUtc =\r\n            Date.UTC(\r\n                startDate.getFullYear(),\r\n                startDate.getMonth(),\r\n                startDate.getDate()\r\n            );\r\n\r\n        const endUtc =\r\n            Date.UTC(\r\n                endDate.getFullYear(),\r\n                endDate.getMonth(),\r\n                endDate.getDate()\r\n            );\r\n\r\n        return Math.round(\r\n            (\r\n                endUtc -\r\n                startUtc\r\n            )\r\n            \/\r\n            86400000\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function formatPrettyDate(date) {\r\n\r\n        return date.toLocaleDateString(\r\n            undefined,\r\n            {\r\n                day: \"numeric\",\r\n                month: \"short\",\r\n                year: \"numeric\"\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       DATE DISPLAY + CLICKABLE DATE FIELDS\r\n    ========================================================= *\/\r\n\r\n    \/*\r\n     * Save the translated placeholder text exactly as it appears\r\n     * in the page. This means TranslatePress can translate it and\r\n     * we restore that translated wording if the date becomes empty.\r\n     *\/\r\n    const checkinDefaultText =\r\n        checkinPlaceholder\r\n            ? checkinPlaceholder.textContent.trim()\r\n            : \"Select check in date\";\r\n\r\n\r\n    const checkoutDefaultText =\r\n        checkoutPlaceholder\r\n            ? checkoutPlaceholder.textContent.trim()\r\n            : \"Select check out date\";\r\n\r\n\r\n    function formatSelectedDate(\r\n        value\r\n    ) {\r\n\r\n        const date =\r\n            parseDate(\r\n                value\r\n            );\r\n\r\n\r\n        if (!date) {\r\n            return \"\";\r\n        }\r\n\r\n\r\n        const locale =\r\n            document.documentElement.lang ||\r\n            navigator.language ||\r\n            \"en\";\r\n\r\n\r\n        try {\r\n\r\n            return date.toLocaleDateString(\r\n                locale,\r\n                {\r\n                    day: \"2-digit\",\r\n                    month: \"short\",\r\n                    year: \"numeric\"\r\n                }\r\n            );\r\n\r\n        } catch (error) {\r\n\r\n            return date.toLocaleDateString();\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function syncDatePlaceholder(\r\n        input,\r\n        placeholder,\r\n        defaultText\r\n    ) {\r\n\r\n        if (\r\n            !input ||\r\n            !placeholder\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        const hasValue =\r\n            Boolean(\r\n                input.value\r\n            );\r\n\r\n\r\n        input.classList.toggle(\r\n            \"has-value\",\r\n            hasValue\r\n        );\r\n\r\n\r\n        \/*\r\n         * Never expose the browser's native dd\/mm\/yyyy text.\r\n         * We display the value ourselves instead.\r\n         *\/\r\n        placeholder.classList.remove(\r\n            \"is-hidden\"\r\n        );\r\n\r\n\r\n        placeholder.textContent =\r\n            hasValue\r\n                ? formatSelectedDate(\r\n                    input.value\r\n                )\r\n                : defaultText;\r\n\r\n    }\r\n\r\n\r\n    function syncAllDatePlaceholders() {\r\n\r\n        syncDatePlaceholder(\r\n            checkin,\r\n            checkinPlaceholder,\r\n            checkinDefaultText\r\n        );\r\n\r\n\r\n        syncDatePlaceholder(\r\n            checkout,\r\n            checkoutPlaceholder,\r\n            checkoutDefaultText\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function openNativeDatePicker(\r\n        input\r\n    ) {\r\n\r\n        if (!input) {\r\n            return;\r\n        }\r\n\r\n\r\n        \/*\r\n         * Chromium \/ Edge \/ modern browsers.\r\n         *\/\r\n        if (\r\n            typeof input.showPicker ===\r\n            \"function\"\r\n        ) {\r\n\r\n            try {\r\n\r\n                input.showPicker();\r\n\r\n                return;\r\n\r\n            } catch (error) {\r\n\r\n                \/*\r\n                 * Fall through to focus\/click.\r\n                 *\/\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        input.focus();\r\n\r\n\r\n        try {\r\n\r\n            input.click();\r\n\r\n        } catch (error) {\r\n\r\n            \/*\r\n             * The transparent native input remains directly clickable,\r\n             * so this is only a fallback.\r\n             *\/\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * Clicking anywhere in the CHECK-IN or CHECK-OUT field,\r\n     * including the label and visible \"Select...\" text,\r\n     * opens the native date selector.\r\n     *\/\r\n    function connectWholeDateField(\r\n        field,\r\n        input\r\n    ) {\r\n\r\n        if (\r\n            !field ||\r\n            !input\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        \/*\r\n         * The ENTIRE field is now a date-picker trigger:\r\n         * label, visible text, empty space and calendar icon.\r\n         *\r\n         * We deliberately call showPicker() even when the native\r\n         * transparent input itself receives the click. Some desktop\r\n         * browsers only open the picker from the tiny calendar icon\r\n         * unless showPicker() is called explicitly.\r\n         *\/\r\n        field.addEventListener(\r\n            \"click\",\r\n            function (event) {\r\n\r\n                event.preventDefault();\r\n\r\n                openNativeDatePicker(\r\n                    input\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n\r\n        \/*\r\n         * Keyboard accessibility:\r\n         * Enter \/ Space on the field opens the date selector too.\r\n         *\/\r\n        field.setAttribute(\r\n            \"tabindex\",\r\n            \"0\"\r\n        );\r\n\r\n\r\n        field.setAttribute(\r\n            \"role\",\r\n            \"button\"\r\n        );\r\n\r\n\r\n        field.addEventListener(\r\n            \"keydown\",\r\n            function (event) {\r\n\r\n                if (\r\n                    event.key === \"Enter\" ||\r\n                    event.key === \" \"\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    openNativeDatePicker(\r\n                        input\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    connectWholeDateField(\r\n        checkinField,\r\n        checkin\r\n    );\r\n\r\n\r\n    connectWholeDateField(\r\n        checkoutField,\r\n        checkout\r\n    );\r\n\r\n\r\n    \/* =========================================================\r\n       INITIAL DATE RULES\r\n    ========================================================= *\/\r\n\r\n    const today =\r\n        new Date();\r\n\r\n    today.setHours(\r\n        0,\r\n        0,\r\n        0,\r\n        0\r\n    );\r\n\r\n    checkin.min =\r\n        toInputDate(\r\n            today\r\n        );\r\n\r\n    checkout.min =\r\n        toInputDate(\r\n            today\r\n        );\r\n\r\n\r\n    \/*\r\n     * MINIMUM STAY RULE\r\n     *\r\n     * Minimum stay = 4 nights.\r\n     *\r\n     * Example:\r\n     * Check-in 20 August\r\n     * Earliest checkout 24 August\r\n     *\r\n     * The checkout calendar therefore cannot select\r\n     * 21, 22 or 23 August.\r\n     *\/\r\n\r\n    const MINIMUM_NIGHTS =\r\n        4;\r\n\r\n\r\n    checkin.addEventListener(\r\n        \"change\",\r\n        function () {\r\n\r\n            syncAllDatePlaceholders();\r\n\r\n\r\n            const start =\r\n                parseDate(\r\n                    checkin.value\r\n                );\r\n\r\n            if (!start) {\r\n                return;\r\n            }\r\n\r\n\r\n            const minimumCheckout =\r\n                new Date(\r\n                    start\r\n                );\r\n\r\n\r\n            minimumCheckout.setDate(\r\n                minimumCheckout.getDate() +\r\n                MINIMUM_NIGHTS\r\n            );\r\n\r\n\r\n            const minimumCheckoutValue =\r\n                toInputDate(\r\n                    minimumCheckout\r\n                );\r\n\r\n\r\n            \/*\r\n             * Prevent selecting any checkout date\r\n             * before the 4-night minimum.\r\n             *\/\r\n\r\n            checkout.min =\r\n                minimumCheckoutValue;\r\n\r\n\r\n            const existingCheckout =\r\n                parseDate(\r\n                    checkout.value\r\n                );\r\n\r\n\r\n            \/*\r\n             * If no checkout is selected yet,\r\n             * or the old checkout is too early,\r\n             * automatically set it to the earliest\r\n             * valid checkout date.\r\n             *\/\r\n\r\n            if (\r\n                !existingCheckout ||\r\n                existingCheckout <\r\n                minimumCheckout\r\n            ) {\r\n\r\n                checkout.value =\r\n                    minimumCheckoutValue;\r\n\r\n            }\r\n\r\n\r\n            syncAllDatePlaceholders();\r\n\r\n\r\n            \/*\r\n             * On browsers that support showPicker(),\r\n             * immediately open the checkout calendar\r\n             * after the visitor chooses check-in.\r\n             *\/\r\n\r\n            window.setTimeout(\r\n                function () {\r\n\r\n                    if (\r\n                        typeof checkout.showPicker ===\r\n                        \"function\"\r\n                    ) {\r\n\r\n                        try {\r\n\r\n                            checkout.showPicker();\r\n\r\n                        } catch (error) {\r\n\r\n                            \/*\r\n                             * Some mobile browsers block\r\n                             * programmatic picker opening.\r\n                             * The minimum date still works.\r\n                             *\/\r\n\r\n                        }\r\n\r\n                    } else {\r\n\r\n                        checkout.focus();\r\n\r\n                    }\r\n\r\n                },\r\n                80\r\n            );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    checkout.addEventListener(\r\n        \"change\",\r\n        function () {\r\n\r\n            syncAllDatePlaceholders();\r\n\r\n        }\r\n    );\r\n\r\n\r\n    syncAllDatePlaceholders();\r\n\r\n\r\n    \/* =========================================================\r\n       MONEY\r\n    ========================================================= *\/\r\n\r\n    function money(value) {\r\n\r\n        return (\r\n            \"\u20ac\" +\r\n            Number(value)\r\n                .toLocaleString(\r\n                    \"en\",\r\n                    {\r\n                        maximumFractionDigits: 0\r\n                    }\r\n                )\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function moneyForSubmit(value) {\r\n\r\n        return (\r\n            Number(value)\r\n                .toLocaleString(\r\n                    \"en\",\r\n                    {\r\n                        maximumFractionDigits: 0\r\n                    }\r\n                )\r\n            +\r\n            \"\u20ac\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       ESCAPE HTML\r\n    ========================================================= *\/\r\n\r\n    function escapeHtml(value) {\r\n\r\n        return String(value)\r\n            .replaceAll(\r\n                \"&\",\r\n                \"&amp;\"\r\n            )\r\n            .replaceAll(\r\n                \"<\",\r\n                \"&lt;\"\r\n            )\r\n            .replaceAll(\r\n                \">\",\r\n                \"&gt;\"\r\n            )\r\n            .replaceAll(\r\n                '\"',\r\n                \"&quot;\"\r\n            )\r\n            .replaceAll(\r\n                \"'\",\r\n                \"&#039;\"\r\n            );\r\n\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       ROOM COMBINATION HELPERS\r\n    ========================================================= *\/\r\n\r\n    function roomQuantityLabel(\r\n        room,\r\n        quantity\r\n    ) {\r\n\r\n        if (room.id === \"shared\") {\r\n\r\n            return (\r\n                \"Shared Room (\" +\r\n                quantity +\r\n                (\r\n                    quantity === 1\r\n                        ? \" guest)\"\r\n                        : \" guests)\"\r\n                )\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return (\r\n            quantity +\r\n            \" \" +\r\n            room.name +\r\n            (\r\n                quantity === 1\r\n                    ? \"\"\r\n                    : \"s\"\r\n            )\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function allocationLabel(\r\n        room,\r\n        quantity\r\n    ) {\r\n\r\n        const people =\r\n            quantity *\r\n            room.capacity;\r\n\r\n\r\n        if (room.id === \"shared\") {\r\n\r\n            return (\r\n                people +\r\n                (\r\n                    people === 1\r\n                        ? \" guest in Shared Room\"\r\n                        : \" guests in Shared Room\"\r\n                )\r\n            );\r\n\r\n        }\r\n\r\n\r\n        if (room.id === \"single\") {\r\n\r\n            return (\r\n                people +\r\n                (\r\n                    people === 1\r\n                        ? \" guest in Single Room\"\r\n                        : \" guests in Single Rooms\"\r\n                )\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return (\r\n            people +\r\n            \" guests in \" +\r\n            quantity +\r\n            \" \" +\r\n            room.name +\r\n            (\r\n                quantity === 1\r\n                    ? \"\"\r\n                    : \"s\"\r\n            ) +\r\n            \" (\" +\r\n            room.capacity +\r\n            \" per room)\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function normalizeComponents(\r\n        components\r\n    ) {\r\n\r\n        const grouped = {};\r\n\r\n\r\n        components.forEach(\r\n            function (component) {\r\n\r\n                if (\r\n                    !component ||\r\n                    !component.room ||\r\n                    component.quantity < 1\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n\r\n                const id =\r\n                    component.room.id;\r\n\r\n\r\n                if (!grouped[id]) {\r\n\r\n                    grouped[id] = {\r\n                        room: component.room,\r\n                        quantity: 0\r\n                    };\r\n\r\n                }\r\n\r\n\r\n                grouped[id].quantity +=\r\n                    component.quantity;\r\n\r\n            }\r\n        );\r\n\r\n\r\n        const order = [\r\n            \"triple\",\r\n            \"double\",\r\n            \"twin\",\r\n            \"single\",\r\n            \"shared\"\r\n        ];\r\n\r\n\r\n        return order\r\n            .filter(\r\n                function (id) {\r\n                    return grouped[id];\r\n                }\r\n            )\r\n            .map(\r\n                function (id) {\r\n                    return grouped[id];\r\n                }\r\n            );\r\n\r\n    }\r\n\r\n\r\n    function buildOption(\r\n        components,\r\n        days\r\n    ) {\r\n\r\n        const normalized =\r\n            normalizeComponents(\r\n                components\r\n            );\r\n\r\n\r\n        const allocatedGuests =\r\n            normalized.reduce(\r\n                function (\r\n                    total,\r\n                    component\r\n                ) {\r\n\r\n                    return (\r\n                        total +\r\n                        component.quantity *\r\n                        component.room.capacity\r\n                    );\r\n\r\n                },\r\n                0\r\n            );\r\n\r\n\r\n        if (\r\n            allocatedGuests !==\r\n            guests\r\n        ) {\r\n\r\n            return null;\r\n\r\n        }\r\n\r\n\r\n        const total =\r\n            normalized.reduce(\r\n                function (\r\n                    sum,\r\n                    component\r\n                ) {\r\n\r\n                    const people =\r\n                        component.quantity *\r\n                        component.room.capacity;\r\n\r\n\r\n                    return (\r\n                        sum +\r\n                        people *\r\n                        component.room.price *\r\n                        days\r\n                    );\r\n\r\n                },\r\n                0\r\n            );\r\n\r\n\r\n        const key =\r\n            normalized\r\n                .map(\r\n                    function (component) {\r\n\r\n                        return (\r\n                            component.room.id +\r\n                            \":\" +\r\n                            component.quantity\r\n                        );\r\n\r\n                    }\r\n                )\r\n                .join(\"|\");\r\n\r\n\r\n        return {\r\n            key: key,\r\n            components: normalized,\r\n            total: total\r\n        };\r\n\r\n    }\r\n\r\n\r\n    function createOptions(\r\n        days\r\n    ) {\r\n\r\n        const optionMap =\r\n            new Map();\r\n\r\n\r\n        function add(\r\n            components\r\n        ) {\r\n\r\n            const option =\r\n                buildOption(\r\n                    components,\r\n                    days\r\n                );\r\n\r\n\r\n            if (\r\n                option &&\r\n                !optionMap.has(\r\n                    option.key\r\n                )\r\n            ) {\r\n\r\n                optionMap.set(\r\n                    option.key,\r\n                    option\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * SHARED:\r\n         * Any number of guests can stay in shared accommodation.\r\n         *\/\r\n\r\n        add([\r\n            {\r\n                room: rooms.shared,\r\n                quantity: guests\r\n            }\r\n        ]);\r\n\r\n\r\n        \/*\r\n         * SINGLE:\r\n         * One guest per Single Room.\r\n         *\/\r\n\r\n        add([\r\n            {\r\n                room: rooms.single,\r\n                quantity: guests\r\n            }\r\n        ]);\r\n\r\n\r\n        \/*\r\n         * TWIN:\r\n         * Minimum 2 guests and maximum 2 guests per Twin Room.\r\n         * A Twin Room is never sold to 1 guest or 3+ guests.\r\n         *\r\n         * Odd guest numbers:\r\n         * remaining 1 guest can use Shared or Single.\r\n         *\/\r\n\r\n        if (guests >= 2) {\r\n\r\n            const twinRooms =\r\n                Math.floor(\r\n                    guests \/ 2\r\n                );\r\n\r\n            const twinRemainder =\r\n                guests % 2;\r\n\r\n\r\n            if (twinRemainder === 0) {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.twin,\r\n                        quantity: twinRooms\r\n                    }\r\n                ]);\r\n\r\n            } else {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.twin,\r\n                        quantity: twinRooms\r\n                    },\r\n                    {\r\n                        room: rooms.shared,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.twin,\r\n                        quantity: twinRooms\r\n                    },\r\n                    {\r\n                        room: rooms.single,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * DOUBLE:\r\n         * Minimum 2 guests and maximum 2 guests per Double Room.\r\n         * A Double Room is never sold to 1 guest or 3+ guests.\r\n         *\r\n         * Example for 3 guests:\r\n         * 1 Double Room for 2 guests\r\n         * + 1 Shared place OR 1 Single Room.\r\n         *\/\r\n\r\n        if (guests >= 2) {\r\n\r\n            const doubleRooms =\r\n                Math.floor(\r\n                    guests \/ 2\r\n                );\r\n\r\n            const doubleRemainder =\r\n                guests % 2;\r\n\r\n\r\n            if (doubleRemainder === 0) {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.double,\r\n                        quantity: doubleRooms\r\n                    }\r\n                ]);\r\n\r\n            } else {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.double,\r\n                        quantity: doubleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.shared,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.double,\r\n                        quantity: doubleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.single,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * TRIPLE:\r\n         * Minimum 3 guests and maximum 3 guests per Triple Room.\r\n         * A Triple Room is never sold to 1, 2, or 4+ guests.\r\n         *\r\n         * Remaining 1:\r\n         * Shared or Single.\r\n         *\r\n         * Remaining 2:\r\n         * Twin, Double, two Shared places, or two Singles.\r\n         *\/\r\n\r\n        if (guests >= 3) {\r\n\r\n            const tripleRooms =\r\n                Math.floor(\r\n                    guests \/ 3\r\n                );\r\n\r\n            const tripleRemainder =\r\n                guests % 3;\r\n\r\n\r\n            if (tripleRemainder === 0) {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    }\r\n                ]);\r\n\r\n            }\r\n\r\n\r\n            if (tripleRemainder === 1) {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.shared,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.single,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n            }\r\n\r\n\r\n            if (tripleRemainder === 2) {\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.twin,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.double,\r\n                        quantity: 1\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.shared,\r\n                        quantity: 2\r\n                    }\r\n                ]);\r\n\r\n\r\n                add([\r\n                    {\r\n                        room: rooms.triple,\r\n                        quantity: tripleRooms\r\n                    },\r\n                    {\r\n                        room: rooms.single,\r\n                        quantity: 2\r\n                    }\r\n                ]);\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        return Array.from(\r\n            optionMap.values()\r\n        )\r\n        .sort(\r\n            function (\r\n                a,\r\n                b\r\n            ) {\r\n\r\n                if (\r\n                    a.total !==\r\n                    b.total\r\n                ) {\r\n\r\n                    return (\r\n                        a.total -\r\n                        b.total\r\n                    );\r\n\r\n                }\r\n\r\n\r\n                return (\r\n                    a.components.length -\r\n                    b.components.length\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function optionRoomTitle(\r\n        option\r\n    ) {\r\n\r\n        return option.components\r\n            .map(\r\n                function (component) {\r\n\r\n                    return roomQuantityLabel(\r\n                        component.room,\r\n                        component.quantity\r\n                    );\r\n\r\n                }\r\n            )\r\n            .join(\" + \");\r\n\r\n    }\r\n\r\n\r\n    function optionAllocationHtml(\r\n        option\r\n    ) {\r\n\r\n        return (\r\n            '<div class=\"tsh-allocation-list\">' +\r\n            option.components\r\n                .map(\r\n                    function (component) {\r\n\r\n                        return (\r\n                            '<span class=\"tsh-allocation-item\">' +\r\n                            escapeHtml(\r\n                                allocationLabel(\r\n                                    component.room,\r\n                                    component.quantity\r\n                                )\r\n                            ) +\r\n                            '<\/span>'\r\n                        );\r\n\r\n                    }\r\n                )\r\n                .join(\"\") +\r\n            \"<\/div>\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function optionBreakdownHtml(\r\n        option,\r\n        days\r\n    ) {\r\n\r\n        \/*\r\n         * UNIVERSAL PRICE BREAKDOWN\r\n         *\r\n         * Applies automatically to:\r\n         * - Shared Room\r\n         * - Twin Room\r\n         * - Triple Room\r\n         * - Double Room\r\n         * - Single Room\r\n         * - Every valid room combination\r\n         * - Every selected stay length\r\n         *\r\n         * The daily room rate is used internally only.\r\n         * Visitors see the FULL STAY price per guest.\r\n         *\r\n         * Example for 5 package days:\r\n         * Shared: \u20ac275 \u00d7 2 guests = \u20ac550\r\n         *\r\n         * Example for 8 package days:\r\n         * Double: \u20ac520 \u00d7 2 guests = \u20ac1,040\r\n         *\/\r\n\r\n        return (\r\n            '<div class=\"tsh-breakdown-list\">' +\r\n            option.components\r\n                .map(\r\n                    function (component) {\r\n\r\n                        const people =\r\n                            component.quantity *\r\n                            component.room.capacity;\r\n\r\n\r\n                        \/*\r\n                         * Full stay price PER GUEST\r\n                         * for this specific room.\r\n                         *\/\r\n                        const stayPricePerGuest =\r\n                            component.room.price *\r\n                            days;\r\n\r\n\r\n                        \/*\r\n                         * Total for all guests allocated\r\n                         * to this room type.\r\n                         *\/\r\n                        const subtotal =\r\n                            stayPricePerGuest *\r\n                            people;\r\n\r\n\r\n                        return (\r\n                            '<span class=\"tsh-breakdown-item\">' +\r\n                            escapeHtml(\r\n                                component.room.shortName +\r\n                                \": \" +\r\n                                money(\r\n                                    stayPricePerGuest\r\n                                ) +\r\n                                \" \u00d7 \" +\r\n                                people +\r\n                                (\r\n                                    people === 1\r\n                                        ? \" guest\"\r\n                                        : \" guests\"\r\n                                ) +\r\n                                \" = \" +\r\n                                money(\r\n                                    subtotal\r\n                                )\r\n                            ) +\r\n                            '<\/span>'\r\n                        );\r\n\r\n                    }\r\n                )\r\n                .join(\"\") +\r\n            \"<\/div>\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       RESULTS POPUP\r\n    ========================================================= *\/\r\n\r\n    function openResultsPopup() {\r\n\r\n        results.classList.add(\r\n            \"is-visible\"\r\n        );\r\n\r\n        results.setAttribute(\r\n            \"aria-hidden\",\r\n            \"false\"\r\n        );\r\n\r\n        document.documentElement.classList.add(\r\n            \"tsh-room-results-open\"\r\n        );\r\n\r\n        document.body.classList.add(\r\n            \"tsh-room-results-open\"\r\n        );\r\n\r\n        if (resultsModalClose) {\r\n\r\n            window.setTimeout(\r\n                function () {\r\n\r\n                    resultsModalClose.focus();\r\n\r\n                },\r\n                50\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function closeResultsPopup() {\r\n\r\n        results.classList.remove(\r\n            \"is-visible\"\r\n        );\r\n\r\n        results.setAttribute(\r\n            \"aria-hidden\",\r\n            \"true\"\r\n        );\r\n\r\n        document.documentElement.classList.remove(\r\n            \"tsh-room-results-open\"\r\n        );\r\n\r\n        document.body.classList.remove(\r\n            \"tsh-room-results-open\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    if (resultsModalClose) {\r\n\r\n        resultsModalClose.addEventListener(\r\n            \"click\",\r\n            closeResultsPopup\r\n        );\r\n\r\n    }\r\n\r\n\r\n    results.addEventListener(\r\n        \"click\",\r\n        function (event) {\r\n\r\n            \/*\r\n             * Clicking only the dark overlay closes the popup.\r\n             * Clicking inside the white result panel keeps it open.\r\n             *\/\r\n            if (\r\n                event.target ===\r\n                results\r\n            ) {\r\n\r\n                closeResultsPopup();\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n\r\n    document.addEventListener(\r\n        \"keydown\",\r\n        function (event) {\r\n\r\n            if (\r\n                event.key === \"Escape\" &&\r\n                results.classList.contains(\r\n                    \"is-visible\"\r\n                )\r\n            ) {\r\n\r\n                closeResultsPopup();\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n\r\n    \/* =========================================================\r\n       SEARCH\r\n    ========================================================= *\/\r\n\r\n    function runSearch() {\r\n\r\n        guests =\r\n            Math.min(\r\n                10,\r\n                Math.max(\r\n                    1,\r\n                    parseInt(\r\n                        guestSelect.value,\r\n                        10\r\n                    ) || 1\r\n                )\r\n            );\r\n\r\n        guestSelect.value =\r\n            String(\r\n                guests\r\n            );\r\n\r\n        message.classList.remove(\r\n            \"is-visible\"\r\n        );\r\n\r\n        message.textContent = \"\";\r\n\r\n\r\n        const start =\r\n            parseDate(\r\n                checkin.value\r\n            );\r\n\r\n        const end =\r\n            parseDate(\r\n                checkout.value\r\n            );\r\n\r\n\r\n        if (!start || !end) {\r\n\r\n            message.textContent =\r\n                \"Please select your check-in and check-out dates.\";\r\n\r\n            message.classList.add(\r\n                \"is-visible\"\r\n            );\r\n\r\n            closeResultsPopup();\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const nights =\r\n            diffCalendarDays(\r\n                start,\r\n                end\r\n            );\r\n\r\n\r\n        if (nights < MINIMUM_NIGHTS) {\r\n\r\n            message.textContent =\r\n                \"Minimum stay is 4 nights. Please choose a checkout date at least 4 days after check-in.\";\r\n\r\n            message.classList.add(\r\n                \"is-visible\"\r\n            );\r\n\r\n            closeResultsPopup();\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * Package pricing uses DAYS:\r\n         * 4 nights = 5 days,\r\n         * 5 nights = 6 days, etc.\r\n         *\/\r\n\r\n        const days =\r\n            nights + 1;\r\n\r\n\r\n        const options =\r\n            createOptions(\r\n                days\r\n            );\r\n\r\n\r\n        const cheapestTotal =\r\n            options.length\r\n                ? options[0].total\r\n                : 0;\r\n\r\n\r\n        resultsBody.innerHTML =\r\n            options\r\n                .map(\r\n                    function (\r\n                        option,\r\n                        index\r\n                    ) {\r\n\r\n                        const title =\r\n                            optionRoomTitle(\r\n                                option\r\n                            );\r\n\r\n\r\n                        const isBest =\r\n                            option.total ===\r\n                            cheapestTotal;\r\n\r\n\r\n                        return `\r\n                            <tr>\r\n\r\n                                <td\r\n                                    class=\"tsh-result-room\"\r\n                                    data-label=\"Room option\"\r\n                                >\r\n\r\n                                    <span class=\"tsh-room-name\">\r\n                                        ${escapeHtml(title)}\r\n                                    <\/span>\r\n\r\n                                    <span class=\"tsh-room-note\">\r\n                                        Exact room combination for ${guests}\r\n                                        ${guests === 1 ? \"guest\" : \"guests\"}.\r\n                                    <\/span>\r\n\r\n                                    ${\r\n                                        isBest\r\n                                            ? '<span class=\"tsh-best-value\">Best value<\/span>'\r\n                                            : \"\"\r\n                                    }\r\n\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-allocation\"\r\n                                    data-label=\"Guest allocation\"\r\n                                >\r\n                                    ${optionAllocationHtml(option)}\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-stay\"\r\n                                    data-label=\"Stay\"\r\n                                >\r\n                                    ${days} days \/ ${nights} nights\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-total\"\r\n                                    data-label=\"Total for your guests\"\r\n                                >\r\n                                    <span class=\"tsh-total-money\">\r\n                                        ${money(option.total)}\r\n                                    <\/span>\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-breakdown\"\r\n                                    data-label=\"Price breakdown\"\r\n                                >\r\n                                    ${optionBreakdownHtml(option, days)}\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-status\"\r\n                                    data-label=\"Status\"\r\n                                >\r\n\r\n                                    <span class=\"tsh-status available\">\r\n                                        <span class=\"tsh-status-dot\"><\/span>\r\n                                        Available\r\n                                    <\/span>\r\n\r\n                                <\/td>\r\n\r\n\r\n                                <td\r\n                                    class=\"tsh-result-action\"\r\n                                >\r\n\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        class=\"tsh-select-room\"\r\n                                        data-room=\"${escapeHtml(title)}\"\r\n                                        data-price=\"${option.total}\"\r\n                                    >\r\n                                        Select\r\n                                    <\/button>\r\n\r\n                                <\/td>\r\n\r\n                            <\/tr>\r\n                        `;\r\n\r\n                    }\r\n                )\r\n                .join(\"\");\r\n\r\n\r\n        resultsSummary.textContent =\r\n            formatPrettyDate(\r\n                start\r\n            )\r\n            +\r\n            \" \u2192 \"\r\n            +\r\n            formatPrettyDate(\r\n                end\r\n            )\r\n            +\r\n            \" \u00b7 \"\r\n            +\r\n            days\r\n            +\r\n            \" days \/ \"\r\n            +\r\n            nights\r\n            +\r\n            \" nights \u00b7 \"\r\n            +\r\n            guests\r\n            +\r\n            (\r\n                guests === 1\r\n                    ? \" guest\"\r\n                    : \" guests\"\r\n            );\r\n\r\n\r\n        resultsCount.textContent =\r\n            options.length +\r\n            (\r\n                options.length === 1\r\n                    ? \" room option\"\r\n                    : \" room options\"\r\n            );\r\n\r\n\r\n        openResultsPopup();\r\n\r\n    }\r\n\r\n\r\n    searchButton.addEventListener(\r\n        \"click\",\r\n        runSearch\r\n    );\r\n\r\n\r\n    \/* =========================================================\r\n       BOOKING POPUP PREFILL HELPERS\r\n    ========================================================= *\/\r\n\r\n    function dispatchFieldEvents(\r\n        element\r\n    ) {\r\n\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n\r\n        element.dispatchEvent(\r\n            new Event(\r\n                \"input\",\r\n                {\r\n                    bubbles: true\r\n                }\r\n            )\r\n        );\r\n\r\n\r\n        element.dispatchEvent(\r\n            new Event(\r\n                \"change\",\r\n                {\r\n                    bubbles: true\r\n                }\r\n            )\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function setBookingDates(\r\n        arrival,\r\n        departure\r\n    ) {\r\n\r\n        const bookingArrival =\r\n            document.getElementById(\r\n                \"tshDateFrom\"\r\n            );\r\n\r\n\r\n        const bookingDeparture =\r\n            document.getElementById(\r\n                \"tshDateTo\"\r\n            );\r\n\r\n\r\n        if (\r\n            !bookingArrival ||\r\n            !bookingDeparture\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        \/*\r\n         * Set arrival first because the existing booking form\r\n         * recalculates the minimum departure date when arrival changes.\r\n         *\/\r\n\r\n        bookingArrival.value =\r\n            arrival || \"\";\r\n\r\n\r\n        dispatchFieldEvents(\r\n            bookingArrival\r\n        );\r\n\r\n\r\n        \/*\r\n         * Set departure AFTER the arrival change handler has run.\r\n         *\/\r\n\r\n        bookingDeparture.value =\r\n            departure || \"\";\r\n\r\n\r\n        dispatchFieldEvents(\r\n            bookingDeparture\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function setBookingRoom(\r\n        roomLabel\r\n    ) {\r\n\r\n        const bookingRoom =\r\n            document.getElementById(\r\n                \"tshPackage\"\r\n            );\r\n\r\n\r\n        if (!bookingRoom) {\r\n            return;\r\n        }\r\n\r\n\r\n        \/*\r\n         * Your booking form normally contains only the basic room types.\r\n         * Search results can contain combinations such as:\r\n         *\r\n         * \"1 Double Room + 1 Single Room\"\r\n         *\r\n         * If the exact option does not already exist, add it dynamically\r\n         * so the visitor sees exactly the room combination they selected\r\n         * and FormSubmit receives the same text.\r\n         *\/\r\n\r\n        let matchingOption =\r\n            Array.from(\r\n                bookingRoom.options\r\n            )\r\n            .find(\r\n                function (option) {\r\n\r\n                    return (\r\n                        option.value ===\r\n                        roomLabel\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n        if (!matchingOption) {\r\n\r\n            matchingOption =\r\n                document.createElement(\r\n                    \"option\"\r\n                );\r\n\r\n\r\n            matchingOption.value =\r\n                roomLabel;\r\n\r\n\r\n            matchingOption.textContent =\r\n                roomLabel;\r\n\r\n\r\n            matchingOption.setAttribute(\r\n                \"data-tsh-search-option\",\r\n                \"1\"\r\n            );\r\n\r\n\r\n            bookingRoom.appendChild(\r\n                matchingOption\r\n            );\r\n\r\n        }\r\n\r\n\r\n        bookingRoom.value =\r\n            roomLabel;\r\n\r\n\r\n        dispatchFieldEvents(\r\n            bookingRoom\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function setBookingGuests(\r\n        targetGuests\r\n    ) {\r\n\r\n        const guestMinusButton =\r\n            document.getElementById(\r\n                \"tshGuestMinus\"\r\n            );\r\n\r\n\r\n        const guestPlusButton =\r\n            document.getElementById(\r\n                \"tshGuestPlus\"\r\n            );\r\n\r\n\r\n        const guestDisplay =\r\n            document.getElementById(\r\n                \"tshGuestValue\"\r\n            );\r\n\r\n\r\n        const guestHidden =\r\n            document.getElementById(\r\n                \"tshGuestsHidden\"\r\n            );\r\n\r\n\r\n        const target =\r\n            Math.min(\r\n                10,\r\n                Math.max(\r\n                    1,\r\n                    parseInt(\r\n                        targetGuests,\r\n                        10\r\n                    ) || 1\r\n                )\r\n            );\r\n\r\n\r\n        \/*\r\n         * IMPORTANT:\r\n         * The booking form keeps its own internal guest counter in JS.\r\n         * We use its existing minus\/plus buttons so the internal value,\r\n         * visible value and hidden submitted value all stay synchronized.\r\n         *\/\r\n\r\n\r\n        if (\r\n            guestMinusButton &&\r\n            guestPlusButton\r\n        ) {\r\n\r\n            \/*\r\n             * Safely reset the booking form's own counter to 1.\r\n             *\/\r\n\r\n            for (\r\n                let i = 0;\r\n                i < 30;\r\n                i++\r\n            ) {\r\n\r\n                guestMinusButton.click();\r\n\r\n            }\r\n\r\n\r\n            \/*\r\n             * Raise it to the selected number of guests.\r\n             *\/\r\n\r\n            for (\r\n                let i = 1;\r\n                i < target;\r\n                i++\r\n            ) {\r\n\r\n                guestPlusButton.click();\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * Final visual\/submission fallback in case another optimization\r\n         * plugin delays the booking form's counter JavaScript.\r\n         *\/\r\n\r\n        if (guestDisplay) {\r\n\r\n            guestDisplay.textContent =\r\n                String(\r\n                    target\r\n                );\r\n\r\n        }\r\n\r\n\r\n        if (guestHidden) {\r\n\r\n            guestHidden.value =\r\n                String(\r\n                    target\r\n                );\r\n\r\n            dispatchFieldEvents(\r\n                guestHidden\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function addBookingSearchDetails(\r\n        bookingForm,\r\n        selection\r\n    ) {\r\n\r\n        if (!bookingForm) {\r\n            return;\r\n        }\r\n\r\n\r\n        \/*\r\n         * Include the calculated total in the submitted booking request.\r\n         * This is hidden from the visitor but is sent with FormSubmit.\r\n         *\/\r\n\r\n        let totalField =\r\n            document.getElementById(\r\n                \"tshSearchCalculatedTotal\"\r\n            );\r\n\r\n\r\n        if (!totalField) {\r\n\r\n            totalField =\r\n                document.createElement(\r\n                    \"input\"\r\n                );\r\n\r\n\r\n            totalField.type =\r\n                \"hidden\";\r\n\r\n\r\n            totalField.id =\r\n                \"tshSearchCalculatedTotal\";\r\n\r\n\r\n            totalField.name =\r\n                \"Calculated package total\";\r\n\r\n\r\n            bookingForm.appendChild(\r\n                totalField\r\n            );\r\n\r\n        }\r\n\r\n\r\n        totalField.value =\r\n            money(\r\n                selection.total\r\n            );\r\n\r\n\r\n        \/*\r\n         * Show the TOTAL FOR YOUR GUESTS directly\r\n         * on the booking form submit button.\r\n         *\r\n         * Example:\r\n         * SUBMIT FOR 550\u20ac\r\n         *\/\r\n        const submitButton =\r\n            document.getElementById(\r\n                \"tshSubmitButton\"\r\n            );\r\n\r\n\r\n        if (submitButton) {\r\n\r\n            submitButton.textContent =\r\n                \"SUBMIT FOR \" +\r\n                moneyForSubmit(\r\n                    selection.total\r\n                );\r\n\r\n        }\r\n\r\n\r\n        let sourceField =\r\n            document.getElementById(\r\n                \"tshSearchSelectionSource\"\r\n            );\r\n\r\n\r\n        if (!sourceField) {\r\n\r\n            sourceField =\r\n                document.createElement(\r\n                    \"input\"\r\n                );\r\n\r\n\r\n            sourceField.type =\r\n                \"hidden\";\r\n\r\n\r\n            sourceField.id =\r\n                \"tshSearchSelectionSource\";\r\n\r\n\r\n            sourceField.name =\r\n                \"Booking source\";\r\n\r\n\r\n            bookingForm.appendChild(\r\n                sourceField\r\n            );\r\n\r\n        }\r\n\r\n\r\n        sourceField.value =\r\n            \"Room price search engine\";\r\n\r\n    }\r\n\r\n\r\n    function openPrefilledBookingPopup(\r\n        selection,\r\n        trigger\r\n    ) {\r\n\r\n        const popup =\r\n            document.getElementById(\r\n                \"tshBookingPopupOverlay\"\r\n            );\r\n\r\n\r\n        const bookingForm =\r\n            document.getElementById(\r\n                \"tshBookingForm\"\r\n            );\r\n\r\n\r\n        if (!popup) {\r\n\r\n            console.error(\r\n                \"Tamraght Surf House: booking popup was not found.\"\r\n            );\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * PREFILL EVERYTHING THE VISITOR ALREADY SELECTED.\r\n         *\/\r\n\r\n        setBookingDates(\r\n            selection.checkin,\r\n            selection.checkout\r\n        );\r\n\r\n\r\n        setBookingRoom(\r\n            selection.room\r\n        );\r\n\r\n\r\n        setBookingGuests(\r\n            selection.guests\r\n        );\r\n\r\n\r\n        addBookingSearchDetails(\r\n            bookingForm,\r\n            selection\r\n        );\r\n\r\n\r\n        \/*\r\n         * Keep a globally accessible copy as well.\r\n         *\/\r\n\r\n        window.tshSelectedRoom =\r\n            selection;\r\n\r\n\r\n        \/*\r\n         * Open the existing popup.\r\n         *\/\r\n\r\n        if (\r\n            popup.parentElement !==\r\n            document.body\r\n        ) {\r\n\r\n            document.body.appendChild(\r\n                popup\r\n            );\r\n\r\n        }\r\n\r\n\r\n        popup.classList.add(\r\n            \"is-open\"\r\n        );\r\n\r\n\r\n        popup.setAttribute(\r\n            \"aria-hidden\",\r\n            \"false\"\r\n        );\r\n\r\n\r\n        document.documentElement.style.overflow =\r\n            \"hidden\";\r\n\r\n\r\n        document.body.style.overflow =\r\n            \"hidden\";\r\n\r\n\r\n        \/*\r\n         * Focus the first still-empty customer information field,\r\n         * so the visitor can continue immediately with WhatsApp\/name\/email.\r\n         *\/\r\n\r\n        const firstEmptyField =\r\n            popup.querySelector(\r\n                \"#tshPhone:not([value]), #tshEmail:not([value]), #tshName:not([value])\"\r\n            );\r\n\r\n\r\n        const phone =\r\n            document.getElementById(\r\n                \"tshPhone\"\r\n            );\r\n\r\n\r\n        window.setTimeout(\r\n            function () {\r\n\r\n                if (\r\n                    phone &&\r\n                    typeof phone.focus ===\r\n                    \"function\"\r\n                ) {\r\n\r\n                    phone.focus();\r\n\r\n                }\r\n\r\n            },\r\n            50\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =========================================================\r\n       SELECT ROOM\r\n       Prefills dates + room + guests + total price,\r\n       updates submit button, then opens booking popup.\r\n    ========================================================= *\/\r\n\r\n    resultsBody.addEventListener(\r\n        \"click\",\r\n        function (event) {\r\n\r\n            const button =\r\n                event.target.closest(\r\n                    \".tsh-select-room\"\r\n                );\r\n\r\n\r\n            if (\r\n                !button ||\r\n                button.disabled\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            event.preventDefault();\r\n\r\n\r\n            const room =\r\n                button.getAttribute(\r\n                    \"data-room\"\r\n                );\r\n\r\n\r\n            const selection =\r\n                {\r\n                    room: room,\r\n                    guests: guests,\r\n                    checkin: checkin.value,\r\n                    checkout: checkout.value,\r\n                    total: Number(\r\n                        button.getAttribute(\r\n                            \"data-price\"\r\n                        )\r\n                    ) || 0\r\n                };\r\n\r\n\r\n            closeResultsPopup();\r\n\r\n\r\n            openPrefilledBookingPopup(\r\n                selection,\r\n                button\r\n            );\r\n\r\n        }\r\n    );\r\n\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d66fef1 e-con-full e-flex e-con e-parent\" data-id=\"d66fef1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-52df7bc elementor-widget elementor-widget-html\" data-id=\"52df7bc\" 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<style>\r\n\/* =========================================\r\n   WHAT'S INCLUDED - SIMPLE VERSION\r\n========================================= *\/\r\n\r\n.simple-package-section,\r\n.simple-package-section * {\r\n    box-sizing: border-box;\r\n}\r\n\r\n.simple-package-section {\r\n    width: 100%;\r\n    padding: 35px 20px;\r\n    background: #fff;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    color: #111;\r\n}\r\n\r\n.simple-package-container {\r\n    width: 100%;\r\n    max-width: 1280px;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   HEADER\r\n========================================= *\/\r\n\r\n.simple-package-header {\r\n    text-align: center;\r\n    max-width: 760px;\r\n    margin: 0 auto 45px;\r\n}\r\n\r\n.simple-package-header h2 {\r\n    margin: 0 0 14px;\r\n    font-size: 48px;\r\n    font-weight: 800;\r\n    line-height: 1.1;\r\n    color: #07386f;\r\n}\r\n\r\n.simple-package-header p {\r\n    margin: 0;\r\n    color: #D45700;\r\n    font-size: 17px;\r\n    line-height: 1.7;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   CARDS GRID\r\n========================================= *\/\r\n\r\n.simple-package-grid {\r\n    display: grid;\r\n    grid-template-columns: 1.25fr 0.85fr 1fr;\r\n    gap: 22px;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   CARD\r\n========================================= *\/\r\n\r\n.simple-package-card {\r\n    background: #000;\r\n    color: #fff;\r\n    border: 1px solid rgba(255,255,255,.08);\r\n    border-radius: 16px;\r\n    padding: 28px;\r\n}\r\n\r\n.simple-card-top {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 12px;\r\n    margin-bottom: 22px;\r\n}\r\n\r\n.simple-card-icon {\r\n    width: 42px;\r\n    height: 42px;\r\n    flex: 0 0 42px;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    border-radius: 50%;\r\n\r\n    background: #1f1f1f;\r\n\r\n    font-size: 18px;\r\n    font-weight: 700;\r\n}\r\n\r\n.simple-package-card h3 {\r\n    margin: 0;\r\n    font-size: 27px;\r\n    font-weight: 700;\r\n    color: #fff;\r\n}\r\n\r\n.simple-package-description {\r\n    margin: 0 0 24px;\r\n    color: #666;\r\n    font-size: 15px;\r\n    line-height: 1.7;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   LIST\r\n========================================= *\/\r\n\r\n.simple-package-list {\r\n    margin: 0;\r\n    padding: 0;\r\n    list-style: none;\r\n\r\n    display: grid;\r\n    gap: 15px;\r\n}\r\n\r\n.simple-package-list li {\r\n    display: flex;\r\n    align-items: flex-start;\r\n    gap: 11px;\r\n\r\n    font-size: 16px;\r\n    line-height: 1.5;\r\n}\r\n\r\n.simple-list-icon {\r\n    width: 23px;\r\n    height: 23px;\r\n    flex: 0 0 23px;\r\n\r\n    margin-top: 1px;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    border-radius: 50%;\r\n\r\n    font-size: 12px;\r\n    font-weight: 700;\r\n}\r\n\r\n\r\n\/* INCLUDED *\/\r\n\r\n.simple-check {\r\n    background: #e5f7ed;\r\n    color: #159447;\r\n}\r\n\r\n\r\n\/* NOT INCLUDED *\/\r\n\r\n.simple-close {\r\n    background: #fdebea;\r\n    color: #d6453d;\r\n}\r\n\r\n\r\n\/* INFORMATION *\/\r\n\r\n.simple-info {\r\n    background: #fff3d9;\r\n    color: #b87300;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   SMALL NOTE\r\n========================================= *\/\r\n\r\n.simple-package-note {\r\n    margin-top: 24px;\r\n    padding-top: 18px;\r\n\r\n    border-top: 1px solid rgba(255,255,255,.12);\r\n\r\n    color: #c8c8c8;\r\n\r\n    font-size: 13px;\r\n    line-height: 1.6;\r\n}\r\n\r\n\r\n\/* =========================================\r\n   TABLET\r\n========================================= *\/\r\n\r\n@media (max-width: 1000px) {\r\n\r\n    .simple-package-grid {\r\n        grid-template-columns: 1fr 1fr;\r\n    }\r\n\r\n    .simple-package-card:first-child {\r\n        grid-column: 1 \/ -1;\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================\r\n   MOBILE\r\n========================================= *\/\r\n\r\n@media (max-width: 700px) {\r\n\r\n    .simple-package-section {\r\n        padding: 55px 16px;\r\n    }\r\n\r\n    .simple-package-header {\r\n        margin-bottom: 30px;\r\n    }\r\n\r\n    .simple-package-header h2 {\r\n        font-size: 36px;\r\n    }\r\n\r\n    .simple-package-header p {\r\n        font-size: 15px;\r\n    }\r\n\r\n    .simple-package-grid {\r\n        grid-template-columns: 1fr;\r\n    }\r\n\r\n    .simple-package-card:first-child {\r\n        grid-column: auto;\r\n    }\r\n\r\n    .simple-package-card {\r\n        padding: 24px 20px;\r\n    }\r\n\r\n    .simple-package-card h3 {\r\n        font-size: 24px;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<section class=\"simple-package-section\">\r\n\r\n    <div class=\"simple-package-container\">\r\n\r\n\r\n        <!-- HEADER -->\r\n\r\n        <div class=\"simple-package-header\">\r\n\r\n            <h2>\r\n                What's included\r\n            <\/h2>\r\n\r\n            <p>\r\n                Everything you need to know about your surf package\r\n                before booking your stay.\r\n            <\/p>\r\n\r\n        <\/div>\r\n\r\n\r\n\r\n        <!-- CARDS -->\r\n\r\n        <div class=\"simple-package-grid\">\r\n\r\n\r\n            <!-- =========================\r\n                 INCLUDED\r\n            ========================== -->\r\n\r\n            <div class=\"simple-package-card\">\r\n\r\n                <div class=\"simple-card-top\">\r\n\r\n                    <div class=\"simple-card-icon\">\r\n                        \u2713\r\n                    <\/div>\r\n\r\n                    <h3>\r\n                        Included\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n\r\n                <p class=\"simple-package-description\">\r\n                    Your package includes accommodation,\r\n                    surf coaching, meals, equipment and transport.\r\n                <\/p>\r\n\r\n\r\n                <ul class=\"simple-package-list\">\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Accommodation\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Three meals a day\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Transfers to the surf spots\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Surf theory and practical lessons\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Airport transfers\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Surfboard, wetsuit and leash\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Trip to the Moroccan market\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-check\">\r\n                            \u2713\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            BBQ evening\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n                <\/ul>\r\n\r\n            <\/div>\r\n\r\n\r\n\r\n            <!-- =========================\r\n                 NOT INCLUDED\r\n            ========================== -->\r\n\r\n            <div class=\"simple-package-card\">\r\n\r\n                <div class=\"simple-card-top\">\r\n\r\n                    <div class=\"simple-card-icon\">\r\n                        \u00d7\r\n                    <\/div>\r\n\r\n                    <h3>\r\n                        Not included\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n\r\n                <p class=\"simple-package-description\">\r\n                    These items are not included in the package price.\r\n                <\/p>\r\n\r\n\r\n                <ul class=\"simple-package-list\">\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-close\">\r\n                            \u00d7\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Flight tickets\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-close\">\r\n                            \u00d7\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Extra activities\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n                <\/ul>\r\n\r\n\r\n                <div class=\"simple-package-note\">\r\n                    Optional activities can be arranged during your stay.\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n\r\n\r\n            <!-- =========================\r\n                 IMPORTANT TO KNOW\r\n            ========================== -->\r\n\r\n            <div class=\"simple-package-card\">\r\n\r\n                <div class=\"simple-card-top\">\r\n\r\n                    <div class=\"simple-card-icon\">\r\n                        i\r\n                    <\/div>\r\n\r\n                    <h3>\r\n                        Important to know\r\n                    <\/h3>\r\n\r\n                <\/div>\r\n\r\n\r\n                <p class=\"simple-package-description\">\r\n                    Useful booking information before confirming your stay.\r\n                <\/p>\r\n\r\n\r\n                <ul class=\"simple-package-list\">\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-info\">\r\n                            i\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Start any date\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-info\">\r\n                            i\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Minimum stay: 4 nights\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-info\">\r\n                            i\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            Agadir airport transfer included\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n\r\n                    <li>\r\n                        <span class=\"simple-list-icon simple-info\">\r\n                            i\r\n                        <\/span>\r\n\r\n                        <span>\r\n                            20% deposit to confirm booking\r\n                        <\/span>\r\n                    <\/li>\r\n\r\n                <\/ul>\r\n\r\n            <\/div>\r\n\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Check your surf stay Find your package price Choose your arrival date, departure date and number of guests. Minimum stay is 4 nights. We will calculate the package price for every valid room option. Check-in Select check in date Check-out Select check out date Guests \u00b7 Max 10 1 Guest2 Guests3 Guests4 Guests5 Guests6 Guests7&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"iawp_total_views":2930,"footnotes":""},"class_list":["post-988136","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Packages - Tamraght Surf House<\/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:\/\/tamraghtsurfhouse.com\/it\/pacchetti\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Packages - Tamraght Surf House\" \/>\n<meta property=\"og:description\" content=\"Check your surf stay Find your package price Choose your arrival date, departure date and number of guests. Minimum stay is 4 nights. We will calculate the package price for every valid room option. Check-in Select check in date Check-out Select check out date Guests \u00b7 Max 10 1 Guest2 Guests3 Guests4 Guests5 Guests6 Guests7...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tamraghtsurfhouse.com\/it\/pacchetti\/\" \/>\n<meta property=\"og:site_name\" content=\"Tamraght Surf House\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-13T22:16:05+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/packages\\\/\",\"url\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/packages\\\/\",\"name\":\"Packages - Tamraght Surf House\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#website\"},\"datePublished\":\"2025-12-05T11:57:53+00:00\",\"dateModified\":\"2026-08-13T22:16:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/packages\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tamraghtsurfhouse.com\\\/packages\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/packages\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Packages\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#website\",\"url\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/\",\"name\":\"Tamraght Surf House\",\"description\":\"Tamraght Surf House - Surf Camp Tamraght\",\"publisher\":{\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#organization\",\"name\":\"Tamraght Surf House\",\"url\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/output-onlinepngtools-5.png\",\"contentUrl\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/output-onlinepngtools-5.png\",\"width\":350,\"height\":100,\"caption\":\"Tamraght Surf House\"},\"image\":{\"@id\":\"https:\\\/\\\/tamraghtsurfhouse.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pacchetti - Tamraght Surf House","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:\/\/tamraghtsurfhouse.com\/it\/pacchetti\/","og_locale":"it_IT","og_type":"article","og_title":"Packages - Tamraght Surf House","og_description":"Check your surf stay Find your package price Choose your arrival date, departure date and number of guests. Minimum stay is 4 nights. We will calculate the package price for every valid room option. Check-in Select check in date Check-out Select check out date Guests \u00b7 Max 10 1 Guest2 Guests3 Guests4 Guests5 Guests6 Guests7...","og_url":"https:\/\/tamraghtsurfhouse.com\/it\/pacchetti\/","og_site_name":"Tamraght Surf House","article_modified_time":"2026-08-13T22:16:05+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"2 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/tamraghtsurfhouse.com\/packages\/","url":"https:\/\/tamraghtsurfhouse.com\/packages\/","name":"Pacchetti - Tamraght Surf House","isPartOf":{"@id":"https:\/\/tamraghtsurfhouse.com\/#website"},"datePublished":"2025-12-05T11:57:53+00:00","dateModified":"2026-08-13T22:16:05+00:00","breadcrumb":{"@id":"https:\/\/tamraghtsurfhouse.com\/packages\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tamraghtsurfhouse.com\/packages\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tamraghtsurfhouse.com\/packages\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tamraghtsurfhouse.com\/"},{"@type":"ListItem","position":2,"name":"Packages"}]},{"@type":"WebSite","@id":"https:\/\/tamraghtsurfhouse.com\/#website","url":"https:\/\/tamraghtsurfhouse.com\/","name":"Tamraght Surf House","description":"Tamraght Surf House - Surf Camp Tamraght","publisher":{"@id":"https:\/\/tamraghtsurfhouse.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tamraghtsurfhouse.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/tamraghtsurfhouse.com\/#organization","name":"Tamraght Surf House","url":"https:\/\/tamraghtsurfhouse.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/tamraghtsurfhouse.com\/#\/schema\/logo\/image\/","url":"https:\/\/tamraghtsurfhouse.com\/wp-content\/uploads\/2021\/02\/output-onlinepngtools-5.png","contentUrl":"https:\/\/tamraghtsurfhouse.com\/wp-content\/uploads\/2021\/02\/output-onlinepngtools-5.png","width":350,"height":100,"caption":"Tamraght Surf House"},"image":{"@id":"https:\/\/tamraghtsurfhouse.com\/#\/schema\/logo\/image\/"}}]}},"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/pages\/988136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/comments?post=988136"}],"version-history":[{"count":392,"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/pages\/988136\/revisions"}],"predecessor-version":[{"id":991512,"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/pages\/988136\/revisions\/991512"}],"wp:attachment":[{"href":"https:\/\/tamraghtsurfhouse.com\/it\/wp-json\/wp\/v2\/media?parent=988136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}