:root {
  --app-gradient: linear-gradient(135deg, #fffaf2 0%, #f7f1ff 48%, #eef8ff 100%);
  --app-header-gradient: linear-gradient(135deg, #fffaf2 0%, #f7f1ff 48%, #eef8ff 100%);
  --paper: #fbf7ef;
  /* How far a section's wash takes to arrive and to leave. Every band on these
     pages is a translucent veil over ONE continuous mesh painted on <body>, so
     a section boundary was a hard step in that veil — measured at 9-18 levels
     across the chores page, which is what makes the join visible as a line.
     Each veil now ramps from nothing to full over this distance at both ends,
     so neighbours cross-dissolve through the bare mesh instead of meeting at
     an edge.

     Sized to finish inside the padding at every width, so no text ever sits on
     the ramp. The binding constraint is .feature-page .section, which cuts the
     base padding down to clamp(52px, 6.5vw, 88px) — not the 64-116 the rule
     above reads as. */
  --seam: clamp(44px, 5.6vw, 76px);
  --paper-2: rgba(255, 255, 255, 0.56);
  --surface: #fffdf8;
  --ink: #101226;
  --muted: #5f6178;
  --soft: #dfece9;
  --line: rgba(16, 18, 38, 0.12);
  --teal: #2f7f78;
  --teal-deep: #1f5e59;
  --coral: #ff6b35;
  --amber: #f59e0b;
  --blue: #60a5fa;
  --shadow: 0 8px 40px rgba(31, 94, 89, 0.12);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  scrollbar-width: none;
}

body {
  margin: 0;
  background:
    radial-gradient(circle at 78% 12%, rgba(181, 213, 245, 0.48), transparent 34%),
    radial-gradient(circle at 16% 42%, rgba(245, 158, 11, 0.1), transparent 28%),
    linear-gradient(135deg, #fffaf2 0%, #f7f1ff 48%, #eef8ff 100%);
  color: var(--ink);
  scrollbar-width: none;
}

html::-webkit-scrollbar,
body::-webkit-scrollbar {
  display: none;
}

body.nav-open {
  overflow: hidden;
}

.scroll-progress {
  position: fixed;
  top: calc(var(--header-bottom, 66px) - 3px);
  left: 50%;
  z-index: 42;
  width: min(1180px, calc(100% - 36px));
  height: 3px;
  background: rgba(26, 26, 46, 0.12);
  pointer-events: none;
  transform: translateX(-50%);
}

.scroll-progress span {
  display: block;
  width: 0%;
  height: 100%;
  background: linear-gradient(90deg, var(--teal), var(--amber), var(--coral));
  transform-origin: left center;
}

.chapter-progress {
  position: fixed;
  top: calc(var(--header-bottom, 66px) + 12px);
  left: 50%;
  z-index: 38;
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: min(1180px, calc(100% - 36px));
  gap: clamp(24px, 5vw, 86px);
  overflow-x: auto;
  padding: 0 0 8px;
  transform: translateX(-50%);
  scrollbar-width: none;
  transition:
    opacity 220ms ease,
    transform 220ms ease;
}

.chapter-progress::-webkit-scrollbar {
  display: none;
}

.chapter-progress button {
  flex: 0 0 auto;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: rgba(26, 26, 46, 0.36);
  cursor: pointer;
  font: inherit;
  font-size: 0.72rem;
  font-weight: 860;
  padding: 0;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  transition:
    background 180ms ease,
    color 180ms ease,
    opacity 220ms ease,
    transform 220ms ease;
}

.chapter-progress button.is-discovered {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}

.chapter-progress button.is-current {
  background: transparent;
  color: rgba(26, 26, 46, 0.68);
}


.motion-ready .reveal-target {
  opacity: 0;
  transform: translateY(34px);
  transition:
    opacity 700ms ease,
    transform 700ms ease;
}

.motion-ready .reveal-target.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.motion-ready .reveal-target:nth-child(2) {
  transition-delay: 80ms;
}

.motion-ready .reveal-target:nth-child(3) {
  transition-delay: 140ms;
}

a {
  color: inherit;
}

img {
  max-width: 100%;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.site-header {
  position: sticky;
  top: 0;
  z-index: 40;
  border-bottom: 1px solid var(--line);
  background: rgba(251, 247, 239, 0.92);
  backdrop-filter: blur(18px);
  transition:
    transform 260ms ease,
    opacity 260ms ease;
}

body.memory-takeover-active .site-header {
  opacity: 0;
  pointer-events: none;
  transform: translateY(-100%);
}

body.memory-takeover-active .scroll-progress {
  opacity: 0;
}

body.memory-takeover-active .chapter-progress {
  opacity: 0;
  pointer-events: none;
}

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: min(1180px, calc(100% - 36px));
  margin: 0 auto;
  padding: 10px 0;
  gap: 16px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  font-weight: 850;
}

.brand-mark {
  display: grid;
  width: 34px;
  height: 34px;
  place-items: center;
  border-radius: 10px;
  background: transparent;
  overflow: hidden;
}

.brand-mark img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.nav {
  display: flex;
  align-items: center;
  gap: 6px;
}

.nav a {
  border-radius: 999px;
  padding: 9px 12px;
  color: #334743;
  font-size: 0.92rem;
  font-weight: 720;
  text-decoration: none;
}

.nav a:hover,
.nav a[aria-current="page"] {
  background: rgba(47, 127, 120, 0.11);
  color: var(--teal-deep);
}

.actions {
  display: flex;
  align-items: center;
  gap: 10px;
}

.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  border: 1px solid transparent;
  border-radius: 999px;
  padding: 0 18px;
  font-weight: 820;
  text-decoration: none;
  white-space: nowrap;
}

.button.primary {
  background: var(--teal-deep);
  color: var(--surface);
  box-shadow: 0 14px 32px rgba(31, 94, 89, 0.2);
}

.button.secondary {
  border-color: var(--line);
  background: rgba(255, 253, 248, 0.72);
  color: var(--ink);
}

.button.text {
  padding: 0;
  color: var(--teal-deep);
}

.menu-button {
  display: none;
  width: 44px;
  height: 44px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: rgba(255, 253, 248, 0.82);
  color: var(--ink);
  font: inherit;
  padding: 0;
}

.menu-lines {
  display: grid;
  gap: 4px;
  width: 18px;
}

.menu-lines span {
  display: block;
  height: 2px;
  border-radius: 999px;
  background: currentColor;
  transition:
    transform 180ms ease,
    opacity 180ms ease;
}

body.nav-open .menu-lines span:nth-child(1) {
  transform: translateY(6px) rotate(45deg);
}

body.nav-open .menu-lines span:nth-child(2) {
  opacity: 0;
}

body.nav-open .menu-lines span:nth-child(3) {
  transform: translateY(-6px) rotate(-45deg);
}

.section {
  padding: max(clamp(64px, 9vw, 116px), calc(var(--chapter-clearance, 48px) + 22px)) 0 clamp(64px, 9vw, 116px);
}

.section.alt {
  background: var(--paper-2);
}

.section.surface {
  background: var(--surface);
}

.scroll-story-section {
  padding-top: var(--chapter-clearance, 48px);
  padding-bottom: clamp(72px, 10vw, 128px);
}

[data-progress-target] {
  scroll-margin-top: calc(var(--header-bottom, 66px) + var(--chapter-clearance, 48px) + 12px);
}

[data-more-section] {
  min-height: calc(100vh - var(--header-bottom, 66px));
  display: grid;
  align-items: center;
  padding-top: max(clamp(54px, 7vw, 92px), calc(var(--chapter-clearance, 48px) + 22px));
  padding-bottom: clamp(54px, 7vw, 92px);
  scroll-margin-top: var(--header-bottom, 66px);
}

[data-more-section] > .wrap {
  width: min(1120px, calc(100% - 36px));
}

[data-more-section] .split {
  align-items: center;
}

[data-more-section] h2 {
  font-size: clamp(2.35rem, 5vw, 5.4rem);
  line-height: 1;
}

[data-more-section] .lead,
[data-more-section] .story-list {
  max-width: 660px;
}

.wrap {
  width: min(1180px, calc(100% - 36px));
  margin: 0 auto;
}

.scroll-story {
  display: grid;
  grid-template-columns: minmax(0, 0.82fr) minmax(480px, 1.18fr);
  gap: clamp(34px, 6vw, 76px);
  align-items: start;
}

.story-steps {
  display: grid;
  gap: 22px;
  padding-bottom: 34vh;
}

.story-step {
  position: relative;
  min-height: 52vh;
  padding: 22px 0 22px 24px;
  opacity: 0.48;
  transition:
    opacity 320ms ease,
    transform 320ms ease;
}

.story-step::before {
  content: "";
  position: absolute;
  top: 50%;
  bottom: auto;
  left: 0;
  width: 3px;
  height: min(190px, calc(100% - 44px));
  border-radius: 999px;
  background: rgba(47, 127, 120, 0.18);
  transform: translateY(-50%);
  transition: background 320ms ease;
}

.story-step[data-top-chapter] {
  min-height: calc(100vh - 108px);
  display: grid;
  align-content: center;
}

.story-step[data-top-chapter]::before {
  height: min(190px, calc(100% - 44px));
}

.story-step.active {
  opacity: 1;
  transform: translateX(6px);
}

.story-step.active::before {
  background: var(--teal);
}

.step-number {
  display: inline-block;
  margin-bottom: 14px;
  color: var(--coral);
  font-size: 0.82rem;
  font-weight: 900;
}

.story-step p {
  max-width: 460px;
  margin-top: 12px;
  color: var(--muted);
  font-size: 1.04rem;
  line-height: 1.62;
}

.scroll-product {
  position: sticky;
  top: 108px;
}

[data-top-chapter] {
  touch-action: pan-y;
}

.scroll-story-section {
  touch-action: none;
}

.narrative-panel {
  height: calc(100vh - 108px);
  min-height: 680px;
  display: grid;
  align-items: center;
  padding: max(clamp(40px, 6vw, 78px), var(--chapter-clearance, 48px)) 0 clamp(40px, 6vw, 78px);
}

.narrative-split {
  min-height: min(760px, calc(100vh - 150px));
}

.narrative-panel h2,
.story-intro-panel h2 {
  max-width: 940px;
  font-size: clamp(3rem, 7vw, 7.2rem);
}

.narrative-panel .lead,
.story-intro-panel .lead {
  max-width: 680px;
}

.narrative-stack {
  display: grid;
  align-content: center;
  gap: clamp(24px, 4vw, 42px);
  min-height: min(780px, calc(100vh - 150px));
}

.story-intro-panel {
  height: calc(100vh - 108px);
  min-height: 680px;
  display: grid;
  align-content: center;
  padding-top: var(--chapter-clearance, 48px);
  margin-bottom: clamp(28px, 5vw, 64px);
}

.story-intro-panel h2 {
  max-width: 1040px;
}

.scene-shell {
  padding: 18px;
  border-radius: 26px;
  background: #172326;
  box-shadow: 0 30px 80px rgba(24, 35, 38, 0.2);
}

.scene-frame {
  position: relative;
  overflow: hidden;
  min-height: 560px;
  border: 1px solid rgba(255, 253, 248, 0.15);
  border-radius: 14px;
  background:
    radial-gradient(circle at 18% 16%, rgba(231, 183, 95, 0.2), transparent 32%),
    linear-gradient(180deg, #fffdf8, #f7f0e4);
}

.scene {
  position: absolute;
  inset: 0;
  display: grid;
  align-content: start;
  gap: 22px;
  padding: clamp(22px, 4vw, 34px);
  opacity: 0;
  transform: translateY(36px) scale(0.975);
  transition:
    opacity 420ms ease,
    transform 520ms ease;
}

.scene.active {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.scene-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.82);
  padding: 14px;
}

.scene-header span {
  color: var(--muted);
  font-size: 0.86rem;
}

.scene-grid {
  display: grid;
  gap: 14px;
}

.scene-grid.four {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.scene-grid span,
.meal-stack span,
.prep-card,
.memory-big {
  border: 1px solid rgba(24, 35, 38, 0.11);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.82);
  box-shadow: 0 16px 32px rgba(24, 35, 38, 0.08);
}

.scene-grid span {
  display: grid;
  min-height: 132px;
  align-content: end;
  padding: 16px;
  color: #405651;
  font-weight: 850;
}

.calendar-lines {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  min-height: 290px;
  gap: 12px;
}

.calendar-lines span {
  position: relative;
  overflow: hidden;
  border-radius: 8px;
  background: rgba(47, 127, 120, 0.12);
}

.calendar-lines span::after {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  height: 52px;
  border-radius: 8px;
  background: rgba(47, 127, 120, 0.24);
  animation: sceneSlide 1.1s ease both;
}

.calendar-lines span:nth-child(1)::after {
  top: 42px;
}

.calendar-lines span:nth-child(2)::after {
  top: 118px;
  background: rgba(231, 183, 95, 0.32);
}

.calendar-lines span:nth-child(3)::after {
  top: 76px;
  background: rgba(75, 121, 168, 0.25);
}

.calendar-lines span:nth-child(4)::after {
  top: 154px;
  background: rgba(217, 120, 99, 0.25);
}

.calendar-lines span:nth-child(5)::after {
  top: 98px;
}

.meal-stack {
  display: grid;
  gap: 12px;
}

.meal-stack span {
  padding: 18px;
  color: #405651;
  font-weight: 840;
}

.meal-stack span:nth-child(2) {
  background: rgba(231, 183, 95, 0.2);
}

.meal-stack span:nth-child(3) {
  background: rgba(75, 121, 168, 0.13);
}

.routine-bars {
  display: flex;
  align-items: end;
  min-height: 310px;
  gap: 16px;
  border: 1px solid rgba(24, 35, 38, 0.11);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.82);
  padding: 26px;
}

.routine-bars span {
  flex: 1;
  border-radius: 12px 12px 4px 4px;
  background: rgba(217, 120, 99, 0.26);
  animation: routineGrow 700ms ease both;
}

.routine-bars span:nth-child(1) {
  height: 42%;
}

.routine-bars span:nth-child(2) {
  height: 74%;
  background: rgba(47, 127, 120, 0.28);
}

.routine-bars span:nth-child(3) {
  height: 56%;
  background: rgba(231, 183, 95, 0.34);
}

.routine-bars span:nth-child(4) {
  height: 86%;
  background: rgba(75, 121, 168, 0.2);
}

.prep-card {
  padding: 18px;
  color: #405651;
  font-weight: 840;
}

.memory-big {
  padding: clamp(28px, 5vw, 46px);
  color: var(--ink);
  font-size: clamp(1.8rem, 3.4vw, 3rem);
  font-weight: 900;
  line-height: 1.05;
}

.scene-memory .memory-actions {
  margin-top: 0;
}

@keyframes sceneSlide {
  from {
    opacity: 0;
    transform: translateY(18px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes routineGrow {
  from {
    transform: scaleY(0.2);
    transform-origin: bottom center;
  }
  to {
    transform: scaleY(1);
    transform-origin: bottom center;
  }
}

@keyframes orbitDrift {
  0%,
  100% {
    transform: translate3d(0, 0, 0) scale(1);
  }
  50% {
    transform: translate3d(18px, -22px, 0) scale(1.35);
  }
}

@keyframes nodeBreathe {
  0%,
  100% {
    transform: translateY(0);
    border-color: rgba(255, 253, 248, 0.16);
  }
  50% {
    transform: translateY(-7px);
    border-color: rgba(255, 253, 248, 0.38);
  }
}

@keyframes radarSpin {
  from {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@keyframes rowFloat {
  0%,
  100% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(10px);
  }
}

@keyframes suggestPulse {
  0%,
  100% {
    box-shadow: 0 18px 48px rgba(0, 0, 0, 0.18);
  }
  50% {
    box-shadow: 0 24px 74px rgba(217, 120, 99, 0.28);
  }
}

@keyframes briefingLift {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-9px);
  }
}

.hero {
  background:
    linear-gradient(180deg, rgba(255, 253, 248, 0.7), rgba(251, 247, 239, 0)),
    var(--paper);
  touch-action: pan-y;
}

.hero-panel {
  height: calc(100vh - 108px);
  min-height: 680px;
  display: grid;
  align-items: center;
  padding: max(clamp(54px, 7vw, 92px), var(--chapter-clearance, 54px)) 0 clamp(54px, 7vw, 92px);
}

.hero-intro-copy {
  max-width: 1080px;
}

.hero-intro h1 {
  max-width: 980px;
  font-size: clamp(4.2rem, 8.2vw, 8rem);
}

.hero-showcase {
  align-items: center;
  padding: max(clamp(22px, 4vw, 44px), var(--chapter-clearance, 44px)) 0 clamp(30px, 4vw, 54px);
}

.hero-showcase-inner {
  display: grid;
  grid-template-rows: auto auto;
  align-content: center;
  justify-content: stretch;
  gap: clamp(14px, 2vw, 22px);
  min-height: calc(100vh - 126px);
}

.hero-showcase-header {
  display: grid;
  justify-items: center;
  text-align: center;
}

.hero-showcase-header h2 {
  max-width: 560px;
  font-size: clamp(1.6rem, 2.4vw, 2.7rem);
}

.hero-showcase .hero-device {
  display: flex;
  width: 100%;
  min-height: 0;
  height: min(730px, calc(100vh - 270px));
  transform: none;
}

.hero-showcase .live-wall {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  width: 100%;
  min-height: 0;
  height: 100%;
  animation: none;
}

.hero-grid,
.split {
  display: grid;
  grid-template-columns: minmax(0, 0.92fr) minmax(420px, 1.08fr);
  align-items: center;
  gap: clamp(34px, 6vw, 74px);
}

.hero-grid > *,
.split > *,
.page-grid > *,
.scroll-story > * {
  min-width: 0;
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin: 0 0 18px;
  color: var(--teal-deep);
  font-size: 0.78rem;
  font-weight: 860;
  text-transform: uppercase;
}

.eyebrow::before {
  content: "";
  width: 9px;
  height: 9px;
  border-radius: 999px;
  background: var(--coral);
}

h1,
h2,
h3 {
  margin: 0;
  letter-spacing: 0;
}

h1 {
  max-width: 720px;
  font-size: clamp(3rem, 6vw, 5.7rem);
  line-height: 0.98;
}

.page-hero h1 {
  font-size: clamp(2.65rem, 5.2vw, 5rem);
}

h2 {
  max-width: 760px;
  font-size: clamp(2rem, 4vw, 3.5rem);
  line-height: 1.04;
}

h3 {
  font-size: clamp(1.18rem, 2vw, 1.48rem);
  line-height: 1.18;
}

p {
  margin: 0;
}

.lead {
  max-width: 720px;
  margin-top: 22px;
  color: var(--muted);
  font-size: clamp(1.08rem, 1.65vw, 1.26rem);
  line-height: 1.6;
}

.copy {
  color: var(--muted);
  font-size: 1rem;
  line-height: 1.62;
}

.hero-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 30px;
}

.trust-line {
  margin-top: 18px;
  color: #405651;
  font-size: 0.94rem;
  font-weight: 720;
}

.placeholder {
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(24, 35, 38, 0.16);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.12), transparent 34%),
    linear-gradient(315deg, rgba(217, 120, 99, 0.13), transparent 32%),
    var(--surface);
  box-shadow: var(--shadow);
}

.placeholder::after {
  content: "";
  position: absolute;
  inset: 12px;
  border: 1px dashed rgba(31, 94, 89, 0.32);
  border-radius: 6px;
  pointer-events: none;
}

.placeholder-inner {
  display: grid;
  min-height: inherit;
  padding: clamp(22px, 4vw, 34px);
  align-content: end;
  gap: 12px;
}

.placeholder.kitchen {
  min-height: 560px;
}

.placeholder.tall {
  min-height: 500px;
}

.placeholder.medium {
  min-height: 360px;
}

.placeholder.small {
  min-height: 260px;
}

.placeholder-label {
  width: fit-content;
  border-radius: 999px;
  background: rgba(255, 253, 248, 0.82);
  padding: 8px 12px;
  color: var(--teal-deep);
  font-size: 0.8rem;
  font-weight: 860;
}

.placeholder-title {
  max-width: 520px;
  font-size: clamp(1.45rem, 2.4vw, 2.1rem);
  font-weight: 850;
}

.placeholder-note {
  max-width: 540px;
  color: #475d58;
  line-height: 1.5;
}

.device-shell {
  padding: 18px;
  border-radius: 26px;
  background: #172326;
  box-shadow: 0 30px 80px rgba(24, 35, 38, 0.22);
}

.device-shell .placeholder {
  border-radius: 12px;
  box-shadow: none;
}

.hero-device {
  transform: rotateX(2deg) rotateY(-3deg);
}

.live-wall {
  overflow: hidden;
  min-height: 560px;
  border: 1px solid rgba(255, 253, 248, 0.14);
  border-radius: 14px;
  background:
    radial-gradient(circle at 18% 12%, rgba(231, 183, 95, 0.28), transparent 28%),
    radial-gradient(circle at 78% 82%, rgba(47, 127, 120, 0.3), transparent 32%),
    #fffdf8;
  color: var(--ink);
  animation: wallFloat 7s ease-in-out infinite;
}

.wall-topbar,
.wall-dock {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin: 18px;
  border: 1px solid rgba(24, 35, 38, 0.1);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.82);
  padding: 14px;
}

.wall-topbar strong,
.wall-topbar span {
  display: block;
}

.wall-topbar span {
  margin-top: 3px;
  color: var(--muted);
  font-size: 0.86rem;
}

.privacy-pill {
  border-radius: 999px;
  background: rgba(47, 127, 120, 0.12);
  color: var(--teal-deep) !important;
  padding: 8px 10px;
  font-size: 0.78rem !important;
  font-weight: 820;
  white-space: nowrap;
}

.wall-grid {
  display: grid;
  grid-template-columns: 1.08fr 0.92fr;
  gap: 14px;
  padding: 0 18px;
}

.wall-card {
  position: relative;
  overflow: hidden;
  min-height: 145px;
  border: 1px solid rgba(24, 35, 38, 0.1);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.9);
  padding: 18px;
  box-shadow: 0 14px 34px rgba(24, 35, 38, 0.08);
}

.wall-card::before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  background: var(--teal);
}

.meal-card::before {
  background: var(--amber);
}

.chores-card::before {
  background: var(--coral);
}

.memory-card {
  grid-column: span 2;
  background: linear-gradient(135deg, rgba(47, 127, 120, 0.11), rgba(255, 253, 248, 0.94));
  animation: memoryPulse 4.5s ease-in-out infinite;
}

.card-kicker {
  color: var(--teal-deep);
  font-size: 0.72rem;
  font-weight: 860;
  text-transform: uppercase;
}

.wall-card h3 {
  margin-top: 8px;
  font-size: 1.22rem;
}

.wall-card p {
  margin-top: 7px;
  color: var(--muted);
  line-height: 1.4;
}

.progress-line {
  overflow: hidden;
  height: 8px;
  margin-top: 18px;
  border-radius: 999px;
  background: rgba(47, 127, 120, 0.12);
}

.progress-line span {
  display: block;
  width: 68%;
  height: 100%;
  border-radius: inherit;
  background: var(--teal);
  animation: progressBreathe 3.8s ease-in-out infinite;
}

.ingredient-row,
.mini-bars,
.memory-actions {
  display: flex;
  gap: 8px;
  margin-top: 18px;
}

.ingredient-row span {
  width: 42px;
  height: 28px;
  border-radius: 999px;
  background: rgba(231, 183, 95, 0.38);
}

.mini-bars span {
  width: 18px;
  height: 38px;
  border-radius: 999px 999px 4px 4px;
  background: rgba(217, 120, 99, 0.32);
}

.mini-bars span:nth-child(2) {
  height: 54px;
}

.mini-bars span:nth-child(3) {
  height: 31px;
}

.mini-bars span:nth-child(4) {
  height: 48px;
}

.memory-actions span {
  border-radius: 999px;
  background: var(--teal-deep);
  color: var(--surface);
  padding: 8px 12px;
  font-size: 0.82rem;
  font-weight: 820;
}

.memory-actions span + span {
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--ink);
}

.wall-dock {
  justify-content: center;
  margin-top: 14px;
}

.wall-dock span {
  border-radius: 999px;
  background: rgba(24, 35, 38, 0.06);
  padding: 8px 12px;
  color: #405651;
  font-size: 0.82rem;
  font-weight: 760;
}

.feature-rail-section {
  overflow: hidden;
  padding: 0 0 30px;
  background: var(--paper);
}

.feature-rail {
  display: flex;
  gap: 10px;
  width: max-content;
  animation: railMove 28s linear infinite;
}

.feature-rail span {
  border: 1px solid var(--line);
  border-radius: 999px;
  background: rgba(255, 253, 248, 0.74);
  padding: 10px 14px;
  color: #405651;
  font-weight: 820;
  white-space: nowrap;
}

.sprawl-stage {
  position: relative;
  min-height: 390px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.08), transparent 45%),
    var(--surface);
  box-shadow: var(--shadow);
}

.problem-panel .sprawl-stage {
  min-height: min(520px, calc(100vh - 190px));
}

.sprawl-card {
  position: absolute;
  min-width: 138px;
  border: 1px solid rgba(24, 35, 38, 0.12);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.92);
  padding: 14px;
  color: #405651;
  font-weight: 820;
  box-shadow: 0 18px 40px rgba(24, 35, 38, 0.1);
  animation: orbitSoft 9s ease-in-out infinite;
}

.sprawl-card span {
  color: var(--muted);
  font-size: 0.84rem;
}

.sprawl-card.calendar {
  top: 32px;
  left: 28px;
}

.sprawl-card.note {
  top: 60px;
  right: 42px;
  animation-delay: -2s;
}

.sprawl-card.meal {
  bottom: 54px;
  left: 58px;
  animation-delay: -4s;
}

.sprawl-card.chore {
  right: 34px;
  bottom: 42px;
  animation-delay: -6s;
}

.sprawl-center {
  position: absolute;
  inset: 50%;
  display: grid;
  width: min(250px, 62%);
  transform: translate(-50%, -50%);
  justify-items: center;
  gap: 10px;
  border: 1px solid rgba(47, 127, 120, 0.24);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.9);
  padding: 24px;
  text-align: center;
}

.sprawl-center p {
  color: var(--muted);
  line-height: 1.45;
}

.tour-stage {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--paper);
  box-shadow: var(--shadow);
}

.tour-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  border-bottom: 1px solid var(--line);
  padding: 14px;
}

.tour-tab {
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  color: #405651;
  cursor: pointer;
  font: inherit;
  font-size: 0.92rem;
  font-weight: 820;
  padding: 10px 14px;
}

.tour-tab.active {
  border-color: rgba(47, 127, 120, 0.2);
  background: rgba(47, 127, 120, 0.12);
  color: var(--teal-deep);
}

.tour-panels {
  position: relative;
  min-height: 390px;
}

.tour-panel {
  display: none;
  grid-template-columns: minmax(0, 0.7fr) minmax(360px, 1fr);
  align-items: center;
  gap: clamp(22px, 5vw, 56px);
  padding: clamp(24px, 5vw, 54px);
}

.tour-panel.active {
  display: grid;
  animation: panelIn 380ms ease both;
}

.tour-panel p {
  margin-top: 12px;
  color: var(--muted);
  line-height: 1.56;
}

.tour-ui {
  position: relative;
  min-height: 270px;
  overflow: hidden;
  border: 1px solid rgba(24, 35, 38, 0.12);
  border-radius: 8px;
  background: var(--surface);
}

.tour-ui::before {
  content: "";
  position: absolute;
  inset: 14px;
  border-radius: 6px;
  background:
    linear-gradient(90deg, rgba(24, 35, 38, 0.08) 0 18%, transparent 18% 23%, rgba(47, 127, 120, 0.12) 23% 48%, transparent 48% 54%, rgba(231, 183, 95, 0.16) 54% 76%, transparent 76%),
    linear-gradient(180deg, transparent 0 28%, rgba(24, 35, 38, 0.06) 28% 30%, transparent 30% 58%, rgba(24, 35, 38, 0.06) 58% 60%, transparent 60%);
  animation: previewScan 4.5s ease-in-out infinite;
}

.tour-ui span,
.tour-ui strong,
.tour-ui p {
  position: relative;
  z-index: 1;
}

.tour-ui.wall-preview span,
.tour-ui.calendar-preview span,
.tour-ui.meals-preview span,
.tour-ui.routines-preview span {
  position: absolute;
  display: block;
  border-radius: 8px;
  background: rgba(47, 127, 120, 0.16);
}

.tour-ui.wall-preview span:nth-child(1) {
  inset: 30px 52% 54% 28px;
}

.tour-ui.wall-preview span:nth-child(2) {
  inset: 30px 28px 54% 52%;
  background: rgba(231, 183, 95, 0.22);
}

.tour-ui.wall-preview span:nth-child(3) {
  inset: 52% 58% 30px 28px;
  background: rgba(217, 120, 99, 0.18);
}

.tour-ui.wall-preview span:nth-child(4) {
  inset: 52% 28px 30px 44%;
}

.calendar-preview span {
  width: 17%;
  bottom: 30px;
  top: 38px;
}

.calendar-preview span:nth-child(1) {
  left: 26px;
}

.calendar-preview span:nth-child(2) {
  left: 26%;
  background: rgba(75, 121, 168, 0.18);
}

.calendar-preview span:nth-child(3) {
  left: 49%;
  background: rgba(231, 183, 95, 0.2);
}

.calendar-preview span:nth-child(4) {
  left: 72%;
  background: rgba(217, 120, 99, 0.18);
}

.meals-preview span,
.routines-preview span {
  left: 26px;
  right: 26px;
  height: 42px;
}

.meals-preview span:nth-child(1),
.routines-preview span:nth-child(1) {
  top: 34px;
}

.meals-preview span:nth-child(2),
.routines-preview span:nth-child(2) {
  top: 91px;
  background: rgba(231, 183, 95, 0.22);
}

.meals-preview span:nth-child(3),
.routines-preview span:nth-child(3) {
  top: 148px;
  background: rgba(217, 120, 99, 0.18);
}

.meals-preview span:nth-child(4),
.routines-preview span:nth-child(4) {
  top: 205px;
  background: rgba(75, 121, 168, 0.15);
}

.memory-preview {
  display: grid;
  align-content: center;
  gap: 12px;
  padding: 34px;
}

.memory-preview strong {
  font-size: 1.4rem;
}

.memory-preview span {
  width: fit-content;
  border-radius: 999px;
  background: var(--teal-deep);
  color: var(--surface);
  padding: 9px 13px;
  font-weight: 820;
}

.memory-preview span + span {
  background: rgba(24, 35, 38, 0.08);
  color: var(--ink);
}

.memory-takeover {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 118vh;
  display: grid;
  align-items: center;
  background:
    radial-gradient(circle at 50% 68%, rgba(217, 120, 99, 0.34), transparent 24%),
    radial-gradient(circle at 38% 62%, rgba(94, 117, 255, 0.32), transparent 26%),
    radial-gradient(circle at 60% 58%, rgba(47, 127, 120, 0.25), transparent 28%),
    #172326;
  color: #fffdf8;
  padding: clamp(86px, 12vw, 150px) 0;
}

.memory-takeover::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  background:
    linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px);
  background-size: 56px 56px;
  mask-image: radial-gradient(circle at center, black, transparent 72%);
}

.memory-takeover::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(180deg, #172326 0%, transparent 22%, transparent 76%, #172326 100%);
}

.memory-takeover-inner {
  position: relative;
  display: grid;
  justify-items: center;
  text-align: center;
}

.memory-lockup {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  color: #fffdf8;
  font-size: clamp(1.35rem, 3vw, 2.65rem);
  font-weight: 920;
}

.memory-mark {
  display: grid;
  width: clamp(44px, 6vw, 70px);
  height: clamp(44px, 6vw, 70px);
  place-items: center;
  border-radius: 22px;
  background: transparent;
  overflow: hidden;
  box-shadow:
    0 0 36px rgba(126, 201, 255, 0.44),
    0 0 70px rgba(217, 120, 99, 0.2);
}

.memory-mark img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.memory-takeover h2 {
  max-width: 1050px;
  margin-top: 42px;
  color: #fffdf8;
  font-size: clamp(3.2rem, 7vw, 7.4rem);
  line-height: 0.95;
}

.memory-takeover .lead {
  max-width: 820px;
  color: rgba(255, 253, 248, 0.72);
}

.memory-platforms {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 18px;
  margin-top: 34px;
  color: rgba(255, 253, 248, 0.48);
  font-size: 0.82rem;
  font-weight: 850;
  text-transform: uppercase;
}

.memory-platforms span {
  position: relative;
}

.memory-platforms span::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-right: 8px;
  border-radius: 999px;
  background: currentColor;
}

.memory-panels {
  display: grid;
  width: min(1080px, 100%);
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin-top: clamp(70px, 10vw, 116px);
  border: 1px solid rgba(255, 253, 248, 0.16);
  background: rgba(255, 253, 248, 0.04);
  backdrop-filter: blur(18px);
}

.memory-panels article {
  min-height: 190px;
  border-right: 1px solid rgba(255, 253, 248, 0.14);
  padding: clamp(22px, 4vw, 34px);
  text-align: left;
}

.memory-panels article:last-child {
  border-right: 0;
}

.memory-panels span {
  display: block;
  margin-bottom: 16px;
  color: rgba(255, 253, 248, 0.86);
  font-size: 0.78rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.memory-panels p {
  color: rgba(255, 253, 248, 0.7);
  line-height: 1.58;
}

.memory-orbit {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
}

.memory-orbit span {
  position: absolute;
  width: 11px;
  height: 11px;
  border-radius: 999px;
  background: rgba(255, 253, 248, 0.72);
  box-shadow: 0 0 24px rgba(255, 253, 248, 0.52);
  opacity: 0.42;
  animation: orbitDrift 11s ease-in-out infinite;
}

.memory-orbit span:nth-child(1) {
  top: 23%;
  left: 18%;
}

.memory-orbit span:nth-child(2) {
  top: 31%;
  right: 20%;
  animation-delay: -2s;
}

.memory-orbit span:nth-child(3) {
  bottom: 24%;
  left: 24%;
  animation-delay: -5s;
}

.memory-orbit span:nth-child(4) {
  right: 28%;
  bottom: 18%;
  animation-delay: -7s;
}

.motion-ready .memory-takeover .memory-lockup,
.motion-ready .memory-takeover h2,
.motion-ready .memory-takeover .lead,
.motion-ready .memory-platforms,
.motion-ready .memory-panels {
  opacity: 0;
  transform: translateY(42px);
  transition:
    opacity 760ms ease,
    transform 760ms ease;
}

.motion-ready .memory-takeover.is-visible .memory-lockup,
.motion-ready .memory-takeover.is-visible h2,
.motion-ready .memory-takeover.is-visible .lead,
.motion-ready .memory-takeover.is-visible .memory-platforms,
.motion-ready .memory-takeover.is-visible .memory-panels {
  opacity: 1;
  transform: translateY(0);
}

.motion-ready .memory-takeover[data-memory-takeover] .memory-lockup,
.motion-ready .memory-takeover[data-memory-takeover] h2,
.motion-ready .memory-takeover[data-memory-takeover] .lead,
.motion-ready .memory-takeover[data-memory-takeover] .memory-platforms {
  opacity: 1;
  transform: none;
}

.memory-takeover.is-visible h2 {
  transition-delay: 110ms;
}

.memory-takeover.is-visible .lead {
  transition-delay: 220ms;
}

.memory-takeover.is-visible .memory-platforms {
  transition-delay: 330ms;
}

.memory-takeover.is-visible .memory-panels {
  transition-delay: 460ms;
}

.memory-takeover[data-memory-takeover] {
  --takeover-inset: 42px;
  --takeover-radius: 30px;
  --memory-progress: 0;
  --memory-hero-opacity: 1;
  --memory-hero-y: 0px;
  --memory-chapter-opacity: 0;
  --memory-chapter-y: 42px;
  min-height: 560vh;
  display: block;
  padding: 0;
  background: transparent;
  color: #fffdf8;
  overflow: visible;
}

.memory-takeover[data-memory-takeover]::before,
.memory-takeover[data-memory-takeover]::after {
  display: none;
}

.memory-takeover-sticky {
  position: sticky;
  top: 0;
  min-height: 100vh;
  overflow: hidden;
  display: grid;
  align-items: center;
  padding: clamp(78px, 9vw, 118px) 0 clamp(42px, 6vw, 74px);
}

.memory-darkscape {
  position: absolute;
  inset: var(--takeover-inset);
  z-index: -1;
  overflow: hidden;
  border: 1px solid rgba(255, 253, 248, 0.14);
  border-radius: var(--takeover-radius);
  background:
    radial-gradient(circle at 50% 68%, rgba(217, 120, 99, 0.36), transparent 23%),
    radial-gradient(circle at 38% 62%, rgba(94, 117, 255, 0.34), transparent 25%),
    radial-gradient(circle at 63% 55%, rgba(47, 127, 120, 0.26), transparent 30%),
    #172326;
  box-shadow: 0 40px 120px rgba(23, 35, 38, 0.48);
  transition:
    inset 80ms linear,
    border-radius 80ms linear;
}

.memory-darkscape::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(rgba(255, 255, 255, 0.026) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.026) 1px, transparent 1px);
  background-size: 58px 58px;
  mask-image: radial-gradient(circle at center, black, transparent 74%);
}

.memory-darkscape::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(23, 35, 38, 0.88), transparent 30%, transparent 72%, rgba(23, 35, 38, 0.82));
}

.memory-takeover[data-memory-takeover] .memory-orbit {
  position: absolute;
  inset: 0;
  z-index: 1;
}

.memory-takeover[data-memory-takeover] .memory-orbit span:nth-child(5) {
  top: 12%;
  left: 49%;
  animation-delay: -9s;
}

.memory-takeover[data-memory-takeover] .memory-takeover-inner {
  position: relative;
  z-index: 2;
  display: grid;
  justify-items: stretch;
  align-items: center;
  min-height: calc(100vh - 160px);
  text-align: left;
}

.memory-hero-copy {
  grid-area: 1 / 1;
  display: grid;
  justify-items: center;
  text-align: center;
  transition:
    opacity 220ms ease,
    transform 220ms ease;
  opacity: var(--memory-hero-opacity);
  transform: translateY(var(--memory-hero-y));
  pointer-events: none;
}

.memory-takeover[data-memory-takeover] .memory-lockup {
  opacity: 1;
  transform: none;
}

.memory-takeover[data-memory-takeover] h2 {
  max-width: 1120px;
  margin-top: 38px;
  color: #fffdf8;
  font-size: clamp(3.2rem, 7vw, 7.4rem);
  line-height: 0.95;
  opacity: 1;
  transform: none;
}

.memory-takeover[data-memory-takeover] .lead {
  max-width: 820px;
  color: rgba(255, 253, 248, 0.72);
  opacity: 1;
  transform: none;
}

.memory-takeover[data-memory-takeover] .memory-platforms {
  opacity: 1;
  transform: none;
}

.memory-chapter-layout {
  grid-area: 1 / 1;
  display: grid;
  grid-template-columns: minmax(0, 0.82fr) minmax(440px, 1.18fr);
  align-items: center;
  gap: clamp(28px, 5vw, 70px);
  opacity: var(--memory-chapter-opacity);
  transform: translateY(var(--memory-chapter-y));
  pointer-events: none;
  transition:
    opacity 180ms linear,
    transform 180ms linear;
}

.memory-chapter-layout :is(a, button) {
  pointer-events: auto;
}

.memory-copy-panel {
  display: grid;
  align-content: center;
  gap: 24px;
  min-height: 420px;
}

.memory-chapters {
  position: relative;
  min-height: 260px;
}

.memory-chapter {
  position: absolute;
  inset: 0;
  border-left: 3px solid rgba(255, 253, 248, 0.16);
  padding: 18px 0 18px 22px;
  opacity: 0;
  transform: translateX(-18px);
  pointer-events: none;
  transition:
    opacity 340ms ease,
    transform 380ms ease,
    border-color 260ms ease;
}

.memory-chapter.active {
  border-color: #fffdf8;
  opacity: 1;
  transform: translateX(0);
  pointer-events: auto;
}

.memory-chapter span {
  color: rgba(255, 253, 248, 0.5);
  font-size: 0.78rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.memory-chapter h3 {
  max-width: 520px;
  margin-top: 10px;
  color: #fffdf8;
  font-size: clamp(1.4rem, 2.4vw, 2.2rem);
}

.memory-chapter p {
  max-width: 520px;
  margin-top: 12px;
  color: rgba(255, 253, 248, 0.7);
  line-height: 1.58;
}

.memory-chapter-rail {
  display: flex;
  align-items: center;
  gap: 10px;
}

.memory-chapter-rail span {
  display: grid;
  width: 40px;
  height: 40px;
  place-items: center;
  border: 1px solid rgba(255, 253, 248, 0.16);
  border-radius: 999px;
  color: rgba(255, 253, 248, 0.48);
  font-size: 0.82rem;
  font-weight: 900;
  transition:
    background 240ms ease,
    color 240ms ease,
    transform 240ms ease,
    border-color 240ms ease;
}

.memory-chapter-rail span.active {
  border-color: rgba(255, 253, 248, 0.8);
  background: #fffdf8;
  color: #101414;
  transform: translateY(-3px);
}

.memory-console-stage {
  position: relative;
  min-height: 500px;
  border: 1px solid rgba(255, 253, 248, 0.15);
  border-radius: 10px;
  background: rgba(255, 253, 248, 0.055);
  box-shadow: 0 28px 90px rgba(0, 0, 0, 0.24);
  backdrop-filter: blur(18px);
  overflow: hidden;
}

.memory-console-stage::before {
  content: "";
  position: absolute;
  inset: -40% auto -40% -28%;
  width: 46%;
  z-index: 2;
  background: linear-gradient(90deg, transparent, rgba(255, 253, 248, 0.13), transparent);
  transform: translateX(calc(var(--memory-progress) * 520%));
  pointer-events: none;
}

.memory-console-stage::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 3;
  height: 3px;
  background: linear-gradient(90deg, #7ec9ff, #ff8d72, #91e9c4);
  transform: scaleX(var(--memory-progress));
  transform-origin: left center;
}

.memory-visual {
  position: absolute;
  inset: 0;
  display: grid;
  align-content: center;
  padding: clamp(24px, 5vw, 44px);
  opacity: 0;
  transform: translateY(28px) scale(0.98);
  transition:
    opacity 360ms ease,
    transform 420ms ease;
}

.memory-visual.active {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.memory-node-map {
  position: relative;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
}

.memory-node-map::before {
  content: "";
  position: absolute;
  inset: 28px;
  border: 1px dashed rgba(255, 253, 248, 0.22);
  border-radius: 999px;
}

.memory-node-map span,
.pattern-list p,
.memory-control-list span,
.briefing-card {
  position: relative;
  border: 1px solid rgba(255, 253, 248, 0.16);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.08);
  color: rgba(255, 253, 248, 0.82);
  padding: 16px;
  backdrop-filter: blur(10px);
}

.memory-node-map span {
  display: grid;
  min-height: 104px;
  place-items: center;
  font-weight: 850;
}

.memory-visual.context.active .memory-node-map span {
  animation: nodeBreathe 2.8s ease-in-out infinite;
}

.memory-visual.context.active .memory-node-map span:nth-child(2n) {
  animation-delay: -1.2s;
}

.pattern-radar {
  position: absolute;
  inset: 50%;
  width: 240px;
  height: 240px;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(255, 253, 248, 0.14);
  border-radius: 999px;
  animation: radarSpin 8s linear infinite;
}

.pattern-radar::after {
  content: "";
  position: absolute;
  inset: 50% 50% auto auto;
  width: 50%;
  height: 1px;
  background: linear-gradient(90deg, rgba(255, 253, 248, 0.72), transparent);
  transform-origin: left center;
}

.pattern-radar span {
  position: absolute;
  inset: 22%;
  border: 1px solid rgba(255, 253, 248, 0.12);
  border-radius: inherit;
}

.pattern-radar span:nth-child(2) {
  inset: 38%;
}

.pattern-radar span:nth-child(3) {
  inset: -16%;
  border-color: rgba(217, 120, 99, 0.24);
}

.pattern-list,
.memory-control-list {
  display: grid;
  gap: 14px;
}

.memory-visual.patterns.active .pattern-list p,
.memory-visual.control.active .memory-control-list span {
  animation: rowFloat 2.7s ease-in-out infinite;
}

.memory-visual.patterns.active .pattern-list p:nth-child(2),
.memory-visual.control.active .memory-control-list span:nth-child(2) {
  animation-delay: -0.8s;
}

.memory-visual.patterns.active .pattern-list p:nth-child(3),
.memory-visual.control.active .memory-control-list span:nth-child(3) {
  animation-delay: -1.4s;
}

.memory-visual.suggestions .memory-big {
  border-color: rgba(255, 253, 248, 0.16);
  background: rgba(255, 253, 248, 0.09);
  color: #fffdf8;
}

.memory-visual.suggestions.active .memory-big {
  animation: suggestPulse 2.8s ease-in-out infinite;
}

.memory-visual.suggestions .memory-actions span {
  background: #fffdf8;
  color: #101414;
}

.memory-visual.suggestions .memory-actions span + span {
  background: rgba(255, 253, 248, 0.1);
  color: #fffdf8;
}

.briefing-card strong {
  display: block;
  color: #fffdf8;
  font-size: clamp(1.6rem, 3vw, 2.5rem);
  line-height: 1.05;
}

.briefing-card p {
  margin-top: 18px;
  color: rgba(255, 253, 248, 0.72);
  font-size: 1.08rem;
  line-height: 1.58;
}

.memory-visual.briefings.active .briefing-card {
  animation: briefingLift 3.2s ease-in-out infinite;
}

.rhythm-stage,
.prep-flow,
.meal-board,
.routine-ladder,
.memory-stack,
.privacy-console {
  position: relative;
  overflow: hidden;
  min-height: 430px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface);
  box-shadow: var(--shadow);
}

.rhythm-stage {
  min-height: 520px;
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.1), transparent 48%),
    linear-gradient(315deg, rgba(231, 183, 95, 0.15), transparent 42%),
    var(--surface);
}

.rhythm-line {
  position: absolute;
  top: 52px;
  bottom: 52px;
  left: 50%;
  width: 2px;
  background: rgba(47, 127, 120, 0.18);
  transform: translateX(-50%);
}

.rhythm-line::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--teal);
  transform: scaleY(0);
  transform-origin: top center;
  transition: transform 900ms ease;
}

.rhythm-stage.is-visible .rhythm-line::after {
  transform: scaleY(1);
}

.rhythm-item {
  position: absolute;
  width: min(220px, 42%);
  border: 1px solid rgba(24, 35, 38, 0.12);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.86);
  padding: 18px;
  box-shadow: 0 16px 36px rgba(24, 35, 38, 0.1);
  opacity: 0;
  transform: translateY(20px) scale(0.96);
  transition:
    opacity 520ms ease,
    transform 520ms ease;
}

.rhythm-item::after {
  content: "";
  position: absolute;
  top: 24px;
  width: 13px;
  height: 13px;
  border: 3px solid var(--surface);
  border-radius: 999px;
  background: var(--teal);
  box-shadow: 0 0 0 1px rgba(47, 127, 120, 0.2);
}

.rhythm-item span {
  color: var(--coral);
  font-size: 0.82rem;
  font-weight: 900;
}

.rhythm-item strong {
  display: block;
  margin-top: 7px;
}

.rhythm-item p {
  margin-top: 8px;
  color: var(--muted);
  line-height: 1.45;
}

.rhythm-item.morning {
  top: 54px;
  left: 8%;
}

.rhythm-item.morning::after,
.rhythm-item.evening::after {
  right: -39px;
}

.rhythm-item.afternoon {
  top: 205px;
  right: 8%;
}

.rhythm-item.afternoon::after {
  left: -39px;
}

.rhythm-item.evening {
  bottom: 62px;
  left: 8%;
}

.rhythm-stage.is-visible .rhythm-item {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.rhythm-stage.is-visible .afternoon {
  transition-delay: 160ms;
}

.rhythm-stage.is-visible .evening {
  transition-delay: 320ms;
}

.tablet-chip {
  position: absolute;
  right: 9%;
  bottom: 78px;
  border-radius: 999px;
  background: var(--teal-deep);
  color: var(--surface);
  padding: 10px 14px;
  font-size: 0.86rem;
  font-weight: 860;
}

.tablet-glow {
  position: absolute;
  right: 14%;
  bottom: 116px;
  width: 88px;
  height: 88px;
  border-radius: 999px;
  background: rgba(231, 183, 95, 0.42);
  filter: blur(28px);
}

.prep-flow {
  display: grid;
  align-content: center;
  gap: 20px;
  padding: clamp(22px, 4vw, 34px);
}

.flow-card {
  position: relative;
  z-index: 1;
  width: min(370px, 100%);
  border: 1px solid rgba(24, 35, 38, 0.12);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.9);
  padding: 18px;
  box-shadow: 0 16px 36px rgba(24, 35, 38, 0.09);
}

.flow-card strong {
  display: block;
  margin-top: 8px;
  font-size: 1.25rem;
}

.flow-card p {
  margin-top: 8px;
  color: var(--muted);
}

.flow-card.task {
  justify-self: end;
}

.flow-card.approve {
  justify-self: center;
  background: rgba(47, 127, 120, 0.1);
}

.flow-arrow {
  position: absolute;
  inset: 24% 18% auto 22%;
  height: 46%;
  border-right: 2px dashed rgba(47, 127, 120, 0.35);
  border-bottom: 2px dashed rgba(47, 127, 120, 0.35);
  border-radius: 0 0 34px 0;
  opacity: 0;
  transform: scaleY(0.6);
  transform-origin: top center;
  transition:
    opacity 420ms ease,
    transform 640ms ease;
}

.prep-flow.is-visible .flow-arrow {
  opacity: 1;
  transform: scaleY(1);
}

.motion-ready .prep-flow .flow-card {
  opacity: 0;
  transform: translateX(-28px);
  transition:
    opacity 520ms ease,
    transform 520ms ease;
}

.motion-ready .prep-flow.is-visible .flow-card {
  opacity: 1;
  transform: translateX(0);
}

.motion-ready .prep-flow.is-visible .task {
  transition-delay: 180ms;
}

.motion-ready .prep-flow.is-visible .approve {
  transition-delay: 340ms;
}

.meal-board {
  display: grid;
  align-content: start;
  gap: 12px;
  padding: clamp(22px, 4vw, 34px);
}

.meal-board-header {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}

.meal-board-header span {
  color: var(--muted);
}

.meal-board > span,
.meal-board aside {
  border: 1px solid rgba(24, 35, 38, 0.11);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.86);
  padding: 16px;
  color: #405651;
}

.meal-board > span {
  display: flex;
  justify-content: space-between;
  gap: 14px;
}

.meal-board aside {
  margin-top: 12px;
  border-color: rgba(47, 127, 120, 0.22);
  background: rgba(47, 127, 120, 0.1);
  font-weight: 780;
  line-height: 1.45;
}

.motion-ready .meal-board > span,
.motion-ready .meal-board aside {
  opacity: 0;
  transform: translateX(34px);
  transition:
    opacity 520ms ease,
    transform 520ms ease;
}

.motion-ready .meal-board.is-visible > span,
.motion-ready .meal-board.is-visible aside {
  opacity: 1;
  transform: translateX(0);
}

.meal-board.is-visible > span:nth-of-type(2) {
  transition-delay: 90ms;
}

.meal-board.is-visible > span:nth-of-type(3) {
  transition-delay: 180ms;
}

.meal-board.is-visible > span:nth-of-type(4) {
  transition-delay: 270ms;
}

.meal-board.is-visible aside {
  transition-delay: 380ms;
}

.routine-ladder {
  display: grid;
  align-content: center;
  gap: 14px;
  padding: clamp(22px, 4vw, 34px);
  background:
    linear-gradient(90deg, rgba(217, 120, 99, 0.12), transparent 36%),
    var(--surface);
}

.ladder-person,
.ladder-step,
.reward-ticket {
  border: 1px solid rgba(24, 35, 38, 0.11);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.9);
  padding: 16px;
  box-shadow: 0 14px 30px rgba(24, 35, 38, 0.08);
}

.ladder-person {
  display: flex;
  justify-content: space-between;
  gap: 12px;
}

.ladder-person span {
  color: var(--teal-deep);
  font-weight: 850;
}

.ladder-step {
  margin-left: calc(var(--step-offset, 0) * 1px);
  color: #405651;
  font-weight: 820;
}

.ladder-step:nth-of-type(2) {
  --step-offset: 36;
}

.ladder-step:nth-of-type(3) {
  --step-offset: 72;
}

.ladder-step:nth-of-type(4) {
  --step-offset: 108;
}

.reward-ticket {
  border-color: rgba(231, 183, 95, 0.44);
  background: rgba(231, 183, 95, 0.17);
  font-weight: 860;
}

.motion-ready .routine-ladder > * {
  opacity: 0;
  transform: translateY(26px) rotate(-1deg);
  transition:
    opacity 460ms ease,
    transform 460ms ease;
}

.motion-ready .routine-ladder.is-visible > * {
  opacity: 1;
  transform: translateY(0) rotate(0);
}

.routine-ladder.is-visible > *:nth-child(2) {
  transition-delay: 90ms;
}

.routine-ladder.is-visible > *:nth-child(3) {
  transition-delay: 180ms;
}

.routine-ladder.is-visible > *:nth-child(4) {
  transition-delay: 270ms;
}

.routine-ladder.is-visible > *:nth-child(5) {
  transition-delay: 380ms;
}

.memory-stack {
  overflow: visible;
  min-height: 500px;
  background: transparent;
  border: 0;
  box-shadow: none;
}

.memory-stack article {
  position: absolute;
  inset: auto 20px auto 20px;
  border: 1px solid rgba(24, 35, 38, 0.12);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.94);
  padding: 24px;
  box-shadow: var(--shadow);
}

.memory-stack article:nth-child(1) {
  top: 40px;
  z-index: 3;
}

.memory-stack article:nth-child(2) {
  top: 188px;
  left: 56px;
  right: 8px;
  z-index: 2;
  background: rgba(244, 239, 229, 0.96);
}

.memory-stack article:nth-child(3) {
  top: 318px;
  left: 12px;
  right: 66px;
  z-index: 1;
  background: rgba(255, 253, 248, 0.88);
}

.memory-stack strong {
  display: block;
  margin-top: 10px;
  font-size: 1.25rem;
  line-height: 1.2;
}

.memory-stack p {
  margin-top: 9px;
  color: var(--muted);
}

.motion-ready .memory-stack article {
  opacity: 0;
  transform: translateY(48px) rotate(2deg);
  transition:
    opacity 580ms ease,
    transform 580ms ease;
}

.motion-ready .memory-stack.is-visible article {
  opacity: 1;
  transform: translateY(0) rotate(0);
}

.memory-stack.is-visible article:nth-child(2) {
  transition-delay: 150ms;
}

.memory-stack.is-visible article:nth-child(3) {
  transition-delay: 300ms;
}

.privacy-console {
  display: grid;
  align-content: start;
  gap: 12px;
  padding: clamp(22px, 4vw, 34px);
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.09), transparent 48%),
    var(--surface);
}

.console-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  border: 1px solid rgba(24, 35, 38, 0.11);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.86);
  padding: 16px;
}

.console-row strong {
  border-radius: 999px;
  background: rgba(47, 127, 120, 0.12);
  color: var(--teal-deep);
  padding: 8px 11px;
  font-size: 0.82rem;
}

.privacy-console button {
  width: fit-content;
  margin-top: 12px;
  border: 0;
  border-radius: 999px;
  background: var(--teal-deep);
  color: var(--surface);
  cursor: default;
  font: inherit;
  font-weight: 850;
  padding: 12px 16px;
}

.motion-ready .privacy-console .console-row,
.motion-ready .privacy-console button {
  opacity: 0;
  transform: translateX(-22px);
  transition:
    opacity 440ms ease,
    transform 440ms ease;
}

.motion-ready .privacy-console.is-visible .console-row,
.motion-ready .privacy-console.is-visible button {
  opacity: 1;
  transform: translateX(0);
}

.privacy-console.is-visible .console-row:nth-child(2) {
  transition-delay: 70ms;
}

.privacy-console.is-visible .console-row:nth-child(3) {
  transition-delay: 140ms;
}

.privacy-console.is-visible .console-row:nth-child(4) {
  transition-delay: 210ms;
}

.privacy-console.is-visible .console-row:nth-child(5) {
  transition-delay: 280ms;
}

.privacy-console.is-visible button {
  transition-delay: 360ms;
}

@keyframes wallFloat {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-8px);
  }
}

@keyframes memoryPulse {
  0%,
  100% {
    box-shadow: 0 14px 34px rgba(24, 35, 38, 0.08);
  }
  50% {
    box-shadow: 0 18px 42px rgba(47, 127, 120, 0.2);
  }
}

@keyframes progressBreathe {
  0%,
  100% {
    width: 62%;
  }
  50% {
    width: 78%;
  }
}

@keyframes railMove {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-38%);
  }
}

@keyframes orbitSoft {
  0%,
  100% {
    transform: translate(0, 0);
  }
  50% {
    transform: translate(10px, -12px);
  }
}

@keyframes panelIn {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes previewScan {
  0%,
  100% {
    opacity: 0.62;
    transform: translateY(0);
  }
  50% {
    opacity: 1;
    transform: translateY(4px);
  }
}

.section-heading {
  display: grid;
  gap: 18px;
  margin-bottom: 34px;
}

.section-heading .lead {
  margin-top: 0;
}

.module-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 14px;
}

.module-card,
.feature-card,
.faq-item,
.price-card,
.addon-row {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 253, 248, 0.76);
}

.module-card {
  display: grid;
  min-height: 230px;
  align-content: space-between;
  padding: 18px;
}

.shared-panel .section-heading {
  margin-bottom: 0;
}

.shared-panel .module-grid {
  align-items: stretch;
}

.shared-panel .module-card {
  min-height: min(210px, calc((100vh - 360px) / 1.1));
}

.module-dot {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  background: var(--soft);
}

.module-card:nth-child(2) .module-dot {
  background: rgba(75, 121, 168, 0.26);
}

.module-card:nth-child(3) .module-dot {
  background: rgba(231, 183, 95, 0.38);
}

.module-card:nth-child(4) .module-dot {
  background: rgba(217, 120, 99, 0.3);
}

.module-card:nth-child(5) .module-dot {
  background: rgba(47, 127, 120, 0.24);
}

.module-card p,
.feature-card p {
  margin-top: 10px;
  color: var(--muted);
  line-height: 1.52;
}

.feature-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}

.feature-card {
  padding: 22px;
}

.story-list {
  display: grid;
  gap: 16px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.story-list li {
  border-left: 3px solid var(--teal);
  padding-left: 16px;
  color: var(--muted);
  line-height: 1.55;
}

.mini-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

.cta-band {
  padding: clamp(44px, 7vw, 72px);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.13), transparent 46%),
    var(--surface);
  border: 1px solid var(--line);
}

.cta-band h2 {
  max-width: 820px;
}

/* ==========================================================================
   FOOTER — shared with the home page (gsap-site.css carries the same block).
   Self-contained: it declares its own tokens so it does not depend on either
   stylesheet's palette.
   ========================================================================== */

.footer {
  --ink-strong: #101226;
  --ink-soft: rgba(16, 18, 38, 0.66);
  --ink-faint: rgba(16, 18, 38, 0.42);
  --hair: rgba(16, 18, 38, 0.1);
  /* Hardcoded, not var(--teal-deep): that token is teal in gsap-site.css and
     purple in site.css, and this block is deliberately palette-independent. */
  --label: #1f5e59;

  position: relative;
  /* Same flat base as the section above, radials kept low and away from the
     seam, so the footer is the bottom of that field rather than a band under
     it. Nothing separates them — no rule, no colour change. */
  /* These pages have no Your Story; the footer follows a .section.alt, so it
     continues that section's exact wash over the body's mesh rather than
     laying down a base of its own. Same value, so the join has nothing to
     show — and the mesh underneath runs through both without a break. */
  /* Arrives over its own shorter ramp — the footer's top padding is less than
     --seam above 1100px or so, and the wash must finish before the first row
     of links. */
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0) 0,
    rgba(255, 255, 255, 0.42) clamp(40px, 4.5vw, 68px),
    rgba(255, 255, 255, 0.42) 100%);
  color: var(--ink-strong);
  /* Symmetric now that the bottom bar is gone — a 30px tail under the last
     link read as the footer having been cut off. */
  padding: clamp(52px, 6vw, 78px) 0 clamp(46px, 5.5vw, 70px);
}

/* A centred cluster, not a spread.

   Six links and a one-line tagline do not fill 1180px, and the two layouts
   that try both fail in their own way: fractional tracks left a dead tail and
   pulled the visible mass 135px left of centre, then pinning the links to the
   right edge centred the mass but opened a ~600px hole in the middle.

   Sizing all three blocks to their content and centring them with one shared
   gap gives even spacing and a centred mass at the same time. */
.footer-top {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  gap: clamp(40px, 7vw, 120px);
}

.footer-brand {
  flex: 0 1 auto;
}

.footer-brand .brand {
  color: var(--ink-strong);
  font-size: 1.12rem;
}

/* No tile any more: on the mesh the mark reads exactly as it does in the
   header, and a plate behind it would be mesh drawn on mesh. */
.footer-brand .brand-mark {
  width: 40px;
  height: 40px;
}

.footer-brand .brand-mark img {
  object-fit: contain;
}

.footer-brand p {
  max-width: 30ch;
  margin-top: 16px;
  color: var(--ink-soft);
  font-size: 0.92rem;
  line-height: 1.6;
}

.footer-links {
  display: flex;
  gap: clamp(40px, 7vw, 120px);
}

.footer-col {
  min-width: 0;
}

/* The site's label colour, the same teal every .eyebrow uses — which also
   takes these from 2.72:1 to AA on the light ground. */
.footer-col h3 {
  margin-bottom: 4px;
  color: var(--label);
  font-size: 0.72rem;
  font-weight: 930;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.footer a:not(.brand) {
  display: block;
  width: fit-content;
  margin-top: 11px;
  color: var(--ink-soft);
  font-size: 0.92rem;
  font-weight: 620;
  text-decoration: none;
  transition: color 180ms ease;
}

.footer a:not(.brand):hover {
  color: var(--ink-strong);
}

.footer a:not(.brand):focus-visible,
.footer .brand:focus-visible {
  outline: 2px solid var(--label);
  outline-offset: 3px;
  border-radius: 5px;
}

/* 760, not 900: at 900 the blocks still sit side by side with room to spare,
   and stacking them there left the whole footer hugging the left of a wrap
   that was itself centred — 238px off. */
@media (max-width: 760px) {
  .footer-top {
    flex-direction: column;
    align-items: stretch;
    gap: 34px;
  }

  /* Stacked under the brand. The columns share the wrap's width equally
     rather than bunching at its left edge, which otherwise left ~300px of
     dead space on the right at tablet widths. */
  .footer-links {
    justify-content: flex-start;
    gap: 20px;
  }

  .footer-col {
    flex: 1 1 0;
  }

  .footer-brand p {
    max-width: 46ch;
  }
}

@media (max-width: 560px) {
  .footer-links {
    flex-wrap: wrap;
    gap: 26px 40px;
  }
}

.page-hero {
  padding: clamp(68px, 10vw, 118px) 0;
  /* Opaque at the top, where it meets the header, and dissolving at the bottom
     into the mesh the first section is washed over. */
  background: linear-gradient(180deg,
    var(--paper) 0,
    var(--paper) calc(100% - var(--seam)),
    rgba(251, 247, 239, 0) 100%);
}

.page-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(420px, 1fr);
  gap: clamp(34px, 6vw, 74px);
  align-items: center;
}

.price-card {
  max-width: 520px;
  padding: clamp(26px, 4vw, 42px);
}

.price {
  margin: 18px 0 8px;
  font-size: clamp(2.5rem, 5vw, 4rem);
  line-height: 1;
  font-weight: 900;
}

.price small {
  color: var(--muted);
  font-size: 1rem;
}

.check-list {
  display: grid;
  gap: 11px;
  margin: 22px 0 0;
  padding: 0;
  list-style: none;
}

.check-list li {
  color: #405651;
  line-height: 1.45;
}

.check-list li::before {
  content: "";
  display: inline-block;
  width: 9px;
  height: 9px;
  margin-right: 10px;
  border-radius: 999px;
  background: var(--teal);
}

.addon-row {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  padding: 18px;
}

.faq-list {
  display: grid;
  gap: 12px;
}

.faq-item {
  padding: 22px;
}

.faq-item p {
  margin-top: 8px;
  color: var(--muted);
  line-height: 1.55;
}

.site-header {
  background: rgba(255, 255, 255, 0.76);
  box-shadow: 0 1px 3px rgba(16, 18, 38, 0.06);
}

.nav a {
  color: var(--muted);
}

.nav a:hover,
.nav a[aria-current="page"] {
  background: rgba(47, 127, 120, 0.12);
  color: var(--teal-deep);
}

.button.primary {
  box-shadow: 0 14px 32px rgba(31, 94, 89, 0.22);
}

.button.secondary,
.menu-button {
  background: rgba(255, 255, 255, 0.7);
}

.hero {
  background:
    radial-gradient(circle at 76% 18%, rgba(181, 213, 245, 0.5), transparent 34%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.76), rgba(255, 255, 255, 0.18)),
    var(--paper);
}

.section.alt {
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0) 0,
    rgba(255, 255, 255, 0.42) var(--seam),
    rgba(255, 255, 255, 0.42) calc(100% - var(--seam)),
    rgba(255, 255, 255, 0) 100%);
}

.section.surface,
.feature-rail-section {
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0) 0,
    rgba(255, 255, 255, 0.64) var(--seam),
    rgba(255, 255, 255, 0.64) calc(100% - var(--seam)),
    rgba(255, 255, 255, 0) 100%);
}

.placeholder,
.sprawl-stage,
.tour-stage,
.module-card,
.feature-card,
.price-card,
.faq-item,
.addon-row,
.cta-band {
  background:
    linear-gradient(135deg, rgba(47, 127, 120, 0.08), transparent 46%),
    rgba(255, 255, 255, 0.82);
  box-shadow: var(--shadow);
}

.scene-frame,
.live-wall {
  background:
    radial-gradient(circle at 18% 12%, rgba(255, 214, 232, 0.7), transparent 28%),
    radial-gradient(circle at 78% 82%, rgba(181, 213, 245, 0.58), transparent 32%),
    #ffffff;
}

.scene-header,
.scene-grid span,
.meal-stack span,
.prep-card,
.memory-big,
.wall-topbar,
.wall-dock,
.wall-card,
.sprawl-card,
.sprawl-center,
.feature-rail span {
  background: rgba(255, 255, 255, 0.84);
  color: var(--ink);
}

.trust-line,
.placeholder-note,
.wall-dock span,
.tour-tab,
.check-list li {
  color: var(--muted);
}

@media (max-width: 1180px) {
  .hero-panel,
  .narrative-panel,
  .story-intro-panel,
  .story-step[data-top-chapter] {
    height: calc(100vh - 73px);
    min-height: 640px;
  }

  /* The mobile drawer that used to live here was unreachable: no page has a
     [data-menu-button], and `.site-header .nav { display: flex }` (:4762, no
     media query) outranks it anyway. The nav renders as a scrollable row —
     see the .site-header .nav rules further down. */

  .hero-grid,
  .split,
  .page-grid,
  .scroll-story {
    grid-template-columns: 1fr;
  }

  .hero-device {
    transform: none;
  }

  .scroll-product {
    position: relative;
    order: -1;
    top: auto;
  }

  .memory-panels {
    grid-template-columns: 1fr;
  }

  .memory-panels article {
    border-right: 0;
    border-bottom: 1px solid rgba(255, 253, 248, 0.14);
  }

  .memory-panels article:last-child {
    border-bottom: 0;
  }

  .memory-takeover[data-memory-takeover] {
    min-height: 560vh;
    padding: 0;
  }

  .memory-chapter-layout {
    grid-template-columns: 1fr;
  }

  .memory-copy-panel {
    min-height: 300px;
  }

  .memory-chapters {
    min-height: 210px;
  }

  .memory-console-stage {
    min-height: 420px;
    order: -1;
  }

  .scene-frame {
    min-height: 500px;
  }

  .scene {
    padding: 22px;
  }

  .scene-grid span {
    min-height: 118px;
  }

  .story-step {
    min-height: auto;
    padding-top: 34px;
    padding-bottom: 34px;
  }

  .tour-panel {
    grid-template-columns: 1fr;
  }

  .module-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .feature-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 900px) and (max-width: 1180px) and (max-height: 760px) and (orientation: landscape) {
  .hero-panel,
  .narrative-panel,
  .story-intro-panel,
  .story-step[data-top-chapter] {
    height: calc(100vh - 73px);
    min-height: 0;
    overflow: hidden;
  }

  .narrative-panel {
    padding-top: max(34px, var(--chapter-clearance, 48px));
    padding-bottom: 34px;
  }

  .narrative-split {
    grid-template-columns: minmax(0, 0.88fr) minmax(400px, 1.12fr);
    align-items: center;
    gap: 34px;
    min-height: 0;
  }

  .narrative-stack {
    min-height: 0;
    gap: 22px;
  }

  .narrative-panel h2,
  .story-intro-panel h2 {
    font-size: clamp(3.1rem, 5.2vw, 4.8rem);
  }

  .narrative-panel .lead,
  .story-intro-panel .lead {
    margin-top: 16px;
    font-size: 1.08rem;
  }

  .problem-panel .sprawl-stage {
    min-height: min(420px, calc(100vh - 210px));
  }

  .shared-panel .section-heading {
    gap: 14px;
  }

  .shared-panel .module-grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 10px;
  }

  .shared-panel .module-card {
    min-height: 205px;
    padding: 14px;
  }

  .shared-panel .module-card h3 {
    font-size: 1.05rem;
  }

  .shared-panel .module-card p {
    font-size: 0.88rem;
    line-height: 1.42;
  }

  .shared-panel .module-dot {
    width: 28px;
    height: 28px;
  }

  .hero-intro {
    padding-top: max(30px, var(--chapter-clearance, 48px));
    padding-bottom: 30px;
  }

  .hero-intro h1 {
    font-size: clamp(3.9rem, 7vw, 5.4rem);
  }

  .hero-showcase {
    padding-top: max(18px, var(--chapter-clearance, 48px));
    padding-bottom: 20px;
  }

  .hero-showcase-inner {
    min-height: calc(100vh - 104px);
    gap: 14px;
  }

  .hero-showcase-header {
    gap: 0;
  }

  .hero-showcase-header h2 {
    font-size: clamp(1.55rem, 3vw, 2.4rem);
  }

  .hero-showcase .hero-device {
    height: calc(100vh - 178px);
    padding: 12px;
  }

  .wall-topbar,
  .wall-dock {
    margin: 12px;
    padding: 12px;
  }

  .wall-grid {
    gap: 12px;
    padding: 0 12px;
    grid-template-rows: repeat(3, minmax(0, 1fr));
    min-height: 0;
  }

  .wall-card {
    min-height: 0;
    padding: 14px 16px;
  }

  .wall-card h3 {
    font-size: 1.08rem;
  }

  .progress-line,
  .ingredient-row,
  .mini-bars,
  .memory-actions {
    margin-top: 14px;
  }

  .wall-dock {
    margin-top: 12px;
  }

  .scroll-story-section {
    padding-top: 72px;
    padding-bottom: 82px;
  }

  .scroll-story {
    grid-template-columns: minmax(0, 0.74fr) minmax(390px, 1.26fr);
    gap: 30px;
  }

  .scroll-product {
    position: sticky;
    top: 92px;
    order: initial;
  }

  .scene-shell {
    padding: 12px;
    border-radius: 20px;
  }

  .scene-frame {
    height: min(520px, calc(100vh - 150px));
    min-height: 0;
  }

  .scene {
    gap: 14px;
    padding: 18px;
  }

  .scene-grid span {
    min-height: 92px;
    padding: 14px;
  }

  .calendar-lines {
    min-height: 240px;
  }

  .routine-bars {
    min-height: 250px;
  }

  .story-step {
    min-height: 44vh;
    padding-top: 22px;
    padding-bottom: 22px;
  }

  .memory-takeover-sticky {
    padding: 54px 0 28px;
  }

  .memory-takeover[data-memory-takeover] .memory-takeover-inner {
    min-height: calc(100vh - 94px);
  }

  .memory-chapter-layout {
    grid-template-columns: minmax(0, 0.76fr) minmax(430px, 1.24fr);
    gap: 30px;
  }

  .memory-copy-panel {
    min-height: 340px;
  }

  .memory-chapters {
    min-height: 220px;
  }

  .memory-console-stage {
    min-height: 380px;
    order: initial;
  }

  .memory-visual {
    padding: 22px;
  }

  .memory-node-map span {
    min-height: 84px;
  }
}

@media (max-height: 520px) and (orientation: landscape) {
  .section {
    padding-top: max(38px, calc(var(--chapter-clearance, 42px) + 10px));
    padding-bottom: 38px;
  }

  [data-more-section] {
    min-height: calc(100vh - var(--header-bottom, 55px));
    padding-top: max(28px, calc(var(--chapter-clearance, 42px) + 8px));
    padding-bottom: 20px;
    overflow: hidden;
  }

  [data-more-section] h2 {
    font-size: clamp(1.75rem, 4.4vw, 2.55rem);
  }

  [data-more-section] .lead,
  [data-more-section] .story-list {
    font-size: 0.9rem;
    line-height: 1.38;
  }

  [data-more-section] .split {
    gap: 22px;
  }

  .site-header {
    position: sticky;
  }

  .header-inner {
    padding: 8px 0;
  }

  .brand {
    gap: 8px;
    font-size: 0.95rem;
  }

  .brand-mark {
    width: 30px;
    height: 30px;
    border-radius: 8px;
  }

  .button {
    min-height: 36px;
    padding: 0 14px;
    font-size: 0.9rem;
  }

  .menu-button {
    width: 38px;
    height: 38px;
  }

  .scroll-progress {
    top: calc(var(--header-bottom, 55px) - 3px);
  }

  .chapter-progress {
    top: calc(var(--header-bottom, 55px) + 12px);
    width: min(100% - 36px, 846px);
    gap: 14px;
    padding-top: 0;
  }

  .chapter-progress button {
    font-size: 0.64rem;
    padding: 0;
  }

  .hero-panel,
  .narrative-panel,
  .story-intro-panel,
  .story-step[data-top-chapter] {
    height: calc(100vh - 55px);
    min-height: 0;
    padding-top: max(18px, var(--chapter-clearance, 42px));
    padding-bottom: 18px;
  }

  .narrative-panel {
    padding-top: max(14px, var(--chapter-clearance, 42px));
    padding-bottom: 14px;
    overflow: hidden;
  }

  .narrative-split {
    grid-template-columns: minmax(0, 0.42fr) minmax(0, 0.58fr);
    align-items: center;
    gap: 18px;
    min-height: 0;
  }

  .narrative-stack {
    gap: 10px;
    min-height: 0;
  }

  .narrative-panel h2,
  .story-intro-panel h2 {
    max-width: 740px;
    font-size: clamp(2rem, 5.8vw, 3.05rem);
    line-height: 0.98;
  }

  .narrative-panel .lead,
  .story-intro-panel .lead {
    margin-top: 10px;
    max-width: 580px;
    font-size: 0.9rem;
    line-height: 1.38;
  }

  .problem-panel .sprawl-stage {
    height: min(210px, calc(100vh - 188px));
    min-height: 160px;
  }

  .sprawl-card {
    min-width: 112px;
    padding: 10px 12px;
    font-size: 0.78rem;
  }

  .sprawl-card.main {
    width: 150px;
  }

  .shared-panel .section-heading {
    gap: 8px;
    margin-bottom: 10px;
  }

  .shared-panel .module-grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 8px;
  }

  .shared-panel .module-card {
    min-height: 132px;
    padding: 10px;
  }

  .shared-panel .module-card h3 {
    font-size: 0.86rem;
    line-height: 1.18;
  }

  .shared-panel .module-card p {
    margin-top: 8px;
    font-size: 0.72rem;
    line-height: 1.32;
  }

  .shared-panel .module-dot {
    width: 24px;
    height: 24px;
  }

  .hero-intro {
    align-items: center;
  }

  .hero-intro-copy {
    max-width: 780px;
  }

  .hero-intro h1,
  h1 {
    max-width: 820px;
    font-size: clamp(2.15rem, 6vw, 2.9rem);
    line-height: 0.98;
    overflow-wrap: normal;
  }

  .hero-intro .lead,
  .lead {
    max-width: 760px;
    margin-top: 14px;
    font-size: 1rem;
    line-height: 1.45;
  }

  .hero-actions,
  .trust-line {
    margin-top: 14px;
  }

  .eyebrow {
    font-size: 0.74rem;
  }

  .hero-showcase {
    padding-top: max(10px, var(--chapter-clearance, 42px));
    padding-bottom: 12px;
  }

  .hero-showcase-inner {
    min-height: calc(100vh - 80px);
    gap: 10px;
  }

  .hero-showcase-header h2 {
    font-size: clamp(1.2rem, 3.2vw, 1.7rem);
  }

  .hero-showcase .hero-device {
    height: calc(100vh - 132px);
    padding: 10px;
    border-radius: 20px;
  }

  .hero-showcase .live-wall {
    border-radius: 12px;
  }

  .wall-topbar,
  .wall-dock {
    margin: 8px;
    padding: 8px 10px;
  }

  .wall-topbar span {
    font-size: 0.76rem;
  }

  .privacy-pill {
    padding: 6px 8px;
    font-size: 0.68rem !important;
  }

  .wall-grid {
    gap: 8px;
    padding: 0 8px;
  }

  .wall-card {
    padding: 10px 12px;
  }

  .card-kicker {
    font-size: 0.64rem;
  }

  .wall-card h3 {
    margin-top: 5px;
    font-size: 0.98rem;
  }

  .wall-card p {
    margin-top: 4px;
    font-size: 0.86rem;
  }

  .progress-line,
  .ingredient-row,
  .mini-bars,
  .memory-actions {
    margin-top: 8px;
  }

  .wall-dock {
    margin-top: 8px;
  }

  .scroll-story-section {
    padding-top: 0;
    padding-bottom: 42px;
  }

  .scroll-story {
    grid-template-columns: minmax(230px, 0.42fr) minmax(0, 0.58fr);
    gap: 18px;
    align-items: start;
  }

  .story-steps {
    gap: 12px;
  }

  .story-step {
    min-height: 42vh;
    padding: 16px 0 16px 18px;
  }

  .story-step::before {
    height: min(150px, calc(100% - 32px));
  }

  .story-step[data-top-chapter] {
    height: min(250px, calc(100vh - 188px));
    min-height: 210px;
    align-content: center;
    padding-top: 16px;
    padding-bottom: 16px;
  }

  .story-step[data-top-chapter]::before {
    height: min(150px, calc(100% - 32px));
  }

  .story-step h3 {
    font-size: 1.12rem;
    line-height: 1.16;
  }

  .story-step p {
    max-width: none;
    margin-top: 8px;
    font-size: 0.88rem;
    line-height: 1.38;
  }

  .step-number {
    margin-bottom: 8px;
    font-size: 0.72rem;
  }

  .scroll-product {
    position: sticky;
    top: 63px;
    order: initial;
  }

  .scene-shell {
    padding: 9px;
    border-radius: 16px;
  }

  .scene-frame {
    height: calc(100vh - 86px);
    min-height: 0;
    border-radius: 10px;
  }

  .scene {
    gap: 9px;
    padding: 12px;
  }

  .scene-header {
    gap: 8px;
    padding: 9px;
  }

  .scene-header span {
    font-size: 0.7rem;
  }

  .scene-grid {
    gap: 8px;
  }

  .scene-grid span {
    min-height: 54px;
    padding: 10px;
    font-size: 0.8rem;
  }

  .calendar-lines {
    min-height: 120px;
    gap: 8px;
  }

  .prep-card,
  .memory-big {
    padding: 10px;
    font-size: 0.82rem;
  }

  .meal-stack {
    gap: 8px;
  }

  .meal-stack span {
    min-height: 46px;
  }

  .memory-takeover[data-memory-takeover] {
    min-height: 520vh;
  }

  .memory-takeover-sticky {
    padding: 18px 0;
  }

  .memory-darkscape {
    inset: var(--takeover-inset);
    border-radius: var(--takeover-radius);
  }

  .memory-takeover[data-memory-takeover] .memory-takeover-inner {
    min-height: calc(100vh - 36px);
    align-items: center;
  }

  .memory-mark {
    width: 42px;
    height: 42px;
    border-radius: 14px;
  }

  .memory-lockup {
    gap: 10px;
    font-size: 1.45rem;
  }

  .memory-takeover[data-memory-takeover] h2 {
    max-width: 760px;
    margin-top: 18px;
    font-size: clamp(2rem, 5.5vw, 2.9rem);
    line-height: 0.98;
  }

  .memory-takeover[data-memory-takeover] .lead {
    max-width: 640px;
    margin-top: 12px;
    font-size: 0.9rem;
    line-height: 1.4;
  }

  .memory-platforms {
    gap: 10px;
    margin-top: 16px;
    font-size: 0.68rem;
  }

  .memory-chapter-layout {
    grid-template-columns: minmax(0, 0.55fr) minmax(0, 0.45fr);
    gap: 18px;
  }

  .memory-copy-panel {
    min-height: 230px;
  }

  .memory-chapters {
    min-height: 180px;
  }

  .memory-chapter {
    padding-top: 8px;
    padding-bottom: 8px;
  }

  .memory-chapter h3 {
    font-size: 1.28rem;
    line-height: 1.14;
  }

  .memory-chapter p {
    margin-top: 8px;
    font-size: 0.82rem;
    line-height: 1.38;
  }

  .memory-console-stage {
    min-height: 250px;
  }
}

@media (min-width: 681px) and (max-width: 899px) and (orientation: portrait) {
  .scroll-story-section {
    padding-bottom: 72px;
  }

  .scroll-story {
    grid-template-columns: minmax(220px, 0.38fr) minmax(0, 0.62fr);
    gap: 28px;
    align-items: start;
  }

  .scroll-product {
    position: sticky;
    top: max(220px, 25vh);
    order: initial;
  }

  .scene-shell {
    padding: 11px;
    border-radius: 18px;
  }

  .scene-frame {
    height: clamp(440px, calc(100vh - 410px), 560px);
    min-height: 0;
  }

  .scroll-story-section .scene-frame {
    min-height: 0;
  }

  .scene {
    gap: 14px;
    padding: 18px;
  }

  .scene-grid span {
    min-height: 92px;
  }

  .calendar-lines {
    min-height: 230px;
  }

  .story-step {
    min-height: 34vh;
    padding-left: 22px;
  }

  .story-step[data-top-chapter] {
    height: clamp(540px, calc(100vh - 330px), 620px);
    min-height: 0;
    align-content: center;
  }

  .story-step[data-top-chapter]::before {
    height: min(190px, calc(100% - 44px));
  }

  .story-steps {
    padding-bottom: 40vh;
  }

  .story-step:not(.active) {
    opacity: 0.36;
  }

  .story-step:not(.active) h3,
  .story-step:not(.active) p {
    color: rgba(26, 26, 46, 0.46);
  }

  .story-step:not(.active)::before {
    background: rgba(47, 127, 120, 0.12);
  }

  .story-step h3 {
    max-width: 250px;
  }

  .story-step p {
    max-width: 260px;
  }

  .story-step[data-top-chapter],
  .story-step {
    scroll-margin-top: calc(var(--header-bottom, 73px) + var(--chapter-clearance, 48px) + 16px);
  }

  .story-step h3 {
    font-size: 1.2rem;
    line-height: 1.24;
  }

  .story-step p {
    font-size: 0.95rem;
    line-height: 1.48;
  }
}

@media (max-width: 680px) {
  .header-inner,
  .wrap {
    width: min(100% - 28px, 1180px);
  }

  [data-more-section] {
    min-height: calc(100vh - var(--header-bottom, 64px));
    padding-top: max(44px, calc(var(--chapter-clearance, 48px) + 16px));
    padding-bottom: 44px;
  }

  [data-more-section] > .wrap {
    width: min(100% - 28px, 1180px);
  }

  [data-more-section] h2 {
    font-size: clamp(2rem, 9vw, 3rem);
  }

  .hero-panel,
  .narrative-panel,
  .story-intro-panel,
  .story-step[data-top-chapter] {
    height: calc(100vh - 73px);
    min-height: 0;
    padding-top: max(48px, var(--chapter-clearance, 48px));
    padding-bottom: 48px;
  }

  .narrative-panel,
  .story-intro-panel {
    padding-top: max(30px, var(--chapter-clearance, 48px));
    padding-bottom: 30px;
  }

  .narrative-panel h2,
  .story-intro-panel h2 {
    font-size: clamp(2.35rem, 10.5vw, 3.2rem);
  }

  .narrative-panel .lead,
  .story-intro-panel .lead {
    font-size: 1rem;
    margin-top: 14px;
  }

  .narrative-split,
  .narrative-stack {
    min-height: 0;
    gap: 22px;
  }

  .problem-panel .sprawl-stage {
    min-height: min(330px, calc(100vh - 360px));
  }

  .hero-intro h1 {
    font-size: clamp(2.65rem, 12vw, 3.15rem);
    overflow-wrap: anywhere;
  }

  .hero-showcase {
    padding-top: max(32px, var(--chapter-clearance, 48px));
    padding-bottom: 34px;
  }

  .hero-showcase-inner {
    min-height: calc(100vh - 130px);
    gap: 18px;
  }

  .hero-showcase-header {
    grid-template-columns: 1fr;
    align-items: start;
    justify-items: center;
    text-align: center;
    gap: 12px;
  }

  .hero-showcase-header h2 {
    font-size: clamp(1.8rem, 9vw, 2.5rem);
  }

  .hero-showcase .hero-device {
    height: min(610px, calc(100vh - 236px));
  }

  .actions {
    gap: 7px;
  }

  .actions .button {
    min-height: 34px;
    padding-inline: 11px;
    font-size: 0.82rem;
  }

  h1 {
    font-size: clamp(2.65rem, 12vw, 3.15rem);
    overflow-wrap: anywhere;
  }

  .lead,
  .trust-line {
    max-width: 100%;
    overflow-wrap: break-word;
  }

  .hero-actions {
    align-items: stretch;
  }

  .hero-actions .button {
    flex: 1 1 100%;
    min-width: 0;
    white-space: normal;
    text-align: center;
  }

  .device-shell {
    width: 100%;
    max-width: 100%;
    padding: 10px;
    border-radius: 18px;
    overflow: hidden;
  }

  .live-wall {
    width: 100%;
    min-height: 430px;
  }

  .hero-showcase .live-wall {
    min-height: 0;
  }

  .wall-topbar {
    align-items: flex-start;
    flex-direction: column;
  }

  .wall-grid {
    padding: 0 10px;
  }

  .wall-card {
    min-height: 118px;
    padding: 14px;
  }

  .memory-takeover {
    min-height: 100vh;
    padding: 82px 0;
  }

  .memory-takeover h2 {
    margin-top: 32px;
    font-size: clamp(2.8rem, 15vw, 4.6rem);
  }

  .memory-platforms {
    gap: 12px;
  }

  .memory-panels {
    margin-top: 54px;
  }

  .memory-takeover[data-memory-takeover] {
    min-height: 620vh;
    padding: 0;
  }

  .memory-takeover-sticky {
    min-height: 100vh;
    padding: 78px 0 34px;
  }

  .memory-darkscape {
    inset: var(--takeover-inset);
  }

  .memory-takeover[data-memory-takeover] h2 {
    margin-top: 28px;
    font-size: clamp(2.55rem, 13vw, 4.4rem);
  }

  .memory-hero-copy {
    justify-items: start;
    text-align: left;
  }

  .memory-platforms {
    justify-content: flex-start;
  }

  .memory-chapter-layout {
    gap: 22px;
  }

  .memory-copy-panel {
    min-height: 260px;
    gap: 16px;
  }

  .memory-chapters {
    min-height: 190px;
  }

  .memory-chapter-rail span {
    width: 34px;
    height: 34px;
  }

  .memory-console-stage {
    min-height: 340px;
  }

  .memory-visual {
    padding: 18px;
  }

  .memory-node-map {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  .memory-node-map span {
    min-height: 70px;
  }

  .memory-chapter {
    padding-top: 12px;
    padding-bottom: 12px;
  }

  .hero {
    min-height: auto;
  }

  .module-grid,
  .feature-grid,
  .mini-grid {
    grid-template-columns: 1fr;
  }

  .shared-panel .module-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  .shared-panel .module-card {
    min-height: 118px;
    padding: 14px;
  }

  .shared-panel .module-card p {
    display: none;
  }

  .shared-panel .module-dot {
    width: 26px;
    height: 26px;
  }

  .placeholder.kitchen,
  .placeholder.tall {
    min-height: 390px;
  }

  .scroll-progress {
    top: calc(var(--header-bottom, 64px) - 3px);
  }

  .chapter-progress {
    top: calc(var(--header-bottom, 64px) + 12px);
    width: min(100% - 28px, 680px);
    gap: 14px;
    padding-top: 0;
  }

  .chapter-progress button {
    font-size: 0.66rem;
    padding: 0;
  }

  .scroll-product {
    position: sticky;
    top: 73px;
    z-index: 3;
    margin-bottom: 16px;
  }

  .scene-shell {
    padding: 12px;
    border-radius: 18px;
  }

  .scene-frame {
    height: min(330px, calc(100vh - 204px));
    min-height: 260px;
  }

  .scene {
    gap: 12px;
    padding: 16px;
  }

  .scene-grid.four,
  .calendar-lines {
    grid-template-columns: 1fr;
  }

  .scene-grid span {
    min-height: 64px;
  }

  .calendar-lines {
    min-height: 176px;
  }

  .calendar-lines span::after {
    top: 10px !important;
    height: 28px;
  }

  .story-step {
    min-height: auto;
    padding-top: 26px;
    padding-bottom: 26px;
  }

  .story-step::before {
    height: min(150px, calc(100% - 52px));
  }

  .story-step[data-top-chapter] {
    min-height: 0;
    height: calc(100vh - 73px);
    align-content: center;
  }

  .story-step[data-top-chapter]::before {
    height: min(150px, calc(100% - 52px));
  }

  .scroll-story-section .scene-shell {
    padding: 8px;
    border-radius: 16px;
  }

  .scroll-story-section .scene-frame {
    height: 210px;
    min-height: 210px;
    border-radius: 10px;
  }

  .scroll-story-section .scene {
    gap: 8px;
    padding: 10px;
  }

  .scroll-story-section .scene-header {
    gap: 8px;
    padding: 8px;
  }

  .scroll-story-section .scene-header span {
    font-size: 0.72rem;
  }

  .scroll-story-section .scene-grid {
    gap: 8px;
  }

  .scroll-story-section .scene-grid span {
    min-height: 42px;
    padding: 9px;
    font-size: 0.82rem;
  }

  .scroll-story-section .calendar-lines {
    min-height: 112px;
    gap: 8px;
  }

  .scroll-story-section .prep-card,
  .scroll-story-section .memory-big {
    padding: 9px;
    font-size: 0.82rem;
  }

  .live-wall {
    min-height: 460px;
  }

  .wall-grid {
    grid-template-columns: 1fr;
  }

  .memory-card {
    grid-column: auto;
  }

  .wall-dock {
    overflow-x: auto;
    justify-content: flex-start;
  }

  .sprawl-stage {
    min-height: 430px;
  }

  .sprawl-card {
    min-width: 120px;
    font-size: 0.9rem;
  }

  .sprawl-card.note,
  .sprawl-card.chore {
    right: 18px;
  }

  .rhythm-stage,
  .prep-flow,
  .meal-board,
  .routine-ladder,
  .memory-stack,
  .privacy-console {
    min-height: auto;
  }

  .rhythm-stage {
    display: grid;
    gap: 14px;
    padding: 22px;
  }

  .rhythm-line,
  .tablet-glow {
    display: none;
  }

  .rhythm-item,
  .rhythm-item.morning,
  .rhythm-item.afternoon,
  .rhythm-item.evening {
    position: relative;
    inset: auto;
    width: auto;
  }

  .rhythm-item::after {
    display: none;
  }

  .tablet-chip {
    position: relative;
    right: auto;
    bottom: auto;
    width: fit-content;
  }

  .flow-card,
  .flow-card.task,
  .flow-card.approve {
    justify-self: stretch;
    width: auto;
  }

  .flow-arrow {
    display: none;
  }

  .meal-board > span {
    display: grid;
  }

  .ladder-step {
    margin-left: 0;
  }

  .memory-stack {
    display: grid;
    gap: 14px;
  }

  .memory-stack article,
  .memory-stack article:nth-child(1),
  .memory-stack article:nth-child(2),
  .memory-stack article:nth-child(3) {
    position: relative;
    inset: auto;
  }

  .console-row {
    display: grid;
  }

  .tour-panels {
    min-height: auto;
  }

  .tour-ui {
    min-height: 230px;
  }

  .addon-row {
    display: grid;
  }
}

@media (max-width: 680px) and (orientation: portrait) {
  .scroll-story {
    display: grid;
    grid-template-columns: 1fr;
  }

  .story-steps,
  .scroll-product {
    grid-area: 1 / 1;
  }

  .story-steps {
    z-index: 2;
    padding-bottom: 68vh;
    pointer-events: none;
  }

  .story-step {
    padding-left: 22px;
  }

  .story-step[data-top-chapter],
  .story-step {
    align-content: start;
    min-height: calc(100vh - 73px);
    padding-top: 104px;
    padding-bottom: 24px;
  }

  .story-step h3 {
    max-width: 330px;
    font-size: 1.18rem;
    line-height: 1.22;
  }

  .story-step p {
    max-width: 330px;
    font-size: 0.98rem;
    line-height: 1.48;
  }

  .scroll-product {
    position: sticky;
    top: 360px;
    z-index: 1;
    order: initial;
    align-self: start;
    margin: 0;
    pointer-events: none;
  }

  .scroll-story-section .scene-shell {
    padding: 10px;
    border-radius: 18px;
  }

  .scroll-story-section .scene-frame {
    height: clamp(310px, calc(100vh - 390px), 430px);
    min-height: 0;
  }

  .scroll-story-section .scene {
    gap: 10px;
    padding: 12px;
  }

  .scroll-story-section .scene-grid span {
    min-height: 54px;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* ==========================================================================
   HEADER — aligned with the home page.

   The home page ships a floating glass "navigation island" (brand · links ·
   store badge). The sub-pages previously used a plain sticky bar with no
   navigation. This block restyles the same header markup into that island so
   every page shares one header. It overrides the legacy .site-header/.nav
   rules above and uses fixed values (no JS-driven --nav-p), so it renders the
   settled glass state everywhere.
   ========================================================================== */

.site-header {
  position: fixed;
  top: 15px;
  left: 50%;
  z-index: 50;
  width: min(1180px, calc(100% - 36px));
  border-bottom: 0;
  background: transparent;
  box-shadow: none;
  transform: translateX(-50%);
  pointer-events: none;

  /* The blur belongs to the island, not to this wrapper.

     .site-header was a full-width bar once, and carried blur(18px) to frost
     what scrolled under it. Turning it into a centred floating island left
     that declaration behind: the element is transparent and click-through
     now, but a backdrop-filter still blurs everything behind its BOX, and the
     box is 1180px wide while the visible island is only as wide as its links
     — 496px on /about/, measured. The remaining ~340px each side was an
     invisible smear that wiped out any heading scrolling beneath it, most
     obviously the hero h1 on a sub-page.

     `none` rather than deleting the earlier rule, because that one still
     applies wherever the header is a real bar. */
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.header-inner {
  display: flex;
  justify-content: center;
  width: 100%;
  padding: 0;
}

.nav-shell {
  display: flex;
  align-items: center;
  gap: 16px;
  width: fit-content;
  max-width: 100%;
  min-height: 56px;
  padding: 6px 15px;
  border: 1px solid rgba(16, 18, 38, 0.08);
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.72);
  box-shadow: 0 6px 26px rgba(16, 18, 38, 0.06);
  -webkit-backdrop-filter: blur(20px) saturate(116%);
  backdrop-filter: blur(20px) saturate(116%);
  color: #16182e;
  pointer-events: auto;
}

.site-header .brand {
  flex: 0 0 auto;
  gap: 9px;
  color: #16182e;
  font-size: 0.97rem;
}

.site-header .brand-mark {
  width: 34px;
  height: 34px;
  border-radius: 0;
  overflow: visible;
}

.site-header .brand-mark img {
  object-fit: contain;
}

/* Inner-page navigation: page links in place of the home page's stage rail. */
.site-header .nav {
  position: static;
  inset: auto;
  display: flex;
  flex: 0 1 auto;
  align-items: center;
  gap: 4px;
  min-width: 0;
  border-bottom: 0;
  background: transparent;
  padding: 0;
}

.site-header .nav a {
  border-radius: 999px;
  padding: 7px 11px;
  color: rgba(22, 24, 46, 0.62);
  font-size: 0.84rem;
  font-weight: 760;
  text-decoration: none;
  white-space: nowrap;
  transition: color 180ms ease, background-color 180ms ease;
}

.site-header .nav a:hover,
.site-header .nav a[aria-current="page"] {
  color: rgba(22, 24, 46, 0.95);
  background: rgba(47, 127, 120, 0.1);
}

.site-header .actions {
  flex: 0 0 auto;
  gap: 8px;
  flex-wrap: nowrap;
}

/* "Get it on Google Play" badge, compact inside the island like the home page. */
.store-button {
  display: inline-flex;
  align-items: center;
  line-height: 0;
  text-decoration: none;
}

.store-button img {
  display: block;
  height: 36px;
  width: auto;
}

.site-header .brand:focus-visible,
.site-header .nav a:focus-visible,
.store-button:focus-visible {
  outline: 2px solid rgba(47, 127, 120, 0.72);
  outline-offset: 3px;
  border-radius: 8px;
}

/* Clear the floating island so the page hero isn't hidden underneath it. */
.page-hero {
  padding-top: clamp(96px, 13vw, 144px);
}

/* Same wrap as the home page: brand + actions on the top row, the nav drops
   to its own scrollable row inside the same island.

   699px, not 1180px, and the reason is in chrome.css beside the hamburger
   breakpoint these two share: the full row fits down to ~622px on a feature
   page, so wrapping it at 1180 threw away 500px of viewport in which nothing
   had to wrap. Below 699 chrome.css takes the nav out of this row entirely and
   makes it the panel, so what is left here is the island's own top row. */
@media (max-width: 699px) {
  .site-header {
    top: 12px;
  }

  .nav-shell {
    flex-wrap: wrap;
    justify-content: space-between;
    width: 100%;
    row-gap: 2px;
    padding-top: 8px;
    padding-bottom: 8px;
  }

  .nav-shell > .brand {
    order: 1;
  }

  .nav-shell > .actions {
    order: 2;
  }

  .site-header .nav {
    order: 3;
    flex: 1 1 100%;
    justify-content: flex-start;
    gap: 10px;
    overflow-x: auto;
    scrollbar-width: none;
    padding-top: 6px;
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 26px), transparent);
    mask-image: linear-gradient(to right, #000 calc(100% - 26px), transparent);
  }

  .site-header .nav::-webkit-scrollbar {
    display: none;
  }

  .site-header .nav a {
    flex: 0 0 auto;
    padding: 4px 10px;
  }
}

@media (max-width: 560px) {
  .store-button img {
    height: 32px;
  }
}

/* The one link in the header that leaves this site. Given the accent colour
   and a border so it reads as an action, not as another page in the nav —
   and sized to sit level with the store badge beside it in .actions. */
.nav-signin {
  flex: 0 0 auto;
  line-height: 16px;
  padding: 6px 14px;
  border: 1px solid rgba(31, 94, 89, 0.28);
  border-radius: 999px;
  color: var(--teal-deep);
  font-size: 0.92rem;
  font-weight: 720;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 140ms ease, border-color 140ms ease;
}

.nav-signin:hover {
  border-color: rgba(31, 94, 89, 0.5);
  background: rgba(47, 127, 120, 0.1);
}

.nav-signin:focus-visible {
  outline: 2px solid rgba(47, 127, 120, 0.72);
  outline-offset: 2px;
}


/* ==========================================================================
   ABOUT PAGE + 404 — prose and wayfinding.

   .draft-fill marks a fact only the owner can supply on the About page. It is
   styled loudly on purpose, the same way an unresolved {{TOKEN}} is on a legal
   page: a placeholder that looks like finished copy is a placeholder that gets
   deployed.
   ========================================================================== */

.about-wrap {
  max-width: 760px;
  margin: 0 auto;
}

.about-wrap h2 {
  margin-top: clamp(40px, 6vw, 56px);
  font-size: clamp(1.35rem, 2.6vw, 1.72rem);
  line-height: 1.15;
  font-weight: 820;
  color: var(--ink);
}

.about-wrap h2:first-child {
  margin-top: 0;
}

.about-wrap p {
  margin-top: 14px;
  color: var(--muted);
  font-size: 1rem;
  line-height: 1.7;
}

.draft-fill {
  display: inline-block;
  padding: 2px 8px;
  border: 1px dashed rgba(31, 94, 89, 0.5);
  border-radius: 8px;
  background: rgba(47, 127, 120, 0.1);
  color: var(--teal-deep);
  font-style: italic;
}

.notfound-links {
  display: grid;
  gap: 10px;
  margin: 26px 0 0;
  padding: 0;
  list-style: none;
  max-width: 620px;
}

.notfound-links li {
  color: var(--muted);
  font-size: 1rem;
  line-height: 1.5;
}

.notfound-links a {
  font-weight: 720;
  color: var(--teal-deep);
}

.notfound-note {
  max-width: 620px;
  margin-top: 26px;
  color: var(--muted);
  font-size: 0.93rem;
  line-height: 1.6;
}


/* ==========================================================================
   SUPPORT PAGE — the help list, the self-serve list, and the contact block.

   The disclosure here is native <details>, not the homepage's animated
   accordion: that one is driven by gsap-site.js, which also boots the whole
   scroll narrative, and a page people open *because something is broken* is
   the last place to make the content depend on a large script loading. So the
   styling below has to look deliberate with no JavaScript at all, which is why
   the marker is drawn in CSS rather than toggled in JS.
   ========================================================================== */

.help-wrap {
  max-width: 760px;
  margin: 0 auto;
}

.help-heading {
  margin-top: clamp(40px, 6vw, 60px);
  font-size: clamp(1.35rem, 2.6vw, 1.72rem);
  line-height: 1.15;
  font-weight: 820;
  color: var(--ink);
}

.help-heading:first-child {
  margin-top: 0;
}

.help-list {
  display: grid;
  gap: 12px;
  margin-top: 22px;
}

.help-list details {
  border: 1px solid var(--line);
  border-radius: 14px;
  background: rgba(255, 253, 248, 0.72);
}

.help-list summary {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 18px 20px;
  color: var(--ink);
  font-size: 1rem;
  font-weight: 760;
  line-height: 1.4;
  cursor: pointer;
  list-style: none;
}

/* Safari draws its own triangle through ::-webkit-details-marker, and it sits
   outside the flex layout above. Both are removed so the caret below is the
   only marker on every browser. */
.help-list summary::-webkit-details-marker {
  display: none;
}

.help-list summary::after {
  content: "";
  flex: 0 0 auto;
  width: 9px;
  height: 9px;
  margin: 5px 0 0 auto;
  border-right: 2px solid var(--teal-deep);
  border-bottom: 2px solid var(--teal-deep);
  transform: rotate(45deg);
  transform-origin: center;
  transition: transform 160ms ease;
}

.help-list details[open] summary::after {
  transform: rotate(-135deg);
}

.help-list summary:focus-visible {
  outline: 2px solid rgba(47, 127, 120, 0.72);
  outline-offset: -2px;
  border-radius: 14px;
}

.help-list details > div {
  padding: 0 20px 18px;
}

.help-list details p {
  margin-top: 12px;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.66;
}

.help-list details p:first-child {
  margin-top: 0;
}

.help-list code {
  padding: 1px 6px;
  border-radius: 6px;
  background: rgba(47, 127, 120, 0.1);
  color: var(--teal-deep);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 0.86em;
}

.help-actions {
  display: grid;
  gap: 18px;
  margin-top: 22px;
  padding: 0;
  list-style: none;
}

.help-actions > li {
  padding-left: 18px;
  border-left: 3px solid rgba(47, 127, 120, 0.28);
}

.help-actions strong {
  color: var(--ink);
  font-size: 1rem;
  font-weight: 780;
}

.help-actions p {
  margin-top: 6px;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.6;
}

.help-contact {
  margin-top: 22px;
  padding: 20px 22px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: rgba(255, 253, 248, 0.72);
}

.help-contact p {
  margin-top: 12px;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.66;
}

.help-contact p:first-child {
  margin-top: 0;
  color: var(--ink);
  font-size: 1.05rem;
  font-weight: 700;
}

.help-contact strong {
  color: var(--ink);
  font-weight: 760;
}


/* ==========================================================================
   LEGAL DOCUMENT PAGES — prose styling for /terms, /privacy, /child-privacy.

   Those three pages are GENERATED, not written: tools/build-legal-pages.py
   pulls the published release from the app's /api/legal and wraps it in this
   site's header and footer. Nothing here should ever be hand-edited, and the
   text is not this site's to change — it lives in backend/legal_content and is
   frozen and hashed when an operator publishes it.

   Consequence for this stylesheet: it has to style whatever the document
   contains, because the markup is not authored per page. The backend's block
   vocabulary is small and closed — section, paragraph, list, table — so this
   section covers exactly those four, plus the version stamp and the {{TOKEN}}
   marker an unpublished document still carries in place of a business fact.
   ========================================================================== */

.legal-doc {
  max-width: 760px;
  margin: 0 auto;
}

.legal-doc h2 {
  margin-top: clamp(40px, 6vw, 56px);
  font-size: clamp(1.35rem, 2.6vw, 1.72rem);
  line-height: 1.15;
  font-weight: 820;
  color: var(--ink);
}

.legal-doc h2:first-child {
  margin-top: 0;
}

.legal-doc p {
  margin-top: 14px;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.66;
}

.legal-doc ul {
  margin-top: 14px;
  padding-left: 20px;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.66;
}

.legal-doc li {
  margin-top: 8px;
}

.legal-doc strong {
  color: var(--ink);
  font-weight: 780;
}

.legal-token {
  padding: 1px 6px;
  border: 1px dashed rgba(31, 94, 89, 0.42);
  border-radius: 6px;
  background: rgba(47, 127, 120, 0.1);
  color: var(--teal-deep);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 0.86em;
  white-space: nowrap;
}

/* Which version, and when it took effect. It sits in the hero under the
   subtitle because "is this the document I accepted?" is the first question a
   legal page has to answer, and the answer should not be below the fold.
   Only published documents carry one — see stamp_line() in the generator. */
.legal-stamp {
  margin-top: 14px;
  color: var(--muted);
  font-size: 0.9rem;
  font-weight: 620;
  letter-spacing: 0.01em;
}

/* The Privacy Policy's "what we collect" tables are two wide prose columns.
   They scroll inside their own box rather than pushing the page sideways —
   a legal page that scrolls horizontally on a phone reads as broken. */
.legal-table {
  margin-top: 20px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: rgba(255, 253, 248, 0.72);
}

.legal-table table {
  width: 100%;
  min-width: 460px;
  border-collapse: collapse;
  font-size: 0.93rem;
  line-height: 1.6;
}

.legal-table th,
.legal-table td {
  padding: 12px 14px;
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--line);
}

.legal-table th {
  color: var(--ink);
  font-weight: 760;
  white-space: nowrap;
}

.legal-table td {
  color: var(--muted);
}

.legal-table tr:last-child td {
  border-bottom: 0;
}

/* Below this width the table stops being a table. Two columns of prose in a
   390px viewport leaves the second one unreadable behind a horizontal scroll
   most people never discover, so each row becomes a small stacked card and
   every cell wears its column heading (`data-label`, written by the
   generator) instead of relying on a header row that is no longer beside it. */
@media (max-width: 680px) {
  .legal-table {
    overflow-x: visible;
    border: 0;
    border-radius: 0;
    background: none;
  }

  .legal-table table,
  .legal-table thead,
  .legal-table tbody,
  .legal-table tr,
  .legal-table td {
    display: block;
    width: auto;
    min-width: 0;
  }

  /* The header row's job is done by data-label on every cell. */
  .legal-table thead {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }

  .legal-table tr {
    margin-top: 12px;
    padding: 4px 16px 16px;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: rgba(255, 253, 248, 0.72);
  }

  .legal-table td {
    padding: 12px 0 0;
    border-bottom: 0;
  }

  .legal-table td[data-label]::before {
    content: attr(data-label);
    display: block;
    margin-bottom: 4px;
    color: var(--teal-deep);
    font-size: 0.74rem;
    font-weight: 780;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }
}


/* ==========================================================================
   REGION B — SUB-PAGE FIXES (FAQ, and the generated legal pages)
   ========================================================================== */

/* The screenshot placeholders that filled the second cell of these grids were
   internal notes to a designer and have been removed. Let the remaining
   column span the track rather than leaving a 420px reserved gap beside it. */
.page-grid > :only-child,
.split > :only-child {
  grid-column: 1 / -1;
  max-width: 68ch;
}

/* 44px touch targets: nav links measured 26px and the CTA buttons 40px. */
@media (pointer: coarse) {
  .site-header .nav a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }

  .button {
    min-height: 44px;
  }

  .footer a:not(.brand) {
    min-height: 44px;
    display: flex;
    align-items: center;
  }
}

/* ==========================================================================
   FEATURE PAGES  (/family-calendar/, /meal-planner/, /chores/, /wall-tablet/)
   ==========================================================================

   These are read, not scrolled through. The site's base type is display type
   sized for the homepage's scroll narrative — h2 runs to 3.5rem and h1 on a
   .page-hero to 5rem — which on a page of actual prose gives you three words
   per line and a heading that outweighs the paragraph under it.

   /about/ already solved this for itself with .about-wrap, but that caps the
   column at 760px, and these pages need the full .wrap so a three-up
   .feature-grid has somewhere to go. So the same restraint, scoped to <main>
   instead of to a narrow column: headings come down to reading scale, prose
   gets a measure, and the grid keeps its width. */

/* The narrative homepage wants big air between beats. A page of explanation
   does not: at clamp(64px, 9vw, 116px) top and bottom, three lines of prose
   sat in a 340px-tall band of nothing. */
.feature-page .section {
  padding-block: clamp(52px, 6.5vw, 88px);
}

.feature-page .page-hero h1 {
  font-size: clamp(2.1rem, 4vw, 3.4rem);
  line-height: 1.08;
}

.feature-page .section-heading h2,
.feature-page .cta-band h2 {
  max-width: 30ch;
  font-size: clamp(1.5rem, 2.9vw, 2.15rem);
  line-height: 1.14;
  font-weight: 820;
}

/* In a two-column section the copy column is already the constraint, so a
   max-width on top of it only wraps the heading early inside a column that
   had room. This was the "why is it breaking the line when there is space"
   bug: 24ch inside a 560px column. */
.feature-page .pane .section-heading h2 {
  max-width: none;
}

/* A measure. Prose set to the full 1180px wrap is unreadable however good the
   type is — the eye loses the line on the way back. */
.feature-page .section-heading .lead,
.feature-page .cta-band .lead,
.feature-page .section > .wrap > p {
  max-width: 64ch;
}

.feature-page .section > .wrap > p {
  margin-top: 16px;
  color: var(--muted);
  font-size: 1rem;
  line-height: 1.7;
}

.feature-page .feature-card h3,
.feature-page .faq-item h3 {
  font-size: 1.06rem;
  line-height: 1.3;
  font-weight: 820;
}

.feature-page .check-list {
  max-width: 64ch;
  margin-top: 4px;
}

.feature-page .check-list li {
  font-size: 1rem;
  line-height: 1.6;
}

.feature-page .cta-band {
  text-align: left;
}

.feature-page .cta-band .hero-actions {
  margin-top: 26px;
}

/* The in-page links that carry the internal linking between these four pages
   and out to the legal documents. Underlined on purpose: an unstyled coloured
   link inside grey body copy is easy to miss, and these are the paths between
   the pages. */
.feature-page .section a:not(.store-button):not(.button) {
  color: var(--teal-deep);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}

.feature-page .section a:not(.store-button):not(.button):hover {
  color: var(--teal);
}

/* The fade on the sub-page nav's scrollable edge. Added when the feature
   pages took the nav from four items to eight: below 1024px the row scrolls,
   and without this a phone shows "Home Calendar Meals Chores" with no hint
   that About, Support and Sign in are a swipe away.

   Stated, never implied: the class is set by site.js only when the row
   actually overflows, so a nav that fits is not dimmed at one end. */
.site-header .nav.is-scrollable {
  mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent);
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent);
}

/* ==========================================================================
   FEATURE PAGE VISUALS
   ==========================================================================

   The pages shipped as headings, prose and bordered cards in a 1180px wrap,
   which left the right half of every section empty and made the headings wrap
   early against nothing. Both complaints are one problem: there was nothing
   to look at.

   These mocks are built here rather than lifted from the homepage. The
   homepage's `.explore-visual-*` blocks are the obvious source and they were
   the first attempt, but their CSS runs from line 3201 to 8504 of
   gsap-site.css and is genuinely welded to the scroll narrative — the pin,
   `.is-swipe`, `.is-unpinned`, `--announce-h`, `--landing-lift`. Pulling that
   apart to reuse four pictures risks the homepage for no gain, and loading
   the whole of gsap-site.css on a static page risks it differently.

   So: a small self-contained kit, every rule scoped under `.feature-page`,
   using only the tokens at the top of this file. Nothing here can reach the
   homepage. */

/* --- two-column section ------------------------------------------------ */

.feature-page .pane {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr);
  align-items: center;
  gap: clamp(32px, 5vw, 68px);
}

.feature-page .pane.pane-flip .pane-visual {
  order: -1;
}

/* Swap the tracks with the order, so the visual keeps the wider column either
   way round. Without this the 1.04fr always belongs to whatever sits second,
   which is the copy in a flipped pane and the visual in a plain one — every
   feature page has one of each, so the two screens on a page came out 4%
   apart for no reason anyone could point at. */
.feature-page .pane.pane-flip {
  grid-template-columns: minmax(0, 1.04fr) minmax(0, 1fr);
}

.feature-page .pane .section-heading {
  margin-bottom: 22px;
}

.feature-page .pane-copy > p {
  margin-top: 14px;
  max-width: 54ch;
  color: var(--muted);
  font-size: 1rem;
  line-height: 1.7;
}

.feature-page .pane .check-list {
  max-width: none;
}

/* The hero is the same idea, but the copy leads. */
.feature-page .page-hero .wrap {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.96fr);
  align-items: center;
  gap: clamp(32px, 5vw, 64px);
}

.feature-page .page-hero .lead {
  max-width: 48ch;
}

/* --- one column on a phone ---------------------------------------------- */

@media (max-width: 900px) {
  /* .pane.pane-flip is listed explicitly: it carries its own two-column
     template (see the swap above) and out-specifies a bare .pane here, which
     left every flipped pane two-up on a phone with a 162px screen in it. */
  .feature-page .pane,
  .feature-page .pane.pane-flip,
  .feature-page .page-hero .wrap {
    grid-template-columns: 1fr;
  }

  /* The visual always follows the words it illustrates once they stack —
     pane-flip is a desktop-only alternation. */
  .feature-page .pane.pane-flip .pane-visual {
    order: 0;
  }

}

/* ==========================================================================
   CHORE METER DEMO — /chores/
   Replaces the character illustration beside "Nobody has to be nagged by a
   person" with the thing the sentence describes: a child's meter, two chores
   ticking off, the ring closing and the coins going up on their own.

   Rebuilt from MemberChoresWidget/index.jsx — the 120-viewBox ring at r=48
   with a 9px round-capped stroke, the 24px check that fills with the member's
   colour, the amber coin pill, and the strike-and-fade on a done row.

   No character art: the widget's own AvatarFallback is the member's initial on
   their colour, which is what the product renders whenever a profile has no
   picture. Nothing is invented to avoid the illustration.
   ========================================================================== */

@property --cm-on { syntax: "<number>"; initial-value: 0; inherits: true; }

.mock--narrow { max-width: 358px; }

.cm {
  --cm-member: #48a37b;
  --cm-cycle: 12s;
  background: #fff;
  border-radius: 13px;
  padding: 14px 13px 13px;
  font-size: 12px;
}

.cm-name { font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase;
           color: var(--cm-member); margin-bottom: 8px; }

.cm-ringwrap { position: relative; width: 116px; height: 116px; margin: 0 auto 2px; }
.cm-ringwrap svg { width: 100%; height: 100%; display: block; }
.cm-track { fill: none; stroke: #ece6dd; stroke-width: 9; }
/* stroke-dasharray is animatable, so the arc is driven directly rather than
   faked with a rotating mask. Circumference at r=48 is 301.6. */
.cm-arc {
  fill: none; stroke: var(--cm-member); stroke-width: 9; stroke-linecap: round;
  transform: rotate(-90deg); transform-origin: 60px 60px;
  stroke-dasharray: 121 302;
  animation: cm-arc var(--cm-cycle) infinite;
}
@keyframes cm-arc {
  0%, 21%   { stroke-dasharray: 121 302; }
  26%, 45%  { stroke-dasharray: 181 302; }
  50%, 91%  { stroke-dasharray: 241 302; }
  96%, 100% { stroke-dasharray: 121 302; }
}

.cm-face {
  position: absolute; inset: 14px; border-radius: 999px;
  background: var(--cm-member); box-shadow: 0 0 0 2px #fff;
  display: grid; place-items: center;
  font-size: 30px; font-weight: 800; color: #fff;
}
.cm-pct { position: absolute; right: -2px; bottom: 10px; font-size: 9px; font-weight: 900;
          color: var(--cm-member); background: #fff; border-radius: 4px; padding: 0 2px;
          min-width: 22px; height: 12px; }
.cm-pct span { position: absolute; inset: 0; opacity: 0; }

.cm-chips { display: flex; justify-content: center; gap: 6px; margin: 6px 0 11px; }
.cm-chip { display: inline-flex; align-items: center; gap: 3px; height: 19px; padding: 0 8px;
           border-radius: 999px; font-size: 10px; font-weight: 800;
           background: #f3efe8; color: #6c6257; position: relative; }
.cm-chip--n { min-width: 46px; justify-content: center; }
.cm-chip--n span, .cm-chip--coins span { position: absolute; inset: 0;
           display: grid; place-items: center; opacity: 0; }
.cm-chip--coins { min-width: 52px; justify-content: center;
           color: #b45309;
           background: linear-gradient(135deg, rgba(251,191,36,0.16), rgba(245,158,11,0.08));
           border: 1px solid rgba(245,158,11,0.18); }

/* ── a chore row ────────────────────────────────────────────────────────── */
.cm-row {
  display: flex; align-items: center; gap: 9px;
  padding: 7px 9px; margin-bottom: 6px;
  border: 2px solid color-mix(in srgb, #ded6ca calc((1 - var(--cm-on)) * 100%), #e9e3da);
  border-radius: 12px;
  background: color-mix(in srgb, #f4f1ec calc(var(--cm-on) * 100%), #fff);
  opacity: calc(1 - 0.45 * var(--cm-on));
}
.cm-check {
  width: 20px; height: 20px; border-radius: 999px; flex: none; display: grid; place-items: center;
  background: color-mix(in srgb, var(--cm-member) calc(var(--cm-on) * 100%), transparent);
  border: 2px solid color-mix(in srgb, #d5ccbf calc((1 - var(--cm-on)) * 100%), var(--cm-member));
}
.cm-check svg { width: 10px; height: 10px; color: #fff; opacity: var(--cm-on); }
.cm-icon { font-size: 14px; line-height: 1; flex: none; }
/* Same as the grocery rows: the product's line-through, revealed by animating
   the decoration colour rather than drawing a rule across the flex spacer. */
.cm-title { flex: 1; min-width: 0; font-size: 12.5px; font-weight: 600; color: #33302c;
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
            text-decoration-line: line-through;
            text-decoration-thickness: 1px;
            text-decoration-color: color-mix(in srgb, currentColor calc(var(--cm-on) * 100%), transparent); }

.cm-coin { display: inline-flex; align-items: center; gap: 2px; flex: none;
           padding: 1px 6px; border-radius: 999px; font-size: 9.5px; font-weight: 900;
           color: #b45309; background: linear-gradient(135deg, rgba(251,191,36,0.16), rgba(245,158,11,0.08));
           border: 1px solid rgba(245,158,11,0.18); }

.cm-row--done { --cm-on: 1; }

/* ── the loop ───────────────────────────────────────────────────────────── */
/* Linear ramps centred on 22% and 46%, which is where the chip, the coins and
   the percentage switch — the same discipline the grocery piece needed, for
   the same reason: a number that disagrees with the boxes reads as a bug. */
@keyframes cm-r1 { 0%, 21% { --cm-on: 0 } 23%, 91% { --cm-on: 1 } 93%, 100% { --cm-on: 0 } }
@keyframes cm-r2 { 0%, 45% { --cm-on: 0 } 47%, 91% { --cm-on: 1 } 93%, 100% { --cm-on: 0 } }
.cm-row--t1, .cm-row--t2 {
  animation-duration: var(--cm-cycle); animation-iteration-count: infinite;
  animation-timing-function: linear;
}
.cm-row--t1 { animation-name: cm-r1; }
.cm-row--t2 { animation-name: cm-r2; }

.cm-chip--n span:nth-child(1), .cm-chip--coins span:nth-child(1), .cm-pct span:nth-child(1) {
  animation: cm-s1 var(--cm-cycle) infinite; }
.cm-chip--n span:nth-child(2), .cm-chip--coins span:nth-child(2), .cm-pct span:nth-child(2) {
  animation: cm-s2 var(--cm-cycle) infinite; }
.cm-chip--n span:nth-child(3), .cm-chip--coins span:nth-child(3), .cm-pct span:nth-child(3) {
  animation: cm-s3 var(--cm-cycle) infinite; }
@keyframes cm-s1 { 0%, 21.9% { opacity: 1 } 22%, 91.9% { opacity: 0 } 92%, 100% { opacity: 1 } }
@keyframes cm-s2 { 0%, 21.9% { opacity: 0 } 22%, 45.9% { opacity: 1 } 46%, 100% { opacity: 0 } }
@keyframes cm-s3 { 0%, 45.9% { opacity: 0 } 46%, 91.9% { opacity: 1 } 92%, 100% { opacity: 0 } }

@media (prefers-reduced-motion: reduce) {
  .cm-row, .cm-arc, .cm-chip--n span, .cm-chip--coins span, .cm-pct span { animation: none !important; }
  .cm-row--t1 { --cm-on: 1; }
  .cm-arc { stroke-dasharray: 181 302; }
  .cm-chip--n span, .cm-chip--coins span, .cm-pct span { opacity: 0; }
  .cm-chip--n span:nth-child(2), .cm-chip--coins span:nth-child(2), .cm-pct span:nth-child(2) { opacity: 1; }
}

/* ==========================================================================
   PROFILES PANEL — /chores/
   Replaces the second character illustration beside "Children are profiles,
   not account holders" with the admin surface that actually says so: the
   member roster, its Parent/Child labels, and the sign-in status the panel
   shows per person (MembersPanel.jsx:299,317,322-325) — including its own
   hint, "Parents sign in with an email and password. Children use the wall
   only."

   Deliberately still. The other piece on this page moves because chores
   ticking off IS the behaviour being described; this pane is about how
   accounts are structured, and there is nothing here that happens. Animating
   it would be decoration pretending to be evidence. Addresses are left off
   rather than invented.
   ========================================================================== */

.mp { background: #fff; border-radius: 13px; padding: 13px; }
.mp-head { font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase;
           color: #9a8b78; margin-bottom: 9px; }

.mp-row { display: flex; align-items: center; gap: 10px; padding: 9px 4px;
          border-bottom: 1px solid #efe9e0; }
.mp-row:last-of-type { border-bottom: 0; }

.mp-face { width: 30px; height: 30px; border-radius: 999px; flex: none; display: grid;
           place-items: center; color: #fff; font-size: 13px; font-weight: 800; }
.mp-who { flex: 1; min-width: 0; }
.mp-nm { font-size: 13px; font-weight: 700; color: #33302c; }
.mp-st { font-size: 10.5px; font-weight: 600; margin-top: 1px; }
.mp-st--ok   { color: #2f7d5e; }
.mp-st--none { color: #9a8b78; }

.mp-role { font-size: 9px; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase;
           padding: 2px 7px; border-radius: 999px; flex: none; }
.mp-role--p { color: #7a5a1e; background: rgba(245,158,11,0.13); border: 1px solid rgba(245,158,11,0.22); }
.mp-role--c { color: #4a5b6b; background: #f1f3f5; border: 1px solid #e3e7ea; }

.mp-note { margin-top: 10px; padding-top: 9px; border-top: 1px solid #efe9e0;
           font-size: 10.5px; line-height: 1.45; color: #8a7a68; }
