/* ==========================================================================
   SportShop — design tokens
   ========================================================================== */
:root{
  --color-primary:#111111;
  --color-secondary:#e8354c;
  --color-accent:#f5f5f5;
  --ink:#111111;
  --ink-soft:#5a5a5a;
  --line:#e4e4e4;
  --bg:#ffffff;
  /* Sharper, flatter corners across the board — closer to the crisp,
     squared-off look of the big global sportswear sites than the softer
     "bubbly" rounding this started with. Pills (filter chips, status
     badges, the qty selector) use a literal 999px and are untouched. */
  --radius:2px;
  --radius-sm:2px;
  --radius-lg:2px;
  --shadow-sm:0 1px 3px rgba(17,17,17,.06);
  --shadow-md:0 8px 24px rgba(17,17,17,.08);
  --shadow-lg:0 20px 48px rgba(17,17,17,.14);
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px;
  --space-5:24px; --space-6:32px; --space-7:48px; --space-8:64px;
  /* Bold, uppercase, wide-tracked CTAs and headlines — the other half of
     the "modern global sportswear site" feel, used throughout this file. */
  --tracking-wide:.06em;
  --font-display:'Oswald', 'Inter', sans-serif;
  --font-body:'Inter', -apple-system, sans-serif;
}

@media (prefers-reduced-motion: reduce){
  *{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important;}
}

:focus-visible{outline:2px solid var(--color-secondary);outline-offset:3px;border-radius:2px;}

*{box-sizing:border-box;}
html{
  scroll-behavior:smooth;
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
}
html, body{overflow-x:hidden;max-width:100%;}
body{
  margin:0;
  font-family:var(--font-body);
  color:var(--ink);
  background:var(--bg);
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
}
a{color:inherit;text-decoration:none;}
img{max-width:100%;display:block;}
button{font-family:inherit;cursor:pointer;touch-action:manipulation;}
a, button, .size-btn, .category-card, .cart-link, .status-badge{-webkit-tap-highlight-color:transparent;touch-action:manipulation;}
ul{margin:0;padding:0;list-style:none;}
input, select, textarea{font-size:16px;} /* prevents iOS Safari auto-zoom on focus */

.container{max-width:1280px;margin:0 auto;padding:0 24px;}

/* ---------- Top utility bar ---------- */
.topbar{
  background:var(--color-primary);
  color:rgba(255,255,255,.85);
  padding-top:max(0px, env(safe-area-inset-top));
}
.topbar-inner{
  max-width:1280px;margin:0 auto;padding:8px 24px;
  display:flex;justify-content:space-between;align-items:center;
  font-size:12px;letter-spacing:.02em;
}
.topbar-links{display:flex;gap:18px;align-items:center;}
.topbar-links a{color:rgba(255,255,255,.85);transition:color .15s;}
.topbar-links a:hover{color:#fff;}
.topbar-social .social-links{gap:8px;}
.topbar-social .social-link{width:22px;height:22px;border-color:rgba(255,255,255,.35);}
.topbar-social .social-link:hover{background:#fff;border-color:#fff;color:var(--color-primary);transform:none;}
.topbar-social .social-link svg{width:12px;height:12px;}
.topbar-social .social-link img{width:15px;height:15px;}
.topbar-note-short{display:none;}
@media (max-width:480px){
  /* The full sentence doesn't fit next to "Suivre ma commande" on a small
     screen, but the trust message itself (COD + nationwide delivery) is too
     important for conversion to just hide outright — swap it for a short
     icon version instead of dropping it. */
  .topbar-note-full{display:none;}
  .topbar-note-short{display:inline;}
  .topbar-inner{gap:8px;}
  .topbar-links{gap:10px;}
  /* The phone number is also on the product page and in the footer — on a
     390px screen there isn't room for it here too alongside the delivery/COD
     note and "Suivre ma commande" without wrapping into a cramped 2 lines. */
  .topbar-phone{display:none;}
}

/* ---------- Header ---------- */
.site-header{
  position:sticky; top:0; z-index:50;
  background:#fff;
  border-bottom:1px solid var(--line);
}
.header-inner{
  max-width:1280px;margin:0 auto;
  display:flex;align-items:center;
  padding:18px 24px;
}
.header-inner > *{margin-right:22px;}
.header-inner > *:last-child{margin-right:0;}
@supports (gap:1px){
  .header-inner{gap:22px;}
  .header-inner > *{margin-right:0;}
}
.logo{display:flex;align-items:center;flex-shrink:0;}
.logo img{height:32px;width:auto;}
.logo-text{
  font-family:var(--font-display);
  font-size:20px;letter-spacing:.02em;font-weight:600;
  color:var(--color-primary);
}
.main-nav{display:flex;flex:1;}
.main-nav a{
  font-size:14px;font-weight:500;color:var(--ink);transition:color .15s;
  padding:8px 0;position:relative;
  margin-right:28px;
}
.main-nav a:last-child{margin-right:0;}
@supports (gap:1px){
  .main-nav{gap:30px;}
  .main-nav a{margin-right:0;}
}
.main-nav a::after{
  content:'';position:absolute;left:0;bottom:2px;width:0;height:1.5px;
  background:var(--ink);transition:width .2s ease;
}
.main-nav a:hover::after{width:100%;}

.search-form{
  display:flex;align-items:center;background:var(--color-accent);
  border-radius:6px;padding:8px 14px;flex-shrink:0;width:210px;
}
.search-form input{
  border:none;background:transparent;outline:none;font-size:13.5px;width:100%;
}
.search-form button{border:none;background:none;color:var(--ink-soft);display:flex;}

.icon-link{
  position:relative;display:flex;flex-shrink:0;color:var(--ink);
  min-width:38px;min-height:38px;align-items:center;justify-content:center;
  transition:color .15s;
}
.icon-link:hover{color:var(--color-secondary);}
.icon-badge{
  position:absolute;top:0px;right:0px;
  background:var(--color-primary);color:#fff;
  font-size:10.5px;font-weight:700;
  min-width:16px;height:16px;padding:0 3px;border-radius:9px;
  align-items:center;justify-content:center;
}
.icon-badge:not([hidden]){display:flex;}

/* "Goal" micro-interaction when a product is added to the cart (main.js
   playAddToCartGoal): a ball flies from the add-to-cart button to this
   icon, then the icon itself does a quick bounce with a ring that
   expands out of it, like the ball just hit the net. Pure CSS feedback
   on the existing icon — the flying ball itself is a JS-created element
   (.cart-ball below), since its start/end points change on every page. */
/* Black & white on purpose — a bold red ring read as a bit loud/gimmicky
   next to the rest of the site's restrained look, so this stays within
   ink/white like a scoreboard flash rather than a neon effect. */
.cart-link.goal-scored{animation:cartGoalBounce .45s ease;}
.cart-link.goal-scored::after{
  content:'';position:absolute;inset:-7px;border:2px solid var(--ink);
  border-radius:50%;animation:cartGoalRing .5s ease-out;pointer-events:none;
}
@keyframes cartGoalBounce{
  0%{transform:scale(1);}
  35%{transform:scale(1.32) rotate(-8deg);}
  60%{transform:scale(.94) rotate(4deg);}
  100%{transform:scale(1) rotate(0);}
}
@keyframes cartGoalRing{
  0%{transform:scale(.5);opacity:.9;}
  100%{transform:scale(2.1);opacity:0;}
}
.cart-ball{
  position:fixed;z-index:500;font-size:20px;line-height:1;pointer-events:none;
  top:0;left:0;will-change:transform;
}

.burger{display:none;flex-direction:column;gap:4px;background:none;border:none;padding:6px;width:44px;height:44px;align-items:center;justify-content:center;}
.burger span{width:22px;height:2px;background:var(--ink);}

/* Mobile-only search icon next to the cart/wishlist icons — the inline
   search box (.search-form) is hidden below 720px to save header space,
   so this button reveals it as a dropdown bar instead. Hidden on desktop
   since the search box is already visible there. */
.search-toggle{display:none;}

/* Backdrop shown behind the off-canvas mobile nav, and the explicit
   close (×) button inside it — both hidden on desktop, where the nav
   isn't off-canvas at all. */
.nav-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:99;}
.nav-overlay.open{display:block;}
.nav-close{
  display:none;position:absolute;top:max(16px, env(safe-area-inset-top));right:16px;
  background:none;border:none;width:38px;height:38px;align-items:center;justify-content:center;
  color:var(--ink);
}

/* ---------- Toast notifications (server-rendered flash messages) ----------
   main.js upgrades each .flash into a real toast: auto-dismiss after a few
   seconds (errors stay longer so there's time to read them), a progress bar
   showing time left, and a pause-on-hover so a toast being read doesn't
   vanish under the cursor. The markup/positioning below works with no JS at
   all too (messages just stay until closed) — the script only enhances it. */
.flash-container{
  position:fixed;top:98px;right:20px;z-index:300;
  display:flex;flex-direction:column;gap:8px;max-width:340px;
}
.flash{
  background:#fff;border-left:4px solid var(--color-primary);
  box-shadow:0 10px 30px rgba(0,0,0,.12);
  padding:13px 34px 13px 14px;font-size:13.5px;border-radius:var(--radius);
  position:relative;overflow:hidden;animation:slideIn .25s ease;
  display:flex;align-items:flex-start;gap:9px;
}
.flash-success{border-color:#1f9d55;}
.flash-error{border-color:#d64545;}
.flash-info{border-color:#3182ce;}
.flash-icon{
  flex-shrink:0;width:19px;height:19px;border-radius:50%;margin-top:1px;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:#fff;background:var(--color-primary);
}
.flash-success .flash-icon{background:#1f9d55;}
.flash-error .flash-icon{background:#d64545;}
.flash-info .flash-icon{background:#3182ce;}
.flash-body{flex:1;padding-top:1px;}
.flash-close{
  position:absolute;top:8px;right:8px;border:none;background:none;
  font-size:16px;color:var(--ink-soft);line-height:1;padding:2px;
}
.flash-progress{
  position:absolute;left:0;bottom:0;height:2px;background:currentColor;opacity:.3;
  width:100%;transform-origin:left;color:var(--color-primary);
  animation:flashProgress var(--flash-duration,4500ms) linear forwards;
}
.flash-success .flash-progress{color:#1f9d55;}
.flash-error .flash-progress{color:#d64545;}
.flash-info .flash-progress{color:#3182ce;}
.flash-leaving{animation:flashOut .22s ease forwards;}
@keyframes slideIn{from{transform:translateX(20px);opacity:0;}to{transform:translateX(0);opacity:1;}}
@keyframes flashOut{to{transform:translateX(24px);opacity:0;}}
@keyframes flashProgress{from{transform:scaleX(1);}to{transform:scaleX(0);}}

/* ---------- Hero ---------- */
.hero{
  position:relative;
  background:var(--color-primary);
  color:#fff;
  min-height:440px;
  display:flex;align-items:center;
  overflow:hidden;
}
.hero-bg{position:absolute;inset:0;object-fit:cover;width:100%;height:100%;opacity:.6;}
/* Fallback look for a hero with no background image uploaded yet — a subtle
   diagonal glow instead of a flat, empty-looking block, and a shorter height
   since there's no photo to fill the space meaningfully. */
.hero-no-image{min-height:300px;}
.hero-no-image::after{
  content:'';position:absolute;inset:0;z-index:0;
  background:
    radial-gradient(ellipse 60% 90% at 100% 0%, rgba(232,53,76,.35), transparent 60%),
    radial-gradient(ellipse 50% 70% at 80% 100%, rgba(255,255,255,.08), transparent 65%);
}
.hero::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(180deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,.1) 45%, rgba(0,0,0,.4) 100%);
  z-index:1;
}
.hero-content{position:relative;z-index:2;padding:56px 24px;max-width:1280px;margin:0 auto;width:100%;}
.hero-content h1{
  font-family:var(--font-display);
  font-weight:700;
  font-size:clamp(32px,6.2vw,64px);
  line-height:1.04;margin:0 0 16px;max-width:640px;
  letter-spacing:-.01em;
  text-transform:uppercase;
}
.hero-content p{font-size:16.5px;max-width:440px;margin:0 0 28px;color:rgba(255,255,255,.85);line-height:1.6;}
.btn{
  display:inline-flex;align-items:center;gap:6px;
  background:var(--color-primary);color:#fff;
  padding:15px 30px;font-weight:700;font-size:13px;
  text-transform:uppercase;letter-spacing:var(--tracking-wide);
  border:2px solid var(--color-primary);border-radius:var(--radius-sm);
  transition:transform .18s cubic-bezier(.4,0,.2,1), box-shadow .18s, background .18s, color .18s;
  box-shadow:var(--shadow-sm);
}
.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-md);background:#fff;color:var(--color-primary);}
.btn:active{transform:translateY(0);}
.btn-outline{background:transparent;color:var(--ink);border:2px solid currentColor;box-shadow:none;}
.btn-outline:hover{background:var(--ink);color:#fff;}
.btn-dark{background:var(--color-primary);}
.btn-block{width:100%;justify-content:center;}
/* Small inline actions (cart line "Mettre à jour", coupon "Appliquer")
   next to a tight input — the full .btn tracking/padding is too loose there. */
.btn-compact{padding:9px 16px;font-size:11.5px;letter-spacing:.02em;}
/* On top of a hero photo, invert the default so the CTA reads as a bold
   white tab against the image instead of a black box that blends into the
   dark overlay behind it — the hero-banner CTA treatment used across the
   big sportswear sites. */
.hero-content .btn{background:#fff;color:var(--color-primary);border-color:#fff;}
.hero-content .btn:hover{background:transparent;color:#fff;border-color:#fff;}

/* ---------- Section titles ---------- */
.section{padding:64px 0;}
.section-head{
  display:flex;justify-content:space-between;align-items:flex-end;
  margin-bottom:30px;
}
.section-head h2{
  font-family:var(--font-display);
  font-weight:700;
  font-size:clamp(22px,2.4vw,30px);margin:0;
  letter-spacing:0;
  text-transform:uppercase;
}
.section-head a{font-size:13px;font-weight:500;text-decoration:underline;text-underline-offset:3px;color:var(--ink-soft);transition:color .15s;}
.section-head a:hover{color:var(--ink);}

/* ---------- Category row (horizontal auto-scrolling carousel) ---------- */
.category-row{position:relative;}
.cat-arrow{
  display:none; /* shown only on desktop, see media query below */
  position:absolute;top:50%;transform:translateY(-50%);
  width:40px;height:40px;border-radius:50%;border:none;
  background:#fff;color:var(--ink);box-shadow:var(--shadow-md);
  align-items:center;justify-content:center;
  z-index:3;transition:opacity .2s, box-shadow .2s;
}
.cat-arrow:hover{box-shadow:var(--shadow-lg);}
.cat-arrow svg{width:18px;height:18px;}
.cat-arrow-prev{left:-20px;}
.cat-arrow-next{right:-20px;}
.cat-arrow[hidden]{display:none;}
.category-grid{
  display:flex;gap:20px;
  overflow-x:auto;scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;
  scroll-behavior:smooth;
  padding-bottom:2px;
}
.category-grid::-webkit-scrollbar{display:none;}
.category-card{
  position:relative;aspect-ratio:4/5;overflow:hidden;border-radius:var(--radius-lg);
  background:var(--color-accent);box-shadow:var(--shadow-sm);
  transition:box-shadow .25s;
  flex:0 0 260px;scroll-snap-align:start;
}
.category-card:hover{box-shadow:var(--shadow-lg);}
.category-card img{width:100%;height:100%;object-fit:cover;transition:transform .5s cubic-bezier(.25,.8,.25,1);}
.category-card:hover img{transform:scale(1.08);}
.category-card .overlay{
  position:absolute;inset:0;background:linear-gradient(180deg,transparent 35%,rgba(0,0,0,.65));
  display:flex;align-items:flex-end;padding:22px;
}
.category-card .overlay span{
  color:#fff;font-family:var(--font-display);font-weight:700;font-size:21px;text-transform:uppercase;letter-spacing:.01em;
}
/* Placeholder look for a category with no image uploaded yet, so it reads as
   an intentional tile instead of an empty gray box. A faint diagonal stripe
   texture + a shorter tile height keep it from feeling like a big empty
   void — swap the photo in any time and this look disappears entirely. */
.category-card.no-image{
  aspect-ratio:16/10;
  background:
    repeating-linear-gradient(135deg, rgba(255,255,255,.07) 0 2px, transparent 2px 18px),
    linear-gradient(135deg, var(--color-primary), var(--color-secondary));
}
.category-card.no-image .overlay{
  background:rgba(0,0,0,.1);
  align-items:center;justify-content:center;text-align:center;
}
.category-card.no-image .overlay span{
  font-size:22px;
}

/* On desktop, show exactly 3 category cards at a time — any extra categories
   stay reachable by scrolling/dragging sideways (same swipeable carousel as
   tablet & mobile, just sized so 3 fit the viewport instead of ~1-2). */
@media (min-width:961px){
  .category-card{flex:0 0 calc((100% - 40px)/3);}
  .cat-arrow{display:flex;}
  /* Fades the last visible card's right edge to a hint of transparency, so
     it reads as "cut off, keep going" rather than "that's the last one". */
  .category-row::after{
    content:'';position:absolute;top:0;right:0;bottom:2px;width:64px;
    background:linear-gradient(90deg, transparent, var(--bg) 92%);
    pointer-events:none;z-index:2;transition:opacity .2s;
  }
  .category-row.at-end::after{opacity:0;}
}

/* ---------- Product grid ---------- */
.product-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:28px 20px;
}
.product-card{position:relative;transition:transform .25s cubic-bezier(.25,.8,.25,1);}
.product-card:hover{transform:translateY(-4px);}
.product-card .thumb{
  position:relative;aspect-ratio:1/1;background:var(--color-accent);overflow:hidden;border-radius:var(--radius-lg);margin-bottom:14px;
  box-shadow:var(--shadow-sm);transition:box-shadow .25s;
}
.product-card:hover .thumb{box-shadow:var(--shadow-lg);}
/* Progressive-enhancement fade/rise-in as cards enter the viewport
   (main.js initScrollReveal) — .reveal-pending only exists once JS adds
   it, so a card is always fully visible if JS doesn't run. */
.product-card.reveal-pending{opacity:0;transform:translateY(18px);}
.product-card.reveal-pending.in-view{
  opacity:1;transform:translateY(0);
  transition:opacity .5s ease, transform .5s ease;
}
.product-card .thumb img{width:100%;height:100%;object-fit:cover;transition:transform .4s cubic-bezier(.25,.8,.25,1);}
.product-card:hover .thumb img{transform:scale(1.06);}
/* Second photo crossfade on hover — both photos are stacked exactly on top
   of each other (absolute, inset:0) so the swap is a pure opacity fade with
   no layout shift. Only rendered at all when a product has a 2nd photo
   (secondary_image), and both are prefetched in bulk for listing pages
   (utils.prefetch_product_cards) so this never adds a query per card — it
   does add one extra (lazy-loaded) image request per card that has one,
   which is the deliberate trade-off for the effect. z-index:1 keeps both
   photos below the badge/heart/quick-view overlays (z-index:2/3). */
.thumb-img{position:absolute;inset:0;z-index:1;transition:transform .4s cubic-bezier(.25,.8,.25,1), opacity .35s ease;}
.thumb-img-secondary{opacity:0;}
.product-card:hover .thumb-img-secondary{opacity:1;}
.product-card:hover .thumb-img-primary{opacity:0;}
/* Quick-view tab: a plain CSS reveal on hover (no extra product data or
   queries needed) — a thin bold strip slides up from the bottom of the
   image, the same "quick add" gesture used on the big sportswear sites'
   grids, here pointing into the product page itself. */
.quick-view{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  background:var(--ink);color:#fff;
  font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:var(--tracking-wide);
  text-align:center;padding:11px 0;
  transform:translateY(100%);transition:transform .25s ease;
}
.product-card:hover .quick-view{transform:translateY(0);}
.badge{
  position:absolute;top:12px;left:12px;z-index:2;
  background:var(--color-secondary);color:#fff;font-size:11px;font-weight:800;
  padding:5px 10px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.03em;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.badge-out{background:#8a8a8a;}
.badge-inline{position:static;display:inline-block;}

.wishlist-heart{
  position:absolute;top:12px;right:12px;z-index:3;
  width:34px;height:34px;border-radius:50%;
  background:rgba(255,255,255,.92);border:none;color:var(--ink-soft);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 2px 8px rgba(0,0,0,.12);
  transition:transform .15s,color .15s;
}
.wishlist-heart:hover{transform:scale(1.08);}
.wishlist-heart svg{width:17px;height:17px;display:block;}
.wishlist-heart.is-active{color:var(--color-secondary);}
.wishlist-heart.is-active svg{fill:currentColor;}
.product-detail .wishlist-heart{top:16px;right:16px;width:40px;height:40px;}
.product-detail .wishlist-heart svg{width:20px;height:20px;}
.product-card h3{font-size:14.5px;font-weight:700;margin:0 0 4px;letter-spacing:-.005em;}
.product-card .cat{font-size:12px;color:var(--ink-soft);margin:0 0 8px;text-transform:uppercase;letter-spacing:.04em;}
.price-row{display:flex;align-items:center;gap:9px;}
.price{font-weight:800;font-size:17px;letter-spacing:-.01em;}
.price-old{font-size:13px;color:var(--ink-soft);text-decoration:line-through;}

.empty-state{
  text-align:center;padding:80px 20px;color:var(--ink-soft);
}
.empty-state h3{font-family:var(--font-display);font-size:20px;color:var(--ink);text-transform:uppercase;}

/* ---------- Catalog quick filters (pill tabs) ---------- */
.quick-filters{display:flex;gap:10px;margin-bottom:24px;flex-wrap:wrap;}
.quick-filter-pill{
  padding:9px 18px;border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:13px;font-weight:600;color:var(--ink);transition:all .15s;
}
.quick-filter-pill:hover{border-color:var(--ink);}
.quick-filter-pill.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary);}

/* ---------- Filters bar ---------- */
.catalog-layout{display:grid;grid-template-columns:220px 1fr;gap:32px;align-items:start;}
.filters{
  border:1px solid var(--line);padding:20px;border-radius:var(--radius);position:sticky;top:90px;
}
.filters h4{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin:0 0 12px;color:var(--ink-soft);}
.filters .filter-group{margin-bottom:22px;}
.filters a, .filters label{display:block;font-size:14px;padding:6px 0;color:var(--ink);}
.filters a.active{color:var(--color-secondary);font-weight:700;}
.toolbar{
  display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;
  font-size:13.5px;color:var(--ink-soft);
}
.toolbar select{border:1px solid var(--line);padding:8px 10px;border-radius:var(--radius);font-size:13.5px;}

/* ---------- Pagination ---------- */
.pagination{display:flex;gap:6px;justify-content:center;margin-top:40px;}
.pagination a, .pagination span{
  min-width:36px;height:36px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:var(--radius);font-size:13.5px;
}
.pagination .current{background:var(--color-primary);color:#fff;border-color:var(--color-primary);font-weight:700;}

/* ---------- Product detail ---------- */
.product-detail{display:grid;grid-template-columns:1fr 1fr;gap:48px;padding:40px 0 60px;}
.product-gallery .main-image{
  position:relative;aspect-ratio:1/1;background:var(--color-accent);border-radius:var(--radius);
  overflow:hidden;margin-bottom:10px;cursor:zoom-in;
  -webkit-touch-callout:none;
  touch-action:pan-y;
}
.gallery-slide{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transition:opacity .5s ease;pointer-events:none;
}
.gallery-slide.active{opacity:1;pointer-events:auto;}
.gallery-slide.zoomed{transform:scale(2.2);transition:transform .06s linear,opacity .5s ease;}

.zoom-hint{
  position:absolute;bottom:12px;right:12px;
  background:rgba(255,255,255,.85);width:32px;height:32px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:14px;
  opacity:0;transition:opacity .2s;pointer-events:none;
}
.main-image:hover .zoom-hint{opacity:1;}

.gallery-dots{
  position:absolute;bottom:12px;left:50%;transform:translateX(-50%);
  display:flex;gap:6px;z-index:3;
}
.gallery-dot{
  width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.6);
  border:1px solid rgba(0,0,0,.15);cursor:pointer;transition:all .2s;
  position:relative;
}
.gallery-dot::after{
  content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:32px;height:32px;
}
.gallery-dot.active{background:var(--ink);width:18px;border-radius:3px;}

.thumb-row{display:flex;gap:8px;}
.thumb-row img{width:70px;height:70px;object-fit:cover;border-radius:var(--radius);cursor:pointer;border:2px solid transparent;background:var(--color-accent);transition:border-color .15s;}
.thumb-row img.active{border-color:var(--color-primary);}
.product-info .brand{font-size:12.5px;text-transform:uppercase;color:var(--ink-soft);letter-spacing:.05em;}
.sole-type-badge{
  display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  background:var(--color-accent);border-radius:999px;padding:5px 12px;margin:8px 0 4px;color:var(--ink);
}
.product-info h1{font-family:var(--font-display);font-weight:700;font-size:30px;letter-spacing:-.005em;margin:6px 0 12px;text-transform:uppercase;}
.product-info .price-row{margin-bottom:20px;}
.product-info .price{font-size:24px;}
.size-grid{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 22px;}
.size-btn{
  min-width:52px;min-height:46px;padding:10px 12px;border:1.5px solid var(--line);border-radius:var(--radius);
  font-size:13.5px;font-weight:700;background:#fff;text-align:center;transition:border-color .15s;
  display:flex;align-items:center;justify-content:center;
}
.size-btn:not(.disabled):hover{border-color:var(--ink);}
.size-btn.selected{border-color:var(--color-primary);background:var(--color-primary);color:#fff;}
.size-btn.disabled{color:#c4c4c4;text-decoration:line-through;pointer-events:none;background:#fafafa;}
.size-grid-error .size-btn{border-color:#d64545;}
.size-hint{color:#d64545;font-size:13px;margin:-10px 0 16px;font-weight:600;}
.qty-select{display:flex;align-items:center;border:1px solid var(--line);border-radius:999px;width:fit-content;margin-bottom:20px;}
.qty-select button{border:none;background:none;width:44px;height:44px;font-size:18px;display:flex;align-items:center;justify-content:center;}
.qty-select input{width:36px;border:none;text-align:center;font-size:15px;}
.product-desc{margin-top:26px;font-size:14px;line-height:1.7;color:#333;border-top:1px solid var(--line);padding-top:22px;}
.stock-note{font-size:13px;margin:10px 0;color:#1f9d55;font-weight:600;}
.stock-note.out{color:#d64545;}

/* ---------- Promotions (time/quantity-limited discounts) ---------- */
.promo-mini-note{font-size:11.5px;color:var(--color-secondary);font-weight:700;margin:2px 0 0;}
.promo-banner{
  background:linear-gradient(135deg, rgba(232,53,76,.08), rgba(232,53,76,.02));
  border:1px solid rgba(232,53,76,.25);border-radius:6px;padding:14px 16px;margin:14px 0 20px;
}
.promo-countdown{display:flex;align-items:center;gap:8px;font-size:13.5px;margin-bottom:6px;}
.promo-countdown:last-child{margin-bottom:0;}
.promo-countdown-icon{font-size:15px;}
.promo-countdown-value{color:var(--color-secondary);font-variant-numeric:tabular-nums;}
.promo-stock-note{font-size:13.5px;color:var(--color-secondary);font-weight:600;}

/* ---------- Cart ---------- */
.cart-page{padding:40px 0 60px;}
.cart-page h1{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:28px;margin-bottom:26px;}
.cart-layout{display:grid;grid-template-columns:1fr 340px;gap:36px;align-items:start;}
.cart-item{display:grid;grid-template-columns:90px 1fr auto;gap:14px;padding:16px 0;border-bottom:1px solid var(--line);align-items:center;}
.cart-item img{width:90px;height:90px;object-fit:cover;border-radius:var(--radius);background:var(--color-accent);}
.cart-item h4{margin:0 0 4px;font-size:14.5px;font-weight:700;}
.cart-item .meta{font-size:12.5px;color:var(--ink-soft);margin-bottom:6px;}
.cart-item form{display:flex;align-items:center;gap:10px;}
.remove-link{font-size:12px;color:var(--color-secondary);font-weight:600;}
.summary-box{border:1px solid var(--line);border-radius:var(--radius);padding:22px;}
.summary-box h3{margin:0 0 16px;font-size:16px;font-weight:700;text-transform:uppercase;letter-spacing:.02em;}
.summary-row{display:flex;justify-content:space-between;font-size:14px;padding:8px 0;}
.summary-row.total{font-weight:800;font-size:18px;border-top:1px solid var(--line);margin-top:8px;padding-top:14px;}

/* ---------- Checkout ---------- */
.checkout-page{padding:40px 0 60px;}
.checkout-page h1{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:28px;margin-bottom:26px;}
.checkout-layout{display:grid;grid-template-columns:1fr 360px;gap:40px;align-items:start;}
.form-group{margin-bottom:16px;}
.form-group label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;}
.form-group input, .form-group select, .form-group textarea{
  width:100%;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--radius);font-size:14.5px;font-family:inherit;
  transition:border-color .15s, box-shadow .15s;
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus{
  outline:none;border-color:var(--ink);box-shadow:0 0 0 3px rgba(17,17,17,.08);
}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.delivery-options{display:flex;gap:12px;margin-bottom:16px;}
.delivery-opt{flex:1;border:1.5px solid var(--line);border-radius:var(--radius);padding:14px;cursor:pointer;transition:border-color .15s;}
.delivery-opt.selected{border-color:var(--color-primary);background:var(--color-accent);}
.delivery-opt input{margin-right:8px;}
.order-summary-list{border:1px solid var(--line);border-radius:var(--radius);padding:20px;}
.order-summary-list .item-row{display:flex;justify-content:space-between;font-size:13.5px;padding:8px 0;border-bottom:1px solid #f0f0f0;}
.cod-note{
  background:var(--color-accent);border-radius:var(--radius);padding:14px;font-size:13px;margin-top:16px;
  display:flex;gap:10px;align-items:flex-start;
}

/* ---------- Confirmation ---------- */
.confirm-page{padding:80px 24px;text-align:center;max-width:520px;margin:0 auto;}
.confirm-icon{
  width:64px;height:64px;border-radius:50%;background:#1f9d55;color:#fff;
  display:flex;align-items:center;justify-content:center;margin:0 auto 22px;font-size:30px;
}
.confirm-page h1{font-family:var(--font-display);text-transform:uppercase;font-size:24px;margin-bottom:10px;}
.order-number-box{
  background:var(--color-accent);padding:16px;border-radius:var(--radius);margin:22px 0;font-size:14px;
}

/* ---------- Footer ---------- */
.site-footer{background:var(--color-primary);color:#fff;margin-top:72px;}
.footer-inner{
  max-width:1280px;margin:0 auto;padding:60px 24px 100px;
  display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:40px;
}
.footer-logo{color:#fff;margin-bottom:12px;font-size:20px;}
.footer-col p{font-size:13.5px;color:rgba(255,255,255,.65);margin:5px 0;line-height:1.6;}
.footer-col a{display:block;font-size:13.5px;color:rgba(255,255,255,.75);padding:5px 0;transition:color .15s;}
.footer-col a:hover{color:#fff;}
.footer-col h4{font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;margin:0 0 16px;color:rgba(255,255,255,.45);font-weight:700;}
.footer-social{display:flex;gap:14px;margin-top:12px;}
.footer-bottom{
  border-top:1px solid rgba(255,255,255,.08);text-align:center;padding:18px;
  font-size:12px;color:rgba(255,255,255,.5);letter-spacing:.02em;
}

/* ---------- Social links (footer + product page) ---------- */
.social-links{display:flex;gap:10px;align-items:center;}
.social-link{
  width:36px;height:36px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:transparent;border:1px solid rgba(255,255,255,.28);color:#fff;flex-shrink:0;
  transition:background .15s,border-color .15s,transform .15s;
}
.social-link:hover{background:#fff;border-color:#fff;color:var(--color-primary);transform:translateY(-2px);}
.social-link svg{width:16px;height:16px;}
.social-link img{width:20px;height:20px;object-fit:contain;border-radius:50%;}

/* Variant used on the light background at the bottom of the product page */
.product-social{
  margin-top:26px;padding-top:22px;border-top:1px solid var(--line);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
}
.product-social .label{font-size:13px;color:var(--ink-soft);}
.product-social .social-link{
  background:transparent;border-color:var(--line);color:var(--ink);
}
.product-social .social-link:hover{background:var(--ink);border-color:var(--ink);color:#fff;}

/* ---------- Breadcrumbs ---------- */
.breadcrumbs{font-size:12.5px;color:var(--ink-soft);margin:18px 0 4px;display:flex;flex-wrap:wrap;align-items:center;}
.breadcrumbs a{color:var(--ink-soft);transition:color .15s;}
.breadcrumbs a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:2px;}
.breadcrumbs .sep{margin:0 7px;color:#c8c8c8;}
.breadcrumbs span:last-child{color:var(--ink);font-weight:500;}

/* ---------- Catalog: mobile filters toggle ---------- */
.filters-toggle{
  display:none;align-items:center;gap:8px;
  border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 16px;
  font-size:13px;font-weight:600;margin-bottom:16px;background:#fff;
}
.filters-toggle.open{border-color:var(--ink);}
.filter-count{
  background:var(--color-primary);color:#fff;font-size:10.5px;font-weight:700;
  min-width:17px;height:17px;border-radius:9px;display:flex;align-items:center;justify-content:center;padding:0 4px;
}

/* ---------- Trust badges ---------- */
.trust-badges{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--ink-soft);margin:14px 0;}
.trust-badges span{display:flex;align-items:center;gap:6px;}
.trust-badges svg{width:16px;height:16px;flex-shrink:0;color:var(--color-secondary);}

/* ---------- No-image placeholder ---------- */
.no-image-placeholder{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:8px;color:#b7b7b7;background:var(--color-accent);
}
.no-image-placeholder span{font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;}
.product-card .thumb .no-image-placeholder{position:absolute;}

/* ---------- Sticky mobile "add to cart" bar ---------- */
.sticky-buybar{
  position:fixed;left:0;right:0;bottom:0;z-index:110;
  background:#fff;border-top:1px solid var(--line);box-shadow:0 -4px 20px rgba(0,0,0,.08);
  padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom));
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  transform:translateY(100%);transition:transform .25s ease;pointer-events:none;
}
.sticky-buybar.visible{transform:translateY(0);pointer-events:auto;}
@media (min-width:721px){
  .sticky-buybar{display:none !important;}
}
.sticky-buybar-info{min-width:0;display:flex;flex-direction:column;gap:2px;}
.sticky-buybar-info strong{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px;}
.sticky-buybar-info .price{font-weight:800;font-size:15px;}
.sticky-buybar .btn{flex-shrink:0;padding:11px 20px;font-size:12.5px;}

/* ---------- Homepage hero slider ---------- */
.hero-slider{padding:0;}
.hero-slide{
  position:absolute;inset:0;display:flex;align-items:center;overflow:hidden;
  opacity:0;pointer-events:none;transition:opacity .7s ease;background:var(--color-primary);
}
.hero-slide.active{opacity:1;pointer-events:auto;position:relative;}
.hero-dots{
  position:absolute;bottom:18px;left:50%;transform:translateX(-50%);z-index:3;
  display:flex;gap:8px;
}
.hero-dot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.5);cursor:pointer;transition:all .2s;}
.hero-dot.active{background:#fff;width:22px;border-radius:4px;}

/* ---------- Floating WhatsApp button ---------- */
.whatsapp-float{
  position:fixed;right:20px;bottom:20px;z-index:120;
  width:56px;height:56px;border-radius:50%;
  background:#25d366;color:#fff;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 6px 20px rgba(37,211,102,.45);
  transition:transform .18s;
  bottom:calc(20px + env(safe-area-inset-bottom));
}
.whatsapp-float:hover{transform:scale(1.07);}
.whatsapp-float svg{width:30px;height:30px;}
/* Make room for the sticky "add to cart" bar on the product page so the two
   floating elements never overlap on mobile. */
body.has-sticky-buybar .whatsapp-float{transition:bottom .25s ease;}

/* ---------- iOS "Add to Home Screen" instructions ----------
   iOS Safari has no install-prompt API at all, so this is shown instead of
   the normal one-tap install when the "Installer l'application" link is
   tapped on an iPhone/iPad. */
.ios-tip-overlay{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:300;
  align-items:flex-end;justify-content:center;
}
.ios-tip-overlay.open{display:flex;}
.ios-tip-card{
  background:#fff;border-radius:16px 16px 0 0;width:100%;max-width:420px;
  padding:24px 20px calc(24px + env(safe-area-inset-bottom));
  box-shadow:0 -8px 30px rgba(0,0,0,.18);
}
.ios-tip-card h3{margin:0 0 10px;font-size:16px;}
.ios-tip-card p{margin:0 0 16px;font-size:13.5px;line-height:1.6;color:var(--ink-soft);}

/* ---------- Free shipping progress bar (cart) ---------- */
.free-shipping-bar{
  border:1px solid var(--line);background:var(--color-accent);
  border-radius:var(--radius);padding:14px 18px;margin-bottom:22px;
}
.free-shipping-bar p{margin:0 0 8px;font-size:13.5px;}
.free-shipping-track{height:6px;border-radius:999px;background:rgba(0,0,0,.08);overflow:hidden;}
.free-shipping-fill{height:100%;background:var(--color-secondary);border-radius:999px;transition:width .3s ease;}

/* ---------- Coupon box (cart) ---------- */
.coupon-box{margin-bottom:18px;padding-bottom:18px;border-bottom:1px solid var(--line);}
.coupon-form{display:flex;gap:8px;}
.coupon-form input{flex:1;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);font-size:13.5px;}
.coupon-applied{display:flex;justify-content:space-between;align-items:center;font-size:13px;background:#f0fdf4;border:1px solid #bbf0cc;border-radius:var(--radius);padding:10px 12px;color:#166534;}

/* ---------- Low-stock urgency ---------- */
.badge-low-stock{background:#e08e0b;}
.low-stock-note{font-size:12.5px;color:#c26b00;font-weight:700;margin:6px 0 0;}

/* ---------- Order tracking ---------- */
.track-page{padding:40px 0 70px;max-width:640px;}
.track-page h1{font-family:var(--font-display);text-transform:uppercase;font-size:24px;margin-bottom:10px;}
.track-intro{color:var(--ink-soft);font-size:14px;margin-bottom:24px;}
.track-form{margin-bottom:10px;}
.track-result{border:1px solid var(--line);border-radius:var(--radius);padding:22px;margin-top:28px;}
.track-result-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px;}
.track-result-head h3{margin:0;font-size:17px;}
.track-date{color:var(--ink-soft);font-size:12.5px;margin:4px 0 0;}
.track-items .item-row{display:flex;justify-content:space-between;font-size:13.5px;padding:8px 0;border-bottom:1px solid #f0f0f0;}
.track-totals{margin-top:10px;}
.track-delivery-note{margin-top:14px;font-size:13px;color:var(--ink-soft);}
.status-pill{padding:5px 12px;border-radius:999px;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.02em;white-space:nowrap;}
.status-pending{background:#fff3d6;color:#946200;}
.status-confirmed{background:#dbeafe;color:#1e4fa3;}
.status-shipped{background:#e0e7ff;color:#4338ca;}
.status-delivered{background:#dcfce7;color:#166534;}
.status-cancelled{background:#fee2e2;color:#991b1b;}
.status-returned{background:#f3e8ff;color:#6b21a8;}

/* Visual progress timeline (pending → confirmed → shipped → delivered) on
   "Suivre ma commande" — Order.timeline (models.py) decides each step's
   state; a cancelled/returned order has no timeline at all, just the pill
   above. Built as a flex row of steps, each with a connecting line drawn
   via ::before on the step itself (skipped on the first step) so the line
   always runs dot-to-dot regardless of how many steps there are. */
.track-timeline{display:flex;list-style:none;margin:18px 0 22px;padding:0;}
.track-step{
  flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;
  position:relative;font-size:11.5px;color:var(--ink-soft);padding-top:2px;
}
.track-step::before{
  content:'';position:absolute;top:15px;left:-50%;width:100%;height:2px;
  background:var(--line);z-index:1;transition:background .3s;
}
.track-step:first-child::before{display:none;}
.track-step-dot{
  width:28px;height:28px;border-radius:50%;background:#fff;border:2px solid var(--line);
  display:flex;align-items:center;justify-content:center;color:transparent;
  margin-bottom:7px;position:relative;z-index:2;transition:all .25s;flex-shrink:0;
}
.track-step-label{line-height:1.3;max-width:80px;}
.track-step-done .track-step-dot{background:var(--color-secondary);border-color:var(--color-secondary);color:#fff;}
.track-step-done::before{background:var(--color-secondary);}
.track-step-current .track-step-dot{
  border-color:var(--color-secondary);box-shadow:0 0 0 4px rgba(232,53,76,.15);
  animation:trackPulse 1.8s ease-in-out infinite;
}
.track-step-current .track-step-label{color:var(--ink);font-weight:700;}
.track-step-done .track-step-label{color:var(--ink);}
@keyframes trackPulse{
  0%,100%{box-shadow:0 0 0 4px rgba(232,53,76,.15);}
  50%{box-shadow:0 0 0 7px rgba(232,53,76,.08);}
}
@media (max-width:480px){
  .track-step{font-size:10px;}
  .track-step-label{max-width:62px;}
  .track-step-dot{width:24px;height:24px;}
  .track-step::before{top:13px;}
}

/* ---------- Reviews / ratings ---------- */
.rating-summary{display:flex;align-items:center;gap:8px;margin:6px 0 16px;font-size:13.5px;color:var(--ink-soft);}
.stars{color:#f5a623;font-size:15px;letter-spacing:1px;}
.reviews-section{margin-top:20px;}
.review-item{border-bottom:1px solid var(--line);padding:16px 0;}
.review-item:last-child{border-bottom:none;}
.review-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;}
.review-name{font-weight:700;font-size:14px;}
.review-date{font-size:12px;color:var(--ink-soft);}
.review-comment{font-size:13.5px;line-height:1.6;color:#333;margin:4px 0 0;}

/* ---------- Responsive ---------- */
@media (max-width:960px){
  .catalog-layout{grid-template-columns:1fr;}
  .filters{position:static;display:none;border:1px solid var(--line);border-radius:var(--radius-lg);margin-bottom:20px;}
  .filters.open{display:block;}
  .filters-toggle{display:flex;}
  .product-detail{grid-template-columns:1fr;gap:24px;}
  .cart-layout, .checkout-layout{grid-template-columns:1fr;}
  .footer-inner{grid-template-columns:1fr 1fr;}
}
@media (max-width:720px){
  .burger{display:flex;}
  .main-nav{
    position:fixed;top:0;left:-280px;width:280px;height:100%;background:#fff;
    flex-direction:column;padding:80px 24px;gap:4px;transition:left .25s;z-index:100;
    box-shadow:6px 0 30px rgba(0,0,0,.1);
    padding-top:max(80px, calc(env(safe-area-inset-top) + 60px));
  }
  .main-nav a{padding:12px 0;font-size:15px;}
  .main-nav.open{left:0;}
  .nav-close{display:flex;}
  .search-toggle{display:flex;}
  .search-form{
    display:none;position:absolute;top:100%;left:0;right:0;width:auto;
    border-radius:0;padding:12px 16px;box-shadow:0 8px 20px rgba(0,0,0,.12);
    z-index:60;
  }
  .search-form.open{display:flex;}
  .header-inner{gap:12px;}
  .footer-inner{grid-template-columns:1fr;}
  .form-row{grid-template-columns:1fr;}
  .cart-item{grid-template-columns:70px 1fr auto;gap:10px;}
  .cart-item img{width:70px;height:70px;}
  .site-footer{padding-bottom:env(safe-area-inset-bottom);}
  .flash-container{
    left:12px;right:12px;max-width:none;top:calc(env(safe-area-inset-top) + 92px);
  }
  .product-detail{gap:20px;}
  .hero-content{padding:44px 20px;}
  .section{padding:40px 0;}
  .whatsapp-float{width:50px;height:50px;right:14px;bottom:calc(14px + env(safe-area-inset-bottom));}
  .whatsapp-float svg{width:26px;height:26px;}
  body.has-sticky-buybar .whatsapp-float{bottom:calc(78px + env(safe-area-inset-bottom));}
  /* Cards bleed to the screen edge and peek slightly, so it reads as "drag me". */
  .category-grid{gap:14px;margin:0 -24px;padding:0 24px 2px;}
  .category-card{flex:0 0 46%;}
  .toolbar{flex-wrap:wrap;gap:10px;}
}

@media (max-width:400px){
  .container, .cart-page, .checkout-page{padding-left:16px;padding-right:16px;}
  .category-grid{margin:0 -16px;padding:0 16px 6px;}
  .category-card{flex:0 0 62%;}
  .product-grid{gap:16px 12px;}
  .size-btn{min-width:42px;padding:8px;}
}

/* ---------- CMS home builder: split (image+text) & features bar ---------- */
.split-block{
  display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:center;max-width:1280px;margin:0 auto;
}
.split-block.reverse{direction:rtl;}
.split-block.reverse > *{direction:ltr;}
.split-image{aspect-ratio:4/3;border-radius:var(--radius);overflow:hidden;background:var(--color-accent);}
.split-image img{width:100%;height:100%;object-fit:cover;}
.split-text h2{font-family:var(--font-display);font-weight:700;text-transform:uppercase;letter-spacing:-.005em;font-size:26px;margin:0 0 14px;}
.split-text p{font-size:15px;line-height:1.7;margin:0 0 20px;color:inherit;opacity:.85;}

.features-bar{
  max-width:1280px;margin:0 auto;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:22px;
}
.feature-item{display:flex;gap:12px;align-items:flex-start;}
.feature-icon{font-size:26px;line-height:1;flex-shrink:0;}
.feature-item strong{display:block;font-size:14.5px;margin-bottom:2px;}
.feature-item p{margin:0;font-size:13px;opacity:.75;line-height:1.5;}

.promo-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0;
  border-top:1px solid var(--line);
}
.promo-grid-item{
  padding:32px 28px;border-left:1px solid var(--line);
}
.promo-grid-item:first-child{border-left:none;}
.promo-grid-item h3{font-family:var(--font-display);font-weight:700;text-transform:uppercase;letter-spacing:.01em;font-size:19px;margin:0 0 8px;}
.promo-grid-item p{font-size:14px;color:var(--ink-soft);line-height:1.55;margin:0 0 16px;}
.promo-grid-link{font-size:13.5px;font-weight:600;text-decoration:underline;text-underline-offset:3px;color:var(--ink);}
.promo-grid-link:hover{color:var(--color-secondary);}

@media (max-width:720px){
  .split-block{grid-template-columns:1fr;gap:20px;}
  .split-block.reverse{direction:ltr;}
  .features-bar{grid-template-columns:1fr 1fr;gap:16px;}
  .promo-grid{grid-template-columns:1fr;}
  .promo-grid-item{border-left:none;border-top:1px solid var(--line);}
  .promo-grid-item:first-child{border-top:none;}
}
@media (max-width:480px){
  .features-bar{grid-template-columns:1fr;}
}

