.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider {
  width: 100%;
  padding: var(--space-md) 0 var(--space-xl);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-inner {
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 clamp(16px, 5vw, 80px);
  display: flex;
  flex-direction: column;
  gap: var(--space-lg);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-md);
  flex-wrap: wrap;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-title {
  margin: 0;
  font-family: var(--font-display);
  /* Site-wide typography pass: matches MultiTabProductSlider's own
     section-heading fix (mobil 20px / masaüstü 26px) — this section
     is part of the same homepage-section-heading family, now a
     literal target instead of the shared --text-section-heading
     clamp (28-38px). */
  font-size: 20px;
  font-weight: var(--font-weight-section-display);
  line-height: 1.2;
  color: var(--blog-slider-heading-color, var(--color-text-primary));
}

@media (min-width: 1024px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-title {
    font-size: 26px;
    line-height: 1.15;
  }
}

/* Wraps the title (and optional description) as one flex child of
   .blog-slider-header, so the existing title/view-all row layout is
   untouched — this is purely an internal stacking group. With a single
   child (no description) the column + gap have no visual effect, so an
   empty sectionDescription renders identically to before this prop
   existed. */
.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-heading {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
  min-width: 0;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-description {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: 1.5;
  color: var(--color-text-secondary);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  color: var(--color-text-primary);
  font-family: var(--font-label);
  font-size: var(--text-label);
  font-weight: 500;
  text-decoration: none;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--color-border);
  transition: border-color 200ms ease, color 200ms ease;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all:hover {
  color: var(--color-accent-dark);
  border-bottom-color: var(--color-accent);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all svg {
  transition: transform 200ms ease;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all:hover svg {
  transform: translateX(3px);
}

@media (max-width: 767px) {
  /* Compact editorial-rail header: the 40px header->track gap
     (--space-lg) reads as hero-section spacing on a narrow screen —
     tightened here only, desktop/tablet keep the value above. Placed
     AFTER the base .blog-slider-header/-heading/-title/-description/
     -view-all rules above (not before them) — at equal specificity
     (1 class each) the later declaration in the compiled file wins
     regardless of the media query, so a mobile override placed BEFORE
     an unconditional base rule of the same specificity is silently
     beaten by it at every viewport, mobile included. */
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-inner {
    gap: var(--space-sm);
  }

  /* Title + "Tümünü Gör" on one row, description spanning full width
     below — same DOM as desktop/tablet (no JSX/structure change,
     .blog-slider-heading still wraps title+description in the
     markup), just re-laid-out via CSS grid on mobile only.
     display:contents on .blog-slider-heading removes ITS OWN box so
     its children (title, description) become direct grid items of
     .blog-slider-header instead, placeable into their own grid-areas
     alongside the view-all link — desktop's flex layout on
     .blog-slider-header (above, outside this media query) is
     completely untouched. */
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-header {
    display: grid;
    grid-template-columns: 1fr auto;
    grid-template-areas:
      "title  viewall"
      "desc   desc";
    align-items: center;
    column-gap: var(--space-sm);
    row-gap: var(--space-xs);
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-heading {
    display: contents;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-title {
    grid-area: title;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-description {
    grid-area: desc;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all {
    grid-area: viewall;
    align-self: center;
  }
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-empty {
  margin: 0;
  padding: var(--space-2xl) 0;
  text-align: center;
  font-family: var(--font-body);
  font-size: var(--text-body-lg);
  color: var(--color-text-muted);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-viewport {
  position: relative;
  outline: none;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-viewport:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 4px;
  border-radius: 2px;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-track-wrap {
  overflow: hidden;
  width: 100%;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-track {
  display: flex;
  width: 100%;
  transition: transform 400ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
  will-change: transform;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-slide {
  flex: 0 0 calc(100% / var(--blog-slider-visible, 1));
  min-width: 0;
  padding: 0 calc(var(--space-md) / 2);
  box-sizing: border-box;
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 500ms ease-out, transform 500ms ease-out;
  transition-delay: var(--blog-slide-delay, 0ms);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider[data-revealed="true"] .blog-slider-slide {
  opacity: 1;
  transform: translateY(0);
}

/* Negative outer padding so cards align with container edges */
.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-track {
  margin: 0 calc(var(--space-md) / -2);
}

/* ─── Mobile (<=767px): native peek rail ──────────────────────────
   Entirely separate markup from .blog-slider-track above (see
   index.tsx's isMobileRail branch) — plain overflow-x + scroll-snap,
   no JS transform, no arrows, no dots. flex-basis 82% + the gap below
   is what leaves ~15-18% of the next card peeking on screen. */
@media (max-width: 767px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-rail {
    display: flex;
    flex-wrap: nowrap;
    gap: var(--space-sm);
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    padding-bottom: 4px;
    outline: none;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-rail:focus-visible {
    outline: 2px solid var(--color-accent);
    outline-offset: 4px;
    border-radius: 2px;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-rail::-webkit-scrollbar {
    display: none;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-rail-slide {
    flex: 0 0 82%;
    min-width: 0;
    scroll-snap-align: start;
  }

  /* Targets an editorial ~4:3 (width:height) landscape crop — wider
     than the previous max-height:60vw shortcut, still well short of
     the old near-square/full-viewport image. object-fit:cover on the
     <img> (BlogCard, untouched) crops to fill either way.
     !important is required here specifically because BlogCard sets
     aspect-ratio via an INLINE style (style={{aspectRatio}}, driven
     by the Studio cardAspectRatio prop) — inline styles always beat
     external rules regardless of selector specificity, so there is no
     specificity-only way to override it. This is scoped as narrowly
     as the framework's own compiled CSS scoping allows: only
     .blog-slider-rail .blog-card-media, only <768px, only inside this
     component's own compiled bundle — it cannot reach BlogList or
     BlogDetail (separate bundles), and does not touch BlogCard's
     Studio-configurable cardAspectRatio prop value itself, which
     stays intact for every other placement (including this section's
     own tablet/desktop track). */
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-rail .blog-card-media {
    aspect-ratio: 4 / 3 !important;
  }
}

/* Mobile-first: 1 card, partial peek on tablet handled by visible count + extra peek padding */
.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-viewport {
  --blog-arrow-size: 44px;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow {
  position: absolute;
  top: 28%;
  transform: translateY(-50%);
  width: var(--blog-arrow-size);
  height: var(--blog-arrow-size);
  border-radius: 999px;
  background: var(--color-surface);
  color: var(--color-text-primary);
  border: 1px solid var(--color-border);
  box-shadow: 0 8px 40px rgba(0, 0, 0, 0.10);
  cursor: pointer;
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 2;
  transition: opacity 200ms ease, background-color 200ms ease, color 200ms ease, transform 200ms ease;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow:hover:not([disabled]) {
  background: var(--color-accent);
  color: #ffffff;
  border-color: var(--color-accent);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow[disabled] {
  opacity: 0.3;
  cursor: not-allowed;
  pointer-events: none;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--prev {
  left: 0;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--next {
  right: 0;
}

/* Tablet: 2 cards */
@media (min-width: 768px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider {
    padding: var(--space-lg) 0 var(--space-2xl);
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow {
    display: inline-flex;
    width: 48px;
    height: 48px;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--prev {
    left: -8px;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--next {
    right: -8px;
  }
}

/* Desktop: 3 cards, arrows further outside */
@media (min-width: 1024px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider {
    padding: var(--space-lg) 0 var(--space-2xl);
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--prev {
    left: -24px;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow--next {
    right: -24px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-track {
    transition: none;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-slide {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all svg, .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-arrow {
    transition: none;
  }

  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-slider-view-all:hover svg {
    transform: none;
  }
}

/* ============================================================ */
/* BlogCard (sub-component)                                     */
/* ============================================================ */
.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  background: transparent;
  outline: none;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 4px;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-media {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--color-surface-alt);
  border-radius: 2px;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 400ms ease;
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-image--empty {
  background: linear-gradient(
    135deg,
    var(--color-surface-alt) 0%,
    var(--color-border) 100%
  );
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card:hover .blog-card-image:not(.blog-card-image--empty) {
  transform: scale(1.04);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
  padding-top: var(--space-md);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-category {
  align-self: flex-start;
  background: var(--color-accent-light);
  color: var(--color-accent-dark);
  font-family: var(--font-label);
  font-size: var(--text-label);
  font-weight: 500;
  padding: 4px 10px;
  border-radius: 2px;
  line-height: 1.4;
}

/* Site-wide typography pass: aligned to BlogCard/styles.css's real
   values (20px mobile / 24px desktop, same line-height treatment) —
   this component's own scoped copy had drifted onto the --text-h3
   clamp (20-28px) with a different line-height, so the same "blog
   kartı başlığı" role read at a different size here than on
   BlogList/BlogDetail. "Aynı işlevi gören metinler aynı standardı
   kullansın." */
.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-title {
  margin: 0;
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 400;
  line-height: 1.25;
  color: var(--color-text-primary);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: color 200ms ease;
}

@media (max-width: 767px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-title {
    line-height: 1.35;
  }
}

@media (min-width: 1024px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-title {
    font-size: 24px;
  }
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card:hover .blog-card-title {
  color: var(--color-accent-dark);
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-excerpt {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--text-small);
  line-height: 1.5;
  color: var(--color-text-secondary);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

@media (min-width: 1024px) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-excerpt {
    font-size: 15px;
  }
}

.cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-date {
  margin-top: var(--space-xs);
  font-family: var(--font-label);
  font-size: var(--text-label);
  font-weight: 500;
  color: var(--color-text-muted);
  /* Hidden in this homepage BlogSlider specifically (both breakpoints)
     — this is a scoped duplicate of BlogCard's own styles.css rule,
     compiled only into this component's own bundle, so BlogList and
     BlogDetail (which still render their own copy of .blog-card-date
     unaffected) keep showing dates exactly as before. The date is
     still computed/rendered in the DOM here, just not painted — no
     change to the actual blog article system or its data. */
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-image {
    transition: none;
  }
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card:hover .blog-card-image {
    transform: none;
  }
  .cc_zRr7AL87AP_p2Gk1e7UKh .blog-card-title {
    transition: none;
  }
}
