/* ============================================================
   STEP SOLVER — the front page.

   TWO VOICES, ON PURPOSE.
   The app is built for a six-year-old: rounded, chunky, loud colour.
   This page is built for her parent, who is deciding whether to hand
   it to her. So the display face here is a SERIF and the app's rounded
   face carries everything else — related, plainly not the same room.

   NO WEBFONTS, NO CDN, NO ANALYTICS. The project's standing rule, and
   the reason it applies here too: a font that fails to load is a design
   that silently became a different design. Every face below is one the
   device already has.

   COLOUR IS BORROWED, NOT INVENTED. solver.css commits one hue per
   maths role — blue is the first quantity, mango the second, pink the
   remainder, mint the ANSWER. This page keeps that meaning: the bar
   model in the hero uses those hues because it is a real bar model,
   and mint is the accent everywhere else because the thing being sold
   is arriving at an answer. Nothing is coloured for decoration.
   ============================================================ */
:root{
  --paper:#FCF8F2;
  --paper2:#F5EDE1;
  --card:#FFFFFF;
  --ink:#17132B;
  --ink2:#4A4260;
  --ink3:#8A8199;
  --line:#E6DBCA;

  --blue:#3D5AFE;  --blue-w:#E6E9FF;
  --mango:#FF8A00; --mango-w:#FFEDD6;
  --pink:#F0387B;  --pink-w:#FFE2EC;
  --mint:#00B894;  --mint-d:#00806A;  --mint-w:#DAF7EF;

  --serif:ui-serif,"Iowan Old Style","Palatino Linotype",Palatino,Georgia,"Times New Roman",serif;
  --round:ui-rounded,-apple-system,"SF Pro Rounded","Avenir Next",system-ui,"Segoe UI",sans-serif;

  --wrap:1080px;
  --shadow:0 2px 0 rgba(23,19,43,.05), 0 18px 40px -26px rgba(23,19,43,.5);
}

*{box-sizing:border-box;margin:0;padding:0}
/* The `hidden` attribute is a UA-stylesheet `display:none`, so ANY author
   rule that sets display beats it — and .who and .signin both set one.
   Without this line the attribute is decorative and the sign-in chip shows
   on a page where nobody is signed in. */
[hidden]{display:none !important}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--round);
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
img,svg{max-width:100%}
a{color:var(--mint-d);text-underline-offset:3px}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px;border-radius:4px}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 24px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- masthead ---------- */
.top{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  /* padding-BLOCK, never the four-value shorthand. .top, .hero and .foot all also carry .wrap,
     whose whole job is the 24px gutter — and a shorthand `padding:20px 0 18px` written after it
     silently set that gutter back to zero. On a desktop the 1080px max-width hid it; on a phone
     the masthead, the headline and the footer all ran flush into both edges of the screen. */
  padding-block:20px 18px;
}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:inherit}
.brand .mk{
  width:38px;height:38px;border-radius:12px;background:var(--mint);color:#04241D;
  display:grid;place-items:center;font-weight:900;font-size:20px;flex-shrink:0;
  box-shadow:0 3px 0 var(--mint-d);
}
.brand b{font-size:18px;font-weight:800;letter-spacing:-.2px}
.nav{margin-left:auto;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.nav a{
  color:var(--ink2);text-decoration:none;font-weight:700;font-size:15px;
  padding:8px 12px;border-radius:999px;
}
.nav a:hover{background:var(--paper2);color:var(--ink)}
.nav a[aria-current]{color:var(--ink);background:var(--paper2)}

/* ---------- the sign-in control ---------- */
/* One button, one job. It is the only mint-filled thing on the page
   above the footer, so there is never a question about where to click. */
.signin{
  display:inline-flex;align-items:center;gap:10px;
  background:var(--mint);color:#04241D;border:0;border-radius:999px;
  padding:13px 22px;font:inherit;font-weight:800;font-size:16px;
  cursor:pointer;text-decoration:none;
  box-shadow:0 4px 0 var(--mint-d);
  transition:transform .12s ease, box-shadow .12s ease;
}
.signin:hover{transform:translateY(-1px);box-shadow:0 5px 0 var(--mint-d)}
.signin:active{transform:translateY(3px);box-shadow:0 1px 0 var(--mint-d)}
.signin.ghost{background:transparent;color:var(--ink);box-shadow:none;border:2px solid var(--line)}
.signin.ghost:hover{border-color:var(--ink3);transform:none;box-shadow:none}
.signin svg{flex-shrink:0}
.nav .signin{padding:9px 16px;font-size:15px}

/* The real Google button renders into this. It is left EMPTY until the
   library confirms it loaded — an empty box says "not available" far
   more honestly than a dead lookalike button would. */
#gbtn{min-height:0}
#gbtn:not(:empty){margin:2px 0}

.who{
  display:inline-flex;align-items:center;gap:10px;
  background:var(--mint-w);border:2px solid var(--mint);border-radius:999px;
  padding:6px 8px 6px 6px;font-size:14.5px;font-weight:700;color:var(--ink);
}
.who img{width:28px;height:28px;border-radius:999px;display:block}
.who button{
  background:none;border:0;font:inherit;font-size:13.5px;font-weight:700;
  color:var(--ink3);cursor:pointer;text-decoration:underline;padding:0 6px 0 2px;
}
.authnote{font-size:14px;color:var(--ink3);font-weight:600;margin-top:10px}
.authnote.bad{color:var(--pink)}

/* ---------- hero ---------- */
.hero{
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  gap:56px;align-items:center;
  padding-block:44px 64px;
}
.hero h1{
  font-family:var(--serif);
  font-size:clamp(38px,5.4vw,60px);
  line-height:1.04;letter-spacing:-1.4px;font-weight:600;
  text-wrap:balance;
}
.hero h1 em{font-style:italic;color:var(--mint-d)}
.lede{margin-top:20px;font-size:19px;color:var(--ink2);max-width:34em;line-height:1.62}
.cta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:28px}
.fineprint{margin-top:14px;font-size:14.5px;color:var(--ink3);font-weight:600}

/* ---------- the bar model in the hero ---------- */
/* Not an illustration OF the product — an actual worked step from it,
   in the app's own role colours. If a parent cannot tell from this
   what their child would be looking at, the picture has failed. */
.figure{
  background:var(--card);border:2px solid var(--line);border-radius:22px;
  padding:24px 24px 20px;box-shadow:var(--shadow);
}
.figure .q{
  font-size:15.5px;font-weight:700;color:var(--ink2);line-height:1.5;
  padding-bottom:16px;margin-bottom:18px;border-bottom:2px dashed var(--line);
}
.figure figcaption{
  margin-top:16px;font-size:14px;color:var(--ink3);font-weight:700;
  display:flex;align-items:center;gap:8px;
}
.figure figcaption .dot{width:8px;height:8px;border-radius:99px;background:var(--mint)}

/* ---------- band ---------- */
.band{border-top:2px solid var(--line);padding:60px 0}
.band.tint{background:var(--paper2)}
.band h2{
  font-family:var(--serif);font-weight:600;letter-spacing:-.8px;
  font-size:clamp(27px,3.6vw,38px);line-height:1.12;text-wrap:balance;
}
.band .sub{margin-top:14px;color:var(--ink2);font-size:18px;max-width:44em}
.eyebrow{
  font-size:12.5px;font-weight:800;letter-spacing:1.8px;text-transform:uppercase;
  color:var(--ink3);margin-bottom:14px;
}

/* ---------- feature cards ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(268px,1fr));gap:18px;margin-top:36px}
.card{
  background:var(--card);border:2px solid var(--line);border-radius:20px;
  padding:24px 24px 26px;
}
.card h3{font-size:19px;font-weight:800;letter-spacing:-.3px;margin:16px 0 9px}
.card p{color:var(--ink2);font-size:16px}
.card .ico{width:44px;height:44px;border-radius:14px;display:grid;place-items:center}
.card .ico svg{display:block}

/* ---------- the four steps ---------- */
/* Numbered because a lesson genuinely IS a sequence — the order is the
   teaching. Numbers on anything unordered would be decoration. */
.steps{counter-reset:s;display:grid;gap:2px;margin-top:36px}
.step{
  display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:baseline;
  padding:22px 4px;border-bottom:2px solid var(--line);
}
.step:last-child{border-bottom:0}
.step::before{
  counter-increment:s;content:counter(s,decimal-leading-zero);
  font-family:var(--serif);font-size:26px;color:var(--ink3);
  font-variant-numeric:tabular-nums;line-height:1;
}
.step h3{font-size:18.5px;font-weight:800;letter-spacing:-.2px}
.step p{color:var(--ink2);font-size:16px;margin-top:6px;max-width:52em}

/* ---------- numbers ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:18px;margin-top:34px}
.stat{background:var(--card);border:2px solid var(--line);border-radius:18px;padding:20px 22px}
.stat b{
  display:block;font-family:var(--serif);font-size:40px;line-height:1;
  font-weight:600;letter-spacing:-1.5px;font-variant-numeric:tabular-nums;
}
.stat span{display:block;margin-top:9px;font-size:14.5px;font-weight:700;color:var(--ink2)}

/* ---------- prose (features / privacy / terms) ---------- */
.prose{max-width:38em;padding:14px 0 20px}
.prose h2{
  font-family:var(--serif);font-weight:600;letter-spacing:-.6px;
  font-size:26px;margin:38px 0 12px;line-height:1.2;
}
.prose h3{font-size:17.5px;font-weight:800;margin:26px 0 8px}
.prose p{margin:12px 0;color:var(--ink2)}
.prose ul{margin:12px 0 12px 22px;color:var(--ink2)}
.prose li{margin:7px 0}
.prose strong{color:var(--ink)}
.prose .updated{font-size:14.5px;color:var(--ink3);font-weight:700}

/* ---------- faq ---------- */
.faq{margin-top:32px;max-width:44em}
.faq details{border-bottom:2px solid var(--line);padding:16px 0}
.faq summary{
  font-weight:800;font-size:17px;cursor:pointer;list-style:none;
  display:flex;align-items:center;gap:12px;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{
  content:"+";margin-left:auto;font-size:22px;color:var(--ink3);font-weight:600;line-height:1;
}
.faq details[open] summary::after{content:"–"}
.faq p{color:var(--ink2);margin-top:10px;font-size:16px}

/* ---------- footer ---------- */
.foot{
  border-top:2px solid var(--line);margin-top:0;padding-block:34px 54px;
  display:flex;gap:18px;flex-wrap:wrap;align-items:center;
  font-size:14.5px;color:var(--ink3);font-weight:600;
}
.foot a{color:var(--ink2);text-decoration:none}
.foot a:hover{text-decoration:underline}
.foot .sp{margin-left:auto}

@media (max-width:860px){
  .hero{grid-template-columns:1fr;gap:36px;padding-block:26px 48px}
  .band{padding:46px 0}
  .nav a{padding:8px 9px}
}
@media (prefers-reduced-motion:reduce){
  *{transition:none !important;animation:none !important}
}

/* Mini-games teaser on the front page: the games' own sprites, the app's rounded face. */
.worlds{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;max-width:640px;margin:18px 0 0}
.worlds a{display:grid;justify-items:center;gap:6px;text-decoration:none;color:var(--ink);font-family:var(--round);font-weight:800;font-size:14px;
          background:var(--card);border:1.5px solid var(--line);border-radius:18px;padding:12px 8px 10px;transition:transform .2s,border-color .2s}
.worlds a:hover{transform:translateY(-3px);border-color:var(--mint)}
.worlds img{height:72px;width:auto;max-width:100%;object-fit:contain;filter:drop-shadow(0 5px 6px rgba(23,19,43,.22))}
@media (max-width:600px){.worlds{grid-template-columns:repeat(2,1fr)}}
