/* ============================================================================
   Co-branded PROGRAM pages — /company/abbvie/* and /company/starbucks-travelers/*

   One stylesheet serves every program page: the design is identical across
   programs, only the brand words differ. Scoped under `.SAweb_program` (not a
   brand name) so adding a program needs no CSS at all.
   Ported from the design handoff "SuiteAmerica Design System (7)":
   design_handoff_abbvie_page/src/{shell.css, Option A - Program Home.html}

   SCOPING: every rule is scoped under `.SAweb_program` so this file cannot leak
   into the rest of the site. The handoff's bare-element rules (body/h1/p/a/img/
   button and the `*` box-sizing reset) are scoped the same way, which also gives
   them the specificity to beat the globally-loaded Bootstrap element styles.

   ROOT FONT SIZE: the prototype assumes `html { font-size: 15px }` and expresses
   everything in rem. This site computes to 12px at the root (Bootstrap sets 10px;
   site CSS lands on 12px), so unscoped the page would render at 80% of the
   intended size. `rem` always resolves against <html>, so it cannot be corrected
   from a container — the page component adds `SAweb_programPage` to <html> on
   mount and removes it on unmount, and the one rule below restores the designed
   15px for the lifetime of this page only.

   TOKENS are NOT redefined here: style-new.css already defines the identical
   design-system values (--sa-*, --fg-*, --w-*, --border-w, --shadow-card,
   --ease, --lh-*, --tracking-*, --font-*) on :root and is loaded globally.
   ============================================================================ */

html.SAweb_programPage { font-size: 15px; }

/* ---------------- shared shell (shell.css) ---------------- */
.SAweb_program *, .SAweb_program *::before, .SAweb_program *::after {
  box-sizing: border-box;
}
.SAweb_program {
  margin: 0;
  font-family: var(--font-body);
  font-weight: var(--w-medium);
  color: var(--fg-1);
  background: var(--sa-white);
  -webkit-font-smoothing: antialiased;
}
.SAweb_program h1, .SAweb_program h2, .SAweb_program h3, .SAweb_program h4, .SAweb_program h5 {
  font-family: var(--font-display);
  margin: 0;
  letter-spacing: var(--tracking-tight);
}
.SAweb_program p {
  margin: 0;
  text-wrap: pretty;
}
.SAweb_program img {
  max-width: 100%;
  display: block;
}
.SAweb_program a {
  color: var(--sa-ink);
  text-decoration: none;
  transition: opacity var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program a:hover {
  opacity: 0.68;
}
.SAweb_program button {
  font-family: inherit;
}
.SAweb_program .ca-wrap {
  width: min(1180px, 92vw);
  margin-inline: auto;
}
.SAweb_program .ca-head {
  position: sticky;
  top: 0;
  z-index: 60;
  background: var(--sa-white);
  border-bottom: var(--border-w) solid var(--sa-black);
}
.SAweb_program .ca-head__in {
  display: flex;
  align-items: center;
  gap: 2rem;
  padding: 0.95rem 0;
}
.SAweb_program .ca-lock {
  display: flex;
  align-items: center;
  gap: 1rem;
  flex-shrink: 0;
}
.SAweb_program .ca-lock img {
  height: 25px;
}
.SAweb_program .ca-lock__x {
  font-size: 1rem;
  color: var(--fg-3);
  line-height: 1;
}
.SAweb_program .ca-lock__slot {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 32px;
  min-width: 108px;
  padding: 0 0.85rem;
  border: 1px dashed var(--sa-fence);
  background-image: repeating-linear-gradient(45deg, #fafafa, #fafafa 6px, #f1f1f1 6px, #f1f1f1 12px);
}
.SAweb_program .ca-lock__slot span {
  font-family: var(--font-mono);
  font-size: 0.6rem;
  letter-spacing: 0.1em;
  color: var(--fg-3);
  white-space: nowrap;
}
.SAweb_program .ca-nav {
  display: flex;
  gap: 1.6rem;
  margin: 0 0 0 auto;
  padding: 0;
  list-style: none;
}
.SAweb_program .ca-nav a {
  font-size: 0.9rem;
  font-weight: var(--w-semibold);
}
.SAweb_program .ca-nav a[aria-current] {
  border-bottom: 2px solid var(--sa-black);
  padding-bottom: 2px;
}
.SAweb_program .ca-head__cta {
  display: flex;
  gap: 0.6rem;
  flex-shrink: 0;
}
.SAweb_program .ca-strap {
  background: var(--sa-black);
  color: var(--fg-on-dark);
}
.SAweb_program .ca-strap .ca-wrap {
  padding: 0.5rem 0;
  font-size: 0.84rem;
  opacity: 0.9;
}
.SAweb_program .ca-strap strong {
  font-weight: var(--w-extrabold);
}
@media (max-width: 1080px) {
.SAweb_program .ca-nav {
  display: none;
}
}

.SAweb_program .ca-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--font-display);
  font-size: 0.95rem;
  font-weight: var(--w-semibold);
  padding: 0.72rem 1.3rem;
  border: var(--border-w) solid var(--sa-black);
  background: var(--sa-white);
  color: var(--sa-ink);
  cursor: pointer;
  transition: background 0.35s var(--ease), color 0.35s var(--ease);
}
.SAweb_program .ca-btn:hover {
  background: var(--sa-ink);
  color: var(--sa-white);
  opacity: 1;
}
.SAweb_program .ca-btn--black {
  background: var(--sa-black);
  color: var(--sa-white);
}
.SAweb_program .ca-btn--black:hover {
  background: var(--sa-white);
  color: var(--sa-ink);
}
.SAweb_program .ca-btn--ghost {
  background: transparent;
  border-color: rgba(255,255,255,0.5);
  color: var(--sa-white);
}
.SAweb_program .ca-btn--ghost:hover {
  background: var(--sa-white);
  border-color: var(--sa-white);
  color: var(--sa-ink);
}
.SAweb_program .ca-btn--lg {
  font-size: 1.05rem;
  padding: 0.95rem 1.7rem;
}
.SAweb_program .ca-btn--sm {
  font-size: 0.85rem;
  padding: 0.55rem 1rem;
}
.SAweb_program .ca-kick {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--font-display);
  font-size: 0.76rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--fg-3);
}
.SAweb_program .ca-sec {
  padding: 4.5rem 0;
}
.SAweb_program .ca-util {
  background: var(--sa-paper);
  border-top: 1px solid var(--sa-fence);
}
.SAweb_program .ca-util__grid {
  display: grid;
  grid-template-columns: 1fr 1px 1fr;
  align-items: center;
  padding: 1.5rem 0;
}
.SAweb_program .ca-util__cell {
  display: flex;
  align-items: center;
  gap: 1.1rem;
  padding: 0 2rem;
}
.SAweb_program .ca-util__cell i {
  font-size: 1.5rem;
}
.SAweb_program .ca-util__k {
  font-size: 0.74rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
}
.SAweb_program .ca-util__v {
  font-size: 0.92rem;
  color: var(--fg-2);
}
.SAweb_program .ca-util__v a {
  color: var(--sa-link);
}
.SAweb_program .ca-util__rule {
  background: var(--sa-fence);
  height: 44px;
}
@media (max-width: 760px) {
.SAweb_program .ca-util__grid {
  grid-template-columns: 1fr;
  gap: 1.2rem;
}
.SAweb_program .ca-util__rule {
  display: none;
}
.SAweb_program .ca-util__cell {
  padding: 0;
}
}

.SAweb_program .ca-foot {
  background: var(--sa-black);
  color: var(--sa-white);
  padding: 3.2rem 0 1.6rem;
}
.SAweb_program .ca-foot a {
  color: rgba(255,255,255,0.72);
  font-size: 0.9rem;
}
.SAweb_program .ca-foot a:hover {
  color: var(--sa-white);
  opacity: 1;
}
.SAweb_program .ca-foot__grid {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
  gap: 2.5rem;
}
.SAweb_program .ca-foot img.wordmark {
  height: 23px;
  margin-bottom: 1.4rem;
}
.SAweb_program .ca-fcol h4 {
  font-size: 1.02rem;
  font-weight: var(--w-bold);
  margin-bottom: 0.9rem;
}
.SAweb_program .ca-fcol ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}
.SAweb_program .ca-foot__reach {
  font-size: 0.84rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: rgba(255,255,255,0.5);
  margin-bottom: 0.8rem;
}
.SAweb_program .ca-foot__social {
  display: flex;
  gap: 1rem;
  font-size: 1.15rem;
  margin-bottom: 1.1rem;
}
.SAweb_program .ca-foot__social a {
  color: rgba(255,255,255,0.8);
}
.SAweb_program .ca-foot__bot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  flex-wrap: wrap;
  border-top: 1px solid rgba(255,255,255,0.14);
  margin-top: 2.6rem;
  padding-top: 1.4rem;
  font-size: 0.76rem;
  color: rgba(255,255,255,0.5);
}
.SAweb_program .ca-foot__badges {
  display: flex;
  gap: 1.4rem;
  font-size: 0.7rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
@media (max-width: 860px) {
.SAweb_program .ca-foot__grid {
  grid-template-columns: 1fr 1fr;
}
}

@media (max-width: 560px) {
.SAweb_program .ca-foot__grid {
  grid-template-columns: 1fr;
}
}

@media (prefers-reduced-motion: no-preference) {
.SAweb_program .ca-rev {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
.SAweb_program .ca-rev.is-in {
  opacity: 1;
  transform: none;
}
}


/* ---------------- page styles (Option A) ---------------- */
.SAweb_program .a-hero {
  border-bottom: var(--border-w) solid var(--sa-black);
}
.SAweb_program .a-hero__grid {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  align-items: stretch;
}
.SAweb_program .a-hero__copy {
  padding: 4.6rem 3.5rem 4.6rem 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.4rem;
}
.SAweb_program .a-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: var(--sa-success-tint);
  padding: 0.4rem 0.9rem;
  font-size: 0.72rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
}
.SAweb_program .a-hero h1 {
  font-size: clamp(2.5rem, 4.4vw, 3.9rem);
  font-weight: var(--w-extrabold);
  line-height: 1.04;
}
.SAweb_program .a-hero h1 br {
  display: none;
}
@media (min-width: 620px) {
.SAweb_program .a-hero h1 br {
  display: inline;
}
}

.SAweb_program .a-type {
  border-bottom: 4px solid var(--sa-success);
  padding-bottom: 0.06em;
}
.SAweb_program .a-type__c {
  display: inline-block;
  width: 3px;
  height: 0.82em;
  background: var(--sa-ink);
  vertical-align: baseline;
  margin-left: 0.06em;
  transform: translateY(0.06em);
}
@media (prefers-reduced-motion: no-preference) {
.SAweb_program .a-type__c {
  animation: aBlink 1s steps(1) infinite;
}
}

.SAweb_program .a-hero__lead {
  font-size: clamp(1.1rem, 1.5vw, 1.28rem);
  color: var(--fg-2);
  max-width: 34ch;
  line-height: var(--lh-normal);
}
.SAweb_program .a-hero__acts {
  display: flex;
  gap: 0.7rem;
  flex-wrap: wrap;
}
.SAweb_program .a-hero__meta {
  display: flex;
  gap: 1.8rem;
  flex-wrap: wrap;
  margin-top: 0.4rem;
  padding-top: 1.3rem;
  border-top: 1px solid var(--sa-fence);
  width: 100%;
}
.SAweb_program .a-hero__meta div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.SAweb_program .a-hero__meta b {
  font-size: 1.5rem;
  font-weight: var(--w-extrabold);
  line-height: 1;
}
.SAweb_program .a-hero__meta span {
  font-size: 0.78rem;
  color: var(--fg-3);
  font-weight: var(--w-semibold);
}
.SAweb_program .a-hero__photo {
  background: #1c1c1c center/cover no-repeat;
  background-image: url(https://suiteam-website.s3.us-west-1.amazonaws.com/new/images/homepage/Dean.jpg);
  min-height: 30rem;
  border-left: var(--border-w) solid var(--sa-black);
}
@keyframes aBlink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
@media (max-width: 900px) {
.SAweb_program .a-hero__grid {
  grid-template-columns: 1fr;
}
.SAweb_program .a-hero__copy {
  padding: 3.2rem 0;
}
.SAweb_program .a-hero__photo {
  min-height: 18rem;
  border-left: 0;
  border-top: var(--border-w) solid var(--sa-black);
}
}

.SAweb_program .a-head {
  max-width: 42rem;
  margin-bottom: 2.6rem;
}
.SAweb_program .a-head h2 {
  font-size: clamp(1.9rem, 3.1vw, 2.55rem);
  font-weight: var(--w-extrabold);
  line-height: 1.12;
  margin: 0.8rem 0 0.7rem;
  text-wrap: balance;
}
.SAweb_program .a-head p {
  font-size: 1.12rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-intro {
  background: var(--sa-paper);
  border-bottom: 1px solid var(--sa-fence);
}
.SAweb_program .a-intro__grid {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: 3.5rem;
  align-items: start;
  padding: 3.6rem 0;
}
.SAweb_program .a-intro h2 {
  font-size: clamp(1.7rem, 2.6vw, 2.1rem);
  font-weight: var(--w-extrabold);
  line-height: 1.14;
}
.SAweb_program .a-intro p {
  font-size: 1.1rem;
  color: var(--fg-2);
  line-height: var(--lh-loose);
}
@media (max-width: 860px) {
.SAweb_program .a-intro__grid {
  grid-template-columns: 1fr;
  gap: 1.4rem;
}
}

.SAweb_program .a-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
}
.SAweb_program .a-step {
  background: var(--sa-white);
  border: 1px solid var(--sa-fence);
  border-top: 4px solid var(--sa-success);
  padding: 1.9rem 1.7rem 2rem;
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  box-shadow: var(--shadow-card);
}
.SAweb_program .a-step__n {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: var(--border-w) solid var(--sa-black);
  font-family: var(--font-display);
  font-size: 1.1rem;
  font-weight: var(--w-extrabold);
}
.SAweb_program .a-step h3 {
  font-size: 1.22rem;
  font-weight: var(--w-bold);
}
.SAweb_program .a-step p {
  font-size: 0.98rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
  flex: 1;
}
.SAweb_program .a-step a {
  font-size: 0.92rem;
  font-weight: var(--w-bold);
  border-bottom: 2px solid var(--sa-black);
  align-self: flex-start;
}
@media (max-width: 820px) {
.SAweb_program .a-steps {
  grid-template-columns: 1fr;
}
}

.SAweb_program .a-cities {
  background: var(--sa-paper);
}
.SAweb_program .a-search {
  display: flex;
  gap: 0;
  border: var(--border-w) solid var(--sa-black);
  background: var(--sa-white);
  max-width: 34rem;
  margin-bottom: 2rem;
}
.SAweb_program .a-search input {
  flex: 1;
  border: 0;
  padding: 0.9rem 1.1rem;
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: var(--w-medium);
  color: var(--sa-ink);
  background: transparent;
}
.SAweb_program .a-search input:focus {
  outline: none;
}
.SAweb_program .a-search input::placeholder {
  color: var(--fg-3);
}
.SAweb_program .a-search button {
  border: 0;
  border-left: var(--border-w) solid var(--sa-black);
  background: var(--sa-black);
  color: var(--sa-white);
  padding: 0 1.3rem;
  font-family: var(--font-display);
  font-weight: var(--w-semibold);
  cursor: pointer;
}
.SAweb_program .a-citygrid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
}
.SAweb_program .a-city {
  position: relative;
  aspect-ratio: 4/3;
  overflow: hidden;
  border: 1px solid var(--sa-fence);
  display: block;
}
.SAweb_program .a-city img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease);
}
.SAweb_program .a-city:hover img {
  transform: scale(1.05);
}
.SAweb_program .a-city:hover {
  opacity: 1;
}
.SAweb_program .a-city__cap {
  position: absolute;
  inset: auto 0 0 0;
  background: linear-gradient(to top, rgba(0,0,0,0.86), rgba(0,0,0,0));
  color: var(--sa-white);
  padding: 2.4rem 0.9rem 0.85rem;
  font-family: var(--font-display);
  font-size: 1.02rem;
  font-weight: var(--w-bold);
}
.SAweb_program .a-city__cap small {
  display: block;
  font-size: 0.74rem;
  font-weight: var(--w-medium);
  opacity: 0.82;
}
@media (max-width: 900px) {
.SAweb_program .a-citygrid {
  grid-template-columns: repeat(2, 1fr);
}
}

@media (max-width: 520px) {
.SAweb_program .a-citygrid {
  grid-template-columns: 1fr;
}
}

.SAweb_program .a-inc {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border: var(--border-w) solid var(--sa-black);
  background: var(--sa-white);
}
.SAweb_program .a-inccell {
  padding: 1.9rem 1.8rem 2rem;
  display: flex;
  flex-direction: column;
  gap: 0.7rem;
}
.SAweb_program .a-inccell:not(:last-child) {
  border-right: 1px solid var(--sa-fence);
}
.SAweb_program .a-inccell i {
  font-size: 1.6rem;
  color: var(--sa-success);
}
.SAweb_program .a-inccell h3 {
  font-size: 1.15rem;
  font-weight: var(--w-bold);
}
.SAweb_program .a-inccell p {
  font-size: 0.96rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-inccell ul {
  list-style: none;
  margin: 0.3rem 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  font-size: 0.92rem;
  color: var(--fg-2);
}
.SAweb_program .a-inccell li {
  display: flex;
  gap: 0.5rem;
}
.SAweb_program .a-inccell li i {
  font-size: 0.85rem;
  color: var(--fg-3);
  margin-top: 0.25rem;
}
@media (max-width: 860px) {
.SAweb_program .a-inc {
  grid-template-columns: 1fr;
}
.SAweb_program .a-inccell:not(:last-child) {
  border-right: 0;
  border-bottom: 1px solid var(--sa-fence);
}
}

.SAweb_program .a-kit {
  margin-top: 3.2rem;
  border-top: var(--border-w) solid var(--sa-black);
  padding-top: 2.4rem;
}
.SAweb_program .a-kit__top {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 2rem;
  flex-wrap: wrap;
  margin-bottom: 2rem;
}
.SAweb_program .a-kit__top h3 {
  font-size: clamp(1.7rem, 2.8vw, 2.3rem);
  font-weight: var(--w-extrabold);
  line-height: 1.08;
  letter-spacing: -0.015em;
}
.SAweb_program .a-kit__top p {
  font-size: 1rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
  max-width: 46ch;
  margin-top: 0.4rem;
}
.SAweb_program .a-kit__tag {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  background: var(--sa-success-tint);
  padding: 0.38rem 0.85rem;
  font-size: 0.72rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  white-space: nowrap;
}
.SAweb_program .a-kit__cols {
  columns: 2;
  column-gap: 3.5rem;
}
.SAweb_program .a-kitgrp {
  break-inside: avoid;
  margin-bottom: 2.1rem;
}
.SAweb_program .a-kitgrp h4 {
  font-size: 0.78rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  padding-bottom: 0.55rem;
  border-bottom: var(--border-w) solid var(--sa-black);
}
.SAweb_program .a-kitgrp ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.SAweb_program .a-kitgrp li {
  display: block;
  font-size: 1rem;
  color: var(--fg-2);
  padding: 0.62rem 0;
  border-bottom: 1px solid var(--sa-mist);
}
.SAweb_program .a-kit__note {
  margin-top: 0.6rem;
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  font-size: 0.96rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
  background: var(--sa-paper);
  border-left: 4px solid var(--sa-success);
  padding: 1rem 1.2rem;
}
.SAweb_program .a-kit__note i {
  font-size: 1rem;
  margin-top: 0.15rem;
  color: var(--sa-success);
}
@media (max-width: 820px) {
.SAweb_program .a-kit__cols {
  columns: 1;
}
}

.SAweb_program .a-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.25rem;
}
.SAweb_program .a-panel {
  padding: 2.4rem 2.2rem;
  display: flex;
  flex-direction: column;
  gap: 1rem;
}
.SAweb_program .a-panel--dark {
  background: var(--sa-black);
  color: var(--sa-white);
}
/* Specificity, not source order. `.a-panel--dark p` and `.a-panel p` are both
   (0,1,1), and the generic rule is declared LATER in the handoff, so it won and
   painted this paragraph #353535 on #000 — 1.71:1, well under the 4.5:1 WCAG AA
   floor and effectively invisible. Doubling the class puts the override out of
   reach of source order. Same reason for the list text below. */
.SAweb_program .a-panel.a-panel--dark p,
.SAweb_program .a-panel.a-panel--dark ul,
.SAweb_program .a-panel.a-panel--dark li {
  color: rgba(255, 255, 255, 0.86);
}
.SAweb_program .a-panel--light {
  background: var(--sa-white);
  border: 1px solid var(--sa-fence);
  box-shadow: var(--shadow-card);
}
.SAweb_program .a-panel h3 {
  font-size: 1.5rem;
  font-weight: var(--w-extrabold);
  line-height: 1.16;
}
.SAweb_program .a-panel p {
  font-size: 1rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-panel i.lead {
  font-size: 1.7rem;
}
.SAweb_program .a-panel ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  font-size: 0.96rem;
}
.SAweb_program .a-panel li {
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
}
.SAweb_program .a-panel li i {
  margin-top: 0.2rem;
  font-size: 0.9rem;
  opacity: 0.75;
}
.SAweb_program .a-panel .ca-btn {
  margin-top: auto;
  align-self: flex-start;
}
@media (max-width: 820px) {
.SAweb_program .a-split {
  grid-template-columns: 1fr;
}
}

.SAweb_program .a-faq {
  border-top: var(--border-w) solid var(--sa-black);
  max-width: 54rem;
}
.SAweb_program .a-faq details {
  border-bottom: 1px solid var(--sa-fence);
}
.SAweb_program .a-faq summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 1.3rem 0;
  cursor: pointer;
  font-family: var(--font-display);
  font-size: 1.1rem;
  font-weight: var(--w-bold);
  list-style: none;
}
.SAweb_program .a-faq summary::-webkit-details-marker {
  display: none;
}
.SAweb_program .a-faq summary i {
  font-size: 0.95rem;
  color: var(--fg-3);
  transition: transform 0.25s var(--ease);
  flex-shrink: 0;
}
.SAweb_program .a-faq details[open] summary i {
  transform: rotate(45deg);
}
.SAweb_program .a-faq__body {
  padding-bottom: 1.4rem;
  max-width: 60ch;
  font-size: 1rem;
  color: var(--fg-2);
  line-height: var(--lh-loose);
}
.SAweb_program .a-coord {
  background: var(--sa-black);
  color: var(--sa-white);
}
.SAweb_program .a-coord__grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 3rem;
  align-items: center;
  padding: 3.4rem 0;
}
.SAweb_program .a-coord h2 {
  font-size: clamp(1.8rem, 2.9vw, 2.4rem);
  font-weight: var(--w-extrabold);
  line-height: 1.12;
  margin-bottom: 0.7rem;
}
.SAweb_program .a-coord p {
  color: rgba(255,255,255,0.78);
  font-size: 1.05rem;
  line-height: var(--lh-normal);
  max-width: 42ch;
}
.SAweb_program .a-coord__card {
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.16);
  padding: 1.8rem 1.7rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.SAweb_program .a-coord__k {
  font-size: 0.72rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
}
.SAweb_program .a-coord__phone {
  font-size: 2rem;
  font-weight: var(--w-extrabold);
  letter-spacing: -0.01em;
}
.SAweb_program .a-coord__phone a {
  color: var(--sa-white);
}
.SAweb_program .a-coord__card .ca-btn {
  margin-top: 0.8rem;
  align-self: flex-start;
}
@media (max-width: 860px) {
.SAweb_program .a-coord__grid {
  grid-template-columns: 1fr;
  gap: 1.8rem;
}
}


/* ---------------- Locations page (/company/abbvie/locations) ----------------
   Extends the handoff's vocabulary rather than inventing one: same 2px black
   structural border, square corners, sage accent, `.a-search` bar and card
   shadow as the home page. */
.SAweb_program .a-loccount {
  font-size: 0.82rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--fg-3);
  padding-bottom: 0.7rem;
  border-bottom: var(--border-w) solid var(--sa-black);
  margin-bottom: 1.6rem;
}
.SAweb_program .a-locgrid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
}
.SAweb_program .a-loccard {
  display: flex;
  flex-direction: column;
  background: var(--sa-white);
  border: 1px solid var(--sa-fence);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}
.SAweb_program .a-loccard:hover { opacity: 1; }
.SAweb_program .a-loccard__ph {
  position: relative;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--sa-paper);
  border-bottom: 1px solid var(--sa-fence);
}
.SAweb_program .a-loccard__ph img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease);
}
.SAweb_program .a-loccard:hover .a-loccard__ph img { transform: scale(1.05); }
/* placeholder when a community has no photo on file */
.SAweb_program .a-loccard__noph {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 2rem;
  color: var(--sa-fence);
}
.SAweb_program .a-loccard__body {
  padding: 1.1rem 1.2rem 1.3rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  flex: 1;
}
.SAweb_program .a-loccard__body h3 {
  font-size: 1.08rem;
  font-weight: var(--w-bold);
  line-height: 1.25;
}
.SAweb_program .a-loccard__addr {
  font-size: 0.86rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-loccard__addr i { color: var(--sa-success); margin-right: 0.2rem; }
.SAweb_program .a-loccard__am {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: auto;
  padding-top: 0.6rem;
}
.SAweb_program .a-loccard__am span {
  font-size: 0.7rem;
  font-weight: var(--w-semibold);
  background: var(--sa-paper);
  border: 1px solid var(--sa-fence);
  padding: 0.2rem 0.5rem;
  color: var(--fg-2);
}
.SAweb_program .a-loccard__more { background: var(--sa-success-tint) !important; }
/* status strip: loading / empty / error / prompt */
.SAweb_program .a-locmsg {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  font-size: 0.98rem;
  font-weight: var(--w-medium);
  color: var(--fg-2);
  background: var(--sa-paper);
  border-left: 4px solid var(--sa-success);
  padding: 1rem 1.2rem;
}
.SAweb_program .a-locmsg a { border-bottom: 2px solid var(--sa-black); }
.SAweb_program .a-locmsg--err { border-left-color: var(--sa-error, #b06b6b); }
.SAweb_program .a-locmore { display: flex; justify-content: center; margin-top: 2.2rem; }
@media (max-width: 980px) {
  .SAweb_program .a-locgrid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 620px) {
  .SAweb_program .a-locgrid { grid-template-columns: 1fr; }
}

/* ---------------- Named-building grid (programs with a fixed short list) -------
   Used by Starbucks Travelers, which is two Nashville buildings rather than a
   searchable market. Same card vocabulary as the locations results, at a size
   that suits two items instead of a grid of many. */
.SAweb_program .a-props {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
}
.SAweb_program .a-prop {
  display: flex;
  flex-direction: column;
  background: var(--sa-white);
  border: 1px solid var(--sa-fence);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}
.SAweb_program .a-prop:hover { opacity: 1; }
.SAweb_program .a-prop__ph {
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--sa-paper);
  border-bottom: 1px solid var(--sa-fence);
}
.SAweb_program .a-prop__ph img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--ease);
}
.SAweb_program .a-prop:hover .a-prop__ph img { transform: scale(1.05); }
.SAweb_program .a-prop__body {
  padding: 1.4rem 1.5rem 1.6rem;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  flex: 1;
}
.SAweb_program .a-prop__body h3 {
  font-size: 1.3rem;
  font-weight: var(--w-bold);
  line-height: 1.2;
}
.SAweb_program .a-prop__addr {
  font-size: 0.94rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-prop__addr i { color: var(--sa-success); margin-right: 0.25rem; }
.SAweb_program .a-prop__link {
  margin-top: auto;
  padding-top: 0.7rem;
  font-size: 0.92rem;
  font-weight: var(--w-bold);
  border-bottom: 2px solid var(--sa-black);
  align-self: flex-start;
}
.SAweb_program .a-prop__link i { font-size: 0.8rem; margin-left: 0.2rem; }
@media (max-width: 820px) {
  .SAweb_program .a-props { grid-template-columns: 1fr; }
}

/* Date fields open their picker from anywhere in the box (see openDatePicker in
   the reserve dialog), so the whole box should look clickable. */
.SAweb_program .input[type="date"] { cursor: pointer; }

/* ============================ Daily rates table ============================
   Starbucks page, "Two buildings in Nashville" section. Same top-rule + heading
   vocabulary as .a-kit; the table itself scrolls sideways below ~980px rather
   than wrapping 13 columns. */
.SAweb_program .a-rates {
  margin-top: 3.2rem;
  border-top: var(--border-w) solid var(--sa-black);
  padding-top: 2.4rem;
}
.SAweb_program .a-rates__top {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 2rem;
  flex-wrap: wrap;
  margin-bottom: 1.6rem;
}
.SAweb_program .a-rates__top h3 {
  font-size: clamp(1.7rem, 2.8vw, 2.3rem);
  font-weight: var(--w-extrabold);
  line-height: 1.08;
  letter-spacing: -0.015em;
}
.SAweb_program .a-rates__top p {
  font-size: 1rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
  max-width: 46ch;
  margin-top: 0.4rem;
}
.SAweb_program .a-rates__tag {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  background: var(--sa-success-tint);
  padding: 0.38rem 0.85rem;
  font-size: 0.72rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  white-space: nowrap;
}
.SAweb_program .a-rates__scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.SAweb_program .a-rates__table {
  width: 100%;
  min-width: 860px;
  border-collapse: collapse;
  font-size: 0.98rem;
}
.SAweb_program .a-rates__table th,
.SAweb_program .a-rates__table td {
  padding: 0.7rem 0.55rem;
  text-align: center;
  border-bottom: 1px solid var(--sa-mist);
  white-space: nowrap;
}
.SAweb_program .a-rates__table thead th {
  font-size: 0.74rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--fg-2);
}
.SAweb_program .a-rates__table thead .a-rates__season {
  color: var(--sa-black);
  border-bottom: var(--border-w) solid var(--sa-black);
  padding-bottom: 0.5rem;
}
.SAweb_program .a-rates__table thead .a-rates__stay {
  font-size: 0.7rem;
  padding-top: 0.55rem;
  padding-bottom: 0.55rem;
}
.SAweb_program .a-rates__table th.a-rates__unit {
  text-align: left;
  vertical-align: bottom;
  padding-left: 0;
  border-bottom: var(--border-w) solid var(--sa-black);
}
.SAweb_program .a-rates__table tbody th.a-rates__unit {
  vertical-align: middle;
  border-bottom: 1px solid var(--sa-mist);
  line-height: 1.25;
}
.SAweb_program .a-rates__bld {
  display: block;
  font-weight: var(--w-extrabold);
}
.SAweb_program .a-rates__type {
  display: block;
  font-size: 0.86rem;
  color: var(--fg-2);
}
.SAweb_program .a-rates__table td {
  font-variant-numeric: tabular-nums;
  font-weight: var(--w-semibold);
}
.SAweb_program .a-rates__table td.is-first {
  border-left: 1px solid var(--sa-mist);
}
.SAweb_program .a-rates__table tbody tr:hover td,
.SAweb_program .a-rates__table tbody tr:hover th {
  background: var(--sa-paper);
}
.SAweb_program .a-rates__note {
  margin-top: 1rem;
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  font-size: 0.96rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .a-rates__note i {
  font-size: 1rem;
  margin-top: 0.15rem;
  color: var(--sa-success);
}
.SAweb_program .a-rates__note strong { color: var(--sa-black); }

/* ============================ Form vocabulary =============================
   The program pages had no form styles until the Starbucks "Reserve Now"
   dialog. Mirrors the SuiteHub portal's field/input vocabulary so the two
   surfaces feel the same, but scoped to `.SAweb_program`.

   NOTE the `.label` resets: Bootstrap 3 is loaded globally and its `.label` is
   the BADGE component (display:inline; padding:.2em .6em .3em; line-height:1;
   color:#fff; text-align:center; white-space:nowrap). Field labels share the
   class name, so those have to be neutralised explicitly or every label renders
   centred, padded and white-on-white. Do not drop them.
   ------------------------------------------------------------------------- */
.SAweb_program .field {
  display: block;
  margin-bottom: 1.15rem;
}
.SAweb_program .label {
  display: block;
  font-size: 0.86rem;
  font-weight: var(--w-bold);
  color: var(--fg-1);
  margin-bottom: 0.45rem;
  text-align: left;
  padding: 0;
  line-height: 1.4;
  white-space: normal;
  border: 0;
  border-radius: 0;
  position: static;
}
.SAweb_program .input,
.SAweb_program .textarea {
  width: 100%;
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: var(--w-medium);
  color: var(--sa-ink);
  background: var(--sa-white);
  border: 1px solid var(--sa-fence);
  border-radius: 0;
  padding: 0.72rem 0.85rem;
  transition: border-color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .textarea { resize: vertical; line-height: var(--lh-normal); }
.SAweb_program .input:focus,
.SAweb_program .textarea:focus {
  outline: none;
  border-color: var(--sa-black);
  box-shadow: inset 0 0 0 1px var(--sa-black);
}
.SAweb_program .input[aria-invalid="true"] { border-color: var(--sa-error); }
.SAweb_program .field__hint {
  display: block;
  margin-top: 0.4rem;
  font-size: 0.82rem;
  color: var(--fg-3);
}
.SAweb_program .field__err {
  display: block;
  margin-top: 0.4rem;
  font-size: 0.82rem;
  font-weight: var(--w-semibold);
  color: var(--sa-error);
}
.SAweb_program .field__err i { margin-right: 0.25rem; }
.SAweb_program .rn-fs { border: 0; padding: 0; margin-inline: 0; }
/* .seg is inline-flex, which lands it on a line box and adds the line's
   descender leading underneath — the gap below Parking measured larger than
   every other field. Block-level flex keeps the shrink-wrap without it. */
.SAweb_program .rn-seg { display: flex; width: fit-content; }
.SAweb_program .rn-fs legend { padding: 0; }

/* segmented yes/no */
.SAweb_program .seg {
  display: inline-flex;
  background: var(--sa-paper);
  border: 1px solid var(--sa-fence);
  padding: 3px;
  gap: 3px;
}
.SAweb_program .seg button {
  border: 0;
  background: transparent;
  font-family: var(--font-display);
  font-size: 0.9rem;
  font-weight: var(--w-semibold);
  color: var(--fg-2);
  padding: 0.45rem 1.2rem;
  cursor: pointer;
}
/* was var(--shadow-card) — an 8px/16px card shadow bleeding out of a 34px
   segment. Matches .rn-prop.is-on's inset hairline instead. */
.SAweb_program .seg button.is-on {
  background: var(--sa-white);
  color: var(--sa-ink);
  box-shadow: inset 0 0 0 1px var(--sa-black);
}

/* ---- modal ---- */
.SAweb_program .ca-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0, 0, 0, 0.55);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 3vh 1rem;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.SAweb_program .ca-modal__box {
  width: min(680px, 100%);
  background: var(--sa-white);
  border: var(--border-w) solid var(--sa-black);
  margin: auto;
  /* pin head + foot and let only the body scroll, so the title and the primary
     action stay on screen on short viewports */
  display: flex;
  flex-direction: column;
  /* max() puts a floor under this: a viewport reported as 0 (backgrounded tab,
     some embeds) would otherwise compute 100dvh -> 0 and collapse the dialog to
     nothing. Never let a modal's height depend on the viewport alone. */
  max-height: 94vh;
  max-height: max(20rem, calc(100dvh - 6vh));
}
.SAweb_program .ca-modal__head,
.SAweb_program .ca-modal__foot { flex: 0 0 auto; }
/* the <form> is the flex child in the form state, so it has to pass the
   height constraint through to .ca-modal__body */
.SAweb_program .ca-modal__form {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.SAweb_program .ca-modal__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 1.4rem 1.6rem;
  border-bottom: 1px solid var(--sa-fence);
}
.SAweb_program .ca-modal__title {
  font-family: var(--font-display);
  font-size: 1.35rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-tight);
}
.SAweb_program .ca-modal__sub { margin-top: 0.25rem; font-size: 0.94rem; color: var(--fg-2); }
.SAweb_program .ca-modal__x {
  border: 0; background: transparent; cursor: pointer;
  font-size: 1.05rem; color: var(--fg-2); line-height: 1;
  /* was ~22px; negative margins keep the glyph optically in place while the
     hit area reaches the 44px minimum */
  display: inline-flex; align-items: center; justify-content: center;
  width: 2.9rem; height: 2.9rem; padding: 0;
  margin: -0.55rem -0.7rem -0.55rem 0;
}
.SAweb_program .ca-modal__x:hover { color: var(--sa-ink); }
.SAweb_program .ca-modal__body {
  padding: 1.5rem 1.6rem;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}
/* the last block still carries .field's 1.15rem bottom margin, which stacked on
   the body's padding: 2.65rem under the last control vs 1.5rem above the first */
.SAweb_program .ca-modal__body > :last-child,
.SAweb_program .ca-modal__body > :last-child > .field { margin-bottom: 0; }
.SAweb_program .ca-modal__foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 0.6rem;
  padding: 1.1rem 1.6rem;
  border-top: 1px solid var(--sa-fence);
  background: var(--sa-paper);
  flex-wrap: wrap;
}
.SAweb_program .ca-modal__note {
  margin-right: auto;
  font-size: 0.78rem;
  font-weight: var(--w-semibold);
  color: var(--fg-3);
}
.SAweb_program .ca-btn[disabled] { opacity: 0.45; cursor: not-allowed; }
.SAweb_program .ca-btn[disabled]:hover { background: var(--sa-black); color: var(--sa-white); }

.SAweb_program .rn-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1rem; }

/* property radio cards */
.SAweb_program .rn-props { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
.SAweb_program .rn-prop {
  display: block;
  position: relative;
  border: 1px solid var(--sa-fence);
  padding: 0.9rem 1rem 0.95rem 2.7rem;
  cursor: pointer;
  transition: border-color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .rn-prop:hover { border-color: var(--fg-3); }
.SAweb_program .rn-prop.is-on { border-color: var(--sa-black); box-shadow: inset 0 0 0 1px var(--sa-black); }

/* The radio is drawn from scratch here on purpose. A global site rule forces
   `input[type=radio]` to 30x30 with `appearance:none` and `margin:4px 20px 0 0`,
   which made the control overlap the label text (control ran to 43.8px while the
   name started at 35.5px). `appearance:none` also strips the native rendering, so
   the ring and the checked dot have to be drawn — the dot is an inset box-shadow
   rather than ::after, which is not reliably rendered on inputs. */
.SAweb_program .rn-prop input[type="radio"],
.SAweb_program .rn-radio input[type="radio"] {
  position: absolute;
  left: 0.9rem;
  top: 0.95rem;
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  margin: 0;
  padding: 0;
  flex: none;
  appearance: none;
  -webkit-appearance: none;
  background: var(--sa-white);
  border: 2px solid var(--sa-fence);
  border-radius: 50%;
  cursor: pointer;
  transition: border-color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .rn-prop:hover input[type="radio"] { border-color: var(--fg-3); }
.SAweb_program .rn-prop input[type="radio"]:checked,
.SAweb_program .rn-radio input[type="radio"]:checked {
  border-color: var(--sa-black);
  background: var(--sa-black);
  box-shadow: inset 0 0 0 3px var(--sa-white);
}
/* A global site rule paints a 30x30 `::after` ring (2px solid #bbb, 50% radius)
   on radios — it stacked a second, larger circle on top of this 18px control and
   overlapped the label text. We own this control completely, so both pseudo
   elements are suppressed. Verified in-browser: ::after was content:"" 30x30.  */
.SAweb_program .rn-prop input[type="radio"]::before,
.SAweb_program .rn-prop input[type="radio"]::after,
.SAweb_program .rn-radio input[type="radio"]::before,
.SAweb_program .rn-radio input[type="radio"]::after {
  content: none;
  display: none;
}
/* Bootstrap 3 forces `outline: 5px auto -webkit-focus-ring-color` on
   input[type=radio]:focus (specificity 0,2,1). Chrome does not match
   :focus-visible on a mouse-clicked radio, so a click painted a blue ring inside
   the black dot. Kill it on :focus; the on-brand ring below covers keyboards. */
.SAweb_program .rn-prop input[type="radio"]:focus,
.SAweb_program .rn-radio input[type="radio"]:focus { outline: none; }

.SAweb_program .rn-prop input[type="radio"]:focus-visible,
.SAweb_program .rn-radio input[type="radio"]:focus-visible {
  outline: 2px solid var(--sa-black);
  outline-offset: 2px;
}
.SAweb_program .rn-prop__name { display: block; font-weight: var(--w-bold); font-size: 0.98rem; line-height: 1.25; }
.SAweb_program .rn-prop__addr { display: block; margin-top: 0.2rem; font-size: 0.82rem; color: var(--fg-3); }

/* confirmation panel */
.SAweb_program .rn-done { text-align: center; padding: 0.5rem 0 0.25rem; }
.SAweb_program .rn-done__disc {
  /* square: the design system has radius 0 everywhere; the radio is the one
     sanctioned exception, so this disc must not be a second round element */
  width: 60px; height: 60px; border-radius: 0;
  background: var(--sa-success-tint); color: var(--sa-success);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 28px; margin-bottom: 1rem;
}
.SAweb_program .rn-done h3 { font-size: 1.35rem; font-weight: var(--w-extrabold); margin-bottom: 0.6rem; }
.SAweb_program .rn-done p { font-size: 0.98rem; color: var(--fg-2); line-height: var(--lh-normal); max-width: 42ch; margin: 0 auto; }
.SAweb_program .rn-done__note { margin-top: 0.9rem !important; font-size: 0.8rem !important; color: var(--fg-3) !important; }

@media (max-width: 620px) {
  .SAweb_program .rn-grid,
  .SAweb_program .rn-props { grid-template-columns: 1fr; }
}

/* step-card CTA rendered as a <button> (it opens the reserve dialog) but must
   look identical to the sibling text links */
.SAweb_program .a-step__link {
  border: 0;
  background: transparent;
  padding: 0;
  font-family: inherit;
  font-size: 0.92rem;
  font-weight: var(--w-bold);
  color: var(--sa-ink);
  border-bottom: 2px solid var(--sa-black);
  align-self: flex-start;
  cursor: pointer;
}
.SAweb_program .a-step__link:hover { opacity: 0.68; }

/* On-brand focus. The browser default is a blue ring, which is badly off-palette
   in a strict black/white design (it showed on the Yes/No segmented control).
   `:focus-visible` keeps the ring for keyboard users — who need it — without
   painting it on every mouse click. Never replace this with `outline: none`
   alone: that would leave keyboard users with no visible focus at all. */
.SAweb_program .seg button:focus,
.SAweb_program .ca-btn:focus,
.SAweb_program .ca-modal__x:focus,
.SAweb_program .a-step__link:focus { outline: none; }

.SAweb_program .seg button:focus-visible,
.SAweb_program .ca-btn:focus-visible,
.SAweb_program .ca-modal__x:focus-visible,
.SAweb_program .a-step__link:focus-visible {
  outline: 2px solid var(--sa-black);
  outline-offset: 2px;
}
/* the segmented control sits on paper, so an inset ring reads better than an
   offset one that would collide with the neighbouring segment */
.SAweb_program .seg button:focus-visible {
  outline-offset: -2px;
}

/* Error summary shown after a failed submit. Named rn-alert, NOT .alert, which
   is a Bootstrap 3 component class loaded globally. */
.SAweb_program .rn-alert {
  border: 1px solid var(--sa-error);
  border-left: 4px solid var(--sa-error);
  background: var(--sa-error-tint);
  color: var(--fg-1);
  padding: 0.9rem 1.1rem;
  margin-bottom: 1.3rem;
  font-size: 0.92rem;
  font-weight: var(--w-semibold);
}
.SAweb_program .rn-alert:focus { outline: none; }
.SAweb_program .rn-alert i { color: var(--sa-error); margin-right: 0.3rem; }
.SAweb_program .rn-alert ul {
  margin: 0.5rem 0 0;
  padding-left: 1.15rem;
  font-weight: var(--w-medium);
}
.SAweb_program .rn-alert li { margin-top: 0.2rem; }
.SAweb_program .label__opt { font-weight: var(--w-medium); color: var(--fg-3); }

@media (max-width: 620px) {
  /* root is 15px on this page, so 1rem = 15px and iOS auto-zooms any focused
     field under 16px, then never zooms back out */
  .SAweb_program .input,
  .SAweb_program .textarea { font-size: 16px; }
  .SAweb_program .seg { display: flex; width: 100%; }
  .SAweb_program .seg button { flex: 1 1 0; min-height: 2.75rem; }
  .SAweb_program .ca-modal__foot .ca-btn { min-height: 2.75rem; }
}
@media (max-width: 520px) {
  .SAweb_program .ca-modal { padding: 2vh 0.6rem; }
  .SAweb_program .ca-modal__head { padding: 1.1rem 1.05rem; }
  .SAweb_program .ca-modal__body { padding: 1.15rem 1.05rem; }
  .SAweb_program .ca-modal__foot { padding: 0.85rem 1.05rem; }
  /* note takes its own line so Cancel + Submit stay paired */
  .SAweb_program .ca-modal__note { flex: 1 0 100%; margin-right: 0; margin-bottom: 0.5rem; }
}

/* Program contact rendered as an email rather than a phone number. `.a-coord__phone`
   is 2rem/800 — an address at that size overflows the card and breaks mid-word, so
   this is the same slot at a readable size with a sane wrap. */
.SAweb_program .a-coord__email {
  font-size: 1.15rem;
  font-weight: var(--w-bold);
  line-height: 1.35;
  word-break: break-word;
}
.SAweb_program .a-coord__email a {
  color: var(--sa-white);
  border-bottom: 2px solid rgba(255, 255, 255, 0.5);
}
.SAweb_program .a-coord__email a:hover { border-bottom-color: var(--sa-white); }

/* ---- building cards are now <button>s (they open a popup, not a page) ------ */
.SAweb_program button.a-prop {
  font: inherit;
  text-align: left;
  background: var(--sa-white);
  cursor: pointer;
  padding: 0;
  width: 100%;
}
.SAweb_program .a-prop__name {
  display: block;
  font-size: 1.3rem;
  font-weight: var(--w-bold);
  line-height: 1.2;
}
.SAweb_program button.a-prop:focus { outline: none; }
.SAweb_program button.a-prop:focus-visible { outline: 2px solid var(--sa-black); outline-offset: 2px; }

/* ---- building detail popup ---- */
.SAweb_program .bd-box { width: min(820px, 100%); }
.SAweb_program .ca-modal__sub i { color: var(--sa-success); margin-right: 0.2rem; }

.SAweb_program .bd-gallery { margin-bottom: 1.5rem; }
.SAweb_program .bd-gallery__main {
  aspect-ratio: 16 / 9;
  border: 1px solid var(--sa-fence);
  background: var(--sa-paper);
  overflow: hidden;
}
.SAweb_program .bd-gallery__main img { width: 100%; height: 100%; object-fit: cover; display: block; }
.SAweb_program .bd-thumbs {
  display: flex;
  gap: 0.5rem;
  margin-top: 0.5rem;
  overflow-x: auto;
  padding-bottom: 0.25rem;
  scrollbar-width: thin;
}
.SAweb_program .bd-thumb {
  flex: 0 0 auto;
  width: 82px;
  height: 58px;
  padding: 0;
  border: 1px solid var(--sa-fence);
  background: var(--sa-paper);
  cursor: pointer;
  opacity: 0.62;
  transition: opacity var(--dur-base, 0.3s) var(--ease), border-color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .bd-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.SAweb_program .bd-thumb:hover { opacity: 1; }
.SAweb_program .bd-thumb.is-on { opacity: 1; border-color: var(--sa-black); box-shadow: inset 0 0 0 1px var(--sa-black); }
.SAweb_program .bd-thumb:focus { outline: none; }
.SAweb_program .bd-thumb:focus-visible { outline: 2px solid var(--sa-black); outline-offset: 2px; }

.SAweb_program .bd-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem 2rem; }
.SAweb_program .bd-h {
  font-size: 0.76rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--fg-3);
  padding-bottom: 0.5rem;
  margin-bottom: 0.7rem;
  border-bottom: var(--border-w) solid var(--sa-black);
}
.SAweb_program .bd-list { list-style: none; margin: 0; padding: 0; }
.SAweb_program .bd-list li {
  display: flex;
  gap: 0.5rem;
  align-items: flex-start;
  font-size: 0.95rem;
  color: var(--fg-2);
  padding: 0.3rem 0;
}
.SAweb_program .bd-list i { color: var(--sa-success); font-size: 0.85rem; margin-top: 0.25rem; }
.SAweb_program .bd-note {
  margin-top: 1.4rem;
  background: var(--sa-paper);
  border-left: 4px solid var(--sa-success);
  padding: 0.85rem 1rem;
  font-size: 0.92rem;
  color: var(--fg-2);
  line-height: var(--lh-normal);
}
.SAweb_program .bd-note i { color: var(--sa-success); margin-right: 0.3rem; }
.SAweb_program .bd-note a { border-bottom: 2px solid var(--sa-black); font-weight: var(--w-semibold); }
.SAweb_program .bd-link { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--fg-2); }
.SAweb_program .bd-link:hover { color: var(--sa-ink); }

@media (max-width: 620px) {
  .SAweb_program .bd-cols { grid-template-columns: 1fr; gap: 1.2rem; }
  .SAweb_program .ca-modal__foot .bd-link { flex: 1 0 100%; margin-bottom: 0.4rem; }
}

/* section head with an action on the right (locations section) */
.SAweb_program .a-head--split {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 2rem;
  max-width: none;
}
.SAweb_program .a-head--split > div { max-width: 42rem; }
.SAweb_program .a-head--split .ca-btn { flex: 0 0 auto; margin-top: 0.4rem; }
@media (max-width: 760px) {
  .SAweb_program .a-head--split { flex-direction: column; gap: 1.1rem; }
}

/* ---- Explore the neighborhood ---- */
.SAweb_program .ex-box { width: min(1080px, 100%); }
.SAweb_program .ex-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 0.85rem 1.6rem;
  border-bottom: 1px solid var(--sa-fence);
  background: var(--sa-paper);
  flex: 0 0 auto;
  flex-wrap: wrap;
}
.SAweb_program .ex-tabs { display: flex; gap: 0.3rem; flex-wrap: wrap; }
.SAweb_program .ex-tab {
  border: 0;
  background: transparent;
  font-family: var(--font-display);
  font-size: 0.88rem;
  font-weight: var(--w-semibold);
  color: var(--fg-2);
  padding: 0.45rem 0.75rem;
  cursor: pointer;
  border-bottom: 2px solid transparent;
}
.SAweb_program .ex-tab i { margin-right: 0.3rem; opacity: 0.75; }
.SAweb_program .ex-tab:hover { color: var(--sa-ink); }
.SAweb_program .ex-tab.is-on { color: var(--sa-ink); border-bottom-color: var(--sa-black); font-weight: var(--w-bold); }
.SAweb_program .ex-tab:focus { outline: none; }
.SAweb_program .ex-tab:focus-visible { outline: 2px solid var(--sa-black); outline-offset: -2px; }

.SAweb_program .ex-origin { display: flex; align-items: center; gap: 0.6rem; }
.SAweb_program .ex-origin__k {
  font-size: 0.72rem;
  font-weight: var(--w-extrabold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--fg-3);
  white-space: nowrap;
}
.SAweb_program .ex-seg button { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.4rem 0.8rem; font-size: 0.85rem; }
/* the toggle mirrors the map: same SA pin next to each building name */
.SAweb_program .ex-pinico { width: 13px; height: auto; display: block; }

.SAweb_program .ex-body {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  flex: 1 1 auto;
  min-height: 0;
}
.SAweb_program .ex-list {
  overflow-y: auto;
  overscroll-behavior: contain;
  border-right: 1px solid var(--sa-fence);
  min-height: 0;
}
.SAweb_program .ex-msg { padding: 1.6rem; font-size: 0.95rem; color: var(--fg-2); line-height: var(--lh-normal); }
.SAweb_program .ex-row {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  padding: 0.7rem 1.1rem;
  border-bottom: 1px solid var(--sa-mist);
  transition: background var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .ex-row.is-on { background: var(--sa-paper); }
.SAweb_program .ex-row__n {
  flex: 0 0 auto;
  width: 22px; height: 22px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--sa-black);
  font-size: 0.7rem; font-weight: var(--w-bold);
}
.SAweb_program .ex-row.is-on .ex-row__n { background: var(--sa-black); color: var(--sa-white); }
.SAweb_program .ex-row__main { flex: 1; min-width: 0; }
.SAweb_program .ex-row__name { display: block; font-size: 0.95rem; font-weight: var(--w-bold); line-height: 1.25; }
.SAweb_program .ex-row__addr {
  display: block; font-size: 0.8rem; color: var(--fg-3); margin-top: 0.1rem;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.SAweb_program .ex-row__d {
  flex: 0 0 auto; font-size: 0.85rem; font-weight: var(--w-bold);
  font-variant-numeric: tabular-nums; color: var(--fg-2);
}
.SAweb_program .ex-map { min-height: 0; }
.SAweb_program .ex-map__canvas { width: 100%; height: 100%; min-height: 320px; background: var(--sa-paper); }

@media (max-width: 860px) {
  .SAweb_program .ex-body { grid-template-columns: 1fr; }
  .SAweb_program .ex-list { border-right: 0; border-bottom: 1px solid var(--sa-fence); max-height: 40vh; }
  .SAweb_program .ex-map__canvas { min-height: 280px; }
  .SAweb_program .ex-bar { gap: 0.8rem; }
}

/* Explore: hold a stable body height. Without this the dialog collapsed and
   sprang back on every tab change, because the list empties while the next
   search runs and the modal is content-sized. */
.SAweb_program .ex-body { height: min(58vh, 560px); }
@media (max-width: 860px) {
  .SAweb_program .ex-body { height: auto; }
}
/* rows are <button> now (click flies the map there) */
.SAweb_program button.ex-row {
  width: 100%;
  font: inherit;
  text-align: left;
  background: transparent;
  cursor: pointer;
}
.SAweb_program button.ex-row:focus { outline: none; }
.SAweb_program button.ex-row:focus-visible { outline: 2px solid var(--sa-black); outline-offset: -2px; }
/* InfoWindow content */
.SAweb_program .ex-iw, .gm-style .ex-iw { font-family: var(--font-body); padding: 0.1rem 0.2rem; max-width: 220px; }
.gm-style .ex-iw strong { display: block; font-family: var(--font-display); font-size: 0.95rem; font-weight: 700; line-height: 1.25; }
.gm-style .ex-iw span { display: block; font-size: 0.8rem; color: #5c5c5c; margin-top: 0.15rem; }
.gm-style .ex-iw em { display: block; font-size: 0.78rem; font-style: normal; font-weight: 600; color: #6a6a6a; margin-top: 0.3rem; }

/* links inside the dark support panel need to read against black */
.SAweb_program .a-panel--dark li a {
  color: var(--sa-white);
  border-bottom: 1px solid rgba(255, 255, 255, 0.45);
  word-break: break-word;
}
.SAweb_program .a-panel--dark li a:hover { border-bottom-color: var(--sa-white); opacity: 1; }

/* Anchor targets must clear the sticky header. Without this, "#locations" et al.
   scroll the section flush to the viewport top, where the header + strap band
   cover the section heading and its action button. --program-head-h is measured
   and set by the page component; the fallback covers a first paint before JS. */
.SAweb_program section[id] {
  scroll-margin-top: calc(var(--program-head-h, 7rem) + 1.25rem);
}

/* building name under the SA pin on the map. Google renders marker labels as
   plain text with no backdrop, which is unreadable over map detail — the halo
   is drawn with text-shadow since the label element takes no box styling. */
.gm-style .ex-pinlabel {
  text-shadow:
    0 0 3px #fff, 0 0 3px #fff, 0 0 3px #fff, 0 0 3px #fff,
    0 1px 2px rgba(255, 255, 255, 0.9);
  letter-spacing: -0.01em;
  white-space: nowrap;
}

/* ---- inline neighbourhood preview in the locations section head ---------- */
.SAweb_program .a-locmap { flex: 0 0 auto; width: min(340px, 100%); }
.SAweb_program .a-locmap__card {
  display: block;
  position: relative;
  width: 100%;
  padding: 0;
  background: var(--sa-paper);
  border: var(--border-w) solid var(--sa-black);
  cursor: pointer;
  overflow: hidden;
  text-align: left;
  font: inherit;
}
/* Building list — shown WITH the map (pins say "two places", not which two), and
   it is also what carries the card when Maps fails to render. */
.SAweb_program .a-locmap__flat { display: block; padding: 1.15rem 1.15rem 1rem; }
.SAweb_program .a-locmap__addr {
  display: grid;
  grid-template-columns: 16px 1fr;
  column-gap: 0.5rem;
  align-items: start;
  line-height: 1.3;
}
.SAweb_program .a-locmap__addr + .a-locmap__addr { margin-top: 0.6rem; }
.SAweb_program .a-locmap__pin { width: 13px; height: auto; margin-top: 0.15rem; }
.SAweb_program .a-locmap__nm { font-size: 0.9rem; font-weight: var(--w-bold); }
.SAweb_program .a-locmap__addr em {
  grid-column: 2;
  font-style: normal;
  font-weight: var(--w-medium);
  font-size: 0.8rem;
  color: var(--fg-3);
  margin-top: 0.05rem;
}
.SAweb_program .a-locmap__cta {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.7rem 1.15rem;
  border-top: var(--border-w) solid var(--sa-black);
  background: var(--sa-white);
  font-family: var(--font-display);
  font-size: 0.92rem;
  font-weight: var(--w-semibold);
  transition: background var(--dur-base, 0.3s) var(--ease), color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .a-locmap__card:hover .a-locmap__cta { background: var(--sa-black); color: var(--sa-white); }
.SAweb_program .a-locmap__card:focus { outline: none; }
.SAweb_program .a-locmap__card:focus-visible { outline: 2px solid var(--sa-black); outline-offset: 2px; }
@media (max-width: 760px) {
  .SAweb_program .a-locmap { width: 100%; }
}

/* Parking Yes/No — radios, matching the Property picker's vocabulary. The radio
   itself inherits the reset above (global rules force 30px + a ghost ::after). */
.SAweb_program .rn-radios { display: flex; gap: 0.6rem; flex-wrap: wrap; }
.SAweb_program .rn-radio {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  position: relative;
  border: 1px solid var(--sa-fence);
  padding: 0.62rem 1.1rem 0.62rem 0.9rem;
  cursor: pointer;
  min-width: 6.5rem;
  transition: border-color var(--dur-base, 0.3s) var(--ease);
}
.SAweb_program .rn-radio:hover { border-color: var(--fg-3); }
.SAweb_program .rn-radio.is-on { border-color: var(--sa-black); box-shadow: inset 0 0 0 1px var(--sa-black); }
.SAweb_program .rn-radio input[type="radio"] { position: static; flex: none; }
.SAweb_program .rn-radio__t { font-size: 0.95rem; font-weight: var(--w-semibold); }
@media (max-width: 620px) {
  .SAweb_program .rn-radio { flex: 1 1 0; min-height: 2.75rem; justify-content: center; }
}

/* ---- loading skeletons (locations search) -------------------------------- */
.SAweb_program .a-spin { display: inline-block; animation: aSpin 0.9s linear infinite; }
@keyframes aSpin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .SAweb_program .a-spin { animation: none; }
}
.SAweb_program .a-locmsg--busy { margin-bottom: 1.25rem; }
/* the skeleton mirrors .a-loccard so the grid keeps its shape and results do not
   shift the page when they land */
.SAweb_program .a-skel { pointer-events: none; }
.SAweb_program .a-skel__box,
.SAweb_program .a-skel__line,
.SAweb_program .a-skel__chip {
  background: linear-gradient(90deg, var(--sa-mist) 25%, var(--sa-fog) 37%, var(--sa-mist) 63%);
  background-size: 400% 100%;
  animation: aShimmer 1.4s ease-in-out infinite;
}
@keyframes aShimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) {
  .SAweb_program .a-skel__box,
  .SAweb_program .a-skel__line,
  .SAweb_program .a-skel__chip { animation: none; }
}
.SAweb_program .a-skel__box { width: 100%; height: 100%; }
.SAweb_program .a-skel__line { height: 13px; margin-bottom: 0.55rem; }
.SAweb_program .a-skel__line--title { width: 72%; height: 16px; }
.SAweb_program .a-skel__line--addr { width: 88%; }
.SAweb_program .a-skel__chips { display: flex; gap: 0.4rem; margin-top: 0.7rem; }
.SAweb_program .a-skel__chip { width: 58px; height: 20px; }

/* footer "Reservation Form" is a <button> where it opens the dialog — must be
   indistinguishable from the sibling <a> links around it */
.SAweb_program .ca-flink {
  border: 0;
  background: transparent;
  padding: 0;
  font: inherit;
  font-size: 0.9rem;
  color: rgba(255, 255, 255, 0.72);
  cursor: pointer;
  text-align: left;
}
.SAweb_program .ca-flink:hover { color: var(--sa-white); }
.SAweb_program .ca-flink:focus { outline: none; }
.SAweb_program .ca-flink:focus-visible { outline: 2px solid var(--sa-white); outline-offset: 2px; }
