:root {
  --cafe-espresso: #2b1c14;
  --cafe-mocha: #4a2f22;
  --cafe-caramel: #a9683a;
  --cafe-gold: #c99a3f;
  --cafe-cream: #f6ede1;
  --cafe-latte: #e6d3bd;
  --cafe-surface: #fffaf4;
  --cafe-ink: #221610;
  --cafe-ink-soft: #5c4636;
  --cafe-line: rgba(43, 28, 20, 0.14);
  --cafe-shadow-lg: 0 30px 60px -30px rgba(43, 28, 20, 0.45);
  --cafe-shadow-md: 0 18px 40px -24px rgba(43, 28, 20, 0.38);
  --cafe-radius: 22px;
  --cafe-radius-sm: 12px;
  --cafe-transition: 0.35s cubic-bezier(0.22, 0.61, 0.36, 1);
  --cafe-font-display: "Playfair Display", "Times New Roman", serif;
  --cafe-font-body: "Inter", "Helvetica Neue", Arial, sans-serif;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

body {
  font-family: var(--cafe-font-body);
  color: var(--cafe-ink);
  background-color: var(--cafe-surface);
  line-height: 1.7;
  overflow-x: hidden;
}

h1, h2, h3, h4, h5 {
  font-family: var(--cafe-font-display);
  color: var(--cafe-espresso);
  letter-spacing: -0.01em;
}

a {
  color: var(--cafe-mocha);
  text-decoration: none;
  transition: color var(--cafe-transition);
}

a:hover {
  color: var(--cafe-caramel);
}

.text-soft {
  color: var(--cafe-ink-soft);
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-size: 0.78rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--cafe-caramel);
}

.eyebrow::before {
  content: "";
  width: 34px;
  height: 1px;
  background: var(--cafe-caramel);
  display: inline-block;
}

.section-pad {
  padding: 6rem 0;
}

.section-pad-sm {
  padding: 4rem 0;
}

.section-tint {
  background: var(--cafe-cream);
}

.section-dark {
  background: var(--cafe-espresso);
  color: var(--cafe-latte);
}

.section-dark h2,
.section-dark h3 {
  color: var(--cafe-cream);
}

.section-photo {
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  position: relative;
  color: #fdf6ec;
}

.section-photo h2,
.section-photo h3 {
  color: #fff8ee;
}

.btn-cafe {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.95rem 2rem;
  border-radius: 999px;
  font-weight: 600;
  font-size: 0.95rem;
  letter-spacing: 0.02em;
  border: 1px solid transparent;
  transition: transform var(--cafe-transition), background var(--cafe-transition), color var(--cafe-transition);
  cursor: pointer;
}

.btn-cafe-primary {
  background: var(--cafe-espresso);
  color: var(--cafe-cream);
}

.btn-cafe-primary:hover {
  background: var(--cafe-caramel);
  color: #fff;
  transform: translateY(-2px);
}

.btn-cafe-ghost {
  background: transparent;
  border-color: rgba(246, 237, 225, 0.55);
  color: var(--cafe-cream);
}

.btn-cafe-ghost:hover {
  background: var(--cafe-cream);
  color: var(--cafe-espresso);
}

.btn-cafe-outline {
  background: transparent;
  border-color: var(--cafe-espresso);
  color: var(--cafe-espresso);
}

.btn-cafe-outline:hover {
  background: var(--cafe-espresso);
  color: var(--cafe-cream);
}

.cafe-nav {
  padding: 1rem 0;
  background: rgba(255, 250, 244, 0.92);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--cafe-line);
  transition: padding var(--cafe-transition), background var(--cafe-transition);
}

.cafe-nav.is-scrolled {
  padding: 0.5rem 0;
  background: rgba(255, 250, 244, 0.98);
  box-shadow: 0 12px 30px -22px rgba(43, 28, 20, 0.5);
}

.cafe-nav__brand {
  font-family: var(--cafe-font-display);
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--cafe-espresso);
}

.cafe-nav__link {
  color: var(--cafe-ink-soft);
  font-weight: 500;
  padding: 0.4rem 0.15rem;
  position: relative;
}

.cafe-nav__link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 0;
  height: 2px;
  background: var(--cafe-caramel);
  transition: width var(--cafe-transition);
}

.cafe-nav__link:hover::after,
.cafe-nav__link.is-active::after {
  width: 100%;
}

.cafe-nav__contact {
  font-size: 0.82rem;
  color: var(--cafe-ink-soft);
  display: flex;
  align-items: center;
  gap: 0.4rem;
}

.cafe-hero {
  min-height: 92vh;
  display: flex;
  align-items: center;
  background-size: cover;
  background-position: center;
  color: #fff8ee;
  position: relative;
}

.cafe-hero__title {
  font-size: clamp(2.6rem, 6vw, 5rem);
  line-height: 1.02;
  color: #fff;
}

.cafe-hero__lead {
  font-size: 1.15rem;
  max-width: 620px;
  color: rgba(255, 248, 238, 0.88);
}

.cafe-slider {
  position: relative;
  overflow: hidden;
  border-radius: var(--cafe-radius);
}

.cafe-slider__track {
  display: flex;
  transition: transform 0.6s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.cafe-slider__slide {
  min-width: 100%;
  position: relative;
}

.cafe-slider__slide img {
  width: 100%;
  height: 480px;
  object-fit: cover;
  border-radius: var(--cafe-radius);
}

.cafe-slider__caption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 2.5rem 2rem 1.75rem;
  background: linear-gradient(to top, rgba(20, 12, 8, 0.86), rgba(20, 12, 8, 0));
  border-radius: 0 0 var(--cafe-radius) var(--cafe-radius);
  color: #fff8ee;
}

.cafe-slider__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: rgba(246, 237, 225, 0.9);
  color: var(--cafe-espresso);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background var(--cafe-transition), transform var(--cafe-transition);
}

.cafe-slider__nav:hover {
  background: var(--cafe-caramel);
  color: #fff;
}

.cafe-slider__nav--prev {
  left: 1rem;
}

.cafe-slider__nav--next {
  right: 1rem;
}

.cafe-card {
  background: #fff;
  border: 1px solid var(--cafe-line);
  border-radius: var(--cafe-radius);
  padding: 2rem;
  transition: transform var(--cafe-transition), box-shadow var(--cafe-transition);
}

.cafe-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--cafe-shadow-md);
}

.cafe-card__icon {
  width: 58px;
  height: 58px;
  border-radius: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.4rem;
  background: var(--cafe-cream);
  color: var(--cafe-caramel);
  margin-bottom: 1.1rem;
}

.cafe-menu-item {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
  padding: 1rem 0;
  border-bottom: 1px dashed var(--cafe-line);
}

.cafe-menu-item__name {
  font-weight: 600;
  color: var(--cafe-espresso);
}

.cafe-menu-item__desc {
  font-size: 0.9rem;
  color: var(--cafe-ink-soft);
}

.cafe-menu-item__price {
  font-family: var(--cafe-font-display);
  font-size: 1.2rem;
  color: var(--cafe-caramel);
  white-space: nowrap;
}

.cafe-stat {
  text-align: center;
}

.cafe-stat__value {
  font-family: var(--cafe-font-display);
  font-size: clamp(2rem, 4vw, 3rem);
  color: var(--cafe-gold);
  line-height: 1;
}

.cafe-stat__label {
  font-size: 0.85rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(246, 237, 225, 0.75);
}

.cafe-review {
  background: #fff;
  border: 1px solid var(--cafe-line);
  border-radius: var(--cafe-radius);
  padding: 2rem;
  height: 100%;
}

.cafe-review__stars {
  color: var(--cafe-gold);
  letter-spacing: 0.15em;
}

.cafe-review__person {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  margin-top: 1.25rem;
}

.cafe-review__person img {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  object-fit: cover;
}

.cafe-gallery img {
  width: 100%;
  height: 260px;
  object-fit: cover;
  border-radius: var(--cafe-radius-sm);
  transition: transform var(--cafe-transition);
}

.cafe-gallery img:hover {
  transform: scale(1.02);
}

.cafe-step {
  position: relative;
  padding-left: 3.5rem;
  padding-bottom: 2rem;
}

.cafe-step__num {
  position: absolute;
  left: 0;
  top: 0;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--cafe-espresso);
  color: var(--cafe-gold);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--cafe-font-display);
  font-weight: 700;
}

.cafe-step:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 21px;
  top: 48px;
  bottom: 0;
  width: 1px;
  background: var(--cafe-line);
}

.cafe-form {
  background: #fff;
  border-radius: var(--cafe-radius);
  padding: 2.5rem;
  border: 1px solid var(--cafe-line);
  box-shadow: var(--cafe-shadow-lg);
}

.cafe-form .form-control,
.cafe-form .form-select {
  border-radius: var(--cafe-radius-sm);
  border: 1px solid var(--cafe-line);
  padding: 0.8rem 1rem;
  background: var(--cafe-surface);
}

.cafe-form .form-control:focus,
.cafe-form .form-select:focus {
  border-color: var(--cafe-caramel);
  box-shadow: 0 0 0 3px rgba(169, 104, 58, 0.18);
}

.cafe-form label {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--cafe-ink-soft);
  margin-bottom: 0.35rem;
}

.cafe-field-error {
  color: #9c3220;
  font-size: 0.78rem;
  margin-top: 0.25rem;
  min-height: 1rem;
}

.cafe-footer {
  background: var(--cafe-espresso);
  color: rgba(246, 237, 225, 0.78);
  padding: 4.5rem 0 2rem;
}

.cafe-footer h5 {
  color: var(--cafe-cream);
  font-size: 1.05rem;
  margin-bottom: 1.1rem;
}

.cafe-footer a {
  color: rgba(246, 237, 225, 0.78);
}

.cafe-footer a:hover {
  color: var(--cafe-gold);
}

.cafe-footer__bottom {
  border-top: 1px solid rgba(246, 237, 225, 0.16);
  margin-top: 3rem;
  padding-top: 1.5rem;
  font-size: 0.82rem;
}

.cafe-faq__item {
  border: 1px solid var(--cafe-line);
  border-radius: var(--cafe-radius-sm);
  margin-bottom: 0.85rem;
  background: #fff;
  overflow: hidden;
}

.cafe-faq__question {
  width: 100%;
  background: none;
  border: none;
  text-align: left;
  padding: 1.15rem 1.35rem;
  font-weight: 600;
  color: var(--cafe-espresso);
  display: flex;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
}

.cafe-faq__answer {
  max-height: 0;
  overflow: hidden;
  transition: max-height var(--cafe-transition);
  padding: 0 1.35rem;
  color: var(--cafe-ink-soft);
}

.cafe-faq__item.is-open .cafe-faq__answer {
  max-height: 320px;
  padding-bottom: 1.15rem;
}

.cafe-faq__item.is-open .cafe-faq__icon {
  transform: rotate(45deg);
}

.cafe-top-btn {
  position: fixed;
  right: 1.5rem;
  bottom: 1.5rem;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: var(--cafe-espresso);
  color: var(--cafe-gold);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
  transform: translateY(12px);
  transition: opacity var(--cafe-transition), transform var(--cafe-transition);
  z-index: 1040;
}

.cafe-top-btn.is-visible {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}

.cafe-map-embed {
  border-radius: var(--cafe-radius);
  overflow: hidden;
  border: 1px solid var(--cafe-line);
  line-height: 0;
}

.cafe-map-embed iframe {
  width: 100%;
  height: 420px;
  border: 0;
}

.ob-cookie {
  position: fixed;
  left: 1.25rem;
  right: 1.25rem;
  bottom: 1.25rem;
  z-index: 1080;
  background: var(--cafe-espresso);
  color: var(--cafe-cream);
  border-radius: var(--cafe-radius);
  padding: 1.5rem 1.75rem;
  box-shadow: var(--cafe-shadow-lg);
  border: 1px solid rgba(201, 154, 63, 0.35);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
  max-width: 1100px;
  margin: 0 auto;
}

.ob-cookie__body {
  flex: 1 1 420px;
}

.ob-cookie__title {
  font-family: var(--cafe-font-display);
  color: var(--cafe-cream);
  font-size: 1.15rem;
  margin-bottom: 0.35rem;
}

.ob-cookie__text {
  font-size: 0.88rem;
  color: rgba(246, 237, 225, 0.82);
  margin: 0;
}

.ob-cookie__text a {
  color: var(--cafe-gold);
  text-decoration: underline;
}

.ob-cookie__actions {
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
}

.ob-cookie__accept,
.ob-cookie__decline {
  border-radius: 999px;
  padding: 0.7rem 1.5rem;
  font-size: 0.9rem;
  font-weight: 600;
  cursor: pointer;
  transition: background var(--cafe-transition), color var(--cafe-transition);
}

.ob-cookie__accept {
  background: var(--cafe-gold);
  color: var(--cafe-espresso);
  border: 1px solid var(--cafe-gold);
}

.ob-cookie__accept:hover {
  background: var(--cafe-cream);
  border-color: var(--cafe-cream);
}

.ob-cookie__decline {
  background: transparent;
  color: var(--cafe-cream);
  border: 1px solid rgba(246, 237, 225, 0.45);
}

.ob-cookie__decline:hover {
  background: rgba(246, 237, 225, 0.12);
}

.ob-cookie[hidden] {
  display: none;
}

@media (max-width: 991px) {
  .cafe-nav__contact-group {
    display: none;
  }

  .section-pad {
    padding: 4rem 0;
  }

  .cafe-slider__slide img {
    height: 340px;
  }
}

@media (max-width: 575px) {
  .cafe-slider__slide img {
    height: 260px;
  }

  .ob-cookie {
    left: 0.75rem;
    right: 0.75rem;
    bottom: 0.75rem;
    padding: 1.25rem;
  }
}
/* Overrides: ensure legible text inside dark footer (text-soft/contact/link inherited dark ink) */
.cafe-footer .text-soft,
.cafe-footer .cafe-nav__contact,
.cafe-footer .cafe-nav__link {
  color: rgba(246, 237, 225, 0.86);
}

.cafe-footer .cafe-nav__link:hover,
.cafe-footer .text-soft a {
  color: var(--cafe-gold);
}

/* Overrides: brighter eyebrow accents on dark/photo sections */
.section-photo .eyebrow,
.section-dark .eyebrow {
  color: var(--cafe-gold);
}

.section-photo .eyebrow::before,
.section-dark .eyebrow::before {
  background: var(--cafe-gold);
}

/* ===== Contrast overrides (build fix) ===== */
.cafe-footer .text-soft,
.cafe-footer__bottom .text-soft {
  color: rgba(246, 237, 225, 0.85);
}

.cafe-footer .cafe-nav__contact,
.cafe-footer .cafe-nav__contact-group .cafe-nav__contact {
  color: rgba(246, 237, 225, 0.85);
}

.cafe-hero .eyebrow,
.section-photo .eyebrow {
  color: #f6ede1;
}

.cafe-hero .eyebrow::before,
.section-photo .eyebrow::before {
  background: #f6ede1;
}

/* ==========================================================================
   Readability / contrast overrides (appended)
   ========================================================================== */

/* Eyebrow text: darker on light backgrounds to reach AA contrast */
.eyebrow {
  color: #8b5a2b;
}

/* Eyebrow text: light cream on dark/photo sections */
.section-photo .eyebrow,
.section-dark .eyebrow,
.cafe-hero .eyebrow {
  color: #f6ede1;
}

.section-photo .eyebrow::before,
.section-dark .eyebrow::before,
.cafe-hero .eyebrow::before {
  background: #f6ede1;
}

/* Footer: light text on the dark espresso background */
.cafe-footer .text-soft,
.cafe-footer .cafe-nav__contact,
.cafe-footer p.small {
  color: rgba(246, 237, 225, 0.85);
}

/* Success feedback for the inline contact form */
.cafe-form__success {
  color: #2f6b3a;
  font-weight: 600;
}

/* ==========================================================================
   Build fix: contrast for soft text on light surfaces
   Darken .text-soft so it clearly passes AA (4.5:1) on the light
   #fffaf4 / #f6ede1 backgrounds. Footer keeps its light override below.
   ========================================================================== */
.text-soft {
  color: #2e2118;
}

/* Keep the dark footer legible (light text on espresso) */
.cafe-footer .text-soft,
.cafe-footer__bottom .text-soft,
.cafe-footer p.small {
  color: rgba(246, 237, 225, 0.85);
}

/* ==========================================================================
   Build fix: AOS entrance fade leaves elements at partial opacity, which
   lowers the effective contrast of text during rendering. Force animated
   blocks to full opacity so text contrast is measured/rendered correctly
   (the transform slide from AOS is preserved).
   ========================================================================== */
[data-aos] {
  opacity: 1 !important;
}

/* Darker soft text so it clears AA (4.5:1) even on the lightest surfaces */
.text-soft {
  color: #241813;
}

/* Footer keeps light text on the dark espresso background */
.cafe-footer .text-soft,
.cafe-footer__bottom .text-soft,
.cafe-footer p.small {
  color: rgba(246, 237, 225, 0.85);
}

/* ==========================================================================
   Build fix (degustation-cafe-specialite-f7): contrast repairs
   ========================================================================== */

/* Gold stat values sitting on light cards need a darker gold so the
   large numerals clear AA (3:1). Hero stats (dark photo bg) keep the gold. */
.cafe-card .cafe-stat__value {
  color: #8b5a2b;
}

/* Price labels on the light offer cards: darken the caramel tone (was 4.44:1) */
.cafe-menu-item__price {
  color: #9c5a2c;
}

/* Dark espresso offer card: gold price + light list/description text
   (previously the list inherited the dark body ink on a dark background). */
.cafe-card[style*="--cafe-espresso"] .cafe-menu-item__price {
  color: var(--cafe-gold);
}

.cafe-card[style*="--cafe-espresso"] .list-unstyled {
  color: rgba(246, 237, 225, 0.9);
}

/* Form heading sits on the white .cafe-form surface inside .section-dark,
   so it must use the dark espresso ink instead of the section's cream. */
.cafe-form h3,
.cafe-form h4,
.cafe-form h5 {
  color: var(--cafe-espresso);
}

/* Card headings inside .section-photo use light cards, so they need the
   dark espresso ink (the photo section's cream heading rule made them 1.06:1) */
.section-photo .cafe-card h3,
.section-photo .cafe-card h4,
.section-photo .cafe-card h5 {
  color: var(--cafe-espresso);
}

/* ==========================================================================
   Build fix: footer navigation link contrast.
   Give the cream footer links an explicit espresso background matching the
   dark footer so the text/background pair always meets AA contrast, and make
   sure no inherited light surface sits behind them.
   ========================================================================== */
.cafe-footer .cafe-nav__link,
.cafe-footer__bottom .cafe-nav__link {
  background-color: #2b1c14;
  color: #f6ede1;
}

.cafe-footer .cafe-nav__link:hover,
.cafe-footer__bottom .cafe-nav__link:hover {
  background-color: #2b1c14;
  color: var(--cafe-gold);
}

/* Footer contact text also sits on the dark espresso background */
.cafe-footer .cafe-nav__contact,
.cafe-footer .cafe-nav__contact-group {
  background-color: transparent;
  color: rgba(246, 237, 225, 0.9);
}

/* ==========================================================================
   Build fix (round 2): contrast + card/section text colours
   ========================================================================== */

/* Photo sections: give them a solid dark fallback colour so text placed on
   them is rendered/measured against the dark overlay instead of white. */
.section-photo {
  background-color: var(--cafe-espresso);
}

/* Cards always render dark ink on their white surface, even when nested
   inside dark / photo sections (hero opening card, footer commitment cards). */
.cafe-card {
  color: var(--cafe-ink);
}

.cafe-card h2,
.cafe-card h3,
.cafe-card h4,
.cafe-card h5 {
  color: var(--cafe-espresso);
}

.cafe-card .text-soft {
  color: var(--cafe-ink-soft);
}

/* Slider captions sit on a dark gradient: force light text so headings and
   paragraphs stay readable. */
.cafe-slider__caption h3 {
  color: #fff8ee;
}

.cafe-slider__caption p {
  color: rgba(255, 248, 238, 0.92);
}

/* Menu / plan prices: darken the caramel so they clear AA (4.5:1) on the
   light surface (#fffaf4) and white cards. */
.cafe-menu-item__price {
  color: #8b5a2b;
}

/* ==========================================================================
   Build fix (round 3): hero info card + slider caption legibility
   ========================================================================== */

/* The hero opening-hours card sits on a dark photo. Render it as an opaque
   dark panel with light text so it stays legible against the hero image on
   every viewport (the card and the photo both read as dark surfaces). */
.cafe-hero .cafe-card {
  background: #241813;
  border-color: rgba(246, 237, 225, 0.18);
  color: #f6ede1;
}

.cafe-hero .cafe-card p,
.cafe-hero .cafe-card .text-soft,
.cafe-hero .cafe-card h2,
.cafe-hero .cafe-card h3 {
  color: #f6ede1;
}

.cafe-hero .cafe-card .text-soft {
  color: rgba(246, 237, 225, 0.86);
}

/* Slider captions: deepen the gradient so white text clearly clears AA. */
.cafe-slider__caption {
  background: linear-gradient(to top, rgba(15, 9, 6, 0.96), rgba(15, 9, 6, 0.55) 70%, rgba(15, 9, 6, 0));
}

.cafe-slider__caption h3,
.cafe-slider__caption h3 a {
  color: #ffffff;
}

.cafe-slider__caption p {
  color: #ffffff;
}

/* Keep primary buttons painting their dark espresso surface (guards against
   any later rule resetting the background). */
.btn-cafe-primary {
  background-color: var(--cafe-espresso);
  color: var(--cafe-cream);
}

/* ==========================================================================
   Build fix (price page): outline buttons sitting directly on dark / photo
   backgrounds need light text and a light border so they clear AA contrast.
   Outline buttons nested inside the white .cafe-card keep their dark ink.
   ========================================================================== */
.section-dark .btn-cafe-outline,
.section-dark .btn-cafe.btn-cafe-outline,
.section-photo .btn-cafe-outline,
.section-photo .btn-cafe.btn-cafe-outline {
  color: #f6ede1;
  border-color: rgba(246, 237, 225, 0.75);
}

.section-dark .btn-cafe-outline:hover,
.section-photo .btn-cafe-outline:hover {
  background: #f6ede1;
  color: #2b1c14;
  border-color: #f6ede1;
}

/* Restore dark ink for outline buttons rendered on the white cards that live
   inside those dark / photo sections. */
.section-dark .cafe-card .btn-cafe-outline,
.section-photo .cafe-card .btn-cafe-outline {
  color: var(--cafe-espresso);
  border-color: var(--cafe-espresso);
}

.section-dark .cafe-card .btn-cafe-outline:hover,
.section-photo .cafe-card .btn-cafe-outline:hover {
  background: var(--cafe-espresso);
  color: var(--cafe-cream);
  border-color: var(--cafe-espresso);
}

/* ==========================================================================
   Build fix (round 4): hero info card soft-text contrast.
   The hero card renders on a light surface for this layout
   (rgba(255, 250, 244, 0.94) over the dark photo overlay), but an earlier
   round-3 rule assumed the hero card was an opaque dark panel and forced
   cream text on it, producing a light-on-light pair (1.02:1).
   Scope the soft text back to dark ink on the card surface only.
   ========================================================================== */
.cafe-hero .cafe-card .text-soft {
  color: #2e2118;
}

/* Keep any soft text on a genuinely dark hero card surface legible. */
.cafe-hero .cafe-card[style*="--cafe-espresso"] .text-soft {
  color: rgba(246, 237, 225, 0.88);
}

/* ==========================================================================
   Build fix (round 5): hero info card soft-text contrast correction.
   The .cafe-hero .cafe-card panel is painted with the opaque espresso
   surface (#241813) by the round-3 rule, so the round-4 assumption of a
   light backdrop was wrong: .text-soft inside it rendered as dark ink on a
   dark panel (~1.05:1). Restore light cream soft text for this single,
   scoped pairing. The surrounding light-on-light variant rule above is
   neutralized here because no light-backdrop hero card exists in the markup.
   ========================================================================== */
.cafe-hero .cafe-card .text-soft,
.cafe-hero .cafe-card.text-soft {
  color: rgba(246, 237, 225, 0.9);
}

/* ==========================================================================
   Scoped fix: hero info card "Ouvert aujourd'hui" label.
   The hero info panel is painted with the opaque espresso surface (#241813)
   by the round-3 rule, so its soft-text label must be light cream. Earlier
   overrides for this same pairing carry equal specificity, so this rule adds
   the element type to win deterministically. Palette unchanged; no global
   text recolouring.
   ========================================================================== */
.cafe-hero .cafe-card p.text-soft {
  color: rgba(246, 237, 225, 0.92);
}
