.campaign-announcement {
  display: flex;
  width: 100%;
  min-height: 52px;
  align-items: center;
  justify-content: center;
  gap: 1.15rem;
  padding: .68rem 1rem;
  border: 0;
  border-bottom: 2px solid rgba(198, 165, 104, .72);
  background: #10271e;
  color: var(--cream);
  font: 700 .9rem/1.3 var(--font-body);
  letter-spacing: .01em;
  text-align: center;
  cursor: pointer;
  box-shadow: inset 0 -1px 0 rgba(248, 218, 150, .1);
  transition: background .18s ease, border-color .18s ease;
}

.campaign-announcement:hover,
.campaign-announcement:focus-visible {
  border-bottom-color: #e2c57e;
  background: #193329;
}

.campaign-announcement:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: -4px;
}

.campaign-status-dot {
  width: 9px;
  height: 9px;
  flex: 0 0 auto;
  border-radius: 50%;
  background: #e1bb64;
  box-shadow: 0 0 0 4px rgba(225, 187, 100, .12);
}

.campaign-message { color: #f6f0e5; }

.campaign-cta {
  display: inline-flex;
  min-height: 30px;
  align-items: center;
  justify-content: center;
  padding: .3rem .7rem;
  border: 1px solid rgba(225, 187, 100, .72);
  border-radius: 999px;
  background: rgba(200, 169, 110, .1);
  color: #ebca7d;
  font-size: .82rem;
  white-space: nowrap;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}

.campaign-announcement:hover .campaign-cta,
.campaign-announcement:focus-visible .campaign-cta {
  border-color: #e2c57e;
  background: #d6b56d;
  color: #183128;
}

.availability-is-open { overflow: hidden; }

.availability-dialog {
  width: min(1180px, calc(100vw - 32px));
  max-width: none;
  max-height: min(976px, calc(100dvh - 32px));
  margin: auto;
  padding: 0;
  overflow: hidden;
  border: 1px solid rgba(198, 165, 104, .72);
  border-radius: calc(var(--radius) + 4px);
  background: #183128;
  color: var(--cream);
  box-shadow: 0 30px 90px rgba(3, 12, 8, .52);
}

.availability-dialog::backdrop {
  background: rgba(5, 14, 10, .74);
  backdrop-filter: blur(3px);
}

.availability-panel {
  position: relative;
  max-height: min(976px, calc(100dvh - 32px));
  padding: clamp(1.5rem, 3vw, 2.35rem);
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-color: rgba(198, 165, 104, .55) transparent;
  scrollbar-width: thin;
}

.availability-panel::-webkit-scrollbar { width: 8px; }
.availability-panel::-webkit-scrollbar-track { background: transparent; }
.availability-panel::-webkit-scrollbar-thumb { border-radius: 999px; background: rgba(198, 165, 104, .48); }

.availability-close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  z-index: 2;
  display: grid;
  width: 44px;
  height: 44px;
  place-items: center;
  padding: 0;
  border: 1px solid rgba(250, 248, 242, .45);
  border-radius: 50%;
  background: rgba(10, 27, 20, .35);
  color: var(--cream);
  cursor: pointer;
}

.availability-close:hover,
.availability-close:focus-visible { border-color: var(--gold); color: var(--gold); }
.availability-close svg { width: 22px; fill: none; stroke: currentColor; stroke-width: 1.6; }
.availability-mobile-toolbar { display: contents; }
.availability-mini-title { display: none; }

.availability-heading { padding-inline: 3.5rem; text-align: center; }
.availability-eyebrow { margin-bottom: .45rem; color: var(--gold); font-size: .76rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
.availability-heading h2 { color: var(--cream); font-size: clamp(2rem, 3.2vw, 3rem); line-height: 1.05; }
.availability-heading > p:not(.availability-eyebrow):not(.availability-updated) { max-width: 710px; margin: .75rem auto 0; color: rgba(250, 248, 242, .8); font-size: .98rem; line-height: 1.55; }
.availability-updated { display: flex; justify-content: center; align-items: center; gap: .4rem; margin: .65rem 0 0; color: rgba(250, 248, 242, .67); font-size: .8rem; }
.availability-updated svg { width: 16px; fill: none; stroke: currentColor; stroke-width: 1.35; }

.availability-schedule { margin-top: 1.35rem; }
.availability-table { width: 100%; border-spacing: 0; border-collapse: separate; table-layout: fixed; font-size: .78rem; }
.availability-table th { font-weight: 600; }
.availability-table thead th { padding: 0 .28rem .52rem; color: rgba(250, 248, 242, .88); text-align: center; }
.availability-table thead th:first-child { width: 116px; }
.availability-row > th { padding: .48rem .7rem; border-right: 1px solid rgba(250, 248, 242, .11); border-bottom: 1px solid rgba(250, 248, 242, .1); color: rgba(250, 248, 242, .86); text-align: left; white-space: nowrap; }
.availability-cell { height: 43px; padding: .22rem; border-right: 1px solid rgba(250, 248, 242, .08); border-bottom: 1px solid rgba(250, 248, 242, .1); text-align: center; }
.availability-row:first-child > th,
.availability-row:first-child > td { border-top: 1px solid rgba(250, 248, 242, .11); }
.availability-row > th:first-child { border-left: 1px solid rgba(250, 248, 242, .11); }
.availability-row:first-child > th { border-top-left-radius: 10px; }
.availability-row:first-child > td:last-child { border-top-right-radius: 10px; }
.availability-row:last-child > th { border-bottom-left-radius: 10px; }
.availability-row:last-child > td:last-child { border-bottom-right-radius: 10px; }
.availability-row--afternoon > th,
.availability-row--afternoon > td { border-top: 8px solid #183128; }

.availability-state { display: inline-flex; min-height: 30px; align-items: center; justify-content: center; gap: .38rem; border-radius: 8px; white-space: nowrap; }
.availability-state--available { min-width: 94px; padding: .28rem .48rem; border: 1px solid rgba(198, 165, 104, .92); background: rgba(198, 165, 104, .08); color: #f2ce77; box-shadow: inset 0 0 0 1px rgba(198, 165, 104, .08); }
.availability-state-dot { width: 9px; height: 9px; flex: 0 0 auto; border-radius: 50%; background: #e4ba59; box-shadow: 0 0 0 3px rgba(228, 186, 89, .12); }
.availability-state--booked { min-width: 94px; padding: .28rem .48rem; border: 1px solid rgba(250, 248, 242, .1); background: rgba(250, 248, 242, .045); color: rgba(250, 248, 242, .52); }
.availability-lock { width: 13px; flex: 0 0 auto; }
.availability-state--unavailable { color: rgba(250, 248, 242, .28); }

.availability-legend { display: flex; justify-content: center; gap: 1.6rem; margin-top: .75rem; color: rgba(250, 248, 242, .75); font-size: .78rem; }
.availability-legend .availability-state { min-width: 0; padding: 0; border: 0; background: transparent; box-shadow: none; }

.availability-action { margin-top: 1.1rem; padding-top: 1.25rem; border-top: 1px solid rgba(198, 165, 104, .43); text-align: center; }
.availability-action h3 { margin-bottom: .3rem; color: var(--cream); font-family: Georgia, "Times New Roman", serif; font-size: clamp(1.35rem, 2vw, 1.75rem); font-weight: 400; line-height: 1.2; }
.availability-action > p { margin-bottom: .9rem; color: rgba(250, 248, 242, .76); font-size: .88rem; }
.availability-booking { min-width: min(100%, 320px); border-color: var(--gold); background: var(--gold); color: var(--green); }
.availability-booking:hover,
.availability-booking:focus-visible { border-color: var(--cream); background: var(--cream); color: var(--green); }
.availability-action small { display: block; margin-top: .6rem; color: rgba(250, 248, 242, .58); font-size: .75rem; }
.availability-mobile { display: none; }
.availability-mobile-sticky { display: none; }

@media (min-width: 900px) and (max-height: 1024px) {
  .availability-panel { padding: 1.3rem 1.8rem; }
  .availability-heading > p:not(.availability-eyebrow):not(.availability-updated) { margin-top: .55rem; }
  .availability-updated { margin-top: .45rem; }
  .availability-schedule { margin-top: .9rem; }
  .availability-table thead th { padding-bottom: .4rem; }
  .availability-row > th { padding-block: .34rem; }
  .availability-cell { height: 39px; }
  .availability-state { min-height: 28px; }
  .availability-legend { margin-top: .55rem; }
  .availability-action { margin-top: .8rem; padding-top: .9rem; }
  .availability-action > p { margin-bottom: .65rem; }
  .availability-action small { margin-top: .4rem; }
}

@media (max-width: 899px) {
  .availability-dialog { width: min(680px, calc(100vw - 20px)); max-height: calc(100dvh - 20px); }
  .availability-panel {
    max-height: calc(100dvh - 20px);
    padding: 0 1rem calc(6.35rem + env(safe-area-inset-bottom));
    scroll-padding: .5rem 0 calc(6.35rem + env(safe-area-inset-bottom));
  }
  .availability-mobile-toolbar {
    position: absolute;
    top: env(safe-area-inset-top);
    right: 0;
    z-index: 5;
    display: flex;
    height: 52px;
    align-items: center;
    justify-content: space-between;
    padding: 0 1rem;
  }
  .availability-close { position: static; flex: 0 0 44px; width: 44px; height: 44px; border-color: rgba(198, 165, 104, .55); color: var(--gold); }
  .availability-dialog .availability-close { outline: none; box-shadow: none; }
  .availability-dialog .availability-close:focus-visible { outline: none; box-shadow: none; border: 2px solid var(--gold); background: #28483a; }
  .availability-heading { padding: calc(.8rem + env(safe-area-inset-top)) 0 0; }
  .availability-heading > .availability-eyebrow,
  .availability-heading > h2 { padding-right: 3.5rem; }
  .availability-is-compact .availability-mobile-toolbar {
    position: relative;
    top: 0;
    height: calc(52px + env(safe-area-inset-top));
    padding-top: env(safe-area-inset-top);
    border-bottom: 1px solid rgba(198, 165, 104, .2);
    background: #183128;
  }
  .availability-is-compact .availability-mini-title { display: block; font-size: .875rem; font-weight: 600; }
  .availability-is-compact .availability-panel { max-height: calc(100dvh - 72px - env(safe-area-inset-top)); }
  .availability-desktop { display: none; }
  .availability-mobile { display: grid; gap: .75rem; }
  .availability-day { overflow: hidden; border: 1px solid rgba(250, 248, 242, .12); border-radius: var(--radius); background: rgba(8, 25, 18, .16); }
  .availability-day h3 { margin: 0; padding: .65rem .8rem; border-bottom: 1px solid rgba(198, 165, 104, .24); color: var(--cream); font-size: 1rem; font-weight: 600; }
  .availability-mobile-row { display: flex; min-height: 42px; align-items: center; justify-content: space-between; gap: .75rem; padding: .32rem .7rem; border-bottom: 1px solid rgba(250, 248, 242, .075); }
  .availability-mobile-row:last-child { border-bottom: 0; }
  .availability-mobile-row--afternoon { border-top: 7px solid #183128; }
  .availability-mobile-row--unavailable { display: none; }
  .availability-mobile-time { color: rgba(250, 248, 242, .83); font-size: .875rem; font-variant-numeric: tabular-nums; }
  .availability-mobile-row--unavailable .availability-mobile-time { color: rgba(250, 248, 242, .3); }
  .availability-state { font-size: .875rem; }
  .availability-state--available,
  .availability-state--booked { min-width: 104px; }
  .availability-mobile-sticky {
    position: fixed;
    right: 50%;
    bottom: 10px;
    z-index: 6;
    display: block;
    width: min(680px, calc(100vw - 20px));
    padding: .65rem 1rem calc(.65rem + env(safe-area-inset-bottom));
    transform: translateX(50%);
    border-top: 1px solid rgba(198, 165, 104, .42);
    background: #183128;
    box-shadow: 0 -12px 30px rgba(5, 18, 12, .28);
  }
  .availability-mobile-sticky[hidden] { display: none; }
  .availability-sticky-booking {
    width: 100%;
    min-height: 46px;
    border-color: var(--gold);
    background: var(--gold);
    color: var(--green);
  }
  .availability-sticky-booking:hover,
  .availability-sticky-booking:focus-visible { border-color: var(--cream); background: var(--cream); color: var(--green); }
}

@media (max-width: 520px) {
  .campaign-announcement { min-height: 50px; flex-wrap: wrap; gap: .38rem .7rem; padding: .58rem .65rem; font-size: .875rem; }
  .campaign-status-dot { width: 8px; height: 8px; }
  .campaign-cta { min-height: 28px; padding: .26rem .62rem; font-size: .8rem; }
  .availability-dialog { width: 100%; max-height: 100dvh; margin: 0; border-width: 1px 0 0; border-radius: 16px 16px 0 0; }
  .availability-panel { max-height: 100dvh; padding: 0 .8rem calc(6.2rem + env(safe-area-inset-bottom)); }
  .availability-mobile-toolbar { padding-inline: .8rem; }
  .availability-close { width: 44px; height: 44px; background: rgba(13, 39, 29, .94); }
  .availability-heading { padding: calc(.75rem + env(safe-area-inset-top)) 0 0; text-align: left; }
  .availability-heading > .availability-eyebrow,
  .availability-heading > h2 { padding-right: 3.25rem; }
  .availability-is-compact .availability-panel { max-height: calc(100dvh - 52px - env(safe-area-inset-top)); }
  .availability-eyebrow { font-size: .68rem; }
  .availability-heading h2 { font-size: clamp(1.75rem, 8vw, 2.1rem); }
  .availability-heading > p:not(.availability-eyebrow):not(.availability-updated) { margin-top: .65rem; font-size: .88rem; line-height: 1.5; }
  .availability-updated { justify-content: flex-start; margin-top: .55rem; font-size: .78rem; }
  .availability-schedule { margin-top: 1rem; }
  .availability-mobile { gap: .65rem; }
  .availability-legend { gap: 1.1rem; }
  .availability-action { text-align: left; }
  .availability-action h3 { font-size: 1.35rem; }
  .availability-action > p { font-size: .84rem; line-height: 1.5; }
  .availability-booking { width: 100%; }
  .availability-action small { text-align: center; }
  .availability-mobile-sticky { right: 0; bottom: 0; width: 100%; padding-inline: .8rem; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .campaign-announcement { transition: none; }
}
