/* ==========================================================================
   Readers on the Rise — shared stylesheet
   Loaded on all 5 pages. Fonts are loaded via <link> tags in each page's
   <head> (see index.html) — that's a Google Fonts performance best practice,
   which is why you won't find @import font-face rules here.
   ========================================================================== */

/* ---- Reset / base ---- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--color-cream);
  color: var(--color-black);
  font-family: var(--font-body);
  font-size: 1rem;
  line-height: 1.6;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; margin: 0; padding: 0; }
button { font: inherit; background: none; border: none; cursor: pointer; }
h1, h2, h3, h4 { margin: 0 0 0.6em; font-family: var(--font-heading); line-height: 1.15; }
p { margin: 0 0 1em; }

/* Visible focus ring everywhere — required for keyboard nav, easy to lose
   by accident when styling buttons/links, so it's set once here globally. */
a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible {
  outline: 3px solid var(--color-sky);
  outline-offset: 3px;
}

/* Skip link: invisible until a keyboard user tabs to it — lets someone
   using a screen reader/keyboard jump past the repeated header nav. */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--color-black);
  color: var(--color-cream);
  padding: 0.75em 1.2em;
  z-index: 200;
  border-radius: 0 0 8px 0;
}
.skip-link:focus {
  left: 0;
}

/* ---- Design tokens ---- */
:root {
  /* Palette — see docs/02-design-spec.md for usage rules */
  --color-sky: #7EC4E0;
  --color-pink: #F0A8C4;
  --color-mustard: #F6D776;
  --color-cream: #FAF3E7;
  --color-sage: #A8B57A;
  --color-black: #1A1A1A;
  /* Coral accent — not part of the original brand palette, added as a
     standout color for the "Find a Session" CTAs specifically. */
  --color-coral: #F2665A;

  --font-heading: "Baloo 2", cursive;
  --font-body: "Nunito", sans-serif;
  --font-accent: "Patrick Hand", cursive;

  --radius-card: 20px;
  --shadow-sticker: 5px 5px 0 var(--color-black);
  --shadow-sticker-sm: 3px 3px 0 var(--color-black);

  --container-width: 1140px;
  --gutter: 1.5rem;

  --section-padding: 4rem;
}

@media (min-width: 768px) {
  :root { --section-padding: 6rem; }
}

/* ---- Layout utilities ---- */
.container {
  width: 100%;
  max-width: var(--container-width);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.section {
  padding-block: var(--section-padding);
}
.section-narrow { max-width: 760px; margin-inline: auto; }
.text-center { text-align: center; }
.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* Anything meant to animate in on scroll starts here — the motion pass
   toggles a "is-visible" class (or animates opacity directly with GSAP),
   these defaults just make sure there's no "flash of fully-visible content"
   before JS/GSAP takes over, and give every element a transition to animate
   along by default. */
[data-animate] {
  opacity: 1;
  transform: none;
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.js-gsap-ready [data-animate] {
  opacity: 0;
  transform: translateY(24px);
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  [data-animate] { transition: opacity 0.3s ease; }
}

/* ==========================================================================
   Buttons
   ========================================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.75em 1.6em;
  border: 2px solid var(--color-black);
  border-radius: 999px;
  font-family: var(--font-body);
  font-weight: 800;
  font-size: 1rem;
  color: var(--color-black);
  background: var(--color-cream);
  box-shadow: var(--shadow-sticker);
  transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}
.btn:focus-visible, .btn:active {
  transform: translate(5px, 5px);
  box-shadow: 0 0 0 var(--color-black);
}
.btn-primary { background: var(--color-sky); }
.btn-secondary { background: var(--color-cream); }
/* Used only for the "Find a Session" CTAs on the home page — everywhere else
   (header, Join Us, session sign-up) keeps .btn-primary so it stays consistent. */
.btn-coral { background: var(--color-coral); }
.btn-secondary:focus-visible, .btn-secondary:active { background: var(--color-mustard); transform: translate(5px, 5px); }
.btn-block { width: 100%; }

/* Hover-only versions of the states above, scoped to devices that actually
   have a mouse. Without this guard, tapping a button on a touch phone can
   leave it "stuck" showing the hover style until the user taps elsewhere. */
@media (hover: hover) and (pointer: fine) {
  .btn:hover { transform: translate(5px, 5px); box-shadow: 0 0 0 var(--color-black); }
  .btn-secondary:hover { background: var(--color-mustard); transform: translate(5px, 5px); }
}

/* ==========================================================================
   Header / Nav
   ========================================================================== */
#header { position: sticky; top: 0; z-index: 100; }
.site-header {
  background: var(--color-cream);
  border-bottom: 2px solid var(--color-black);
  transition: padding 0.25s ease;
}
.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding-block: 1rem;
}
.header-logo {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  flex-shrink: 0;
}
.header-logo img { border-radius: 50%; transition: transform 0.2s ease; }
@media (hover: hover) and (pointer: fine) {
  .header-logo:hover img { transform: rotate(-6deg) scale(1.05); }
}
.header-wordmark {
  font-family: var(--font-heading);
  font-size: 1.15rem;
  font-weight: 700;
}

.site-nav { display: none; }
.nav-list { display: flex; gap: 1.75rem; }
.nav-link {
  position: relative;
  font-weight: 700;
  padding-block: 0.3em;
}
.nav-link::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  width: 100%;
  height: 3px;
  background: var(--color-sky);
  border-radius: 2px;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.25s ease;
}
.nav-link:focus-visible::after,
.nav-link.is-active::after {
  transform: scaleX(1);
}
@media (hover: hover) and (pointer: fine) {
  .nav-link:hover::after { transform: scaleX(1); }
}

/* Dropped from the collapsed mobile bar (too tight at small widths) — it
   reappears as the first, most prominent item inside the opened menu
   (.mobile-nav-cta) instead. Shown again once .site-nav reappears below. */
.header-cta { display: none; flex-shrink: 0; }

/* Hamburger — hidden on desktop, shown on mobile via the breakpoint below */
.hamburger {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  padding: 8px;
}
.hamburger span {
  display: block;
  height: 3px;
  border-radius: 3px;
  background: var(--color-black);
  transition: transform 0.25s ease, opacity 0.25s ease;
}
/* Morphs into an X when open — pure CSS fallback; the motion pass adds a
   nicer eased version but this works even if GSAP fails to load. */
.hamburger.is-open span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
.hamburger.is-open span:nth-child(2) { opacity: 0; }
.hamburger.is-open span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

.mobile-nav {
  position: fixed;
  /* top is set inline by header.js to the header's real measured height —
     a hardcoded value here would drift out of sync with the actual header
     (different font-load states, the scroll-condensed size, etc.) and leave
     a gap where the hero content behind it peeks through. */
  inset: 0 0 0 0;
  background: var(--color-cream);
  transform: translateX(100%);
  transition: transform 0.3s ease;
  overflow-y: auto;
  padding: 2rem var(--gutter);
  z-index: 99;
}
.mobile-nav.is-open { transform: translateX(0); }
.mobile-nav-list { display: flex; flex-direction: column; gap: 1.5rem; }
.mobile-nav-list .nav-link { font-size: 1.4rem; }
.mobile-nav-cta { margin-bottom: 0.5rem; }

@media (min-width: 900px) {
  .site-nav { display: block; }
  .header-cta { display: inline-flex; }
  .hamburger, .mobile-nav { display: none; }
}

/* Scroll-condensed state — class toggled by main.js once the header exists */
.site-header.is-scrolled .header-inner { padding-block: 0.6rem; }
.site-header.is-scrolled .header-logo img { width: 42px; height: 42px; }

/* ==========================================================================
   Footer
   ========================================================================== */
#footer { position: relative; }
.site-footer {
  position: relative;
  background: var(--color-sage);
  /* Cream text on sage measures ~2:1 contrast — well under the 4.5:1 WCAG AA
     minimum for body text. Black on sage is ~7.9:1 (AAA), so text is black
     here even though every other dark-background moment on the site uses
     cream — sage is a mid-tone, not a dark one, so it needs dark text. */
  color: var(--color-black);
  padding-top: 2rem;
}
.footer-scallop {
  position: absolute;
  top: -1px; left: 0;
  width: 100%;
  height: 20px;
  color: var(--color-cream);
}
.footer-inner {
  display: grid;
  gap: 2.5rem;
  padding-block: 2rem 3rem;
  grid-template-columns: 1fr;
}
.footer-brand { display: flex; flex-direction: column; gap: 0.75rem; }
.footer-brand img { border-radius: 50%; }
.footer-tagline { font-family: var(--font-accent); font-size: 1.3rem; margin: 0; }
.footer-heading {
  font-family: var(--font-body);
  font-size: 0.9rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 0.75em;
}
.footer-col a:hover { text-decoration: underline; }
.footer-links { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1rem; }
.social-row { display: flex; gap: 0.75rem; }
.social-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--color-cream);
  color: var(--color-black);
  transition: transform 0.2s ease, background 0.2s ease;
}
@media (hover: hover) and (pointer: fine) {
  .social-icon:hover { transform: translateY(-3px); background: var(--color-mustard); }
}
.footer-bottom {
  border-top: 1px solid rgba(250, 243, 231, 0.35);
  padding-block: 1.25rem;
  text-align: center;
  font-size: 0.85rem;
}

@media (min-width: 768px) {
  .footer-inner { grid-template-columns: 1.2fr 1fr 1fr; }
}

/* ==========================================================================
   Cards — shared visual system for session / team / book-highlight cards
   ========================================================================== */
.card-grid {
  display: grid;
  gap: 1.25rem;
  grid-template-columns: 1fr;
}
@media (min-width: 640px) {
  .card-grid { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 2rem; }
}

.card {
  display: flex;
  flex-direction: column;
  background: var(--color-cream);
  border: 2px solid var(--color-black);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-sticker);
  overflow: hidden;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.card:focus-within {
  transform: translateY(-6px);
  box-shadow: 2px 8px 0 var(--color-black);
}
@media (hover: hover) and (pointer: fine) {
  .card:hover { transform: translateY(-6px); box-shadow: 2px 8px 0 var(--color-black); }
}

.card-media {
  position: relative;
  aspect-ratio: 4 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  text-align: center;
  font-family: var(--font-accent);
  font-size: 1.1rem;
  color: var(--color-black);
  border-bottom: 2px solid var(--color-black);
}
.card-media--sky { background: var(--color-sky); }
.card-media--pink { background: var(--color-pink); }
.card-media--mustard { background: var(--color-mustard); }

/* Real cover images are portrait-shaped, unlike the 4:3 media box, so they use
   object-fit: contain (not cover) — this shows the whole cover with a bit of
   the colored background as a frame around it, rather than cropping it. */
.card-media--has-image { padding: 0.75rem; }
.card-media--has-image img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.card-body-wrap { padding: 1.5rem; display: flex; flex-direction: column; gap: 0.4rem; flex-grow: 1; }

.card-eyebrow {
  align-self: flex-start;
  margin-top: -1.9rem;
  margin-bottom: 0.5rem;
  padding: 0.25em 0.9em;
  background: var(--color-mustard);
  border: 2px solid var(--color-black);
  border-radius: 999px;
  font-family: var(--font-accent);
  font-size: 0.95rem;
  z-index: 1;
}

.card-title { font-size: 1.3rem; margin-bottom: 0.15em; }
.card-meta { font-weight: 700; color: rgba(26, 26, 26, 0.7); font-size: 0.9rem; margin-bottom: 0.5em; }
.card-body { flex-grow: 1; margin-bottom: 1rem; }
.card-cta { margin-top: auto; align-self: flex-start; }

/* ==========================================================================
   Hero (Home + Volunteer share this base)
   ========================================================================== */
.hero {
  position: relative;
  overflow: hidden;
  padding-block: 4rem;
  text-align: center;
}
.hero-decor {
  position: absolute;
  pointer-events: none;
  color: var(--color-sage);
  opacity: 0.9;
}
.hero-decor--1 { top: 8%; left: 4%; width: 48px; }
.hero-decor--2 { bottom: 10%; right: 6%; width: 60px; color: var(--color-pink); }
.hero-decor--3 { top: 12%; right: 10%; width: 36px; color: var(--color-mustard); }

.hero-title {
  font-size: clamp(2.2rem, 5vw, 3.4rem);
  max-width: 14ch;
  margin-inline: auto;
  margin-bottom: 0.4em;
}
.hero-subtitle {
  font-size: 1.15rem;
  max-width: 46ch;
  margin-inline: auto;
  margin-bottom: 1.75rem;
}
/* Home's hero has no subtitle, so the button sits right under the title —
   this only fires when the button directly follows the h1 (i.e. no
   .hero-subtitle in between), so pages that keep the subtitle are unaffected. */
.hero-title + .btn { margin-top: 0.5rem; }

/* Small floating decorative icons reused outside the hero (What We Do,
   Location sections) for extra visual interest while scrolling. Shares
   the hero's icon look; each instance gets its own position modifier.
   Host section needs position:relative + overflow:hidden (set per-section
   below) so these don't spill into neighboring sections. */
.decor-icon {
  position: absolute;
  pointer-events: none;
  opacity: 0.9;
}

/* ==========================================================================
   Home page sections
   ========================================================================== */
.what-we-do { position: relative; overflow: hidden; }
.decor-icon--wwd1 { top: 4%; left: 3%; width: 34px; color: var(--color-mustard); }
.decor-icon--wwd2 { bottom: 8%; right: 4%; width: 52px; color: var(--color-pink); }

.badge-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 1rem;
  margin-top: 2rem;
}
.badge {
  padding: 0.6em 1.3em;
  border: 2px solid var(--color-black);
  border-radius: 999px;
  font-weight: 800;
  font-family: var(--font-body);
  /* Not a link — the transform/shadow below is purely a "fun to look at"
     touch, so it needs its own transition (buttons/cards already have one). */
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.badge--sky { background: var(--color-sky); }
.badge--pink { background: var(--color-pink); }
.badge--mustard { background: var(--color-mustard); }
@media (hover: hover) and (pointer: fine) {
  .badge:hover { transform: translateY(-4px) rotate(-3deg); box-shadow: var(--shadow-sticker-sm); }
  .badge--pink:hover { transform: translateY(-4px) rotate(3deg); }
}

.gallery-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1rem;
}
@media (min-width: 640px) {
  .gallery-grid { grid-template-columns: repeat(3, 1fr); gap: 1.5rem; }
}
.gallery-item {
  aspect-ratio: 1;
  border: 2px solid var(--color-black);
  border-radius: 16px;
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.gallery-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.gallery-item:nth-child(odd) { transform: rotate(-2deg); }
.gallery-item:nth-child(even) { transform: rotate(2deg); }
@media (hover: hover) and (pointer: fine) {
  /* Lifts like a sticker being picked up, on top of the existing "un-tilt" hover */
  .gallery-item:hover { transform: rotate(0deg) scale(1.05) translateY(-4px); box-shadow: var(--shadow-sticker); }
}

.location-section { position: relative; overflow: hidden; }
.decor-icon--loc1 { top: 6%; left: 6%; width: 40px; color: var(--color-sage); }

.location-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 2rem;
  margin-top: 2rem;
}
.location-badge {
  width: 160px;
  height: 160px;
  border-radius: 50%;
  border: 2px solid var(--color-black);
  background: var(--color-sky);
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 1rem;
  font-family: var(--font-heading);
  font-weight: 700;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.location-badge:nth-child(2) { background: var(--color-pink); }
@media (hover: hover) and (pointer: fine) {
  .location-badge:hover { transform: translateY(-6px) rotate(-4deg); box-shadow: var(--shadow-sticker); }
  .location-badge:nth-child(2):hover { transform: translateY(-6px) rotate(4deg); }
}

/* ==========================================================================
   Session Sign Up page
   ========================================================================== */
.steps {
  display: grid;
  gap: 2rem;
  margin-top: 2.5rem;
  position: relative;
}
@media (min-width: 768px) {
  .steps { grid-template-columns: repeat(3, 1fr); }
  .steps::before {
    content: "";
    position: absolute;
    top: 28px;
    left: 12%;
    right: 12%;
    border-top: 3px dashed var(--color-black);
    z-index: 0;
  }
}
.step {
  position: relative;
  z-index: 1;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.75rem;
}
.step-number {
  width: 56px; height: 56px;
  border-radius: 50%;
  background: var(--color-mustard);
  border: 2px solid var(--color-black);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-heading);
  font-size: 1.4rem;
}

.callout-box {
  border: 2px dashed var(--color-black);
  border-radius: var(--radius-card);
  padding: 1.75rem;
  background: var(--color-cream);
  margin-top: 2.5rem;
}
/* Smaller, centered variant for a short one-line prompt (e.g. under the
   Volunteer page's hero button) rather than a full-width block. */
.callout-box--compact {
  max-width: 360px;
  margin-inline: auto;
  padding: 1.25rem 1.5rem;
}
.callout-box-title {
  font-family: var(--font-heading);
  font-size: 1.2rem;
  margin-bottom: 0.25em;
}
.callout-box--compact p:last-child { margin-bottom: 0; }

.waitlist-card {
  background: var(--color-mustard);
  border: 2px solid var(--color-black);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-sticker);
  padding: 2rem;
  margin-top: 3rem;
  text-align: center;
}
.waitlist-card .btn { margin-top: 1rem; }

/* Private Book Clubs feature box — sky background (instead of the mustard
   used by the mailing-list boxes above) so it reads as a distinct offer,
   not another "join our list" CTA. Left-aligned since it holds a bullet list. */
.feature-box {
  background: var(--color-sky);
  border: 2px solid var(--color-black);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-sticker);
  padding: 2rem;
  margin-top: 2rem;
}
.feature-box .badge { display: inline-block; margin-bottom: 0.75rem; }
.feature-box .btn { margin-top: 0.5rem; }
.feature-notes { margin: 1rem 0 1.5rem; }
.feature-notes li {
  position: relative;
  padding-left: 1.4em;
  margin-bottom: 0.6em;
}
.feature-notes li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.55em;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-black);
}

/* ==========================================================================
   About page — bio carousel
   ========================================================================== */
.bio-carousel-wrap {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-top: 2rem;
}

.bio-carousel {
  flex-grow: 1;
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  border: 2px solid var(--color-black);
  border-radius: var(--radius-card);
  background: var(--color-cream);
  box-shadow: var(--shadow-sticker);
  /* The arrows + dots already give a clear way to navigate, so the native
     scrollbar is just visual noise — hidden in both Firefox and WebKit. */
  scrollbar-width: none;
}
.bio-carousel::-webkit-scrollbar { display: none; }

.bio-slide {
  flex: 0 0 100%;
  scroll-snap-align: center;
  box-sizing: border-box;
  padding: 2.5rem 2rem;
}
/* Same sky/pink/mustard rotation used by cards elsewhere on the site. */
.bio-slide:nth-child(3n+1) { background: var(--color-sky); }
.bio-slide:nth-child(3n+2) { background: var(--color-pink); }
.bio-slide:nth-child(3n+3) { background: var(--color-mustard); }
.bio-slide h3 { text-align: center; }
.bio-slide p { margin-bottom: 0; }

.carousel-arrow {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border: 2px solid var(--color-black);
  border-radius: 50%;
  background: var(--color-cream);
  box-shadow: var(--shadow-sticker-sm);
  color: var(--color-black);
  transition: transform 0.18s ease, box-shadow 0.18s ease, opacity 0.18s ease;
}
.carousel-arrow:disabled { opacity: 0.35; }
.carousel-arrow:not(:disabled):active,
.carousel-arrow:focus-visible { transform: translate(3px, 3px); box-shadow: 0 0 0 var(--color-black); }
@media (hover: hover) and (pointer: fine) {
  .carousel-arrow:not(:disabled):hover { transform: translate(3px, 3px); box-shadow: 0 0 0 var(--color-black); }
}
/* Hidden on small screens — swipe + the dots below are enough there, and two
   44px buttons eat too much width next to an already-narrow carousel. */
@media (max-width: 639px) {
  .carousel-arrow { display: none; }
}

.carousel-dots {
  display: flex;
  justify-content: center;
  gap: 0.6rem;
  margin-top: 1.25rem;
}
.carousel-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 2px solid var(--color-black);
  background: var(--color-cream);
  padding: 0;
  transition: background 0.18s ease;
}
.carousel-dot.is-active { background: var(--color-sky); }

/* ==========================================================================
   Volunteer page
   ========================================================================== */
.involves-list {
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
  margin-top: 2rem;
}
.involves-item {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1.25rem;
  background: var(--color-cream);
  border: 2px solid var(--color-black);
  border-radius: 16px;
}
.involves-icon {
  flex-shrink: 0;
  width: 40px; height: 40px;
  border-radius: 50%;
  background: var(--color-sky);
  border: 2px solid var(--color-black);
  display: flex; align-items: center; justify-content: center;
}

/* ==========================================================================
   Book Highlights page
   ========================================================================== */
/* Full-bleed sage block to set the grade-band suggestions visually apart
   from "Books We've Read Together" above it — same scalloped-edge transition
   the footer uses, so it reads as an intentional section break, not a jump. */
.suggestions-section {
  position: relative;
  background: var(--color-sage);
  padding-top: calc(var(--section-padding) + 1rem);
}
.suggestions-scallop {
  position: absolute;
  top: -1px;
  left: 0;
  width: 100%;
  height: 20px;
  color: var(--color-cream);
}
.suggestions-section h2,
.suggestions-section p { color: var(--color-black); }

.diy-section {
  border: 2px solid var(--color-black);
  border-radius: var(--radius-card);
  background: var(--color-cream);
  padding: 2rem;
  margin-top: 2rem;
}
.diy-list { display: flex; flex-direction: column; gap: 1rem; margin-top: 1.5rem; }
.diy-item { display: flex; align-items: flex-start; gap: 0.85rem; }
.diy-check {
  flex-shrink: 0;
  width: 28px; height: 28px;
  color: var(--color-sage);
}

/* ==========================================================================
   Google Form embeds — keep responsive without a fixed pixel width
   ========================================================================== */
.form-embed {
  width: 100%;
  border: 2px solid var(--color-black);
  border-radius: 16px;
  overflow: hidden;
  background: #fff;
}
.form-embed iframe {
  width: 100%;
  min-height: 640px;
  border: none;
  display: block;
}
.form-embed-placeholder {
  padding: 2rem 1.5rem;
  margin: 0;
  text-align: center;
  font-family: var(--font-accent);
  font-size: 1.05rem;
  color: var(--color-black);
}
.form-embed[hidden] { display: none; }
.card-cta.js-toggle-form { border: 2px solid var(--color-black); }
