/* ============================================================================
   FACE X STUDIOZ - STYLESHEET
   ----------------------------------------------------------------------------
   Tailwind (CDN) handles layout and spacing utilities.
   This file holds the brand tokens, typography, motion and the few component
   classes that Tailwind utilities express badly.

   To rebrand: change the hex values in :root. Everything else follows.
   ========================================================================== */

:root {
  /* --- Surfaces --- */
  --fx-ivory:      #FDFBF7;
  --fx-pearl:      #FFFFFF;
  --fx-sand:       #F4EDE3;
  --fx-beige:      #E7DBCA;

  /* --- Accents --- */
  --fx-champagne:  #E3CC97;
  --fx-gold:       #C6A15B;
  --fx-gold-deep:  #A8853F;

  /* --- Ink --- */
  --fx-taupe:      #8C7B6B;
  --fx-espresso:   #3A2E26;
  --fx-ink:        #241C16;

  /* --- Deep accent, carried over from the printed hair-care card --- */
  --fx-emerald:    #14514A;
  --fx-emerald-dp: #0E3B36;

  --fx-gold-grad:  linear-gradient(135deg, #E3CC97 0%, #C6A15B 45%, #A8853F 100%);
  --fx-shadow-sm:  0 8px 24px -18px rgba(58, 46, 38, .45);
  --fx-shadow:     0 18px 40px -24px rgba(58, 46, 38, .28);
  --fx-shadow-lg:  0 40px 80px -40px rgba(58, 46, 38, .38);

  --fx-ease:       cubic-bezier(.22, 1, .36, 1);
}

/* ---------------------------------------------------------------------------
   BASE
   ------------------------------------------------------------------------- */

* { -webkit-tap-highlight-color: transparent; }

html { scroll-behavior: smooth; }

body {
  background: var(--fx-ivory);
  color: var(--fx-espresso);
  font-family: 'Jost', 'Poppins', ui-sans-serif, system-ui, sans-serif;
  font-weight: 300;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

body.fx-locked { overflow: hidden; }

h1, h2, h3, h4, .display {
  font-family: 'Cormorant Garamond', 'Palatino Linotype', Georgia, serif;
  font-weight: 300;
  line-height: 1.14;
  color: var(--fx-ink);
  letter-spacing: .005em;
}

::selection { background: var(--fx-champagne); color: var(--fx-ink); }

/* Focus ring - visible, on brand, keyboard only */
:focus-visible {
  outline: 2px solid var(--fx-gold);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Slim, warm scrollbar */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--fx-sand); }
::-webkit-scrollbar-thumb { background: var(--fx-beige); border-radius: 99px; }
::-webkit-scrollbar-thumb:hover { background: var(--fx-champagne); }

/* ---------------------------------------------------------------------------
   TYPOGRAPHY HELPERS
   ------------------------------------------------------------------------- */

.eyebrow {
  font-family: 'Jost', sans-serif;
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: .32em;
  color: var(--fx-gold-deep);
}

.eyebrow-light { color: var(--fx-champagne); }

.serif-italic { font-style: italic; font-family: 'Cormorant Garamond', Georgia, serif; }

.text-balance { text-wrap: balance; }

/* Hairline rule with a gold centre diamond */
.gold-rule {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
}
.gold-rule::before,
.gold-rule::after {
  content: '';
  height: 1px;
  width: 62px;
  background: linear-gradient(90deg, transparent, var(--fx-gold));
}
.gold-rule::after { background: linear-gradient(90deg, var(--fx-gold), transparent); }
.gold-rule i {
  width: 6px; height: 6px;
  transform: rotate(45deg);
  background: var(--fx-gold);
  display: block;
}

/* ---------------------------------------------------------------------------
   BUTTONS
   ------------------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: 'Jost', sans-serif;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .18em;
  text-transform: uppercase;
  padding: 16px 34px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background-color .45s var(--fx-ease), color .45s var(--fx-ease),
              border-color .45s var(--fx-ease), box-shadow .45s var(--fx-ease),
              transform .45s var(--fx-ease);
  white-space: nowrap;
}

.btn-gold {
  background: var(--fx-gold-grad);
  color: #fff;
  box-shadow: var(--fx-shadow-sm);
}
.btn-gold:hover { box-shadow: var(--fx-shadow); transform: translateY(-1px); filter: brightness(1.04); }

.btn-outline {
  background: transparent;
  color: var(--fx-ink);
  border-color: var(--fx-beige);
}
.btn-outline:hover { border-color: var(--fx-gold); color: var(--fx-gold-deep); background: var(--fx-pearl); }

.btn-ivory { background: var(--fx-ivory); color: var(--fx-ink); }
.btn-ivory:hover { background: #fff; transform: translateY(-1px); }

.btn-emerald { background: var(--fx-emerald); color: var(--fx-ivory); }
.btn-emerald:hover { background: var(--fx-emerald-dp); transform: translateY(-1px); }

.btn:disabled,
.btn[aria-disabled='true'] {
  opacity: .38;
  cursor: not-allowed;
  transform: none !important;
  box-shadow: none;
}

/* Nav link with a gold underline that wipes in */
.nav-link {
  position: relative;
  font-size: 13px;
  letter-spacing: .1em;
  color: var(--fx-espresso);
  padding: 6px 0;
  transition: color .4s var(--fx-ease);
}
.nav-link::after {
  content: '';
  position: absolute;
  left: 0; bottom: 0;
  height: 1px; width: 100%;
  background: var(--fx-gold);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform .5s var(--fx-ease);
}
.nav-link:hover { color: var(--fx-gold-deep); }
.nav-link:hover::after { transform: scaleX(1); transform-origin: left; }

/* ---------------------------------------------------------------------------
   HEADER
   ------------------------------------------------------------------------- */

.fx-header {
  transition: background-color .5s var(--fx-ease), box-shadow .5s var(--fx-ease),
              padding .5s var(--fx-ease), border-color .5s var(--fx-ease);
  border-bottom: 1px solid transparent;
}
.fx-header.is-scrolled {
  background: rgba(255, 255, 255, .88);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom-color: rgba(231, 219, 202, .8);
  box-shadow: 0 2px 30px -22px rgba(58, 46, 38, .5);
}

.logo-mark {
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-size: 25px;
  letter-spacing: .2em;
  line-height: 1;
  color: var(--fx-ink);
}
.logo-mark span { color: var(--fx-gold); font-style: italic; }
.logo-sub {
  font-size: 8.5px;
  letter-spacing: .42em;
  text-transform: uppercase;
  color: var(--fx-taupe);
  margin-top: 5px;
}

/* Location pill */
.loc-pill {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  border: 1px solid var(--fx-beige);
  background: rgba(255, 255, 255, .7);
  padding: 9px 15px;
  font-size: 12px;
  letter-spacing: .06em;
  color: var(--fx-espresso);
  transition: border-color .4s var(--fx-ease), background-color .4s var(--fx-ease);
}
.loc-pill:hover { border-color: var(--fx-gold); background: #fff; }
.loc-pill .dot {
  width: 6px; height: 6px; border-radius: 99px;
  background: var(--fx-gold);
  box-shadow: 0 0 0 3px rgba(198, 161, 91, .18);
  flex: none;
}

.loc-menu {
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity .35s var(--fx-ease), transform .35s var(--fx-ease), visibility .35s;
}
.loc-menu.is-open { opacity: 1; visibility: visible; transform: translateY(0); }

/* ---------------------------------------------------------------------------
   MOTION - reveal on scroll
   ------------------------------------------------------------------------- */

.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .9s var(--fx-ease), transform .9s var(--fx-ease);
  will-change: opacity, transform;
}
.reveal.is-in { opacity: 1; transform: none; }

/* Applied by ui.js when the reveal observer never fires. Skips the transition
   entirely so the content is readable rather than stuck mid-animation. */
body.fx-no-anim .reveal {
  transition: none !important;
  opacity: 1 !important;
  transform: none !important;
}

@keyframes fx-fade-up {
  from { opacity: 0; transform: translateY(26px); }
  to   { opacity: 1; transform: none; }
}
/* The hero lines use the same .reveal mechanism as the rest of the page, with
   an inline transition-delay for the stagger. One mechanism means one place
   guarantees the text becomes visible. */

@keyframes fx-drift {
  from { transform: scale(1.06) translateY(0); }
  to   { transform: scale(1.12) translateY(-14px); }
}
.hero-img { animation: fx-drift 18s ease-in-out infinite alternate; }

/* ---------------------------------------------------------------------------
   SERVICE CARDS
   ------------------------------------------------------------------------- */

.service-card {
  background: var(--fx-pearl);
  border: 1px solid rgba(231, 219, 202, .75);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transition: box-shadow .6s var(--fx-ease), transform .6s var(--fx-ease),
              border-color .6s var(--fx-ease);
}
.service-card:hover {
  box-shadow: var(--fx-shadow);
  transform: translateY(-4px);
  border-color: var(--fx-champagne);
}

.service-media {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: linear-gradient(135deg, var(--fx-sand), var(--fx-beige));
}
.service-media img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform .9s var(--fx-ease), opacity .6s ease;
}
.service-card:hover .service-media img { transform: scale(1.05); }

/* Elegant fallback if a photo fails to load or the guest is offline */
.service-media.is-fallback img { display: none; }
.service-media.is-fallback::after {
  content: attr(data-initial);
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-size: 60px;
  color: rgba(198, 161, 91, .55);
  background: linear-gradient(135deg, var(--fx-sand), var(--fx-beige));
}

.chip-cat {
  position: absolute;
  top: 12px; left: 12px;
  background: rgba(253, 251, 247, .93);
  backdrop-filter: blur(6px);
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--fx-gold-deep);
  padding: 6px 11px;
}
.chip-cat.is-scalp { background: rgba(20, 81, 74, .93); color: var(--fx-champagne); }

.chip-featured {
  position: absolute;
  top: 12px; right: 12px;
  background: var(--fx-gold-grad);
  color: #fff;
  font-size: 9px;
  font-weight: 500;
  letter-spacing: .18em;
  text-transform: uppercase;
  padding: 6px 10px;
}

.price-tag {
  font-family: 'Jost', sans-serif;
  font-size: 19px;
  font-weight: 400;
  color: var(--fx-ink);
  letter-spacing: .01em;
}
.price-tag .rupee { color: var(--fx-gold-deep); margin-right: 1px; }
.price-tag .plus { font-size: 11px; color: var(--fx-taupe); margin-left: 3px; }

.meta-dur {
  font-size: 11.5px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--fx-taupe);
}

/* Shade swatches (Havica water-tint) */
.shade-dot {
  width: 20px; height: 20px;
  border-radius: 99px;
  border: 2px solid var(--fx-pearl);
  box-shadow: 0 0 0 1px var(--fx-beige);
  flex: none;
}

/* Add-to-booking button, toggles to an 'added' state */
.btn-add {
  width: 100%;
  border: 1px solid var(--fx-beige);
  background: transparent;
  color: var(--fx-espresso);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .18em;
  text-transform: uppercase;
  padding: 13px;
  cursor: pointer;
  transition: all .4s var(--fx-ease);
}
.btn-add:hover { border-color: var(--fx-gold); color: var(--fx-gold-deep); }
.btn-add.is-added {
  background: var(--fx-gold-grad);
  border-color: transparent;
  color: #fff;
}

/* ---------------------------------------------------------------------------
   CATEGORY TABS
   ------------------------------------------------------------------------- */

.tab {
  position: relative;
  font-size: 12px;
  font-weight: 400;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--fx-taupe);
  padding: 12px 4px;
  white-space: nowrap;
  background: none;
  border: 0;
  cursor: pointer;
  transition: color .4s var(--fx-ease);
}
.tab::after {
  content: '';
  position: absolute;
  left: 0; bottom: 0;
  height: 1px; width: 100%;
  background: var(--fx-gold);
  transform: scaleX(0);
  transition: transform .5s var(--fx-ease);
}
.tab:hover { color: var(--fx-espresso); }
.tab[aria-selected='true'] { color: var(--fx-ink); }
.tab[aria-selected='true']::after { transform: scaleX(1); }

.tabs-scroll {
  overflow-x: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.tabs-scroll::-webkit-scrollbar { display: none; }

/* Search field */
.fx-input {
  width: 100%;
  background: var(--fx-pearl);
  border: 1px solid var(--fx-beige);
  padding: 13px 16px;
  font-family: 'Jost', sans-serif;
  font-size: 14px;
  font-weight: 300;
  color: var(--fx-espresso);
  transition: border-color .4s var(--fx-ease), box-shadow .4s var(--fx-ease);
}
.fx-input::placeholder { color: var(--fx-taupe); }
.fx-input:focus {
  outline: none;
  border-color: var(--fx-gold);
  box-shadow: 0 0 0 3px rgba(198, 161, 91, .12);
}
.fx-input.is-error { border-color: #B4443A; }

.field-error {
  font-size: 11.5px;
  color: #B4443A;
  letter-spacing: .04em;
  margin-top: 6px;
}

/* ---------------------------------------------------------------------------
   ADD-ON ROWS
   ------------------------------------------------------------------------- */

.addon-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  padding: 16px 20px;
  background: var(--fx-pearl);
  border: 1px solid rgba(231, 219, 202, .75);
  cursor: pointer;
  transition: border-color .4s var(--fx-ease), background-color .4s var(--fx-ease);
}
.addon-row:hover { border-color: var(--fx-champagne); }
.addon-row.is-added { border-color: var(--fx-gold); background: rgba(227, 204, 151, .13); }

.addon-check {
  width: 18px; height: 18px;
  border: 1px solid var(--fx-beige);
  display: grid;
  place-items: center;
  flex: none;
  transition: all .3s var(--fx-ease);
}
.addon-row.is-added .addon-check { background: var(--fx-gold); border-color: var(--fx-gold); }
.addon-check svg { opacity: 0; transition: opacity .3s ease; }
.addon-row.is-added .addon-check svg { opacity: 1; }

/* ---------------------------------------------------------------------------
   GALLERY - editorial grid, taller cells break the rhythm
   ------------------------------------------------------------------------- */

.gallery-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-auto-rows: 150px;
  grid-auto-flow: row dense;   /* tall cells must not leave holes behind them */
  gap: 14px;
}
@media (min-width: 768px) {
  .gallery-grid { grid-template-columns: repeat(4, 1fr); grid-auto-rows: 190px; gap: 18px; }
}

.gallery-item {
  position: relative;
  overflow: hidden;
  grid-row: span 1;
  background: var(--fx-sand);
}
.gallery-item.is-tall { grid-row: span 2; }

.gallery-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.1s var(--fx-ease);
}
.gallery-item:hover img { transform: scale(1.05); }

/* A whisper of gold on hover, nothing more */
.gallery-item::after {
  content: '';
  position: absolute;
  inset: 0;
  box-shadow: inset 0 0 0 1px rgba(198, 161, 91, 0);
  transition: box-shadow .5s var(--fx-ease);
  pointer-events: none;
}
.gallery-item:hover::after { box-shadow: inset 0 0 0 1px rgba(198, 161, 91, .65); }

/* ---------------------------------------------------------------------------
   MODALS - location gate + booking
   ------------------------------------------------------------------------- */

.fx-overlay {
  position: fixed;
  inset: 0;
  z-index: 90;
  background: rgba(36, 28, 22, .55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  opacity: 0;
  visibility: hidden;
  transition: opacity .5s var(--fx-ease), visibility .5s;
}
.fx-overlay.is-open { opacity: 1; visibility: visible; }

.fx-panel {
  background: var(--fx-ivory);
  box-shadow: var(--fx-shadow-lg);
  transform: translateY(18px);
  opacity: 0;
  transition: transform .55s var(--fx-ease), opacity .55s var(--fx-ease);
}
.fx-overlay.is-open .fx-panel { transform: none; opacity: 1; }

/* Location gate cards */
.gate-card {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--fx-beige);
  background: var(--fx-pearl);
  cursor: pointer;
  text-align: left;
  transition: transform .6s var(--fx-ease), box-shadow .6s var(--fx-ease),
              border-color .6s var(--fx-ease);
}
.gate-card:hover {
  transform: translateY(-5px);
  box-shadow: var(--fx-shadow);
  border-color: var(--fx-gold);
}
.gate-card img {
  width: 100%;
  height: 190px;
  object-fit: cover;
  transition: transform .9s var(--fx-ease);
}
.gate-card:hover img { transform: scale(1.05); }

/* Booking step progress */
.step-dot {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 10.5px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--fx-taupe);
  transition: color .4s var(--fx-ease);
}
.step-dot .num {
  width: 26px; height: 26px;
  display: grid;
  place-items: center;
  border: 1px solid var(--fx-beige);
  border-radius: 99px;
  font-size: 11px;
  flex: none;
  transition: all .4s var(--fx-ease);
}
.step-dot.is-active { color: var(--fx-ink); }
.step-dot.is-active .num { background: var(--fx-gold-grad); border-color: transparent; color: #fff; }
.step-dot.is-done .num { background: var(--fx-emerald); border-color: transparent; color: var(--fx-ivory); }

.step-panel { display: none; }
.step-panel.is-active { display: block; animation: fx-fade-up .5s var(--fx-ease); }

/* Date strip + time slots */
.date-chip, .slot-chip {
  border: 1px solid var(--fx-beige);
  background: var(--fx-pearl);
  cursor: pointer;
  transition: all .35s var(--fx-ease);
  font-family: 'Jost', sans-serif;
}
.date-chip { padding: 11px 6px; min-width: 66px; text-align: center; flex: none; }
.slot-chip { padding: 11px 6px; font-size: 12.5px; letter-spacing: .06em; text-align: center; }

.date-chip:hover:not(:disabled),
.slot-chip:hover:not(:disabled) { border-color: var(--fx-gold); }

.date-chip.is-selected,
.slot-chip.is-selected {
  background: var(--fx-gold-grad);
  border-color: transparent;
  color: #fff;
}
.date-chip:disabled, .slot-chip:disabled {
  opacity: .3;
  cursor: not-allowed;
  text-decoration: line-through;
}
.date-chip .dow { font-size: 9.5px; letter-spacing: .16em; text-transform: uppercase; opacity: .7; }
.date-chip .dom { font-size: 19px; line-height: 1.3; }
.date-chip .mon { font-size: 9.5px; letter-spacing: .1em; text-transform: uppercase; opacity: .7; }

/* Selected-treatment pill inside the booking modal */
.pick-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 13px 16px;
  border: 1px solid var(--fx-beige);
  background: var(--fx-pearl);
  cursor: pointer;
  text-align: left;
  width: 100%;
  transition: all .35s var(--fx-ease);
}
.pick-row:hover { border-color: var(--fx-champagne); }
.pick-row.is-picked { border-color: var(--fx-gold); background: rgba(227, 204, 151, .13); }

/* Cart badge on the Book button */
.cart-badge {
  position: absolute;
  top: -7px; right: -7px;
  min-width: 20px; height: 20px;
  padding: 0 5px;
  border-radius: 99px;
  background: var(--fx-emerald);
  color: var(--fx-ivory);
  font-size: 10.5px;
  font-weight: 500;
  display: grid;
  place-items: center;
  box-shadow: 0 0 0 2px var(--fx-ivory);
  transform: scale(0);
  transition: transform .4s var(--fx-ease);
}
.cart-badge.is-visible { transform: scale(1); }

/* Sticky mobile booking bar */
.mobile-bar {
  transform: translateY(110%);
  transition: transform .55s var(--fx-ease);
}
.mobile-bar.is-visible { transform: none; }

/* ---------------------------------------------------------------------------
   FOOTER - mirrors the printed hair-care card
   ------------------------------------------------------------------------- */

.fx-footer { background: var(--fx-emerald); color: rgba(253, 251, 247, .82); }
.fx-footer h4 { color: var(--fx-ivory); }
.fx-footer a { transition: color .35s var(--fx-ease); }
.fx-footer a:hover { color: var(--fx-champagne); }

/* ---------------------------------------------------------------------------
   ACCESSIBILITY
   ------------------------------------------------------------------------- */

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  left: 16px; top: -60px;
  z-index: 200;
  background: var(--fx-ink);
  color: var(--fx-ivory);
  padding: 12px 20px;
  font-size: 12px;
  letter-spacing: .14em;
  text-transform: uppercase;
  transition: top .3s var(--fx-ease);
}
.skip-link:focus { top: 16px; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
  .reveal { opacity: 1; transform: none; }

}

/* ---------------------------------------------------------------------------
   PRINT - a clean menu on paper
   ------------------------------------------------------------------------- */

@media print {
  .fx-header, .mobile-bar, .fx-overlay, .btn-add, #tabs, #service-search { display: none !important; }
  .service-card { break-inside: avoid; border-color: #ddd; box-shadow: none; }
  body { background: #fff; }
}
