/* Depends on tokens.css and .container from base.css (see css.php's $nvFiles
   bundle order: fonts, tokens, base, layout, home) -- reordering that array
   would break this without warning. Homepage sections only; later tasks
   append their own rules here (categories, offers, destinations, why-us). */

/* ── HERO ── */
/* Ported from NiamaVreme.html:259-283, with one deliberate deviation: the
   prototype's .hero-photo is a CSS background div, discovered only after
   this stylesheet parses -- the worst case for LCP. Here it styles a real
   <img> instead (see _hero.php), positioned/sized the same way. */
.hero{background:var(--blue-dk);position:relative;min-height:380px;display:flex;align-items:center}
.hero-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero-bg{position:absolute;inset:0;background:
  radial-gradient(ellipse 70% 80% at 80% 50%, rgba(0,106,204,.35) 0%, transparent 60%),
  radial-gradient(ellipse 50% 60% at 5% 80%, rgba(240,90,0,.12) 0%, transparent 50%),
  linear-gradient(100deg,rgba(0,32,64,.88) 30%,rgba(0,61,122,.55) 100%)}
.hero .container{position:relative;z-index:2;padding-block:40px}
.hero-content{max-width:100%}
.hero h1{font-family:var(--fs);font-size:clamp(1.5rem,2.5vw,2.1rem);color:var(--white);line-height:1.18;margin-bottom:14px;text-wrap:balance}
.hero h1 em{font-style:italic;color:var(--orange)}

.hero-stats{display:flex;gap:32px;flex-wrap:wrap}
.h-stat-val{font-family:var(--fs);font-size:1.7rem;color:var(--white);line-height:1;font-weight:700}
.h-stat-lbl{font-size:.72rem;color:rgba(255,255,255,.5);margin-top:3px;text-transform:uppercase;letter-spacing:.05em}

/* ── HERO SEARCH ── */
.hero-search-card{position:relative;z-index:3;max-width:100%;margin-top:26px}
.hsc-label{display:block;font-size:.8rem;font-weight:700;color:rgba(255,255,255,.7);letter-spacing:.12em;text-transform:uppercase;margin-bottom:12px}
.hsc-row{display:flex;align-items:center;gap:0;background:var(--white);border:none;border-radius:100px;padding:5px 5px 5px 22px;box-shadow:0 10px 34px rgba(0,20,45,.32);transition:box-shadow var(--t)}
.hsc-row:focus-within{box-shadow:0 14px 42px rgba(0,20,45,.42)}
.hsc-ico{display:flex;align-items:center;justify-content:center;color:var(--g400);flex-shrink:0;margin-right:12px}
.hsc-row input{flex:1;min-width:0;border:none;background:none;font-family:var(--f);font-size:1.05rem;color:var(--text);padding:13px 0}
.hsc-row input:focus{outline:none}
.hsc-row input::placeholder{color:var(--g400)}
.hsc-btn{flex-shrink:0;padding:14px 34px;border-radius:100px;background:var(--orange);color:var(--white);font-size:.95rem;font-weight:700;transition:background var(--t)}
.hsc-btn:hover{background:var(--orange-dk)}
.hsc-tags{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:16px}
.hsc-tags-lbl{font-size:.78rem;color:rgba(255,255,255,.5);font-weight:600}
.hsc-tag{display:inline-block;padding:0 0 2px;border:none;border-bottom:1px solid rgba(255,255,255,.3);background:none;font-size:.84rem;font-weight:600;color:rgba(255,255,255,.9);transition:color var(--t),border-color var(--t)}
.hsc-tag:hover{color:var(--white);border-bottom-color:var(--orange)}

/* ── RESPONSIVE ── */
/* Ported from NiamaVreme.html's @media(max-width:768px) block starting
   at line 794 -- hero-related rules only. */
@media(max-width:768px){
	.hero .container{padding-block:32px}
	.hero-content{max-width:100%}
	.hsc-row{flex-wrap:wrap;border-radius:var(--r16);padding:12px}
	.hsc-ico{margin-right:8px}
	.hsc-row input{flex:1 1 auto;padding:8px 0;font-size:1rem}
	.hsc-btn{flex:1 1 100%;margin-top:10px;justify-content:center;border-radius:var(--r12)}
}

/* ── CATEGORIES STRIP ── */
/* Ported from NiamaVreme.html:1254-1319 (dest-strip) and its CSS at
   NiamaVreme.html:311-329. One deviation: the prototype's .dest-card is a
   <div onclick="showPage(...)">; here it's a real <a href> to the filter's
   landing page (site_url($slug), suffixed .html by config's url_suffix --
   see _categories.php), so it works without JS and is a normal link.
   .dest-card-img also gets a flat background colour as a fallback for when
   the filter's image file doesn't exist on disk yet (see _categories.php's
   file_exists() guard) -- same graceful-degradation approach as .hero. */
.section{padding:52px 0}
.section-alt{background:var(--off)}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:24px}
.sec-title{font-family:var(--fs);font-size:1.55rem;font-weight:700;color:var(--text)}

/* gap and snapping match the reviews rail (.rv-row in reviews.css) so the two
   scrolling rows on this page read as one component seen twice. `mandatory`
   overrides the `x proximity` that [data-hscroll] sets in base.css -- equal
   specificity, and home.css is emitted after base.css in every bundle. */
.dest-strip{display:flex;gap:12px;overflow-x:auto;scrollbar-width:none;padding-bottom:4px;scroll-snap-type:x mandatory}
.dest-strip::-webkit-scrollbar{display:none}
/* Below 768px .container is padding-bound at 20px, so the strip stopped 20px
   short of the screen: the peeking card was clipped INSIDE the page margin
   while the reviews rail (full-bleed) ran its cards off the edge. The negative
   margin cancels the container's padding and the equal padding puts the content
   back, so the first card does not move -- only the scroll port grows to the
   full width.

   scroll-padding-inline is what makes the inset survive scrolling:
   scroll-snap-align aligns to the SCROLL PORT, not the padding box, so without
   it the first card snaps flush to 0 on the way back. Same trap documented at
   .rv-row. */
@media(max-width:768px){
	.dest-strip{
		--rail-inset:20px;
		gap:18px;
		margin-inline:calc(var(--rail-inset) * -1);
		padding-inline:var(--rail-inset);
		scroll-padding-inline:var(--rail-inset);
	}
}
/* No edge fade on a desktop strip. hscroll.js still tracks .can-l/.can-r (the
   row is genuinely scrollable when there are enough categories), but the mask
   is a phone affordance: a mouse user gets no benefit from a faded last card
   and reads it as a rendering fault. The 18px gap above is why this became
   visible -- seven 160px cards plus 12px gaps measure 1192 inside a 1200px
   container and do not overflow at all, while 18px gaps measure 1228 and did.
   Keeping 12px on desktop restores the no-overflow fit; this rule is the guard
   for when an eighth category is added and it overflows regardless.
   Needs .dest-strip.can-* (0,2,0) to outrank [data-hscroll].can-* in base.css;
   the .can-l.can-r pair ties on specificity and is settled by source order. */
@media(min-width:769px){
	.dest-strip.can-l,.dest-strip.can-r,.dest-strip.can-l.can-r{
		-webkit-mask-image:none;mask-image:none;
	}
}
.dest-card{flex-shrink:0;width:160px;border-radius:var(--r12);overflow:hidden;cursor:pointer;position:relative;display:block;text-decoration:none;color:inherit;transition:transform var(--t),box-shadow var(--t)}
.dest-card:hover{transform:translateY(-3px);box-shadow:var(--sh2)}
/* The label and the count share the bottom of the card as a FLEX ROW, not as
   two independent absolutes. Absolutely positioned (left:10px / right:10px)
   they knew nothing about each other, so a long title simply ran underneath
   the badge -- "Олимпийска ривиера" put its last three letters behind the
   count. Only .dest-card-img's img and overlay are absolute now, so they stay
   out of flow and these two are its only flex children: the label takes the
   space it needs and wraps, margin-left:auto pins the badge right, and
   flex-shrink:0 stops a three-digit count being squeezed. The 10px padding
   reproduces the old offsets exactly. */
.dest-card-img{height:110px;position:relative;overflow:hidden;display:flex;align-items:flex-end;gap:8px;padding:10px;background:var(--blue-lt)}
.dest-card-img img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.dest-card-img-overlay{position:absolute;inset:0;background:linear-gradient(to top,rgba(0,30,60,.55) 0%,transparent 55%)}
/* position:relative only to keep both above the absolute overlay. */
.dest-label{position:relative;z-index:1;min-width:0;color:var(--white);font-size:.82rem;font-weight:700;text-shadow:0 1px 4px rgba(0,0,0,.4)}
.dest-count{position:relative;z-index:1;margin-left:auto;flex-shrink:0;background:var(--orange);color:var(--white);font-size:.76rem;font-weight:700;padding:3px 9px;border-radius:100px}

/* ── TRAVEL TYPES — light editorial cards ── */
/* Ported from NiamaVreme.html:1636-1674 (type-grid) and its CSS at
   NiamaVreme.html:454-472, with .type-ico (the sun/family/heart SVG badge)
   dropped -- admins cannot author SVG and per-icon uploads reintroduce a
   request per card, so the badge was cut by design decision. Its removal
   also drops the negative-top-margin trick that gave the card body
   breathing room under the photo (.type-ico had margin:-26px 0 14px), so
   .type-body gets padding-top restored directly instead. Same real-<a>
   deviation as .dest-card above. */
.sec-eyebrow{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--orange);margin-bottom:9px}
.sec-lead{font-size:.95rem;color:var(--muted);line-height:1.65;max-width:520px;margin:10px auto 0}
.type-band{background:linear-gradient(180deg,#eef4fa 0%,#f7fafd 100%);border-block:1px solid var(--g200)}
.type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.type-card{position:relative;border-radius:var(--r16);overflow:hidden;cursor:pointer;background:var(--white);border:1px solid var(--g200);box-shadow:var(--sh1);display:flex;flex-direction:column;min-height:0;text-decoration:none;color:inherit;transition:transform var(--t),box-shadow var(--t),border-color var(--t)}
.type-card:hover{transform:translateY(-4px);box-shadow:var(--sh2);border-color:var(--blue)}
.type-card:hover .type-img img{transform:scale(1.05)}
.type-img{position:relative;height:172px;overflow:hidden;flex-shrink:0;background:var(--blue-lt)}
.type-img img{width:100%;height:100%;object-fit:cover;transition:transform 600ms cubic-bezier(.2,.6,.2,1)}
.type-img::after{content:'';position:absolute;inset:0;background:linear-gradient(to top,rgba(0,16,36,.3) 0%,transparent 55%)}
.type-body{position:relative;z-index:2;padding:22px;display:flex;flex-direction:column;flex:1}
.type-card h4{font-family:var(--fs);font-size:1.2rem;font-weight:700;color:var(--text);margin-bottom:7px;line-height:1.25}
.type-card p{font-size:.85rem;color:var(--muted);line-height:1.65;margin-bottom:16px;flex:1}
.type-link{display:inline-flex;align-items:center;gap:6px;font-size:.86rem;font-weight:700;color:var(--blue);transition:gap var(--t);align-self:flex-start}
.type-card:hover .type-link{gap:11px}

/* ── RESPONSIVE ── */
/* Categories/travel-type rules ported from NiamaVreme.html's
   @media(max-width:1024px) block starting at line 774 -- dest-strip needs
   no override, it already scrolls horizontally at any width. */
@media(max-width:1024px){
	.type-grid{grid-template-columns:1fr}
	.type-card{min-height:0}
}

/* ── HOT OFFERS — featured pair + grid ── */
/* Ported from NiamaVreme.html:1322-1573 (markup) and its CSS at
   NiamaVreme.html:305-428 (offer-card + featured-card families), plus the
   relevant subset of the NiamaVreme.html:773-823 @media(max-width:768px)
   block. Deviations from the prototype:
   - The whole card is a real <a href> to the offer detail page, same
     real-<a> deviation as .dest-card/.type-card above, instead of a
     <div onclick="showDetail(...)">. Because of that .btn-view is a <span>
     here, not a <button> -- a <button> nested inside an <a> is invalid
     HTML5 (interactive content can't nest), and the whole card already
     navigates on click. Its hover colour change is now keyed off the
     parent card's :hover instead of its own, so it responds no matter
     where on the card the pointer is.
   - .oc-meta (location chip + star rating) and .oc-wish (favourite heart)
     are dropped: neither get_badged_offers() nor get_offers() joins
     tro_locations or carries a hotel rating (see _offers.php), and no
     favourites feature is wired up here, so there's no real data or
     behaviour to back either.
   - This homepage only ever renders the .oc-grid card variant and the
     .feat-pair (two-up) layout, never the row-layout .offer-card or a
     standalone full-bleed .feat-card used elsewhere in the prototype -- so
     only that variant's rules are ported, with the pair-specific values
     (320px min-height, 26px/24px padding, etc.) folded into the base
     .feat-card/.feat-body rules directly instead of carrying a second
     "standalone" layer that would never apply here.
   - .feat-req / .oc-req ("Заявени до момента") are new. The prototype only
     shows that line on the offer-detail modal (.od-buy-req,
     NiamaVreme.html:903-904), not in this section, but the brief requires
     it here too -- styled to match .od-buy-req's look (muted text, bold
     accent number) rather than porting the detail page's CSS wholesale.
   - Fixed a broken declaration while porting .btn-view: the source has
     `display:inline-flexalign-items:center` (missing semicolon, likely a
     copy-paste slip) -- split back into two declarations here. */
.sec-link{font-size:.84rem;font-weight:700;color:var(--blue);transition:color var(--t)}
.sec-link:hover{color:var(--blue-md)}

.offers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px}

.offer-card{background:var(--white);border-radius:var(--r12);border:1px solid var(--g200);box-shadow:var(--sh1);overflow:hidden;cursor:pointer;display:flex;text-decoration:none;color:inherit;transition:box-shadow var(--t),transform var(--t)}
.offer-card:hover{box-shadow:var(--sh2);transform:translateY(-2px)}
.offer-card:hover .oc-img-inner{transform:scale(1.05)}
.oc-img{width:300px;flex-shrink:0;position:relative;overflow:hidden;background:var(--blue-lt)}
.oc-img-inner{width:100%;height:100%;transition:transform 350ms ease}
.oc-photo{width:100%;height:100%;object-fit:cover;display:block}
.oc-img .price-save,.oc-img .price-tag{position:absolute;top:10px;right:10px;z-index:2;font-size:.95rem;padding:5px 13px 5px 5px}
.oc-img .price-save::before,.oc-img .price-tag::before{width:21px;height:21px;background-size:11px 11px}

.oc-body{flex:1;display:flex;flex-direction:column;padding:16px 16px 13px;min-width:0}
/* No line clamp. These titles carry the hotel name and the board basis --
   "…в Ammoa Luxury Hotel &…" cut exactly the words someone scans for. The
   cards are grid items, so a taller title stretches its whole row and the
   grid stays aligned. */
.oc-title{font-size:.95rem;font-weight:700;color:var(--text);line-height:1.35;margin-bottom:6px;text-wrap:pretty}
/* No flex:1 here. As a flex item in the .oc-body column it was stretched to
   fill the card -- 66px, 3.37 lines -- while -webkit-line-clamp sized the
   content to 2. overflow:hidden then sliced the 4th line through the middle
   instead of ending cleanly on an ellipsis. The clamp only holds when the
   box is allowed to size to its clamped content.
   Nothing is lost by dropping it: .oc-foot already pins itself to the
   bottom of the card with margin-top:auto. */
.oc-desc{font-size:.79rem;color:var(--muted);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:10px}
.oc-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-top:auto}
.oc-req{margin-top:8px;font-size:.78rem;color:var(--muted)}
.oc-req b{color:var(--orange);font-weight:700}

/* The saving is the whole pitch of these cards, and half of it is this
   number -- at muted grey it was the faintest thing in the block and read
   as a footnote. Darkened to body-text weight and struck in orange, so the
   eye catches "was X, now Y" without hunting for the badge. */
/* The rule itself is the angled one in base.css; --strike keeps it orange. */
.price-was{display:inline-block;font-size:1.05rem;font-weight:700;color:var(--g600);
	--strike:var(--orange);margin-bottom:3px}
.price-main{font-family:var(--fs);font-size:2rem;color:var(--orange);line-height:1;font-weight:700}
.price-tag{display:inline-flex;align-items:center;gap:7px;font-size:1.05rem;font-weight:700;color:#3d2a00;background:var(--grad-gold);border-radius:100px;padding:6px 15px 6px 6px;letter-spacing:.01em;box-shadow:var(--sh-gold);margin-left:auto}
.price-tag::before{content:'';width:24px;height:24px;flex-shrink:0;border-radius:50%;background:rgba(61,42,0,.22) var(--star-ico-dk) center/13px 13px no-repeat}
.price-save{display:inline-flex;align-items:center;gap:7px;font-size:1.05rem;font-weight:700;color:var(--white);background:var(--grad-hot);border-radius:100px;padding:6px 15px 6px 6px;letter-spacing:.01em;box-shadow:var(--sh-hot);margin-left:auto}
.price-save::before{content:'';width:24px;height:24px;flex-shrink:0;border-radius:50%;background:rgba(0,0,0,.22) var(--pct-ico) center/13px 13px no-repeat}
.price-line{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%}

.oc-right{display:flex;flex-direction:column;align-items:flex-end;gap:7px}

.cd-wrap{background:var(--g100);border-radius:var(--r8);padding:8px 10px}
.cd-wrap .cd-lbl{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.6rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;text-align:center;margin-bottom:5px}
.cd-wrap .cd-lbl::before{content:'';width:12px;height:12px;flex-shrink:0;background:currentColor;-webkit-mask:var(--clock-ico) center/contain no-repeat;mask:var(--clock-ico) center/contain no-repeat}
.cd-row{display:flex;gap:4px}
.cd-unit{background:var(--white);color:var(--text);border:1px solid var(--g200);border-radius:6px;padding:5px 7px 4px;min-width:38px;text-align:center}
.cd-num{font-size:1.1rem;font-weight:700;line-height:1;display:block;font-variant-numeric:tabular-nums}
.cd-name{display:block;font-size:.5rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:2px}

.btn-view{display:inline-flex;align-items:center;gap:5px;padding:8px 15px;border-radius:var(--r4);background:var(--orange);color:var(--white);font-size:.8rem;font-weight:700;border:none;white-space:nowrap;transition:background var(--t)}
.offer-card:hover .btn-view,.feat-card:hover .btn-view{background:var(--orange-dk)}

/* The mobile sizing for .btn-view, moved here from listing.css's max-width:768px
   block so the button's base rule and its override live in one file. They were
   split across two, and any bundle that carried one without the other rendered
   the button at the wrong size -- hotel-detail pages showed 319x34 where the
   full stylesheet gives 319x47. Keeping them together is what lets a bundle
   depend on "home.css" alone for this component. */
@media(max-width:768px){
	.btn-view{justify-content:center;padding:13px 15px;font-size:.92rem;border-radius:var(--r8)}
}

.oc-grid{flex-direction:column}
.oc-grid .oc-img{width:100%;height:190px}
/* .oc-img carries a fixed 300px column for the row layout; the grid layout
   overrides it above. Without that width the row card sizes itself from the
   image's intrinsic dimensions -- fine while every card used the 240px
   thumbnail, but detail.jpg reaches 1024px and blew the card apart. */
.oc-grid .oc-foot{flex-direction:column;align-items:stretch;gap:12px}
.oc-grid .oc-right{flex-direction:column;align-items:stretch;width:100%;gap:10px}
.oc-grid .cd-wrap{width:100%}
.oc-grid .cd-row{justify-content:space-between;gap:5px}
.oc-grid .cd-unit{flex:1;min-width:0}
.oc-grid .btn-view{width:100%;justify-content:center;padding:10px 15px}

/* Featured pair -- two side by side. Values below are the prototype's
   .feat-pair-scoped overrides folded directly into the base rule (see
   comment above); this section never renders a standalone feat-card. */
.feat-pair{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:20px}
/* A single badged offer gets one column's worth of width, not the whole row.
   The largest offer rendition on disk is 480x280, so a full-bleed card would
   upscale it ~2.5x and look soft; capped here it renders close to native. */
.feat-pair-single{grid-template-columns:minmax(0,620px)}
.feat-card{position:relative;border-radius:var(--r16);overflow:hidden;cursor:pointer;min-height:320px;display:block;text-decoration:none;color:inherit;transition:transform var(--t),box-shadow var(--t);box-shadow:0 6px 24px rgba(0,20,45,.16)}
.feat-card:hover{transform:translateY(-4px);box-shadow:0 18px 52px rgba(0,20,45,.3)}
.feat-card:hover .feat-img img{transform:scale(1.05)}
.feat-img{position:absolute;inset:0;overflow:hidden;background:var(--blue-dk)}
.feat-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 700ms cubic-bezier(.2,.6,.2,1)}
.feat-img::after{content:'';position:absolute;inset:0;background:linear-gradient(to top,rgba(0,16,36,.94) 0%,rgba(0,16,36,.65) 34%,rgba(0,16,36,.12) 62%,rgba(0,16,36,.28) 100%)}
.feat-body{position:relative;z-index:2;width:100%;min-height:320px;display:flex;flex-direction:column;justify-content:flex-end;padding:60px 26px 24px}
/* Pinned over the photo rather than flowing above the title, so it lands in
   the same corner as the standard card's discount badge -- and leaves the
   opposite corner free for the heart, which every other card puts there. */
.feat-badge{position:absolute;top:14px;right:14px;z-index:3;
	display:inline-flex;align-items:center;gap:6px;padding:5px 13px;border-radius:100px;
	background:var(--grad-hot);color:var(--white);font-size:.68rem;font-weight:700;
	text-transform:uppercase;letter-spacing:.09em;width:fit-content;
	box-shadow: 0 4px 14px rgba(229,23,123,.45)}
.feat-body h3{font-family:var(--fs);font-size:clamp(1.15rem,1.6vw,1.4rem);font-weight:700;color:var(--white);line-height:1.24;margin-bottom:18px;text-wrap:balance;text-shadow:0 2px 16px rgba(0,0,0,.4)}
.feat-meta-row{display:flex;flex-direction:column;align-items:flex-start;gap:14px;padding-top:20px;border-top:1px solid rgba(255,255,255,.16)}
.feat-price{display:flex;align-items:baseline;gap:10px}
.feat-price-main{font-family:var(--fs);font-size:2.4rem;color:var(--white);font-weight:700;line-height:1}
.feat-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;flex-wrap:wrap}
.feat-cd{display:flex;gap:5px}
.feat-cd .cd-unit{background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.24);backdrop-filter:blur(8px);padding:6px 9px;min-width:40px;border-radius:8px;color:var(--white)}
.feat-cd .cd-num{font-size:1.2rem;color:var(--white)}
.feat-cd .cd-name{color:rgba(255,255,255,.6)}
.feat-card .btn-view{padding:12px 26px;border-radius:100px;font-size:.9rem;box-shadow:0 4px 18px rgba(240,90,0,.4)}
.feat-req{margin-top:12px;font-size:.8rem;color:rgba(255,255,255,.6)}
.feat-req b{color:var(--white);font-weight:700}

/* ── RESPONSIVE ── */
/* Only the rules that differ from the folded-in desktop values above are
   repeated here -- .offers-grid needs no override, minmax(280px,1fr)
   already collapses to one column well before 768px. */
@media(max-width:768px){
	.feat-pair{grid-template-columns:1fr;gap:14px}
	.feat-body{padding:60px 20px 22px}
	.feat-meta-row{gap:16px}
	.feat-card .btn-view{flex:1 1 100%;justify-content:center}
}

/* ── FAV DESTINATIONS — dark photo mosaic ── */
/* Ported from NiamaVreme.html:1575-1636 (fav-grid) and its CSS at
   NiamaVreme.html:436-451. Deviations from the prototype:
   - .fav-card is a real <a href> (search by destination title -- see
     _destinations.php for why no filtered-listing route exists), same
     real-<a> deviation as .dest-card/.type-card/.offer-card above.
   - .fav-sub shows the live offer count only; the prototype also names a
     parent country, which tro_locations has no column for (its rows ARE
     countries and regions). .fav-price shows the cheapest live offer for
     that destination. Both come from the aggregate added to
     get_home_destinations(); each block is omitted when the destination
     has no live offers, since "0 оферти" reads as broken.
   - The prototype's sec-head also carries a "Разгледай всички →" sec-link
     to a generic listing page; dropped for the same reason Task 3 dropped
     it from _categories.php -- no concrete "all destinations" route
     exists to point it at. */
.fav-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:170px;gap:12px}
.fav-card{position:relative;border-radius:var(--r12);overflow:hidden;box-shadow:var(--sh1);display:block;text-decoration:none;color:inherit;transition:transform var(--t),box-shadow var(--t)}
.fav-card:nth-child(1){grid-column:span 2;grid-row:span 2}
.fav-card:nth-child(4){grid-column:span 2}
.fav-card:nth-child(5){grid-column:span 2}
.fav-card:hover{transform:translateY(-3px);box-shadow:var(--sh2)}
.fav-card:hover img{transform:scale(1.06)}
.fav-card img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 600ms cubic-bezier(.2,.6,.2,1)}
.fav-card::after{content:'';position:absolute;inset:0;background:linear-gradient(to top,rgba(0,16,36,.85) 0%,rgba(0,16,36,.25) 45%,transparent 70%)}
.fav-body{position:absolute;bottom:0;left:0;right:0;z-index:2;padding:16px 16px 14px;display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.fav-sub{font-size:.74rem;color:rgba(255,255,255,.7);margin-top:3px}
.fav-price{flex-shrink:0;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.28);border-radius:100px;padding:5px 12px;text-align:center}
.fav-price-lbl{font-size:.56rem;color:rgba(255,255,255,.65);text-transform:uppercase;letter-spacing:.08em;display:block}
.fav-price-val{font-size:.92rem;font-weight:700;color:var(--white);white-space:nowrap}
.fav-name{font-family:var(--fs);font-size:1.02rem;font-weight:700;color:var(--white);line-height:1.2}
.fav-card:nth-child(1) .fav-name{font-size:1.5rem}

.load-more-wrap{display:flex;justify-content:center;margin-top:8px}
.btn-load-more{display:inline-flex;align-items:center;gap:8px;padding:12px 28px;border-radius:var(--r8);border:2px solid var(--blue);color:var(--blue);font-size:.92rem;font-weight:700;background:var(--white);text-decoration:none;transition:background var(--t),color var(--t)}
.btn-load-more:hover{background:var(--blue);color:var(--white)}
/* ── WHY US ── */
/* Ported from NiamaVreme.html:1698-1730 (why-grid) and its CSS at
   NiamaVreme.html:429-434. No deviations -- static copy, no links, nothing
   to adapt to real data. */
.why-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.why-card{background:var(--white);border-radius:var(--r12);border:1px solid var(--g200);padding:24px 20px;text-align:center;transition:box-shadow var(--t)}
.why-card:hover{box-shadow:var(--sh2)}
.why-icon{width:48px;height:48px;border-radius:var(--r12);background:var(--blue-lt);display:flex;align-items:center;justify-content:center;margin:0 auto 14px;color:var(--blue)}
.why-card h4{font-size:.92rem;font-weight:700;margin-bottom:6px}
.why-card p{font-size:.8rem;color:var(--muted);line-height:1.6}

/* ── RESPONSIVE ── */
/* Ported from NiamaVreme.html's @media(max-width:1024px) block starting at
   line 774 and @media(max-width:768px) block starting at line 794 --
   fav-grid/why-grid rules only; .fav-sub/.fav-price overrides in the
   source are omitted since those elements don't exist in this markup. */
@media(max-width:1024px){
	.why-grid{grid-template-columns:1fr 1fr}
	.fav-grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:150px}
	.fav-card:nth-child(1){grid-column:span 2;grid-row:span 1}
	.fav-card:nth-child(4){grid-column:span 1}
	.fav-card:nth-child(5){grid-column:span 1}
}
@media(max-width:768px){
	.why-grid{grid-template-columns:1fr}
	.fav-grid{grid-template-columns:1fr;grid-auto-rows:160px}
	.fav-card:nth-child(1){grid-column:span 1}
	.fav-card:nth-child(4){grid-column:span 1}
	.fav-card:nth-child(5){grid-column:span 1}
}

/* ── FROM THE BLOG ────────────────────────────────────────────────────── */
.blog-pin{display:grid;grid-template-columns:1.15fr 1fr;gap:0;border-radius:var(--r16);overflow:hidden;background:var(--white);height:420px;border:1px solid var(--g200);box-shadow:var(--sh2);cursor:pointer;text-decoration:none;color:inherit;transition:box-shadow var(--t),transform var(--t)}
.blog-pin:hover{box-shadow:var(--sh3);transform:translateY(-2px)}
.blog-pin:hover .blog-img img{transform:scale(1.04)}
.blog-img{position:relative;overflow:hidden;min-height:270px;background:var(--blue-lt)}
.blog-img img{width:100%;height:100%;object-fit:cover;transition:transform 600ms cubic-bezier(.2,.6,.2,1)}
.blog-tag{position:absolute;top:16px;left:16px;background:var(--orange);color:var(--white);font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:5px 12px;border-radius:100px;z-index:2}
.blog-body{padding:28px 32px;display:flex;flex-direction:column;justify-content:center;min-height:0;overflow:hidden}
.blog-meta{display:flex;align-items:center;gap:10px;font-size:.75rem;color:var(--muted);font-weight:600;margin-bottom:14px}
.blog-meta .dot{width:3px;height:3px;border-radius:50%;background:var(--g400)}
.blog-body h3{font-family:var(--fs);font-size:clamp(1.15rem,1.6vw,1.42rem);font-weight:700;line-height:1.28;margin-bottom:10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.blog-body p{font-size:.86rem;color:var(--muted);line-height:1.65;margin-bottom:16px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.blog-cta{display:inline-flex;align-items:center;gap:8px;font-size:.9rem;font-weight:700;color:var(--orange);transition:gap var(--t);width:fit-content}
.blog-pin:hover .blog-cta{gap:12px}
@media(max-width:760px){
	.blog-pin{grid-template-columns:1fr;height:auto}
	.blog-img{min-height:200px}
	.blog-body{padding:22px}
}

/* ── ALL-OFFERS LISTING ───────────────────────────────────────────────── */
.ol-count{font-size:.85rem;color:var(--muted)}
.ol-count b{color:var(--text);font-weight:700}
.ol-empty{font-size:.95rem;color:var(--muted);padding:28px 0}
.ol-pager{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;margin-top:32px}
.ol-page{font-size:.85rem;color:var(--muted);font-weight:600}

/* ── GIFT VOUCHER BAND ────────────────────────────────────────────────────
   A standing promotion between the destinations and the travel types: by
   then the reader has seen what is on offer, which is when buying it for
   someone else starts to make sense. */
.gift-band{background:linear-gradient(120deg,var(--blue-dk) 0%,var(--blue) 100%);color:var(--white);padding:26px 0}
.gift-inner{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.gift-ico{display:flex;align-items:center;justify-content:center;width:62px;height:62px;flex-shrink:0;
	border-radius:50%;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2)}
.gift-copy{flex:1;min-width:240px}
.gift-copy h2{font-family:var(--fs);font-size:1.4rem;font-weight:700;line-height:1.2;margin-bottom:5px}
.gift-copy p{font-size:.9rem;color:rgba(255,255,255,.75);line-height:1.6;max-width:60ch}
.gift-cta{display:inline-flex;align-items:center;gap:8px;flex-shrink:0;padding:13px 24px;border-radius:var(--r8);
	background:var(--orange);color:var(--white);font-size:.95rem;font-weight:700;text-decoration:none;
	box-shadow:0 4px 18px rgba(240,90,0,.35);transition:background var(--t),transform var(--t)}
.gift-cta:hover{background:var(--orange-dk);transform:translateY(-2px)}

@media(max-width:640px){
	.gift-cta{width:100%;justify-content:center}
}

/* Narrow enough on a phone that the next card is partly visible. A row whose
   items divide exactly into the viewport looks like the whole row -- the
   sliver is what says "there is more", and the edge fade from
   [data-hscroll] reinforces it.

   At the end of the file on purpose: a later @media(max-width:768px) block
   re-declares .dest-card's width, and at equal specificity the last one wins. */
@media(max-width:560px){
	/* 2.2 cards to a row, so the third is always part-visible whatever the
	   screen width -- 40vw happened to land exactly two cards wide on a 390px
	   phone and showed nothing. The 24px is the two gaps either side. */
	.dest-card{width:min(160px,calc((100% - 24px) / 2.2))}
	[data-hscroll]{--hs-fade:34px}
}

/* ── TOP-RATED HOTELS ─────────────────────────────────────────────────────
   A centred head, unlike .sec-head's title/link row: this block has a
   subtitle and its "see all" sits under the cards, as in the design.

   Four up, eight cards, two rows. Fixed columns rather than .hotels-grid's
   auto-fill so the count per row is predictable; four rather than five because
   the card needs ~272px before its foot breaks -- at five the price wrapped
   away from its currency sign and the offer count collided with the button. */
/* No head/sub/foot rules here: the block borrows the reviews band's chrome
   (.rv-home, .rv-home-hd, .rv-home-sub, .rv-home-foot, .rv-home-link) so the
   two sections cannot drift apart. Those live in reviews.css, which the home
   bundle already carries. Only the grid is specific to this block. */
/* Left-aligned head: this is a product row, so it opens the way the offers and
   destinations blocks do rather than the way the centred testimonial band does. */
.th-head{margin-bottom:24px}
.th-sub{margin-top:6px;font-size:.92rem;color:var(--muted)}

/* Four up, eight cards, two rows. Fixed columns rather than .hotels-grid's
   auto-fill so the count per row is predictable; four rather than five because
   the card needs ~272px before its foot breaks -- at five the price wrapped away
   from its currency sign and the offer count collided with the button. */
.th-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;align-items:stretch}
@media(max-width:1024px){
	.th-grid{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:900px){
	.th-grid{grid-template-columns:repeat(2,1fr)}
}

@media(max-width:768px){
	/* One up, not two: the card needs ~272px before its foot breaks, and two
	   columns on a 412px phone leaves 173px -- measured, all eight prices wrapped
	   away from their currency sign. .hotels-grid reaches the same single column
	   by way of its minmax(272px), so the listing and this block agree. */
	.th-grid{grid-template-columns:1fr;gap:12px}
	.th-sub{font-size:.86rem}
}
