/* css/home.css -- the home page (/). A confident, saturated ed-tech look: a bright brand blue, teal, violet and berry
   bands on a near-white page; navy ink for text and the footer; a coral highlight used sparingly. Independent of
   /style.css (the dark game theme).
   Palette: saturated colour bands carry the energy, cards stay white, and red is kept for errors and the "not" marks.
   Contrast: white on brand blue 6.7:1, white on teal 5.5:1, white on berry 7.0:1, navy on white 15:1. */

:root {
  --blue: #087BFA;          /* brand blue: fills, decoration, large type */
  --blue-strong: #0568D6;   /* blue for links and the app's buttons (5.3:1 with white) */
  --blue-dark: #0453AD;     /* hover/active */
  --brand: #1D4ED8;         /* the saturated hero blue (6.7:1 with white) */
  --brand-dark: #1A3FB0;    /* hover on brand fills */
  --navy: #1B2A63;          /* deep navy: headings, body text, footer */
  --muted: #4A5170;         /* slate secondary text (7.5:1 on white) */
  --cream: #FBFAF6;         /* the page background: a near-white with the faintest warmth */
  --paper: #FFFFFF;         /* cards and the header */
  --white: #FFFFFF;
  --pale: #EEF3FF;          /* hover and current-page tint */
  --pale-deep: #DCE6FF;     /* chips and code tiles */
  --line: #DCDFEA;          /* neutral grey-lavender borders */
  --field: #7A7F90;         /* input and switch borders (4.2:1 on white) */
  --teal: #0F766E;          /* fresh accent (5.5:1 with white) */
  --teal-soft: #D7F2EC;
  --green: #12843F;
  --green-soft: #E4F6EA;
  --violet: #6A3CC8;        /* violet accent (6.6:1 with white) */
  --violet-soft: #ECE5FF;
  --berry: #9D2A6B;         /* berry accent (7.0:1 with white) */
  --berry-soft: #F8DCEA;
  --coral: #FF7A6B;         /* a small highlight only: never text, never a button */
  --purple: #6A3CC8;
  --lavender: #ECE5FF;
  --red: #C62828;           /* errors and the "not" marks only; never a decorative accent */
  --red-soft: #FDE8E8;
  --radius: 16px;
  --shadow: 0 2px 10px rgba(27, 42, 99, .10);
  --shadow-up: 0 8px 22px rgba(27, 42, 99, .18);
  /* TYPE. Two families only: Source Sans 3 for everything except the wordmark, and Nunito 800 for the wordmark alone.
     The Google Fonts <link> (weights 400, 600, 700 and Nunito 800) is copied into each in-scope page <head> and into
     web/src/render-landing.js: change them together. font-display: swap; the fallbacks are close in width. */
  --font: "Source Sans 3", "Source Sans Pro", "Segoe UI", system-ui, -apple-system, Roboto, Arial, sans-serif;
  --font-brand: "Nunito", ui-rounded, "Arial Rounded MT Bold", "Segoe UI", system-ui, sans-serif;
  --fw-regular: 400;        /* body text */
  --fw-semibold: 600;       /* labels, buttons, table headers, links */
  --fw-bold: 700;           /* headings and emphasis */
  --fw-brand: 800;          /* the wordmark only */
  --fs-caption: 14px;       /* captions, table headers, eyebrow */
  --fs-small: 15px;         /* secondary text, field labels */
  --fs-body: 17px;          /* body text */
  --fs-lead: 19px;          /* intro paragraphs */
  --fs-h3: 20px;            /* card titles */
  --fs-h2: clamp(28px, 3.4vw, 38px);   /* section titles */
  --fs-h1: clamp(32px, 4.8vw, 50px);   /* hero and page titles */
  --fs-kpi: 28px;           /* KPI numbers */
  --lh-tight: 1.15;         /* hero and section titles */
  --lh-heading: 1.25;       /* card titles */
  --lh-body: 1.55;          /* UI text */
  --lh-long: 1.7;           /* long-form pages */
  --ls-heading: -.01em;
  --ls-caps: .08em;         /* uppercase labels and table headers */
  --measure: 70ch;          /* long-form line length */
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
body {
  margin: 0;
  font-family: var(--font);
  font-size: var(--fs-body);
  font-weight: var(--fw-regular);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  color: var(--navy);
  background: var(--cream);
  overflow-x: hidden;
}
img, svg, canvas { max-width: 100%; }
h1, h2, h3, p, ul, ol { margin: 0; }
ul, ol { padding: 0; list-style: none; }
a { color: var(--blue-strong); }

.container { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.sr-only {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}
.icon { width: 24px; height: 24px; flex: none; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

:focus-visible { outline: 3px solid var(--navy); outline-offset: 3px; border-radius: 6px; }
.site-footer :focus-visible, .btn-solid:focus-visible { outline-color: var(--navy); }
.site-footer :focus-visible { outline-color: #fff; }
.btn-solid:focus-visible { box-shadow: 0 0 0 3px #fff; }
/* on the saturated bands the focus ring is white, so it shows against the colour */
.band-pale :focus-visible, #games :focus-visible, .band-different :focus-visible, .build-line :focus-visible,
.band-cta :focus-visible, .page-hero :focus-visible { outline-color: #fff; }

.skip-link {
  position: absolute; left: 12px; top: -60px; z-index: 100;
  padding: 10px 16px; background: var(--navy); color: #fff; border-radius: 999px; font-weight: 600; text-decoration: none;
}
.skip-link:focus { top: 10px; }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 44px; padding: 0 22px;
  border-radius: 999px; border: 2px solid var(--brand);
  font: inherit; font-weight: 600; font-size: 16px; line-height: 1.2; text-align: center; text-decoration: none;
  cursor: pointer; transition: background-color .15s, color .15s, box-shadow .15s, transform .15s;
}
/* the primary button: saturated brand blue with white text (6.7:1) */
.btn-solid { background: var(--brand); color: #fff; border-color: var(--brand); }
.btn-solid:hover { background: var(--brand-dark); border-color: var(--brand-dark); box-shadow: 0 4px 12px rgba(29, 78, 216, .35); }
.btn-outline { background: #fff; color: var(--brand); border-color: var(--brand); }
.btn-outline:hover { background: var(--pale-deep); }
/* the "Kids: Play Now!" button: playful hot pink, flat, white text (about 5.4:1) */
.btn-play { background: #D6246E; color: #fff; border-color: #D6246E; font-weight: 700; }
.btn-play:hover { background: #B81C5C; border-color: #B81C5C; }
.btn-play:focus-visible { outline: 3px solid var(--navy); outline-offset: 3px; }
/* a gentle shine sweeps across every few seconds (a transform, so it stays on the compositor); off for reduced motion */
.btn-play { position: relative; overflow: hidden; }
.btn-play::after {
  content: ""; position: absolute; top: 0; left: -60%; width: 40%; height: 100%;
  background: linear-gradient(105deg, transparent, rgba(255, 255, 255, .5), transparent);
  transform: skewX(-20deg); pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
  .btn-play::after { animation: play-shine 4.5s ease-in-out infinite; }
}
@keyframes play-shine { 0%, 55% { transform: translateX(0) skewX(-20deg); } 100% { transform: translateX(475%) skewX(-20deg); } }
.btn-lg { min-height: 52px; padding: 0 30px; font-size: 18px; }
/* hover lifts a little; pressing settles back; disabled looks inert (the same states for every button) */
@media (prefers-reduced-motion: no-preference) {
  .btn:hover { transform: translateY(-1px); }
  .btn:active { transform: translateY(0); }
}
.btn:disabled { opacity: .55; cursor: not-allowed; box-shadow: none; transform: none; }
.btn-solid:active { background: var(--navy); border-color: var(--navy); }

/* ---------- header ---------- */
.site-header { position: sticky; top: 0; z-index: 50; background: var(--paper); border-bottom: 1px solid var(--line); }
.nav-row { display: flex; align-items: center; min-height: 80px; gap: 16px; }
.brand { display: inline-flex; align-items: center; gap: 12px; min-height: 44px; color: var(--navy); font-family: var(--font-brand); font-weight: var(--fw-brand); font-size: 27px; letter-spacing: -.2px; text-decoration: none; white-space: nowrap; }
.brand img { height: 58px; width: auto; display: block; }
.brand b { color: var(--brand); font-weight: var(--fw-brand); }

.site-nav { display: flex; align-items: center; flex: 1; gap: 16px; }
.nav-links { display: flex; align-items: center; gap: 4px; margin: 0 auto; }
.nav-links a {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 8px;
  color: var(--navy); font-weight: 600; text-decoration: none; border-radius: 999px;
}
.nav-links a:hover { background: var(--pale); color: var(--brand); }
.nav-actions { display: flex; align-items: center; gap: 24px; }
.nav-teacher { display: flex; align-items: center; gap: 8px; }
.nav-teacher .btn, .nav-play { padding: 0 14px; font-size: 15px; white-space: nowrap; }
.nav-links a[aria-current="page"] { color: var(--brand); background: var(--pale); }

/* signed-in state: js/session.js puts bb-student / bb-teacher / bb-admin on <html> before first paint, so
   these show with no flash. Hidden by default (no session, or scripts off). */
.nav-logout { display: none; }
.bb-student .nav-logout, .bb-teacher .nav-logout, .bb-admin .nav-logout { display: inline-flex; padding: 0 14px; font-size: 15px; white-space: nowrap; }
@media (min-width: 1140px) and (max-width: 1299px) {
  .nav-actions { gap: 14px; }
}

.menu-btn {
  display: none; margin-left: auto; align-items: center; gap: 8px;
  min-height: 44px; padding: 0 16px; border-radius: 999px;
  border: 2px solid var(--brand); background: #fff; color: var(--brand);
  font: inherit; font-weight: 600; cursor: pointer;
}
.menu-btn[aria-expanded="true"] { background: var(--brand); color: #fff; }

@media (max-width: 1139px) {
  .menu-btn { display: inline-flex; }
  .site-nav {
    position: absolute; left: 0; right: 0; top: 100%;
    flex-direction: column; align-items: stretch; gap: 12px;
    padding: 12px 20px 20px; background: #fff; border-bottom: 1px solid var(--line);
    box-shadow: 0 12px 20px rgba(27, 42, 99, .14);
  }
  .js .site-nav:not(.open) { display: none; }
  .nav-links { flex-direction: column; align-items: stretch; margin: 0; gap: 0; }
  .nav-links a { padding: 0 8px; border-radius: 10px; font-size: 18px; }
  .nav-actions { flex-direction: column; align-items: stretch; gap: 12px; }
  .nav-actions .btn { width: 100%; }
  .nav-play { order: 1; }
  .nav-logout { order: 2; }
  .nav-teacher { margin-top: 10px; }
  .nav-teacher { order: 3; flex-direction: column; align-items: stretch; gap: 8px; }
  .nav-teacher .btn, .nav-play { font-size: 16px; }
}

/* ---------- section scaffolding ---------- */
/* the light band: the near-white card colour, for the teachers section */
.band-white { background: var(--paper); }
/* the saturated violet-to-berry band (the "Set up. Play. Track." row): white text, 6:1 or better */
.band-pale { background: linear-gradient(135deg, #5F33BE 0%, #8A2C8F 100%); color: #fff; }
.section { padding: 44px 0; }
.eyebrow { margin-bottom: 6px; color: var(--teal); font-weight: var(--fw-semibold); font-size: var(--fs-caption); letter-spacing: var(--ls-caps); text-transform: uppercase; }
.h2 { font-size: var(--fs-h2); line-height: var(--lh-tight); font-weight: var(--fw-bold); letter-spacing: var(--ls-heading); }
.lede { margin-top: 10px; color: var(--muted); font-size: var(--fs-lead); line-height: var(--lh-body); }
.text-link { display: inline-flex; align-items: center; min-height: 44px; font-weight: 600; color: var(--blue-strong); text-decoration: none; }
.text-link:hover { text-decoration: underline; text-underline-offset: 3px; }

/* the coloured bands: their headings, text and links switch to white */
.band-pale .eyebrow, .band-pale .h2, #games .eyebrow, #games .h2 { color: #fff; }
.band-pale .lede, #games .lede { color: #EEF3FF; }
.band-pale .text-link, #games .text-link { color: #fff; text-decoration: underline; text-underline-offset: 3px; }

/* ---------- section one: games (the brand blue to teal hero) ---------- */
/* the hero is calmer than the other bands: a deeper blue into a muted teal, still white-text safe */
#games { scroll-margin-top: 90px; padding-top: 32px; background: linear-gradient(135deg, #1E47B8 0%, #13716B 100%); color: #fff; }
.games-intro { display: grid; gap: 22px; margin-bottom: 26px; }
.features { display: grid; gap: 12px; grid-template-columns: 1fr; }
.feature {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 14px; background: #fff; color: var(--navy); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow);
}
.feature .icon-wrap {
  display: grid; place-items: center; flex: none; width: 40px; height: 40px;
  border-radius: 12px; background: var(--pale-deep); color: var(--brand);
}
/* each feature gets its own accent: violet, teal, berry, blue (colour is decoration; the words carry the meaning) */
.features .feature:nth-child(1) .icon-wrap { background: var(--violet-soft); color: var(--violet); }
.features .feature:nth-child(2) .icon-wrap { background: var(--teal-soft); color: var(--teal); }
.features .feature:nth-child(3) .icon-wrap { background: var(--berry-soft); color: var(--berry); }
.features .feature:nth-child(4) .icon-wrap { background: var(--pale-deep); color: var(--brand); }
.feature h3 { font-size: 16px; font-weight: 700; line-height: 1.2; }
.feature p { margin-top: 2px; font-size: 14px; line-height: 1.4; color: var(--muted); }
@media (min-width: 560px) { .features { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1100px) {
  .games-intro { grid-template-columns: minmax(280px, .85fr) 2.15fr; align-items: center; gap: 28px; }
  .features { grid-template-columns: repeat(4, 1fr); }
  .feature { flex-direction: column; gap: 8px; height: 100%; }
}

/* the game cards: a swipeable row on phones, a wrapping grid on tablets, five across on desktops */
.game-grid {
  display: flex; gap: 14px; overflow-x: auto;
  margin: 0 -20px; padding: 6px 20px 18px; scroll-padding-left: 20px;
  scroll-snap-type: x mandatory; overscroll-behavior-x: contain;
}
.game-grid > li { flex: 0 0 min(76%, 260px); scroll-snap-align: start; display: flex; }
@media (min-width: 720px) {
  .game-grid { display: grid; grid-template-columns: repeat(3, 1fr); overflow: visible; margin: 0; padding: 6px 0 0; }
  .game-grid > li { flex: none; }
}
@media (min-width: 1100px) { .game-grid { grid-template-columns: repeat(5, 1fr); gap: 16px; } }

.game-card {
  display: flex; flex-direction: column; width: 100%; color: var(--navy); text-decoration: none;
  background: #fff; border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow); overflow: hidden;
  transition: box-shadow .2s, transform .2s;
}
/* a coloured top edge on each game card, cycling through the palette (decorative; the game names carry the meaning) */
.game-grid > li:nth-child(5n+1) .game-card { border-top: 5px solid var(--brand); }
.game-grid > li:nth-child(5n+2) .game-card { border-top: 5px solid var(--teal); }
.game-grid > li:nth-child(5n+3) .game-card { border-top: 5px solid var(--violet); }
.game-grid > li:nth-child(5n+4) .game-card { border-top: 5px solid var(--berry); }
.game-grid > li:nth-child(5n+5) .game-card { border-top: 5px solid var(--green); }
.game-card:hover, .game-card:focus-within { box-shadow: var(--shadow-up); }
@media (prefers-reduced-motion: no-preference) { .game-card:hover { transform: translateY(-3px); } }
/* The art area uses the same dark tile background as the games page, so the transparent art looks the same here. */
.card-art { position: relative; aspect-ratio: 300 / 168; background: linear-gradient(180deg, #2a2f76 0%, #1c2058 100%); }
.card-art img { display: block; width: 100%; height: 100%; object-fit: contain; object-position: center; padding: 4px; box-sizing: border-box; }


.card-body { display: flex; flex-direction: column; flex: 1; padding: 14px 14px 16px; gap: 6px; }
.card-body h3 { font-size: var(--fs-h3); font-weight: var(--fw-bold); line-height: var(--lh-heading); }
.card-desc { flex: 1; font-size: 14px; line-height: 1.4; color: var(--muted); }

.games-more { max-width: 660px; margin: 22px auto 0; text-align: center; font-size: 18px; line-height: 1.5; color: #EEF3FF; text-wrap: balance; }
.games-more a { font-weight: 600; white-space: nowrap; color: #fff; }
.games-more a:hover { text-decoration-thickness: 2px; text-underline-offset: 3px; }
.games-foot { display: flex; flex-direction: column; align-items: center; margin-top: 18px; padding-bottom: 4px; text-align: center; }

/* ---------- section two: not what you are used to (the teal to ocean band) ---------- */
.band-different { background: linear-gradient(160deg, #0E6B63 0%, #0C5C84 100%); color: #fff; position: relative; overflow: hidden; }
.band-different::before, .band-different::after {
  content: ""; position: absolute; border-radius: 50%; background: rgba(255, 255, 255, .08); pointer-events: none;
}
.band-different::before { width: 360px; height: 360px; left: -140px; bottom: -190px; }
.band-different::after { width: 260px; height: 260px; right: -90px; top: -120px; }
.band-different .container { position: relative; z-index: 1; }
.different-title { text-align: center; margin-bottom: 26px; color: #fff; }
.different-grid { display: grid; gap: 16px; }
.not-card {
  padding: 20px; background: #fff; color: var(--navy); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow);
}
.not-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.not-x {
  display: grid; place-items: center; flex: none; width: 34px; height: 34px;
  border-radius: 50%; background: var(--red-soft); color: var(--red);
}
.not-x .icon { width: 20px; height: 20px; stroke-width: 3; }
.not-head h3 { font-size: 17px; font-weight: 700; line-height: 1.25; }
.not-head h3 span { color: var(--red); letter-spacing: .06em; margin-right: 4px; }
.not-card p { color: var(--muted); font-size: 16px; }

/* a short list with green tick bullets (home "not" tiles, content pages) */
.tick-list { display: grid; gap: 10px; margin-top: 10px; }
.tick-list li { position: relative; padding-left: 32px; line-height: 1.5; }
.tick-list li::before {
  content: ""; position: absolute; left: 0; top: .1em; width: 22px; height: 22px; border-radius: 50%;
  background: var(--green-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2312843F' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 13px 13px no-repeat;
}
.not-card .tick-list { color: var(--navy); font-size: 15.5px; }

.proud { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; text-align: center; padding: 6px 0; }
/* the one coral highlight on the page: a white card with a small coral offset, navy text */
.highlight {
  padding: 20px 24px; background: #fff; color: var(--navy);
  font-size: clamp(24px, 3vw, 30px); font-weight: 700; line-height: 1.15;
  border-radius: 30px 44px 34px 48px / 44px 32px 46px 34px;
  transform: rotate(-1.5deg);
  box-shadow: 5px 6px 0 var(--coral);
}
.proud p { color: #fff; font-weight: 600; }
.proud .highlight { color: var(--navy); }
.thumbs { position: relative; width: 104px; height: 104px; }
.thumbs img { width: 100%; height: 100%; object-fit: contain; background: #fff; border-radius: 50%; border: 4px solid #fff; box-shadow: var(--shadow); padding: 6px; }
.thumbs .thumb-badge {
  position: absolute; right: -10px; bottom: -4px; display: grid; place-items: center;
  width: 44px; height: 44px; border-radius: 50%; background: var(--green); color: #fff; border: 3px solid #fff;
}
.thumbs .thumb-badge .icon { width: 22px; height: 22px; }
@media (min-width: 720px) { .different-grid { grid-template-columns: 1fr 1fr; } .proud { grid-column: 1 / -1; flex-direction: row; justify-content: center; text-align: left; gap: 24px; } .proud-text { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; } }
@media (min-width: 1000px) {
  .different-grid { grid-template-columns: 1fr 1fr 1.25fr; align-items: stretch; }
  .proud { grid-column: auto; flex-direction: column; text-align: center; }
  .proud-text { align-items: center; }
}

/* ---------- section three: teachers + fact fluency (the near-white band) ---------- */
.teacher-grid { display: grid; gap: 40px; }
.teacher-left .inner { margin-top: 22px; }
.checklist { display: grid; gap: 14px; }
.checklist li { display: flex; gap: 12px; align-items: flex-start; font-size: 16px; }
.check-dot { display: grid; place-items: center; flex: none; width: 26px; height: 26px; margin-top: 1px; border-radius: 50%; background: var(--green-soft); color: var(--green); }
.check-dot .icon { width: 16px; height: 16px; stroke-width: 3; }
.checklist + .text-link { margin-top: 8px; }
@media (min-width: 700px) { .checklist { grid-template-columns: 1fr 1fr; gap: 14px 28px; } }
@media (min-width: 1100px) { .teacher-grid { grid-template-columns: 1.9fr 1fr; gap: 48px; } }

.fluency h2 { margin-bottom: 0; }
.fluency-list { display: grid; gap: 16px; margin-top: 20px; }
.fluency-list li { display: flex; gap: 14px; align-items: center; }
.circle-icon { display: grid; place-items: center; flex: none; width: 50px; height: 50px; border-radius: 50%; color: #fff; }
.circle-icon .icon { width: 26px; height: 26px; }
.ci-blue { background: var(--brand); }
.ci-green { background: var(--green); }
.ci-purple { background: var(--violet); }
.ci-orange { background: var(--berry); }
.fluency-list h3 { font-size: 17px; font-weight: 700; line-height: 1.2; }
.fluency-list p { font-size: 14.5px; line-height: 1.4; color: var(--muted); }

/* ---------- section four: why / how / classroom (the violet to berry band) ---------- */
.trio { display: grid; gap: 28px; }
.trio h2 { font-size: clamp(22px, 2.6vw, 28px); line-height: 1.2; font-weight: 700; }
.trio .lede { font-size: 16px; }
.steps { display: grid; gap: 12px; margin: 16px 0 6px; }
.steps li { display: flex; gap: 12px; align-items: flex-start; }
.step-num { display: grid; place-items: center; flex: none; width: 32px; height: 32px; border-radius: 50%; background: #fff; color: var(--violet); font-weight: 700; }
.steps li > span:last-child { padding-top: 3px; }
.class-card { padding: 22px; background: #fff; color: var(--navy); border: 1px solid var(--line); border-top: 5px solid var(--teal); border-radius: var(--radius); box-shadow: var(--shadow); }
.class-card .circle-icon { margin-bottom: 12px; }
.class-card h2 { font-size: 21px; }
.class-card p { margin-top: 8px; color: var(--muted); }
@media (min-width: 860px) { .trio { grid-template-columns: 1fr 1fr 1fr; gap: 36px; } }

/* ---------- section five: final call to action (the brand blue to violet band) ---------- */
.band-cta { background: linear-gradient(135deg, var(--brand) 0%, var(--violet) 100%); color: #fff; text-align: center; }
.band-cta .h2 { max-width: 760px; margin: 0 auto; color: #fff; }
.band-cta .btn-solid { background: #fff; color: var(--brand); border-color: #fff; }
.band-cta .btn-solid:hover { background: #EEF3FF; border-color: #EEF3FF; box-shadow: 0 4px 12px rgba(0, 0, 0, .18); }
.band-cta .btn-outline { background: transparent; color: #fff; border-color: #fff; }
.band-cta .btn-outline:hover { background: rgba(255, 255, 255, .14); }
.cta-buttons { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 22px; }
.cta-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 6px; margin-top: 10px; }
.cta-links li + li::before { content: "|"; color: #DCE3FF; margin-right: 6px; }
.cta-links li { display: flex; align-items: center; }
.band-cta .cta-links a { color: #fff; }
@media (max-width: 480px) { .cta-buttons .btn { width: 100%; } }

/* ---------- footer ---------- */
.site-footer { background: var(--navy); color: #fff; padding: 36px 0 30px; border-top: 6px solid var(--teal); }
.site-footer a { color: #fff; }
.footer-top { display: flex; flex-direction: column; gap: 18px; }
.footer-brand { display: inline-flex; align-items: center; gap: 10px; font-family: var(--font-brand); font-weight: var(--fw-brand); font-size: 21px; text-decoration: none; min-height: 44px; }
.footer-brand img { height: 38px; width: auto; background: #fff; border-radius: 50%; padding: 3px; }
.footer-links { display: flex; flex-wrap: wrap; gap: 0 8px; }
.footer-links a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 8px; text-decoration: none; font-weight: 600; border-radius: 8px; }
/* The Admin link: just a quiet gear, so teachers don't mistake it for a login of theirs. */
.footer-links a:hover { text-decoration: underline; text-underline-offset: 3px; }
@media (min-width: 980px) { .footer-top { flex-direction: row; align-items: center; justify-content: space-between; } }
.more-ways { margin-top: 18px; padding-top: 16px; border-top: 1px solid rgba(255, 255, 255, .18); }
.more-ways ul { display: flex; flex-wrap: wrap; gap: 0 4px; }
.more-ways a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 8px; font-size: 14px; color: rgba(255, 255, 255, .88); text-decoration: none; border-radius: 8px; }
.more-ways a:hover { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
@media (min-width: 1100px) {
  .more-ways ul { flex-wrap: nowrap; }
  .more-ways a { padding: 0 6px; white-space: nowrap; }
}

@media (max-width: 480px) {
  .nav-row { gap: 8px; }
  .brand { font-size: 21px; gap: 8px; }
  .brand img { height: 46px; }
}
@media (max-width: 380px) {
  .container { padding: 0 16px; }
  .game-grid { margin: 0 -16px; padding: 6px 16px 18px; scroll-padding-left: 16px; }
  .brand { font-size: 20px; gap: 8px; }
  .brand img { height: 44px; }
  .menu-btn { padding: 0 12px; }
  .btn-lg { padding: 0 22px; }
}
@media print { .site-header, .menu-btn { position: static; } }

/* CI check: a public/-only change should deploy only the web Worker. */

/* ---------- "We're building great things" line (home page, between the games and "not what you're used to") ---------- */
.build-line { background: var(--berry); color: #fff; }
.build-line-inner { display: flex; align-items: center; justify-content: center; gap: 12px 24px; flex-wrap: wrap; padding-top: 16px; padding-bottom: 16px; text-align: center; }
.build-line-text { font-size: 18px; font-weight: 600; line-height: 1.4; color: #fff; }
.build-line-text strong { font-weight: 700; }
@media (max-width: 520px) { .build-line-text { font-size: 16px; } .build-line-inner .btn { width: 100%; } }
.build-line .btn-solid { background: #fff; color: var(--berry); border-color: #fff; }
.build-line .btn-solid:hover { background: #F6E9F1; border-color: #F6E9F1; box-shadow: 0 4px 12px rgba(0, 0, 0, .18); }
.build-line-free { display: inline-block; margin: 2px 12px 0 0; font-size: 22px; font-weight: 700; }
.build-free-pill { display: inline-block; padding: 0 14px 2px; font-size: 26px; font-weight: 700; letter-spacing: .06em; line-height: 1.25; color: #fff; background: var(--green); border-radius: 999px; box-shadow: 0 3px 0 rgba(0, 0, 0, .22); transform: rotate(-2deg); }
@media (max-width: 520px) { .build-line-free { font-size: 19px; } .build-free-pill { font-size: 22px; } }

/* ---------- home page: the trust line under the hero, the "pick a game" heading, a smaller section heading, and a two-column version of the trio row ---------- */
.games-pick { margin: 6px 0 18px; }
.h2-sm { font-size: clamp(24px, 3vw, 30px); }
@media (min-width: 860px) { .trio.trio-two { grid-template-columns: 1fr 1fr; } }

/* the reassurance line: one thin row on its own, centered, wrapping on small screens */
.trust-strip { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 28px; margin: 4px 0 24px; padding: 9px 12px; border-top: 1px solid rgba(255, 255, 255, .35); border-bottom: 1px solid rgba(255, 255, 255, .35); }
.trust-strip li { display: flex; align-items: center; gap: 8px; color: #fff; font-size: 15px; font-weight: 600; }
.trust-strip .check-dot { width: 22px; height: 22px; margin-top: 0; background: #fff; color: var(--teal); }
.trust-strip .check-dot .icon { width: 14px; height: 14px; }
