@import url("font-tokens.css?v=kaiti-1");
/* HansMed — Healing Courtyard */
:root {
  /* Palette: warm cream / clay / ink */
  --cream-50: #FBF7EE;
  --cream-100: #F5EEDF;
  --cream-200: #ECE2CC;
  --cream-300: #DCCBA8;
  --clay-200: #C9B393;
  --clay-400: #A0825F;
  --clay-500: #8B6B47;
  --clay-600: #6B4A30;
  --clay-700: #4E3422;
  --ink-900: #261810;
  --ink-800: #34221A;
  --ink-700: #4A3326;
  --ink-500: #6B5346;
  --ink-300: #9C8676;
  --mist: rgba(255, 250, 240, 0.55);
  --shadow-soft: 0 18px 60px -20px rgba(38, 24, 16, 0.18);
  --shadow-deep: 0 40px 120px -30px rgba(38, 24, 16, 0.35);

  /* Type */
  /* Updated 2026-06-03: Fraunces dropped in favour of Fraunces as
     the primary display serif, to match the new editorial landing-page
     redesign. Every page using var(--font-display) inherits this swap —
     no per-page CSS changes needed. EB Garamond + Georgia stay as web-safe
     fallbacks for the rare device that can't load the Google font. */
  /* Chinese: 楷體 / Kai system stack, then Noto Serif SC fallback */
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: var(--font-ui);
  background: var(--cream-50);
  color: var(--ink-800);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

/* ─── Chinese language overrides ─── */
/* Fraunces (Trajan substitute) has no lowercase or italic.
   When the page is in Chinese, switch display surfaces to 楷體 and drop italic. */
html[lang="zh"] .landing-hero,
html[lang="zh"] .courtyard-title,
html[lang="zh"] .courtyard-sub,
html[lang="zh"] .bldg-hero-title,
html[lang="zh"] .module-title,
html[lang="zh"] .doctor-name,
html[lang="zh"] .product-name,
html[lang="zh"] .article-title,
html[lang="zh"] .future-card .ttl,
html[lang="zh"] .bldg-popover-name,
html[lang="zh"] .bldg-pin-name,
html[lang="zh"] .sitemap-section h2,
html[lang="zh"] .sitemap-header h1,
html[lang="zh"] .bldg-index-item .name,
html[lang="zh"] .landing-door-cue-main,
html[lang="zh"] .v2-hero-title,
html[lang="zh"] .v2-popover-cn,
html[lang="zh"] .v2-popover-en,
html[lang="zh"] .v2-pin-cn,
html[lang="zh"] .v2-pin-en {
  font-family: var(--font-zh);
  font-style: normal !important;
  letter-spacing: 0.02em;
}

/* The logo plate font stays the same regardless of selected page language */
html[lang="zh"] .nav-wordmark-primary {
  font-family: "Manrope", "Inter", system-ui, sans-serif !important;
  font-style: normal !important;
  font-weight: 700 !important;
}
html[lang="zh"] .nav-wordmark-sub {
  font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "PingFang SC", serif !important;
  font-style: normal !important;
}

/* Fraunces is all-caps; preserve case for English (no transform). */
html[lang="en"] .landing-hero,
html[lang="en"] .courtyard-title,
html[lang="en"] .bldg-hero-title,
html[lang="en"] .module-title,
html[lang="en"] .v2-hero-title,
html[lang="en"] .nav-wordmark-primary {
  font-style: normal;
  letter-spacing: 0.01em;
}

/* App shell */
#app {
  min-height: 100vh;
  position: relative;
  isolation: isolate;
}

/* Atmospheric backdrop (sun, grain) */
.atmosphere {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: -1;
  background:
    radial-gradient(ellipse at 80% -10%, rgba(220, 180, 130, 0.45), transparent 55%),
    radial-gradient(ellipse at 0% 100%, rgba(180, 140, 100, 0.18), transparent 50%),
    linear-gradient(180deg, var(--cream-50) 0%, var(--cream-100) 100%);
}
.grain {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 100;
  mix-blend-mode: multiply;
  opacity: 0.06;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.2 0 0 0 0 0.15 0 0 0 0 0.1 0 0 0 0.9 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
}

/* ─── Nav ─── */
.nav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 22px 48px;
  background: linear-gradient(180deg, rgba(251, 247, 238, 0.92), rgba(251, 247, 238, 0));
  backdrop-filter: blur(6px);
  transition: background 0.4s ease;
}
.nav.solid {
  background: rgba(251, 247, 238, 0.96);
  border-bottom: 1px solid rgba(78, 52, 34, 0.08);
}
.nav-brand {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  cursor: pointer;
  user-select: none;
  background: var(--clay-500);
  color: var(--cream-50) !important;
  padding: 10px 18px 10px 14px;
  border-radius: 14px;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
  box-shadow: 0 6px 16px -8px rgba(38, 24, 16, 0.32);
}
.nav-brand:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 24px -8px rgba(38, 24, 16, 0.35);
}
.nav-brand svg { width: 40px; height: 40px; }
.nav-wordmark-block {
  display: flex;
  flex-direction: column;
  line-height: 1;
}
.nav-wordmark-primary {
  font-family: "Manrope", "Inter", system-ui, sans-serif;
  font-style: normal;
  font-weight: 700;
  font-size: 22px;
  letter-spacing: 0.01em;
  color: currentColor;
  display: block;
}
.nav-wordmark-sub {
  font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "PingFang SC", serif;
  font-weight: 700;
  font-size: 13.5px;
  margin-top: 4px;
  display: block;
  color: rgba(245, 238, 223, 0.92);
  text-align: justify;
  text-align-last: justify;
  letter-spacing: 0.04em;
  font-style: normal;
}
.nav-center {
  display: flex;
  align-items: center;
  gap: 4px;
}
.nav-link {
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-700);
  padding: 10px 18px;
  border-radius: 999px;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease;
  letter-spacing: 0.01em;
}
.nav-link:hover { background: rgba(78, 52, 34, 0.06); }
.nav-link.active {
  background: var(--cream-200);
  color: var(--ink-900);
}
.nav-right {
  display: flex;
  align-items: center;
  gap: 12px;
}
.lang-toggle {
  display: flex;
  background: var(--cream-200);
  border-radius: 999px;
  padding: 3px;
  font-size: 13px;
}
.lang-toggle button {
  border: none;
  background: transparent;
  padding: 6px 14px;
  border-radius: 999px;
  font-family: var(--font-ui);
  font-weight: 500;
  color: var(--ink-700);
  cursor: pointer;
}
.lang-toggle button.active {
  background: var(--ink-900);
  color: var(--cream-50);
}
.btn {
  font-family: var(--font-ui);
  font-size: 14px;
  font-weight: 500;
  border: none;
  border-radius: 999px;
  cursor: pointer;
  transition: all 0.2s ease;
  white-space: nowrap;
  letter-spacing: 0.01em;
}
.btn-primary {
  background: var(--soft-burgundy, #6B2E28);
  color: var(--cream-50);
  padding: 13px 28px;
}
.btn-primary:hover { background: var(--soft-burgundy-hover, #5A2622); transform: translateY(-1px); }
.btn-ghost {
  background: transparent;
  color: var(--ink-800);
  padding: 13px 22px;
}
.btn-outline {
  background: transparent;
  color: var(--ink-900);
  border: 1px solid rgba(38, 24, 16, 0.25);
  padding: 12px 26px;
}
.btn-outline:hover { background: rgba(38, 24, 16, 0.04); border-color: var(--ink-900); }
.btn-link {
  background: transparent;
  border: none;
  color: var(--ink-800);
  font-family: var(--font-ui);
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  padding: 4px 0;
  border-bottom: 1px solid var(--ink-800);
  border-radius: 0;
}

/* ─── Eyebrow rule ─── */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--clay-500);
}
.eyebrow::before, .eyebrow::after {
  content: "";
  width: 28px;
  height: 1px;
  background: currentColor;
  opacity: 0.5;
}

/* ─── Landing ─── */
.landing {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  position: relative;
  padding: 0 48px;
}
.landing-photo {
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(circle at 22% 60%, rgba(184, 138, 88, 0.5), transparent 35%),
    radial-gradient(circle at 78% 30%, rgba(228, 200, 160, 0.6), transparent 45%),
    radial-gradient(circle at 50% 50%, rgba(255, 245, 225, 0.4), transparent 60%),
    linear-gradient(160deg, var(--cream-100), var(--cream-200) 60%, var(--clay-200));
}
.landing-photo::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(251, 247, 238, 0.2) 0%, transparent 30%, transparent 70%, rgba(251, 247, 238, 0.6) 100%);
}
/* Atmospheric haze on landing — abstract light wash, no objects */
.landing-atmos {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
}
.haze {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.55;
  mix-blend-mode: screen;
  animation: hazeDrift 22s ease-in-out infinite alternate;
}
.haze-1 {
  width: 60vw; height: 60vw;
  left: -10%; bottom: -25%;
  background: radial-gradient(circle, rgba(255, 220, 170, 0.85), transparent 65%);
}
.haze-2 {
  width: 50vw; height: 50vw;
  right: -8%; top: -20%;
  background: radial-gradient(circle, rgba(255, 235, 200, 0.9), transparent 60%);
  animation-delay: -8s;
}
.haze-3 {
  width: 40vw; height: 40vw;
  left: 30%; top: 40%;
  background: radial-gradient(circle, rgba(220, 180, 130, 0.5), transparent 70%);
  animation-delay: -14s;
}
.horizon {
  position: absolute;
  left: 0; right: 0;
  bottom: 0;
  height: 22%;
  background: linear-gradient(180deg, transparent 0%, rgba(180, 145, 105, 0.18) 60%, rgba(140, 105, 70, 0.3) 100%);
  pointer-events: none;
}
@keyframes hazeDrift {
  0%   { transform: translate(0, 0) scale(1); }
  100% { transform: translate(40px, -30px) scale(1.08); }
}

/* Landing variants — text + interactive door composition */
.landing.align-centered {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding-top: 130px;
  padding-bottom: 80px;
}
.landing.align-centered .landing-content {
  text-align: center;
  max-width: 920px;
  margin-bottom: 72px;
}

.landing.align-asymmetric {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  align-items: center;
  gap: 60px;
  padding-top: 140px;
  padding-bottom: 80px;
  max-width: 1440px;
  margin: 0 auto;
  width: 100%;
}
.landing.align-asymmetric .landing-content {
  text-align: left;
  max-width: 640px;
  margin-left: 4%;
}
.landing.align-asymmetric .landing-door {
  justify-self: center;
}

.landing.align-editorial {
  display: grid;
  grid-template-columns: 220px 1fr 1fr;
  align-items: center;
  gap: 40px;
  padding-top: 140px;
  padding-bottom: 80px;
  max-width: 1500px;
  margin: 0 auto;
  width: 100%;
}
.landing.align-editorial .landing-side {
  display: flex;
  flex-direction: column;
  gap: 30px;
}
.landing.align-editorial .landing-content {
  text-align: left;
  max-width: 560px;
}
.landing.align-editorial .landing-hero { font-size: clamp(56px, 7vw, 112px); }
.landing.align-editorial .landing-door {
  justify-self: center;
}

.landing-content {
  display: flex;
  flex-direction: column;
  gap: 12px;
  position: relative;
  z-index: 2;
}
.landing-hero {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 500;
  font-size: clamp(64px, 9.5vw, 156px);
  line-height: 0.95;
  letter-spacing: -0.025em;
  color: var(--ink-900);
  margin: 0;
}
.landing-hero.one-line .hero-line {
  display: block;
  white-space: nowrap;
}
.hero-lead { color: var(--ink-900); }
.hero-accent {
  position: relative;
  display: inline-block;
  color: var(--clay-500);
  padding: 0 0.04em;
}
.hero-underline {
  position: absolute;
  left: 4%;
  right: 4%;
  bottom: -0.04em;
  width: 92%;
  height: 0.22em;
  color: var(--clay-500);
  overflow: visible;
  pointer-events: none;
}
.hero-underline path {
  stroke-dasharray: 220;
  stroke-dashoffset: 220;
  animation: heroUnderlineDraw 1.4s cubic-bezier(0.4, 0.1, 0.2, 1) 1.4s forwards;
}
@keyframes heroUnderlineDraw {
  to { stroke-dashoffset: 0; }
}
.landing-hero .hero-line {
  display: block;
  opacity: 0;
  transform: translateY(20px);
  animation: heroIn 1.1s cubic-bezier(0.2, 0.7, 0.2, 1) forwards;
}
.landing-hero .hero-line:nth-child(1) { animation-delay: 0.4s; }
.landing-hero .hero-line:nth-child(2) { animation-delay: 0.65s; }
.landing-hero .hero-line:nth-child(3) { animation-delay: 0.9s; }
@keyframes heroIn {
  to { opacity: 1; transform: translateY(0); }
}

.landing-eyebrow-row {
  opacity: 0;
  animation: heroIn 0.8s ease 0.15s forwards;
}

/* Editorial side-bar — stat column */
.landing-side-stat {
  font-family: var(--font-display);
  font-style: normal;
}
.landing-side-stat .num { display: block; font-size: 48px; line-height: 1; color: var(--ink-900); }
.landing-side-stat .lbl { font-family: var(--font-ui); font-style: normal; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--clay-500); margin-top: 8px; display: block; }

/* Landing door — interactive door illustration on the landing page */
.landing-door {
  position: relative;
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0;
  cursor: pointer;
  opacity: 0;
  animation: heroIn 1s ease 1.2s forwards;
  user-select: none;
}
.landing-door-cue {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  margin-bottom: 72px;
}
.landing-door-cue-main {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 500;
  font-size: 30px;
  color: var(--ink-900);
  letter-spacing: -0.005em;
  transition: transform 0.4s ease;
}
.landing-door-cue-sub {
  font-size: 11px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--clay-600);
  font-weight: 600;
}
.landing-door.is-hovered .landing-door-cue-main { transform: translateY(-2px); }

.landing-door-frame {
  position: relative;
  width: clamp(320px, 32vw, 460px);
  aspect-ratio: 11 / 16;
  background: #1a0f08;
  border: 12px solid #2a1810;
  border-radius: 50% 50% 4px 4px / 16% 16% 4px 4px;
  box-shadow:
    0 0 0 18px rgba(78, 52, 34, 0.14),
    0 40px 90px -18px rgba(38, 24, 16, 0.42),
    inset 0 0 50px rgba(0,0,0,0.65);
  transition: transform 0.5s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow 0.5s ease;
  overflow: hidden;
}
.landing-door.is-hovered .landing-door-frame {
  transform: translateY(-4px) scale(1.02);
  box-shadow:
    0 0 0 14px rgba(78, 52, 34, 0.2),
    0 40px 90px -16px rgba(38, 24, 16, 0.55),
    inset 0 0 40px rgba(0,0,0,0.7);
}
.landing-door-glow {
  position: absolute;
  inset: 6%;
  background: radial-gradient(ellipse at center, rgba(255, 220, 170, 0.95), rgba(255, 190, 120, 0.5) 40%, transparent 75%);
  opacity: 0;
  filter: blur(3px);
  transition: opacity 0.5s ease;
  pointer-events: none;
}
.landing-door.is-hovered .landing-door-glow { opacity: 0.7; }

.landing-door-leaf {
  position: absolute;
  top: 0; bottom: 0;
  width: 50%;
  background:
    repeating-linear-gradient(90deg, #4a2e1a, #5a3820 8px, #4a2e1a 16px),
    linear-gradient(180deg, #5e3a22, #3a2114);
  background-blend-mode: multiply;
  box-shadow: inset 0 0 30px rgba(0,0,0,0.6);
  transition: transform 0.7s cubic-bezier(0.4, 0.05, 0.25, 1);
  transform-style: preserve-3d;
}
.landing-door-leaf.left {
  left: 0;
  transform-origin: left center;
  border-right: 2px solid #1a0f08;
  border-radius: 50% 0 0 0 / 30% 0 0 0;
}
.landing-door-leaf.right {
  right: 0;
  transform-origin: right center;
  border-left: 2px solid #1a0f08;
  border-radius: 0 50% 0 0 / 0 30% 0 0;
}
.landing-door.is-hovered .landing-door-leaf.left  { transform: rotateY(-16deg); }
.landing-door.is-hovered .landing-door-leaf.right { transform: rotateY(16deg); }

.ld-knob {
  position: absolute;
  top: 50%;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #d4a86a, #6b4a25);
  box-shadow: 0 1px 3px rgba(0,0,0,0.5);
  transform: translateY(-50%);
  z-index: 2;
}
.landing-door-leaf.left .ld-knob  { right: 12px; }
.landing-door-leaf.right .ld-knob { left: 12px; }

.ld-panel {
  position: absolute;
  left: 18%;
  right: 18%;
  height: 24%;
  border: 1.5px solid rgba(26, 15, 8, 0.7);
  border-radius: 4px;
  background: rgba(26, 15, 8, 0.18);
}
.ld-panel-1 { top: 14%; }
.ld-panel-2 { bottom: 14%; }

.landing-door-lintel {
  position: absolute;
  top: -22px;
  left: -18px;
  right: -18px;
  height: 14px;
  background: linear-gradient(180deg, #3a2418 0%, #261810 100%);
  border-radius: 3px;
  box-shadow: 0 4px 8px rgba(38, 24, 16, 0.25);
}
.landing-door-threshold {
  position: absolute;
  bottom: -10px;
  left: -10px;
  right: -10px;
  height: 5px;
  background: linear-gradient(180deg, #4a3020 0%, #2a1810 100%);
  border-radius: 2px;
  opacity: 0.7;
}

.landing-door-arrow {
  font-family: var(--font-display);
  font-style: normal;
  font-size: 16px;
  color: var(--clay-600);
  letter-spacing: 0.15em;
  margin-top: 26px;
  transition: transform 0.4s ease, color 0.3s ease;
}
.landing-door.is-hovered .landing-door-arrow {
  transform: translateX(6px);
  color: var(--ink-900);
}

/* ─── Door ─── */
.door-scene {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: radial-gradient(ellipse at center, #2a1b10 0%, #100804 80%);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  perspective: 1800px;
  perspective-origin: 50% 50%;
}
.door-scene .vignette {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,0.6) 90%);
  pointer-events: none;
}
.door-frame {
  position: relative;
  width: clamp(380px, 42vw, 640px);
  height: clamp(560px, 72vh, 880px);
  background: #1a0f08;
  border: 14px solid #2a1810;
  border-radius: 50% 50% 4px 4px / 18% 18% 4px 4px;
  box-shadow:
    0 0 0 24px rgba(40, 25, 15, 0.6),
    0 0 80px 30px rgba(200, 150, 80, 0.15),
    inset 0 0 60px rgba(0,0,0,0.6);
  transform-style: preserve-3d;
}
.door-leaf {
  position: absolute;
  top: 0; bottom: 0;
  width: 50%;
  background:
    repeating-linear-gradient(90deg, #4a2e1a, #5a3820 12px, #4a2e1a 24px),
    linear-gradient(180deg, #5e3a22, #3a2114);
  background-blend-mode: multiply;
  box-shadow: inset 0 0 40px rgba(0,0,0,0.6);
  transition: transform 2.8s cubic-bezier(0.6, 0.05, 0.25, 1);
  transform-origin: var(--hinge);
  transform-style: preserve-3d;
}
.door-leaf.left {
  left: 0;
  --hinge: left center;
  border-right: 2px solid #1a0f08;
  border-radius: 50% 0 0 0 / 30% 0 0 0;
}
.door-leaf.right {
  right: 0;
  --hinge: right center;
  border-left: 2px solid #1a0f08;
  border-radius: 0 50% 0 0 / 0 30% 0 0;
}
.door-knob {
  position: absolute;
  top: 50%;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #d4a86a, #6b4a25);
  box-shadow: 0 2px 6px rgba(0,0,0,0.5);
  transform: translateY(-50%);
}
.door-leaf.left .door-knob { right: 20px; }
.door-leaf.right .door-knob { left: 20px; }
.door-light {
  position: absolute;
  inset: 4%;
  background: radial-gradient(ellipse at center, rgba(255, 230, 180, 0.95), rgba(255, 200, 140, 0.5) 40%, transparent 70%);
  opacity: 0;
  transition: opacity 1.8s ease 0.6s;
  pointer-events: none;
  filter: blur(2px);
}
.door-scene.opening .door-leaf.left { transform: rotateY(-105deg); }
.door-scene.opening .door-leaf.right { transform: rotateY(105deg); }
.door-scene.opening .door-light { opacity: 1; }

.door-caption {
  position: absolute;
  bottom: 8%;
  left: 50%;
  transform: translateX(-50%);
  color: rgba(255, 230, 195, 0.7);
  font-family: var(--font-display);
  font-style: normal;
  font-size: 22px;
  letter-spacing: 0.04em;
  text-align: center;
  animation: doorCaption 4s ease forwards;
}
@keyframes doorCaption {
  0% { opacity: 0; transform: translate(-50%, 10px); }
  20%, 70% { opacity: 1; transform: translate(-50%, 0); }
  100% { opacity: 0; }
}
.door-skip {
  position: absolute;
  top: 32px;
  right: 32px;
  background: transparent;
  color: rgba(255, 230, 195, 0.6);
  border: 1px solid rgba(255, 230, 195, 0.25);
  border-radius: 999px;
  padding: 8px 18px;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  cursor: pointer;
  font-family: var(--font-ui);
}
.door-skip:hover { background: rgba(255, 230, 195, 0.08); }

/* ─── Courtyard ─── */
.courtyard {
  min-height: 100vh;
  padding: 110px 48px 48px;
  position: relative;
}
.courtyard-header {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 18px;
  margin-bottom: 64px;
  opacity: 0;
  animation: heroIn 0.9s ease 0.3s forwards;
}
.courtyard-title {
  font-family: var(--font-display);
  font-style: normal;
  font-size: clamp(40px, 5vw, 64px);
  font-weight: 500;
  color: var(--ink-900);
  margin: 0;
  line-height: 1.05;
}
.courtyard-sub {
  font-size: 15px;
  color: var(--ink-700);
  max-width: 540px;
  line-height: 1.6;
}

/* Courtyard stage — illustrated */
.stage {
  position: relative;
  margin: 0 auto;
  max-width: 1400px;
  aspect-ratio: 16 / 9;
  border-radius: 24px;
  overflow: visible;
  background:
    radial-gradient(ellipse at 50% 90%, rgba(220, 200, 160, 0.6), transparent 60%),
    linear-gradient(180deg, #e8d8b8 0%, #d4bf95 45%, #c9b07d 75%, #b89968 100%);
  box-shadow: var(--shadow-deep);
}
.stage > .sky {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 45%;
  background: linear-gradient(180deg, #f3e3c5 0%, #e8d4ab 60%, transparent 100%);
  border-radius: 24px 24px 0 0;
}
.stage .sun {
  position: absolute;
  top: 8%;
  right: 12%;
  width: 110px;
  height: 110px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 230, 180, 0.95), rgba(255, 200, 140, 0.3) 50%, transparent 80%);
  filter: blur(2px);
}
.stage > .ground {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  height: 30%;
  background:
    repeating-linear-gradient(90deg, rgba(60, 40, 25, 0.06) 0 60px, transparent 60px 120px),
    linear-gradient(180deg, #b8966b 0%, #8b6e4a 100%);
  border-radius: 0 0 24px 24px;
}
.stage .mist {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at 50% 60%, transparent 30%, rgba(255, 245, 220, 0.18) 70%);
  pointer-events: none;
}

/* Building — persistent pin + hover popover */
.bldg {
  position: absolute;
  cursor: pointer;
  transition:
    transform 0.5s cubic-bezier(0.2, 0.7, 0.2, 1),
    filter 0.4s ease,
    opacity 0.4s ease;
  /* Recede into background so the pin labels read first */
  filter:
    drop-shadow(0 16px 26px rgba(40, 25, 15, 0.18))
    saturate(0.72)
    brightness(0.94)
    blur(0.4px);
}
.bldg:hover {
  transform: translateY(-8px) scale(1.03);
  filter:
    drop-shadow(0 36px 50px rgba(40, 25, 15, 0.4))
    saturate(1.05)
    brightness(1.04)
    blur(0);
  z-index: 5;
}
.stage.has-hover .bldg.is-dimmed {
  opacity: 0.38;
  filter:
    drop-shadow(0 14px 22px rgba(40, 25, 15, 0.14))
    saturate(0.5)
    brightness(0.92)
    blur(1.5px);
}
.bldg-card {
  width: 100%;
  height: 100%;
  position: relative;
}

/* Persistent pin floating above each building */
.bldg-pin {
  position: absolute;
  top: -58px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  pointer-events: none;
  transition: opacity 0.3s ease, transform 0.4s ease;
}
.stage.has-hover .bldg.is-dimmed .bldg-pin { opacity: 0.35; }
.bldg.is-hovered .bldg-pin { opacity: 0; transform: translateX(-50%) translateY(-6px); }
.bldg-pin-num {
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.24em;
  color: var(--ink-900);
  background: rgba(251, 247, 238, 0.95);
  padding: 3px 10px;
  border-radius: 999px;
  border: 1px solid rgba(78, 52, 34, 0.18);
  backdrop-filter: blur(6px);
  box-shadow: 0 2px 8px rgba(38, 24, 16, 0.12);
}
.bldg-pin-name {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 600;
  font-size: 24px;
  line-height: 1;
  color: var(--ink-900);
  letter-spacing: -0.01em;
  text-shadow:
    0 1px 2px rgba(251, 247, 238, 0.95),
    0 0 14px rgba(251, 247, 238, 0.85),
    0 0 24px rgba(251, 247, 238, 0.6);
}

/* Hover popover — rich card emerging above the building */
.bldg-popover {
  position: absolute;
  bottom: calc(100% + 4px);
  left: 50%;
  width: 280px;
  transform: translateX(-50%) translateY(8px);
  background: var(--cream-50);
  border: 1px solid rgba(78, 52, 34, 0.1);
  border-radius: 16px;
  padding: 18px 20px 16px;
  box-shadow:
    0 30px 70px -20px rgba(38, 24, 16, 0.45),
    0 4px 12px rgba(38, 24, 16, 0.08);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease, transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1);
  z-index: 10;
}
.bldg-popover::after {
  content: "";
  position: absolute;
  bottom: -7px;
  left: 50%;
  transform: translateX(-50%) rotate(45deg);
  width: 14px;
  height: 14px;
  background: var(--cream-50);
  border-right: 1px solid rgba(78, 52, 34, 0.1);
  border-bottom: 1px solid rgba(78, 52, 34, 0.1);
}
.bldg.is-hovered .bldg-popover {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
}
.bldg-popover-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.bldg-popover-num {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--clay-500);
}
.bldg-popover-kind {
  font-size: 9.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--clay-600);
  font-weight: 600;
}
.bldg-popover-name {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 500;
  font-size: 28px;
  line-height: 1.1;
  color: var(--ink-900);
  margin: 0 0 8px;
}
.bldg-popover-desc {
  font-size: 13px;
  line-height: 1.55;
  color: var(--ink-700);
  margin: 0 0 12px;
}
.bldg-popover-cta {
  display: inline-flex;
  align-items: center;
  font-size: 13px;
  font-weight: 500;
  color: var(--ink-900);
  padding: 8px 0 2px;
  border-top: 1px solid rgba(78, 52, 34, 0.12);
  width: 100%;
}

/* Edge buildings: shift popover so it stays in-frame.
   With the new size order, FUTURE (V) is far-left and KNOWLEDGE (IV) is far-right. */
.bldg-future .bldg-popover { left: 0; transform: translateX(0) translateY(8px); }
.bldg-future .bldg-popover::after { left: 30px; transform: translateX(0) rotate(45deg); }
.bldg.bldg-future.is-hovered .bldg-popover { transform: translateX(0) translateY(0); }

.bldg-knowledge .bldg-popover { left: auto; right: 0; transform: translateX(0) translateY(8px); }
.bldg-knowledge .bldg-popover::after { left: auto; right: 30px; transform: translateX(0) rotate(45deg); }
.bldg.bldg-knowledge.is-hovered .bldg-popover { transform: translateX(0) translateY(0); }

/* Building roofs / bodies — simple geometric shapes */
.roof {
  position: absolute;
  left: -8%;
  right: -8%;
  top: 0;
  height: 38%;
  background: linear-gradient(180deg, #3a2418 0%, #4a2e20 80%, #2a1810 100%);
  clip-path: polygon(8% 0%, 92% 0%, 100% 100%, 0% 100%);
  box-shadow: inset 0 -2px 0 rgba(0,0,0,0.3);
}
.roof::before {
  content: "";
  position: absolute;
  bottom: -6px; left: 0; right: 0;
  height: 8px;
  background: #2a1810;
  border-radius: 2px;
}
.roof-curl-l, .roof-curl-r {
  position: absolute;
  top: 0;
  width: 18px;
  height: 24px;
  background: #3a2418;
}
.roof-curl-l {
  left: -10px;
  border-radius: 0 0 0 18px;
  transform: skewX(-15deg);
}
.roof-curl-r {
  right: -10px;
  border-radius: 0 0 18px 0;
  transform: skewX(15deg);
}
.body {
  position: absolute;
  left: 4%;
  right: 4%;
  top: 30%;
  bottom: 0;
  background: linear-gradient(180deg, var(--bldg-color, #f0e2c8) 0%, var(--bldg-color-dark, #d4c09a) 100%);
  border-radius: 2px;
  box-shadow: inset 0 0 0 1px rgba(60, 40, 25, 0.15), inset -20px 0 30px rgba(60, 40, 25, 0.15);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  padding-top: 10%;
}
.window {
  width: 60%;
  height: 26%;
  background: linear-gradient(180deg, rgba(60, 40, 25, 0.6), rgba(40, 25, 15, 0.85));
  border: 2px solid var(--clay-700);
  position: relative;
}
.window::before, .window::after {
  content: "";
  position: absolute;
  background: var(--clay-700);
}
.window::before { left: 50%; top: 0; bottom: 0; width: 2px; transform: translateX(-50%); }
.window::after { top: 50%; left: 0; right: 0; height: 2px; transform: translateY(-50%); }
.window.glow {
  background: linear-gradient(180deg, rgba(255, 220, 160, 0.6), rgba(220, 160, 80, 0.4));
  box-shadow: 0 0 30px rgba(255, 200, 130, 0.5);
}
.door-small {
  width: 26%;
  height: 38%;
  background: linear-gradient(180deg, #2a1810 0%, #3a2418 100%);
  border-radius: 60% 60% 0 0 / 20% 20% 0 0;
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  box-shadow: inset 0 6px 0 var(--clay-700);
}
.lantern {
  position: absolute;
  top: -16%;
  width: 14px;
  height: 22px;
  background: radial-gradient(ellipse at 50% 40%, #ff9b4a, #c25a1a);
  border-radius: 50% 50% 30% 30%;
  box-shadow: 0 0 12px rgba(255, 140, 60, 0.7);
  animation: lanternGlow 3s ease-in-out infinite alternate;
}
@keyframes lanternGlow {
  to { box-shadow: 0 0 20px rgba(255, 160, 80, 0.95); }
}
.lantern.left { left: 8%; }
.lantern.right { right: 8%; }

/* Building styling variants */
.bldg-clinic { --bldg-color: #f7f0e0; --bldg-color-dark: #e8dcc0; }
.bldg-clinic .roof { background: linear-gradient(180deg, #2c4a52 0%, #1a3a42 100%); }
.bldg-clinic .roof-curl-l, .bldg-clinic .roof-curl-r { background: #2c4a52; }

.bldg-pharmacy { --bldg-color: #d8b285; --bldg-color-dark: #b88d62; }
.bldg-pharmacy .roof { background: linear-gradient(180deg, #5a3018 0%, #3a1f0a 100%); }
.bldg-pharmacy .roof-curl-l, .bldg-pharmacy .roof-curl-r { background: #5a3018; }

.bldg-store { --bldg-color: #efd9b4; --bldg-color-dark: #d4b88a; }
.bldg-store .roof { background: linear-gradient(180deg, #4a3520 0%, #2a1d10 100%); }
.bldg-store .roof-curl-l, .bldg-store .roof-curl-r { background: #4a3520; }

.bldg-knowledge { --bldg-color: #e0d4b8; --bldg-color-dark: #c5b58e; }
.bldg-knowledge .roof { background: linear-gradient(180deg, #3a3020 0%, #1f1a10 100%); }
.bldg-knowledge .roof-curl-l, .bldg-knowledge .roof-curl-r { background: #3a3020; }

.bldg-future { --bldg-color: #ddd0bf; --bldg-color-dark: #b8a890; }
.bldg-future .roof { background: linear-gradient(180deg, #4a4035 0%, #2a241c 100%); }
.bldg-future .roof-curl-l, .bldg-future .roof-curl-r { background: #4a4035; }
.bldg-future .body { opacity: 0.85; }

/* Layout: U-Shape — sized by hierarchy. Center = largest. */
.layout-u .bldg-clinic    { left: 39%; top: 22%; width: 22%; height: 64%; } /* I  · largest · CENTER */
.layout-u .bldg-store     { left: 63%; top: 30%; width: 18%; height: 56%; } /* II · right     */
.layout-u .bldg-pharmacy  { left: 20%; top: 38%; width: 16%; height: 48%; } /* III· left      */
.layout-u .bldg-knowledge { left: 83%; top: 42%; width: 13%; height: 44%; } /* IV · far right */
.layout-u .bldg-future    { left: 4%;  top: 48%; width: 11%; height: 38%; opacity: 0.85; } /* V  · far left  */

/* Layout: Linear — same size hierarchy, slightly more even spacing */
.layout-linear .bldg-clinic    { left: 39%; top: 22%; width: 22%; height: 64%; }
.layout-linear .bldg-store     { left: 64%; top: 30%; width: 18%; height: 56%; }
.layout-linear .bldg-pharmacy  { left: 20%; top: 38%; width: 16%; height: 48%; }
.layout-linear .bldg-knowledge { left: 84%; top: 42%; width: 13%; height: 44%; }
.layout-linear .bldg-future    { left: 3%;  top: 48%; width: 11%; height: 38%; opacity: 0.85; }

/* Layout: Radial — same size hierarchy, fanned outward */
.layout-radial .bldg-clinic    { left: 39%; top: 22%; width: 22%; height: 64%; }
.layout-radial .bldg-store     { left: 63%; top: 30%; width: 18%; height: 56%; transform: rotate(7deg);  transform-origin: bottom center; }
.layout-radial .bldg-pharmacy  { left: 20%; top: 38%; width: 16%; height: 48%; transform: rotate(-7deg); transform-origin: bottom center; }
.layout-radial .bldg-knowledge { left: 83%; top: 42%; width: 13%; height: 44%; transform: rotate(14deg); transform-origin: bottom center; }
.layout-radial .bldg-future    { left: 4%;  top: 48%; width: 11%; height: 38%; transform: rotate(-14deg);transform-origin: bottom center; opacity: 0.85; }
.layout-radial .bldg:hover { transform: rotate(0deg) translateY(-6px) scale(1.04); }

/* Motion intensity */
.motion-minimal .bldg { transition: transform 0.25s ease, filter 0.25s ease; }
.motion-minimal .bldg:hover { transform: translateY(-2px); }
.motion-minimal .lantern { animation: none; box-shadow: 0 0 8px rgba(255, 140, 60, 0.5); }
.motion-minimal .stage .sun { animation: none; }
.motion-minimal .floating-leaf { display: none; }

.motion-cinematic .bldg { transition: transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1), filter 0.6s ease; }
.motion-cinematic .bldg:hover { transform: translateY(-12px) scale(1.04); }
.motion-cinematic .stage .sun { animation: sunPulse 6s ease-in-out infinite; }
.motion-cinematic .floating-leaf { animation-duration: 14s; }
@keyframes sunPulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.85; transform: scale(1.1); }
}

/* Falling leaves — varied size, start, drift */
.floating-leaf {
  position: absolute;
  border-radius: 60% 30% 60% 30%;
  opacity: 0.55;
  pointer-events: none;
  animation: floatLeaf 18s linear infinite;
}
@keyframes floatLeaf {
  0% { transform: translate(0, 0) rotate(var(--r0, 0deg)); opacity: 0; }
  10% { opacity: 0.7; }
  90% { opacity: 0.55; }
  100% { transform: translate(var(--dx, 50px), var(--dy, 110vh)) rotate(calc(var(--r0, 0deg) + 360deg)); opacity: 0; }
}
.floating-leaf.l1 {
  left: 8%;  top: -2%;
  width: 16px; height: 20px;
  background: radial-gradient(ellipse at 40% 30%, #d4884a, #7a3a14);
  --dx: 40px;  --dy: 70vh;  --r0: -20deg;
  animation-delay: 0s;       animation-duration: 17s;
}
.floating-leaf.l2 {
  left: 32%; top: 22%;
  width: 10px; height: 13px;
  background: radial-gradient(ellipse at 40% 30%, #c97f3a, #6e3210);
  --dx: -25px; --dy: 55vh;  --r0: 35deg;
  opacity: 0.45;
  animation-delay: -6s;      animation-duration: 22s;
}
.floating-leaf.l3 {
  left: 56%; top: 8%;
  width: 13px; height: 17px;
  background: radial-gradient(ellipse at 40% 30%, #b87035, #65300f);
  --dx: 55px;  --dy: 65vh;  --r0: 15deg;
  animation-delay: -11s;     animation-duration: 16s;
}
.floating-leaf.l4 {
  left: 78%; top: -4%;
  width: 18px; height: 22px;
  background: radial-gradient(ellipse at 40% 30%, #d99554, #843e16);
  --dx: -30px; --dy: 60vh;  --r0: -45deg;
  animation-delay: -3s;      animation-duration: 24s;
}
.floating-leaf.l5 {
  left: 18%; top: 50%;
  width: 8px;  height: 11px;
  background: radial-gradient(ellipse at 40% 30%, #c07435, #5a280b);
  --dx: 35px;  --dy: 40vh;  --r0: 60deg;
  opacity: 0.4;
  animation-delay: -14s;     animation-duration: 19s;
}
.floating-leaf.l6 {
  left: 88%; top: 38%;
  width: 11px; height: 14px;
  background: radial-gradient(ellipse at 40% 30%, #cf8141, #6f3211);
  --dx: -45px; --dy: 45vh;  --r0: -10deg;
  animation-delay: -8s;      animation-duration: 20s;
}

/* Stage caption / hint */
.stage-hint {
  position: absolute;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(60, 40, 25, 0.55);
  background: rgba(251, 247, 238, 0.6);
  padding: 6px 14px;
  border-radius: 999px;
  pointer-events: none;
  backdrop-filter: blur(4px);
}

/* Building index list — removed; buildings are the buttons directly */

/* ─── Building page ─── */
.bldg-page {
  min-height: 100vh;
  padding: 110px 48px 80px;
}
/* 48px a side is a desktop margin. On a 375px phone it spent 96px — 26%
   of the screen — on empty paper and squeezed every block to 279px. The
   article and blog pages use 20px at this width; these two (clinic and
   wellness-hall) had no mobile rule at all.
   Only the HORIZONTAL padding changes: the 110px top is clearing the
   fixed nav, which is 71px at phone widths and 143px from 769 up. */
@media (max-width: 600px) {
  .bldg-page { padding-left: 20px; padding-right: 20px; }
}
@media (min-width: 601px) and (max-width: 900px) {
  .bldg-page { padding-left: 32px; padding-right: 32px; }
}
.bldg-page-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.bldg-page-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--clay-600);
  cursor: pointer;
  background: transparent;
  border: none;
  font-family: var(--font-ui);
  /* The hit area, not the look. At padding:0 this link was 19px tall —
     a 106x19 target against a ~44px guideline. The padding makes it 45,
     and the negative margins cancel it again so the text sits exactly
     where it did: -13/-6 against 13/6, and the 32px gap below is now
     19 margin + 13 padding. */
  padding: 13px 6px;
  margin: -13px -6px 19px;
}
.bldg-page-back:hover { color: var(--ink-900); }
.bldg-page-back:focus-visible {
  outline: 2px solid var(--clay-600);
  outline-offset: 2px;
  border-radius: 6px;
}

.bldg-hero {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 60px;
  align-items: end;
  border-bottom: 1px solid rgba(78, 52, 34, 0.12);
  padding-bottom: 48px;
  margin-bottom: 56px;
}
.bldg-hero-text { display: flex; flex-direction: column; gap: 20px; }
.bldg-hero-num {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.2em;
  color: var(--clay-500);
}
.bldg-hero-title {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 500;
  font-size: clamp(48px, 5.5vw, 88px);
  line-height: 1.02;
  letter-spacing: -0.015em;
  color: var(--ink-900);
  margin: 0;
}
.bldg-hero-desc {
  font-size: 17px;
  line-height: 1.6;
  color: var(--ink-700);
  max-width: 460px;
}
.bldg-hero-vis {
  aspect-ratio: 4 / 3;
  border-radius: 16px;
  background:
    radial-gradient(circle at 40% 60%, rgba(220, 180, 130, 0.6), transparent 60%),
    linear-gradient(160deg, var(--cream-100), var(--clay-200));
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.bldg-hero-vis::after {
  content: "";
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(45deg, rgba(78, 52, 34, 0.02) 0 12px, transparent 12px 24px);
}
.bldg-hero-vis .placeholder-label {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--clay-600);
  background: rgba(251, 247, 238, 0.7);
  padding: 6px 14px;
  border-radius: 999px;
  z-index: 2;
}

/* Building modules */
.modules {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 24px;
  margin-bottom: 48px;
}
.module {
  background: var(--cream-100);
  border-radius: 18px;
  padding: 32px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  border: 1px solid rgba(78, 52, 34, 0.06);
}
/* 32px a side inside a 335px phone column left the organ dial 269px
   wide. The card does not need a desktop gutter on a phone. */
@media (max-width: 600px) {
  .module { padding: 20px; }
}
.module.dark { background: var(--ink-900); color: var(--cream-50); border-color: transparent; }
.module.dark .module-eyebrow { color: rgba(245, 238, 223, 0.6); }
.module.dark .module-title { color: var(--cream-50); }
.module.dark .module-text { color: rgba(245, 238, 223, 0.75); }
.module-eyebrow {
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--clay-600);
  font-weight: 600;
}
.module-title {
  font-family: var(--font-display);
  font-style: normal;
  font-size: 32px;
  line-height: 1.1;
  color: var(--ink-900);
  margin: 0;
}
.module-text {
  font-size: 15px;
  line-height: 1.6;
  color: var(--ink-700);
}

/* Doctor cards */
.doctor-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
  margin-top: 12px;
}
.doctor-card {
  background: var(--cream-50);
  border-radius: 12px;
  padding: 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.doctor-avatar {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: linear-gradient(160deg, var(--clay-200), var(--clay-500));
}
.doctor-name { font-family: var(--font-display); font-style: normal; font-size: 20px; color: var(--ink-900); }
.doctor-spec { font-size: 12px; letter-spacing: 0.05em; color: var(--clay-600); }
.doctor-meta { font-size: 12px; color: var(--ink-500); display: flex; gap: 10px; flex-wrap: wrap; }
.doctor-meta span { padding: 3px 8px; background: rgba(78, 52, 34, 0.06); border-radius: 999px; }

/* Time slots */
.slot-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.slot {
  font-size: 12px;
  padding: 6px 12px;
  background: var(--cream-50);
  border: 1px solid rgba(78, 52, 34, 0.12);
  border-radius: 999px;
  cursor: pointer;
}
.slot:hover { background: var(--cream-200); border-color: var(--clay-500); }
.slot.taken { color: var(--ink-300); text-decoration: line-through; cursor: not-allowed; }

/* Product cards */
.product-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
  margin-top: 16px;
}
.product-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  cursor: pointer;
  transition: transform 0.3s ease;
}
.product-card:hover { transform: translateY(-3px); }
.product-img {
  aspect-ratio: 1;
  border-radius: 12px;
  background:
    radial-gradient(circle at 40% 40%, rgba(255, 240, 210, 0.8), transparent 70%),
    linear-gradient(160deg, var(--cream-100), var(--clay-200));
  position: relative;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
}
.product-img::after {
  content: "";
  position: absolute; inset: 0;
  background: repeating-linear-gradient(45deg, rgba(78, 52, 34, 0.02) 0 12px, transparent 12px 24px);
}
.product-img .ph-tag {
  position: relative; z-index: 2;
  font-family: var(--font-mono);
  font-size: 9px; letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--clay-600);
  background: rgba(251, 247, 238, 0.75);
  padding: 4px 10px; border-radius: 999px;
}
.product-name { font-family: var(--font-display); font-style: normal; font-size: 18px; color: var(--ink-900); line-height: 1.2; }
.product-price { font-family: var(--font-ui); font-size: 13px; color: var(--clay-600); }
.product-tag { font-size: 10px; letter-spacing: 0.15em; text-transform: uppercase; color: var(--clay-500); font-weight: 600; }

/* Wellness-quiz card (wellness-hall). Redesigned 2026-09-21 (HQ
   site-spec_wellness-hall-quiz-card, xian: "B is good"): a pale-sand card in
   the site's own palette in place of the dark block that was the cream
   site's only dark surface; the mascot now steps forward WITH its name and
   a two-item trait line, so sixteen figures register as a set instead of
   passing anonymously. Copy dropped the retired "assistant" framing and the
   "instantly" promise; "not a diagnosis" is in the sub-line. */
.ai-card {
  grid-column: span 12;
  background: var(--cream-100);
  border: 1px solid #DED2C0;
  color: var(--ink-800);
  border-radius: 22px;
  padding: 40px;
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 40px;
  align-items: center;
  position: relative;
  overflow: hidden;
}
.ai-card-text { position: relative; }
.ai-card-eyebrow { font-size: 11px; letter-spacing: 0.25em; text-transform: uppercase; color: var(--clay-500); margin-bottom: 16px; font-weight: 600; }
.ai-card-title { font-family: var(--font-display); font-style: normal; font-size: 44px; line-height: 1.05; color: var(--ink-900); margin: 0 0 14px; }
.ai-card-desc { font-size: 17px; line-height: 1.6; color: var(--ink-500); max-width: 400px; margin-bottom: 24px; }
.ai-card .btn-primary { align-self: flex-start; }
/* The right-hand side: one mascot large on a soft disc, its name and trait
   line beside it, a strip of eight small ones as a hint of the rest. The
   figures are the TRANSPARENT cut (assets/img/wellness/mascots/), not the
   opaque originals under assets/reports/wellness/mascots/. */
.ai-figure {
  display: grid;
  grid-template-columns: minmax(150px, 190px) 1fr;
  gap: 18px 22px;
  align-items: center;
  width: 100%;
}
.ai-figure-disc {
  position: relative;
  display: grid;
  place-items: center;
  aspect-ratio: 1 / 1;
  width: 100%;
  border-radius: 50%;
  background: #F4ECE0;
}
.ai-figure-img {
  grid-area: 1 / 1;
  width: 92%;
  height: 92%;
  object-fit: contain;
  opacity: 0;
  position: relative;
}
.ai-figure-img.is-on { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  .ai-figure-img { transition: opacity 0.7s ease; }
  .ai-figure-meta.is-swapping .ai-figure-name,
  .ai-figure-meta.is-swapping .ai-figure-trait { opacity: 0; }
  .ai-figure-name, .ai-figure-trait { transition: opacity 0.35s ease; }
}
.ai-figure-meta { min-width: 0; }
.ai-figure-name { font-family: var(--font-display); font-size: 26px; line-height: 1.15; color: var(--ink-900); }
html[lang="zh"] .ai-figure-name { font-family: var(--font-zh); }
.ai-figure-trait { font-size: 14px; line-height: 1.5; color: var(--ink-500); margin: 6px 0 14px; }
.ai-figure-strip { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; padding: 0; list-style: none; }
.ai-figure-strip button {
  width: 40px; height: 40px; padding: 3px; border: 1px solid transparent; border-radius: 50%;
  background: #F4ECE0; cursor: pointer; display: grid; place-items: center;
  transition: border-color 0.2s ease, transform 0.2s ease;
}
.ai-figure-strip button img { width: 100%; height: 100%; object-fit: contain; display: block; }
.ai-figure-strip button:hover, .ai-figure-strip button:focus-visible { border-color: var(--clay-400); transform: translateY(-1px); outline: none; }
.ai-figure-strip button.is-current { border-color: var(--clay-600); }
.ai-figure-count { font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--clay-500); }

/* Article cards (knowledge) */
.article-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 16px;
}
.article-card { display: flex; flex-direction: column; gap: 12px; cursor: pointer; }
.article-img {
  aspect-ratio: 5/4;
  border-radius: 12px;
  background: linear-gradient(160deg, var(--cream-200), var(--clay-200));
  position: relative;
  overflow: hidden;
}
.article-img::after {
  content: "";
  position: absolute; inset: 0;
  background: repeating-linear-gradient(45deg, rgba(78, 52, 34, 0.02) 0 14px, transparent 14px 28px);
}
.article-meta { display: flex; gap: 10px; font-size: 11px; letter-spacing: 0.15em; text-transform: uppercase; color: var(--clay-600); font-weight: 600; }
.article-title { font-family: var(--font-display); font-style: normal; font-size: 24px; line-height: 1.15; color: var(--ink-900); margin: 0; }
.article-excerpt { font-size: 14px; line-height: 1.55; color: var(--ink-500); }

/* Future cards */
.future-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 16px; }
.future-card {
  background: var(--cream-50);
  border: 1px dashed rgba(78, 52, 34, 0.25);
  border-radius: 16px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-height: 200px;
}
.future-card .tag { font-size: 10px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--clay-500); font-weight: 600; }
.future-card .ttl { font-family: var(--font-display); font-style: normal; font-size: 26px; line-height: 1.15; color: var(--ink-900); }
.future-card .desc { font-size: 13px; line-height: 1.55; color: var(--ink-500); }
.future-card .status { margin-top: auto; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.15em; color: var(--clay-600); text-transform: uppercase; }

/* ─── Sitemap ─── */
.sitemap {
  min-height: 100vh;
  padding: 110px 48px 80px;
}
.sitemap-inner {
  max-width: 1400px;
  margin: 0 auto;
}
.sitemap-header {
  display: flex;
  justify-content: space-between;
  align-items: end;
  border-bottom: 1px solid rgba(78, 52, 34, 0.15);
  padding-bottom: 32px;
  margin-bottom: 48px;
  flex-wrap: wrap;
  gap: 24px;
}
.sitemap-header h1 { font-family: var(--font-display); font-style: normal; font-size: 64px; margin: 8px 0 0; color: var(--ink-900); font-weight: 500; line-height: 1; }
.sitemap-header p { font-size: 15px; color: var(--ink-500); max-width: 480px; line-height: 1.6; }

.sitemap-tree {
  display: grid;
  grid-template-columns: 280px 1fr;
  gap: 48px;
}
.sitemap-side {
  position: sticky;
  top: 110px;
  align-self: start;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.sitemap-side-item {
  padding: 12px 16px;
  border-radius: 10px;
  font-size: 14px;
  color: var(--ink-700);
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.sitemap-side-item:hover { background: var(--cream-100); }
.sitemap-side-item.active { background: var(--ink-900); color: var(--cream-50); }
.sitemap-side-item .n { font-family: var(--font-mono); font-size: 11px; opacity: 0.7; }

.sitemap-section {
  border-top: 1px solid rgba(78, 52, 34, 0.1);
  padding: 36px 0 48px;
}
.sitemap-section:first-child { border-top: none; padding-top: 0; }
.sitemap-section h2 {
  font-family: var(--font-display);
  font-style: normal;
  font-size: 38px;
  font-weight: 500;
  margin: 0 0 8px;
  color: var(--ink-900);
}
.sitemap-section .lede { color: var(--ink-500); font-size: 14px; max-width: 600px; margin-bottom: 20px; }
.sitemap-section .pages {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}
.sitemap-page {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 14px 18px;
  background: var(--cream-100);
  border-radius: 10px;
  border-left: 3px solid var(--clay-400);
}
.sitemap-page .pn { font-family: var(--font-mono); font-size: 11px; color: var(--clay-600); flex-shrink: 0; }
.sitemap-page .pt { font-size: 14px; font-weight: 500; color: var(--ink-800); }
.sitemap-page .pd { font-size: 12px; color: var(--ink-500); margin-left: auto; text-align: right; }

/* Footer */
.footer {
  background: var(--ink-900);
  color: rgba(245, 238, 223, 0.78);
  padding: 60px 48px 36px;
  margin-top: 80px;
}
.footer-inner {
  max-width: 1280px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 56px;
}

/* Row 1: logo · partners · cert */
.footer-top {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 48px;
  padding-bottom: 48px;
  border-bottom: 1px solid rgba(245, 238, 223, 0.1);
}
.footer-top-logo { display: flex; align-items: center; }

.footer-eyebrow {
  font-size: 10px;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(245, 238, 223, 0.45);
  font-weight: 600;
  display: block;
  margin-bottom: 14px;
  text-align: center;
}

.footer-partners {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-self: center;
}
.footer-partners-row {
  display: flex;
  align-items: center;
  gap: 22px;
  color: rgba(245, 238, 223, 0.78);
}
.partner-stamp {
  white-space: nowrap;
  font-size: 15px;
  color: rgba(245, 238, 223, 0.85);
  letter-spacing: 0.005em;
  /* hover lift */
  cursor: default;
  transition: color 0.2s ease;
}
.partner-stamp:hover { color: var(--cream-50); }
.partner-stamp-1 {
  font-family: var(--font-ui);
  font-weight: 700;
  letter-spacing: 0.04em;
}
.partner-stamp-1::first-letter,
.partner-stamp-1 {
  /* "BIG Pharmacy" - bold sans */
}
.partner-stamp-2 {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 500;
  font-size: 18px;
}
.partner-stamp-3 {
  font-family: var(--font-ui);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-size: 13px;
}
.partner-divider {
  width: 1px;
  height: 22px;
  background: rgba(245, 238, 223, 0.2);
}

.footer-cert {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-self: end;
}
.footer-cert .footer-eyebrow { text-align: right; }
.footer-cert-row {
  display: flex;
  align-items: center;
  gap: 14px;
  color: rgba(245, 238, 223, 0.78);
}
.moh-stamp {
  width: 56px;
  height: 56px;
  color: rgba(245, 238, 223, 0.55);
  flex-shrink: 0;
}
.footer-cert-text {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  text-align: right;
  gap: 3px;
  max-width: 280px;
}
.footer-cert-line1 {
  font-family: var(--font-display);
  font-style: normal;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--cream-50);
  line-height: 1.35;
}
.footer-cert-line2 {
  font-size: 11px;
  letter-spacing: 0.04em;
  color: rgba(245, 238, 223, 0.6);
  max-width: 280px;
  line-height: 1.45;
}

/* Row 2: link columns */
.footer-cols {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 40px;
}
.footer-col h4 {
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  margin: 0 0 14px;
  color: rgba(245, 238, 223, 0.5);
  font-weight: 600;
}
/* Footer links were 16px tall with an 8px gap — 21 targets, every one under
   the 44px touch minimum, and under WCAG 2.5.8's 24px floor even on desktop.
   The row now carries a real 44px height and the link fills it, so the whole
   row is the target rather than the text alone.

   An invisible ::before hit area was measured and rejected: at an 8px gap the
   padding needed to reach 44px makes neighbouring zones overlap, so a tap on
   "Terms" could land on "Privacy". The gap is folded into the row height
   instead (gap 8 -> 0), which is why the footer grows less than the naive
   21 x 28px would suggest.

   The <li> below is align-items:center, which shrink-wraps its flex child to
   the text height. `width:100%` alone therefore only filled the row
   HORIZONTALLY — the anchor stayed 19px tall inside a 44px row, leaving 25px
   of dead space that looked like a target but navigated nowhere. The anchor
   needs align-self:stretch to take the row's full height, and its own
   flex/align-items to keep the label optically centred. Measure the ANCHOR,
   not the row: the row was already 44px while every link was still 19px. */
.footer-col ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0; }
.footer-col ul li {
  font-size: 14px;
  color: rgba(245, 238, 223, 0.78);
  cursor: pointer;
  min-height: 44px;
  display: flex;
  align-items: center;
}
.footer-col ul li a { display: flex; align-items: center; align-self: stretch; width: 100%; }
.footer-col ul li:hover { color: var(--cream-50); }

.footer-bottom {
  max-width: 1280px;
  margin: 48px auto 0;
  padding-top: 24px;
  border-top: 1px solid rgba(245, 238, 223, 0.12);
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: rgba(245, 238, 223, 0.55);
}

/* Responsive niceties */
@media (max-width: 900px) {
  .nav { padding: 14px 18px; }
  .nav-center { display: none; }
  .landing { padding: 0 24px; }
  .courtyard { padding: 90px 18px 32px; }
  .bldg-index { grid-template-columns: 1fr; }
  .bldg-popover { width: 220px; padding: 14px 16px 12px; }
  .bldg-popover-name { font-size: 22px; }
  .bldg-pin-name { font-size: 19px; }
  .bldg-pin { top: -48px; }
  .modules { grid-template-columns: 1fr; }
  .doctor-row, .product-grid, .article-grid, .future-grid { grid-template-columns: 1fr 1fr; }
  .ai-card { grid-template-columns: 1fr; padding: 24px; }
  /* Phone: the figure and its meta stack; the strip is two rows of four. */
  .ai-figure { grid-template-columns: 1fr; justify-items: center; gap: 14px; text-align: center; }
  .ai-figure-disc { max-width: 200px; }
  .ai-figure-name { font-size: 22px; }
  .ai-figure-strip { max-width: 178px; margin-inline: auto; justify-content: center; }
  .bldg-hero { grid-template-columns: 1fr; gap: 24px; }
  .sitemap-tree { grid-template-columns: 1fr; }
  .sitemap-side { position: static; flex-direction: row; flex-wrap: wrap; }
  .footer-inner { gap: 40px; }
  .footer-top {
    grid-template-columns: 1fr;
    gap: 32px;
    text-align: center;
  }
  .footer-top-logo { justify-content: center; }
  .footer-partners { align-items: center; }
  .footer-cert { align-items: center; justify-self: center; }
  .footer-cert .footer-eyebrow { text-align: center; }
  .footer-cols { grid-template-columns: 1fr 1fr; gap: 28px; }
}

/* ── Skip link ──────────────────────────────────────────────────────────────
   DUPLICATED FROM base.css ON PURPOSE. base.css carries the same block, but
   only 6 public pages load it (the legal/utility ones) — the other 12 load
   this file instead, so without this copy their skip link had NO styling at
   all and rendered as a visible "Skip to main content" link at the top of the
   page (verified live on article/contact/shop, 2026-08-15). The four app
   shells (admin/portal/doctor/pharmacy) load base.css and NOT this file, so
   base.css must keep its copy; adding base.css to the public pages instead
   would have dragged in unrelated rules. Keep the two blocks in step.

   Mechanism, same as base.css: 'left:-9999px' rather than clip — the earlier
   clip-based pattern still painted on tester's mobile + iPad. On :focus the
   link snaps into the top-left corner.

   Token fallbacks are load-bearing: tokens.css is only on 8 of the 18 public
   pages, so var(--ink) alone would leave the focused link transparent. */
.skip-link {
  position: absolute !important;
  left: -9999px !important;
  top: 0;
  background: var(--ink, #1A1612);
  color: var(--washi, #EDE7D8);
  padding: 0.5rem 1rem;
  z-index: var(--z-max, 9999);
}
.skip-link:focus {
  left: 0 !important;
}

/* ───── Footer edge on small screens ─────────────────────────────────────────
   .footer carried a flat 48px inset at every width while the pages above it
   sit far tighter. Measured at 375px: the landing's content starts at 22, the
   blog's and the article's at 20, the footer at 48. So the footer stepped
   inward from the page it belongs to, on every page, and spent 96px of a
   375px screen on margin — which is also what squeezed the link columns.

   The values here match what the pages actually use rather than inventing a
   third number: 20px on phones, 24px on tablets (blog cards measure 24 at
   768). Above 900px the 48px inset is untouched — there it is a deliberate
   part of the footer band, not a mismatch.

   .footer-cert-line2 is the one piece of real sentence text down here, and
   it names the register practitioners are licensed under, so it is worth
   reading; 11px is too small for that on a phone.

   The uppercase micro-labels (.footer-eyebrow, .footer-col h4) come up two
   points on small screens and lose roughly 40% of their tracking with it.
   Both halves matter: 10px set in caps at 0.28em is hard to read because of
   the spacing as much as the size, since tracking that wide stops the eye
   reading a word as one shape. They stay tracked caps — 0.16em and 0.13em is
   still far looser than body text, so these remain labels, not headings.

   Tracking down makes the words narrower, so unlike the size bump this
   direction cannot wrap anything: REGISTERED goes 105px -> 90px and NAVIGATE
   80px -> 71px inside an unchanged 154px column at 375px. Measured.

   Placed last in the file: .footer's own padding is declared far above, and
   the footer's existing 900px block sits above it too. */
@media (max-width: 900px) {
  .footer { padding-left: 24px; padding-right: 24px; }
  .footer-cert-line2 { font-size: 13px; }
  .footer-eyebrow { font-size: 12px; letter-spacing: 0.16em; }
  .footer-col h4 { font-size: 12.5px; letter-spacing: 0.13em; }
}
@media (max-width: 600px) {
  .footer { padding-left: 20px; padding-right: 20px; }
}
