1const q="/manus-storage/umrah-haram-cover_c9247ed2.jpg",e=o=>String(o??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),c=(o,i,t="en")=>(t==="ar"?o||i:i||o)||"",n=o=>`<bdi dir="ltr">${e(o)}</bdi>`,p=o=>`<bdi dir="auto">${e(o)}</bdi>`;function A(o,i){return o?o.split(` 2`).map(t=>t.trim()).filter(Boolean).map(t=>{const[l,h]=t.split("|").map(f=>f.trim());return(i==="ar"?l:h)||l||h||t}):[]}const L={ar:{bismillah:"Ø¨ÙØ³Ù٠٠اÙÙÙÙÙÙ Ø§ÙØ±ÙÙØÙÙ ÙÙ°ÙÙ Ø§ÙØ±ÙÙØÙÙÙ Ù",welcome:"رØÙØ© Ø¥Ù٠اÙÙØ© Ø¥ÙÙ Ø¨ÙØª اÙÙÙ Ø§ÙØØ±Ø§Ù Ù٠سجد رسÙÙÙ ï·º",program:"Ø¨Ø±ÙØ§Ù ج Ø§ÙØ¹Ù رة",duration:"٠دة Ø§ÙØ¨Ø±Ùا٠ج",days:"Ø£ÙØ§Ù ",nights:"ÙÙØ§ÙÙ",priceFrom:"ÙØ¨Ø¯Ø£ Ø§ÙØ³Ø¹Ø± Ù Ù",perPerson:"ÙÙØ´Ø®Øµ / Ø¨Ø§ÙØºØ±ÙØ© Ø§ÙØ«ÙØ§Ø¦ÙØ©",onRequest:"ØØ³Ø¨ Ø§ÙØ·Ùب",overview:"ÙØ¨Ø°Ø© Ø¹Ù Ø§ÙØ¨Ø±Ùا٠ج",hotelsTitle:"اÙÙÙØ§Ø¯Ù ÙØ§Ùأسعار",makkah:"ÙÙØ¯Ù Ù ÙØ©",madinah:"ÙÙØ¯Ù اÙ٠دÙÙØ©",stars:"Ø§ÙØªØµÙÙÙ",meals:"اÙÙØ¬Ø¨Ø§Øª",single:"Ù ÙØ±Ø¯",double:"Ø«ÙØ§Ø¦Ù",triple:"Ø«ÙØ§Ø«Ù",quad:"رباعÙ",flights:"Ù ÙØ§Ø¹Ùد Ø§ÙØ±ØÙات",leg:"Ø§ÙØ¨ÙاÙ",flightNo:"رÙÙ Ø§ÙØ±ØÙØ©",dep:"Ø§ÙØ¥ÙÙØ§Ø¹",arr:"اÙÙØµÙÙ",processing:"٠دة إصدار Ø§ÙØªØ£Ø´Ùرة",sponsor:"Ù ÙØ§ØØ¸Ø© Ø§ÙØªØ£Ø´Ùرة",documents:"اÙÙØ«Ø§Ø¦Ù اÙÙ Ø·ÙÙØ¨Ø©",notes:"Ù ÙØ§ØØ¸Ø§Øª",important:"Ù ÙØ§ØØ¸Ø§Øª ÙØ§Ù Ø©",tagline:"IBRIX â Ø§ÙØ³ÙØ± ÙØ§ÙتشغÙÙ ÙØ§Ùخد٠ة",booking:"ÙÙØØ¬Ø² Ø£Ù Ø§ÙØ§Ø³ØªÙسار",labbayk:"ÙÙØ¨ÙÙÙÙÙ٠اÙÙÙÙÙÙÙ ÙÙ ÙÙØ¨ÙÙÙÙÙ"},en:{bismillah:"In the Name of Allah, the Most Gracious, the Most Merciful",welcome:"A spiritual journey to the Sacred House of Allah and the Mosque of His Messenger ï·º",program:"Umrah Program",duration:"DURATION",days:"Days",nights:"Nights",priceFrom:"PRICE FROM",perPerson:"per person / double room",onRequest:"On request",overview:"Overview",hotelsTitle:"Hotels & Pricing",makkah:"Makkah Hotel",madinah:"Madinah Hotel",stars:"Stars",meals:"Meals",single:"Single",double:"Double",triple:"Triple",quad:"Quad",flights:"Flight Schedule",leg:"Leg",flightNo:"Flight",dep:"Dep.",arr:"Arr.",processing:"Visa processing time",sponsor:"Visa note",documents:"Required Documents",notes:"Notes",important:"Important Notes",tagline:"IBRIX â Travel, operations, and service",booking:"Bookings & inquiries",labbayk:"Labbayk Allahumma Labbayk"}},S=o=>"â ".repeat(Math.max(0,Math.min(5,o)));function T(){return`<div class="ornament"><svg width="180" height="22" viewBox="0 0 180 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 3 <path d="M2 11 H62" stroke="#C9A227" stroke-width="1"/> 4 <path d="M178 11 H118" stroke="#C9A227" stroke-width="1"/> 5 <path d="M90 2 L98 11 L90 20 L82 11 Z" stroke="#C9A227" stroke-width="1.2" fill="#F6ECCB"/> 6 <circle cx="90" cy="11" r="2.4" fill="#C9A227"/> 7 <circle cx="70" cy="11" r="2" fill="#C9A227"/> 8 <circle cx="110" cy="11" r="2" fill="#C9A227"/> 9 </svg></div>`}function P(o,i){const t=L[i],l=i==="ar"?"rtl":"ltr",h=e(c(o.titleAr,o.titleEn,i)),f=e(c(o.cityAr,o.cityEn,i)),D=e(o.contactPhone||"0787789915"),s=o.umrahDetails||{},d=i==="ar"?"'Noto Sans Arabic','Segoe UI',Tahoma,sans-serif":"'Manrope','Segoe UI',Arial,sans-serif",R=c(s.introAr,s.introEn,i).trim(),C=c(o.summaryAr,o.summaryEn,i).trim(),j=c(o.descriptionAr,o.descriptionEn,i).trim(),z=e(R||[C,j].filter(Boolean).join(" ")),I=o.currency||"JOD",b=r=>r&&Number(r)>0?n(`${r} ${I}`):"â",M=Array.isArray(s.hotels)?s.hotels.filter(r=>r&&(r.makkahHotel||r.priceDouble)):[];let v="";if(M.length){const r=M.map((a,g)=>{const m=S(Number(a.makkahStars)||0),H=a.madinahHotel?S(Number(a.madinahStars)||0):"";return`<tr class="${g%2?"alt":""}"> 10 <td class="h-name">${p(a.makkahHotel||"â")}</td> 11 <td class="h-st">${m||"â"}</td> 12 <td class="h-name">${p(a.madinahHotel||"â")}</td> 13 <td class="h-st">${H||"â"}</td> 14 <td class="h-meals">${p(a.meals||"â")}</td> 15 <td class="h-pr">${b(a.priceSingle)}</td> 16 <td class="h-pr">${b(a.priceDouble)}</td> 17 <td class="h-pr">${b(a.priceTriple)}</td> 18 <td class="h-pr">${b(a.priceQuad)}</td> 19 </tr>`}).join("");v=`<table class="lux-table"> 20 <thead> 21 <tr> 22 <th>${e(t.makkah)}</th><th>${e(t.stars)}</th> 23 <th>${e(t.madinah)}</th><th>${e(t.stars)}</th> 24 <th>${e(t.meals)}</th> 25 <th>${e(t.single)}</th><th>${e(t.double)}</th><th>${e(t.triple)}</th><th>${e(t.quad)}</th> 26 </tr> 27 </thead> 28 <tbody>${r}</tbody> 29 </table>`}const B=Array.isArray(s.flightGroups)?s.flightGroups.filter(r=>r&&(r.title||r.legs&&r.legs.length)):[];let u="";B.length&&(u=`<div class="flights">${B.map(a=>{const g=(a.legs||[]).map(m=>`<tr> 30 <td class="fl-leg">${p(m.label||"â")}</td> 31 <td class="fl-no">${n(m.flightNo||"â")}</td> 32 <td class="fl-t">${n(m.depart||"â")}</td> 33 <td class="fl-t">${n(m.arrive||"â")}</td> 34 </tr>`).join("");return`<div class="flight-card"> 35 ${a.title?`<div class="fl-title">${p(a.title)}</div>`:""} 36 ${a.dates?`<div class="fl-dates">${p(a.dates)}</div>`:""} 37 <table class="fl-table"> 38 <thead><tr><th>
38${e(t.leg)}</th><th>${e(t.flightNo)}</th><th>${e(t.dep)}</th><th>${e(t.arr)}</th></tr></thead> 39 <tbody>${g}</tbody> 40 </table> 41 </div>`}).join("")}</div>`);const x=c(s.processingTimeAr,s.processingTimeEn,i).trim(),$=c(s.sponsorNoteAr,s.sponsorNoteEn,i).trim();let N="";if(x||$){const r=[];x&&r.push(`<div class="visa-card"><div class="vc-lab">${e(t.processing)}</div><div class="vc-val">${e(x)}</div></div>`),$&&r.push(`<div class="visa-card"><div class="vc-lab">${e(t.sponsor)}</div><div class="vc-txt">${e($)}</div></div>`),N=`<div class="visa-cards">${r.join("")}</div>`}const E=A(s.documentsText,i),y=A(s.notesText,i),w=A(s.importantNotesText,i),k=(r,a="")=>r.map(g=>`<li class="${a}">${e(g)}</li>`).join(""),F=`background-image:linear-gradient(180deg,rgba(20,28,22,.30) 0%,rgba(20,28,22,.78) 100%),url('${q}');`;return`<!doctype html><html lang="${i}" dir="${l}"><head> 42<meta charset="utf-8"/> 43<meta name="author" content="IBRIX"/> 44<meta name="creator" content="IBRIX"/> 45<title>${h} â IBRIX</title> 46<link rel="preconnect" href="https://fonts.googleapis.com"> 47<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 48<link href="https://fonts.googleapis.com/css2?family=Amiri:wght@400;700&family=Noto+Sans+Arabic:wght@400;500;600;700;800&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet"> 49<style> 50 :root{ 51 --gold:#C9A227; --gold-d:#A8851A; --gold-l:#E7D196; 52 --ink:#1B2A22; --olive:#2E4636; --body:#3D4A42; --mute:#8A8170; 53 --cream:#FBF6EA; --cream-2:#F4EBD4; --line:#E4D6AE; 54 } 55 *{ box-sizing:border-box; margin:0; padding:0; } 56 @page{ size:A4; margin:0; } 57 html,body{ background:#fff; } 58 body{ font-family:${d}; color:var(--body); font-size:9pt; line-height:${i==="ar"?"1.46":"1.38"}; direction:${l}; 59 -webkit-print-color-adjust:exact; print-color-adjust:exact; orphans:3; widows:3; } 60 .sheet{ width:210mm; margin:0 auto; background:var(--cream); } 61 62 /* ---------- Cover ---------- */ 63 .cover{ position:relative; height:94mm; ${F} 64 background-size:cover; background-position:center; color:#fff; 65 display:flex; flex-direction:column; align-items:center; justify-content:center; 66 text-align:center; padding:8mm 16mm; break-inside:avoid; } 67 .cover .frame{ position:absolute; inset:8mm; border:1.4px solid rgba(231,209,150,.55); 68 box-shadow:inset 0 0 0 3px rgba(231,209,150,.18); pointer-events:none; } 69 .cover .logo-badge{ display:inline-flex; align-items:center; justify-content:center; 70 background:rgba(18,26,21,.72); border:1.2px solid rgba(231,209,150,.55); 71 border-radius:8px; padding:2.5mm 5mm; margin-bottom:3mm; 72 box-shadow:0 4px 18px rgba(0,0,0,.35), inset 0 0 0 2px rgba(231,209,150,.12); 73 backdrop-filter:blur(2px); } 74 .cover .logo{ max-height:14mm; max-width:23mm; width:auto; height:auto; display:block; } 75 .cover .bism{ font-family:'Amiri',serif; font-size:13pt; color:var(--gold-l); letter-spacing:.3px; margin-bottom:3.5mm; 76 text-shadow:0 1px 6px rgba(0,0,0,.5); } 77 .cover .kicker{ font-family:${d}; font-size:7.5pt; letter-spacing:${i==="ar"?"0":"4px"}; 78 text-transform:${i==="ar"?"none":"uppercase"}; color:var(--gold-l); margin-bottom:3mm; } 79 .cover h1{ font-family:${i==="ar"?"'Amiri',serif":"'Manrope',sans-serif"}; font-size:25pt; font-weight:700; line-height:1.12; margin-bottom:2.5mm; 80 text-shadow:0 2px 12px rgba(0,0,0,.55); } 81 .cover .chip{ display:inline-block; background:rgba(201,162,39,.92); color:#1B2A22; 82 font-family:${d}; font-size:9pt; font-weight:600; 83 letter-spacing:${i==="ar"?"0":"1px"}; padding:3px 14px; border-radius:30px; } 84 .cover .welcome{ font-size:9.5pt; color:#F3EAD2; max-width:150mm; margin:3mm auto 0; 85 text-shadow:0 1px 6px rgba(0,0,0,.5); } 86 .cover .labbayk{ position:absolute; bottom:5mm; left:0; right:0; font-family:'Amiri',serif; font-size:9.5pt; 87 color:var(--gold-l); letter-spacing:1px; } 88 89 /* ---------- Body ---------- */ 90 .body{ padding:5mm 12mm 2mm; } 91 .ornament{ text-align:center; margin:3mm 0; } 92 93 .cards{ display:flex; gap:4mm; margin-bottom:2.5mm; break-inside:avoid; } 94 .card{ flex:1; border:1px solid var(--line); border-radius:6px; padding:3mm; 95 text-align:center; background:#fff; 96 box-shadow:0 2px 8px rgba(168,133,26,.06); break-inside:avoid; } 97 .card .lab{ font-family:${d}; font-size:8.5pt; color:var(--mute); 98 letter-spacing:${i==="ar"?"0":"1px"}; text-transform:${i==="ar"?"none":"uppercase"}; } 99 .card .val{ font-size:14pt; color:var(--gold-d); font-weight:700; margin-top:1px; } 100 .card .sub{ font-size:8.5pt; color:var(--mute); margin-top:1px; } 101 102 h2.sec{ font-size:14pt; color:var(--olive); margin:3.5mm 0 1.4mm; font-weight:700; 103 display:flex; align-items:center; gap:8px; break-after:avoid; break-inside:avoid; } 104 h2.sec:before{ content:""; width:5px; height:18px; background:linear-gradient(var(--gold),var(--gold-d)); 105 border-radius:3px; display:inline-block; } 106 p.lead{ font-size:9.4pt; color:var(--body); line-height:${i==="ar"?"1.5":"1.42"}; } 107 108 /* ---------- Luxurious hotels & pricing table ---------- */ 109 .lux-table{ width:100%; border-collapse:collapse; margin:2mm 0 2mm; 110 font-family:${d}; font-size:8.4pt; 111 border:1px solid var(--line); border-radius:8px; overflow:hidden; break-inside:auto; } 112 .lux-table thead{ display:table-header-group; } 113 .lux-table tr{ break-inside:avoid; page-break-inside:avoid; } 114 .lux-table thead th{ background:linear-gradient(135deg,var(--olive),var(--ink)); color:var(--gold-l); 115 font-weight:600; padding:1.8mm 1.8mm; text-align:center; font-size:8pt;
116 border-${i==="ar"?"left":"right"}:1px solid rgba(231,209,150,.18); } 117 .lux-table tbody td{ padding:1.7mm 1.8mm; text-align:center; border-top:1px solid var(--line); 118 border-${i==="ar"?"left":"right"}:1px solid #efe6cd; color:var(--body); } 119 .lux-table tbody tr.alt{ background:#fbf4e1; } 120 .lux-table .h-name{ text-align:${l==="rtl"?"right":"left"}; font-weight:600; color:var(--ink); } 121 .lux-table .h-st{ color:var(--gold-d); letter-spacing:1px; } 122 .lux-table .h-meals{ color:var(--mute); font-size:7.8pt; } 123 .lux-table .h-pr{ font-weight:700; color:var(--gold-d); } 124 125 /* ---------- Flights ---------- */ 126 .flights{ display:flex; flex-direction:column; gap:2.5mm; } 127 .flight-card{ border:1px solid var(--line); border-radius:6px; background:#fff; padding:2.8mm 4mm; 128 box-shadow:0 2px 8px rgba(168,133,26,.05); break-inside:avoid; } 129 .fl-title{ font-size:12pt; color:var(--olive); font-weight:700; } 130 .fl-dates{ font-family:${d}; font-size:8.5pt; color:var(--gold-d); margin:1mm 0 2mm; } 131 .fl-table{ width:100%; border-collapse:collapse; font-family:${d}; font-size:8.4pt; } 132 .fl-table th{ color:var(--mute); font-weight:600; padding:1.6mm 1mm; border-bottom:1px solid var(--line); 133 text-align:${l==="rtl"?"right":"left"}; font-size:7.8pt; } 134 .fl-table td{ padding:1.8mm 1mm; border-bottom:1px solid #efe6cd; } 135 .fl-table tr:last-child td{ border-bottom:0; } 136 .fl-leg{ color:var(--ink); } 137 .fl-no{ font-weight:700; color:var(--olive); text-align:center; } 138 .fl-t{ text-align:center; color:var(--body); } 139 140 /* ---------- Visa cards ---------- */ 141 .visa-cards{ display:flex; gap:6mm; margin-top:2mm; } 142 .visa-card{ flex:1; border:1px solid var(--line); border-radius:6px; padding:2.8mm 4mm; 143 background:linear-gradient(180deg,#fff,#fbf4e1); break-inside:avoid; } 144 .vc-lab{ font-family:${d}; font-size:8pt; letter-spacing:${i==="ar"?"0":".5px"}; 145 text-transform:${i==="ar"?"none":"uppercase"}; color:var(--gold-d); margin-bottom:1mm; } 146 .vc-val{ font-size:11pt; color:var(--ink); font-weight:700; } 147 .vc-txt{ font-size:8.8pt; color:var(--body); } 148 149 /* ---------- Lists ---------- */ 150 ul{ list-style:none; margin-top:1mm; } 151 ul li{ position:relative; padding-${i==="ar"?"right":"left"}:16px; margin-bottom:3px; 152 font-size:9pt; break-inside:avoid; } 153 ul li:before{ content:"â"; color:var(--gold); font-size:7pt; position:absolute; 154 ${i==="ar"?"right":"left"}:0; top:3px; } 155 .twocol{ display:flex; gap:8mm; } 156 .twocol > div{ flex:1; } 157 .important-box{ border:1.4px solid var(--gold); background:#fcf6e3; border-radius:8px; 158 padding:4mm 5mm; break-inside:avoid; } 159 .important-box h3{ color:var(--olive); font-size:13pt; margin-bottom:1mm; } 160 .important-box li:before{ content:"!"; font-family:'Poppins',sans-serif; font-weight:700; font-size:8pt; color:var(--gold-d); } 161 .notes-h3{ color:var(--olive); font-size:13pt; margin-bottom:1mm; } 162 163 /* ---------- Footer ---------- */ 164 .footer{ background:linear-gradient(135deg,var(--olive),var(--ink)); color:#e9e2cf; 165 padding:4mm 12mm; display:flex; justify-content:space-between; align-items:center; gap:5mm; 166 font-family:${d}; font-size:8pt; margin-top:3mm; break-inside:avoid; } 167 .footer .tag{ color:var(--gold-l); font-weight:600; } 168 .ibrix-signature{ margin-top:1mm; font-family:'Manrope',sans-serif; font-size:6.5pt; color:rgba(231,209,150,.58); } 169 .ibrix-signature a{ color:var(--gold-l); text-decoration:none; font-weight:700; } 170 bdi{ unicode-bidi:isolate; } 171 bdi[dir="ltr"],.latin{ direction:ltr; unicode-bidi:isolate; font-family:'Manrope','Segoe UI',Arial,sans-serif; } 172 @media print{ .sheet{ box-shadow:none; } .lux-table thead{display:table-header-group} } 173</style></head> 174<body> 175 <div class="sheet"> 176 <!-- Cover --> 177 <div class="cover"> 178 <div class="frame"></div> 179 <div class="logo-badge"><img class="logo" src="/manus-storage/ibrix-logo_1fc1d3d8.png" alt="IBRIX"/></div> 180 <div class="bism">${e(t.bismillah)}</div> 181 <div class="kicker">${e(t.program)}</div> 182 <h1>${h}</h1> 183 ${f?`<div class="chip">${f}</div>`:""} 184 <div class="welcome">${e(t.welcome)}</div> 185 <div class="labbayk">${e(t.labbayk)}</div> 186 </div> 187 188 <div class="body"> 189 <div class="cards"> 190 <div class="card"><div class="lab">${e(t.duration)}</div><div class="val">${n(o.durationDays)} / ${n(o.durationNights)}</div><div class="sub">${e(t.days)} / ${e(t.nights)}</div></div> 191 <div class="card"><div class="lab">${e(t.priceFrom)}</div><div class="val">${o.price>0?n(`${o.price} ${I}`):e(t.onRequest)}</div>${o.price>0?`<div class="sub">${e(t.perPerson)}</div>`:""}</div> 192 </div> 193 194 ${T()} 195 196 ${z?`<h2 class="sec">${e(t.overview)}</h2><p class="lead">${z}</p>`:""} 197 198 ${v?`<h2 class="sec">${e(t.hotelsTitle)}</h2>${v}`:""} 199 200 ${u?`<h2 class="sec">${e(t.flights)}</h2>${u}`:""} 201 202 ${N} 203 204 ${E.length?`<h2 class="sec">${e(t.documents)}</h2><ul>${k(E)}</ul>`:""} 205 206 ${y.length||w.length?`${T()}<div class="twocol"> 207 ${y.length?`<div><h3 class="notes-h3">${e(t.notes)}</h3><ul>${k(y)}</ul></div>`:""} 208 ${w.length?`<div class="important-box"><h3>${e(t.important)}</h3><ul>${k(w,"imp")}</ul></div>`:""} 209 </div>`:""} 210 </div> 211 212 <div class="footer">
213 <span><span class="tag">${e(t.tagline)}</span><span class="ibrix-signature"><a href="https://www.ibrix.digital">IBRIX</a> · www.ibrix.digital</span></span> 214 <span>${e(t.booking)}: <span class="latin">${n(D)} · ${n("[email protected]")} · ${n("www.ibrix.digital")}</span></span> 215 </div> 216 </div> 217 <script> 218 window.onload = function(){ 219 setTimeout(function(){ window.focus(); window.print(); }, 700); 220 }; 221 window.onafterprint = function(){ setTimeout(function(){ window.close(); }, 200); }; 222 <\/script> 223</body></html>`}function X(o,i="en"){const t=P(o,i),l=window.open("","_blank","width=900,height=1100");return l?(l.document.open(),l.document.write(t),l.document.close(),!0):!1}export{X as openUmrahPrint};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.