/* =====================================================================
   HostelHub — premium layer
   Loaded last. Lifts the base theme into a softer, deeper, more expensive
   looking surface and carries the whole motion system.
   ===================================================================== */

/* ---------------------------------------------------------------
   1. Tokens
   --------------------------------------------------------------- */
:root {
  /* a warmer paper instead of flat grey */
  --bg:        #f5f6fb;
  --bg-soft:   #fbfbfe;

  /* light that falls from above, in four steps */
  --sh-1: 0 1px 2px rgba(16, 24, 40, .045);
  --sh-2: 0 2px 4px -2px rgba(16, 24, 40, .06),
          0 10px 24px -12px rgba(16, 24, 40, .13);
  --sh-3: 0 2px 6px -2px rgba(16, 24, 40, .07),
          0 26px 52px -20px rgba(16, 24, 40, .20);
  --sh-4: 0 4px 10px -4px rgba(16, 24, 40, .08),
          0 44px 88px -32px rgba(16, 24, 40, .28);

  --sh-brand: 0 10px 22px -10px rgba(var(--brand-rgb), .50),
              0 2px 6px -2px rgba(var(--brand-rgb), .28);

  /* glass */
  --glass:      rgba(255, 255, 255, .74);
  --glass-line: rgba(255, 255, 255, .86);
  --hairline:   rgba(16, 24, 40, .07);

  /* motion */
  --ease:     cubic-bezier(.32, .72, .28, 1);
  --ease-out: cubic-bezier(.16, .84, .32, 1);
  --spring:   cubic-bezier(.34, 1.4, .48, 1);
  --fast: .16s var(--ease);
  --base: .26s var(--ease);
  --slow: .58s var(--ease-out);
}

/* ---------------------------------------------------------------
   2. Type
   --------------------------------------------------------------- */
h1, h2, h3, .hh-logo {
  letter-spacing: -.032em;
  text-wrap: balance;
}

h1 { font-weight: 800; }

.hh-lead { text-wrap: pretty; }

.grad {
  background: linear-gradient(104deg, var(--brand) 4%, #12b981 52%, var(--brand) 96%);
  background-size: 220% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: gradDrift 9s ease-in-out infinite;
}

@keyframes gradDrift {
  0%, 100% { background-position: 0% 50%; }
  50%      { background-position: 100% 50%; }
}

.hh-eyebrow {
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* a hairline accent under every section heading */
.hh-head h2 { position: relative; }

.hh-head h2::after {
  content: '';
  display: block;
  width: 46px;
  height: 3px;
  margin-top: 14px;
  border-radius: 99px;
  background: linear-gradient(90deg, var(--brand), rgba(var(--brand-rgb), 0));
  transform-origin: left center;
  transform: scaleX(0);
  transition: transform .7s var(--ease-out) .15s;
}

.hh-head.t-center h2::after { margin-inline: auto; transform-origin: center; }
.is-revealed .hh-head h2::after,
.hh-head.is-revealed h2::after { transform: scaleX(1); }

/* ---------------------------------------------------------------
   3. Surfaces
   --------------------------------------------------------------- */
.hh-card {
  border-color: var(--hairline);
  box-shadow: var(--sh-2);
  transition: box-shadow var(--slow), transform var(--slow), border-color var(--slow);
}

.hh-card:hover { box-shadow: var(--sh-3); }

.hh-nav {
  background: rgba(255, 255, 255, .70);
  backdrop-filter: saturate(190%) blur(20px);
  -webkit-backdrop-filter: saturate(190%) blur(20px);
}

.hh-nav.is-stuck {
  background: rgba(255, 255, 255, .86);
  box-shadow: 0 1px 0 var(--hairline), 0 14px 34px -22px rgba(16, 24, 40, .38);
}

/* a whisper of grain keeps large flat areas from banding */
.hh-hero::after,
.hh-hostel-hero::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: .5;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.045'/%3E%3C/svg%3E");
}

/* cards that lift towards the pointer */
.lift3d {
  transition: transform var(--slow), box-shadow var(--slow), border-color var(--slow);
  will-change: transform;
}

.lift3d:hover {
  transform: translateY(-6px);
  box-shadow: var(--sh-4);
  border-color: rgba(var(--brand-rgb), .26);
}

/* ---------------------------------------------------------------
   4. Buttons — gradient fill plus a light sweep on hover
   --------------------------------------------------------------- */
.hh-btn {
  position: relative;
  overflow: hidden;
  transition: transform var(--base), box-shadow var(--base),
              background var(--base), color var(--base), border-color var(--base);
}

.hh-btn--primary {
  background-image: linear-gradient(135deg,
    color-mix(in srgb, var(--brand) 86%, #ffffff) 0%,
    var(--brand) 52%,
    color-mix(in srgb, var(--brand) 78%, #000000) 100%);
}

.hh-btn::after {
  content: '';
  position: absolute;
  top: 0;
  left: -140%;
  width: 55%;
  height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .42), transparent);
  transform: skewX(-18deg);
  transition: left .62s var(--ease-out);
  pointer-events: none;
}

.hh-btn:hover::after { left: 145%; }

.hh-btn:hover  { transform: translateY(-2px); }
.hh-btn:active { transform: translateY(0); transition-duration: .08s; }

.hh-btn--ghost:hover {
  background: rgba(var(--brand-rgb), .05);
  border-color: rgba(var(--brand-rgb), .35);
}

/* ---------------------------------------------------------------
   5. Focus + selection
   --------------------------------------------------------------- */
:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid rgba(var(--brand-rgb), .6);
  outline-offset: 3px;
  border-radius: var(--r-xs);
}

::selection { background: rgba(var(--brand-rgb), .18); color: var(--ink-900); }

/* ---------------------------------------------------------------
   6. Motion — the whole fade family
   --------------------------------------------------------------- */

/* the page itself fades in, so nothing ever snaps into place */
body { animation: pageIn .5s var(--ease-out) both; }

@keyframes pageIn { from { opacity: 0; } to { opacity: 1; } }

/* --- scroll reveal ------------------------------------------------
   The site has exactly one entrance animation: content arrives out of a
   blur and settles. Every [data-reveal] behaves the same whatever value
   it carries, so there is never a second motion language to reconcile.
   --rd is the per-item delay, written by [data-reveal-group] or inline.
   ------------------------------------------------------------------ */
[data-reveal] {
  opacity: 0;
  filter: blur(15px);
  transform: translateY(15px) scale(1.012);
  transition:
    opacity   .82s var(--ease-out) var(--rd, 0ms),
    filter    .82s var(--ease-out) var(--rd, 0ms),
    transform .82s var(--ease-out) var(--rd, 0ms);
  will-change: opacity, filter, transform;
}

[data-reveal].is-revealed {
  opacity: 1;
  filter: blur(0);
  transform: none;
}

/* --- entrance on first paint (above the fold) --------------------- */
.hh-rise {
  animation: riseBlurIn .86s var(--ease-out) both;
}

.hh-rise-1 { animation-delay: .10s; }
.hh-rise-2 { animation-delay: .19s; }
.hh-rise-3 { animation-delay: .28s; }
.hh-rise-4 { animation-delay: .37s; }
.hh-rise-5 { animation-delay: .46s; }

@keyframes riseBlurIn {
  from { opacity: 0; transform: translateY(16px) scale(1.012); filter: blur(15px); }
  to   { opacity: 1; transform: none;                          filter: blur(0);    }
}

/* --- blur reveal, word by word ------------------------------------
   JS wraps each word of [data-blur-reveal] in a <b class="bw"> and
   numbers it with --w. Words come out of a heavy blur into focus.
   ------------------------------------------------------------------ */
.bw {
  display: inline-block;
  font-weight: inherit;
  white-space: pre;
  opacity: 0;
  filter: blur(16px);
  transform: translateY(.34em) scale(1.06);
  animation: blurWordIn .95s var(--ease-out) both;
  animation-delay: calc(var(--wd, 140ms) + var(--w, 0) * 78ms);
}

@keyframes blurWordIn {
  60%  { filter: blur(2px); }
  to   { opacity: 1; filter: blur(0); transform: none; }
}

/* headings further down the page do the same, but on scroll */
[data-blur-reveal="scroll"] .bw { animation-play-state: paused; }
[data-blur-reveal="scroll"].is-revealed .bw { animation-play-state: running; }

/* --- hover fades --------------------------------------------------- */
.hh-hostel-card__cover,
.hh-room__bedbox { transition: transform var(--slow), filter var(--slow); }

.lift3d:hover .hh-hostel-card__cover { transform: scale(1.03); }

a, .hh-chip, .hh-badge { transition: color var(--base), background var(--base), border-color var(--base), transform var(--base); }

/* --- the live pill breathes ---------------------------------------- */
.hh-live::before { box-shadow: 0 0 0 0 rgba(14, 164, 114, .55); animation: livePing 2s var(--ease-out) infinite; }

@keyframes livePing {
  0%   { box-shadow: 0 0 0 0 rgba(14, 164, 114, .5); opacity: 1; }
  70%  { box-shadow: 0 0 0 9px rgba(14, 164, 114, 0); opacity: .6; }
  100% { box-shadow: 0 0 0 0 rgba(14, 164, 114, 0); opacity: 1; }
}

/* --- aurora drifts behind the hero --------------------------------- */
.aurora { animation: auroraDrift 22s ease-in-out infinite alternate; }

@keyframes auroraDrift {
  from { transform: translate3d(-2%, -1%, 0) scale(1); }
  to   { transform: translate3d(3%, 2%, 0) scale(1.08); }
}

/* ---------------------------------------------------------------
   7. Scrollbar
   --------------------------------------------------------------- */
* { scrollbar-width: thin; scrollbar-color: var(--ink-200) transparent; }

*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: var(--ink-200);
  border-radius: 99px;
  border: 3px solid transparent;
  background-clip: content-box;
}
*::-webkit-scrollbar-thumb:hover { background: var(--ink-300); background-clip: content-box; }

/* ---------------------------------------------------------------
   8. Respect the setting
   --------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  body,
  .hh-rise,
  .bw,
  .aurora,
  .grad,
  .hh-live::before { animation: none !important; }

  .bw { opacity: 1; filter: none; transform: none; }

  [data-reveal] {
    opacity: 1;
    transform: none;
    filter: none;
    clip-path: none;
    transition: none;
  }

  .hh-btn::after { display: none; }
  .lift3d:hover { transform: none; }
}

/* ---------------------------------------------------------------
   9. Layout balance
   The property grid centres itself, so two blocks look as deliberate
   as six will once the rest of the estate is loaded.
   --------------------------------------------------------------- */
#properties .grid-auto-320 {
  grid-template-columns: repeat(auto-fit, minmax(288px, 372px));
  justify-content: center;
}

/* the same for any short auto grid on the marketing pages */
.hh-section .grid-auto-320:has(> :last-child:nth-child(-n + 3)) {
  justify-content: center;
}

/* ---------------------------------------------------------------
   10. Centred hero
   The headline, the promise, the buttons and the numbers all sit on
   one axis, with the live board directly beneath them.
   --------------------------------------------------------------- */
.hh-hero--center { text-align: center; }

.hh-hero--center .hh-hero__lede {
  max-width: 780px;
  margin-inline: auto;
}

.hh-hero--center h1 {
  max-width: 20ch;
  margin-inline: auto;
  margin-bottom: 20px;
  font-size: clamp(2.15rem, 5.2vw, 3.5rem);
  line-height: 1.06;
}

.hh-hero--center .hh-lead {
  max-width: 58ch;
  margin-inline: auto;
  font-size: 1.05rem;
}

.hh-hero--center .hh-eyebrow { margin-inline: auto; }

.hh-hero--center .hh-hero__cta {
  justify-content: center;
  margin-top: 30px;
}

.hh-hero--center .hh-hero__figures {
  justify-content: center;
  margin-top: 38px;
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
  padding: 22px 0;
  gap: clamp(26px, 6vw, 64px);
}

.hh-hero--center .hh-hero__fig { text-align: center; }

.hh-hero--center .hh-board-wrap {
  max-width: 820px;
  margin: 46px auto 0;
}

@media (max-width: 767px) {
  .hh-hero--center .hh-hero__figures { gap: 20px 28px; padding: 18px 0; }
  .hh-hero--center .hh-board-wrap { margin-top: 34px; }
}

/* ---------------------------------------------------------------
   11. Hostel page — fewer competing blocks, one rhythm
   --------------------------------------------------------------- */

/* hero side card: occupancy dial and the headline price, nothing else */
.hh-occ-ring {
  display: flex;
  align-items: center;
  gap: 20px;
}

@media (max-width: 991px) {
  .hh-occ-ring { justify-content: flex-start; }
}

/* the stat strip reads as one object, not five tiles */
.hh-avail-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 0;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-3);
  overflow: hidden;
}

.hh-avail-strip__cell {
  padding: 20px 24px;
  border-right: 1px solid var(--line-soft);
}

.hh-avail-strip__cell:last-child { border-right: 0; }

.hh-avail-strip__cell strong {
  display: block;
  font-family: var(--display);
  font-size: 1.7rem;
  font-weight: 800;
  color: var(--ink-900);
  line-height: 1.1;
}

.hh-avail-strip__cell span {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-top: 6px;
  font-size: .76rem;
  font-weight: 600;
  color: var(--ink-400);
}

.hh-avail-strip__cell span i {
  width: 8px;
  height: 8px;
  border-radius: 3px;
  flex: none;
}

.hh-avail-strip__cell.c-free strong { color: var(--ok); }
.hh-avail-strip__cell.c-busy strong { color: var(--bad); }

@media (max-width: 640px) {
  .hh-avail-strip__cell { padding: 15px 16px; border-bottom: 1px solid var(--line-soft); }
  .hh-avail-strip__cell strong { font-size: 1.35rem; }
}

/* --- room toolbar ------------------------------------------------- */
.hh-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px 18px;
  margin-bottom: 22px;
  padding: 13px 18px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--r-pill);
  box-shadow: var(--sh-1);
}

.hh-toolbar__count {
  font-size: .85rem;
  font-weight: 600;
  color: var(--ink-500);
}

.hh-toolbar__count b { color: var(--ink-900); font-weight: 800; }
.hh-toolbar__count b.t-ok { color: var(--ok); }

.hh-toolbar__legend { font-size: .74rem; }

.hh-toolbar__toggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 0 auto;
  padding: 7px 15px;
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  background: var(--bg-soft);
  font-size: .79rem;
  font-weight: 700;
  color: var(--ink-600);
  cursor: pointer;
  transition: all var(--base);
}

.hh-toolbar__toggle:hover { border-color: rgba(var(--brand-rgb), .4); color: var(--brand); }

.hh-toolbar__toggle input { position: absolute; opacity: 0; pointer-events: none; }

.hh-toolbar__toggle.is-on {
  background: rgba(var(--brand-rgb), .10);
  border-color: rgba(var(--brand-rgb), .38);
  color: var(--brand-ink);
}

.hh-toolbar__sort {
  appearance: none;
  -webkit-appearance: none;
  padding: 8px 34px 8px 14px;
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  background: var(--surface)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16'%3E%3Cpath fill='%238592ad' d='M8 11 3.5 6h9z'/%3E%3C/svg%3E")
    no-repeat right 13px center;
  font-size: .79rem;
  font-weight: 700;
  color: var(--ink-600);
  cursor: pointer;
}

.hh-toolbar__sort:hover { border-color: rgba(var(--brand-rgb), .4); }

@media (max-width: 620px) {
  .hh-toolbar { border-radius: var(--r-lg); }
  .hh-toolbar__toggle { margin-left: 0; }
}

/* --- room cards: one height, one shape ---------------------------- */
.hh-room {
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-2);
  overflow: hidden;
}

.hh-room__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 18px 20px 0;
}

.hh-room__no {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: var(--display);
  font-size: 1.06rem;
  font-weight: 800;
  color: var(--ink-900);
}

.hh-room__no i { color: var(--brand); font-size: .95rem; }

.hh-room__spec {
  margin: 6px 20px 0;
  font-size: .77rem;
  font-weight: 600;
  color: var(--ink-400);
}

/* every plan gets the same box, so the grid never goes ragged */
.hh-room__bedbox {
  margin: 16px 16px 0;
  padding: 12px;
  /* tall enough that a nine-bed ward still renders its letters legibly */
  height: 248px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r);
  background:
    radial-gradient(90% 70% at 50% 0%, rgba(var(--brand-rgb), .05), transparent 68%),
    var(--bg-soft);
}

.hh-room__bedbox .room2d { padding: 0; background: none; height: 100%; }

.hh-room__bedbox .room2d__stage {
  max-width: none !important;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.hh-room__bedbox .room2d__svg { width: auto; height: 100%; max-width: 100%; }

.hh-room__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: auto;
  padding: 16px 20px 18px;
}

.hh-room__price strong {
  display: block;
  font-family: var(--display);
  font-size: 1.22rem;
  font-weight: 800;
  color: var(--ink-900);
  line-height: 1.1;
}

.hh-room__price span { font-size: .72rem; font-weight: 600; color: var(--ink-400); }

.hh-room.is-full { opacity: .82; }
.hh-room.is-full:hover { opacity: 1; }

/* --- about block: two real columns, no framework needed ----------- */
.hh-about {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  gap: 40px;
  align-items: start;
}

@media (max-width: 900px) {
  .hh-about { grid-template-columns: 1fr; gap: 28px; }
}

.hh-amenities {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(178px, 1fr));
  gap: 10px;
}

.hh-amenity {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--bg-soft);
  font-size: .82rem;
  font-weight: 600;
  color: var(--ink-700);
  line-height: 1.3;
}

.hh-amenity i { color: var(--brand); font-size: .95rem; flex: none; }

/* --- section rhythm ----------------------------------------------- */
.hh-section--tight { padding-block: clamp(48px, 6vw, 76px); }
.hh-head { margin-bottom: 26px; }
.hh-head p { max-width: 62ch; }

/* ---------------------------------------------------------------
   12. Support tab — the complaint desk
   --------------------------------------------------------------- */
.hh-cx-intro {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px 20px;
  margin-bottom: 20px;
}

.hh-cx-intro p { max-width: 52ch; }

.hh-cx-intro__stats {
  display: flex;
  gap: 18px;
  font-size: .82rem;
  font-weight: 600;
  color: var(--ink-400);
}

.hh-cx-intro__stats b { font-size: 1.05rem; color: var(--ink-900); margin-right: 4px; }
.hh-cx-intro__stats b.t-warn { color: var(--warn); }

.hh-cx {
  display: grid;
  grid-template-columns: minmax(300px, 380px) minmax(0, 1fr);
  gap: 20px;
  align-items: start;
}

@media (max-width: 900px) { .hh-cx { grid-template-columns: 1fr; } }

.hh-cx__form { position: sticky; top: 90px; }
@media (max-width: 900px) { .hh-cx__form { position: static; } }

.hh-cx__hint {
  display: flex;
  gap: 12px;
  align-items: flex-start;
}

.hh-cx__hint > i { color: var(--warn); font-size: 1.05rem; margin-top: 2px; }

.hh-cx__list { display: grid; gap: 12px; }

/* one ticket */
.hh-ticket {
  display: flex;
  gap: 14px;
  padding: 18px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-left: 3px solid var(--ink-200);
  border-radius: var(--r);
  box-shadow: var(--sh-1);
  transition: box-shadow var(--base), border-color var(--base);
}

.hh-ticket:hover { box-shadow: var(--sh-2); }

.hh-ticket.is-open        { border-left-color: var(--warn); }
.hh-ticket.is-in_progress { border-left-color: var(--info); }
.hh-ticket.is-resolved    { border-left-color: var(--ok); }

.hh-ticket__icon {
  width: 40px;
  height: 40px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 12px;
  background: rgba(var(--brand-rgb), .08);
  color: var(--brand);
  font-size: 1.02rem;
}

.hh-ticket__body { min-width: 0; flex: 1; }

.hh-ticket__top {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 12px;
  margin-bottom: 6px;
}

.hh-ticket__top b { font-size: .95rem; color: var(--ink-900); }

.hh-ticket__msg {
  margin: 0 0 10px;
  font-size: .86rem;
  color: var(--ink-500);
  line-height: 1.55;
}

.hh-ticket__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  font-size: .74rem;
  font-weight: 600;
  color: var(--ink-400);
}

.hh-ticket__meta i { margin-right: 4px; }
.hh-ticket__id { margin-left: auto; color: var(--ink-300); }

.hh-ticket__reply {
  margin-top: 12px;
  padding: 12px 14px;
  border-radius: var(--r-sm);
  background: rgba(var(--brand-rgb), .05);
  border: 1px solid rgba(var(--brand-rgb), .14);
}

.hh-ticket__reply span {
  font-size: .7rem;
  font-weight: 800;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--brand-ink);
}

.hh-ticket__reply p {
  margin: 6px 0 0;
  font-size: .85rem;
  color: var(--ink-600);
  line-height: 1.5;
}

/* ---------------------------------------------------------------
   13. Auth pages — sign in, register, reset
   --------------------------------------------------------------- */
.hh-auth__art {
  background:
    radial-gradient(560px 420px at 82% 8%,  rgba(255, 255, 255, .14), transparent 60%),
    radial-gradient(640px 520px at -6% 100%, rgba(18, 185, 129, .25), transparent 62%),
    linear-gradient(158deg,
      color-mix(in srgb, var(--brand) 88%, #10163a),
      color-mix(in srgb, var(--brand) 55%, #0b1020) 78%);
  position: relative;
  overflow: hidden;
}

/* soft moving glow keeps the panel alive without stealing focus */
.hh-auth__art::before {
  content: '';
  position: absolute;
  width: 480px; height: 480px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,.16), transparent 65%);
  top: -140px; right: -120px;
  animation: authGlow 12s ease-in-out infinite alternate;
  pointer-events: none;
}

@keyframes authGlow {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to   { transform: translate3d(-60px, 70px, 0) scale(1.18); }
}

.hh-auth__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  margin-bottom: 16px;
  border-radius: var(--r-pill);
  background: rgba(255, 255, 255, .13);
  border: 1px solid rgba(255, 255, 255, .22);
  color: #fff;
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .12em;
  text-transform: uppercase;
  backdrop-filter: blur(6px);
}

.hh-auth__form {
  background:
    radial-gradient(90% 60% at 50% 0%, rgba(var(--brand-rgb), .05), transparent 60%),
    var(--bg-soft);
}

.hh-auth__box {
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--r-xl);
  padding: 38px 36px;
  box-shadow: var(--sh-3);
  animation: riseBlurIn .7s var(--ease-out) both .08s;
}

@media (max-width: 560px) { .hh-auth__box { padding: 28px 22px; } }

.hh-auth__box .hh-input { transition: border-color var(--base), box-shadow var(--base); }
.hh-auth__box .hh-input:focus {
  border-color: rgba(var(--brand-rgb), .55);
  box-shadow: 0 0 0 4px rgba(var(--brand-rgb), .12);
}

/* password visibility toggle */
.hh-eye {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border: none;
  border-radius: 9px;
  background: none;
  color: var(--ink-300);
  cursor: pointer;
  transition: color var(--fast), background var(--fast);
}

.hh-eye:hover { color: var(--brand); background: rgba(var(--brand-rgb), .08); }

/* reset-flow progress chips */
.hh-auth__steps {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 22px;
  font-size: .74rem;
  font-weight: 700;
  color: var(--ink-300);
}

.hh-auth__steps span { display: inline-flex; align-items: center; gap: 6px; }
.hh-auth__steps span.is-on   { color: var(--brand-ink); }
.hh-auth__steps span.is-done { color: var(--ok); }
.hh-auth__steps > i { font-size: .62rem; }

/* ---------------------------------------------------------------
   14. Beds, premium cut
   The glyphs get real depth: a soft drop shadow under every bed and a
   duvet fold drawn into the artwork (see bed_2d in floorplan.php).
   --------------------------------------------------------------- */
.bed2d { filter: drop-shadow(0 1px 1.6px rgba(16, 24, 40, .10)); }

.bed2d--pick:hover,
.bed2d--pick:focus-visible {
  filter: drop-shadow(0 6px 14px rgba(5, 150, 105, .42));
}

.bed2d-icon { filter: drop-shadow(0 1px 1.6px rgba(16, 24, 40, .10)); }

/* ---------------------------------------------------------------
   15. Booking + complaint forms
   --------------------------------------------------------------- */
.hh-bookgrid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 20px;
  align-items: start;
}

@media (max-width: 900px) { .hh-bookgrid { grid-template-columns: 1fr; } }

/* --- sharing picker: live-availability cards ----------------------- */
.hh-sharepick {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 10px;
}

@media (max-width: 620px) { .hh-sharepick { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.hh-sharepick__opt { position: relative; cursor: pointer; }
.hh-sharepick__opt input { position: absolute; opacity: 0; pointer-events: none; }

.hh-sharepick__card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 12px 6px 10px;
  border: 1.5px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--bg-soft);
  text-align: center;
  transition: border-color var(--base), background var(--base),
              box-shadow var(--base), transform var(--base);
}

.hh-sharepick__card b {
  font-family: var(--display);
  font-size: 1.25rem;
  font-weight: 800;
  color: var(--ink-900);
  line-height: 1.1;
}

.hh-sharepick__card .rent  { font-size: .68rem; font-weight: 700; color: var(--ink-500); white-space: nowrap; }
.hh-sharepick__card .avail { font-size: .66rem; font-weight: 800; white-space: nowrap; }

.hh-sharepick__opt:hover .hh-sharepick__card {
  border-color: rgba(var(--brand-rgb), .45);
  transform: translateY(-2px);
  box-shadow: var(--sh-2);
}

.hh-sharepick__opt input:checked + .hh-sharepick__card {
  border-color: var(--brand);
  background: rgba(var(--brand-rgb), .07);
  box-shadow: 0 0 0 3px rgba(var(--brand-rgb), .14);
}

.hh-sharepick__opt input:checked + .hh-sharepick__card b { color: var(--brand-ink); }

.hh-sharepick__opt.is-full { cursor: not-allowed; }
.hh-sharepick__opt.is-full .hh-sharepick__card { opacity: .55; background: var(--muted-bg); }
.hh-sharepick__opt.is-full:hover .hh-sharepick__card { transform: none; box-shadow: none; border-color: var(--line); }

/* --- fee summary --------------------------------------------------- */
.hh-feebox {
  border: 1px solid rgba(var(--brand-rgb), .22);
  background: rgba(var(--brand-rgb), .05);
  border-radius: var(--r);
  padding: 14px 18px;
  animation: riseBlurIn .45s var(--ease-out) both;
}

.hh-feebox__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 0;
  font-size: .87rem;
  color: var(--ink-500);
}

.hh-feebox__row small { font-size: .72rem; color: var(--ink-400); }
.hh-feebox__row b { color: var(--ink-900); font-weight: 800; }

.hh-feebox__row--total {
  border-top: 1px dashed rgba(var(--brand-rgb), .3);
  margin-top: 4px;
  padding-top: 10px;
}

.hh-feebox__row--total span { font-weight: 700; color: var(--ink-700); }
.hh-feebox__row--total b { font-size: 1.12rem; color: var(--brand-ink); }

.hh-feebox__note {
  margin-top: 8px;
  font-size: .72rem;
  font-weight: 600;
  color: var(--ink-400);
}

/* --- aadhaar upload tile ------------------------------------------- */
.hh-upload {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 18px;
  border: 1.6px dashed var(--ink-200);
  border-radius: var(--r-sm);
  background: var(--bg-soft);
  cursor: pointer;
  transition: border-color var(--base), background var(--base);
}

.hh-upload:hover { border-color: rgba(var(--brand-rgb), .5); background: rgba(var(--brand-rgb), .04); }
.hh-upload.is-invalid { border-color: var(--bad); }

.hh-upload i { font-size: 1.3rem; color: var(--brand); flex: none; }
.hh-upload__text { font-size: .84rem; font-weight: 600; color: var(--ink-500); word-break: break-all; }
.hh-upload input { position: absolute; width: 1px; height: 1px; opacity: 0; }

/* --- numbered helper steps in the aside ---------------------------- */
.hh-booksteps {
  list-style: none;
  counter-reset: bstep;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 14px;
}

.hh-booksteps li {
  position: relative;
  counter-increment: bstep;
  padding-left: 40px;
}

.hh-booksteps li::before {
  content: counter(bstep);
  position: absolute;
  left: 0;
  top: 1px;
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  border-radius: 9px;
  background: rgba(var(--brand-rgb), .1);
  color: var(--brand);
  font-weight: 800;
  font-size: .82rem;
}

.hh-booksteps b { display: block; font-size: .88rem; color: var(--ink-900); margin-bottom: 2px; }
.hh-booksteps span { font-size: .8rem; color: var(--ink-500); line-height: 1.5; }


/* ============================================================
   16 · First-payment block on the booking form
   A labelled divider plus two-up radio pills, built from the
   same tokens as .hh-sharepick so the form reads as one piece.
   ============================================================ */

.hh-formsec {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 26px 0 16px;
}

.hh-formsec::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--line);
}

.hh-formsec__t {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--brand);
}

.hh-choice { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

.hh-choice__opt { position: relative; cursor: pointer; }
.hh-choice__opt input { position: absolute; opacity: 0; pointer-events: none; }

.hh-choice__opt span {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 10px;
  border: 1.5px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--bg-soft);
  font-size: .88rem;
  font-weight: 700;
  color: var(--ink-700);
  text-align: center;
  transition: border-color var(--base), background var(--base),
              color var(--base), box-shadow var(--base);
}

.hh-choice__opt:hover span { border-color: rgba(var(--brand-rgb), .45); }

.hh-choice__opt input:checked + span {
  border-color: var(--brand);
  background: rgba(var(--brand-rgb), .07);
  color: var(--brand-ink);
  box-shadow: 0 0 0 3px rgba(var(--brand-rgb), .14);
}

.hh-choice__opt input:focus-visible + span {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
}

/* the paid-on date only appears once "Paid" is chosen, so give it the same
   blur entrance the rest of the site uses instead of popping in */
#paidon-wrap { animation: riseBlurIn .45s var(--ease-out) both; }
