/* ============================================================
   ZL TOURS — Homepage design layer  (css/zl-home.css)
   Reference-matched (zl-homepage_89) on IBM Plex + zl-design-system tokens.
   Scoped under .zl-home (added to <body>) so it NEVER leaks to other pages.
   Loaded LAST so it wins over style.css for homepage sections only.
   Wiring/perf untouched: video hero, #packagesGrid/.package-card, loaders,
   modals, events all preserved — this file only restyles + lays out.
   ============================================================ */

/* ── section-head primitives ── */
.zl-home .zh-section{ padding:clamp(48px,6vw,84px) 0; position:relative; }
.zl-home .zh-container{ max-width:var(--zl-container); margin-inline:auto; padding-inline:24px; box-sizing:border-box; }
.zl-home .zh-head{ margin-bottom:clamp(26px,3.4vw,40px); }
.zl-home .zh-eyebrow{ display:inline-flex; align-items:center; gap:9px; color:var(--zl-brown); font-weight:700; font-size:.9rem; margin-bottom:13px; }
.zl-home .zh-eyebrow::before{ content:""; width:34px; height:3px; border-radius:3px; background:linear-gradient(90deg,#996230,#E6B563,#00ABC7,#004F6C); }
.zl-home .zh-title{ font-size:clamp(1.6rem,3.4vw,2.55rem); font-weight:800; line-height:1.22; letter-spacing:-.01em; color:#141b1f; margin:0; }
.zl-home .zh-title .hl{ color:var(--zl-cyan-ink); }
.zl-home .zh-sub{ color:var(--zl-muted); font-size:1.04rem; max-width:640px; margin:12px 0 0; line-height:1.7; }
.zl-home .zh-mtn{ position:relative; background:var(--zl-sand); }

/* [2026-08-06] .zh-imgcard (the shared full-bleed card DNA) removed with its last
   user, the «اختر نوع تجربتك» mosaic. «الجنوب كما يستحق أن يُعاش» ships its own
   panel styles in css/zl-south-worlds.css. */

/* ══════════ HERO — reference-model (light/warm + triangle base) ══════════
   Keeps #heroVideo untouched. Only the OVERLAY + type + decorative base change:
   teal at the top (navbar + headline legibility) warming to gold at the foot, and
   lighter than before so the video reads through — the model's bright, warm mood. */
/* Top padding is the MEASURED header stack (--zl-header-h, published live by
   unified-header.js: promo marquee + Asiri band + navbar) + breathing room —
   not a guess. The fixed 126px predated the ZL10 marquee (2026-08-10): the
   taller stack slid over the headline's first line on laptops. Same fix the
   phone rule below already had. */
.zl-home #hero.hero{ position:relative; overflow:hidden; display:flex;
  /* `safe center`: centred while there is room, but NEVER overflowing upward —
     plain `center` let the content rise INTO the top padding on short laptops
     (1280×720 measured −8px), putting the headline back under the navbar. */
  align-items:safe center;
  height:auto;
  /* قياس 2026-08-22: الفيديو 1280×720 (نسبة 1.778) والحاوية كانت 690px ثابتة،
     فنسبة الهيرو على 1920 = 2.78 ⇒ `cover` يكبّر 1.575× ويبتلع **36.1%**
     من ارتفاع المشهد (410px)، وعلى 1440 = 14.8%، وعلى 1280 = 4.4%.
     القص دالة في العرض لا الارتفاع: crop% = 1 − 1.778·h/w؛ لذلك العلاج
     أن ينمو الارتفاع مع العرض (52vw ⇒ قص ثابت ≈ 7.5%) بسقف 92vh حتى لا
     يبتلع الهيرو الشاشة، **وأرضية هي قيمة اليوم نفسها** min(86vh,690px)
     فلا يقصُر الهيرو عن وضعه الحالي في أي مقاس (1280 وما دونه لا يتغيّر إطلاقاً). */
  min-height:clamp(min(86vh,690px), 52vw, 92vh);
  padding:calc(var(--zl-header-h,126px) + 30px) 0 78px; }
.zl-home #hero .hero-video{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0;
  /* `cover` باقٍ (لا أشرطة سوداء)، لكن مركز القص يتبع المشهد لا منتصف
     الإطار: قيس على مشهدي المقطع أن الموضوع (القارب في المنغروف، والمتسلّق
     في الوادي) يقع عند ~65–68% من ارتفاع الإطار، فالإزاحة إلى 58% تبقيه
     داخل النافذة وتقتطع من السماء قليلاً بدل قطع الموضوع من أسفل. */
  object-position:50% 58%; }
/* NO veil — the video shows at its own colour (owner 2026-08-06: «شيل الشفافية»).
   This used to stack THREE washes over the footage: a two-gradient teal/brown
   tint, a 26% flat fill, and a sand fade that fogged the whole lower half.
   Deleted, not overridden. The headline keeps its per-element text-shadow, and
   the phone view has its own thin text-reading gradient in zl-hero-v2.css. */
/* The overlay — NOT #hero — is the box that actually lays the content out
   (style.css centres .hero-content inside this absolute inset:0 flex). So the
   header clearance must live HERE: #hero's own padding pads an empty flex row
   (its only in-flow child is a <script>), which is why the headline kept
   sliding under the taller ZL10 header on laptops. `safe center` keeps the
   vertical centring on tall screens but never lets content rise into the
   reserved header band on short ones (1280×720 was −8px). */
.zl-home #hero .hero-overlay{ position:absolute; inset:0; z-index:1; background:none;
  align-items:safe center;
  /* المحتوى يُتوسّط بين حشوتي الغلاف، فكلما طال الهيرو اتسع أسفله فراغ.
     الزيادة أدناه تحفظ **نفس النسبة الحالية**: أسفل الكتلة عند ~85% من ارتفاع
     الهيرو (مقيس اليوم 589/690)، فيبقى شريط البحث في الجزء السفلي ولا تتسع
     المسافة بين العنوان والبحث (الفجوات الداخلية لم تُمسّ). صفر حتى 1280
     فتخطيط المقاسات الأصغر يبقى كما هو حرفيّاً. */
  padding-top:calc(var(--zl-header-h,126px) + 22px + clamp(0px, 36.8vw - 488px, 300px));
  padding-bottom:34px;
  overflow:hidden; box-sizing:border-box; }
/* (deleted) Asiri triangle strip — the OLD hero-foot transition. Superseded by
   the single curve on .zsp-sec::before; the two used to paint over each other. */
.zl-home #hero .hero-content{ position:relative; z-index:2; width:100%; max-width:var(--zl-container); margin-inline:auto; padding-inline:24px; box-sizing:border-box; text-align:start; }
.zl-home #hero .hero-content > *{ position:relative; }
/* Headline: warm gold like the model, white supporting line */
/* HERO TYPOGRAPHY FIX (2026-08-22) — سببان قِيسا لا فرضيتان:
   1) `line-height:1.14` أصغر من صندوق المحرف العربي نفسه: قِيس ارتفاع صندوق
      السطر 73px عند خطّ 48.8px، أي **1.496em**. فسطران متتاليان يتداخل
      حبرهما حتمًا — وهذا هو تداخل «التقليدي» مع «للتجارب». 1.5 هو أدنى
      قيمة تُخلي الصندوق بالكامل، والخط والوزن لم يتغيّرا.
   2) `letter-spacing:-.02em` على نصّ عربي متّصل: تضييق التتبّع يزاحم
      وصلات الحروف ولا مبرّر له في العربية أصلًا (قاعدة لاتينية).
   `max-width:20ch` تُبقي الكسر حيث هو: «…التقليدي» / «للتجارب». */
.zl-home #hero h1, .zl-home #hero #heroTitle{ font-size:clamp(1.9rem,4.6vw,3.05rem); font-weight:900; line-height:1.5; letter-spacing:normal; margin:0; max-width:20ch; }
/* ONE gold for the headline. The typewriter writes into .zlh-typed, which is
   the brand gold var(--zl-gold) #E6B563, while this parent was #f1c988 — a
   near-miss that is not a ZL token. The two sat on the same line, so the
   headline showed the word being typed in one gold and the text around it in
   another. Off-brand hex removed; the whole line is now the identity gold. */
.zl-home #hero #heroTitle .zlh-main{ display:block; color:var(--zl-gold,#E6B563); text-shadow:0 2px 24px rgba(6,32,41,.55); }
.zl-home #hero #heroTitle .zlh-sub{ display:block; font-size:.5em; font-weight:600; color:#f3efe6; margin-top:14px; line-height:1.45; text-shadow:0 1px 14px rgba(6,32,41,.5); }
/* the model leads straight with the search bar — hide the secondary CTA row */
.zl-home #hero .hero-cta-row{ display:none!important; }
/* region quick-picks → glass chips */
.zl-home #hero .hero-quick-picks{ display:flex; gap:11px; margin:20px 0 0; flex-wrap:wrap; justify-content:flex-start; }
/* a chip whose region has no experiences is hidden (see the gate in index.html);
   the display:flex below would otherwise beat the [hidden] attribute */
.zl-home #hero .hero-quick-picks a[hidden], .zl-home #hero .hero-quick-picks .hero-pick[hidden]{ display:none!important; }
.zl-home #hero .hero-quick-picks[hidden]{ display:none!important; }
.zl-home #hero .hero-quick-picks a, .zl-home #hero .hero-quick-picks .hero-pick, .zl-home #hero .hero-quick-picks .qp{ display:inline-flex; align-items:center; gap:8px; color:#fff; font-size:.94rem; font-weight:700; background:rgba(255,255,255,.15); border:1px solid rgba(255,255,255,.36); backdrop-filter:blur(7px); -webkit-backdrop-filter:blur(7px); padding:9px 18px; border-radius:var(--zl-radius-pill); text-decoration:none; transition:background .2s,border-color .2s,transform .2s; }
.zl-home #hero .hero-quick-picks a:hover{ background:rgba(0,171,199,.32); border-color:var(--zl-cyan); transform:translateY(-1px); }
.zl-home #hero .hero-quick-picks i, .zl-home #hero .hero-quick-picks svg{ color:var(--zl-gold-soft); }
/* hero search card */
.zl-home .zh-hero-search{ display:grid; grid-template-columns:1.25fr 1.25fr 1fr auto; gap:6px; align-items:stretch;
  background:#fff; border:1px solid var(--zl-line); border-radius:var(--zl-radius-lg); box-shadow:0 26px 54px -24px rgba(6,32,41,.55);
  padding:11px; margin:26px 0 0; max-width:880px; }
.zl-home .zh-hero-search .hs-field{ box-sizing:border-box; padding:9px 16px; border-radius:var(--zl-radius); cursor:pointer; position:relative; transition:background .18s,box-shadow .18s; text-align:start; background:none; border:0; font-family:var(--zl-font); }
.zl-home .zh-hero-search .hs-field:hover{ background:var(--zl-sand); }
.zl-home .zh-hero-search .hs-field-wrap{ position:relative; }
.zl-home .zh-hero-search .hs-field-wrap .hs-field{ width:100%; }
.zl-home .zh-hero-search .hs-field-wrap + .hs-field-wrap .hs-field::before{ content:""; position:absolute; inset-inline-start:-3px; top:50%; transform:translateY(-50%); width:1px; height:58%; background:var(--zl-line); }
/* active field: inset ring only (box-sizing + INSET shadow ⇒ zero layout shift —
   the field never grows, so neighbouring fields, dividers and the button never move). */
.zl-home .zh-hero-search .hs-field.hs-open{ background:var(--zl-sand); box-shadow:inset 0 0 0 2px var(--zl-cyan); }
.zl-home .zh-hero-search .hs-lbl{ display:flex; align-items:center; gap:7px; font-size:.74rem; color:var(--zl-muted); font-weight:700; margin-bottom:3px; }
.zl-home .zh-hero-search .hs-lbl i{ color:var(--zl-cyan); }
.zl-home .zh-hero-search .hs-val{ font-size:.98rem; font-weight:500; color:#5A6B72; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.zl-home .zh-hero-search .hs-field.hs-set .hs-val{ color:#0E2F3D; font-weight:700; }
.zl-home .zh-hero-search .hs-btn{ box-sizing:border-box; background:#996230; color:#fff; border:0; border-radius:var(--zl-radius); min-height:58px; padding:0 24px; font-weight:700; font-size:1rem; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:9px; font-family:var(--zl-font); transition:filter .2s,background .3s; }
.zl-home .zh-hero-search .hs-btn:hover{ filter:brightness(.94); }
/* «متى؟» = تقويم أصلي: input شفاف يغطّي الخانة (RTL/LTR سواء)، وزر مسح صغير
   يظهر فقط بعد اختيار تاريخ — لا شكل جديد في الهيرو. */
/* «متى؟» صار قائمة (أي وقت · هذا الويكند · اختر التاريخ)، فالإدخال الشفاف
   لم يعد طبقة النقر: كان يغطّي الحقل فيبتلع الضغطة ويفتح تقويم الجهاز قبل
   أن تظهر القائمة (قِيس في Chrome). يبقى موجودًا ليُفتح برمجيًا من خيار
   «اختر التاريخ» عبر showPicker()، وبلا التقاط للنقر. */
.zl-home .zh-hero-search .hs-date-native{ position:absolute; inset:0; width:100%; height:100%; opacity:0; margin:0; padding:0; border:0; background:transparent; pointer-events:none; -webkit-appearance:none; appearance:none; z-index:2; font-size:16px; }
.zl-home .zh-hero-search .hs-date-native::-webkit-calendar-picker-indicator{ position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; }
.zl-home .zh-hero-search .hs-when-x[hidden]{ display:none; }
.zl-home .zh-hero-search .hs-when-x{ position:absolute; inset-block-start:50%; inset-inline-end:8px; transform:translateY(-50%); z-index:3; width:22px; height:22px; line-height:1; border:0; border-radius:50%; background:var(--zl-sand); color:var(--zl-muted); font-size:15px; cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0; }
.zl-home .zh-hero-search .hs-when-x:hover{ background:#e6ded0; color:#0E2F3D; }
.zl-home .zh-hero-search .hs-when-wrap:focus-within .hs-field{ background:var(--zl-sand); box-shadow:inset 0 0 0 2px var(--zl-cyan); }
.zl-home .zh-hero-search .hs-field:focus-visible, .zl-home .zh-hero-search .hs-btn:focus-visible{ outline:2px solid var(--zl-cyan); outline-offset:-2px; }
/* ── hero search dropdown — SHARED popover portaled to <body> (id #zlhHeroPop),
   OUTSIDE #hero, so #hero{overflow:hidden} can't clip it and it never overlaps
   the pay badges or the mountain pattern. Positioned in JS via getBoundingClientRect
   (position:fixed), flips up when short on room, recalculated on scroll/resize.
   Layer system → video 0 · overlay 1 · content 2 · badges/pattern 4 · POP 990 · navbar 1000. ── */
.zlh-pop{ position:fixed; z-index:990; box-sizing:border-box; background:#fff; border:1px solid var(--zl-line,#e4ddcf); border-radius:var(--zl-radius-lg,18px); box-shadow:0 26px 56px -18px rgba(6,32,41,.5); padding:7px 7px 9px; overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; font-family:var(--zl-font,'Tajawal',sans-serif); animation:zlhPopIn .15s ease; scrollbar-width:thin; scrollbar-color:rgba(6,32,41,.28) transparent; }
.zlh-pop.up{ animation:zlhPopUp .15s ease; }
@keyframes zlhPopIn{ from{ opacity:0; transform:translateY(-6px); } to{ opacity:1; transform:none; } }
@keyframes zlhPopUp{ from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:none; } }
.zlh-pop::-webkit-scrollbar{ width:9px; }
.zlh-pop::-webkit-scrollbar-track{ background:transparent; }
.zlh-pop::-webkit-scrollbar-thumb{ background:rgba(6,32,41,.2); border-radius:9px; border:3px solid #fff; }
.zlh-pop .hs-opt{ display:flex; align-items:center; justify-content:space-between; gap:10px; width:100%; text-align:start; background:none; border:0; border-radius:var(--zl-radius,14px); padding:11px 13px; font-family:inherit; font-size:.95rem; font-weight:600; color:#2b3a3f; cursor:pointer; transition:background .15s; }
.zlh-pop .hs-opt:hover{ background:var(--zl-sand,#f6f1e7); }
.zlh-pop .hs-opt.sel{ background:rgba(0,171,199,.12); color:var(--zl-ink,#173a47); }
.zlh-pop .hs-opt .hs-opt-n{ flex:none; font-size:.76rem; font-weight:800; color:#fff; background:var(--zl-cyan,#00abc7); min-width:22px; height:22px; padding:0 7px; border-radius:11px; display:inline-flex; align-items:center; justify-content:center; }
.zlh-pop .hs-date-wrap{ padding:9px 6px 4px; border-top:1px solid var(--zl-line,#e4ddcf); margin-top:5px; }
.zlh-pop .hs-date-input{ box-sizing:border-box; width:100%; padding:10px 12px; border:1px solid var(--zl-line,#e4ddcf); border-radius:var(--zl-radius,12px); font-family:inherit; font-size:.95rem; color:#2b3a3f; background:#fff; }
@media (max-width:640px){ .zlh-pop .hs-opt{ padding:13px 14px; font-size:1rem; } }
/* ── hero search button states ── */
.zl-home .zh-hero-search .hs-btn.is-loading{ pointer-events:none; opacity:.9; }
.zl-home .zh-hero-search .hs-btn.is-loading i{ animation:hsSpin .7s linear infinite; }
@keyframes hsSpin{ to{ transform:rotate(360deg); } }
.zl-home .zh-hero-search .hs-btn.is-ok{ background:linear-gradient(135deg,#2f9e6f,#1f7d55)!important; }
/* ── smart no-results state (destination/type/date search) ── */
.pkg-empty-search{ text-align:center; padding:52px 18px; font-family:var(--zl-font,'Tajawal',sans-serif); }
.pkg-empty-search > i{ font-size:2rem; color:var(--zl-gold,#c9a84c); margin-bottom:12px; }
.pkg-empty-search .pkg-empty-msg{ font-size:1.08rem; font-weight:700; color:#2b3a3f; max-width:540px; margin:0 auto 16px; line-height:1.6; }
.pkg-empty-search .pkg-alt-row{ display:flex; flex-wrap:wrap; gap:9px; justify-content:center; max-width:580px; margin:0 auto; }
.pkg-empty-search .pkg-alt-chip{ background:#fff; border:1px solid var(--zl-line,#e4ddcf); border-radius:999px; padding:9px 18px; font-family:inherit; font-size:.92rem; font-weight:700; color:#2b3a3f; cursor:pointer; transition:background .15s,border-color .15s,transform .15s; }
.pkg-empty-search .pkg-alt-chip:hover{ background:var(--zl-sand,#f6f1e7); border-color:var(--zl-cyan,#00abc7); transform:translateY(-1px); }
.pkg-empty-search .pkg-empty-or{ margin:22px 0 15px; color:#9aa8a3; font-size:.85rem; font-weight:600; }
.pkg-empty-search .pkg-empty-custom{ display:inline-flex; align-items:center; gap:9px; text-decoration:none; border:1.5px solid var(--zl-brown,#996230); color:var(--zl-brown,#996230); background:transparent; border-radius:var(--zl-radius,14px); padding:11px 24px; font-weight:800; font-size:.98rem; transition:background .2s,color .2s; }
.pkg-empty-search .pkg-empty-custom:hover{ background:var(--zl-brown,#996230); color:#fff; }
/* hero pay badges sit DIRECTLY UNDER the hero search box (owner request) — they
   are now placed right after .zh-hero-search in the markup, so they simply flow
   there; the old bottom:46px nudge (legacy: they used to be re-parented to the
   hero bottom) is cancelled. */
/* breathing room under the search (it was flush/glued at 0px) + line the row up
   with the search box's INNER content edge (12px in from its outer edge). */
.zl-home #hero .hero-pay-badges{ position:relative!important; bottom:auto!important; margin-top:22px!important; z-index:4; display:flex; align-items:center; justify-content:flex-start; gap:10px; flex-wrap:wrap; padding-inline-start:14px; }
/* logos sit bare on the hero photo — no white pill/chip behind them */
.zl-home #hero .hero-pay-badges .zl-pay-logo{ background:none!important; border:0!important; border-radius:0!important; padding:0!important; box-shadow:none!important; display:inline-flex; align-items:center; justify-content:center; }
.zl-home #hero .hero-pay-badges .zl-pay-logo img{ height:19px!important; width:auto; display:block; }
/* «قسّطها أو ادفعها كاملة» like the model — Arabic only, so EN never shows mixed text */
html[lang="ar"] .zl-home #hero .hero-pay-badges::before{ content:"قسّطها أو ادفعها كاملة"; color:#f5efe2; font-weight:700; font-size:.86rem; margin-inline-end:2px; text-shadow:0 1px 10px rgba(6,32,41,.6); white-space:nowrap; }

/* logged-in account name must stay dark/readable on the light navbar
   (auth.js renders `.nav-user-avatar` with text meant for the old dark navbar). */
.zl-home #navbar .nav-user-avatar,
.zl-home #navbar .nav-user-avatar span:not(.avatar-initials){ color:#173a47!important; }
.zl-home #hero .hero-buttons{ display:flex; gap:12px; flex-wrap:wrap; margin-top:22px; }
.zl-home #hero .hero-buttons a, .zl-home #hero .hero-buttons button{ font-family:var(--zl-font); }

/* ══════════ RECOMMENDATIONS ══════════ */
.zl-home .zh-reco-sec{ padding:clamp(40px,5vw,64px) 0; }
.zl-home .zh-head-center{ text-align:center; max-width:640px; margin-inline:auto; }
.zl-home .zh-reco-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:18px; }
/* card: full-bleed real image + dark gradient overlay + bottom-anchored content */
.zl-home .zh-reco{ position:relative; overflow:hidden; min-height:300px; display:flex; flex-direction:column; justify-content:flex-end; padding:22px; color:#fff; text-decoration:none; background:#0a2530; border-radius:var(--zl-radius-lg); box-shadow:0 12px 32px -14px rgba(6,32,41,.45); transition:transform .3s var(--zl-ease,ease), box-shadow .3s; }
.zl-home .zh-reco:hover{ transform:translateY(-5px); box-shadow:0 24px 50px -18px rgba(6,32,41,.55); }
.zl-home .zh-reco:focus-visible{ outline:2px solid var(--zl-gold); outline-offset:3px; }
/* layering (all non-negative → reliable paint): image 0 · overlay 1 · content 2 */
.zl-home .zh-reco-img{ position:absolute; inset:0; background-size:cover; background-position:center; background-repeat:no-repeat; background-color:#0a2530; z-index:0; transition:transform .5s ease; }
.zl-home .zh-reco:hover .zh-reco-img{ transform:scale(1.06); }
.zl-home .zh-reco::after{ content:""; position:absolute; inset:0; z-index:1; background:linear-gradient(to top,rgba(6,28,38,.92) 0%,rgba(6,28,38,.22) 55%,rgba(6,28,38,.45) 100%); }
.zl-home .zh-reco > *:not(.zh-reco-img){ position:relative; z-index:2; }
.zl-home .zh-reco .zh-go svg{ width:15px; height:15px; }
.zl-home .zh-reco .zh-tag{ align-self:flex-start; background:rgba(255,255,255,.2); border:1px solid rgba(255,255,255,.4); backdrop-filter:blur(4px); padding:6px 13px; border-radius:var(--zl-radius-pill); font-size:.77rem; font-weight:800; margin-bottom:auto; }
.zl-home .zh-reco h3{ font-size:1.32rem; font-weight:800; margin:16px 0 0; line-height:1.3; }
.zl-home .zh-reco p{ font-size:.9rem; color:rgba(255,255,255,.92); margin:8px 0 0; line-height:1.6; }
.zl-home .zh-reco .zh-go{ display:inline-flex; align-items:center; gap:6px; margin-top:15px; font-weight:800; font-size:.92rem; color:var(--zl-gold); }

/* [2026-08-06] «CATEGORIES mosaic» (#zhCats) deleted — superseded by
   «الجنوب كما يستحق أن يُعاش». */

/* ══════════ REGIONS carousel ══════════ */
.zl-home .zh-arrow{ width:50px; height:50px; border-radius:50%; border:1.5px solid var(--zl-line); background:#fff; color:var(--zl-ink); cursor:pointer; display:grid; place-items:center; box-shadow:var(--zl-shadow-sm); transition:.2s var(--zl-ease); }
.zl-home .zh-arrow:hover{ background:var(--zl-cyan); color:#fff; border-color:var(--zl-cyan); transform:translateY(-2px); }

/* ══════════ MARKETPLACE restyle (keeps .package-card DOM + wiring) ══════════
   Elevate the existing marketplace cards toward the reference aesthetic. */
.zl-home #packages{ background:var(--zl-sand); }
.zl-home #zlMallBar{ border-radius:var(--zl-radius); }
.zl-home #packagesGrid .package-card{ border-radius:var(--zl-radius)!important; border:1px solid var(--zl-line)!important; box-shadow:var(--zl-shadow-sm)!important; transition:transform .28s var(--zl-ease),box-shadow .28s var(--zl-ease)!important; overflow:hidden; }
.zl-home #packagesGrid .package-card:hover{ transform:translateY(-5px); box-shadow:var(--zl-shadow)!important; }
.zl-home #packagesGrid .package-card .btn-book{ background:linear-gradient(135deg,var(--zl-gold),var(--zl-gold-strong))!important; color:#3a2b0e!important; border-radius:var(--zl-radius-pill)!important; font-family:var(--zl-font)!important; }
.zl-home .zh-builder-cta{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; background:linear-gradient(140deg,var(--zl-sea-deeper),var(--zl-sea-deep)); color:#fff; border-radius:var(--zl-radius-lg); padding:22px 26px; margin-bottom:24px; box-shadow:var(--zl-shadow); }
.zl-home .zh-builder-cta .bc-txt h3{ margin:0 0 4px; font-size:1.2rem; font-weight:800; display:flex; align-items:center; gap:9px; }
.zl-home .zh-builder-cta .bc-txt h3 i{ color:var(--zl-gold); }
.zl-home .zh-builder-cta .bc-txt p{ margin:0; font-size:.9rem; opacity:.85; }

/* ══════════ MAP section (preview → real /map) ══════════ */
/* [2026-08-07] Map section fallback (pre-upgrade / no-JS only — zl-map-embed.js
   replaces this node with the live map). The old deep-petrol gradient slab is
   deleted, not overridden: the shell is sand like the live map's, so there is no
   flash of a dark block while the embed boots. */
.zl-home .zh-map-sec{ background:var(--zl-sand); position:relative; }
/* بانر الخريطة الخفيف — يفتح صفحة /map الكاملة بدل حقن خريطة Leaflet الثقيلة على
   اللاندنق (كانت تُثقل التمرير). طلب المالكة 2026-08-08. */
.zl-home .zh-mapbanner{ position:relative; overflow:hidden; text-decoration:none;
  display:flex; align-items:center; gap:clamp(16px,2.4vw,30px);
  padding:clamp(22px,3.4vw,40px) clamp(20px,3.2vw,46px);
  border-radius:clamp(20px,2vw,28px);
  background:linear-gradient(120deg,#0E2F3D 0%,#004F6C 100%);
  box-shadow:0 26px 60px -30px rgba(6,32,41,.7);
  transition:transform .28s var(--zl-ease), box-shadow .28s var(--zl-ease); }
.zl-home .zh-mapbanner:hover{ transform:translateY(-3px); box-shadow:0 34px 72px -30px rgba(6,32,41,.8); }
.zl-home .zh-mapbanner:focus-visible{ outline:2px solid var(--zl-gold); outline-offset:3px; }
/* خطوط تضاريس ذهبية خفيفة جدًا — تربط البانر بهوية الخريطة */
.zl-home .zh-mapbanner::before{ content:""; position:absolute; inset:0; pointer-events:none; opacity:.55;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 220' preserveAspectRatio='none'%3E%3Cg fill='none' stroke='rgba(230,181,99,.15)' stroke-width='1.2'%3E%3Cpath d='M0 44 C 420 20 940 66 1440 38'/%3E%3Cpath d='M0 88 C 420 64 940 110 1440 82'/%3E%3Cpath d='M0 132 C 420 108 940 154 1440 126'/%3E%3Cpath d='M0 176 C 420 152 940 198 1440 170'/%3E%3C/g%3E%3C/svg%3E") center/cover no-repeat; }
.zl-home .zh-mb-icon{ position:relative; flex:0 0 auto; width:clamp(52px,5vw,66px); height:clamp(52px,5vw,66px);
  border-radius:50%; display:grid; place-items:center; color:var(--zl-gold); font-size:clamp(1.3rem,2vw,1.65rem);
  background:rgba(230,181,99,.15); border:1px solid rgba(230,181,99,.42); }
/* نص بانر الخريطة في المنتصف — طلب المالكة 2026-08-09 (مثل رأس صفحة /map) */
.zl-home .zh-mb-text{ position:relative; flex:1 1 auto; min-width:0; text-align:center; }
.zl-home .zh-mb-title{ margin:0; color:#fff; font-weight:800; line-height:1.25; font-size:clamp(1.35rem,2.5vw,2rem); letter-spacing:-.01em; }
.zl-home .zh-mb-title .hl{ color:var(--zl-gold); }
/* 62ch (was 52ch): the 2026-08-09 map copy is a full sentence — the wider
   measure keeps it to two calm lines instead of three ragged ones. */
.zl-home .zh-mb-sub{ display:block; margin:7px auto 0; color:rgba(243,239,230,.82); line-height:1.6; font-size:clamp(.9rem,1.3vw,1.05rem); max-width:62ch; }
.zl-home .zh-mb-btn{ position:relative; flex:0 0 auto; display:inline-flex; align-items:center; gap:9px; white-space:nowrap;
  background:linear-gradient(135deg,var(--zl-gold),var(--zl-gold-strong)); color:#3a2b0e;
  border-radius:var(--zl-radius-pill); padding:14px 28px; font-weight:800; font-size:1.02rem;
  box-shadow:0 12px 28px -10px rgba(230,181,99,.6); transition:transform .2s var(--zl-ease), box-shadow .2s; }
.zl-home .zh-mapbanner:hover .zh-mb-btn{ transform:translateX(-4px); box-shadow:0 16px 32px -10px rgba(230,181,99,.72); }
[dir="ltr"] .zl-home .zh-mapbanner:hover .zh-mb-btn{ transform:translateX(4px); }
@media (max-width:768px){
  .zl-home .zh-mapbanner{ flex-direction:column; text-align:center; align-items:center; gap:16px; padding:28px 22px; }
  .zl-home .zh-mb-sub{ margin-inline:auto; }
  .zl-home .zh-mb-btn{ width:100%; justify-content:center; }
}

/* ══════════ REVIEWS / TRUST restyle ══════════ */
.zl-home #zlTestimonials, .zl-home #zlTrustStats{ background:var(--zl-sand-2); }
.zl-home #zlTestiGrid .zl-testi-card, .zl-home #zlTestiGrid > *{ border-radius:var(--zl-radius); }

/* ══════════ PARTNERS restyle ══════════ */
.zl-home #partners{ text-align:center; }

/* ══════════ RESPONSIVE ══════════ */
@media (max-width:1024px){
  .zl-home .zh-reco-grid{ grid-template-columns:repeat(2,1fr); }
  .zl-home .zh-hero-search{ grid-template-columns:1fr 1fr; }
  .zl-home .zh-hero-search .hs-btn{ grid-column:span 2; }
}
@media (max-width:768px){
  /* Clear the REAL header stack, never a guess. The old `padding:112px` was a
     fixed number that outranked hero-v2's header-aware rule (this selector is
     .class #id.class, v2's is html.class #id), so on any phone where the promo
     banner wrapped to two lines the navbar grew past 112px and sat on top of the
     headline — the clipped title. --zl-header-h is published by
     unified-header.js from #navbar's own rendered height (banner + safe area
     included) and re-measured on every change, so this now tracks it. */
  .zl-home #hero.hero{ min-height:auto; padding:calc(var(--zl-header-h,132px) + 18px) 0 40px; }
  /* the mobile hero is the separate approved hero-v2 — keep our desktop triangle
     base off mobile so v2 is untouched. */
  .zl-home #hero .hero-quick-picks{ overflow-x:auto; flex-wrap:nowrap; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .zl-home #hero .hero-quick-picks::-webkit-scrollbar{ display:none; }
}
@media (max-width:640px){
  .zl-home .zh-reco-grid{ grid-template-columns:1fr; }
  /* Compact card on phones. Stacked, each of the three rows was carrying the
     desktop's 9px/16px padding plus a 3px label gap — the card ran ~250px and
     ate the hero, leaving the photo as a strip. Tighter rows and a hairline
     between them read as one card, not four stacked buttons, and give the
     image back its share of the screen. */
  .zl-home .zh-hero-search{ grid-template-columns:1fr; gap:0; padding:6px; }
  .zl-home .zh-hero-search .hs-field{ padding:8px 14px; }
  .zl-home .zh-hero-search .hs-lbl{ font-size:.7rem; margin-bottom:1px; }
  .zl-home .zh-hero-search .hs-val{ font-size:.92rem; }
  /* the vertical rule between columns has no meaning once stacked — replace it
     with a horizontal hairline that separates the rows instead */
  .zl-home .zh-hero-search .hs-field-wrap + .hs-field-wrap .hs-field::before{
    inset-inline-start:14px; inset-inline-end:14px; top:0; transform:none;
    width:auto; height:1px; }
  .zl-home .zh-hero-search .hs-btn{ grid-column:span 1; min-height:48px; margin-top:6px; }
}
